1 | PSUUD2 ;BIR/TJH - PBM UNIT DOSE SUBROUTINES & FUNCTIONS ;24 DEC 2003
|
---|
2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005
|
---|
3 | ;DBIA(s)
|
---|
4 | ; Reference to file #55 supported by DBIA 2497
|
---|
5 | ;
|
---|
6 | DISAMT ; precompute dispensed amounts by drug
|
---|
7 | N DADATE,DADRUG,DAMT,DAHOW
|
---|
8 | K PSUDAS ; initialize Dispensed Amount Summary array
|
---|
9 | ;*34 |=>
|
---|
10 | S PSUXX=PSUSDT\1-.0001
|
---|
11 | DAL134 S PSUXX=$O(^PS(55,PSPAT,5,PSDOSE,11,"B",PSUXX))
|
---|
12 | G:'PSUXX DISAMTQ
|
---|
13 | I PSUXX>PSUTEDT G DISAMTQ
|
---|
14 | S DISPDA=0
|
---|
15 | F S DISPDA=$O(^PS(55,PSPAT,5,PSDOSE,11,"B",PSUXX,DISPDA)) Q:DISPDA'>0 D
|
---|
16 | . K DISPI
|
---|
17 | . D GETS^PSUTL(55.0611,"PSPAT,PSDOSE,DISPDA",".01;.02;.03;.05","DISPI","I")
|
---|
18 | . D MOVEI^PSUTL("DISPI")
|
---|
19 | . S DADATE=DISPI(.01)
|
---|
20 | . S DADRUG=$G(DISPI(.02)) G:DADRUG="" DAL134
|
---|
21 | . S DAMT=$G(DISPI(.03))
|
---|
22 | . S DAHOW=$G(DISPI(.05))
|
---|
23 | . S PSUDAS(DADRUG)=$G(PSUDAS(DADRUG))+$S(DAHOW=4:DAMT*-1,1:DAMT) ;net
|
---|
24 | . I DAHOW'=4 D
|
---|
25 | ..S PSUDAS("DISP",DADRUG)=$G(PSUDAS("DISP",DADRUG))+$G(DAMT) ;Dispense
|
---|
26 | . I DAHOW=4 D
|
---|
27 | ..S PSUDAS("RET",DADRUG)=$G(PSUDAS("RET",DADRUG))+$G(DAMT) ;Return
|
---|
28 | . S PSUDAS("NET",DADRUG)=$G(PSUDAS("DISP",DADRUG))-$G(PSUDAS("RET",DADRUG)) ;Net dispensed
|
---|
29 | .;
|
---|
30 | . K DISPI
|
---|
31 | G DAL134
|
---|
32 | ;*34 <=|
|
---|
33 | DISAMTQ K ^TMP($J,"PSUTA") Q ; exit point from DISAMT subroutine
|
---|
34 | ;
|
---|
35 | SETUP ; set up some variables required later
|
---|
36 | D SECTN^PSUTL1
|
---|
37 | D DT^DILF("E",PSUSDT,.EXTD)
|
---|
38 | S PSURP("START")=EXTD(0)
|
---|
39 | D DT^DILF("E",PSUEDT,.EXTD)
|
---|
40 | S PSURP("END")=EXTD(0)
|
---|
41 | S X1=PSUSDT,X2=-101
|
---|
42 | D C^%DTC K %,%H,%T
|
---|
43 | S PSDATE=X
|
---|
44 | S PSUEDTIM=PSUEDT+.2400
|
---|
45 | S PSUJOB=$G(PSUJOB,$J),PSUUDSUB="PSUUD_"_PSUJOB
|
---|
46 | K ^XTMP(PSUUDSUB)
|
---|
47 | K PSUDTLRN
|
---|
48 | S X1=DT,X2=3 D C^%DTC
|
---|
49 | S ^XTMP(PSUUDSUB,0)=X_U_DT_U_"PSU PBM UNIT DOSE STATISTICAL DATA"
|
---|
50 | SETUPQ Q ; exit from SETUP
|
---|
51 | ;
|
---|
52 | TMPUD ; store Unit Dose data in first half of record, pieces 2-7
|
---|
53 | S DLM="^",REC1="^"
|
---|
54 | S REC1=REC1_$TR(PSUFACN,"^","'")_DLM_$TR(PSUDOSE(10),"^","'")_DLM_$TR(PSUDOSE(.01),"^","'")
|
---|
55 | S REC1=REC1_DLM_PSUSSN_DLM_$TR(PSUDOSE(26),"^","'")_DLM_PSUVSSN ;_DLM_$TR(PSUVCL,"^","'")
|
---|
56 | ;S REC1=REC1_DLM_$TR(PSUVSV,"^","'")_DLM_$TR(PSUVS1,"^","'")_DLM_$TR(PSUVS2,"^","'")
|
---|
57 | TMPUDQ Q ; exit from TMPUD
|
---|
58 | ;
|
---|
59 | TMPDD ; create Dispense Drug record and store in ^XTMP
|
---|
60 | N PSUDAMT S PSUDAMT=$G(PSUDAS(PSUDISD(.01)))
|
---|
61 | Q:'PSUDAMT ; per Lina B., do not store if dispensed amount=0
|
---|
62 | S DLM="^",REC2="",PSUDTLRN(PSUFACN)=+$G(PSUDTLRN(PSUFACN))+1
|
---|
63 | S REC2=REC1_DLM_$TR(PSUDRUG(21),"^","'")_DLM_$TR(PSUDRUG(2),"^","'")_DLM
|
---|
64 | S REC2=REC2_$TR(PSUDRUG(.01),"^","'")_DLM_$TR(PSUDRUG(31),"^","'")_DLM
|
---|
65 | S REC2=REC2_PSUDRUG(51)_DLM_PSUDNFI_DLM_PSUDNFR_DLM
|
---|
66 | S REC2=REC2_$TR(PSUDISD(.02),"^","'")_DLM_$TR(PSUDRUG(14.5),"^","'")_DLM
|
---|
67 | S REC2=REC2_$TR(PSUDRUG(16),"^","'")_DLM_PSUDAMT_DLM_PSUDRUG(52)_DLM_PSUDRUG(3)_"^"
|
---|
68 | ;VMP OIFO BAY PINES;ELR;PSU*3.0*24
|
---|
69 | D ICN^PSUV1 S PSUPICN=$G(^XTMP("PSU_"_PSUJOB,"PSUPICN"))
|
---|
70 | S REC2=REC2_$G(PSUPICN)_DLM_$G(PSUDOSE(1))_DLM_PSUUDST_DLM
|
---|
71 | ;
|
---|
72 | ;ADD AMIS DATA
|
---|
73 | N PSUDSP,PSURET
|
---|
74 | S PSUDSP=$G(PSUDAS("DISP",PSUDISD(.01)))
|
---|
75 | S ^XTMP(PSUUDSUB,"DISP",PSUFACN)=PSUDSP+$G(^XTMP(PSUUDSUB,"DISP",PSUFACN))
|
---|
76 | S PSURET=$G(PSUDAS("RET",PSUDISD(.01)))
|
---|
77 | S ^XTMP(PSUUDSUB,"RET",PSUFACN)=PSURET+$G(^XTMP(PSUUDSUB,"RET",PSUFACN))
|
---|
78 | S:'$G(PSURET) PSURET=0
|
---|
79 | S REC2=REC2_PSUDSP_DLM_PSURET_DLM
|
---|
80 | ;END AMIS DATA
|
---|
81 | ;
|
---|
82 | S ^XTMP(PSUUDSUB,"DETAIL",PSUFACN,PSUDTLRN(PSUFACN))=REC2
|
---|
83 | ; increase Unit Dose and Patient counts if not already counted
|
---|
84 | I '$D(^XTMP(PSUUDSUB,"ORD",PSUFACN,PSUDOSE(.01))) D
|
---|
85 | .S ^XTMP(PSUUDSUB,"ORD",PSUFACN,PSUDOSE(.01))=""
|
---|
86 | .S ^XTMP(PSUUDSUB,"ORD",PSUFACN)=1+$G(^XTMP(PSUUDSUB,"ORD",PSUFACN))
|
---|
87 | I '$D(^XTMP(PSUUDSUB,"SSN",PSUFACN,PSUSSN)) D
|
---|
88 | .S ^XTMP(PSUUDSUB,"SSN",PSUFACN,PSUSSN)=""
|
---|
89 | .S ^XTMP(PSUUDSUB,"SSN",PSUFACN)=1+$G(^XTMP(PSUUDSUB,"SSN",PSUFACN))
|
---|
90 | S PSUDIV=PSUFACN D GETDIV^PSUV3 I PSUDIVNM'="" D
|
---|
91 | .S ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIVNM,PSUSSN)=""
|
---|
92 | I PSUDIVNM="" S ^XTMP("PSU_"_PSUJOB,"PSUDIV",PSUDIV,PSUSSN)=""
|
---|
93 | ; and store totals by drug in ^TMP("PSUUD DRUG",$J,PSUFACN
|
---|
94 | I '$D(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01))) D
|
---|
95 | .S ^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01))=0_U_PSUDRUG(16)_U_PSUDRUG(51)_U_PSUDNFI
|
---|
96 | S $P(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01)),U,1)=$P(^XTMP(PSUUDSUB,"DRUG",PSUFACN,PSUDRUG(.01)),U,1)+PSUDAMT
|
---|
97 | ; and store Summary totals
|
---|
98 | S ^XTMP(PSUUDSUB,"DIS",PSUFACN)=PSUDAMT+$G(^XTMP(PSUUDSUB,"DIS",PSUFACN))
|
---|
99 | S ^XTMP(PSUUDSUB,"CST",PSUFACN)=(PSUDRUG(16)*PSUDAMT)+$G(^XTMP(PSUUDSUB,"CST",PSUFACN))
|
---|
100 | TMPDDQ Q ; exit from TMPDD
|
---|