PSUUD2 ;BIR/TJH - PBM UNIT DOSE SUBROUTINES & FUNCTIONS ;24 DEC 2003
;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005
;DBIA(s)
; Reference to file #55 supported by DBIA 2497
;
DISAMT ; precompute dispensed amounts by drug
N DADATE,DADRUG,DAMT,DAHOW
K PSUDAS ; initialize Dispensed Amount Summary array
;*34 |=>
S PSUXX=PSUSDT\1-.0001
DAL134 S PSUXX=$O(^PS(55,PSPAT,5,PSDOSE,11,"B",PSUXX))
G:'PSUXX DISAMTQ
I PSUXX>PSUTEDT G DISAMTQ
S DISPDA=0
F S DISPDA=$O(^PS(55,PSPAT,5,PSDOSE,11,"B",PSUXX,DISPDA)) Q:DISPDA'>0 D
. K DISPI
. D GETS^PSUTL(55.0611,"PSPAT,PSDOSE,DISPDA",".01;.02;.03;.05","DISPI","I")
. D MOVEI^PSUTL("DISPI")
. S DADATE=DISPI(.01)
. S DADRUG=$G(DISPI(.02)) G:DADRUG="" DAL134
. S DAMT=$G(DISPI(.03))
. S DAHOW=$G(DISPI(.05))
. S PSUDAS(DADRUG)=$G(PSUDAS(DADRUG))+$S(DAHOW=4:DAMT*-1,1:DAMT) ;net
. I DAHOW'=4 D
..S PSUDAS("DISP",DADRUG)=$G(PSUDAS("DISP",DADRUG))+$G(DAMT) ;Dispense
. I DAHOW=4 D
..S PSUDAS("RET",DADRUG)=$G(PSUDAS("RET",DADRUG))+$G(DAMT) ;Return
. S PSUDAS("NET",DADRUG)=$G(PSUDAS("DISP",DADRUG))-$G(PSUDAS("RET",DADRUG)) ;Net dispensed
.;
. K DISPI
G DAL134
;*34 <=|
DISAMTQ K ^TMP($J,"PSUTA") Q ; exit point from DISAMT subroutine
;
SETUP ; set up some variables required later
D SECTN^PSUTL1
D DT^DILF("E",PSUSDT,.EXTD)
S PSURP("START")=EXTD(0)
D DT^DILF("E",PSUEDT,.EXTD)
S PSURP("END")=EXTD(0)
S X1=PSUSDT,X2=-101
D C^%DTC K %,%H,%T
S PSDATE=X
S PSUEDTIM=PSUEDT+.2400
S PSUJOB=$G(PSUJOB,$J),PSUUDSUB="PSUUD_"_PSUJOB
K ^XTMP(PSUUDSUB)
K PSUDTLRN
S X1=DT,X2=3 D C^%DTC
S ^XTMP(PSUUDSUB,0)=X_U_DT_U_"PSU PBM UNIT DOSE STATISTICAL DATA"
SETUPQ Q ; exit from SETUP
;
TMPUD ; store Unit Dose data in first half of record, pieces 2-7
S DLM="^",REC1="^"
S REC1=REC1_$TR(PSUFACN,"^","'")_DLM_$TR(PSUDOSE(10),"^","'")_DLM_$TR(PSUDOSE(.01),"^","'")
S REC1=REC1_DLM_PSUSSN_DLM_$TR(PSUDOSE(26),"^","'")_DLM_PSUVSSN ;_DLM_$TR(PSUVCL,"^","'")
;S REC1=REC1_DLM_$TR(PSUVSV,"^","'")_DLM_$TR(PSUVS1,"^","'")_DLM_$TR(PSUVS2,"^","'")
TMPUDQ Q ; exit from TMPUD
;
TMPDD ; create Dispense Drug record and store in ^XTMP
N PSUDAMT S PSUDAMT=$G(PSUDAS(PSUDISD(.01)))
Q:'PSUDAMT ; per Lina B., do not store if dispensed amount=0
S DLM="^",REC2="",PSUDTLRN(PSUFACN)=+$G(PSUDTLRN(PSUFACN))+1
S REC2=REC1_DLM_$TR(PSUDRUG(21),"^","'")_DLM_$TR(PSUDRUG(2),"^","'")_DLM
S REC2=REC2_$TR(PSUDRUG(.01),"^","'")_DLM_$TR(PSUDRUG(31),"^","'")_DLM
S REC2=REC2_PSUDRUG(51)_DLM_PSUDNFI_DLM_PSUDNFR_DLM
S REC2=REC2_$TR(PSUDISD(.02),"^","'")_DLM_$TR(PSUDRUG(14.5),"^","'")_DLM
S REC2=REC2_$TR(PSUDRUG(16),"^","'")_DLM_PSUDAMT_DLM_PSUDRUG(52)_DLM_PSUDRUG(3)_"^"
;VMP OIFO BAY PINES;ELR;PSU*3.0*24
D ICN^PSUV1 S PSUPICN=$G(^XTMP("PSU_"_PSUJOB,"PSUPICN"))
S REC2=REC2_$G(PSUPICN)_DLM_$G(PSUDOSE(1))_DLM_PSUUDST_DLM
;
;ADD AMIS DATA
N PSUDSP,PSURET
S PSUDSP=$G(PSUDAS("DISP",PSUDISD(.01)))
S ^XTMP(PSUUDSUB,"DISP",PSUFACN)=PSUDSP+$G(^XTMP(PSUUDSUB,"DISP",PSUFACN))
S PSURET=$G(PSUDAS("RET",PSUDISD(.01)))
S ^XTMP(PSUUDSUB,"RET",PSUFACN)=PSURET+$G(^XTMP(PSUUDSUB,"RET",PSUFACN))
S:'$G(PSURET) PSURET=0
S REC2=REC2_PSUDSP_DLM_PSURET_DLM
;END AMIS DATA
;
S ^XTMP(PSUUDSUB,"DETAIL",PSUFACN,PSUDTLRN(PSUFACN))=REC2
; increase Unit Dose and Patient counts if not already counted
I '$D(^XTMP(PSUUDSUB,"ORD",PSUFACN,PSUDOSE(.01))) D
.S ^XTMP(PSUUDSUB,"ORD",PSUFACN,PSUDOSE(.01))=""
.S ^XTMP(PSUUDSUB,"ORD",PSUFACN)=1+$G(^XTMP(PSUUDSUB,"ORD",PSUFACN))
I '$D(^XTMP(PSUUDSUB,"SSN",PSUFACN,PSUSSN)) D
.S ^XTMP(PSUUDSUB,"SSN",PSUFACN,PSUSSN)=""
.S ^XTMP(PSUUDSUB,"SSN",PSUFACN)=1+$G(^XTMP(PSUUDSUB,"SSN",PSUFACN))
S PSUDIV=PSUFACN D GETDIV^PSUV3 I PSUDIVNM'="" D
.S ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIVNM,PSUSSN)=""
I PSUDIVNM="" S ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIV,PSUSSN)=""
; and store totals by drug in ^TMP("PSUUD DRUG",$J,PSUFACN
I '$D(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01))) D
.S ^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01))=0_U_PSUDRUG(16)_U_PSUDRUG(51)_U_PSUDNFI
S $P(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01)),U,1)=$P(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01)),U,1)+PSUDAMT
; and store Summary totals
S ^XTMP(PSUUDSUB,"DIS",PSUFACN)=PSUDAMT+$G(^XTMP(PSUUDSUB,"DIS",PSUFACN))
S ^XTMP(PSUUDSUB,"CST",PSUFACN)=(PSUDRUG(16)*PSUDAMT)+$G(^XTMP(PSUUDSUB,"CST",PSUFACN))
TMPDDQ Q ; exit from TMPDD
PSUUD2 ;BIR/TJH - PBM UNIT DOSE SUBROUTINES & FUNCTIONS ;24 DEC 2003
+1 ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005
+2 ;DBIA(s)
+3 ; Reference to file #55 supported by DBIA 2497
+4 ;
DISAMT ; precompute dispensed amounts by drug
+1 NEW DADATE,DADRUG,DAMT,DAHOW
+2 ; initialize Dispensed Amount Summary array
KILL PSUDAS
+3 ;*34 |=>
+4 SET PSUXX=PSUSDT\1-.0001
DAL134 SET PSUXX=$ORDER(^PS(55,PSPAT,5,PSDOSE,11,"B",PSUXX))
+1 IF 'PSUXX
GOTO DISAMTQ
+2 IF PSUXX>PSUTEDT
GOTO DISAMTQ
+3 SET DISPDA=0
+4 FOR
SET DISPDA=$ORDER(^PS(55,PSPAT,5,PSDOSE,11,"B",PSUXX,DISPDA))
IF DISPDA'>0
QUIT
Begin DoDot:1
+5 KILL DISPI
+6 DO GETS^PSUTL(55.0611,"PSPAT,PSDOSE,DISPDA",".01;.02;.03;.05","DISPI","I")
+7 DO MOVEI^PSUTL("DISPI")
+8 SET DADATE=DISPI(.01)
+9 SET DADRUG=$GET(DISPI(.02))
IF DADRUG=""
GOTO DAL134
+10 SET DAMT=$GET(DISPI(.03))
+11 SET DAHOW=$GET(DISPI(.05))
+12 ;net
SET PSUDAS(DADRUG)=$GET(PSUDAS(DADRUG))+$SELECT(DAHOW=4:DAMT*-1,1:DAMT)
+13 IF DAHOW'=4
Begin DoDot:2
+14 ;Dispense
SET PSUDAS("DISP",DADRUG)=$GET(PSUDAS("DISP",DADRUG))+$GET(DAMT)
End DoDot:2
+15 IF DAHOW=4
Begin DoDot:2
+16 ;Return
SET PSUDAS("RET",DADRUG)=$GET(PSUDAS("RET",DADRUG))+$GET(DAMT)
End DoDot:2
+17 ;Net dispensed
SET PSUDAS("NET",DADRUG)=$GET(PSUDAS("DISP",DADRUG))-$GET(PSUDAS("RET",DADRUG))
+18 ;
+19 KILL DISPI
End DoDot:1
+20 GOTO DAL134
+21 ;*34 <=|
DISAMTQ ; exit point from DISAMT subroutine
KILL ^TMP($JOB,"PSUTA")
QUIT
+1 ;
SETUP ; set up some variables required later
+1 DO SECTN^PSUTL1
+2 DO DT^DILF("E",PSUSDT,.EXTD)
+3 SET PSURP("START")=EXTD(0)
+4 DO DT^DILF("E",PSUEDT,.EXTD)
+5 SET PSURP("END")=EXTD(0)
+6 SET X1=PSUSDT
SET X2=-101
+7 DO C^%DTC
KILL %,%H,%T
+8 SET PSDATE=X
+9 SET PSUEDTIM=PSUEDT+.2400
+10 SET PSUJOB=$GET(PSUJOB,$JOB)
SET PSUUDSUB="PSUUD_"_PSUJOB
+11 KILL ^XTMP(PSUUDSUB)
+12 KILL PSUDTLRN
+13 SET X1=DT
SET X2=3
DO C^%DTC
+14 SET ^XTMP(PSUUDSUB,0)=X_U_DT_U_"PSU PBM UNIT DOSE STATISTICAL DATA"
SETUPQ ; exit from SETUP
QUIT
+1 ;
TMPUD ; store Unit Dose data in first half of record, pieces 2-7
+1 SET DLM="^"
SET REC1="^"
+2 SET REC1=REC1_$TRANSLATE(PSUFACN,"^","'")_DLM_$TRANSLATE(PSUDOSE(10),"^","'")_DLM_$TRANSLATE(PSUDOSE(.01),"^","'")
+3 ;_DLM_$TR(PSUVCL,"^","'")
SET REC1=REC1_DLM_PSUSSN_DLM_$TRANSLATE(PSUDOSE(26),"^","'")_DLM_PSUVSSN
+4 ;S REC1=REC1_DLM_$TR(PSUVSV,"^","'")_DLM_$TR(PSUVS1,"^","'")_DLM_$TR(PSUVS2,"^","'")
TMPUDQ ; exit from TMPUD
QUIT
+1 ;
TMPDD ; create Dispense Drug record and store in ^XTMP
+1 NEW PSUDAMT
SET PSUDAMT=$GET(PSUDAS(PSUDISD(.01)))
+2 ; per Lina B., do not store if dispensed amount=0
IF 'PSUDAMT
QUIT
+3 SET DLM="^"
SET REC2=""
SET PSUDTLRN(PSUFACN)=+$GET(PSUDTLRN(PSUFACN))+1
+4 SET REC2=REC1_DLM_$TRANSLATE(PSUDRUG(21),"^","'")_DLM_$TRANSLATE(PSUDRUG(2),"^","'")_DLM
+5 SET REC2=REC2_$TRANSLATE(PSUDRUG(.01),"^","'")_DLM_$TRANSLATE(PSUDRUG(31),"^","'")_DLM
+6 SET REC2=REC2_PSUDRUG(51)_DLM_PSUDNFI_DLM_PSUDNFR_DLM
+7 SET REC2=REC2_$TRANSLATE(PSUDISD(.02),"^","'")_DLM_$TRANSLATE(PSUDRUG(14.5),"^","'")_DLM
+8 SET REC2=REC2_$TRANSLATE(PSUDRUG(16),"^","'")_DLM_PSUDAMT_DLM_PSUDRUG(52)_DLM_PSUDRUG(3)_"^"
+9 ;VMP OIFO BAY PINES;ELR;PSU*3.0*24
+10 DO ICN^PSUV1
SET PSUPICN=$GET(^XTMP("PSU_"_PSUJOB,"PSUPICN"))
+11 SET REC2=REC2_$GET(PSUPICN)_DLM_$GET(PSUDOSE(1))_DLM_PSUUDST_DLM
+12 ;
+13 ;ADD AMIS DATA
+14 NEW PSUDSP,PSURET
+15 SET PSUDSP=$GET(PSUDAS("DISP",PSUDISD(.01)))
+16 SET ^XTMP(PSUUDSUB,"DISP",PSUFACN)=PSUDSP+$GET(^XTMP(PSUUDSUB,"DISP",PSUFACN))
+17 SET PSURET=$GET(PSUDAS("RET",PSUDISD(.01)))
+18 SET ^XTMP(PSUUDSUB,"RET",PSUFACN)=PSURET+$GET(^XTMP(PSUUDSUB,"RET",PSUFACN))
+19 IF '$GET(PSURET)
SET PSURET=0
+20 SET REC2=REC2_PSUDSP_DLM_PSURET_DLM
+21 ;END AMIS DATA
+22 ;
+23 SET ^XTMP(PSUUDSUB,"DETAIL",PSUFACN,PSUDTLRN(PSUFACN))=REC2
+24 ; increase Unit Dose and Patient counts if not already counted
+25 IF '$DATA(^XTMP(PSUUDSUB,"ORD",PSUFACN,PSUDOSE(.01)))
Begin DoDot:1
+26 SET ^XTMP(PSUUDSUB,"ORD",PSUFACN,PSUDOSE(.01))=""
+27 SET ^XTMP(PSUUDSUB,"ORD",PSUFACN)=1+$GET(^XTMP(PSUUDSUB,"ORD",PSUFACN))
End DoDot:1
+28 IF '$DATA(^XTMP(PSUUDSUB,"SSN",PSUFACN,PSUSSN))
Begin DoDot:1
+29 SET ^XTMP(PSUUDSUB,"SSN",PSUFACN,PSUSSN)=""
+30 SET ^XTMP(PSUUDSUB,"SSN",PSUFACN)=1+$GET(^XTMP(PSUUDSUB,"SSN",PSUFACN))
End DoDot:1
+31 SET PSUDIV=PSUFACN
DO GETDIV^PSUV3
IF PSUDIVNM'=""
Begin DoDot:1
+32 SET ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIVNM,PSUSSN)=""
End DoDot:1
+33 IF PSUDIVNM=""
SET ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIV,PSUSSN)=""
+34 ; and store totals by drug in ^TMP("PSUUD DRUG",$J,PSUFACN
+35 IF '$DATA(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01)))
Begin DoDot:1
+36 SET ^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01))=0_U_PSUDRUG(16)_U_PSUDRUG(51)_U_PSUDNFI
End DoDot:1
+37 SET $PIECE(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01)),U,1)=$PIECE(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01)),U,1)+PSUDAMT
+38 ; and store Summary totals
+39 SET ^XTMP(PSUUDSUB,"DIS",PSUFACN)=PSUDAMT+$GET(^XTMP(PSUUDSUB,"DIS",PSUFACN))
+40 SET ^XTMP(PSUUDSUB,"CST",PSUFACN)=(PSUDRUG(16)*PSUDAMT)+$GET(^XTMP(PSUUDSUB,"CST",PSUFACN))
TMPDDQ ; exit from TMPDD
QUIT