1 | BPSRPT6 ;BHAM ISC/BEE - ECME REPORTS ;14-FEB-05
|
---|
2 | ;;1.0;E CLAIMS MGMT ENGINE;**1,3,5**;JUN 2004;Build 45
|
---|
3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | Q
|
---|
6 | ;
|
---|
7 | ;Get the Insurance Company pointer and name
|
---|
8 | ;
|
---|
9 | ; Returned Value -> ptr^Insurance Company Name
|
---|
10 | ;
|
---|
11 | INSNAM(BP59) N BPIN,BPDOS,BPDFN,BPSZZ,BP36,BPX
|
---|
12 | ;
|
---|
13 | ;Reset Insurance
|
---|
14 | S BP36=""
|
---|
15 | ;
|
---|
16 | ;First Pull From BPS Transactions
|
---|
17 | S BPIN=+$P($G(^BPST(BP59,9)),U)
|
---|
18 | I +BPIN S BP36=$P($G(^BPST(BP59,10,BPIN,0)),U,7) S:BP36]"" BP36="1^"_BP36
|
---|
19 | ;
|
---|
20 | ;If Not Found, look up using API
|
---|
21 | I BP36="" D
|
---|
22 | .S BPDOS=+$P($G(^BPST(BP59,12)),U,2)\1
|
---|
23 | .I BPDOS=0 S BPDOS=+$P($G(^BPST(BP59,0)),U,8)\1
|
---|
24 | .S BPDFN=+$P($G(^BPST(BP59,0)),U,6)
|
---|
25 | .S BPX=$$INSUR^IBBAPI(BPDFN,BPDOS,,.BPSZZ,"1")
|
---|
26 | .S BP36=$G(BPSZZ("IBBAPI","INSUR",1,1))
|
---|
27 | ;
|
---|
28 | ;If Not Found, put in MISSING INSURANCE
|
---|
29 | I $TR(BP36,U)="" S BP36=" ^**MISSING INSURANCE**"
|
---|
30 | ;
|
---|
31 | Q BP36
|
---|
32 | ;
|
---|
33 | ;Select an Insurance Company file entry (Fileman Lookup)
|
---|
34 | ;
|
---|
35 | ; Returned value -> Insurance Company Name
|
---|
36 | ;
|
---|
37 | SELINS() N INS
|
---|
38 | S INS=$$SELINSUR^IBNCPDPI("Select Insurance","")
|
---|
39 | I $P(INS,U)=-1 S INS="^"
|
---|
40 | E S INS=$P(INS,U,2)
|
---|
41 | Q INS
|
---|
42 | ;
|
---|
43 | ;Get the drug name for display
|
---|
44 | ;
|
---|
45 | ; Input variable -> BP50 - Lookup to DRUG (#50)
|
---|
46 | ; BPLEN - Length of the display field
|
---|
47 | ; Returned value -> Name of the drug
|
---|
48 | ;
|
---|
49 | DRGNAM(BP50,BPLEN) Q $E($$DRUGDIE^BPSUTIL1(+BP50,.01,"E"),1,BPLEN)
|
---|
50 | ;
|
---|
51 | ;Select a DRUG file entry (Fileman Lookup)
|
---|
52 | ;
|
---|
53 | ; Returned Variable -> Y
|
---|
54 | ;
|
---|
55 | SELDRG N DIC S DIC(0)="QEAM",DIC=50,DIC("A")="Select Drug: "
|
---|
56 | D DRUGDIC^BPSUTIL1(.DIC)
|
---|
57 | Q
|
---|
58 | ;
|
---|
59 | ;Get the drug class for display
|
---|
60 | ;
|
---|
61 | ; Input variable -> BP50605 - Lookup to VA DRUG CLASS (#50.605)
|
---|
62 | ; BPLEN - Length of the display field
|
---|
63 | ; Returned value -> Name of the drug class
|
---|
64 | ;
|
---|
65 | DRGCLNAM(BP50605,BPLEN) N IEN,Y
|
---|
66 | K ^TMP($J,"BPSRPT6")
|
---|
67 | S Y=""
|
---|
68 | I BP50605]"" D
|
---|
69 | .D C^PSN50P65(BP50605,"","BPSRPT6")
|
---|
70 | .S IEN=$O(^TMP($J,"BPSRPT6",0))
|
---|
71 | .I IEN]"" S Y=$E($G(^TMP($J,"BPSRPT6",IEN,1)),1,BPLEN)
|
---|
72 | K ^TMP($J,"BPSRPT6")
|
---|
73 | Q Y
|
---|
74 | ;
|
---|
75 | ;Select a VA DRUG CLASS file entry (Fileman Lookup)
|
---|
76 | ;
|
---|
77 | SELDRGC N DIR,DIRUT,DTOUT,DUOUT,IEN,TOT,X
|
---|
78 | K ^TMP($J,"BPSRPT6")
|
---|
79 | ;
|
---|
80 | F D Q:Y]""
|
---|
81 | .K ^TMP($J,"BPSRPT6"),^TMP($J,"BPSRPT6X")
|
---|
82 | .S DIR(0)="FO^1:35"
|
---|
83 | .S DIR("A")="Select Drug Class"
|
---|
84 | .S DIR("?")="Answer with VA DRUG CLASS CODE, or CLASSIFICATION. TYPE '??' FOR A LIST"
|
---|
85 | .S DIR("??")="^D DCLIST^BPSRPT6"
|
---|
86 | .D ^DIR
|
---|
87 | .I ($G(DUOUT)=1)!($G(DTOUT)=1)!($G(Y)="") S Y="^" Q
|
---|
88 | .;
|
---|
89 | .;Get list based on original user input
|
---|
90 | .D C^PSN50P65("",Y,"BPSRPT6X")
|
---|
91 | .;
|
---|
92 | .;Get list based on uppercase input
|
---|
93 | .S Y=$$UP^XLFSTR(Y)
|
---|
94 | .D C^PSN50P65("",Y,"BPSRPT6")
|
---|
95 | .;
|
---|
96 | .;Merge lists together
|
---|
97 | .M ^TMP($J,"BPSRPT6")=^TMP($J,"BPSRPT6X")
|
---|
98 | .K ^TMP($J,"BPSRPT6X")
|
---|
99 | .;
|
---|
100 | .; Reset 0 node based on combined lists
|
---|
101 | .S Y=0 F TOT=0:1 S Y=$O(^TMP($J,"BPSRPT6",Y)) Q:'+Y
|
---|
102 | .S ^TMP($J,"BPSRPT6",0)=TOT
|
---|
103 | .;
|
---|
104 | .;Check for no entries found
|
---|
105 | .I TOT<1 W " ??" S Y="" Q
|
---|
106 | .;
|
---|
107 | .;Check for Unique Entry
|
---|
108 | .I TOT=1 D Q
|
---|
109 | ..S Y="",IEN=$O(^TMP($J,"BPSRPT6",0))
|
---|
110 | ..I IEN]"" S Y=$G(^TMP($J,"BPSRPT6",IEN,1)) W $C(13),"Select Drug Class: ",Y
|
---|
111 | .;
|
---|
112 | .;Check for multiple entries - allow user to pick
|
---|
113 | .I TOT>1 S Y=$$DCSEL(TOT)
|
---|
114 | .I Y="^^" S Y=""
|
---|
115 | .;
|
---|
116 | Q
|
---|
117 | ;
|
---|
118 | ;List Entries in VA DRUG CLASS
|
---|
119 | ;
|
---|
120 | DCLIST N CL,DTOUT,IEN,Y
|
---|
121 | K ^TMP($J,"BPSRPT6")
|
---|
122 | D C^PSN50P65("","??","BPSRPT6")
|
---|
123 | ;
|
---|
124 | ;First create new index - sorted by CLASSIFICATION
|
---|
125 | S IEN=0 F S IEN=$O(^TMP($J,"BPSRPT6",IEN)) Q:'IEN D
|
---|
126 | .S CL=$G(^TMP($J,"BPSRPT6",IEN,1)) Q:CL=""
|
---|
127 | .S ^TMP($J,"BPSRPT6","B",CL,IEN)=$G(^TMP($J,"BPSRPT6",IEN,".01"))
|
---|
128 | ;
|
---|
129 | ;Now loop through and display entries
|
---|
130 | S $X=0,$Y=0 W !,?3,"Choose from: ",!
|
---|
131 | S (Y,CL)="" F S CL=$O(^TMP($J,"BPSRPT6","B",CL)) Q:CL="" D Q:Y]""
|
---|
132 | .S IEN="" F S IEN=$O(^TMP($J,"BPSRPT6","B",CL,IEN)) Q:IEN="" D Q:Y]""
|
---|
133 | ..W ?3,$G(^TMP($J,"BPSRPT6","B",CL,IEN)),!,?3,CL,!
|
---|
134 | ..I $Y>19!'$Y D
|
---|
135 | ...W ?3 R "'^' TO STOP: ",Y:$G(DTIME,300)
|
---|
136 | ...E S DTOUT=1
|
---|
137 | ...W $C(13),$J("",17),$C(13)
|
---|
138 | ...I ($G(DTOUT)=1)!($G(Y)="^") S Y="^" Q
|
---|
139 | ...S $X=0,$Y=0
|
---|
140 | ;
|
---|
141 | K ^TMP($J,"BPSRPT6")
|
---|
142 | Q
|
---|
143 | ;
|
---|
144 | ;Allow user to pick VA DRUG CLASS entry based on initial input
|
---|
145 | ;
|
---|
146 | ; Input variable - TOT -> Total entries placed in ^TMP($J,"BPSRPT6")
|
---|
147 | ; Returned value - VA DRUG CLASSIFICATION
|
---|
148 | ;
|
---|
149 | DCSEL(TOT) N CL,DTOUT,I,IEN,IX,Y
|
---|
150 | ;
|
---|
151 | ;First create new index
|
---|
152 | F IX="B","N" K ^TMP($J,"BPSRPT6",IX)
|
---|
153 | S Y="",IEN=0 F S IEN=$O(^TMP($J,"BPSRPT6",IEN)) Q:'IEN D
|
---|
154 | .S CL=$G(^TMP($J,"BPSRPT6",IEN,1)) Q:CL=""
|
---|
155 | .S ^TMP($J,"BPSRPT6","B",CL,IEN)=$G(^TMP($J,"BPSRPT6",IEN,".01"))
|
---|
156 | ;
|
---|
157 | ;Now loop through and allow one to be picked
|
---|
158 | S (Y,CL)="" F S CL=$O(^TMP($J,"BPSRPT6","B",CL)) Q:CL="" D Q:Y]""
|
---|
159 | .S IEN="" F S IEN=$O(^TMP($J,"BPSRPT6","B",CL,IEN)) Q:IEN="" D Q:Y]""
|
---|
160 | ..S I=$G(I)+1 W !,?5,I,?9,$G(^TMP($J,"BPSRPT6","B",CL,IEN)),!,?3,CL
|
---|
161 | ..S ^TMP($J,"BPSRPT6","N",I)=CL
|
---|
162 | ..;
|
---|
163 | ..;Stop after every 5 entries
|
---|
164 | ..I I#5=0 I TOT>I D Q:$G(Y)="^"!($G(Y)="^^")
|
---|
165 | ...W !,"Press <RETURN> to see more, '^' to exit this list, OR"
|
---|
166 | ...W !,"CHOOSE 1 - "_I R ": ",Y:DTIME S:'$T DTOUT=1
|
---|
167 | ...I ($G(DTOUT)=1)!(Y="^") S Y="^^"
|
---|
168 | ..;
|
---|
169 | ..;Stop after last entry
|
---|
170 | ..I I=TOT D
|
---|
171 | ...W !,"CHOOSE 1 - "_I R ": ",Y:DTIME S:'$T DTOUT=1
|
---|
172 | ..I ($G(DTOUT)=1)!(Y="^") S Y="^^"
|
---|
173 | ..;
|
---|
174 | ..;Check for valid entry
|
---|
175 | ..I Y="^^" S Y=""
|
---|
176 | ..I Y]"",'$D(^TMP($J,"BPSRPT6","N",Y)) W " ??" S Y=""
|
---|
177 | ..I Y]"",$D(^TMP($J,"BPSRPT6","N",Y)) S Y=$G(^TMP($J,"BPSRPT6","N",Y))
|
---|
178 | ;
|
---|
179 | Q Y
|
---|
180 | ;
|
---|
181 | ;Get DRUG file pointer
|
---|
182 | ;
|
---|
183 | ; Return Value -> n = ptr to DRUG (#50)
|
---|
184 | ; 0 = Unknown
|
---|
185 | ;
|
---|
186 | GETDRUG(BPRX) Q +$$RXAPI1^BPSUTIL1(BPRX,6,"I")
|
---|
187 | ;
|
---|
188 | ;Get VA DRUG CLASS pointer
|
---|
189 | ;
|
---|
190 | ; Input Variables: BP50 - ptr to DRUG (#50)
|
---|
191 | ;
|
---|
192 | ; Return Value -> n = ptr to VA DRUG CLASS (#50.605)
|
---|
193 | ; 0 = Unknown
|
---|
194 | ;
|
---|
195 | GETDRGCL(BP50) Q $$DRUGDIE^BPSUTIL1(BP50,25)
|
---|
196 | ;
|
---|
197 | ;Determine whether claim was Mail, Window, or CMOP
|
---|
198 | ;
|
---|
199 | ; Input Variables: BPREF - refill # (0-No Refills,1-1st Refill, 2-2nd, ...)
|
---|
200 | ;
|
---|
201 | ; Return Value -> M = Mail
|
---|
202 | ; W = Window
|
---|
203 | ; C = CMOP
|
---|
204 | ;
|
---|
205 | MWC(BPRX,BPREF) Q $$MWC^PSOBPSU2(BPRX,BPREF)
|
---|
206 | ;
|
---|
207 | ;Get Patient Name
|
---|
208 | ;
|
---|
209 | ; Input variable -> BPDFN - ptr to PATIENT (#2)
|
---|
210 | ; Returned value -> Patient Name (shortened)
|
---|
211 | ;
|
---|
212 | PATNAME(BPDFN) Q $E($P($G(^DPT(BPDFN,0)),U),1,25)
|
---|
213 | ;
|
---|
214 | ;Get Last 4 of SSN
|
---|
215 | ;
|
---|
216 | ; Input variable -> BPDFN - ptr to PATIENT (#2)
|
---|
217 | ; Returned value -> Last 4 digits of patient's SSN
|
---|
218 | ;
|
---|
219 | SSN4(BPDFN) N X
|
---|
220 | S X=$P($G(^DPT(BPDFN,0)),U,9)
|
---|
221 | Q $E(X,$L(X)-3,$L(X))
|
---|
222 | ;
|
---|
223 | ;Get RX#
|
---|
224 | ;
|
---|
225 | ; Returned value -> RX#
|
---|
226 | ;
|
---|
227 | RXNUM(BPRX) Q $$RXAPI1^BPSUTIL1(+BPRX,.01,"I")
|
---|
228 | ;
|
---|
229 | ;Determine $Collected
|
---|
230 | ;
|
---|
231 | ; Returned Value -> $Collected
|
---|
232 | ;
|
---|
233 | COLLECTD(BPRX,BPREF) N COL,RET
|
---|
234 | S RET=$$BILLINFO^IBNCPDPI(BPRX,BPREF)
|
---|
235 | S COL=$P(RET,U,5) I COL="0",($P(RET,U,3)=16)!($P(RET,U,3)=27) S COL=""
|
---|
236 | I $P(RET,U,7)=1 S COL="N/A"
|
---|
237 | Q COL
|
---|
238 | ;
|
---|
239 | ;Determine Bill #
|
---|
240 | ;
|
---|
241 | ; Returned Value -> Bill Number
|
---|
242 | ;
|
---|
243 | BILL(BPRX,BPREF) N BILL
|
---|
244 | S BILL=$P($$BILLINFO^IBNCPDPI(BPRX,BPREF),U)
|
---|
245 | Q BILL
|
---|
246 | ;
|
---|
247 | ;Get the Closed Claim Reason
|
---|
248 | ;
|
---|
249 | ; Input variable -> 0 for All Closed Claim Reasons or
|
---|
250 | ; lookup to CLAIMS TRACKING NON-BILLABLE REASONS (#356.8)
|
---|
251 | ; Returned value -> ALL or the selected Closed Claim Reason
|
---|
252 | ;
|
---|
253 | GETCLR(RSN) ;
|
---|
254 | I RSN="0" S RSN="ALL"
|
---|
255 | E S RSN=$P($G(^IBE(356.8,+RSN,0)),U)
|
---|
256 | Q RSN
|
---|
257 | ;
|
---|
258 | ;Get the Closed By Person
|
---|
259 | ;
|
---|
260 | ; Returned Value -> Closed By Name
|
---|
261 | ;
|
---|
262 | CLSBY(BP59) N BP02,CBY,Y
|
---|
263 | S BP02=+$P($G(^BPST(BP59,0)),U,4)
|
---|
264 | S CBY=+$P($G(^BPSC(BP02,900)),U,3)
|
---|
265 | S Y=$$GET1^DIQ(200,CBY_",",".01")
|
---|
266 | Q Y
|
---|
267 | ;
|
---|
268 | ;Get the Claim Status
|
---|
269 | ;
|
---|
270 | ; Input Variables: BPREF - refill # (0-No Refills,1-1st Refill, 2-2nd, ...)
|
---|
271 | ;
|
---|
272 | STATUS(BPRX,BPREF) Q $$STATUS^BPSOSRX(BPRX,BPREF,0)
|
---|
273 | ;
|
---|
274 | ;Elapsed Time
|
---|
275 | ;
|
---|
276 | ; Returned Value -> TIME - Elapsed Processing Time
|
---|
277 | ;
|
---|
278 | ELAPSE(BP59) Q $$TIMEDIFI^BPSOSUD($P($G(^BPST(BP59,0)),U,11),$P($G(^BPST(BP59,0)),U,8))
|
---|
279 | ;
|
---|
280 | ;Get RX issue date
|
---|
281 | ;
|
---|
282 | RXISSDT(BPRX) Q +$$RXAPI1^BPSUTIL1(BPRX,1,"I")
|
---|
283 | ;
|
---|
284 | ;
|
---|
285 | ;Get RX's fill date
|
---|
286 | RXFILDT(BPRX) Q +$$RXAPI1^BPSUTIL1(BPRX,22,"I")
|
---|
287 | ;
|
---|
288 | ;Get Refill's issue date
|
---|
289 | ;
|
---|
290 | REFISSDT(BPRX,BPREF) Q $$REFDISDT(BPRX,BPREF)
|
---|
291 | ;
|
---|
292 | ;Get Refill's dispense date
|
---|
293 | ;
|
---|
294 | REFDISDT(BPRX,BPREF) Q +$$RXSUBF1^BPSUTIL1(BPRX,52,52.1,+BPREF,10.1,"I")
|
---|
295 | ;
|
---|
296 | ;Get Refill's refill date
|
---|
297 | ;
|
---|
298 | REFFILDT(BPRX,BPREF) Q +$$RXSUBF1^BPSUTIL1(BPRX,52,52.1,+BPREF,.01,"I")
|
---|
299 | ;
|
---|
300 | ;Get RX's release date
|
---|
301 | ;
|
---|
302 | RXRELDT(BPRX) Q +$$RXAPI1^BPSUTIL1(BPRX,31,"I")
|
---|
303 | ;
|
---|
304 | ;Get Refill's release date
|
---|
305 | ;
|
---|
306 | REFRELDT(BPRX,BPREF) Q +$$RXSUBF1^BPSUTIL1(BPRX,52,52.1,+BPREF,17,"I")
|
---|
307 | ;
|
---|
308 | ;See if refill exists
|
---|
309 | ;
|
---|
310 | IFREFILL(BPRX,BPREF) Q $S(+$$RXSUBF1^BPSUTIL1(BPRX,52,52.1,+BPREF,.01,"I"):1,1:0)
|
---|
311 | ;
|
---|
312 | ;Get RX status
|
---|
313 | ;
|
---|
314 | ; Input Variables -> BP59 = ptr to BPS TRANSACTIONS
|
---|
315 | ;
|
---|
316 | RXSTATUS(BP59) Q $$RXST^BPSSCRU2(BP59)
|
---|
317 | ;
|
---|
318 | ;Return RX Quantity (From BPS TRANSACTION)
|
---|
319 | ;
|
---|
320 | QTY(BP59) Q +$P($G(^BPST(BP59,5)),U,1)
|
---|
321 | ;
|
---|
322 | ;Return NDC Number
|
---|
323 | GETNDC(BPRX,BPREF) Q $$GETNDC^PSONDCUT(BPRX,BPREF)
|
---|
324 | ;
|
---|
325 | ;Return Copay Status ($)
|
---|
326 | COPAY(BPRX) Q $S(+$$RXAPI1^BPSUTIL1(BPRX,105,"I"):"$",1:"")
|
---|