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