SDCLAV1 ;ALB/LDB - OUTPUT PATTERNS (cont.) ; 9/1/00 10:57am
;;5.3;Scheduling;**140,167,168,76,383,463,490,517,533,509,674,726**;Aug 13, 1993;Build 36
;
;PATCH 383 STOPPED REPORT FROM CREATING AVAILIBILTY-TEH
;
S2 N I1,SC,SDAV,SDMED,SI,SL,SM,SS,STARTDAY,SDDD,YCNT,SDFRST
S P=0 F D=0:0 S D=$O(^UTILITY($J,"SDNMS",D)) Q:D'>0!(SDUP) S SDV="",SDZ2=SDBD F X5=0:0 S SDV=$O(^UTILITY($J,"SDNMS",D,SDV)) Q:SDV=""!SDUP S SDC=$P(^UTILITY($J,"SDNMS",D,SDV),"^",3) D S ;Q:SDUP ;D WR ;,SS
Q
S1 S SD=^SC(SDC,0),D=$S($P(SD,"^",15):$P(SD,"^",15),1:$P(^DG(43,1,"GL"),"^",3)),SD5=0,SDNM=$P(SD,"^")
S $P(^UTILITY($J,"SDNMS",D,SDNM),"^",3)=SDC Q
S I '$D(^SC(SDC,"SL")) D SDM,HDR W !!,"THIS CLINIC DOES NOT HAVE APPT. LENGTH" Q
S (SDZ,SDZ2)=SDBD D SDM,HDR,TIME S SDZ=SDBD-1,SD0=0,SDMED=SDED+.9
N X,SDSOH S SC=+SDC,SL=^SC(SC,"SL"),X=$P(SL,U,3),STARTDAY=$S($L(X):X,1:8),X=$P(SL,U,6),SI=$S(X="":4,X<3:4,X:X,1:4),X=SDBD,SDSOH=$P(SL,"^",8),SM=$S($E(X,4,5)[12:$E(X,1,3)+1_"01",1:$E(X,1,3)_$E(X,4,5)+1)_"00",SDZ=SDBD
N POP S POP=0 ;SD/517
LOOP D SDM D:0&$E(SDZ,2,5)=$E(SDZ1,2,5) MON I $E(SDZ,2,5)'=$E(SDZ1,2,5) I 'SDUP D X1 I 'SDUP D A I 'SDUP D:SD0!($E(IOST,1,2)="C-") 3 I 'SDUP D WR I 'SDUP,$E(IOST,1,2)="C-" D 3
D:POP MSG ;SD/517
I 'SDUP I X<SDED S (X,SDZ2)=$S($E(X,4,5)=12:$E(X,1,3)+1_"01",1:$E(X,1,5)+1)_"01",SDZ=X D SDM,HDR,TIME G LOOP
D:POP MSG ;SD/517
Q
;
MSG ;Added SD/517
D WARN
Q
;
SS Q:SDUP S SDZ=SDZ1,SD5=1
D A Q:SDUP D 3 Q:SDUP D WR Q:SDUP D:$E(IOST,1,2)="C-" 3 Q
MON Q:'$D(^SC(+SDC,"ST",SDZ,1)) S SDPT=^SC(+SDC,"ST",SDZ,1) D SDPT1
Q
SDPT1 I YCNT+6>IOSL D:$E(IOST,1,2)="C-" 3 Q:SDUP D HDR,TIME
W !,SDPT S SDAP=SDZ-1 F Z=1:1 S SDAP=$O(^SC(SDC,"S",SDAP)) Q:SDAP'>0!(SDAP>(SDZ+.9999))!SDUP D NM^SDCLAV0
D YCNT
Q
TIME ;SD/533 $Select defaults to 8 when Z5=0, so a Midnight to 8am clinic
;incorrectly prints available hours as 8am to 4pm instead of 0 to 8am
;Two new lines added to fix this and linetag T1 added at Write command
;S Z5=$P(^SC(+SDC,"SL"),U,3),SDT=$S(Z5:Z5,1:8),Z5=$P(^("SL"),U,6),SDI=$S(Z5="":4,Z5<3:4,Z5:Z5,1:4)
S Z5=$P(^SC(+SDC,"SL"),U,3) I Z5=0 S SDT=0,Z5=$P(^("SL"),U,6),SDI=$S(Z5="":4,Z5<3:4,Z5:Z5,1:4) G T1
S SDT=$S(Z5:Z5,1:8),Z5=$P(^SC(+SDC,"SL"),U,6),SDI=$S(Z5="":4,Z5<3:4,Z5:Z5,1:4)
T1 W !!," TIME",?SDI+SDI-1 F Z6=SDT:1:65\(SDI+SDI)+SDT W $E("|"_$S('Z6:0,1:(Z6-1#12+1))_" ",1,SDI+SDI)
W !," DATE",?SDI+SDI-1,"|" K J F Z7=0:1:6 I $D(^SC(+SDC,"T"_Z7)) S J(Z7)=""
S YCNT=YCNT+3
F Z8=1:1:65\(SDI+SDI) W $J("|",SDI+SDI)
Q
WR N X S (Y3,X1,SDC1,SD0)=0,C=SDZ2
F S8=C:0 S SDC1=SDC1+1,C=$O(^UTILITY($J,"SDNMS",D,SDV,C)) Q:C'>0!(C>SDMED&('SD5))!SDUP S SD0=1 D:SDC1=1 HDR1 S X=C D DW^%DTC S Y=C X ^DD("DD") S Y1=$P(Y,"@"),Y2=$P(Y,"@",2),X9=X W:Y1'=Y3 !!,?1,X9,?11,Y1 D WR1 Q:SDUP
Q:SDUP I 'SD0 D HDR1 W !!,"No appointments scheduled"
D:SD0 WR2 S SDZ2=SDZ Q ;SD/517
WR1 S X4="" F X1=0:0 S X4=$O(^UTILITY($J,"SDNMS",D,SDV,C,X4)) Q:X4=""!SDUP S X6="" F X2=0:0 S X6=$O(^UTILITY($J,"SDNMS",D,SDV,C,X4,X6)) Q:X6="" D W1
Q
;
WR2 ;Added SD/517
D 3 W @IOF D HDR1,DAT
D A1^SDCLAV
Q
;
HDR N X D NOW^%DTC S Y=$E(%,1,12) X ^DD("DD") S YCNT=1 W @IOF,!?52,Y D:$E(IOST,1,2)="P-" PG^SDCLAV
I $D(^DG(43,1,"GL")),$P(^("GL"),"^",2) W !?30,$P(^DG(40.8,D,0),"^")
W !?30,SDV,!?30,SDM," ",($E(SDZ,1,3)+1700) S YCNT=4 Q
HDR1 S SDZ2=$S(SDZ2=0:SDBD,SDZ2>SDED:SDED,1:SDZ2) W !!,?30,SDV,!,?30,$P(SDM1,"^",+$E(SDZ2,4,5))," ",($E(SDZ2,1,3)+1700) S YCNT=YCNT+3 Q
SDM S SDM1="JANUARY^FEBRUARY^MARCH^APRIL^MAY^JUNE^JULY^AUGUST^SEPTEMBER^OCTOBER^NOVEMBER^DECEMBER",SDM=$P(SDM1,"^",+($E(SDZ,4,5))) Q
W S SDUT=^UTILITY($J,"SDNMS",D,SDV,C,X4,X6) S D1="" F D8=2,3 S D1=$S($P(SDUT,"^",D8)]"":$P(SDUT,"^",D8),1:"")_D1
W D1 Q
W1 ;added next 2 lines and changed 3rd line SD/517
S X=C X ^DD("FUNC",2,1) ;SD*509 added DO next line to delete corrupt node
I +^UTILITY($J,"SDNMS",D,SDV,C,X4,X6)=0 D Q:X4="UNKNOWN" S X="**WARNING** "_X D W2 Q
.Q:X4'="UNKNOWN"
.S N1=^UTILITY($J,"SDNMS",D,SDV,C,X4,X6),SDC=$P(N1,U,2),SDAP1=$P(N1,U,3)
.S DA(2)=SDC,DA(1)=C,DA=SDAP1
.S DIK="^SC("_DA(2)_",""S"","_DA(1)_",1," D ^DIK
.K DA,DIK,N1
.Q
D TAB W:T ?10 W:'T ?11 W X,?20,X4,?51,X6 D MIN W ?61,"("_M1_") MINUTES" D W S Y3=Y1,X1=X9 I YCNT+6>IOSL D 3 Q:SDUP D HDR1,DAT
Q
;
W2 ;added SD/517
S POP=1
D TAB W:T ?1 W:'T ?2 W X,?23,X4,?51,X6 D MIN W ?61,"("_M1_") MINUTES" D W S Y3=Y1,X1=X9 I YCNT+6>IOSL D 3 Q:SDUP D HDR1,DAT
Q
WARN ;added SD/517
W @IOF,! D:$E(IOST,1,2)="P-" PG^SDCLAV
D HDR1,DAT
W !!,"*************************************************************************"
W !,"* WARNING: There is a data inconsistency or data corruption problem *"
W !,"* with one or more of the above appointments. These appointments will *"
W !,"* have WARNING displayed to the left of the time. Corrective action *"
W !,"* needs to be taken. Please cancel any of the appointments above, which *"
W !,"* have the WARNING display. If any of them are valid appointments, they *"
W !,"* will have to be re-entered via Appointment Management. *"
W !,"**************************************************************************"
D 3
S POP=0
Q
;
3 N X I $E(IOST,1,2)="C-" F X=$Y:1:IOSL-6 W ! D YCNT
I R !!,"PRESS RETURN TO CONTINUE OR ^ TO QUIT ",SDU:DTIME S:SDU="^"!('$T) SDUP=1
I YCNT+6'<IOSL,'SDUP W @IOF,! S YCNT=1 D:$E(IOST,1,2)="P-" PG^SDCLAV Q
Q
A N X D:YCNT+13>IOSL 3 Q:SDUP D INAC^SDCLAV W !!!,"FOR CLINIC AVAILABILITY PATTERNS:"
W !!?4,"0-9 and j-z",?15," --denote available slots where j=10,k=11...z=26",!?12,"A-W",?15," --denote overbooks with A being the first slot to be overbooked",!?18,"and B being the second for that same time, etc."
W !?6,"*,$,!,@,#",?15," --denote overbooks or appts. that fall outside of a clinic's",!?18,"regular hours" S YCNT=YCNT+8 Q
TAB W ! S:$L(X)>7 T=1 S:$L(X)<8 T=0 D YCNT Q
MIN S M1=+^UTILITY($J,"SDNMS",D,SDV,C,X4,X6) Q
DAT I $E($O(^UTILITY($J,"SDNMS",D,SDV,C)),2,7)=$E(C,2,7) W !,?1,X1,?11,Y1 D YCNT
Q
X1 S X1=X\100_$P("31^28^31^30^31^30^31^31^30^31^30^31",U,$E(X,4,5))
S X1=$$LEAP(X1) I X1>SDED S X1=SDED
S SDMED=X1+.9,SDAP=X-.01 F S SDAP=$O(^SC(SDC,"S",SDAP)) Q:SDAP'>0!(SDAP>(X1+.9999))!SDUP D NM^SDCLAV0
D DOW S SDDD=Y
WW ;
I '$D(^SC(+SC,"ST",X,1)),$$CHKDT() S Y=SDDD#7 G L:'$D(J(Y)),H:$D(^HOLIDAY(X))&('SDSOH) S SS=+$O(^SC(+SC,"T"_Y,X)) G L:SS'>0,L:^(SS,1)="" D
.S ^SC(+SC,"ST",$P(X,"."),1)=$E($P($T(DAY),U,Y+2),1,2)_" "_$E(X,6,7)_$J("",SI+SI-6)_^(1),^(0)=$P(X,".")
;SD*5.3*490 added GOTO command so dates prior to clinic start date no
;longer display on grid
S SDAV=1 D:X>SM WM I $D(^SC(+SC,"ST",X,1)),^(1)["["!(^(1)["CANCELLED")!($D(^HOLIDAY(X))) G:X<$O(^SC(+SC,"T",0)) L W !,$E(^SC(+SC,"ST",X,1),1,80) D YCNT S:'$D(^HOLIDAY(X))&('SDAV) SDAV=1
I YCNT+6>IOSL D 3 Q:SDUP D HDR
L S X=X+1,SDDD=SDDD+1
G WW:X'>X1 Q
;
WM W !?36 S Y=$E(X,1,5)_"00",SM=$S($E(X,4,5)[12:$E(X,1,3)+1_"01",1:$E(X,1,3)_$E(X,4,5)+1)_"00" D YCNT
DT W $$FMTE^XLFDT(Y) Q
;
DOW S Y=$$DOW^XLFDT(X,1) Q
YCNT S YCNT=YCNT+1 Q
;
DAY ;;^SUN^MON^TUES^WEDNES^THURS^FRI^SATUR
DIFF S X1=SDRE,X2=X D ^%DTC S SDDD=SDDD+X,X=SDRE,X1=X\100_28 Q
H S ^SC(+SC,"ST",X,1)=" "_$E(X,6,7)_" "_$P(^(X,0),U,2),^(0)=X G WW
;
LEAP(SDEOM) ;Check for leap year, adjust if indicated
;Input: SDEOM=end of month date to adjust for leap year
Q:$E(SDEOM,4,5)'="02" SDEOM ; only adjust February
N SDLEAP
S SDLEAP=$$FMADD^XLFDT(SDEOM,1)
Q $S($E(SDLEAP,4,5)="02":SDLEAP,1:SDEOM)
CHKDT() ;
N Y,RET,SDFA
I '$D(SDFRST(D,+SC)) D
.; Create array of days that have a current template.
.N %H,X,SDFMTDAY,SDAYCNT,SDAYI,SDST,SDAYCHK,SDAYNAM,SDAYNUM,SDBEGO,SDCNT
.S %H=$H
.D YX^%DTC S SDFMTDAY=X
.S SDAYCNT=0,SDBEGO="" ;Initialize SDBEGO - SD*5.3*726
.F SDAYI=0:1:6 D
..Q:'$D(^SC(+SC,"T"_SDAYI))
..S SDCNT=0 F S SDCNT=$O(^SC(+SC,"T"_SDAYI,SDCNT)) Q:'SDCNT S SDBEGO=SDBEGO_U_SDCNT ;Set SDBEGO to determine begin dates - SD*5.3*726
..I $O(^SC(+SC,"T"_SDAYI,""),-1)'<SDFMTDAY S SDFRST(D,+SC,SDAYI)="",SDAYCNT=SDAYCNT+1
.; Calculate first available date for each day that has current template.
.S SDST=0,SDAYCHK=0
.F S SDST=$O(^SC(+SC,"ST",SDST)) Q:SDST=""!(SDAYCHK=SDAYCNT) D
..S SDAYNAM=$E($G(^SC(+SC,"ST",SDST,1)),1,2)
..S SDAYNUM=$S(SDAYNAM="MO":1,SDAYNAM="TU":2,SDAYNAM="WE":3,SDAYNAM="TH":4,SDAYNAM="FR":5,SDAYNAM="SA":6,SDAYNAM="SU":0,1:"")
..Q:SDAYNUM=""
..Q:$G(SDFRST(D,+SC,SDAYNUM))'=""
..Q:'$D(^SC(+SC,"T"_SDAYNUM))
..I $D(^SC(+SC,"OST",SDST)),(SDBEGO'[SDST) Q ;Quit if non-indefinite schedule and not a begin date, SD*5.3*674 and SD*5.3*726
..S SDFRST(D,+SC,SDAYNUM)=SDST,SDAYCHK=SDAYCHK+1
; Get first avail date from array for particular day of week
S Y=SDDD#7,RET=0
S SDFA=$G(SDFRST(D,+SC,Y))
I SDFA'="" D
.S SDFA=$S(+$H>SDFA:+$H,1:SDFA)
.I X'<SDFA S RET=1
Q RET
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDCLAV1 8830 printed Oct 16, 2024@18:49:41 Page 2
SDCLAV1 ;ALB/LDB - OUTPUT PATTERNS (cont.) ; 9/1/00 10:57am
+1 ;;5.3;Scheduling;**140,167,168,76,383,463,490,517,533,509,674,726**;Aug 13, 1993;Build 36
+2 ;
+3 ;PATCH 383 STOPPED REPORT FROM CREATING AVAILIBILTY-TEH
+4 ;
S2 NEW I1,SC,SDAV,SDMED,SI,SL,SM,SS,STARTDAY,SDDD,YCNT,SDFRST
+1 ;Q:SDUP ;D WR ;,SS
SET P=0
FOR D=0:0
SET D=$ORDER(^UTILITY($JOB,"SDNMS",D))
if D'>0!(SDUP)
QUIT
SET SDV=""
SET SDZ2=SDBD
FOR X5=0:0
SET SDV=$ORDER(^UTILITY($JOB,"SDNMS",D,SDV))
if SDV=""!SDUP
QUIT
SET SDC=$PIECE(^UTILITY($JOB,"SDNMS",D,SDV),"^",3)
DO S
+2 QUIT
S1 SET SD=^SC(SDC,0)
SET D=$SELECT($PIECE(SD,"^",15):$PIECE(SD,"^",15),1:$PIECE(^DG(43,1,"GL"),"^",3))
SET SD5=0
SET SDNM=$PIECE(SD,"^")
+1 SET $PIECE(^UTILITY($JOB,"SDNMS",D,SDNM),"^",3)=SDC
QUIT
S IF '$DATA(^SC(SDC,"SL"))
DO SDM
DO HDR
WRITE !!,"THIS CLINIC DOES NOT HAVE APPT. LENGTH"
QUIT
+1 SET (SDZ,SDZ2)=SDBD
DO SDM
DO HDR
DO TIME
SET SDZ=SDBD-1
SET SD0=0
SET SDMED=SDED+.9
+2 NEW X,SDSOH
SET SC=+SDC
SET SL=^SC(SC,"SL")
SET X=$PIECE(SL,U,3)
SET STARTDAY=$SELECT($LENGTH(X):X,1:8)
SET X=$PIECE(SL,U,6)
SET SI=$SELECT(X="":4,X<3:4,X:X,1:4)
SET X=SDBD
SET SDSOH=$PIECE(SL,"^",8)
SET SM=$SELECT($EXTRACT(X,4,5)[12:$EXTRACT(X,1,3)+1_"01",1:$EXTRACT(X,1,3)_$EXTRACT(X,4,5)+1)_"00"
SET SDZ=SDBD
+3 ;SD/517
NEW POP
SET POP=0
LOOP DO SDM
if 0&$EXTRACT(SDZ,2,5)=$EXTRACT(SDZ1,2,5)
DO MON
IF $EXTRACT(SDZ,2,5)'=$EXTRACT(SDZ1,2,5)
IF 'SDUP
DO X1
IF 'SDUP
DO A
IF 'SDUP
if SD0!($EXTRACT(IOST,1,2)="C-")
DO 3
IF 'SDUP
DO WR
IF 'SDUP
IF $EXTRACT(IOST,1,2)="C-"
DO 3
+1 ;SD/517
if POP
DO MSG
+2 IF 'SDUP
IF X<SDED
SET (X,SDZ2)=$SELECT($EXTRACT(X,4,5)=12:$EXTRACT(X,1,3)+1_"01",1:$EXTRACT(X,1,5)+1)_"01"
SET SDZ=X
DO SDM
DO HDR
DO TIME
GOTO LOOP
+3 ;SD/517
if POP
DO MSG
+4 QUIT
+5 ;
MSG ;Added SD/517
+1 DO WARN
+2 QUIT
+3 ;
SS if SDUP
QUIT
SET SDZ=SDZ1
SET SD5=1
+1 DO A
if SDUP
QUIT
DO 3
if SDUP
QUIT
DO WR
if SDUP
QUIT
if $EXTRACT(IOST,1,2)="C-"
DO 3
QUIT
MON if '$DATA(^SC(+SDC,"ST",SDZ,1))
QUIT
SET SDPT=^SC(+SDC,"ST",SDZ,1)
DO SDPT1
+1 QUIT
SDPT1 IF YCNT+6>IOSL
if $EXTRACT(IOST,1,2)="C-"
DO 3
if SDUP
QUIT
DO HDR
DO TIME
+1 WRITE !,SDPT
SET SDAP=SDZ-1
FOR Z=1:1
SET SDAP=$ORDER(^SC(SDC,"S",SDAP))
if SDAP'>0!(SDAP>(SDZ+.9999))!SDUP
QUIT
DO NM^SDCLAV0
+2 DO YCNT
+3 QUIT
TIME ;SD/533 $Select defaults to 8 when Z5=0, so a Midnight to 8am clinic
+1 ;incorrectly prints available hours as 8am to 4pm instead of 0 to 8am
+2 ;Two new lines added to fix this and linetag T1 added at Write command
+3 ;S Z5=$P(^SC(+SDC,"SL"),U,3),SDT=$S(Z5:Z5,1:8),Z5=$P(^("SL"),U,6),SDI=$S(Z5="":4,Z5<3:4,Z5:Z5,1:4)
+4 SET Z5=$PIECE(^SC(+SDC,"SL"),U,3)
IF Z5=0
SET SDT=0
SET Z5=$PIECE(^("SL"),U,6)
SET SDI=$SELECT(Z5="":4,Z5<3:4,Z5:Z5,1:4)
GOTO T1
+5 SET SDT=$SELECT(Z5:Z5,1:8)
SET Z5=$PIECE(^SC(+SDC,"SL"),U,6)
SET SDI=$SELECT(Z5="":4,Z5<3:4,Z5:Z5,1:4)
T1 WRITE !!," TIME",?SDI+SDI-1
FOR Z6=SDT:1:65\(SDI+SDI)+SDT
WRITE $EXTRACT("|"_$SELECT('Z6:0,1:(Z6-1#12+1))_" ",1,SDI+SDI)
+1 WRITE !," DATE",?SDI+SDI-1,"|"
KILL J
FOR Z7=0:1:6
IF $DATA(^SC(+SDC,"T"_Z7))
SET J(Z7)=""
+2 SET YCNT=YCNT+3
+3 FOR Z8=1:1:65\(SDI+SDI)
WRITE $JUSTIFY("|",SDI+SDI)
+4 QUIT
WR NEW X
SET (Y3,X1,SDC1,SD0)=0
SET C=SDZ2
+1 FOR S8=C:0
SET SDC1=SDC1+1
SET C=$ORDER(^UTILITY($JOB,"SDNMS",D,SDV,C))
if C'>0!(C>SDMED&('SD5))!SDUP
QUIT
SET SD0=1
if SDC1=1
DO HDR1
SET X=C
DO DW^%DTC
SET Y=C
XECUTE ^DD("DD")
SET Y1=$PIECE(Y,"@")
SET Y2=$PIECE(Y,"@",2)
SET X9=X
if Y1'=Y3
WRITE !!,?1,X9,?11,Y1
DO WR1
if SDUP
QUIT
+2 if SDUP
QUIT
IF 'SD0
DO HDR1
WRITE !!,"No appointments scheduled"
+3 ;SD/517
if SD0
DO WR2
SET SDZ2=SDZ
QUIT
WR1 SET X4=""
FOR X1=0:0
SET X4=$ORDER(^UTILITY($JOB,"SDNMS",D,SDV,C,X4))
if X4=""!SDUP
QUIT
SET X6=""
FOR X2=0:0
SET X6=$ORDER(^UTILITY($JOB,"SDNMS",D,SDV,C,X4,X6))
if X6=""
QUIT
DO W1
+1 QUIT
+2 ;
WR2 ;Added SD/517
+1 DO 3
WRITE @IOF
DO HDR1
DO DAT
+2 DO A1^SDCLAV
+3 QUIT
+4 ;
HDR NEW X
DO NOW^%DTC
SET Y=$EXTRACT(%,1,12)
XECUTE ^DD("DD")
SET YCNT=1
WRITE @IOF,!?52,Y
if $EXTRACT(IOST,1,2)="P-"
DO PG^SDCLAV
+1 IF $DATA(^DG(43,1,"GL"))
IF $PIECE(^("GL"),"^",2)
WRITE !?30,$PIECE(^DG(40.8,D,0),"^")
+2 WRITE !?30,SDV,!?30,SDM," ",($EXTRACT(SDZ,1,3)+1700)
SET YCNT=4
QUIT
HDR1 SET SDZ2=$SELECT(SDZ2=0:SDBD,SDZ2>SDED:SDED,1:SDZ2)
WRITE !!,?30,SDV,!,?30,$PIECE(SDM1,"^",+$EXTRACT(SDZ2,4,5))," ",($EXTRACT(SDZ2,1,3)+1700)
SET YCNT=YCNT+3
QUIT
SDM SET SDM1="JANUARY^FEBRUARY^MARCH^APRIL^MAY^JUNE^JULY^AUGUST^SEPTEMBER^OCTOBER^NOVEMBER^DECEMBER"
SET SDM=$PIECE(SDM1,"^",+($EXTRACT(SDZ,4,5)))
QUIT
W SET SDUT=^UTILITY($JOB,"SDNMS",D,SDV,C,X4,X6)
SET D1=""
FOR D8=2,3
SET D1=$SELECT($PIECE(SDUT,"^",D8)]"":$PIECE(SDUT,"^",D8),1:"")_D1
+1 WRITE D1
QUIT
W1 ;added next 2 lines and changed 3rd line SD/517
+1 ;SD*509 added DO next line to delete corrupt node
SET X=C
XECUTE ^DD("FUNC",2,1)
+2 IF +^UTILITY($JOB,"SDNMS",D,SDV,C,X4,X6)=0
Begin DoDot:1
+3 if X4'="UNKNOWN"
QUIT
+4 SET N1=^UTILITY($JOB,"SDNMS",D,SDV,C,X4,X6)
SET SDC=$PIECE(N1,U,2)
SET SDAP1=$PIECE(N1,U,3)
+5 SET DA(2)=SDC
SET DA(1)=C
SET DA=SDAP1
+6 SET DIK="^SC("_DA(2)_",""S"","_DA(1)_",1,"
DO ^DIK
+7 KILL DA,DIK,N1
+8 QUIT
End DoDot:1
if X4="UNKNOWN"
QUIT
SET X="**WARNING** "_X
DO W2
QUIT
+9 DO TAB
if T
WRITE ?10
if 'T
WRITE ?11
WRITE X,?20,X4,?51,X6
DO MIN
WRITE ?61,"("_M1_") MINUTES"
DO W
SET Y3=Y1
SET X1=X9
IF YCNT+6>IOSL
DO 3
if SDUP
QUIT
DO HDR1
DO DAT
+10 QUIT
+11 ;
W2 ;added SD/517
+1 SET POP=1
+2 DO TAB
if T
WRITE ?1
if 'T
WRITE ?2
WRITE X,?23,X4,?51,X6
DO MIN
WRITE ?61,"("_M1_") MINUTES"
DO W
SET Y3=Y1
SET X1=X9
IF YCNT+6>IOSL
DO 3
if SDUP
QUIT
DO HDR1
DO DAT
+3 QUIT
WARN ;added SD/517
+1 WRITE @IOF,!
if $EXTRACT(IOST,1,2)="P-"
DO PG^SDCLAV
+2 DO HDR1
DO DAT
+3 WRITE !!,"*************************************************************************"
+4 WRITE !,"* WARNING: There is a data inconsistency or data corruption problem *"
+5 WRITE !,"* with one or more of the above appointments. These appointments will *"
+6 WRITE !,"* have WARNING displayed to the left of the time. Corrective action *"
+7 WRITE !,"* needs to be taken. Please cancel any of the appointments above, which *"
+8 WRITE !,"* have the WARNING display. If any of them are valid appointments, they *"
+9 WRITE !,"* will have to be re-entered via Appointment Management. *"
+10 WRITE !,"**************************************************************************"
+11 DO 3
+12 SET POP=0
+13 QUIT
+14 ;
3 NEW X
IF $EXTRACT(IOST,1,2)="C-"
FOR X=$Y:1:IOSL-6
WRITE !
DO YCNT
+1 IF $TEST
READ !!,"PRESS RETURN TO CONTINUE OR ^ TO QUIT ",SDU:DTIME
if SDU="^"!('$TEST)
SET SDUP=1
+2 IF YCNT+6'<IOSL
IF 'SDUP
WRITE @IOF,!
SET YCNT=1
if $EXTRACT(IOST,1,2)="P-"
DO PG^SDCLAV
QUIT
+3 QUIT
A NEW X
if YCNT+13>IOSL
DO 3
if SDUP
QUIT
DO INAC^SDCLAV
WRITE !!!,"FOR CLINIC AVAILABILITY PATTERNS:"
+1 WRITE !!?4,"0-9 and j-z",?15," --denote available slots where j=10,k=11...z=26",!?12,"A-W",?15," --denote overbooks with A being the first slot to be overbooked",!?18,"and B being the second for that same time, etc."
+2 WRITE !?6,"*,$,!,@,#",?15," --denote overbooks or appts. that fall outside of a clinic's",!?18,"regular hours"
SET YCNT=YCNT+8
QUIT
TAB WRITE !
if $LENGTH(X)>7
SET T=1
if $LENGTH(X)<8
SET T=0
DO YCNT
QUIT
MIN SET M1=+^UTILITY($JOB,"SDNMS",D,SDV,C,X4,X6)
QUIT
DAT IF $EXTRACT($ORDER(^UTILITY($JOB,"SDNMS",D,SDV,C)),2,7)=$EXTRACT(C,2,7)
WRITE !,?1,X1,?11,Y1
DO YCNT
+1 QUIT
X1 SET X1=X\100_$PIECE("31^28^31^30^31^30^31^31^30^31^30^31",U,$EXTRACT(X,4,5))
+1 SET X1=$$LEAP(X1)
IF X1>SDED
SET X1=SDED
+2 SET SDMED=X1+.9
SET SDAP=X-.01
FOR
SET SDAP=$ORDER(^SC(SDC,"S",SDAP))
if SDAP'>0!(SDAP>(X1+.9999))!SDUP
QUIT
DO NM^SDCLAV0
+3 DO DOW
SET SDDD=Y
WW ;
+1 IF '$DATA(^SC(+SC,"ST",X,1))
IF $$CHKDT()
SET Y=SDDD#7
if '$DATA(J(Y))
GOTO L
if $DATA(^HOLIDAY(X))&('SDSOH)
GOTO H
SET SS=+$ORDER(^SC(+SC,"T"_Y,X))
if SS'>0
GOTO L
if ^(SS,1)=""
GOTO L
Begin DoDot:1
+2 SET ^SC(+SC,"ST",$PIECE(X,"."),1)=$EXTRACT($PIECE($TEXT(DAY),U,Y+2),1,2)_" "_$EXTRACT(X,6,7)_$JUSTIFY("",SI+SI-6)_^(1)
SET ^(0)=$PIECE(X,".")
End DoDot:1
+3 ;SD*5.3*490 added GOTO command so dates prior to clinic start date no
+4 ;longer display on grid
+5 SET SDAV=1
if X>SM
DO WM
IF $DATA(^SC(+SC,"ST",X,1))
IF ^(1)["["!(^(1)["CANCELLED")!($DATA(^HOLIDAY(X)))
if X<$ORDER(^SC(+SC,"T",0))
GOTO L
WRITE !,$EXTRACT(^SC(+SC,"ST",X,1),1,80)
DO YCNT
if '$DATA(^HOLIDAY(X))&('SDAV)
SET SDAV=1
+6 IF YCNT+6>IOSL
DO 3
if SDUP
QUIT
DO HDR
L SET X=X+1
SET SDDD=SDDD+1
+1 if X'>X1
GOTO WW
QUIT
+2 ;
WM WRITE !?36
SET Y=$EXTRACT(X,1,5)_"00"
SET SM=$SELECT($EXTRACT(X,4,5)[12:$EXTRACT(X,1,3)+1_"01",1:$EXTRACT(X,1,3)_$EXTRACT(X,4,5)+1)_"00"
DO YCNT
DT WRITE $$FMTE^XLFDT(Y)
QUIT
+1 ;
DOW SET Y=$$DOW^XLFDT(X,1)
QUIT
YCNT SET YCNT=YCNT+1
QUIT
+1 ;
DAY ;;^SUN^MON^TUES^WEDNES^THURS^FRI^SATUR
DIFF SET X1=SDRE
SET X2=X
DO ^%DTC
SET SDDD=SDDD+X
SET X=SDRE
SET X1=X\100_28
QUIT
H SET ^SC(+SC,"ST",X,1)=" "_$EXTRACT(X,6,7)_" "_$PIECE(^(X,0),U,2)
SET ^(0)=X
GOTO WW
+1 ;
LEAP(SDEOM) ;Check for leap year, adjust if indicated
+1 ;Input: SDEOM=end of month date to adjust for leap year
+2 ; only adjust February
if $EXTRACT(SDEOM,4,5)'="02"
QUIT SDEOM
+3 NEW SDLEAP
+4 SET SDLEAP=$$FMADD^XLFDT(SDEOM,1)
+5 QUIT $SELECT($EXTRACT(SDLEAP,4,5)="02":SDLEAP,1:SDEOM)
CHKDT() ;
+1 NEW Y,RET,SDFA
+2 IF '$DATA(SDFRST(D,+SC))
Begin DoDot:1
+3 ; Create array of days that have a current template.
+4 NEW %H,X,SDFMTDAY,SDAYCNT,SDAYI,SDST,SDAYCHK,SDAYNAM,SDAYNUM,SDBEGO,SDCNT
+5 SET %H=$HOROLOG
+6 DO YX^%DTC
SET SDFMTDAY=X
+7 ;Initialize SDBEGO - SD*5.3*726
SET SDAYCNT=0
SET SDBEGO=""
+8 FOR SDAYI=0:1:6
Begin DoDot:2
+9 if '$DATA(^SC(+SC,"T"_SDAYI))
QUIT
+10 ;Set SDBEGO to determine begin dates - SD*5.3*726
SET SDCNT=0
FOR
SET SDCNT=$ORDER(^SC(+SC,"T"_SDAYI,SDCNT))
if 'SDCNT
QUIT
SET SDBEGO=SDBEGO_U_SDCNT
+11 IF $ORDER(^SC(+SC,"T"_SDAYI,""),-1)'<SDFMTDAY
SET SDFRST(D,+SC,SDAYI)=""
SET SDAYCNT=SDAYCNT+1
End DoDot:2
+12 ; Calculate first available date for each day that has current template.
+13 SET SDST=0
SET SDAYCHK=0
+14 FOR
SET SDST=$ORDER(^SC(+SC,"ST",SDST))
if SDST=""!(SDAYCHK=SDAYCNT)
QUIT
Begin DoDot:2
+15 SET SDAYNAM=$EXTRACT($GET(^SC(+SC,"ST",SDST,1)),1,2)
+16 SET SDAYNUM=$SELECT(SDAYNAM="MO":1,SDAYNAM="TU":2,SDAYNAM="WE":3,SDAYNAM="TH":4,SDAYNAM="FR":5,SDAYNAM="SA":6,SDAYNAM="SU":0,1:"")
+17 if SDAYNUM=""
QUIT
+18 if $GET(SDFRST(D,+SC,SDAYNUM))'=""
QUIT
+19 if '$DATA(^SC(+SC,"T"_SDAYNUM))
QUIT
+20 ;Quit if non-indefinite schedule and not a begin date, SD*5.3*674 and SD*5.3*726
IF $DATA(^SC(+SC,"OST",SDST))
IF (SDBEGO'[SDST)
QUIT
+21 SET SDFRST(D,+SC,SDAYNUM)=SDST
SET SDAYCHK=SDAYCHK+1
End DoDot:2
End DoDot:1
+22 ; Get first avail date from array for particular day of week
+23 SET Y=SDDD#7
SET RET=0
+24 SET SDFA=$GET(SDFRST(D,+SC,Y))
+25 IF SDFA'=""
Begin DoDot:1
+26 SET SDFA=$SELECT(+$HOROLOG>SDFA:+$HOROLOG,1:SDFA)
+27 IF X'<SDFA
SET RET=1
End DoDot:1
+28 QUIT RET