Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: SRSBUTL

SRSBUTL.m

Go to the documentation of this file.
  1. SRSBUTL ;B'HAM ISC/MAM - BLOCK OUT TIME ON OR SCHEDULE UTILITY; [ 08/14/09 11:36 AM ]
  1. ;;3.0; Surgery ;**165**;24 Jun 93;Build 6
  1. BLOCKED ; find blocked OPERATING ROOMS
  1. S SRBDT=DT,SRBCNT=0,SRBOR=SRSOR,SRBDAY=SRSDAY
  1. S X1=SRBDT,X2=-1 D C^%DTC S SRBDT=X
  1. F S SRBDT=$O(^SRS(SRBOR,"S",SRBDT)) Q:SRBDT="" D
  1. .S SRBCNT=SRBCNT+1
  1. .Q:'$D(^SRS(SRBOR,"S",SRBDT,1))
  1. .S SRBST=""
  1. .F S SRBST=$O(^SRS("R",SRBDAY,SRBOR,SRBST)) Q:SRBST="" D
  1. ..S SRBN=""
  1. ..F S SRBN=$O(^SRS("R",SRBDAY,SRBOR,SRBST,SRBN)) Q:SRBN="" D
  1. ...S SRBET=$P(^SRS("R",SRBDAY,SRBOR,SRBST,SRBN),"^",4)
  1. ...S SRBSERV=$P(^SRS("R",SRBDAY,SRBOR,SRBST,SRBN),"^",5)
  1. ...S SRB1=+SRBST,SRB2=+SRBET
  1. ...D PTRNALG ; algorithm for setting start and end of pattern
  1. ...S SRBNUM=$S(SRBN=0:3,SRBN>7&(SRBN<10):2,1:1)
  1. ...I $G(^SRS(SRBOR,"S",SRBDT,1))[SRBS S ^TMP($J,"SRSBOUT",SRBDT,SRBNUM,SRBST)=SRBSERV_"^"_SRBN_"^"_SRBET
  1. K SRB1,SRB2,SRBCNT,SRBDAY,SRBDT,SRBET,SRBI,SRBNUM,SRBN,SRBS,SRBSERV,SRBST,X,X1,X2
  1. Q
  1. CHK ;; CHECK FOR EXISTING BLOCKS
  1. S SRBOR=SRSOR,SRBDT=SRSDATE,SRBTIME=SRSTIME,SRBNUM=SRSNUM
  1. S SRB1=$P(SRBTIME,"^"),SRB2=$P(SRBTIME,"^",2),SRB1=$E(SRB1,1,2)_"."_$E(SRB1,4,5),SRB2=$E(SRB2,1,2)_"."_$E(SRB2,4,5)
  1. S SRBEN1=SRB1,SRBEN2=SRB2,SRBFLG=1,X=0 D CHKD
  1. CK1 I SRBNUM=0 S X=7 D CHKD G:X CK1
  1. CK2 I SRBNUM>7 S X=14 D CHKD G:X CK2
  1. CK0 I SRBNUM>0,(SRBNUM<5) S X5=$E(SRBDT,4,5),X1=SRBDT,X2=7 D C^%DTC S SRBDT=X G:$E(X,4,5)=X5 CK0
  1. CK3 I SRBNUM>0,(SRBNUM<5) S X=SRBNUM-1*7 D CHKD G:X CK0
  1. CK5 I SRBNUM=5 S X1=SRBDT,X2=21 D C^%DTC S SRBDT=X
  1. CK4 I SRBNUM=5 S X1=SRBDT,X2=7,X5=$E(SRBDT,4,5) D C^%DTC S SRBDT=X G:$E(SRBDT,4,5)=X5 CK4 S X=-7 D CHKD G:X CK5
  1. END S SRBDT="" F S SRBDT=$O(SRBCHK(SRBDT)) Q:'SRBDT S:SRBCHK(SRBDT)=0 SRBFLG=0
  1. K SRB1,SRB2,SRBDT,SRBEN1,SRBEN2,SRBNMB,SRBNUM,SRBST,SRBET,SRBTIME,X5
  1. Q
  1. CHKD S X1=SRBDT,X2=X D C^%DTC S SRBDT=X
  1. S:'$G(^SRS(SRBOR,"S",SRBDT,0)) X=0
  1. S SRBCHK(SRBDT)=0
  1. I $D(^TMP($J,"SRSBOUT",SRBDT)) D
  1. .S SRBNMB=""
  1. .F S SRBNMB=$O(^TMP($J,"SRSBOUT",SRBDT,SRBNMB)) Q:'SRBNMB D
  1. ..S (SRBST,SRBET)=""
  1. ..F S SRBST=$O(^TMP($J,"SRSBOUT",SRBDT,SRBNMB,SRBST)) Q:'SRBST D
  1. ...S SRBET=$P(^TMP($J,"SRSBOUT",SRBDT,SRBNMB,SRBST),"^",3)
  1. ...I (SRBST'<SRBEN1)&(SRBST<SRBEN2)!((SRBET>SRBEN1)&(SRBET'>SRBEN2))!((SRBEN1'<SRBST)&(SRBEN1<SRBET)) S SRBCHK(SRBDT)=1
  1. Q
  1. DIS1 ;CHECK AND SET NEW SERVICE BLOCK
  1. S SRBOR=SROR,SRBDT=SRSDATE
  1. S X1=SRBDT,X2=2830103 D ^%DTC S SRBDAY=$P("MO^TU^WE^TH^FR^SA^SU","^",X#7+1),X3=X#2+8 S X1=SRBDT,X2=$E(SRBDT,1,5)_"01" D ^%DTC S SRBDY=X\7+1
  1. S:'$G(SRBSER1) SRBSER1=""
  1. S SRBCNTR=0
  1. S SRBST=0 F S SRBST=$O(^SRS("R",SRBDAY,SRBOR,SRBST)) Q:SRBST="" D
  1. .S SRBN="" F S SRBN=$O(^SRS("R",SRBDAY,SRBOR,SRBST,SRBN)) Q:SRBN="" D
  1. ..S SRBET=$P(^SRS("R",SRBDAY,SRBOR,SRBST,SRBN),"^",4),SRBSER=$P(^SRS("R",SRBDAY,SRBOR,SRBST,SRBN),"^",5)
  1. ..S:SRBSER1'=SRBSER SRBCNTR=SRBCNTR+1,SRBSTM(SRBCNTR)=SRBST,SRBETM(SRBCNTR)=SRBET,SRBS1(SRBCNTR)=$P(^SRS("R",SRBDAY,SRBOR,SRBST,SRBN),"^",2)
  1. S SRBCTR3=0,SRB=0
  1. F SRBCTR1=1:1:3 D
  1. .F SRBCTR2=1:1:SRBCNTR D
  1. ..S SRBNUMB=$E(SRBS1(SRBCTR2),3)
  1. ..I SRBCTR1=3,SRBNUMB=0 D UPDATE
  1. ..I SRBCTR1=2,SRBNUMB=X3 D UPDATE
  1. ..I SRBCTR1=1,SRBNUMB=SRBDY D UPDATE
  1. I '$G(SRBPRG) K SRBCNT,SRBDT,SRBOR,SRBPRG,SRBSER1
  1. K SRB,SRBCNTR,SRBCTR1,SRBCTR2,SRBCTR3,SRBDAY,SRBDY,SRBET,SRBET1,X3
  1. K SRBARRY,SRBETM,SRBN,SRBNUMB,SRBS,SRBS1,SRBS2,SRBSER,SRBSERV,SRBST,SRBST1,SRBSTM
  1. Q
  1. UPDATE ;CHECK AND SET SERVICE BLOCK
  1. I $D(^SRS(SRBOR,"S",SRBDT)),$G(^SRS(SRBOR,"S",SRBDT,1))["X" S SRBCTR3=1,SRB=1
  1. I '$G(SRBCTR3),'$D(^SRS(SRBOR,"S",SRBDT)) D S^SRSBOUT
  1. S SRBST1=SRBSTM(SRBCTR2),SRBET1=SRBETM(SRBCTR2),SRSNUM=SRBNUMB,(SRBCTR3,SRBFLG)=1
  1. S SRBSERV=$P(^SRS("R",SRBDAY,SRBOR,SRBST1,SRBNUMB),"^",5)
  1. S SRBARRY(SRBDT,SRBSERV)=SRBST1_"^"_SRBET1
  1. D CHECK I 'SRB D SET
  1. I SRBFLG,SRB S SRB1=SRBST1,SRB2=SRBET1 D PATRN
  1. Q
  1. SET ;SET SERVICE BLOCK GRAPH
  1. I 'SRBFLG Q
  1. S SRB1=SRBST1,SRB2=SRBET1,SRBI=""
  1. D PTRNALG ;; algorithm for setting start and end of pattern
  1. S SRBX1=^SRS(SROR,"S",SRSDATE,1),^(1)=$E(SRBX1,1,SRB1)_SRBS_$E(SRBX1,SRB2+1,200),^SRS(SROR,"SS",SRSDATE,1)=^(1),^SRS(SROR,"S",SRSDATE,0)=SRSDATE,^SRS(SROR,"SS",SRSDATE,0)=SRSDATE
  1. K SRB1,SRB2,SRBI,SRBX1
  1. Q
  1. CHECK ;CHECK FOR TIME COLLISION
  1. S SRBSER2="" F S SRBSER2=$O(SRBARRY(SRBDT,SRBSER2)) Q:SRBSER2="" D
  1. .S SRBS1=$P(SRBARRY(SRBDT,SRBSER2),"^",1),SRBS2=$P(SRBARRY(SRBDT,SRBSER2),"^",2)
  1. .Q:SRBSER2=SRBSERV
  1. .I (SRBS1'<SRBST1)&(SRBS1<SRBET1)!((SRBS2>SRBST1)&(SRBS2'>SRBET1))!((SRBST1'<SRBS1)&(SRBST1<SRBS2)) S SRBFLG=0
  1. K SRBSER2
  1. Q
  1. DELCHK(SRBDAY) ; CHECK FOR OVERLAPING BLOCK FOR THE DELETED DAY
  1. S SRBDT=SRSDATE,SRBOR=SRSOR,SRBNUM=SRSNUM,SRBST=""
  1. F S SRBST=$O(^SRS("R",SRBDAY,SRBOR,SRBST)) Q:SRBST="" D
  1. .Q:'$D(^SRS("R",SRBDAY,SRBOR,SRBST,SRBNUM))
  1. .S SRBSERV=$P(^SRS("R",SRBDAY,SRBOR,SRBST,SRBNUM),"^",5),SRBET=$P(^SRS("R",SRBDAY,SRBOR,SRBST,SRBNUM),"^",4)
  1. .S SRB1=+SRBST,SRB2=+SRBET
  1. .D PTRNALG
  1. .I SRBS'=SRBCKH,$G(^SRS(SRBOR,"S",SRBDT,1))'[SRBS S SRB1=+SRBST,SRB2=+SRBET D PATRN
  1. K SRB1,SRB2,SRBDAY,SRBDT,SRBNUM,SRBOR,SRBET,SRBST,SRBSERV,SRBS,SRBI,SRBTS,SRBTE,X,X0,X1
  1. Q
  1. PATRN ; set pattern in OPERATING ROOM file
  1. D PTRNALG ;; algorithm for setting start and end of pattern
  1. S SRBX0=^SRS(SRBOR,"SS",SRBDT,1),(SRBX0,^(1))=$E(SRBX0,1,SRB1)_SRBS_$E(SRBX0,SRB2+1,200),^SRS(SRBOR,"SS",SRBDT,0)=SRBDT
  1. S SRBX1=^SRS(SRBOR,"S",SRBDT,1) F SRBI=SRB1:1:SRB2 I "X="'[$E(SRBX1,SRBI) S SRBX1=$E(SRBX1,1,SRBI-1)_$E(SRBX0,SRBI)_$E(SRBX1,SRBI+1,200)
  1. S ^SRS(SRBOR,"S",SRBDT,1)=SRBX1,^SRS(SRBOR,"S",SRBDT,0)=SRBDT
  1. K SRB1,SRB2,SRBX0,SRBX1
  1. Q
  1. PTRNALG ; set pattern in OPERATING ROOM file
  1. ; algorithm for setting start and end of pattern
  1. S SRB1=11+((SRB1\1)*5)+(SRB1-(SRB1\1)*100\15),SRB2=11+((SRB2\1)*5)+(SRB2-(SRB2\1)*100\15)
  1. S SRBS="" F SRBI=SRB1:1:SRB2-1 S SRBS=SRBS_$S('(SRBI#5):"|",$E(SRBSERV,SRBI#5)'="":$E(SRBSERV,SRBI#5),1:".")
  1. Q
  1. CURRENT ; ENSURE SERVICE BLOCK GRAPH IS UP TO DATE
  1. S SRBOR=0 F S SRBOR=$O(^SRS(SRBOR)) Q:'SRBOR D
  1. .Q:$P(^SRS(SRBOR,0),"^",6)=1
  1. .S SRBCNT=0 F SRBCNT=0:1:90 S X1=DT,X2=SRBCNT D C^%DTC S SRBDT=X D:'$D(^SRS(SRBOR,"S",SRBDT,1)) GRAPH^SRSDIS1(SRBDT,SRBOR)
  1. K SRBCNT,SRBDT,SRBOR,X,X1,X
  1. Q