1 | BPSSCR03 ;BHAM ISC/SS - ECME USR SCREEN UTILITIES ;05-APR-05
|
---|
2 | ;;1.0;E CLAIMS MGMT ENGINE;**1,5**;JUN 2004;Build 45
|
---|
3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | Q
|
---|
5 | ;/**
|
---|
6 | ;BP59 - ptr to 9002313.59
|
---|
7 | ; BPARR to return formatted info via ref
|
---|
8 | ; BPMLEM - max len for each line
|
---|
9 | ; BPMODE - mode
|
---|
10 | ; R -regular for main screen, will show only latest comment
|
---|
11 | ; C - comment mode - show all comments
|
---|
12 | ADDINF(BP59,BPARR,BPMLEN,BPMODE) ;to return additional information about the claim*/
|
---|
13 | N BPX,BPN,BPTXT1,BPTXT2,BPTXT3,BPTXT4,BPX1,BPPRCNTG,BPN2,BPSTATUS
|
---|
14 | S BPN=0,(BPTXT1,BPTXT2,BPTXT3,BPTXT4,BPX1)=""
|
---|
15 | I BPMODE="R" D
|
---|
16 | . S BPX=$$COMMENT^BPSSCRU3(BP59)
|
---|
17 | . I $L(BPX)>0 S BPN=BPN+1,BPARR(BPN)=$P(BPX,U)
|
---|
18 | . I $P(BPX,U,2)]"" S BPN=BPN+1,BPARR(BPN)="("_$P(BPX,U,2)_")"
|
---|
19 | E D
|
---|
20 | . N BPCMNT,BPX1 S BPCMNT=99999999
|
---|
21 | . F S BPCMNT=$O(^BPST(BP59,11,BPCMNT),-1) Q:+BPCMNT=0 D
|
---|
22 | . . S BPX1=$G(^BPST(BP59,11,BPCMNT,0))
|
---|
23 | . . I BPX1="" Q
|
---|
24 | . . S BPX=$$DATTIM^BPSSCRU3($P(BPX1,U,1)\1)_" - "_$P(BPX1,U,3)
|
---|
25 | . . I $L(BPX)>0 S BPN=BPN+1,BPARR(BPN)=BPX
|
---|
26 | . . I +$P(BPX1,U,2)]"" D
|
---|
27 | . . . S BPX=$$USERNAM^BPSCMT01(+$P(BPX1,U,2))
|
---|
28 | . . . I BPX'="" S BPX="("_BPX_")",BPN=BPN+1,BPARR(BPN)=BPX
|
---|
29 | S BPX=$$CLAIMST^BPSSCRU3(BP59)
|
---|
30 | S BPSTATUS=$P(BPX,U)
|
---|
31 | S BPPRCNTG=$$LJ^BPSSCR02("("_$$PRCNTG^BPSSCRU3(BP59)_"%) ",6)
|
---|
32 | ;I BPX["AR" S BPARR(BPN)="Auto-Reversal",BPN=BPN+1
|
---|
33 | I BPSTATUS["E REVERSAL ACCEPTED" S BPTXT1=BPTXT1_"Reversal accepted "
|
---|
34 | I BPSTATUS["E REVERSAL REJECTED" S BPTXT1=BPTXT1_"Reversal rejected "
|
---|
35 | I BPSTATUS["E PAYABLE" S BPTXT1=BPTXT1_"Payable "
|
---|
36 | I BPSTATUS["E REJECTED" S BPTXT1=BPTXT1_"Rejected "
|
---|
37 | I BPSTATUS["E STRANDED" S BPTXT1=BPTXT1_"Stranded "
|
---|
38 | I BPSTATUS["E REVERSAL STRANDED" S BPTXT1=BPTXT1_"Stranded reversal"
|
---|
39 | I BPSTATUS["E CAPTURED" S BPTXT1=BPTXT1_"Captured "
|
---|
40 | I BPSTATUS["E DUPLICATE" S BPTXT1=BPTXT1_"Duplicate "
|
---|
41 | I BPSTATUS["E OTHER" S BPTXT1=BPTXT1_"Other "
|
---|
42 | I BPSTATUS["IN PROGRESS" S BPTXT1=BPTXT1_"In progress "
|
---|
43 | I BPSTATUS["CORRUPT" S BPTXT1=BPTXT1_"Corrupt "
|
---|
44 | I BPSTATUS["E REVERSAL OTHER" S BPTXT1=BPTXT1_"Reversal Other "
|
---|
45 | I BPTXT1="" S BPTXT1="Unknown status "
|
---|
46 | ;
|
---|
47 | I (BPSTATUS["E REJECTED")!(BPSTATUS["E REVERSAL REJECTED") D
|
---|
48 | . I $L(BPTXT1)>0 S BPN=BPN+1,BPARR(BPN)=BPTXT1
|
---|
49 | . S BPTXT1=""
|
---|
50 | . S BPN2=BPN
|
---|
51 | . D GETRJCOD^BPSSCRU3(BP59,.BPARR,.BPN,74,"")
|
---|
52 | . D WRAPLN2^BPSSCRU5(.BPN,.BPARR,$$GETMESS^BPSSCRU3(1000,504,BP59),74,"",0)
|
---|
53 | . D WRAPLN2^BPSSCRU5(.BPN,.BPARR,$$GETMESS^BPSSCRU3(1000,526,BP59),74,"",0)
|
---|
54 | . D WRAPLN2^BPSSCRU5(.BPN,.BPARR,$$GETMESS^BPSSCRU3(504,0,BP59),74,"",0)
|
---|
55 | . I BPN>BPN2 Q ;reject codes are enough
|
---|
56 | . ;S BPX1=$P($P(BPX,U,3),"[") I BPTXT1=BPX1 S BPX1=""
|
---|
57 | . S:BPX1="" BPX1=$$GETMESS^BPSSCRU3(504,0,BP59)
|
---|
58 | . I $L(BPX1)>0 S BPTXT1=BPTXT1_"- "_$TR(BPX1,"]","")
|
---|
59 | ;
|
---|
60 | I (BPSTATUS["E OTHER")!(BPSTATUS["IN PROGRESS")!(BPSTATUS["E STRANDED")!(BPSTATUS["E CAPTURED")!(BPSTATUS["E REVERSAL STRANDED") D
|
---|
61 | . I (BPSTATUS["E OTHER")!(BPSTATUS["IN PROGRESS") S BPX1=$P(BPX,U,3) I BPTXT1=BPX1 S BPX1=""
|
---|
62 | . S:BPX1="" BPX1=$$GETMESS^BPSSCRU3(504,0,BP59)
|
---|
63 | . I $L(BPX1)>0 S BPTXT1=BPTXT1_"- "_$TR(BPX1,"]","")
|
---|
64 | ;
|
---|
65 | S BPTXT2=$E(BPTXT1,1,BPMLEN)
|
---|
66 | S BPTXT3=$E(BPTXT1,BPMLEN+1,2*BPMLEN)
|
---|
67 | S BPTXT4=$E(BPTXT1,(2*BPMLEN)+1,3*BPMLEN)
|
---|
68 | I $L(BPTXT2)>0 S BPN=BPN+1,BPARR(BPN)=BPTXT2
|
---|
69 | I $L(BPTXT3)>0 S BPN=BPN+1,BPARR(BPN)=BPTXT3
|
---|
70 | I $L(BPTXT4)>0 S BPN=BPN+1,BPARR(BPN)=BPTXT4
|
---|
71 | Q BPN
|
---|
72 | ;
|
---|
73 | CLMINF(BP59) ;ptr to #9002313.59
|
---|
74 | W !,"Claim info. Press a key"
|
---|
75 | D PAUSE^VALM1
|
---|
76 | Q
|
---|
77 | ;
|
---|
78 | ;
|
---|
79 | COMM(BP59) ;ptr to #9002313.59
|
---|
80 | W !,"the latest comment. Press a key"
|
---|
81 | D PAUSE^VALM1
|
---|
82 | Q
|
---|
83 | ;
|
---|
84 | RESP(BP59) ;Payer Response Information
|
---|
85 | W !,"payer Response Information. Press a key"
|
---|
86 | D PAUSE^VALM1
|
---|
87 | Q
|
---|
88 | ;
|
---|
89 | ;/**
|
---|
90 | ;Checks if the CLAIM for specific Transaction is CLOSED?
|
---|
91 | ;BPCLAIM - ptr to #9002313.02
|
---|
92 | ;see also CLOSED^BPSSCRU1
|
---|
93 | CLOSED02(BPCLAIM) ;*/
|
---|
94 | ; get closed status
|
---|
95 | Q +$P($G(^BPSC(BPCLAIM,900)),U)=1 ;Q $$GET1^DIQ(9002313.02,CLAIM,901,"I")
|
---|
96 | ;
|
---|
97 | ;return:
|
---|
98 | ; 1 - okay. matches criteria
|
---|
99 | ; 0- not okay, doesn't match criteria
|
---|
100 | FILTER(BP59,BPARR) ;
|
---|
101 | N BPST0,BPST1,BPRXREF,BPRX52,BPREFNUM
|
---|
102 | N BPRET
|
---|
103 | S BPRET=1 ;1 - okay bt default
|
---|
104 | S BPST0=$G(^BPST(BP59,0))
|
---|
105 | S BPST1=$G(^BPST(BP59,1))
|
---|
106 | S BPRXREF=$$RXREF^BPSSCRU2(BP59)
|
---|
107 | S BPRX52=+$P(BPRXREF,U) ;ptr to #52
|
---|
108 | S BPREFNUM=$P(BPRXREF,U,2) ;refill #
|
---|
109 | ;if closed
|
---|
110 | I $$CLOSED02(+$P(BPST0,U,4)) Q 0
|
---|
111 | ;user
|
---|
112 | I $G(BPARR(1.01))="U",$$FLTUSR(BPST0,.BPARR)=0 Q 0
|
---|
113 | ;patient
|
---|
114 | I $G(BPARR(1.02))="P",$$FLTPAT(BPST0,.BPARR)=0 Q 0
|
---|
115 | ;RX
|
---|
116 | I $G(BPARR(1.03))="R",$$FLTRX(BPST1,.BPARR)=0 Q 0
|
---|
117 | ;only rejected
|
---|
118 | I $G(BPARR(1.06))="R",$$REJECTED^BPSSCR02(BP59)=0 Q 0
|
---|
119 | ;only payable
|
---|
120 | I $G(BPARR(1.06))="P",$$PAYABLE^BPSSCR02(BP59)=0 Q 0
|
---|
121 | ;released
|
---|
122 | I $G(BPARR(1.07))="R",$$RL^BPSSCRU2(BP59)'="RL" Q 0
|
---|
123 | ;non released
|
---|
124 | I $G(BPARR(1.07))="N",$$RL^BPSSCRU2(BP59)="RL" Q 0
|
---|
125 | ;window/cmop/mail
|
---|
126 | I $G(BPARR(1.08))'="A",$$ISMWC(BPRX52,BPREFNUM,$G(BPARR(1.08)))=0 Q 0
|
---|
127 | ;Back billing
|
---|
128 | I $G(BPARR(1.09))="B",$$RTBB^BPSSCRU2(BP59)'="BB" Q 0
|
---|
129 | ;real time
|
---|
130 | I $G(BPARR(1.09))="R",$$RTBB^BPSSCRU2(BP59)="BB" Q 0
|
---|
131 | ;if only rejected and only specific rejected codes should be displayed
|
---|
132 | I $G(BPARR(1.06))="R",$G(BPARR(1.1))="R",$$FLTREJ(BP59,.BPARR)=0 Q 0
|
---|
133 | ;insurance
|
---|
134 | I $G(BPARR(1.11))="I",$G(BPARR(1.14))'="",$P($$GETINSUR^BPSSCRU2(+BP59),U,2)'=$G(BPARR(1.14)) Q 0
|
---|
135 | ;divisions - ECME pharmacies
|
---|
136 | I $G(BPARR(1.13))="D",BPARR("DIVS")'[(";"_$P(BPST1,U,7)_";") Q 0
|
---|
137 | Q 1
|
---|
138 | ;
|
---|
139 | ;check user filter
|
---|
140 | ;input:
|
---|
141 | ;BPST0 - zero node of #9002313.59
|
---|
142 | ;BPARR array with user's preferences
|
---|
143 | ;returns :
|
---|
144 | ;1 -okay, leave in the list
|
---|
145 | ;0 -not okay, exclude from the list
|
---|
146 | FLTUSR(BPST0,BPARR) ;
|
---|
147 | I $L($G(BPARR(1.16)))=0 Q 0
|
---|
148 | I $P(BPST0,U,10)'=$G(BPARR(1.16)) Q 0
|
---|
149 | Q 1
|
---|
150 | ;check patient filter
|
---|
151 | ;input:
|
---|
152 | ;BPST0 - zero node of #9002313.59
|
---|
153 | ;BPARR array with user's preferences
|
---|
154 | ;returns :
|
---|
155 | ;1 -okay, leave in the list
|
---|
156 | ;0 -not okay, exclude from the list
|
---|
157 | FLTPAT(BPST0,BPARR) ;
|
---|
158 | I $L($G(BPARR(1.17)))=0 Q 0
|
---|
159 | I $P(BPST0,U,6)'=$G(BPARR(1.17)) Q 0
|
---|
160 | Q 1
|
---|
161 | ;check RX filter
|
---|
162 | ;input:
|
---|
163 | ;BPST1 - 1st node of #9002313.59
|
---|
164 | ;BPARR array with user's preferences
|
---|
165 | ;returns :
|
---|
166 | ;1 -okay, leave in the list
|
---|
167 | ;0 -not okay, exclude from the list
|
---|
168 | FLTRX(BPST1,BPARR) ;
|
---|
169 | I $L($G(BPARR(1.18)))=0 Q 0
|
---|
170 | I $P(BPST1,U,11)'=$G(BPARR(1.18)) Q 0
|
---|
171 | Q 1
|
---|
172 | ;input:
|
---|
173 | ;BP59 - zero node of #9002313.59
|
---|
174 | ;BPARR array with user's preferences
|
---|
175 | ;returns :
|
---|
176 | ;1 -okay, leave in the list
|
---|
177 | ;0 -not okay, exclude from the list
|
---|
178 | FLTREJ(BP59,BPARR) ;
|
---|
179 | N BPRCODES
|
---|
180 | N BPRJCD
|
---|
181 | S BPRJCD=$P($G(^BPSF(9002313.93,+$G(BPARR(1.15)),0)),U)
|
---|
182 | I $L(BPRJCD)=0 Q 0
|
---|
183 | D REJCODES^BPSSCRU3(BP59,.BPRCODES)
|
---|
184 | I $D(BPRCODES(BPRJCD)) Q 1
|
---|
185 | Q 0
|
---|
186 | ;check W(indow)/C(mop)/M(ail)
|
---|
187 | ;input:
|
---|
188 | ;BPRX52 - ptr to #52
|
---|
189 | ;BPREFNUM - refill #
|
---|
190 | ;BPMWC - given value from CMOP/MAIL/WINDOW instance 1.08 of BPS USRSCR parameters
|
---|
191 | ;returns :
|
---|
192 | ;1 -okay, leave in the list
|
---|
193 | ;0 -not okay, exclude from the list
|
---|
194 | ISMWC(BPRX52,BPREFNUM,BPMWC) ;
|
---|
195 | I $$MWCNAME^BPSSCRU2($$MWC^BPSSCRU2(BPRX52,BPREFNUM))=BPMWC Q 1
|
---|
196 | Q 0
|
---|
197 | ;
|
---|
198 | FILTRALL(BPTMP1,BPTMP2,BPARR) ;
|
---|
199 | N BP59
|
---|
200 | S BP59=0
|
---|
201 | F S BP59=+$O(@BPTMP1@(BP59)) Q:+BP59=0 D
|
---|
202 | . I $$FILTER(BP59,.BPARR) S @BPTMP2@(BP59)=""
|
---|
203 | Q
|
---|
204 | ;
|
---|
205 | ;go thru all FILE59 entries and run SETTRDFN for each of them
|
---|
206 | ;
|
---|
207 | TRDFNALL(BPTMP) ;
|
---|
208 | N BP59
|
---|
209 | S BP59=0
|
---|
210 | F S BP59=+$O(@BPTMP@("FILE59",BP59)) Q:+BP59=0 D
|
---|
211 | . D SETTRDFN(BPTMP,BP59)
|
---|
212 | Q
|
---|
213 | ;
|
---|
214 | ;sorting for "TRANSACTION DATE" type is
|
---|
215 | ;actually sorting by patients , but patient should be sorted not in alphabetical order:
|
---|
216 | ;the first patient is the one which has the most recent transaction and so on
|
---|
217 | ;BPTMP - TMP global
|
---|
218 | ;BP59 - ptr to #9002313.59
|
---|
219 | SETTRDFN(BPTMP,BP59) ;
|
---|
220 | ;the following stores the latest transaction date of the claims, which
|
---|
221 | ;was found for this particular combination of patient and insurance
|
---|
222 | ;@BPTMP@("DFN-TRDT",BPDFN,BPINSUR)=BPTRDT
|
---|
223 | ;the following stores the latest transaction date BPTRDT,patient BPDFN and
|
---|
224 | ;insurance BPINSUR to provide a proper order
|
---|
225 | ;@BPTMP@("TRDTDFN",BPTRDT,BPDFN,BPINSUR)=""
|
---|
226 | N BPZERO,BPTRDT,BPDFN,BPPREV,BPINSUR
|
---|
227 | S BPZERO=$G(^BPST(BP59,0)) ;
|
---|
228 | S BPTRDT=-$P(BPZERO,U,8) ;"transaction" date
|
---|
229 | S BPDFN=+$P(BPZERO,U,6) ;patient ptr to #2
|
---|
230 | S BPINSUR=+$$GETINSUR^BPSSCRU2(BP59) ;insurance ien
|
---|
231 | ;in the beginning we don't have any "DFN-TRDT" and "TRDTDFN"
|
---|
232 | ;so create them and quit
|
---|
233 | I '$D(@BPTMP@("DFN-TRDT",BPDFN,BPINSUR)) D Q
|
---|
234 | . S @BPTMP@("DFN-TRDT",BPDFN,BPINSUR)=BPTRDT
|
---|
235 | . S @BPTMP@("TRDTDFN",BPTRDT,BPDFN,BPINSUR)=""
|
---|
236 | ;if we already have them then get the latest into BPPREV
|
---|
237 | S BPPREV=+$G(@BPTMP@("DFN-TRDT",BPDFN,BPINSUR))
|
---|
238 | ;and compare it against the BPTRDT for this BP59
|
---|
239 | ;if the BPTRDT is greater then replace the values in "DFN-TRDT"
|
---|
240 | ;and "TRDTDFN"
|
---|
241 | I BPTRDT<BPPREV D
|
---|
242 | . S @BPTMP@("TRDTDFN",BPTRDT,BPDFN,BPINSUR)=""
|
---|
243 | . S @BPTMP@("DFN-TRDT",BPDFN,BPINSUR)=BPTRDT
|
---|
244 | . K @BPTMP@("TRDTDFN",BPPREV,BPDFN,BPINSUR)
|
---|
245 | Q
|
---|