| 1 | PSUV1 ;BIR/CFL - Extract Data of PBM IV Module ;25 AUG 1998 | 
|---|
| 2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005 | 
|---|
| 3 | ;DBIAs | 
|---|
| 4 | ; Reference to file #55   supported by DBIA 2497 | 
|---|
| 5 | ; Reference to file #59.5 supported by DBIA 2499 | 
|---|
| 6 | ; Reference to file #40.8 supported by DBIA 2438 | 
|---|
| 7 | ; Reference to file #7    supported by DBIA 2495 | 
|---|
| 8 | ; Reference to file #49   supported by DBIA 10093 | 
|---|
| 9 | ; Reference to file #52.6 supported by DBIA 436 | 
|---|
| 10 | ; Reference to file #50   supported by DBIA 221 | 
|---|
| 11 | ; Reference to file #52.7 supported by DBIA 437 | 
|---|
| 12 | ; Reference to file #2    supported by DBIA 10035 and 2701 | 
|---|
| 13 | ; Reference to file #200  supported by DBIA 10060 | 
|---|
| 14 | ; | 
|---|
| 15 | IVDATA ;Loop through IV data | 
|---|
| 16 | N PSUDOC1 | 
|---|
| 17 | K PSUSSNA,PSUORDA | 
|---|
| 18 | ; *34 |==> | 
|---|
| 19 | S PSUIVDT=PSUSDT\1-.0001 ;use 1st day of extract for 'stop date' scan | 
|---|
| 20 | S PSUTEDT=PSUEDT\1+.2359 | 
|---|
| 21 | F  S PSUIVDT=$O(^PS(55,"AIV",PSUIVDT)) Q:'PSUIVDT  D | 
|---|
| 22 | .S PSUPDA="" | 
|---|
| 23 | .F  S PSUPDA=$O(^PS(55,"AIV",PSUIVDT,PSUPDA)) Q:'PSUPDA  D | 
|---|
| 24 | ..S PSUODA="" | 
|---|
| 25 | ..F  S PSUODA=$O(^PS(55,"AIV",PSUIVDT,PSUPDA,PSUODA)) Q:'PSUODA  D | 
|---|
| 26 | ...S ^XTMP("PSU_"_PSUJOB,"PSUHLD",PSUODA)=""   ;should be the D0's for file 55.01 ; <==| *34 | 
|---|
| 27 | ...S COUNT=0 | 
|---|
| 28 | ...S PSUDIV="" | 
|---|
| 29 | ...K PSUIV | 
|---|
| 30 | ...; screen test patients | 
|---|
| 31 | ...Q:$$TESTPAT^PSUTL1(PSUPDA) | 
|---|
| 32 | ...S XX=$$VALI^PSUTL(55.01,"PSUPDA,PSUODA",.02) Q:XX>PSUTEDT  ;*34 | 
|---|
| 33 | ...K PSUIV ;*34 | 
|---|
| 34 | ...D GETS^PSUTL(55.01,"PSUPDA,PSUODA",".01;.02;.03;.04;.06;.08;.09;.22;104;106;108","PSUIV","I") | 
|---|
| 35 | ...;.01-Order num;.02-Start Dt;.03-Stop Dt;.04-Type;.06-Provider | 
|---|
| 36 | ...;104-Ward;106-Chemotherapy Type;108-Intermittent Syringe | 
|---|
| 37 | ...Q:'$D(PSUIV) | 
|---|
| 38 | ...;VMP OIFO BAY PINES;ELR;PSU*3*35 ADDED NEXT LINE | 
|---|
| 39 | ...Q:$G(PSUIV(.06,"I"))'>0 | 
|---|
| 40 | ...S ^XTMP("PSU_"_PSUJOB,"PSUPIEN",PSUPDA)=""     ;Patient IEN's ;*34 | 
|---|
| 41 | ...D MOVEI^PSUTL("PSUIV") | 
|---|
| 42 | ...S PSUIV(.02)=PSUIV(.02)\1 | 
|---|
| 43 | ...S PSUIV(.03)=PSUIV(.03)\1 | 
|---|
| 44 | ...I PSUIV(.22)'="" S PSUDIV=$$VALI^PSUTL(59.5,PSUIV(.22),.02) | 
|---|
| 45 | ...S PSUFAC=$$VALI^PSUTL(40.8,PSUDIV,1) S:PSUFAC="" PSUFAC=PSUSNDR | 
|---|
| 46 | ...S PSUFAC(PSUFAC)="" | 
|---|
| 47 | ...S PSUOUTP=$S(PSUIV(104)=.5:"Y",1:"N") | 
|---|
| 48 | ...S DFN=PSUPDA D PID^VADPT | 
|---|
| 49 | ...S PSUSSN=$TR(VA("PID"),"^-","") | 
|---|
| 50 | ...D ICN | 
|---|
| 51 | ...K PSUDOC | 
|---|
| 52 | ...D GETS^PSUTL(200,"PSUIV(.06)","9;29;53.5","PSUDOC","I") | 
|---|
| 53 | ...D MOVEI^PSUTL("PSUDOC") | 
|---|
| 54 | ...I $G(PSUDOC(9))="" S PSUVSSN1=999999999 | 
|---|
| 55 | ...I $G(PSUDOC(9))'="" S PSUVSSN1=PSUDOC(9) | 
|---|
| 56 | ...S ^XTMP("PSU_"_PSUJOB,"PSUPDR",PSUVSSN1,PSUIV(.06))="" | 
|---|
| 57 | ...S (PSUPCLS,PSUSP1,PSUSP2)="" | 
|---|
| 58 | ...I $D(PSUDOC(53.5)),PSUDOC(53.5)'="" D | 
|---|
| 59 | ....S PSUPCLS=$$VALI^PSUTL(7,PSUDOC(53.5),1) | 
|---|
| 60 | ....I PSUPCLS="" S PSUPCLS=$$VALI^PSUTL(7,PSUDOC(53.5),.01) | 
|---|
| 61 | ...S PSUPSV=$S($L($G(PSUDOC(29))):$$VAL^PSUTL(49,PSUDOC(29),.01),1:"") | 
|---|
| 62 | ...S PSUPSV=$$UPPER^PSUTL(PSUPSV),PSUSERV="" | 
|---|
| 63 | ...I $L(PSUPSV),$D(PSECT(PSUPSV)) S PSUSERV=PSECT(PSUPSV) | 
|---|
| 64 | ...S SPECPTR=$$GET^XUA4A72(PSUIV(.06),PSUIVDT) | 
|---|
| 65 | ...S PSUSP1=$P($G(SPECPTR),U,3),PSUSP2=$P($G(SPECPTR),U,4) | 
|---|
| 66 | ...D OCCAMT | 
|---|
| 67 | ...I PSUFND D | 
|---|
| 68 | ....D GETRATE^PSUV2(PSUIV(.04)) | 
|---|
| 69 | ....D SETTOT | 
|---|
| 70 | ....S RECTYP="" | 
|---|
| 71 | ....D ADDTIV | 
|---|
| 72 | ....D SOLUTN | 
|---|
| 73 | I $D(^XTMP(PSUIVSUB,"RECORDS")) D SETSUM^PSUV2 | 
|---|
| 74 | Q | 
|---|
| 75 | ; | 
|---|
| 76 | ICN ;Find patient ICN | 
|---|
| 77 | ; | 
|---|
| 78 | N PSUPICN,PSUPICN1,PSUICN | 
|---|
| 79 | S PSUPTN=0 | 
|---|
| 80 | I $G(PSUSSN),PSUSSN'="" D | 
|---|
| 81 | .F  S PSUPTN=$O(^DPT("SSN",PSUSSN,PSUPTN)) Q:PSUPTN=""  D | 
|---|
| 82 | ..S PSUPICN1=$$GETICN^MPIF001(PSUPTN) D | 
|---|
| 83 | ...I PSUPICN1'[-1 D | 
|---|
| 84 | ....S ^XTMP("PSU_"_PSUJOB,"PSUPICN")=PSUPICN1 | 
|---|
| 85 | ...I PSUPICN1[-1 S ^XTMP("PSU_"_PSUJOB,"PSUPICN")="" | 
|---|
| 86 | Q | 
|---|
| 87 | ; | 
|---|
| 88 | ; | 
|---|
| 89 | OCCAMT ;Calculate the number of dispensing occurrences | 
|---|
| 90 | S (PSUFND,PSUDISP,PSUPULL,OCC,PSUDISPT,PSURECT,PSUDEST,PSUCAN)=0 | 
|---|
| 91 | F  S OCC=$O(^PS(55,PSUPDA,"IV",PSUODA,"LAB",OCC)) Q:'OCC  D | 
|---|
| 92 | .K PSUOCC | 
|---|
| 93 | .D GETS^PSUTL(55.1111,"PSUPDA,PSUODA,OCC","1;2;4;6","PSUOCC","I") | 
|---|
| 94 | .D MOVEI^PSUTL("PSUOCC") | 
|---|
| 95 | .S PSUOCC(1)=PSUOCC(1)\1 | 
|---|
| 96 | .I PSUOCC(1)<PSUSDT!(PSUOCC(1)>PSUTEDT) Q  ;*34 | 
|---|
| 97 | .S PSUFND=1 | 
|---|
| 98 | .I $G(PSUOCC(6))=1,$G(PSUOCC(2))=1 D | 
|---|
| 99 | ..S PSUDISP=PSUDISP+$G(PSUOCC(4)) | 
|---|
| 100 | ..S PSUDISPT=PSUDISP                        ;Total IV dispensed | 
|---|
| 101 | ..S PSUPULL=PSUPULL+$G(PSUOCC(4)) | 
|---|
| 102 | ..S ^XTMP(PSUIVSUB,"TYPE_"_PSUIV(.04),PSUFAC)=PSUOCC(4)+$G(^XTMP(PSUIVSUB,"TYPE_"_PSUIV(.04),PSUFAC)) | 
|---|
| 103 | ..I PSUOUTP="Y" D  ; Total outpatient IV's dispensed | 
|---|
| 104 | ...S ^XTMP(PSUIVSUB,"ODISP",PSUFAC)=$G(^XTMP(PSUIVSUB,"ODISP",PSUFAC))+PSUOCC(4) | 
|---|
| 105 | .;I PSUOCC(2)=2!(PSUOCC(2)=4) S PSUDISP=PSUDISP-PSUOCC(4) | 
|---|
| 106 | .I PSUOCC(6)=1,PSUOCC(2)=2 D | 
|---|
| 107 | ..S PSURECT=$G(PSURECT)+PSUOCC(4)               ;Total IV Recycled | 
|---|
| 108 | .I PSUOCC(6)=1,PSUOCC(2)=3 D | 
|---|
| 109 | ..S PSUDEST=$G(PSUDEST)+PSUOCC(4)               ;Total IV Destroyed | 
|---|
| 110 | .I PSUOCC(6)=1,PSUOCC(2)=4 D | 
|---|
| 111 | ..S PSUCAN=$G(PSUCAN)+PSUOCC(4)                 ;Total IV Cancelled | 
|---|
| 112 | .I PSUOCC(6)=1 D | 
|---|
| 113 | ..I (PSUOCC(2)=2)!(PSUOCC(2)=4) S PSUDISP=PSUDISP-PSUOCC(4) ;Net disp | 
|---|
| 114 | Q | 
|---|
| 115 | SETTOT ;Set totals | 
|---|
| 116 | ; Total number of IV's ordered | 
|---|
| 117 | S ^XTMP(PSUIVSUB,"ORD",PSUFAC)=$G(^XTMP(PSUIVSUB,"ORD",PSUFAC))+1 | 
|---|
| 118 | ; Total number of IV patients | 
|---|
| 119 | I '$D(^XTMP(PSUIVSUB,"PAT",PSUSSN,PSUFAC)) D | 
|---|
| 120 | .S ^XTMP(PSUIVSUB,"SSN",PSUFAC)=$G(^XTMP(PSUIVSUB,"SSN",PSUFAC))+1 | 
|---|
| 121 | .S ^XTMP(PSUIVSUB,"PAT",PSUSSN,PSUFAC)="" | 
|---|
| 122 | .S PSUDIV=PSUFAC D GETDIV^PSUV3 I PSUDIVNM'="" D | 
|---|
| 123 | ..S ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIVNM,PSUSSN)=""  ;Pt demo summary | 
|---|
| 124 | .I PSUDIVNM="" S ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIV,PSUSSN)="" | 
|---|
| 125 | I PSUOUTP="Y" D | 
|---|
| 126 | .; Total outpatient IV's ordered | 
|---|
| 127 | .S ^XTMP(PSUIVSUB,"OORD",PSUFAC)=$G(^XTMP(PSUIVSUB,"OORD",PSUFAC))+1 | 
|---|
| 128 | Q | 
|---|
| 129 | ADDTIV ;Loop through each additive | 
|---|
| 130 | S (PSUNITS,ADTIV)=0 | 
|---|
| 131 | F  S ADTIV=$O(^PS(55,PSUPDA,"IV",PSUODA,"AD",ADTIV)) Q:'ADTIV  D | 
|---|
| 132 | .K PSUADDTV,PSUGNRIC,PSUADD | 
|---|
| 133 | .D GETS^PSUTL(55.02,"PSUPDA,PSUODA,ADTIV",".01;.02","PSUADDTV","I") | 
|---|
| 134 | .D MOVEI^PSUTL("PSUADDTV") | 
|---|
| 135 | .D GETS^PSUTL(52.6,"PSUADDTV(.01)",".01;1;7","PSUGNRIC","I") | 
|---|
| 136 | .D MOVEI^PSUTL("PSUGNRIC") | 
|---|
| 137 | .S PSUPNAM=PSUGNRIC(.01) | 
|---|
| 138 | .S PSUDGU=$$VAL^PSUTL(52.6,PSUADDTV(.01),2) | 
|---|
| 139 | .S PSUDGDA=PSUGNRIC(1) | 
|---|
| 140 | .D GETS^PSUTL(50,"PSUDGDA",".01;2;20;21;22;25;31;51;52;3","PSUADD","I") | 
|---|
| 141 | .D MOVEI^PSUTL("PSUADD") | 
|---|
| 142 | .S PSUGNM=PSUADD(.01) | 
|---|
| 143 | .S PSUDCLS=PSUADD(2) | 
|---|
| 144 | .S PSUPRNM=PSUADD(21) | 
|---|
| 145 | .S PSUNDC=PSUADD(31) | 
|---|
| 146 | .S PSUNFI=PSUADD(51) | 
|---|
| 147 | .S PSUNADR=PSUADD(20) | 
|---|
| 148 | .S PSUNDCL=PSUADD(22) | 
|---|
| 149 | .S PSUDEA=PSUADD(3) | 
|---|
| 150 | .S PSUNAF=$S(PSUADD(52):"N/F",1:"") | 
|---|
| 151 | .D SETVAR | 
|---|
| 152 | .S PSUSTRN=+PSUADDTV(.02) | 
|---|
| 153 | .; | 
|---|
| 154 | .;DAM  Add AMIS Additive data | 
|---|
| 155 | .N PSUTDSP1 | 
|---|
| 156 | .S PSUTDSP1=$G(PSUDISPT)*PSUSTRN       ;Total Additive units dispens | 
|---|
| 157 | .; | 
|---|
| 158 | .N PSURCY1 | 
|---|
| 159 | .S PSURCY1=$G(PSURECT)*PSUSTRN         ;Total Additive units recycled | 
|---|
| 160 | .; | 
|---|
| 161 | .N PSUDES1 | 
|---|
| 162 | .S PSUDES1=$G(PSUDEST)*PSUSTRN      ;Total Additive units destroyed | 
|---|
| 163 | .; | 
|---|
| 164 | .N PSUCAN1 | 
|---|
| 165 | .S PSUCAN1=$G(PSUCAN)*PSUSTRN         ;Total Additive units cancelled | 
|---|
| 166 | .;END DAM | 
|---|
| 167 | .S PSUNITS=PSUDISP*PSUSTRN | 
|---|
| 168 | .S PSUBAGS=PSUPULL*PSUSTRN | 
|---|
| 169 | .S PSUDCST=PSUGNRIC(7) | 
|---|
| 170 | .S RECIND="A" | 
|---|
| 171 | .D CALC | 
|---|
| 172 | .D SETREC^PSUV2 | 
|---|
| 173 | .D SETDRUG^PSUV2 | 
|---|
| 174 | Q | 
|---|
| 175 | SOLUTN ;Loop through each solution | 
|---|
| 176 | S (PSUNITS,SOLDA)=0 F  S SOLDA=$O(^PS(55,PSUPDA,"IV",PSUODA,"SOL",SOLDA)) Q:'SOLDA  D | 
|---|
| 177 | .K PSUSOL,GENRIC,SOLDRUG | 
|---|
| 178 | .D GETS^PSUTL(55.11,"PSUPDA,PSUODA,SOLDA",".01;1","PSUSOL","I") | 
|---|
| 179 | .D MOVEI^PSUTL("PSUSOL") | 
|---|
| 180 | .D GETS^PSUTL(52.7,"PSUSOL(.01)",".01;1;7","GENRIC","I") | 
|---|
| 181 | .D MOVEI^PSUTL("GENRIC") | 
|---|
| 182 | .S PSUPNAM=GENRIC(.01) | 
|---|
| 183 | .S PSUDGU="ML" | 
|---|
| 184 | .S PSUDGDA=GENRIC(1) | 
|---|
| 185 | .D GETS^PSUTL(50,"PSUDGDA",".01;2;20;21;22;25;31;51;52;3","SOLDRUG","I") | 
|---|
| 186 | .D MOVEI^PSUTL("SOLDRUG") | 
|---|
| 187 | .S PSUGNM=SOLDRUG(.01) | 
|---|
| 188 | .S PSUDCLS=SOLDRUG(2) | 
|---|
| 189 | .S PSUPRNM=SOLDRUG(21) | 
|---|
| 190 | .S PSUNDC=SOLDRUG(31) | 
|---|
| 191 | .S PSUNFI=SOLDRUG(51) | 
|---|
| 192 | .S PSUNADR=SOLDRUG(20) | 
|---|
| 193 | .S PSUNDCL=SOLDRUG(22) | 
|---|
| 194 | .S PSUDEA=SOLDRUG(3) | 
|---|
| 195 | .S PSUNAF=$S(SOLDRUG(52):"N/F",1:"") | 
|---|
| 196 | .D SETVAR | 
|---|
| 197 | .S VOLUME=+PSUSOL(1) | 
|---|
| 198 | .; | 
|---|
| 199 | .;DAM ADD AMIS SOLUTION DATA | 
|---|
| 200 | .N PSUTSOL1 | 
|---|
| 201 | .S PSUTSOL1=$G(PSUDISPT)*VOLUME    ;Total Solution units dispense | 
|---|
| 202 | .; | 
|---|
| 203 | .N PSUTRS1 | 
|---|
| 204 | .S PSUTRS1=$G(PSURECT)*VOLUME       ;Total Solution units recycl | 
|---|
| 205 | .; | 
|---|
| 206 | .N PSUTDS1 | 
|---|
| 207 | .S PSUTDS1=$G(PSUDEST)*VOLUME     ;Total Solution units destroyed | 
|---|
| 208 | .; | 
|---|
| 209 | .N PSUTCS1 | 
|---|
| 210 | .S PSUTCS1=$G(PSUCAN)*VOLUME        ;Total Solution units cancelled | 
|---|
| 211 | .;END DAM | 
|---|
| 212 | .S PSUNITS=PSUDISP*VOLUME | 
|---|
| 213 | .S PSUBAGS=PSUPULL*VOLUME | 
|---|
| 214 | .S PSUDCST=GENRIC(7) | 
|---|
| 215 | .S RECIND="S" | 
|---|
| 216 | .D CALC | 
|---|
| 217 | .D SETREC^PSUV2 | 
|---|
| 218 | .D SETDRUG^PSUV2 | 
|---|
| 219 | Q | 
|---|
| 220 | SETVAR ;Setup common variables for IV Additives and Solutions | 
|---|
| 221 | I PSUGNM="" S PSUGNM="UNKNOWN GENERIC NAME" | 
|---|
| 222 | I PSUPRNM="" S PSUPRNM="UNKNOWN VA PRODUCT NAME" | 
|---|
| 223 | I PSUNDC="" S PSUNDC="No NDC" | 
|---|
| 224 | I PSUNFI=1 S PSUNFI="N/F" | 
|---|
| 225 | S (PSIVNFI,PSIVNFR)="" | 
|---|
| 226 | I $$VERSION^XPDUTL("PSN")'<4 D | 
|---|
| 227 | .S PSIVNFI=$$FORMI^PSNAPIS(PSUNADR,PSUNDCL) | 
|---|
| 228 | .S PSIVNFR=$$FORMR^PSNAPIS(PSUNADR,PSUNDCL)>0 | 
|---|
| 229 | Q | 
|---|
| 230 | CALC ;Do calculations for additives and solutions | 
|---|
| 231 | S ^XTMP(PSUIVSUB,"CST",PSUFAC)=(PSUNITS*PSUDCST)+$G(^XTMP(PSUIVSUB,"CST",PSUFAC)) | 
|---|
| 232 | S RECTYP="" | 
|---|
| 233 | S COUNT=COUNT+1 | 
|---|
| 234 | S:COUNT=1 RECTYP="P" | 
|---|
| 235 | I PSUOUTP="Y" D | 
|---|
| 236 | .S ^XTMP(PSUIVSUB,"OCST",PSUFAC)=(PSUDCST*PSUBAGS)+$G(^XTMP(PSUIVSUB,"OCST",PSUFAC)) | 
|---|
| 237 | I PSUIV(.04)="P" D | 
|---|
| 238 | .S ^XTMP(PSUIVSUB,"SPIG",PSUFAC)=(PSUDCST*PSUBAGS)+$G(^XTMP(PSUIVSUB,"SPIG",PSUFAC)) | 
|---|
| 239 | I PSUIV(.04)="A" D | 
|---|
| 240 | .S ^XTMP(PSUIVSUB,"SADM",PSUFAC)=(PSUDCST*PSUBAGS)+$G(^XTMP(PSUIVSUB,"SADM",PSUFAC)) | 
|---|
| 241 | I PSUIV(.04)="H" D | 
|---|
| 242 | .S ^XTMP(PSUIVSUB,"SHYP",PSUFAC)=(PSUDCST*PSUBAGS)+$G(^XTMP(PSUIVSUB,"SHYP",PSUFAC)) | 
|---|
| 243 | I PSUIV(.04)="S" D | 
|---|
| 244 | .S ^XTMP(PSUIVSUB,"SSYR",PSUFAC)=(PSUDCST*PSUBAGS)+$G(^XTMP(PSUIVSUB,"SSYR",PSUFAC)) | 
|---|
| 245 | I PSUIV(.04)="C" D | 
|---|
| 246 | .S ^XTMP(PSUIVSUB,"SCHEM",PSUFAC)=(PSUDCST*PSUBAGS)+$G(^XTMP(PSUIVSUB,"SCHEM",PSUFAC)) | 
|---|
| 247 | Q | 
|---|