1 | SDPBP ; BP-IOFO/OWAIN ; Pharmacy Benefits Print. ; ; Compiled November 13, 2003 09:55:19
|
---|
2 | ;;5.3;Scheduling;**318**; SEP 29, 2003
|
---|
3 | ;
|
---|
4 | EN0 ; Inquire date range.
|
---|
5 | K %DT
|
---|
6 | S %DT="AEX",%DT("A")="Appointment start date for report: "
|
---|
7 | D ^%DT Q:Y=-1
|
---|
8 | K %DT
|
---|
9 | S (SDT,%DT(0))=Y K Y
|
---|
10 | S %DT="AEX",%DT("A")="Appointment end date for report: "
|
---|
11 | D ^%DT Q:Y=-1
|
---|
12 | S EDT=Y
|
---|
13 | S DIR("?",1)="Enter YES to show only summary totals.",DIR("?")="Enter NO to list patient level details as well."
|
---|
14 | S DIR("A")="Summary?",DIR(0)="Y",DIR("B")="YES" D ^DIR
|
---|
15 | K DIR
|
---|
16 | Q:Y="^"
|
---|
17 | S SDSUMM=Y
|
---|
18 | D DEV
|
---|
19 | Q
|
---|
20 | ;
|
---|
21 | EN ;
|
---|
22 | N SDCL,SDSS,NAME,DFN,INST,LINE,MAXLEN,PAGE,TODAY,CTR,SDCUTOFF,SDCUTOFD,TDAYS,TRSA
|
---|
23 | D INIT(.SDSS)
|
---|
24 | S (SDCL,CTR)=0,(SDCUTOFF,Y)=3031022 D DD^%DT S SDCUTOFD=Y
|
---|
25 | D SCH^PSOTPCAN ; Pharmacy call to generate ^TMP global of eligible patients.
|
---|
26 | D NOW^%DTC S TODAY=X
|
---|
27 | S NAME=""
|
---|
28 | F S NAME=$O(^TMP($J,"PSODFN",NAME)) Q:NAME="" D
|
---|
29 | .S DFN=0
|
---|
30 | .F S DFN=$O(^TMP($J,"PSODFN",NAME,DFN)) Q:+DFN'=DFN D
|
---|
31 | ..N SDAPDTT,SSN,SSNP,SEL,RESCHED
|
---|
32 | ..D DEM^VADPT
|
---|
33 | ..S (SSN,SSNP)="" S SSN=$P($G(VADM(2)),"^") I SSN["P" S SSNP="P",SSN=$E(SSN,1,9) ; Social security number.
|
---|
34 | ..Q:$E(SSN,1,5)="00000" ; Exclude test patients.
|
---|
35 | ..S SDAPDTT=$O(^DPT(DFN,"S",SDT),-1)
|
---|
36 | ..F S SDAPDTT=$O(^DPT(DFN,"S",SDAPDTT)) Q:+SDAPDTT'=SDAPDTT!(SDAPDTT>(EDT+.24)) D
|
---|
37 | ...N SDAP0,SDCL0,SDCP,SDST,SDNAPDT,DAYS
|
---|
38 | ...S SDAP0=^DPT(DFN,"S",SDAPDTT,0),SDCL=+SDAP0
|
---|
39 | ...S SDCL0=$G(^SC(SDCL,0)) Q:'$L(SDCL0) ; Get clinic 0 node.
|
---|
40 | ...S SDCP=$$CPAIR(SDCL0) ; Get DSS credit pair.
|
---|
41 | ...Q:'$D(SDSS(SDCP)) ; Not a primary care appointment.
|
---|
42 | ...S SDST=$P(SDAP0,U,2),SDCDTT=$P(SDAP0,U,14)
|
---|
43 | ...S INST=$$DIV(SDCL0)
|
---|
44 | ...I 'INST S INST(0)="*NO INSTITUTION"
|
---|
45 | ...E S INST(INST)=$$GET1^DIQ(4,INST_",",.01)
|
---|
46 | ...S RESCHED=$$RESCHED(DFN,SDAPDTT,SDCL,SDST,.SDNAPDT)
|
---|
47 | ...I 'RESCHED S SEL(INST,SDAPDTT)=SDCL Q
|
---|
48 | ...S:'$D(RESCHED(INST)) RESCHED(INST)=2
|
---|
49 | ...S X1=SDNAPDT,X2=SDAPDTT D ^%DTC S DAYS=X
|
---|
50 | ...S Y=SDAPDTT\1 D DD^%DT S SDAPDTT0=Y
|
---|
51 | ...I SDNAPDT'="" S Y=SDNAPDT\1 D DD^%DT S SDNAPDT=Y
|
---|
52 | ...S ^TMP($J,"SDOUT",INST(INST),"PT",NAME,DFN,SDAPDTT)=$E(SSN,1,3)_"-"_$E(SSN,4,5)_"-"_$E(SSN,6,10)_U_$$GET1^DIQ(44,SDCL_",",.01)_U_SDAPDTT0_U_$S($E(SDST)="N":"No-Show",1:"Canc by Patient")_U_SDNAPDT_U_DAYS
|
---|
53 | ...Q:SDAPDTT<SDCUTOFF!(RESCHED=2)
|
---|
54 | ...S RESCHED(INST)=1
|
---|
55 | ...S ^TMP($J,"SDOUT",INST(INST),"CAN")=$G(^TMP($J,"SDOUT",INST(INST),"CAN"))+1
|
---|
56 | ...S ^TMP($J,"SDOUT",INST(INST),"RSA")=$G(^TMP($J,"SDOUT",INST(INST),"RSA"))+1
|
---|
57 | ...S ^TMP($J,"SDOUT",INST(INST),"DAYS")=$G(^TMP($J,"SDOUT",INST(INST),"DAYS"))+DAYS
|
---|
58 | ...Q
|
---|
59 | ..; For episodes that were not no-show or cancelled by patient, show the first
|
---|
60 | ..; future appointment or if there is not a future appointment the nearest
|
---|
61 | ..; previous appointment.
|
---|
62 | ..S INST=""
|
---|
63 | ..S SSN=SSN_SSNP
|
---|
64 | ..F S INST=$O(SEL(INST)) Q:INST="" D:'$D(^TMP($J,"SDOUT",INST(INST),"PT",NAME,DFN))
|
---|
65 | ...S SDAPDTT="" D
|
---|
66 | ....S SDAPDTT1=$O(SEL(INST,TODAY))
|
---|
67 | ....S SDAPDTT0=$O(SEL(INST,TODAY),-1)
|
---|
68 | ....I SDAPDTT0="" S SDAPDTT=SDAPDTT1 Q
|
---|
69 | ....I SDAPDTT1="" S SDAPDTT=SDAPDTT0 Q
|
---|
70 | ....S X1=SDAPDTT0,X2=TODAY D ^%DTC S X0=X
|
---|
71 | ....S X1=TODAY,X2=SDAPDTT1 D ^%DTC
|
---|
72 | ....S SDAPDTT=$S(X0<X:SDAPDTT0,1:SDAPDTT1)
|
---|
73 | ....Q
|
---|
74 | ...I SDAPDTT'="" D
|
---|
75 | ....S Y=SDAPDTT\1 D DD^%DT S SDNEAPT=Y
|
---|
76 | ....S ^TMP($J,"SDOUT",INST(INST),"PT",NAME,DFN,SDAPDTT)=$E(SSN,1,3)_"-"_$E(SSN,4,5)_"-"_$E(SSN,6,10)_U_$$GET1^DIQ(44,SEL(INST,SDAPDTT)_",",.01)_U_U_U_SDNEAPT
|
---|
77 | ....Q
|
---|
78 | ...Q
|
---|
79 | ..S INST=""
|
---|
80 | ..F S INST=$O(RESCHED(INST)) Q:INST="" I RESCHED(INST)=1 S ^TMP($J,"SDOUT",INST(INST),"RSP")=$G(^TMP($J,"SDOUT",INST(INST),"RSP"))+1
|
---|
81 | ..Q
|
---|
82 | .Q
|
---|
83 | ;
|
---|
84 | S PAGE=0,(TDAYS,TRSA)=0
|
---|
85 | I 'SDSUMM D
|
---|
86 | .D HEAD10
|
---|
87 | .I '$D(^TMP($J,"SDOUT")) W !!!?47,"********** NO DATA TO PRINT **********" Q
|
---|
88 | .D HEAD20
|
---|
89 | .S INSTX=""
|
---|
90 | .F S INSTX=$O(^TMP($J,"SDOUT",INSTX)) Q:INSTX="" D Q:CTR
|
---|
91 | ..I LINE+5>IOSL D HEAD10 Q:CTR D HEAD20
|
---|
92 | ..W !!,"Institution : ",INSTX,! S LINE=LINE+3
|
---|
93 | ..S NAME=""
|
---|
94 | ..F S NAME=$O(^TMP($J,"SDOUT",INSTX,"PT",NAME)) Q:NAME="" D Q:CTR
|
---|
95 | ...S DFN=0
|
---|
96 | ...F S DFN=$O(^TMP($J,"SDOUT",INSTX,"PT",NAME,DFN)) Q:+DFN'=DFN D
|
---|
97 | ....S SDAPDT=0
|
---|
98 | ....F S SDAPDT=$O(^TMP($J,"SDOUT",INSTX,"PT",NAME,DFN,SDAPDT)) Q:+SDAPDT'=SDAPDT D
|
---|
99 | .....N REC
|
---|
100 | .....S REC=^TMP($J,"SDOUT",INSTX,"PT",NAME,DFN,SDAPDT)
|
---|
101 | .....I LINE+($P(REC,U,6)'="")+2>IOSL D HEAD10 Q:CTR D HEAD20
|
---|
102 | .....W !,$E(NAME,1,33),?38,$P(REC,U),?52,$E($P(REC,U,2),1,33),?89,$P(REC,U,3),?103,$P(REC,U,4),?120,$P(REC,U,5)
|
---|
103 | .....S LINE=LINE+1
|
---|
104 | .....I $P(REC,U,6)'="" W !?8,"Deferred Number of Days: ",$P(REC,U,6) S LINE=LINE+1
|
---|
105 | .....Q
|
---|
106 | ....Q
|
---|
107 | ...Q
|
---|
108 | ..I LINE+5>IOSL D HEAD10
|
---|
109 | ..D HEAD21,SUMMARY
|
---|
110 | ..Q
|
---|
111 | .Q
|
---|
112 | I SDSUMM D
|
---|
113 | .N INSTX,X,CAN
|
---|
114 | .D HEAD10,HEAD21
|
---|
115 | .S (INSTX,X)=""
|
---|
116 | .F S INSTX=$O(^TMP($J,"SDOUT",INSTX)) Q:INSTX="" S CAN=+$G(^TMP($J,"SDOUT",INSTX,"CAN")) D SUMMARY Q:CTR
|
---|
117 | .I X="" W !!!?21,"********** NO DATA TO PRINT **********"
|
---|
118 | .E W !!,"Overall average time between appointments : ",$S(TRSA=0:$J(TDAYS,2),1:$J(TDAYS/TRSA,2))
|
---|
119 | .Q
|
---|
120 | ;
|
---|
121 | K ^TMP($J,"PSODFN"),^TMP($J,"SDOUT")
|
---|
122 | Q:CTR
|
---|
123 | I $E(IOST)="C" S DIR(0)="E" D ^DIR
|
---|
124 | Q
|
---|
125 | ;
|
---|
126 | SUMMARY ;
|
---|
127 | ; In - INSTX, IOSL
|
---|
128 | ; Out - TRSA, TDAYS
|
---|
129 | ;
|
---|
130 | N RSA,DAYS
|
---|
131 | S X=INSTX
|
---|
132 | S RSA=+$G(^TMP($J,"SDOUT",INSTX,"RSA")),TRSA=TRSA+RSA
|
---|
133 | S DAYS=+$G(^TMP($J,"SDOUT",INSTX,"DAYS")),TDAYS=TDAYS+DAYS
|
---|
134 | I LINE+2>IOSL D HEAD10 Q:CTR D HEAD21
|
---|
135 | W !
|
---|
136 | W:SDSUMM X,?9,INST
|
---|
137 | W ?41,+$G(^TMP($J,"SDOUT",INSTX,"CAN"))
|
---|
138 | W ?52,RSA
|
---|
139 | W ?62,+$G(^TMP($J,"SDOUT",INSTX,"RSP"))
|
---|
140 | W ?71,$S(RSA=0:"0.00",1:$J(DAYS/RSA,"",2))
|
---|
141 | S LINE=LINE+1
|
---|
142 | Q
|
---|
143 | ;
|
---|
144 | BUILD(NAME,SSN,SDCL,SDST,SDCAPDTT,SDNEAPT) ;
|
---|
145 | N DAYS,INST
|
---|
146 | S DAYS=""
|
---|
147 | I SDCAPDTT'="" D
|
---|
148 | .S X1=SDNEAPT,X2=SDAPDTT D ^%DTC S DAYS=X
|
---|
149 | .S Y=SDCAPDTT\1 D DD^%DT S SDCAPDTT=Y
|
---|
150 | .Q
|
---|
151 | I SDNEAPT'="" S Y=SDNEAPT\1 D DD^%DT S SDNEAPT=Y
|
---|
152 | ; Get institution for 3rd node.
|
---|
153 | ; The patient names are already in alphabetical order so a numeric index is sufficient.
|
---|
154 | S UNQ=$O(^TMP($J,"SDOUT",INST,"PT",NAME,":"),-1)+1
|
---|
155 | S ^TMP($J,"SDOUT",INST,"PT",NAME,UNQ)=$E(SSN,1,3)_"-"_$E(SSN,4,5)_"-"_$E(SSN,6,10)_U_$$GET1^DIQ(44,SDCL_",",.01)_U_SDCAPDTT_U_$S(SDST="N":"No-Show",SDST="P":"Canc by Patient",1:"")_U_SDNEAPT_U_DAYS
|
---|
156 | Q
|
---|
157 | ;
|
---|
158 | RESCHED(DFN,SDAPDTT,SDCL,SDST,SDNAPDT) ; Search for a subsequent appointment at the same clinic.
|
---|
159 | ; 0 - no rescheduled appointment
|
---|
160 | ; 1 - cancelled by patient and rescheduled
|
---|
161 | ; 2 - no-show and rescheduled
|
---|
162 | N SDOK
|
---|
163 | I SDST="NA"!(SDST="PCA") S SDNAPDT=$P(^DPT(DFN,"S",SDAPDTT,0),U,10) Q:SDNAPDT>SDAPDTT SDST="NA"+1
|
---|
164 | Q:SDST'="N"&(SDST'="PC") 0
|
---|
165 | S SDOK=0,SDNAPDT=""
|
---|
166 | F S SDAPDTT=$O(^DPT(DFN,"S",SDAPDTT)) Q:+SDAPDTT'=SDAPDTT S SDOK=$P(^DPT(DFN,"S",SDAPDTT,0),U)=SDCL I SDOK S SDNAPDT=SDAPDTT Q
|
---|
167 | Q (SDST="NA"+1)*SDOK
|
---|
168 | ;
|
---|
169 | HEAD10 ;
|
---|
170 | S PAGE=PAGE+1
|
---|
171 | I PAGE>1,$E(IOST)="C" S DIR(0)="E" D ^DIR I $D(DIRUT) S CTR=1 Q
|
---|
172 | S SDTTL="Transitional Pharmacy Benefit Deferred Appointment Report"
|
---|
173 | I SDSUMM S SDTTL=SDTTL_" (Summary)"
|
---|
174 | W @IOF,!?IOM-$L(SDTTL)\2,SDTTL
|
---|
175 | I 'SDSUMM W ?122,"Page : "_PAGE
|
---|
176 | S Y=SDT D DD^%DT
|
---|
177 | S SDTTL="Report for the period of "_Y_" and "
|
---|
178 | S Y=EDT D DD^%DT
|
---|
179 | S SDTTL=SDTTL_Y
|
---|
180 | W !?IOM-$L(SDTTL)\2,SDTTL
|
---|
181 | W !
|
---|
182 | S LINE=4
|
---|
183 | Q
|
---|
184 | ;
|
---|
185 | HEAD20 ;
|
---|
186 | W !?89,"Cancelled",?103,"Reason for",?120,"New/Closest"
|
---|
187 | W !,"Patient",?38,"SSN",?52,"Clinic",?89,"Appt. Date",?103,"Cancellation",?120,"Appt. Date"
|
---|
188 | W !,"=======",?38,"===",?52,"======",?89,"==========",?103,"============",?120,"==========="
|
---|
189 | S LINE=LINE+3
|
---|
190 | Q
|
---|
191 | ;
|
---|
192 | HEAD21 ;
|
---|
193 | W !!
|
---|
194 | W:'SDSUMM "Count for appts. after "_SDCUTOFD
|
---|
195 | W ?41,"Appts",?52,"Appts",?62,"Patients",?71,"Ave time"
|
---|
196 | W !
|
---|
197 | W:SDSUMM "Institution"
|
---|
198 | W ?41,"Cancelled",?52,"Deferred",?62,"Deferred",?71,"/appts"
|
---|
199 | W !
|
---|
200 | W:SDSUMM "==========="
|
---|
201 | W ?41,"=========",?52,"========",?62,"========",?71,"========"
|
---|
202 | S LINE=LINE+4
|
---|
203 | Q
|
---|
204 | ;
|
---|
205 | INIT(SDSS) ;
|
---|
206 | N SDI,SDII
|
---|
207 | F SDI=322,323,350 F SDII="000",185,186,187 S SDSS(SDI_SDII)=""
|
---|
208 | K ^TMP($J,"SDOUT")
|
---|
209 | Q
|
---|
210 | ;
|
---|
211 | CPAIR(SDCL0) ; Get credit pair
|
---|
212 | ; Input: SDCL0=hospital location zeroeth node
|
---|
213 | N SDX
|
---|
214 | S SDX=$P($G(^DIC(40.7,+$P(SDCL0,U,7),0)),U,2)
|
---|
215 | S SDX=SDX_$P($G(^DIC(40.7,+$P(SDCL0,U,18),0)),U,2)
|
---|
216 | S SDX=$E(SDX_"000000",1,6)
|
---|
217 | Q SDX
|
---|
218 | ;
|
---|
219 | DIV(SDCL0) ;Get facility division name and number
|
---|
220 | ;Input: SDCL0=hospital location zeroeth node
|
---|
221 | N SDIVV,SDHOLD S SDIVV=$P(SDCL0,U,15)
|
---|
222 | S SDHOLD=0
|
---|
223 | I SDIVV>0 S SDHOLD=$P($$SITE^VASITE(,SDIVV),"^")
|
---|
224 | I SDHOLD>0 Q SDHOLD
|
---|
225 | S SDHOLD=$P(SDCL0,"^",4)
|
---|
226 | I 'SDHOLD Q 0
|
---|
227 | I SDHOLD,'$D(^DIC(4,SDHOLD,0)) S SDHOLD=0
|
---|
228 | Q SDHOLD
|
---|
229 | ;
|
---|
230 | DEV ;
|
---|
231 | K %ZIS,IOP,POP,ZTSK S SDDIO=ION,%ZIS="QM" D ^%ZIS K %ZIS
|
---|
232 | S IOM=$S(SDSUMM:80,1:132)
|
---|
233 | I POP S IOP=SDDIO D ^%ZIS K IOP,SDDIO W !,"Please try later!" G END
|
---|
234 | K SDDIO I $D(IO("Q")) K IO("Q"),ZTIO,ZTSAVE,ZTDTH,ZTSK D G END
|
---|
235 | .S ZTRTN="EN^SDPBP",ZTDTH=$H,ZTDESC="TRANSITIONAL PHARMACY BENEFITS ELIGIBILITY PRINT"
|
---|
236 | .S ZTSAVE("SDT")=""
|
---|
237 | .S ZTSAVE("EDT")=""
|
---|
238 | .S ZTSAVE("SDSUMM")=""
|
---|
239 | .D ^%ZTLOAD W:$D(ZTSK) !,"Report is Queued to print !!" K ZTSK
|
---|
240 | .Q
|
---|
241 | D EN
|
---|
242 | END ;
|
---|
243 | W ! D ^%ZISC S:$D(ZTQUEUED) ZTREQ="@"
|
---|
244 | K ^TMP($J)
|
---|
245 | Q
|
---|