1 | SCRPW75 ;BP-CIOFO/KEITH,ESW - Clinic Appointment Availability Extract (cont.) ; 5/15/03 3:15pm
|
---|
2 | ;;5.3;Scheduling;**206,223,241,249,291**;AUG 13, 1993
|
---|
3 | ;
|
---|
4 | NAVA(SDBDT,SDEDT,SDEX) ;Gather next available appointment wait time information
|
---|
5 | ;Input: SDBDT=beginning date
|
---|
6 | ;Input: SDEDT=ending date
|
---|
7 | ;Input: SDEX='0' for user report, '1' for Austin extract
|
---|
8 | ;Output: ^TMP("SDNAVA",$J) array in the format:
|
---|
9 | ; ^TMP("SDNAVA",$J,division)='x'
|
---|
10 | ; ^TMP("SDNAVA",$J,division,credit_pair)='x'
|
---|
11 | ; ^TMP("SDNAVA",$J,division,credit_pair,clinic_ifn)='x'
|
---|
12 | ; ^TMP("SDNAVA",$J,division;credit_pair,clinic_ifn,date_scheduled)='x'
|
---|
13 | ; where 'x' consists of:
|
---|
14 | ; piece 1 = flag '0' appts.
|
---|
15 | ; 2 = ave. flag '0' wait time
|
---|
16 | ; 3 = flag '1' appts.
|
---|
17 | ; 4 = ave. flag '1' wait time
|
---|
18 | ; 5 = flag '2' appts.
|
---|
19 | ; 6 = ave. flag '2' wait time
|
---|
20 | ; 7 = flag '3' appts.
|
---|
21 | ; 8 = ave. flag '3' wait time
|
---|
22 | ; 9 = follow-up next ava. appts.
|
---|
23 | ; 10 = follow-up next ava. wait time
|
---|
24 | ; 11 = follow-up non-next ava. appts. <2 days
|
---|
25 | ; 12 = follow-up non-next ava. appts. <2 days wait time*
|
---|
26 | ; 13 = follow-up non-next ava. appts. 2-7 days
|
---|
27 | ; 14 = follow-up non-next ava. appts. 2-7 days wait time*
|
---|
28 | ; 15 = follow-up non-next ava. appts. 8-30 days
|
---|
29 | ; 16 = follow-up non-next ava. appts. 8-30 days wait time*
|
---|
30 | ; 17 = follow-up non-next ava. appts. 31-60 days
|
---|
31 | ; 18 = follow-up non-next ava. appts. 31-60 days wait time*
|
---|
32 | ; 19 = follow-up non-next ava. appts. >60 days
|
---|
33 | ; 20 = follow-up non-next ava. appts. >60 days wait time*
|
---|
34 | ; 21 = non-follow-up next ava. appts.
|
---|
35 | ; 22 = non-follow-up next ava. wait time
|
---|
36 | ; 23 = non-follow-up non-next ava. appts. <2 days
|
---|
37 | ; 24 = non-follow-up non-next ava. appts. <2 days wait time*
|
---|
38 | ; 25 = non-follow-up non-next ava. appts. <2 days wait time**
|
---|
39 | ; 26 = non-follow-up non-next ava. appts. 2-7 days
|
---|
40 | ; 27 = non-follow-up non-next ava. appts. 2-7 days wait time*
|
---|
41 | ; 28 = non-follow-up non-next ava. appts. 2-7 days wait time**
|
---|
42 | ; 29 = non-follow-up non-next ava. appts. 8-30 days
|
---|
43 | ; 30 = non-follow-up non-next ava. appts. 8-30 days wait time*
|
---|
44 | ; 31 = non-follow-up non-next ava. appts. 8-30 days wait time**
|
---|
45 | ; 32 = non-follow-up non-next ava. appts. 31-60 days
|
---|
46 | ; 33 = non-follow-up non-next ava. appts. 31-60 days wait time*
|
---|
47 | ; 34 = non-follow-up non-next ava. appts. 31-60 days wait time**
|
---|
48 | ; 35 = non-follow-up non-next ava. appts. >60 days
|
---|
49 | ; 36 = non-follow-up non-next ava. appts. >60 days wait time*
|
---|
50 | ; 37 = non-follow-up non-next ava. appts. >60 days wait time**
|
---|
51 | ; 38 = percent of non-next ava. appts. within 30 days
|
---|
52 | ; 39 = percent of next ava. appts. within 30 days
|
---|
53 | ;
|
---|
54 | ; ^TMP("SDNAVB",$J) array in the format:
|
---|
55 | ; ^TMP("SDNAVB",$J,division,credit_pair,clinic_ifn)='y'
|
---|
56 | ; where 'y' consists of:
|
---|
57 | ; piece 1 = % non-follow-up next ava. appts. within 30 days*
|
---|
58 | ; 2 = % non-follow-up next ava. appts. within 30 days**
|
---|
59 | ; 3 = % non-follow-up non-next ava. appts. within 30 days*
|
---|
60 | ; 4 = % non-follow-up non-next ava. appts. within 30 days**
|
---|
61 | ; 5 = sum of squared wait time next ava. appts.**
|
---|
62 | ; 6 = sum of squared wait time non-follow-up appts.*
|
---|
63 | ; 7 = sum of squared wait time non-follow-up appts.**
|
---|
64 | ; 8 = total non-follow-up appointments
|
---|
65 | ;
|
---|
66 | ; * desired date to appointment date
|
---|
67 | ; ** transaction date to appointment date
|
---|
68 | ;
|
---|
69 | N SDT,SDCT,DFN,SDADT,SDAP,SDAP0,SDWAIT,SDSFU,SDCWT3,SDAVE
|
---|
70 | N SDCL,SDFLAG,SDX,SDY,SDZ,SDI,SC0,SDCP,SDSDEV,SDSDDT,SDAVE2
|
---|
71 | S SDT=SDBDT-1,(SDOUT,SDCT)=0
|
---|
72 | K ^TMP("SDWNAVA",$J),^TMP("SDXNAVA",$J),^TMP("SDYNAVA",$J),^TMP("SDZNAVA",$J),^TMP("SDNAVA",$J),^TMP("SDNAVB",$J)
|
---|
73 | ;Iterate through 'date scheduled' xref
|
---|
74 | F S SDT=$O(^DPT("ASADM",SDT)) Q:SDOUT!'SDT!(SDT>SDEDT) S DFN=0 D
|
---|
75 | .F S DFN=$O(^DPT("ASADM",SDT,DFN)) Q:SDOUT!'DFN S SDADT=0 D
|
---|
76 | ..I $G(SDREPORT(5))=1 I '$D(^TMP("SDIPLST",$J,DFN)) Q ;only selected patient if (5)
|
---|
77 | ..Q:$E($P($G(^DPT(DFN,0)),U,9),1,5)="00000" ;exclude test patients
|
---|
78 | ..F S SDADT=$O(^DPT("ASADM",SDT,DFN,SDADT)) Q:SDOUT!'SDADT D
|
---|
79 | ...;Check for 'stop task' request
|
---|
80 | ...S SDCT=SDCT+1 I SDCT#1000=0 D STOP Q:SDOUT
|
---|
81 | ...;Get appointment node
|
---|
82 | ...S SDAP0=$G(^DPT(DFN,"S",SDADT,0)) Q:$P(SDAP0,U,19)'=SDT
|
---|
83 | ...I '$G(SDREPORT(5)) Q:$P(SDAP0,U,2)="C"!($P(SDAP0,U,2)="CA") ;quit if cancelled by clinic
|
---|
84 | ...S SDCL=+SDAP0 Q:SDCL<1 ;get clinic
|
---|
85 | ...;'next ava.' appointment indicator
|
---|
86 | ...S SDFLAG=+$P(SDAP0,U,26)
|
---|
87 | ...;'date desired' and 'follow up visit' indicator
|
---|
88 | ...S SDX=$G(^DPT(DFN,"S",SDADT,1))
|
---|
89 | ...S SDSDDT=+$P(SDX,U),SDSFU=$P(SDX,U,2),SDSDEV=""
|
---|
90 | ...;Calculate wait time 1 (transaction date to appointment)
|
---|
91 | ...S SDWAIT=$S(SDADT<SDT:0,1:$$FMDIFF^XLFDT(SDADT,SDT,1))
|
---|
92 | ...;Calculate wait time 2 (date desired to appointment)
|
---|
93 | ...S SDCWT3=$$CWT3(SDADT,SDFLAG,SDSDDT,SDSFU,.SDSDEV,.SDX,.SDY,.SDZ)
|
---|
94 | ...;Gather patient appointment list information
|
---|
95 | ...I $G(SDREPORT(4)),$D(^TMP("SDPLIST",$J,SDCL)) D
|
---|
96 | ....N SDPNAME,SDATA,SDSSN
|
---|
97 | ....S SDATA=$G(^DPT(DFN,0))
|
---|
98 | ....S SDSSN=$P(SDATA,U,9),SDPNAME=$P(SDATA,U) Q:'$L(SDPNAME)
|
---|
99 | ....S SDATA=SDSSN_U_$P(SDAP0,U,25)_U_SDFLAG_U_SDSDDT_U_SDSFU_U_SDWAIT_U_SDSDEV
|
---|
100 | ....S ^TMP("SDPLIST",$J,SDCL,SDT,SDPNAME,DFN,SDADT)=SDATA
|
---|
101 | ....Q
|
---|
102 | ...I $G(SDREPORT(5)) I $D(^TMP("SDIPLST",$J,DFN,SDCL)) D GEN5A^SCRPW78(SDAP0,DFN,SDADT,SDCL,SDWAIT,SDT,SDSFU,SDSDEV,SDSDDT,SDFLAG)
|
---|
103 | ...;Accrue phase II values ('next ava.' appts.)
|
---|
104 | ...S $P(^TMP("SDXNAVA",$J,SDCL),U,((SDFLAG*2)+1))=$P($G(^TMP("SDXNAVA",$J,SDCL)),U,((SDFLAG*2)+1))+1
|
---|
105 | ...S $P(^TMP("SDXNAVA",$J,SDCL),U,((SDFLAG*2)+2))=$P(^TMP("SDXNAVA",$J,SDCL),U,((SDFLAG*2)+2))+SDWAIT
|
---|
106 | ...I SDWAIT<31 S $P(^TMP("SDXNAVA",$J,SDCL),U,9+(SDFLAG#2))=$P(^TMP("SDXNAVA",$J,SDCL),U,9+(SDFLAG#2))+1
|
---|
107 | ...;Accrue sum of squared wait time for standard deviation
|
---|
108 | ...I SDFLAG#2 S $P(^TMP("SDWNAVA",$J,SDCL),U,5)=$P($G(^TMP("SDWNAVA",$J,SDCL)),U,5)+(SDWAIT*SDWAIT)
|
---|
109 | ...;Accrue phase III values ('date desired' deviation)
|
---|
110 | ...I SDCWT3 D
|
---|
111 | ....S $P(^TMP("SDYNAVA",$J,SDCL),U,SDX)=$P($G(^TMP("SDYNAVA",$J,SDCL)),U,SDX)+1
|
---|
112 | ....S $P(^TMP("SDYNAVA",$J,SDCL),U,SDY)=$P(^TMP("SDYNAVA",$J,SDCL),U,SDY)+SDSDEV
|
---|
113 | ....S:SDZ $P(^TMP("SDYNAVA",$J,SDCL),U,SDZ)=$P(^TMP("SDYNAVA",$J,SDCL),U,SDZ)+SDWAIT
|
---|
114 | ....;Gather additional information for non-follow-up appointments
|
---|
115 | ....I 'SDSFU D
|
---|
116 | .....;Accrue next ava. and non-next ava. appts. less than 31 days
|
---|
117 | .....N SDP S SDP=$S(SDFLAG#2:1,1:3)
|
---|
118 | .....I SDSDEV<31 S $P(^TMP("SDWNAVA",$J,SDCL),U,SDP)=$P($G(^TMP("SDWNAVA",$J,SDCL)),U,SDP)+1
|
---|
119 | .....I SDWAIT<31 S $P(^TMP("SDWNAVA",$J,SDCL),U,SDP+1)=$P($G(^TMP("SDWNAVA",$J,SDCL)),U,SDP+1)+1
|
---|
120 | .....;Accrue sum of squared wait time for standard deviation
|
---|
121 | .....S $P(^TMP("SDWNAVA",$J,SDCL),U,6)=$P($G(^TMP("SDWNAVA",$J,SDCL)),U,6)+(SDSDEV*SDSDEV)
|
---|
122 | .....S $P(^TMP("SDWNAVA",$J,SDCL),U,7)=$P(^TMP("SDWNAVA",$J,SDCL),U,7)+(SDWAIT*SDWAIT)
|
---|
123 | .....;Total of non-follow-up appointments
|
---|
124 | .....S $P(^TMP("SDWNAVA",$J,SDCL),U,8)=$P(^TMP("SDWNAVA",$J,SDCL),U,8)+1
|
---|
125 | .....Q
|
---|
126 | ....Q
|
---|
127 | ...;Accrue values for daily detail
|
---|
128 | ...Q:SDEX=1!(SDFMT'="D")
|
---|
129 | ...S $P(^TMP("SDXNAVA",$J,SDCL,SDT),U,((SDFLAG*2)+1))=$P($G(^TMP("SDXNAVA",$J,SDCL,SDT)),U,((SDFLAG*2)+1))+1
|
---|
130 | ...S $P(^TMP("SDXNAVA",$J,SDCL,SDT),U,((SDFLAG*2)+2))=$P(^TMP("SDXNAVA",$J,SDCL,SDT),U,((SDFLAG*2)+2))+SDWAIT
|
---|
131 | ...I SDWAIT<31 S $P(^TMP("SDXNAVA",$J,SDCL,SDT),U,9+(SDFLAG#2))=$P($G(^TMP("SDXNAVA",$J,SDCL,SDT)),U,9+(SDFLAG#2))+1
|
---|
132 | ...I SDCWT3 D
|
---|
133 | ....S $P(^TMP("SDYNAVA",$J,SDCL,SDT),U,SDX)=$P($G(^TMP("SDYNAVA",$J,SDCL,SDT)),U,SDX)+1
|
---|
134 | ....S $P(^TMP("SDYNAVA",$J,SDCL,SDT),U,SDY)=$P(^TMP("SDYNAVA",$J,SDCL,SDT),U,SDY)+SDSDEV
|
---|
135 | ....S:SDZ $P(^TMP("SDYNAVA",$J,SDCL,SDT),U,SDZ)=$P(^TMP("SDYNAVA",$J,SDCL,SDT),U,SDZ)+SDWAIT
|
---|
136 | ...Q
|
---|
137 | ..Q
|
---|
138 | .Q
|
---|
139 | Q:SDOUT S SDCL=0
|
---|
140 | D ACCRUE^SCRPW77
|
---|
141 | Q
|
---|
142 | ;
|
---|
143 | STOP ;Check for stop task request
|
---|
144 | S:$D(ZTQUEUED) (SDOUT,ZTSTOP)=$S($$S^%ZTLOAD:1,1:0) Q
|
---|
145 | ;
|
---|
146 | CWT3(SDADT,SDFLAG,SDSDDT,SDSFU,SDSDEV,SDX,SDY,SDZ) ;Get phase III data
|
---|
147 | ;Input: SDADT=appointment date
|
---|
148 | ;Input: SDFLAG='next ava.' appointment indicator
|
---|
149 | ;Input: SDSDDT=desired date
|
---|
150 | ;Input: SDSFU=follow up indicator
|
---|
151 | ;Input: SDSDEV=deviation from desired date (pass by reference)
|
---|
152 | ;Input: SDX, SDY, SDZ=string locations to update (pass by reference)
|
---|
153 | ;Output: '1' if phase III data exists, '0' otherwise
|
---|
154 | ;
|
---|
155 | N SDDCAT
|
---|
156 | I '$L(SDSDDT)!'$L(SDSFU) Q 0 ;no phase III data
|
---|
157 | S SDSDEV=$S(SDADT<SDSDDT:0,1:$$FMDIFF^XLFDT(SDADT,SDSDDT,1)) ;wait time
|
---|
158 | S SDDCAT=$$DCAT(SDSDEV) ;date range category
|
---|
159 | ;follow-up next ava. appts.
|
---|
160 | I SDSFU,SDFLAG#2 S SDX=1,SDY=2,SDZ=0 Q 1
|
---|
161 | ;follow-up non-next ava. appts.
|
---|
162 | I SDSFU,'(SDFLAG#2) S SDX=SDDCAT*2+1,SDY=SDX+1,SDZ=0 Q 1
|
---|
163 | ;non-follow-up next ava. appts.
|
---|
164 | I 'SDSFU,SDFLAG#2 S SDX=13,SDY=14,SDZ=0 Q 1
|
---|
165 | ;non-follow-up non-next ava. appts.
|
---|
166 | I 'SDSFU,'(SDFLAG#2) S SDX=SDDCAT+4*3,SDY=SDX+1,SDZ=SDX+2
|
---|
167 | Q 1
|
---|
168 | ;
|
---|
169 | DCAT(SDSDEV) ;Determine date range category
|
---|
170 | ;Input: SDSDEV=wait time
|
---|
171 | ;Output: category where '1' = <2 days
|
---|
172 | ; '2' = 2-7 days
|
---|
173 | ; '3' = 8-30 days
|
---|
174 | ; '4' = 31-60 days
|
---|
175 | ; '5' = >60 days
|
---|
176 | ;
|
---|
177 | Q:SDSDEV<2 1
|
---|
178 | Q:SDSDEV<8 2
|
---|
179 | Q:SDSDEV<31 3
|
---|
180 | Q:SDSDEV<61 4
|
---|
181 | Q 5
|
---|