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