- PSUV1 ;BIR/CFL - Extract Data of PBM IV Module ;25 AUG 1998
- ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005
- ;DBIAs
- ; Reference to file #55 supported by DBIA 2497
- ; Reference to file #59.5 supported by DBIA 2499
- ; Reference to file #40.8 supported by DBIA 2438
- ; Reference to file #7 supported by DBIA 2495
- ; Reference to file #49 supported by DBIA 10093
- ; Reference to file #52.6 supported by DBIA 436
- ; Reference to file #50 supported by DBIA 221
- ; Reference to file #52.7 supported by DBIA 437
- ; Reference to file #2 supported by DBIA 10035 and 2701
- ; Reference to file #200 supported by DBIA 10060
- ;
- IVDATA ;Loop through IV data
- N PSUDOC1
- K PSUSSNA,PSUORDA
- ; *34 |==>
- S PSUIVDT=PSUSDT\1-.0001 ;use 1st day of extract for 'stop date' scan
- S PSUTEDT=PSUEDT\1+.2359
- F S PSUIVDT=$O(^PS(55,"AIV",PSUIVDT)) Q:'PSUIVDT D
- .S PSUPDA=""
- .F S PSUPDA=$O(^PS(55,"AIV",PSUIVDT,PSUPDA)) Q:'PSUPDA D
- ..S PSUODA=""
- ..F S PSUODA=$O(^PS(55,"AIV",PSUIVDT,PSUPDA,PSUODA)) Q:'PSUODA D
- ...S ^XTMP("PSU_"_PSUJOB,"PSUHLD",PSUODA)="" ;should be the D0's for file 55.01 ; <==| *34
- ...S COUNT=0
- ...S PSUDIV=""
- ...K PSUIV
- ...; screen test patients
- ...Q:$$TESTPAT^PSUTL1(PSUPDA)
- ...S XX=$$VALI^PSUTL(55.01,"PSUPDA,PSUODA",.02) Q:XX>PSUTEDT ;*34
- ...K PSUIV ;*34
- ...D GETS^PSUTL(55.01,"PSUPDA,PSUODA",".01;.02;.03;.04;.06;.08;.09;.22;104;106;108","PSUIV","I")
- ...;.01-Order num;.02-Start Dt;.03-Stop Dt;.04-Type;.06-Provider
- ...;104-Ward;106-Chemotherapy Type;108-Intermittent Syringe
- ...Q:'$D(PSUIV)
- ...;VMP OIFO BAY PINES;ELR;PSU*3*35 ADDED NEXT LINE
- ...Q:$G(PSUIV(.06,"I"))'>0
- ...S ^XTMP("PSU_"_PSUJOB,"PSUPIEN",PSUPDA)="" ;Patient IEN's ;*34
- ...D MOVEI^PSUTL("PSUIV")
- ...S PSUIV(.02)=PSUIV(.02)\1
- ...S PSUIV(.03)=PSUIV(.03)\1
- ...I PSUIV(.22)'="" S PSUDIV=$$VALI^PSUTL(59.5,PSUIV(.22),.02)
- ...S PSUFAC=$$VALI^PSUTL(40.8,PSUDIV,1) S:PSUFAC="" PSUFAC=PSUSNDR
- ...S PSUFAC(PSUFAC)=""
- ...S PSUOUTP=$S(PSUIV(104)=.5:"Y",1:"N")
- ...S DFN=PSUPDA D PID^VADPT
- ...S PSUSSN=$TR(VA("PID"),"^-","")
- ...D ICN
- ...K PSUDOC
- ...D GETS^PSUTL(200,"PSUIV(.06)","9;29;53.5","PSUDOC","I")
- ...D MOVEI^PSUTL("PSUDOC")
- ...I $G(PSUDOC(9))="" S PSUVSSN1=999999999
- ...I $G(PSUDOC(9))'="" S PSUVSSN1=PSUDOC(9)
- ...S ^XTMP("PSU_"_PSUJOB,"PSUPDR",PSUVSSN1,PSUIV(.06))=""
- ...S (PSUPCLS,PSUSP1,PSUSP2)=""
- ...I $D(PSUDOC(53.5)),PSUDOC(53.5)'="" D
- ....S PSUPCLS=$$VALI^PSUTL(7,PSUDOC(53.5),1)
- ....I PSUPCLS="" S PSUPCLS=$$VALI^PSUTL(7,PSUDOC(53.5),.01)
- ...S PSUPSV=$S($L($G(PSUDOC(29))):$$VAL^PSUTL(49,PSUDOC(29),.01),1:"")
- ...S PSUPSV=$$UPPER^PSUTL(PSUPSV),PSUSERV=""
- ...I $L(PSUPSV),$D(PSECT(PSUPSV)) S PSUSERV=PSECT(PSUPSV)
- ...S SPECPTR=$$GET^XUA4A72(PSUIV(.06),PSUIVDT)
- ...S PSUSP1=$P($G(SPECPTR),U,3),PSUSP2=$P($G(SPECPTR),U,4)
- ...D OCCAMT
- ...I PSUFND D
- ....D GETRATE^PSUV2(PSUIV(.04))
- ....D SETTOT
- ....S RECTYP=""
- ....D ADDTIV
- ....D SOLUTN
- I $D(^XTMP(PSUIVSUB,"RECORDS")) D SETSUM^PSUV2
- Q
- ;
- ICN ;Find patient ICN
- ;
- N PSUPICN,PSUPICN1,PSUICN
- S PSUPTN=0
- I $G(PSUSSN),PSUSSN'="" D
- .F S PSUPTN=$O(^DPT("SSN",PSUSSN,PSUPTN)) Q:PSUPTN="" D
- ..S PSUPICN1=$$GETICN^MPIF001(PSUPTN) D
- ...I PSUPICN1'[-1 D
- ....S ^XTMP("PSU_"_PSUJOB,"PSUPICN")=PSUPICN1
- ...I PSUPICN1[-1 S ^XTMP("PSU_"_PSUJOB,"PSUPICN")=""
- Q
- ;
- ;
- OCCAMT ;Calculate the number of dispensing occurrences
- S (PSUFND,PSUDISP,PSUPULL,OCC,PSUDISPT,PSURECT,PSUDEST,PSUCAN)=0
- F S OCC=$O(^PS(55,PSUPDA,"IV",PSUODA,"LAB",OCC)) Q:'OCC D
- .K PSUOCC
- .D GETS^PSUTL(55.1111,"PSUPDA,PSUODA,OCC","1;2;4;6","PSUOCC","I")
- .D MOVEI^PSUTL("PSUOCC")
- .S PSUOCC(1)=PSUOCC(1)\1
- .I PSUOCC(1)<PSUSDT!(PSUOCC(1)>PSUTEDT) Q ;*34
- .S PSUFND=1
- .I $G(PSUOCC(6))=1,$G(PSUOCC(2))=1 D
- ..S PSUDISP=PSUDISP+$G(PSUOCC(4))
- ..S PSUDISPT=PSUDISP ;Total IV dispensed
- ..S PSUPULL=PSUPULL+$G(PSUOCC(4))
- ..S ^XTMP(PSUIVSUB,"TYPE_"_PSUIV(.04),PSUFAC)=PSUOCC(4)+$G(^XTMP(PSUIVSUB,"TYPE_"_PSUIV(.04),PSUFAC))
- ..I PSUOUTP="Y" D ; Total outpatient IV's dispensed
- ...S ^XTMP(PSUIVSUB,"ODISP",PSUFAC)=$G(^XTMP(PSUIVSUB,"ODISP",PSUFAC))+PSUOCC(4)
- .;I PSUOCC(2)=2!(PSUOCC(2)=4) S PSUDISP=PSUDISP-PSUOCC(4)
- .I PSUOCC(6)=1,PSUOCC(2)=2 D
- ..S PSURECT=$G(PSURECT)+PSUOCC(4) ;Total IV Recycled
- .I PSUOCC(6)=1,PSUOCC(2)=3 D
- ..S PSUDEST=$G(PSUDEST)+PSUOCC(4) ;Total IV Destroyed
- .I PSUOCC(6)=1,PSUOCC(2)=4 D
- ..S PSUCAN=$G(PSUCAN)+PSUOCC(4) ;Total IV Cancelled
- .I PSUOCC(6)=1 D
- ..I (PSUOCC(2)=2)!(PSUOCC(2)=4) S PSUDISP=PSUDISP-PSUOCC(4) ;Net disp
- Q
- SETTOT ;Set totals
- ; Total number of IV's ordered
- S ^XTMP(PSUIVSUB,"ORD",PSUFAC)=$G(^XTMP(PSUIVSUB,"ORD",PSUFAC))+1
- ; Total number of IV patients
- I '$D(^XTMP(PSUIVSUB,"PAT",PSUSSN,PSUFAC)) D
- .S ^XTMP(PSUIVSUB,"SSN",PSUFAC)=$G(^XTMP(PSUIVSUB,"SSN",PSUFAC))+1
- .S ^XTMP(PSUIVSUB,"PAT",PSUSSN,PSUFAC)=""
- .S PSUDIV=PSUFAC D GETDIV^PSUV3 I PSUDIVNM'="" D
- ..S ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIVNM,PSUSSN)="" ;Pt demo summary
- .I PSUDIVNM="" S ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIV,PSUSSN)=""
- I PSUOUTP="Y" D
- .; Total outpatient IV's ordered
- .S ^XTMP(PSUIVSUB,"OORD",PSUFAC)=$G(^XTMP(PSUIVSUB,"OORD",PSUFAC))+1
- Q
- ADDTIV ;Loop through each additive
- S (PSUNITS,ADTIV)=0
- F S ADTIV=$O(^PS(55,PSUPDA,"IV",PSUODA,"AD",ADTIV)) Q:'ADTIV D
- .K PSUADDTV,PSUGNRIC,PSUADD
- .D GETS^PSUTL(55.02,"PSUPDA,PSUODA,ADTIV",".01;.02","PSUADDTV","I")
- .D MOVEI^PSUTL("PSUADDTV")
- .D GETS^PSUTL(52.6,"PSUADDTV(.01)",".01;1;7","PSUGNRIC","I")
- .D MOVEI^PSUTL("PSUGNRIC")
- .S PSUPNAM=PSUGNRIC(.01)
- .S PSUDGU=$$VAL^PSUTL(52.6,PSUADDTV(.01),2)
- .S PSUDGDA=PSUGNRIC(1)
- .D GETS^PSUTL(50,"PSUDGDA",".01;2;20;21;22;25;31;51;52;3","PSUADD","I")
- .D MOVEI^PSUTL("PSUADD")
- .S PSUGNM=PSUADD(.01)
- .S PSUDCLS=PSUADD(2)
- .S PSUPRNM=PSUADD(21)
- .S PSUNDC=PSUADD(31)
- .S PSUNFI=PSUADD(51)
- .S PSUNADR=PSUADD(20)
- .S PSUNDCL=PSUADD(22)
- .S PSUDEA=PSUADD(3)
- .S PSUNAF=$S(PSUADD(52):"N/F",1:"")
- .D SETVAR
- .S PSUSTRN=+PSUADDTV(.02)
- .;
- .;DAM Add AMIS Additive data
- .N PSUTDSP1
- .S PSUTDSP1=$G(PSUDISPT)*PSUSTRN ;Total Additive units dispens
- .;
- .N PSURCY1
- .S PSURCY1=$G(PSURECT)*PSUSTRN ;Total Additive units recycled
- .;
- .N PSUDES1
- .S PSUDES1=$G(PSUDEST)*PSUSTRN ;Total Additive units destroyed
- .;
- .N PSUCAN1
- .S PSUCAN1=$G(PSUCAN)*PSUSTRN ;Total Additive units cancelled
- .;END DAM
- .S PSUNITS=PSUDISP*PSUSTRN
- .S PSUBAGS=PSUPULL*PSUSTRN
- .S PSUDCST=PSUGNRIC(7)
- .S RECIND="A"
- .D CALC
- .D SETREC^PSUV2
- .D SETDRUG^PSUV2
- Q
- SOLUTN ;Loop through each solution
- S (PSUNITS,SOLDA)=0 F S SOLDA=$O(^PS(55,PSUPDA,"IV",PSUODA,"SOL",SOLDA)) Q:'SOLDA D
- .K PSUSOL,GENRIC,SOLDRUG
- .D GETS^PSUTL(55.11,"PSUPDA,PSUODA,SOLDA",".01;1","PSUSOL","I")
- .D MOVEI^PSUTL("PSUSOL")
- .D GETS^PSUTL(52.7,"PSUSOL(.01)",".01;1;7","GENRIC","I")
- .D MOVEI^PSUTL("GENRIC")
- .S PSUPNAM=GENRIC(.01)
- .S PSUDGU="ML"
- .S PSUDGDA=GENRIC(1)
- .D GETS^PSUTL(50,"PSUDGDA",".01;2;20;21;22;25;31;51;52;3","SOLDRUG","I")
- .D MOVEI^PSUTL("SOLDRUG")
- .S PSUGNM=SOLDRUG(.01)
- .S PSUDCLS=SOLDRUG(2)
- .S PSUPRNM=SOLDRUG(21)
- .S PSUNDC=SOLDRUG(31)
- .S PSUNFI=SOLDRUG(51)
- .S PSUNADR=SOLDRUG(20)
- .S PSUNDCL=SOLDRUG(22)
- .S PSUDEA=SOLDRUG(3)
- .S PSUNAF=$S(SOLDRUG(52):"N/F",1:"")
- .D SETVAR
- .S VOLUME=+PSUSOL(1)
- .;
- .;DAM ADD AMIS SOLUTION DATA
- .N PSUTSOL1
- .S PSUTSOL1=$G(PSUDISPT)*VOLUME ;Total Solution units dispense
- .;
- .N PSUTRS1
- .S PSUTRS1=$G(PSURECT)*VOLUME ;Total Solution units recycl
- .;
- .N PSUTDS1
- .S PSUTDS1=$G(PSUDEST)*VOLUME ;Total Solution units destroyed
- .;
- .N PSUTCS1
- .S PSUTCS1=$G(PSUCAN)*VOLUME ;Total Solution units cancelled
- .;END DAM
- .S PSUNITS=PSUDISP*VOLUME
- .S PSUBAGS=PSUPULL*VOLUME
- .S PSUDCST=GENRIC(7)
- .S RECIND="S"
- .D CALC
- .D SETREC^PSUV2
- .D SETDRUG^PSUV2
- Q
- SETVAR ;Setup common variables for IV Additives and Solutions
- I PSUGNM="" S PSUGNM="UNKNOWN GENERIC NAME"
- I PSUPRNM="" S PSUPRNM="UNKNOWN VA PRODUCT NAME"
- I PSUNDC="" S PSUNDC="No NDC"
- I PSUNFI=1 S PSUNFI="N/F"
- S (PSIVNFI,PSIVNFR)=""
- I $$VERSION^XPDUTL("PSN")'<4 D
- .S PSIVNFI=$$FORMI^PSNAPIS(PSUNADR,PSUNDCL)
- .S PSIVNFR=$$FORMR^PSNAPIS(PSUNADR,PSUNDCL)>0
- Q
- CALC ;Do calculations for additives and solutions
- S ^XTMP(PSUIVSUB,"CST",PSUFAC)=(PSUNITS*PSUDCST)+$G(^XTMP(PSUIVSUB,"CST",PSUFAC))
- S RECTYP=""
- S COUNT=COUNT+1
- S:COUNT=1 RECTYP="P"
- I PSUOUTP="Y" D
- .S ^XTMP(PSUIVSUB,"OCST",PSUFAC)=(PSUDCST*PSUBAGS)+$G(^XTMP(PSUIVSUB,"OCST",PSUFAC))
- I PSUIV(.04)="P" D
- .S ^XTMP(PSUIVSUB,"SPIG",PSUFAC)=(PSUDCST*PSUBAGS)+$G(^XTMP(PSUIVSUB,"SPIG",PSUFAC))
- I PSUIV(.04)="A" D
- .S ^XTMP(PSUIVSUB,"SADM",PSUFAC)=(PSUDCST*PSUBAGS)+$G(^XTMP(PSUIVSUB,"SADM",PSUFAC))
- I PSUIV(.04)="H" D
- .S ^XTMP(PSUIVSUB,"SHYP",PSUFAC)=(PSUDCST*PSUBAGS)+$G(^XTMP(PSUIVSUB,"SHYP",PSUFAC))
- I PSUIV(.04)="S" D
- .S ^XTMP(PSUIVSUB,"SSYR",PSUFAC)=(PSUDCST*PSUBAGS)+$G(^XTMP(PSUIVSUB,"SSYR",PSUFAC))
- I PSUIV(.04)="C" D
- .S ^XTMP(PSUIVSUB,"SCHEM",PSUFAC)=(PSUDCST*PSUBAGS)+$G(^XTMP(PSUIVSUB,"SCHEM",PSUFAC))
- Q
- PSUV1 ;BIR/CFL - Extract Data of PBM IV Module ;25 AUG 1998
- +1 ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005
- +2 ;DBIAs
- +3 ; Reference to file #55 supported by DBIA 2497
- +4 ; Reference to file #59.5 supported by DBIA 2499
- +5 ; Reference to file #40.8 supported by DBIA 2438
- +6 ; Reference to file #7 supported by DBIA 2495
- +7 ; Reference to file #49 supported by DBIA 10093
- +8 ; Reference to file #52.6 supported by DBIA 436
- +9 ; Reference to file #50 supported by DBIA 221
- +10 ; Reference to file #52.7 supported by DBIA 437
- +11 ; Reference to file #2 supported by DBIA 10035 and 2701
- +12 ; Reference to file #200 supported by DBIA 10060
- +13 ;
- IVDATA ;Loop through IV data
- +1 NEW PSUDOC1
- +2 KILL PSUSSNA,PSUORDA
- +3 ; *34 |==>
- +4 ;use 1st day of extract for 'stop date' scan
- SET PSUIVDT=PSUSDT\1-.0001
- +5 SET PSUTEDT=PSUEDT\1+.2359
- +6 FOR
- SET PSUIVDT=$ORDER(^PS(55,"AIV",PSUIVDT))
- IF 'PSUIVDT
- QUIT
- Begin DoDot:1
- +7 SET PSUPDA=""
- +8 FOR
- SET PSUPDA=$ORDER(^PS(55,"AIV",PSUIVDT,PSUPDA))
- IF 'PSUPDA
- QUIT
- Begin DoDot:2
- +9 SET PSUODA=""
- +10 FOR
- SET PSUODA=$ORDER(^PS(55,"AIV",PSUIVDT,PSUPDA,PSUODA))
- IF 'PSUODA
- QUIT
- Begin DoDot:3
- +11 ;should be the D0's for file 55.01 ; <==| *34
- SET ^XTMP("PSU_"_PSUJOB,"PSUHLD",PSUODA)=""
- +12 SET COUNT=0
- +13 SET PSUDIV=""
- +14 KILL PSUIV
- +15 ; screen test patients
- +16 IF $$TESTPAT^PSUTL1(PSUPDA)
- QUIT
- +17 ;*34
- SET XX=$$VALI^PSUTL(55.01,"PSUPDA,PSUODA",.02)
- IF XX>PSUTEDT
- QUIT
- +18 ;*34
- KILL PSUIV
- +19 DO GETS^PSUTL(55.01,"PSUPDA,PSUODA",".01;.02;.03;.04;.06;.08;.09;.22;104;106;108","PSUIV","I")
- +20 ;.01-Order num;.02-Start Dt;.03-Stop Dt;.04-Type;.06-Provider
- +21 ;104-Ward;106-Chemotherapy Type;108-Intermittent Syringe
- +22 IF '$DATA(PSUIV)
- QUIT
- +23 ;VMP OIFO BAY PINES;ELR;PSU*3*35 ADDED NEXT LINE
- +24 IF $GET(PSUIV(.06,"I"))'>0
- QUIT
- +25 ;Patient IEN's ;*34
- SET ^XTMP("PSU_"_PSUJOB,"PSUPIEN",PSUPDA)=""
- +26 DO MOVEI^PSUTL("PSUIV")
- +27 SET PSUIV(.02)=PSUIV(.02)\1
- +28 SET PSUIV(.03)=PSUIV(.03)\1
- +29 IF PSUIV(.22)'=""
- SET PSUDIV=$$VALI^PSUTL(59.5,PSUIV(.22),.02)
- +30 SET PSUFAC=$$VALI^PSUTL(40.8,PSUDIV,1)
- IF PSUFAC=""
- SET PSUFAC=PSUSNDR
- +31 SET PSUFAC(PSUFAC)=""
- +32 SET PSUOUTP=$SELECT(PSUIV(104)=.5:"Y",1:"N")
- +33 SET DFN=PSUPDA
- DO PID^VADPT
- +34 SET PSUSSN=$TRANSLATE(VA("PID"),"^-","")
- +35 DO ICN
- +36 KILL PSUDOC
- +37 DO GETS^PSUTL(200,"PSUIV(.06)","9;29;53.5","PSUDOC","I")
- +38 DO MOVEI^PSUTL("PSUDOC")
- +39 IF $GET(PSUDOC(9))=""
- SET PSUVSSN1=999999999
- +40 IF $GET(PSUDOC(9))'=""
- SET PSUVSSN1=PSUDOC(9)
- +41 SET ^XTMP("PSU_"_PSUJOB,"PSUPDR",PSUVSSN1,PSUIV(.06))=""
- +42 SET (PSUPCLS,PSUSP1,PSUSP2)=""
- +43 IF $DATA(PSUDOC(53.5))
- IF PSUDOC(53.5)'=""
- Begin DoDot:4
- +44 SET PSUPCLS=$$VALI^PSUTL(7,PSUDOC(53.5),1)
- +45 IF PSUPCLS=""
- SET PSUPCLS=$$VALI^PSUTL(7,PSUDOC(53.5),.01)
- End DoDot:4
- +46 SET PSUPSV=$SELECT($LENGTH($GET(PSUDOC(29))):$$VAL^PSUTL(49,PSUDOC(29),.01),1:"")
- +47 SET PSUPSV=$$UPPER^PSUTL(PSUPSV)
- SET PSUSERV=""
- +48 IF $LENGTH(PSUPSV)
- IF $DATA(PSECT(PSUPSV))
- SET PSUSERV=PSECT(PSUPSV)
- +49 SET SPECPTR=$$GET^XUA4A72(PSUIV(.06),PSUIVDT)
- +50 SET PSUSP1=$PIECE($GET(SPECPTR),U,3)
- SET PSUSP2=$PIECE($GET(SPECPTR),U,4)
- +51 DO OCCAMT
- +52 IF PSUFND
- Begin DoDot:4
- +53 DO GETRATE^PSUV2(PSUIV(.04))
- +54 DO SETTOT
- +55 SET RECTYP=""
- +56 DO ADDTIV
- +57 DO SOLUTN
- End DoDot:4
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +58 IF $DATA(^XTMP(PSUIVSUB,"RECORDS"))
- DO SETSUM^PSUV2
- +59 QUIT
- +60 ;
- ICN ;Find patient ICN
- +1 ;
- +2 NEW PSUPICN,PSUPICN1,PSUICN
- +3 SET PSUPTN=0
- +4 IF $GET(PSUSSN)
- IF PSUSSN'=""
- Begin DoDot:1
- +5 FOR
- SET PSUPTN=$ORDER(^DPT("SSN",PSUSSN,PSUPTN))
- IF PSUPTN=""
- QUIT
- Begin DoDot:2
- +6 SET PSUPICN1=$$GETICN^MPIF001(PSUPTN)
- Begin DoDot:3
- +7 IF PSUPICN1'[-1
- Begin DoDot:4
- +8 SET ^XTMP("PSU_"_PSUJOB,"PSUPICN")=PSUPICN1
- End DoDot:4
- +9 IF PSUPICN1[-1
- SET ^XTMP("PSU_"_PSUJOB,"PSUPICN")=""
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +10 QUIT
- +11 ;
- +12 ;
- OCCAMT ;Calculate the number of dispensing occurrences
- +1 SET (PSUFND,PSUDISP,PSUPULL,OCC,PSUDISPT,PSURECT,PSUDEST,PSUCAN)=0
- +2 FOR
- SET OCC=$ORDER(^PS(55,PSUPDA,"IV",PSUODA,"LAB",OCC))
- IF 'OCC
- QUIT
- Begin DoDot:1
- +3 KILL PSUOCC
- +4 DO GETS^PSUTL(55.1111,"PSUPDA,PSUODA,OCC","1;2;4;6","PSUOCC","I")
- +5 DO MOVEI^PSUTL("PSUOCC")
- +6 SET PSUOCC(1)=PSUOCC(1)\1
- +7 ;*34
- IF PSUOCC(1)<PSUSDT!(PSUOCC(1)>PSUTEDT)
- QUIT
- +8 SET PSUFND=1
- +9 IF $GET(PSUOCC(6))=1
- IF $GET(PSUOCC(2))=1
- Begin DoDot:2
- +10 SET PSUDISP=PSUDISP+$GET(PSUOCC(4))
- +11 ;Total IV dispensed
- SET PSUDISPT=PSUDISP
- +12 SET PSUPULL=PSUPULL+$GET(PSUOCC(4))
- +13 SET ^XTMP(PSUIVSUB,"TYPE_"_PSUIV(.04),PSUFAC)=PSUOCC(4)+$GET(^XTMP(PSUIVSUB,"TYPE_"_PSUIV(.04),PSUFAC))
- +14 ; Total outpatient IV's dispensed
- IF PSUOUTP="Y"
- Begin DoDot:3
- +15 SET ^XTMP(PSUIVSUB,"ODISP",PSUFAC)=$GET(^XTMP(PSUIVSUB,"ODISP",PSUFAC))+PSUOCC(4)
- End DoDot:3
- End DoDot:2
- +16 ;I PSUOCC(2)=2!(PSUOCC(2)=4) S PSUDISP=PSUDISP-PSUOCC(4)
- +17 IF PSUOCC(6)=1
- IF PSUOCC(2)=2
- Begin DoDot:2
- +18 ;Total IV Recycled
- SET PSURECT=$GET(PSURECT)+PSUOCC(4)
- End DoDot:2
- +19 IF PSUOCC(6)=1
- IF PSUOCC(2)=3
- Begin DoDot:2
- +20 ;Total IV Destroyed
- SET PSUDEST=$GET(PSUDEST)+PSUOCC(4)
- End DoDot:2
- +21 IF PSUOCC(6)=1
- IF PSUOCC(2)=4
- Begin DoDot:2
- +22 ;Total IV Cancelled
- SET PSUCAN=$GET(PSUCAN)+PSUOCC(4)
- End DoDot:2
- +23 IF PSUOCC(6)=1
- Begin DoDot:2
- +24 ;Net disp
- IF (PSUOCC(2)=2)!(PSUOCC(2)=4)
- SET PSUDISP=PSUDISP-PSUOCC(4)
- End DoDot:2
- End DoDot:1
- +25 QUIT
- SETTOT ;Set totals
- +1 ; Total number of IV's ordered
- +2 SET ^XTMP(PSUIVSUB,"ORD",PSUFAC)=$GET(^XTMP(PSUIVSUB,"ORD",PSUFAC))+1
- +3 ; Total number of IV patients
- +4 IF '$DATA(^XTMP(PSUIVSUB,"PAT",PSUSSN,PSUFAC))
- Begin DoDot:1
- +5 SET ^XTMP(PSUIVSUB,"SSN",PSUFAC)=$GET(^XTMP(PSUIVSUB,"SSN",PSUFAC))+1
- +6 SET ^XTMP(PSUIVSUB,"PAT",PSUSSN,PSUFAC)=""
- +7 SET PSUDIV=PSUFAC
- DO GETDIV^PSUV3
- IF PSUDIVNM'=""
- Begin DoDot:2
- +8 ;Pt demo summary
- SET ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIVNM,PSUSSN)=""
- End DoDot:2
- +9 IF PSUDIVNM=""
- SET ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIV,PSUSSN)=""
- End DoDot:1
- +10 IF PSUOUTP="Y"
- Begin DoDot:1
- +11 ; Total outpatient IV's ordered
- +12 SET ^XTMP(PSUIVSUB,"OORD",PSUFAC)=$GET(^XTMP(PSUIVSUB,"OORD",PSUFAC))+1
- End DoDot:1
- +13 QUIT
- ADDTIV ;Loop through each additive
- +1 SET (PSUNITS,ADTIV)=0
- +2 FOR
- SET ADTIV=$ORDER(^PS(55,PSUPDA,"IV",PSUODA,"AD",ADTIV))
- IF 'ADTIV
- QUIT
- Begin DoDot:1
- +3 KILL PSUADDTV,PSUGNRIC,PSUADD
- +4 DO GETS^PSUTL(55.02,"PSUPDA,PSUODA,ADTIV",".01;.02","PSUADDTV","I")
- +5 DO MOVEI^PSUTL("PSUADDTV")
- +6 DO GETS^PSUTL(52.6,"PSUADDTV(.01)",".01;1;7","PSUGNRIC","I")
- +7 DO MOVEI^PSUTL("PSUGNRIC")
- +8 SET PSUPNAM=PSUGNRIC(.01)
- +9 SET PSUDGU=$$VAL^PSUTL(52.6,PSUADDTV(.01),2)
- +10 SET PSUDGDA=PSUGNRIC(1)
- +11 DO GETS^PSUTL(50,"PSUDGDA",".01;2;20;21;22;25;31;51;52;3","PSUADD","I")
- +12 DO MOVEI^PSUTL("PSUADD")
- +13 SET PSUGNM=PSUADD(.01)
- +14 SET PSUDCLS=PSUADD(2)
- +15 SET PSUPRNM=PSUADD(21)
- +16 SET PSUNDC=PSUADD(31)
- +17 SET PSUNFI=PSUADD(51)
- +18 SET PSUNADR=PSUADD(20)
- +19 SET PSUNDCL=PSUADD(22)
- +20 SET PSUDEA=PSUADD(3)
- +21 SET PSUNAF=$SELECT(PSUADD(52):"N/F",1:"")
- +22 DO SETVAR
- +23 SET PSUSTRN=+PSUADDTV(.02)
- +24 ;
- +25 ;DAM Add AMIS Additive data
- +26 NEW PSUTDSP1
- +27 ;Total Additive units dispens
- SET PSUTDSP1=$GET(PSUDISPT)*PSUSTRN
- +28 ;
- +29 NEW PSURCY1
- +30 ;Total Additive units recycled
- SET PSURCY1=$GET(PSURECT)*PSUSTRN
- +31 ;
- +32 NEW PSUDES1
- +33 ;Total Additive units destroyed
- SET PSUDES1=$GET(PSUDEST)*PSUSTRN
- +34 ;
- +35 NEW PSUCAN1
- +36 ;Total Additive units cancelled
- SET PSUCAN1=$GET(PSUCAN)*PSUSTRN
- +37 ;END DAM
- +38 SET PSUNITS=PSUDISP*PSUSTRN
- +39 SET PSUBAGS=PSUPULL*PSUSTRN
- +40 SET PSUDCST=PSUGNRIC(7)
- +41 SET RECIND="A"
- +42 DO CALC
- +43 DO SETREC^PSUV2
- +44 DO SETDRUG^PSUV2
- End DoDot:1
- +45 QUIT
- SOLUTN ;Loop through each solution
- +1 SET (PSUNITS,SOLDA)=0
- FOR
- SET SOLDA=$ORDER(^PS(55,PSUPDA,"IV",PSUODA,"SOL",SOLDA))
- IF 'SOLDA
- QUIT
- Begin DoDot:1
- +2 KILL PSUSOL,GENRIC,SOLDRUG
- +3 DO GETS^PSUTL(55.11,"PSUPDA,PSUODA,SOLDA",".01;1","PSUSOL","I")
- +4 DO MOVEI^PSUTL("PSUSOL")
- +5 DO GETS^PSUTL(52.7,"PSUSOL(.01)",".01;1;7","GENRIC","I")
- +6 DO MOVEI^PSUTL("GENRIC")
- +7 SET PSUPNAM=GENRIC(.01)
- +8 SET PSUDGU="ML"
- +9 SET PSUDGDA=GENRIC(1)
- +10 DO GETS^PSUTL(50,"PSUDGDA",".01;2;20;21;22;25;31;51;52;3","SOLDRUG","I")
- +11 DO MOVEI^PSUTL("SOLDRUG")
- +12 SET PSUGNM=SOLDRUG(.01)
- +13 SET PSUDCLS=SOLDRUG(2)
- +14 SET PSUPRNM=SOLDRUG(21)
- +15 SET PSUNDC=SOLDRUG(31)
- +16 SET PSUNFI=SOLDRUG(51)
- +17 SET PSUNADR=SOLDRUG(20)
- +18 SET PSUNDCL=SOLDRUG(22)
- +19 SET PSUDEA=SOLDRUG(3)
- +20 SET PSUNAF=$SELECT(SOLDRUG(52):"N/F",1:"")
- +21 DO SETVAR
- +22 SET VOLUME=+PSUSOL(1)
- +23 ;
- +24 ;DAM ADD AMIS SOLUTION DATA
- +25 NEW PSUTSOL1
- +26 ;Total Solution units dispense
- SET PSUTSOL1=$GET(PSUDISPT)*VOLUME
- +27 ;
- +28 NEW PSUTRS1
- +29 ;Total Solution units recycl
- SET PSUTRS1=$GET(PSURECT)*VOLUME
- +30 ;
- +31 NEW PSUTDS1
- +32 ;Total Solution units destroyed
- SET PSUTDS1=$GET(PSUDEST)*VOLUME
- +33 ;
- +34 NEW PSUTCS1
- +35 ;Total Solution units cancelled
- SET PSUTCS1=$GET(PSUCAN)*VOLUME
- +36 ;END DAM
- +37 SET PSUNITS=PSUDISP*VOLUME
- +38 SET PSUBAGS=PSUPULL*VOLUME
- +39 SET PSUDCST=GENRIC(7)
- +40 SET RECIND="S"
- +41 DO CALC
- +42 DO SETREC^PSUV2
- +43 DO SETDRUG^PSUV2
- End DoDot:1
- +44 QUIT
- SETVAR ;Setup common variables for IV Additives and Solutions
- +1 IF PSUGNM=""
- SET PSUGNM="UNKNOWN GENERIC NAME"
- +2 IF PSUPRNM=""
- SET PSUPRNM="UNKNOWN VA PRODUCT NAME"
- +3 IF PSUNDC=""
- SET PSUNDC="No NDC"
- +4 IF PSUNFI=1
- SET PSUNFI="N/F"
- +5 SET (PSIVNFI,PSIVNFR)=""
- +6 IF $$VERSION^XPDUTL("PSN")'<4
- Begin DoDot:1
- +7 SET PSIVNFI=$$FORMI^PSNAPIS(PSUNADR,PSUNDCL)
- +8 SET PSIVNFR=$$FORMR^PSNAPIS(PSUNADR,PSUNDCL)>0
- End DoDot:1
- +9 QUIT
- CALC ;Do calculations for additives and solutions
- +1 SET ^XTMP(PSUIVSUB,"CST",PSUFAC)=(PSUNITS*PSUDCST)+$GET(^XTMP(PSUIVSUB,"CST",PSUFAC))
- +2 SET RECTYP=""
- +3 SET COUNT=COUNT+1
- +4 IF COUNT=1
- SET RECTYP="P"
- +5 IF PSUOUTP="Y"
- Begin DoDot:1
- +6 SET ^XTMP(PSUIVSUB,"OCST",PSUFAC)=(PSUDCST*PSUBAGS)+$GET(^XTMP(PSUIVSUB,"OCST",PSUFAC))
- End DoDot:1
- +7 IF PSUIV(.04)="P"
- Begin DoDot:1
- +8 SET ^XTMP(PSUIVSUB,"SPIG",PSUFAC)=(PSUDCST*PSUBAGS)+$GET(^XTMP(PSUIVSUB,"SPIG",PSUFAC))
- End DoDot:1
- +9 IF PSUIV(.04)="A"
- Begin DoDot:1
- +10 SET ^XTMP(PSUIVSUB,"SADM",PSUFAC)=(PSUDCST*PSUBAGS)+$GET(^XTMP(PSUIVSUB,"SADM",PSUFAC))
- End DoDot:1
- +11 IF PSUIV(.04)="H"
- Begin DoDot:1
- +12 SET ^XTMP(PSUIVSUB,"SHYP",PSUFAC)=(PSUDCST*PSUBAGS)+$GET(^XTMP(PSUIVSUB,"SHYP",PSUFAC))
- End DoDot:1
- +13 IF PSUIV(.04)="S"
- Begin DoDot:1
- +14 SET ^XTMP(PSUIVSUB,"SSYR",PSUFAC)=(PSUDCST*PSUBAGS)+$GET(^XTMP(PSUIVSUB,"SSYR",PSUFAC))
- End DoDot:1
- +15 IF PSUIV(.04)="C"
- Begin DoDot:1
- +16 SET ^XTMP(PSUIVSUB,"SCHEM",PSUFAC)=(PSUDCST*PSUBAGS)+$GET(^XTMP(PSUIVSUB,"SCHEM",PSUFAC))
- End DoDot:1
- +17 QUIT