1 | SDCLAV1 ;ALB/LDB - OUTPUT PATTERNS (cont.) ; 9/1/00 10:57am
|
---|
2 | ;;5.3;Scheduling;**140,167,168,76,383,463,490,517**;Aug 13, 1993;Build 4
|
---|
3 | ;
|
---|
4 | ;PATCH 383 STOPPED REPORT FROM CREATING AVAILIBILTY-TEH
|
---|
5 | ;
|
---|
6 | S2 N I1,SC,SDAV,SDMED,SI,SL,SM,SS,STARTDAY,SDDD,YCNT,SDFRST
|
---|
7 | 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
|
---|
8 | Q
|
---|
9 | 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,"^")
|
---|
10 | S $P(^UTILITY($J,"SDNMS",D,SDNM),"^",3)=SDC Q
|
---|
11 | S I '$D(^SC(SDC,"SL")) D SDM,HDR W !!,"THIS CLINIC DOES NOT HAVE APPT. LENGTH" Q
|
---|
12 | S (SDZ,SDZ2)=SDBD D SDM,HDR,TIME S SDZ=SDBD-1,SD0=0,SDMED=SDED+.9
|
---|
13 | 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
|
---|
14 | N POP S POP=0 ;SD/517
|
---|
15 | 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
|
---|
16 | D:POP MSG ;SD/517
|
---|
17 | 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
|
---|
18 | D:POP MSG ;SD/517
|
---|
19 | Q
|
---|
20 | ;
|
---|
21 | MSG ;Added SD/517
|
---|
22 | D WARN
|
---|
23 | Q
|
---|
24 | ;
|
---|
25 | SS Q:SDUP S SDZ=SDZ1,SD5=1
|
---|
26 | D A Q:SDUP D 3 Q:SDUP D WR Q:SDUP D:$E(IOST,1,2)="C-" 3 Q
|
---|
27 | MON Q:'$D(^SC(+SDC,"ST",SDZ,1)) S SDPT=^SC(+SDC,"ST",SDZ,1) D SDPT1
|
---|
28 | Q
|
---|
29 | SDPT1 I YCNT+6>IOSL D:$E(IOST,1,2)="C-" 3 Q:SDUP D HDR,TIME
|
---|
30 | 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
|
---|
31 | D YCNT
|
---|
32 | Q
|
---|
33 | TIME 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)
|
---|
34 | 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)
|
---|
35 | W !," DATE",?SDI+SDI-1,"|" K J F Z7=0:1:6 I $D(^SC(+SDC,"T"_Z7)) S J(Z7)=""
|
---|
36 | S YCNT=YCNT+3
|
---|
37 | F Z8=1:1:65\(SDI+SDI) W $J("|",SDI+SDI)
|
---|
38 | Q
|
---|
39 | WR N X S (Y3,X1,SDC1,SD0)=0,C=SDZ2
|
---|
40 | 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
|
---|
41 | Q:SDUP I 'SD0 D HDR1 W !!,"No appointments scheduled"
|
---|
42 | D:SD0 WR2 S SDZ2=SDZ Q ;SD/517
|
---|
43 | 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
|
---|
44 | Q
|
---|
45 | ;
|
---|
46 | WR2 ;Added SD/517
|
---|
47 | D 3 W @IOF D HDR1,DAT
|
---|
48 | D A1^SDCLAV
|
---|
49 | Q
|
---|
50 | ;
|
---|
51 | 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
|
---|
52 | I $D(^DG(43,1,"GL")),$P(^("GL"),"^",2) W !?30,$P(^DG(40.8,D,0),"^")
|
---|
53 | W !?30,SDV,!?30,SDM," ",($E(SDZ,1,3)+1700) S YCNT=4 Q
|
---|
54 | 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
|
---|
55 | SDM S SDM1="JANUARY^FEBRUARY^MARCH^APRIL^MAY^JUNE^JULY^AUGUST^SEPTEMBER^OCTOBER^NOVEMBER^DECEMBER",SDM=$P(SDM1,"^",+($E(SDZ,4,5))) Q
|
---|
56 | 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
|
---|
57 | W D1 Q
|
---|
58 | W1 ;added next 2 lines and changed 3rd line SD/517
|
---|
59 | S X=C X ^DD("FUNC",2,1)
|
---|
60 | I +^UTILITY($J,"SDNMS",D,SDV,C,X4,X6)=0 S X="**WARNING** "_X D W2 Q
|
---|
61 | 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
|
---|
62 | Q
|
---|
63 | ;
|
---|
64 | W2 ;added SD/517
|
---|
65 | S POP=1
|
---|
66 | 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
|
---|
67 | Q
|
---|
68 | WARN ;added SD/517
|
---|
69 | W @IOF,! D:$E(IOST,1,2)="P-" PG^SDCLAV
|
---|
70 | D HDR1,DAT
|
---|
71 | W !!,"*************************************************************************"
|
---|
72 | W !,"* WARNING: There is a data inconsistency or data corruption problem *"
|
---|
73 | W !,"* with one or more of the above appointments. These appointments will *"
|
---|
74 | W !,"* have WARNING displayed to the left of the time. Corrective action *"
|
---|
75 | W !,"* needs to be taken. Please cancel any of the appointments above, which *"
|
---|
76 | W !,"* have the WARNING display. If any of them are valid appointments, they *"
|
---|
77 | W !,"* will have to be re-entered via Appointment Management. *"
|
---|
78 | W !,"**************************************************************************"
|
---|
79 | D 3
|
---|
80 | S POP=0
|
---|
81 | Q
|
---|
82 | ;
|
---|
83 | 3 N X I $E(IOST,1,2)="C-" F X=$Y:1:IOSL-6 W ! D YCNT
|
---|
84 | I R !!,"PRESS RETURN TO CONTINUE OR ^ TO QUIT ",SDU:DTIME S:SDU="^"!('$T) SDUP=1
|
---|
85 | I YCNT+6'<IOSL,'SDUP W @IOF,! S YCNT=1 D:$E(IOST,1,2)="P-" PG^SDCLAV Q
|
---|
86 | Q
|
---|
87 | A N X D:YCNT+13>IOSL 3 Q:SDUP D INAC^SDCLAV W !!!,"FOR CLINIC AVAILABILITY PATTERNS:"
|
---|
88 | 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."
|
---|
89 | W !?6,"*,$,!,@,#",?15," --denote overbooks or appts. that fall outside of a clinic's",!?18,"regular hours" S YCNT=YCNT+8 Q
|
---|
90 | TAB W ! S:$L(X)>7 T=1 S:$L(X)<8 T=0 D YCNT Q
|
---|
91 | MIN S M1=+^UTILITY($J,"SDNMS",D,SDV,C,X4,X6) Q
|
---|
92 | DAT I $E($O(^UTILITY($J,"SDNMS",D,SDV,C)),2,7)=$E(C,2,7) W !,?1,X1,?11,Y1 D YCNT
|
---|
93 | Q
|
---|
94 | X1 S X1=X\100_$P("31^28^31^30^31^30^31^31^30^31^30^31",U,$E(X,4,5))
|
---|
95 | S X1=$$LEAP(X1) I X1>SDED S X1=SDED
|
---|
96 | 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
|
---|
97 | D DOW S SDDD=Y
|
---|
98 | WW ;
|
---|
99 | 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
|
---|
100 | .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,".")
|
---|
101 | ;SD*5.3*490 added GOTO command so dates prior to clinic start date no
|
---|
102 | ;longer display on grid
|
---|
103 | 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
|
---|
104 | I YCNT+6>IOSL D 3 Q:SDUP D HDR
|
---|
105 | L S X=X+1,SDDD=SDDD+1
|
---|
106 | G WW:X'>X1 Q
|
---|
107 | ;
|
---|
108 | 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
|
---|
109 | DT W $$FMTE^XLFDT(Y) Q
|
---|
110 | ;
|
---|
111 | DOW S Y=$$DOW^XLFDT(X,1) Q
|
---|
112 | YCNT S YCNT=YCNT+1 Q
|
---|
113 | ;
|
---|
114 | DAY ;;^SUN^MON^TUES^WEDNES^THURS^FRI^SATUR
|
---|
115 | DIFF S X1=SDRE,X2=X D ^%DTC S SDDD=SDDD+X,X=SDRE,X1=X\100_28 Q
|
---|
116 | H S ^SC(+SC,"ST",X,1)=" "_$E(X,6,7)_" "_$P(^(X,0),U,2),^(0)=X G WW
|
---|
117 | ;
|
---|
118 | LEAP(SDEOM) ;Check for leap year, adjust if indicated
|
---|
119 | ;Input: SDEOM=end of month date to adjust for leap year
|
---|
120 | Q:$E(SDEOM,4,5)'="02" SDEOM ; only adjust February
|
---|
121 | N SDLEAP
|
---|
122 | S SDLEAP=$$FMADD^XLFDT(SDEOM,1)
|
---|
123 | Q $S($E(SDLEAP,4,5)="02":SDLEAP,1:SDEOM)
|
---|
124 | CHKDT() ;
|
---|
125 | N Y,RET,SDFA
|
---|
126 | I '$D(SDFRST(D,+SC)) D
|
---|
127 | .; Create array of days that have a current template.
|
---|
128 | .N %H,X,SDFMTDAY,SDAYCNT,SDAYI,SDST,SDAYCHK,SDAYNAM,SDAYNUM
|
---|
129 | .S %H=$H
|
---|
130 | .D YX^%DTC S SDFMTDAY=X
|
---|
131 | .S SDAYCNT=0
|
---|
132 | .F SDAYI=0:1:6 D
|
---|
133 | ..Q:'$D(^SC(+SC,"T"_SDAYI))
|
---|
134 | ..I $O(^SC(+SC,"T"_SDAYI,""),-1)'<SDFMTDAY S SDFRST(D,+SC,SDAYI)="",SDAYCNT=SDAYCNT+1
|
---|
135 | .; Calculate first available date for each day that has current template.
|
---|
136 | .S SDST=0,SDAYCHK=0
|
---|
137 | .F S SDST=$O(^SC(+SC,"ST",SDST)) Q:SDST=""!(SDAYCHK=SDAYCNT) D
|
---|
138 | ..S SDAYNAM=$E($G(^SC(+SC,"ST",SDST,1)),1,2)
|
---|
139 | ..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:"")
|
---|
140 | ..Q:SDAYNUM=""
|
---|
141 | ..Q:$G(SDFRST(D,+SC,SDAYNUM))'=""
|
---|
142 | ..Q:'$D(^SC(+SC,"T"_SDAYNUM))
|
---|
143 | ..S SDFRST(D,+SC,SDAYNUM)=SDST,SDAYCHK=SDAYCHK+1
|
---|
144 | ; Get first avail date from array for particular day of week
|
---|
145 | S Y=SDDD#7,RET=0
|
---|
146 | S SDFA=$G(SDFRST(D,+SC,Y))
|
---|
147 | I SDFA'="" D
|
---|
148 | .S SDFA=$S(+$H>SDFA:+$H,1:SDFA)
|
---|
149 | .I X'<SDFA S RET=1
|
---|
150 | Q RET
|
---|