1 | PSUAR6 ;BIR/DAM - AR/WS AMIS Summary Data;11 March 2004
|
---|
2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;**6**;MARCH, 2005
|
---|
3 | ;
|
---|
4 | ;This routine gathers AR/WS DOSES AMIS Summary data
|
---|
5 | ;No DBIA's needed
|
---|
6 | ;
|
---|
7 | EN ;Entry point to gather AMIS data. Called from PSUAR0
|
---|
8 | K PSUAR ;Arrays to hold temporary data
|
---|
9 | N TRUNC,TOT,NET
|
---|
10 | S PSUDV=0
|
---|
11 | F S PSUDV=$O(^XTMP(PSUARSUB,"RECORDS",PSUDV)) Q:PSUDV="" D
|
---|
12 | .S PSUCT=0
|
---|
13 | .F S PSUCT=$O(^XTMP(PSUARSUB,"RECORDS",PSUDV,PSUCT)) Q:PSUCT="" D
|
---|
14 | ..K PSUAMIS
|
---|
15 | ..M PSUAMIS(PSUDV,PSUCT)=^XTMP(PSUARSUB,"RECORDS",PSUDV,PSUCT)
|
---|
16 | ..S PSUCAT=""
|
---|
17 | ..S PSUCAT=$P($G(PSUAMIS(PSUDV,PSUCT)),U,14) ;AMIS Category
|
---|
18 | ..D DSP
|
---|
19 | ..D RET
|
---|
20 | ..D NET
|
---|
21 | ..D TCOST
|
---|
22 | .D AVE
|
---|
23 | D TOTAL
|
---|
24 | D EN^PSUAR7 ;Compose and send MailMan message
|
---|
25 | Q
|
---|
26 | DSP ;Calculate AR/WS dispensed data
|
---|
27 | N DSP,DUNT,DFLD,DBLD
|
---|
28 | I PSUCAT="03 or 04" D ;Doses Data
|
---|
29 | .S DSP=$P($G(PSUAMIS(PSUDV,PSUCT)),U,19)
|
---|
30 | .I DSP="" S DSP=0
|
---|
31 | .S $P(PSUAR("DSP",PSUDV),U,1)=$P($G(PSUAR("DSP",PSUDV)),U,1)+DSP
|
---|
32 | ;
|
---|
33 | I PSUCAT="06 or 07" D ;Units Data
|
---|
34 | .S DUNT=$P($G(PSUAMIS(PSUDV,PSUCT)),U,19)
|
---|
35 | .S:DUNT="" DUNT=0
|
---|
36 | .S $P(PSUAR("UNIT",PSUDV),U,1)=$P($G(PSUAR("UNIT",PSUDV)),U,1)+DUNT
|
---|
37 | ;
|
---|
38 | I PSUCAT=17 D ;Fluids/sets data
|
---|
39 | .S DFLD=$P($G(PSUAMIS(PSUDV,PSUCT)),U,19)
|
---|
40 | .S:DFLD="" DFLD=0
|
---|
41 | .S $P(PSUAR("FLD",PSUDV),U,1)=$P($G(PSUAR("FLD",PSUDV)),U,1)+DFLD
|
---|
42 | ;
|
---|
43 | I PSUCAT=22 D ;Blood products data
|
---|
44 | .S DBLD=$P($G(PSUAMIS(PSUDV,PSUCT)),U,19)
|
---|
45 | .S:DBLD="" DBLD=0
|
---|
46 | .S $P(PSUAR("BLD",PSUDV),U,1)=$P($G(PSUAR("BLD",PSUDV)),U,1)+DBLD
|
---|
47 | Q
|
---|
48 | RET ;Calculate AR/WS returned data
|
---|
49 | N RET,RUNT,RFLD,RBLD
|
---|
50 | I PSUCAT="03 or 04" D ;Doses data
|
---|
51 | .S RET=$P($G(PSUAMIS(PSUDV,PSUCT)),U,20)
|
---|
52 | .I RET="" S RET=0
|
---|
53 | .S $P(PSUAR("DSP",PSUDV),U,2)=$P($G(PSUAR("DSP",PSUDV)),U,2)+RET
|
---|
54 | ;
|
---|
55 | I PSUCAT="06 or 07" D ;Unit data
|
---|
56 | .S RUNT=$P($G(PSUAMIS(PSUDV,PSUCT)),U,20)
|
---|
57 | .I RUNT="" S RUNT=0
|
---|
58 | .S $P(PSUAR("UNIT",PSUDV),U,2)=$P($G(PSUAR("UNIT",PSUDV)),U,2)+RUNT
|
---|
59 | ;
|
---|
60 | I PSUCAT=17 D ;Fluids/sets data
|
---|
61 | .S RFLD=$P($G(PSUAMIS(PSUDV,PSUCT)),U,20)
|
---|
62 | .I RFLD="" S RFLD=0
|
---|
63 | .S $P(PSUAR("FLD",PSUDV),U,2)=$P($G(PSUAR("FLD",PSUDV)),U,2)+RFLD
|
---|
64 | ;
|
---|
65 | I PSUCAT=22 D ;Blood products data
|
---|
66 | .S RBLD=$P($G(PSUAMIS(PSUDV,PSUCT)),U,20)
|
---|
67 | .I RBLD="" S RBLD=0
|
---|
68 | .S $P(PSUAR("BLD",PSUDV),U,2)=$P($G(PSUAR("BLD",PSUDV)),U,2)+RBLD
|
---|
69 | Q
|
---|
70 | NET ;Calculate Net dispensed data
|
---|
71 | I PSUCAT="03 or 04" D ;Doses data
|
---|
72 | .S $P(PSUAR("DSP",PSUDV),U,3)=$P(PSUAR("DSP",PSUDV),U,1)-$P(PSUAR("DSP",PSUDV),U,2)
|
---|
73 | ;
|
---|
74 | I PSUCAT="06 or 07" D ;Unit data
|
---|
75 | .S $P(PSUAR("UNIT",PSUDV),U,3)=$P(PSUAR("UNIT",PSUDV),U,1)-$P(PSUAR("UNIT",PSUDV),U,2)
|
---|
76 | ;
|
---|
77 | I PSUCAT=17 D ;Fluids/sets data
|
---|
78 | .S $P(PSUAR("FLD",PSUDV),U,3)=$P(PSUAR("FLD",PSUDV),U,1)-$P(PSUAR("FLD",PSUDV),U,2)
|
---|
79 | ;
|
---|
80 | I PSUCAT=22 D ;Blood products data
|
---|
81 | .S $P(PSUAR("BLD",PSUDV),U,3)=$P(PSUAR("BLD",PSUDV),U,1)-$P(PSUAR("BLD",PSUDV),U,2)
|
---|
82 | Q
|
---|
83 | TCOST ;Calculate total cost
|
---|
84 | N T1,T2
|
---|
85 | S PSUCA=0
|
---|
86 | F S PSUCA=$O(^XTMP("PSUTCST",PSUDV,PSUCA)) Q:PSUCA="" D
|
---|
87 | .I (PSUCA="03")!(PSUCA="04") D
|
---|
88 | ..S T1=$G(^XTMP("PSUTCST",PSUDV,"03"))
|
---|
89 | ..S T2=$G(^XTMP("PSUTCST",PSUDV,"04"))
|
---|
90 | ..S $P(PSUAR("DSP",PSUDV),U,4)=T1+T2
|
---|
91 | ..K T1,T2
|
---|
92 | .I (PSUCA="06")!(PSUCA="07") D
|
---|
93 | ..S T1=$G(^XTMP("PSUTCST",PSUDV,"06"))
|
---|
94 | ..S T2=$G(^XTMP("PSUTCST",PSUDV,"07"))
|
---|
95 | ..S $P(PSUAR("UNIT",PSUDV),U,4)=T1+T2
|
---|
96 | ..K T1,T2
|
---|
97 | .I PSUCA=17 D
|
---|
98 | ..S $P(PSUAR("FLD",PSUDV),U,4)=^XTMP("PSUTCST",PSUDV,PSUCA)
|
---|
99 | .I PSUCA=22 D
|
---|
100 | ..Q:$P($G(PSUAR("BLD",PSUDV)),U,1)=""
|
---|
101 | ..S $P(PSUAR("BLD",PSUDV),U,4)=^XTMP("PSUTCST",PSUDV,PSUCA)
|
---|
102 | Q
|
---|
103 | AVE ;Calculate Average cost per dose
|
---|
104 | N NET,TOT
|
---|
105 | S NET=$P($G(PSUAR("DSP",PSUDV)),U,3)
|
---|
106 | I $G(NET)'>0 S NET=1
|
---|
107 | S TOT=$P($G(PSUAR("DSP",PSUDV)),U,4)
|
---|
108 | S $P(PSUAR("DSP",PSUDV),U,5)=TOT/NET D
|
---|
109 | .S TRUNC=PSUAR("DSP",PSUDV) ;transfer node to variable
|
---|
110 | .D TRUNC
|
---|
111 | .S PSUAR("DSP",PSUDV)=TRUNC ;transfer node back to array
|
---|
112 | .K TRUNC
|
---|
113 | .K TOT,NET
|
---|
114 | ;
|
---|
115 | I $D(PSUAR("UNIT",PSUDV)) D
|
---|
116 | .S NET=$P(PSUAR("UNIT",PSUDV),U,3)
|
---|
117 | .I $G(NET)'>0 S NET=1
|
---|
118 | .S TOT=$P($G(PSUAR("UNIT",PSUDV)),U,4)
|
---|
119 | .S $P(PSUAR("UNIT",PSUDV),U,5)=TOT/NET D
|
---|
120 | ..S TRUNC=PSUAR("UNIT",PSUDV) ;transfer node to variable
|
---|
121 | ..D TRUNC
|
---|
122 | ..S PSUAR("UNIT",PSUDV)=TRUNC ;transfer node back to array
|
---|
123 | ..K TRUNC
|
---|
124 | ..K TOT,NET
|
---|
125 | I '$D(PSUAR("UNIT",PSUDV)) D
|
---|
126 | .S PSUAR("UNIT",PSUDV)="0.00"_U_"0.00"_U_"0.00"_U_"0.00"_U_"0.00"
|
---|
127 | ;
|
---|
128 | I $D(PSUAR("FLD",PSUDV)) D
|
---|
129 | .S NET=$P($G(PSUAR("FLD",PSUDV)),U,3)
|
---|
130 | .I $G(NET)'>0 S NET=1
|
---|
131 | .S TOT=$P($G(PSUAR("FLD",PSUDV)),U,4)
|
---|
132 | .S $P(PSUAR("FLD",PSUDV),U,5)=TOT/NET D
|
---|
133 | ..S TRUNC=PSUAR("FLD",PSUDV) ;transfer node to variable
|
---|
134 | ..D TRUNC
|
---|
135 | ..S PSUAR("FLD",PSUDV)=TRUNC ;transfer node back to array
|
---|
136 | ..K TRUNC
|
---|
137 | ..K TOT,NET
|
---|
138 | I '$D(PSUAR("FLD",PSUDV)) D
|
---|
139 | .S PSUAR("FLD",PSUDV)="0.00"_U_"0.00"_U_"0.00"_U_"0.00"_U_"0.00"
|
---|
140 | ;
|
---|
141 | I $D(PSUAR("BLD",PSUDV)),$G(PSUDIV) D
|
---|
142 | .S NET=$P(PSUAR("BLD",PSUDV),U,3)
|
---|
143 | .I $G(NET)'>0 S NET=1
|
---|
144 | .S TOT=$P($G(PSUAR("BLD",PSUDV)),U,4)
|
---|
145 | .S $P(PSUAR("BLD",PSUDV),U,5)=TOT/NET D
|
---|
146 | ..S TRUNC=PSUAR("BLD",PSUDV) ;transfer node to variable
|
---|
147 | ..D TRUNC
|
---|
148 | ..S PSUAR("BLD",PSUDV)=TRUNC ;transfer node back to array
|
---|
149 | ..K TRUNC
|
---|
150 | ..K TOT,NET
|
---|
151 | I '$D(PSUAR("BLD",PSUDV)) D
|
---|
152 | .S PSUAR("BLD",PSUDV)="0.00"_U_"0.00"_U_"0.00"_U_"0.00"_U_"0.00"
|
---|
153 | Q
|
---|
154 | TRUNC ;Truncate pieces with dollar values to 2 decimal places
|
---|
155 | ;
|
---|
156 | F I=1:1:5 D
|
---|
157 | .N A,B,C
|
---|
158 | .I $P(TRUNC,U,I)'["." D Q
|
---|
159 | ..S $P(TRUNC,U,I)=$P(TRUNC,U,I)_".00"
|
---|
160 | .S A=$F($P(TRUNC,U,I),".") ;Find first position after decimal
|
---|
161 | .S B=$E($P(TRUNC,U,I),1,(A-1)) ;Extract dollars and decimal
|
---|
162 | .S C=$E($P(TRUNC,U,I),A,(A+1)) ;Extract cents after decimal
|
---|
163 | .I $L(C)'=2 S C=$E(C,1)_0
|
---|
164 | .S $P(TRUNC,U,I)=B_C
|
---|
165 | Q
|
---|
166 | TOTAL ;Calculate column totals for each division
|
---|
167 | ;
|
---|
168 | I $D(PSUAR("DSP")) D
|
---|
169 | .N TDSP,TRET,TNET,TCST,TAVE
|
---|
170 | .S PSUDIV=0 ;Doses data
|
---|
171 | .F S PSUDIV=$O(PSUAR("DSP",PSUDIV)) Q:PSUDIV="" D
|
---|
172 | ..S TDSP=$G(TDSP)+$P(PSUAR("DSP",PSUDIV),U,1) ;Total dispensed
|
---|
173 | ..S TRET=$G(TRET)+$P(PSUAR("DSP",PSUDIV),U,2) ;Total returned
|
---|
174 | ..S TNET=$G(TNET)+$P(PSUAR("DSP",PSUDIV),U,3) ;Total of Net
|
---|
175 | ..S TCST=$G(TCST)+$P(PSUAR("DSP",PSUDIV),U,4) ;Total of total costs
|
---|
176 | ..I $G(TNET) S TAVE=$G(TCST)/TNET D
|
---|
177 | ...I TAVE'["." S TAVE=TAVE_".00" Q
|
---|
178 | ...N A,B,C
|
---|
179 | ...S A=$F(TAVE,".") ;Find 1st position after decimal
|
---|
180 | ...S B=$E(TAVE,1,(A-1)) ;Extract dollars and decimal
|
---|
181 | ...S C=$E(TAVE,A,(A+1)) ;Extract cents after decimal
|
---|
182 | ...I $L(C)'=2 S C=$E(C,1)_0
|
---|
183 | ...S TAVE=B_C
|
---|
184 | ..I '$D(TAVE) S TAVE="0.00"
|
---|
185 | .;
|
---|
186 | .S TOTAL("DSP")=TDSP_U_TRET_U_TNET_U_TCST_U_TAVE D
|
---|
187 | ..S TRUNC=TOTAL("DSP") ;Transfer to variable
|
---|
188 | ..D TRUNC
|
---|
189 | ..S TOTAL("DSP")=TRUNC ;Transfer back to array
|
---|
190 | ..K TRUNC
|
---|
191 | ;
|
---|
192 | I $D(PSUAR("UNIT")) D
|
---|
193 | .N TDSP,TRET,TNET,TCST,TAVE
|
---|
194 | .S PSUDIV=0 ;Unit data
|
---|
195 | .F S PSUDIV=$O(PSUAR("UNIT",PSUDIV)) Q:PSUDIV="" D
|
---|
196 | ..S TDSP=$G(TDSP)+$P(PSUAR("UNIT",PSUDIV),U,1) ;Total dispensed
|
---|
197 | ..S TRET=$G(TRET)+$P(PSUAR("UNIT",PSUDIV),U,2) ;Total returned
|
---|
198 | ..S TNET=$G(TNET)+$P(PSUAR("UNIT",PSUDIV),U,3) ;Total of Net
|
---|
199 | ..S TCST=$G(TCST)+$P(PSUAR("UNIT",PSUDIV),U,4) ;Total of total costs
|
---|
200 | ..I $G(TNET) S TAVE=$G(TCST)/TNET D
|
---|
201 | ...I TAVE'["." S TAVE=TAVE_".00" Q
|
---|
202 | ...N A,B,C
|
---|
203 | ...S A=$F(TAVE,".") ;Find 1st position after decimal
|
---|
204 | ...S B=$E(TAVE,1,(A-1)) ;Extract dollars and decimal
|
---|
205 | ...S C=$E(TAVE,A,(A+1)) ;Extract cents after decimal
|
---|
206 | ...I $L(C)'=2 S C=$E(C,1)_0
|
---|
207 | ...S TAVE=B_C
|
---|
208 | ..I '$D(TAVE) S TAVE="0.00"
|
---|
209 | .S TOTAL("UNIT")=TDSP_U_TRET_U_TNET_U_TCST_U_TAVE D
|
---|
210 | ..S TRUNC=TOTAL("UNIT") ;Transfer to variable
|
---|
211 | ..D TRUNC
|
---|
212 | ..S TOTAL("UNIT")=TRUNC ;Transfer back to array
|
---|
213 | ..K TRUNC
|
---|
214 | ;
|
---|
215 | I $D(PSUAR("FLD")) D
|
---|
216 | .N TDSP,TRET,TNET,TCST,TAVE
|
---|
217 | .S PSUDIV=0 ;Fluid/sets data
|
---|
218 | .F S PSUDIV=$O(PSUAR("FLD",PSUDIV)) Q:PSUDIV="" D
|
---|
219 | ..S TDSP=$G(TDSP)+$P(PSUAR("FLD",PSUDIV),U,1) ;Total dispensed
|
---|
220 | ..S TRET=$G(TRET)+$P(PSUAR("FLD",PSUDIV),U,2) ;Total returned
|
---|
221 | ..S TNET=$G(TNET)+$P(PSUAR("FLD",PSUDIV),U,3) ;Total of Net
|
---|
222 | ..S TCST=$G(TCST)+$P(PSUAR("FLD",PSUDIV),U,4) ;Total of total costs
|
---|
223 | ..I $G(TNET) S TAVE=$G(TCST)/TNET D
|
---|
224 | ...I TAVE'["." S TAVE=TAVE_".00" Q
|
---|
225 | ...N A,B,C
|
---|
226 | ...S A=$F(TAVE,".") ;Find 1st position after decimal
|
---|
227 | ...S B=$E(TAVE,1,(A-1)) ;Extract dollars and decimal
|
---|
228 | ...S C=$E(TAVE,A,(A+1)) ;Extract cents after decimal
|
---|
229 | ...I $L(C)'=2 S C=$E(C,1)_0
|
---|
230 | ...S TAVE=B_C
|
---|
231 | ..I '$D(TAVE) S TAVE="0.00"
|
---|
232 | .S TOTAL("FLD")=TDSP_U_TRET_U_TNET_U_TCST_U_TAVE D
|
---|
233 | ..S TRUNC=TOTAL("FLD") ;Transfer to variable
|
---|
234 | ..D TRUNC
|
---|
235 | ..S TOTAL("FLD")=TRUNC ;Transfer back to array
|
---|
236 | ..K TRUNC
|
---|
237 | I '$D(PSUAR("FLD")) D
|
---|
238 | .S TOTAL("FLD")="0.00"_U_"0.00"_U_"0.00"_U_"0.00"_U_"0.00"
|
---|
239 | ;
|
---|
240 | ;
|
---|
241 | I $D(PSUAR("BLD")) D
|
---|
242 | .N TDSP,TRET,TNET,TCST,TAVE
|
---|
243 | .S PSUDIV=0 ;Blood data
|
---|
244 | .F S PSUDIV=$O(PSUAR("BLD",PSUDIV)) Q:PSUDIV="" D
|
---|
245 | ..S TDSP=$G(TDSP)+$P(PSUAR("BLD",PSUDIV),U,1) ;Total dispensed
|
---|
246 | ..S TRET=$G(TRET)+$P(PSUAR("BLD",PSUDIV),U,2) ;Total returned
|
---|
247 | ..S TNET=$G(TNET)+$P(PSUAR("BLD",PSUDIV),U,3) ;Total of Net
|
---|
248 | ..S TCST=$G(TCST)+$P(PSUAR("BLD",PSUDIV),U,4) ;Total of total costs
|
---|
249 | ..I $G(TNET) S TAVE=$G(TCST)/TNET D
|
---|
250 | ...I TAVE'["." S TAVE=TAVE_".00" Q
|
---|
251 | ...N A,B,C
|
---|
252 | ...S A=$F(TAVE,".") ;Find 1st position after decimal
|
---|
253 | ...S B=$E(TAVE,1,(A-1)) ;Extract dollars and decimal
|
---|
254 | ...S C=$E(TAVE,A,(A+1)) ;Extract cents after decimal
|
---|
255 | ...I $L(C)'=2 S C=$E(C,1)_0
|
---|
256 | ...S TAVE=B_C
|
---|
257 | ..I '$D(TAVE) S TAVE="0.00"
|
---|
258 | .S TOTAL("BLD")=TDSP_U_TRET_U_TNET_U_TCST_U_TAVE D
|
---|
259 | ..S TRUNC=TOTAL("BLD") ;Transfer to variable
|
---|
260 | ..D TRUNC
|
---|
261 | ..S TOTAL("BLD")=TRUNC ;Transfer back to array
|
---|
262 | ..K TRUNC
|
---|
263 | I '$D(PSUAR("BLD")) D
|
---|
264 | .S TOTAL("BLD")="0.00"_U_"0.00"_U_"0.00"_U_"0.00"_U_"0.00"
|
---|
265 | Q
|
---|