1 | BPSSCRU2 ;BHAM ISC/SS - ECME SCREEN UTILITIES ;05-APR-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 | ;USER SCREEN
|
---|
5 | Q
|
---|
6 | ;/**
|
---|
7 | ;Input:
|
---|
8 | ; BP59 - pointer to file #9002313.59
|
---|
9 | ;Output:
|
---|
10 | ;get filling "location" like "WINDOW/LOCALMAIL/CMOP"
|
---|
11 | GETMWC(BP59) ;*/
|
---|
12 | N BP1 S BP1=$$RXREF(BP59)
|
---|
13 | Q:+BP1=0 ""
|
---|
14 | Q $$MWC($P(BP1,U),$P(BP1,U,2))
|
---|
15 | ;
|
---|
16 | ;initially this was designed to convert numbers to letters to display on the screen
|
---|
17 | ;but later the Pharmacy designed API that returns letters instead of numbers
|
---|
18 | ;so now this function just returns what it receives in its parameter, while it does not
|
---|
19 | ;make any sense, we still keep it in order to prevent changes in other four routines:
|
---|
20 | ; BPSREOP1, BPSSCR02, BPSSCR03, BPSSCR04
|
---|
21 | MWCNAME(BPMWC) ;
|
---|
22 | Q BPMWC
|
---|
23 | ;/**
|
---|
24 | ;Input:
|
---|
25 | ; BP59 - pointer to file #9002313.59
|
---|
26 | ;Output:
|
---|
27 | ;get RX pointer in file #52 and refill number in its multiple (0 - original refill)
|
---|
28 | RXREF(BP59) ;
|
---|
29 | N BPRX,BPREF
|
---|
30 | S BPRX=+$P($G(^BPST(BP59,1)),U,11) ;ptr to RX node in #52
|
---|
31 | S BPREF=+$P($G(^BPST(BP59,1)),U) ;ptr to refill multiple in #52
|
---|
32 | Q BPRX_U_BPREF
|
---|
33 | ; determines if the refill was MAIL/WINDOW/CMOP
|
---|
34 | MWC(BPRX,BPREF) ;MAIL/WINDOW/CMOP
|
---|
35 | ;input:
|
---|
36 | ; BPRX ptr to #52 (RX)
|
---|
37 | ; BPREF ptr to #52.1 (refills)
|
---|
38 | ;return value:
|
---|
39 | ; 2-MAIL/3-WINDOW/4-CMOP
|
---|
40 | Q $$MWC^PSOBPSU2(BPRX,BPREF)
|
---|
41 | ;
|
---|
42 | ;
|
---|
43 | ;/**
|
---|
44 | ;Input:
|
---|
45 | ; BP59 - pointer to file #9002313.59
|
---|
46 | ;Output:
|
---|
47 | ; insurance ien ^ name ^ phone
|
---|
48 | GETINSUR(BP59) ;get insurance info by the pointer of #9002313.59
|
---|
49 | N BPHONE,BPINSNM,BPINSID,BP57,BPINSN,BPX
|
---|
50 | S BPX=$$NAMEPHON^BPSSCRU3(BP59)
|
---|
51 | S BPINSNM=$P(BPX,U,1)
|
---|
52 | S BPHONE=$P(BPX,U,2)
|
---|
53 | ;Get a temporary ID for the insurance from ^TMP list of insurances.
|
---|
54 | ;If doesn't exist yet then create a new record in ^TMP list of insurances
|
---|
55 | ; for this insurance and return the ID for the record.
|
---|
56 | ;A lifetime for ^TMP list of insurances is the time period the user is using
|
---|
57 | ; the User Screen menu option
|
---|
58 | S BPINSID=$$CHKINSUR^BPSSCR(BPINSNM,BPHONE)
|
---|
59 | I $L(BPHONE)=0 S BPHONE=" "
|
---|
60 | I $L(BPINSNM)=0 S BPINSNM="?NODATA?"
|
---|
61 | Q BPINSID_U_BPINSNM_U_BPHONE
|
---|
62 | ;
|
---|
63 | ;/**
|
---|
64 | ;Input:
|
---|
65 | ; BP59 - pointer to file #9002313.59
|
---|
66 | ;Output:
|
---|
67 | ;transaction date
|
---|
68 | TRANDT(BP59) ;
|
---|
69 | Q $P($G(^BPST(BP59,0)),U,8)\1
|
---|
70 | ;
|
---|
71 | ;/**
|
---|
72 | ;Input:
|
---|
73 | ; BP59 - pointer to file #9002313.59
|
---|
74 | ;Output:
|
---|
75 | ;ECME pharmacy division (9002313.56)
|
---|
76 | DIVIS(BP59) ;
|
---|
77 | Q $P($G(^BPST(BP59,1)),U,7)
|
---|
78 | ;
|
---|
79 | ;/**
|
---|
80 | ;Input:
|
---|
81 | ; BP59 - pointer to file #9002313.59
|
---|
82 | ;Output:
|
---|
83 | ;patient's DFN (file #2)
|
---|
84 | GETPATID(BP59) ;
|
---|
85 | Q $P($G(^BPST(BP59,0)),U,6)
|
---|
86 | ;
|
---|
87 | ;return RX status as ACT/DIS/etc
|
---|
88 | RXST(BP59) ;
|
---|
89 | N BPRXREF
|
---|
90 | S BPRXREF=$$RXREF^BPSSCRU2(BP59)
|
---|
91 | ;display status ONLY if the refill is the most recent
|
---|
92 | ;otherwise display blanks (three spaces for sorting purposes)
|
---|
93 | I +$P(BPRXREF,U,2)'=(+$$LSTRFL^PSOBPSU1(+$P(BPRXREF,U,1))) Q "***"
|
---|
94 | Q $$RXSTANAM($$RXSTATUS(+$P(BPRXREF,U,1)))
|
---|
95 | ;/**
|
---|
96 | ;RX status
|
---|
97 | ;Input
|
---|
98 | ; RXNUM:
|
---|
99 | ; ien of file #52 (if MODE=0)
|
---|
100 | ; or RX number (if MODE=1)
|
---|
101 | ;----------
|
---|
102 | ;Output:
|
---|
103 | ; 0 if not found
|
---|
104 | ; status set#
|
---|
105 | RXSTATUS(RXNUM) ;*/
|
---|
106 | N BPRET
|
---|
107 | S BPRET=$$RXAPI1^BPSUTIL1(RXNUM,100,"I")
|
---|
108 | I BPRET="" Q -1
|
---|
109 | Q BPRET
|
---|
110 | ;/**
|
---|
111 | ;if RX "valid"
|
---|
112 | RXACTIVE(BPRXSTAT) ;*/
|
---|
113 | ; 0 not valid
|
---|
114 | ; 1 valid (i.e. ACTIVE/NON-VERIFIED/REFILL/HOLD/DRUG INTERACTIONS/SUSPENDED)
|
---|
115 | ; -1 doesn't exist
|
---|
116 | Q:BPRXSTAT<6 1 ;active
|
---|
117 | ;/**
|
---|
118 | ;RX status text
|
---|
119 | RXSTANAM(BPRXSTAT) ;*/
|
---|
120 | Q:BPRXSTAT=0 "ACT" ; ACTIVE;
|
---|
121 | Q:BPRXSTAT=1 "NVER" ; NON-VERIFIED;
|
---|
122 | Q:BPRXSTAT=3 "HLD" ; HOLD;
|
---|
123 | Q:BPRXSTAT=5 "SUS" ; SUSPENDED;
|
---|
124 | Q:BPRXSTAT=11 "EXP" ; EXPIRED;
|
---|
125 | Q:BPRXSTAT=12 "DIS" ; DISCONTINUED;
|
---|
126 | Q:BPRXSTAT=13 "DEL" ; DELETED;
|
---|
127 | Q:BPRXSTAT=14 "DIS" ; DISCONTINUED BY PROVIDER;
|
---|
128 | Q:BPRXSTAT=15 "DIS" ; DISCONTINUED (EDIT);
|
---|
129 | Q:BPRXSTAT=16 "HLD" ; PROVIDER HOLD;
|
---|
130 | Q:BPRXSTAT=-1 "???"
|
---|
131 | Q ""
|
---|
132 | ;/**
|
---|
133 | ;Input:
|
---|
134 | ; BP59 - pointer to file #9002313.59
|
---|
135 | ;Output:
|
---|
136 | ;returns:
|
---|
137 | ;>0 Released
|
---|
138 | ;0 non released
|
---|
139 | ;-1 error
|
---|
140 | ISRXREL(BP59) ;
|
---|
141 | N BP1
|
---|
142 | S BP1=$$REFILINF(BP59)
|
---|
143 | Q:BP1<0 -1
|
---|
144 | Q $P(BP1,U,2) ; i.e. it is non-released if there is no any release date
|
---|
145 | ;
|
---|
146 | ;release status
|
---|
147 | RL(BP59) ;
|
---|
148 | Q $S($$ISRXREL(BP59)>0:"RL",1:"NR")
|
---|
149 | ;/**
|
---|
150 | ;get refill (including original refill) info by BP59
|
---|
151 | ;Input:
|
---|
152 | ; BP59 - pointer to file #9002313.59
|
---|
153 | ;Output:
|
---|
154 | ;returns:
|
---|
155 | ;on error : "-1"
|
---|
156 | ;on success : refill# ^ release date ^label print date ^ fill date ^ issue date
|
---|
157 | REFILINF(BP59) ;*/
|
---|
158 | N BP1 S BP1=$$RXREF(BP59)
|
---|
159 | N BPRX S BPRX=$P(BP1,U,1) ;ptr to #52
|
---|
160 | N BPREF S BPREF=$P(BP1,U,2) ;ptr in its refill multiple
|
---|
161 | I BPREF,$$IFREFILL(BPRX,BPREF)=0 Q -1 ;if bad data
|
---|
162 | ;original refill
|
---|
163 | I BPREF=0 Q "0"_U_$$RXRELDT(BPRX)_U_U_$$RXFILDT(BPRX)_U_$$RXISSDT(BPRX)
|
---|
164 | ;refill's release date
|
---|
165 | I BPREF>0 Q BPREF_U_$$REFRELDT(BPRX,BPREF)_U_U_$$REFFILDT(BPRX,BPREF)_U_$$REFISSDT(BPRX,BPREF)
|
---|
166 | Q -1
|
---|
167 | ;
|
---|
168 | ;-Prescriptions-----------------------
|
---|
169 | ;RX issue date
|
---|
170 | RXISSDT(BPRX) ;
|
---|
171 | Q +$$RXAPI1^BPSUTIL1(BPRX,1,"I")
|
---|
172 | ;
|
---|
173 | ;RX's release date
|
---|
174 | RXRELDT(BPRX) ;
|
---|
175 | Q +$$RXAPI1^BPSUTIL1(BPRX,31,"I")
|
---|
176 | ;
|
---|
177 | ;RX's fill date
|
---|
178 | RXFILDT(BPRX) ;
|
---|
179 | Q +$$RXAPI1^BPSUTIL1(BPRX,22,"I")
|
---|
180 | ;
|
---|
181 | ;refill's release date
|
---|
182 | REFRELDT(BPRX,BPREF) ;
|
---|
183 | Q +$$RXSUBF1^BPSUTIL1(BPRX,52,52.1,BPREF,17,"I")
|
---|
184 | ;
|
---|
185 | ;refill's refill date
|
---|
186 | REFFILDT(BPRX,BPREF) ;
|
---|
187 | Q $$RXSUBF1^BPSUTIL1(BPRX,52,52.1,BPREF,.01,"I")
|
---|
188 | ;
|
---|
189 | ;refill's issue date
|
---|
190 | REFISSDT(BPRX,BPREF) ;
|
---|
191 | Q $$REFDISDT(BPRX,BPREF)
|
---|
192 | ;
|
---|
193 | ;refill's dispense date
|
---|
194 | REFDISDT(BPRX,BPREF) ;
|
---|
195 | Q $$RXSUBF1^BPSUTIL1(BPRX,52,52.1,BPREF,10.1,"I")
|
---|
196 | ;
|
---|
197 | ;if refill exists
|
---|
198 | IFREFILL(BPRX,BPREF) ;
|
---|
199 | Q $$RXSUBF1^BPSUTIL1(BPRX,52,52.1,BPREF,.01,"I")'=""
|
---|
200 | ;/**
|
---|
201 | ;input
|
---|
202 | ;ptr to 9002313.59
|
---|
203 | ;output :
|
---|
204 | ; BB - back billing
|
---|
205 | ; RT - all other values in (#1201) RX ACTION field on 9002313.59
|
---|
206 | RTBB(BP59) ;*/
|
---|
207 | N BPTRBB
|
---|
208 | S BPTRBB=$P($G(^BPST(BP59,12)),U)
|
---|
209 | I BPTRBB="" Q "**"
|
---|
210 | I BPTRBB="BB" Q "BB"
|
---|
211 | Q "RT"
|
---|
212 | ;
|
---|
213 | ;------------ patient's name
|
---|
214 | PATNAME(BPDFN) ;
|
---|
215 | Q $E($P($G(^DPT(BPDFN,0)),U),1,15)
|
---|
216 | ;
|
---|
217 | SSN4(DFN) ;last 4 SSN
|
---|
218 | N X
|
---|
219 | S X=$P($G(^DPT(DFN,0)),U,9)
|
---|
220 | Q "("_$E(X,$L(X)-3,$L(X))_")"
|
---|
221 | ;
|
---|
222 | ;get drug generic name
|
---|
223 | DRGNAM(BP50) ;
|
---|
224 | ;BP50 - ptr to #50
|
---|
225 | Q $E($$DRUGDIE^BPSUTIL1(BP50,.01,"E"),1,35)
|
---|
226 | ;get drug
|
---|
227 | GETDRUG(BP52) ;
|
---|
228 | ;return value:
|
---|
229 | ; 0 - unknown
|
---|
230 | ; n - ptr to DRUG file #50
|
---|
231 | Q +$$RXAPI1^BPSUTIL1(BP52,6,"I")
|
---|
232 | ;
|
---|
233 | GETDRG59(BP59) ;
|
---|
234 | N BPX
|
---|
235 | S BPX=$$RXREF(BP59)
|
---|
236 | Q $$GETDRUG(+BPX)
|
---|
237 | ;
|
---|
238 | ;
|
---|
239 | ;review %% for each of claims in the array
|
---|
240 | ;and calculate "overall" "done" status
|
---|
241 | ;input:
|
---|
242 | ; BPARR59 - array of ptr to #9002313.59
|
---|
243 | ;output:
|
---|
244 | ; status
|
---|
245 | FINISHST(BPARR59) ;
|
---|
246 | N BPFIN,BP59
|
---|
247 | S BPFIN=1,BP59=0
|
---|
248 | F S BP59=$O(BPARR59(BP59)) Q:+BP59=0 D Q:BPFIN=0
|
---|
249 | . I $$PRCNTG^BPSSCRU3(BP59)<99 S BPFIN=0
|
---|
250 | I BPFIN=1 Q "**FINISHED**"
|
---|
251 | Q ""
|
---|
252 | ;
|
---|
253 | ;/**
|
---|
254 | ;BP59 - ptr to 9002313.59
|
---|
255 | ;output :
|
---|
256 | ;ECME number
|
---|
257 | ; 7 digits of the prescription IEN file 52
|
---|
258 | ;or 7 spaces
|
---|
259 | ECMENUM(BP59) ;*/
|
---|
260 | N X
|
---|
261 | S X=$P($G(^BPST(BP59,0)),"^")
|
---|
262 | I X="" Q $$FORMAT(X,7," ",1)
|
---|
263 | Q $$FORMAT(X\1,7,"0",1)
|
---|
264 | ;
|
---|
265 | ;BPRX - ptr to #52
|
---|
266 | RXNUM(BPRX) ;
|
---|
267 | Q $$RXAPI1^BPSUTIL1(BPRX,.01,"E")_$S(+$$RXAPI1^BPSUTIL1(BPRX,105,"I"):"$",1:"")
|
---|
268 | ;
|
---|
269 | ;/**
|
---|
270 | ;get NDC
|
---|
271 | ;input
|
---|
272 | ;BPRX - ptr to #52
|
---|
273 | ;BPREF - refill # (0,1,2,3...)
|
---|
274 | NDC(BPRX,BPREF) ;*/
|
---|
275 | Q $$GETNDC^PSONDCUT(BPRX,BPREF)
|
---|
276 | ;
|
---|
277 | DRGNAME(BP59) ;drug name BP59 -ptr to .59 file
|
---|
278 | N BPRX
|
---|
279 | S BPRX=+$P($G(^BPST(BP59,1)),U,11) ;ptr to RX node in #52
|
---|
280 | Q $E($$DRGNAM($$GETDRUG(BPRX)),1,23)
|
---|
281 | ;
|
---|
282 | ;is the number even?
|
---|
283 | ;1-yes
|
---|
284 | ;0 -no
|
---|
285 | ISEVEN(BPNUM) ;
|
---|
286 | Q ((BPNUM/2)-(BPNUM\2))=0
|
---|
287 | ;
|
---|
288 | ;BPSTR - string to format
|
---|
289 | ;BPSMLEN - max lenght
|
---|
290 | ;BPSCHR - char to add
|
---|
291 | ;BPSLFT - 1 - add from the left, 0 - from the right
|
---|
292 | FORMAT(BPSTR,BPSMLEN,BPSCHR,BPSLFT) ;
|
---|
293 | N LN S LN=$L(BPSTR)
|
---|
294 | N ZZ S ZZ=""
|
---|
295 | I LN=BPSMLEN Q BPSTR
|
---|
296 | I LN>BPSMLEN Q:BPSLFT $E(BPSTR,LN-BPSMLEN+1,9999) Q $E(BPSTR,1,BPSMLEN)
|
---|
297 | S $P(ZZ,BPSCHR,BPSMLEN-LN+1)=""
|
---|
298 | Q:BPSLFT ZZ_BPSTR
|
---|
299 | Q BPSTR_ZZ
|
---|
300 | ;
|
---|