| 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 | 
|---|