1 | BPSSCRCL ;BHAM ISC/SS - ECME SCREEN CLOSE CLAIMS ;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 | Q
|
---|
5 | ;
|
---|
6 | CLO ;entry point to close claims
|
---|
7 | N BPRET,BPSARR59
|
---|
8 | I '$D(@(VALMAR)) Q
|
---|
9 | D FULL^VALM1
|
---|
10 | W !,"Enter the line numbers for the claim(s) to be closed."
|
---|
11 | S BPRET=$$ASKLINES^BPSSCRU4("Select item(s)","C",.BPSARR59,VALMAR)
|
---|
12 | I BPRET="^" S VALMBCK="R" Q
|
---|
13 | ;close claims
|
---|
14 | ;update the content of the screen
|
---|
15 | ;only if at least one claim was closed
|
---|
16 | I $$CLOSE(.BPSARR59) D REDRAW^BPSSCRUD("Updating screen for closed claims...")
|
---|
17 | E S VALMBCK="R"
|
---|
18 | Q
|
---|
19 | ;
|
---|
20 | ;close claims
|
---|
21 | ;input:
|
---|
22 | ; BP59ARR - array with ptrs to BPS TRANSACTION FILE
|
---|
23 | ; BP59ARR(ien59)="ien in TMP ^ number on the user screen"
|
---|
24 | ;returns:
|
---|
25 | ; BPCLTOT - number of closed claims
|
---|
26 | CLOSE(BP59ARR) ;
|
---|
27 | N BPNEWARR,BPRETV,BPREJFLG,X
|
---|
28 | N BPDFN,BP59,BPIFANY,BPQ
|
---|
29 | N BPREAS,BPCOMM,BP90ANSW,BPRCOPAY,BPRXINFO,BPCOP,BPCLTOT,BPINS,BPINSNM,BP59FRST
|
---|
30 | S BPRETV=$$MKNEWARR(.BP59ARR,.BPNEWARR,.BPINS)
|
---|
31 | S BPQ="",BPIFANY=0,BPREJFLG=1
|
---|
32 | S BPDFN=""
|
---|
33 | F S BPDFN=$O(BPNEWARR(BPDFN)) Q:BPDFN="" D Q:BPQ="^"
|
---|
34 | . W !!,"You've chosen to close the following prescription(s) for",!,$E($$PATNAME^BPSSCRU2(BPDFN),1,13)_" :"
|
---|
35 | . S BP59="" F S BP59=$O(BPNEWARR(BPDFN,BP59)) Q:BP59="" D Q:BPQ="^"
|
---|
36 | . . I $Y>20 D PAUSE^VALM1 W @IOF I X="^" S BPQ="^" Q
|
---|
37 | . . S BPIFANY=1,BPQ=""
|
---|
38 | . . ;I $P($G(BPNEWARR(BPDFN,BP59)),U,3)=1 W:BPREJFLG=0 ! S BPREJFLG=1
|
---|
39 | . . ;E W:BPREJFLG=1 ! S BPREJFLG=0
|
---|
40 | . . S BPREJFLG=+$P($G(BPNEWARR(BPDFN,BP59)),U,3)
|
---|
41 | . . W !,@VALMAR@(+$G(BPNEWARR(BPDFN,BP59)),0)
|
---|
42 | . . D DISPREJ^BPSSCRU6(BP59)
|
---|
43 | . . W:BPREJFLG=0 !,"Claim NOT Rejected and cannot be Closed."
|
---|
44 | I +BPRETV=0 Q $$QUITCL()
|
---|
45 | I BPQ="^" Q $$QUITCL()
|
---|
46 | ;
|
---|
47 | W !!,"ALL Selected Rxs will be CLOSED using the same information gathered in the following prompts.",!
|
---|
48 | S BPQ=$$YESNO^BPSSCRRS("Are you sure?(Y/N)")
|
---|
49 | I BPQ'=1 Q $$QUITCL()
|
---|
50 | ;
|
---|
51 | ; ask questions for all of them
|
---|
52 | W !!
|
---|
53 | I $$ASKQUEST(+$P(BPRETV,U,2),.BPREAS,.BPCOMM,.BP90ANSW,.BPRCOPAY)'=1 Q $$QUITCL()
|
---|
54 | ;
|
---|
55 | ; check 2nd insurance
|
---|
56 | S BPQ=""
|
---|
57 | I BP90ANSW'="D" D
|
---|
58 | . S BPDFN="" F S BPDFN=$O(BPINS(BPDFN)) Q:BPDFN="" D Q:BPQ="^"
|
---|
59 | . . S BPINSNM="" F S BPINSNM=$O(BPINS(BPDFN,BPINSNM)) Q:BPINSNM="" D Q:BPQ="^"
|
---|
60 | . . . S BP59FRST=0
|
---|
61 | . . . S BP59=""
|
---|
62 | . . . K BPRXINFO
|
---|
63 | . . . F S BP59=$O(BPINS(BPDFN,BPINSNM,BP59)) Q:BP59="" D Q:BPQ="^"
|
---|
64 | . . . . S:BP59FRST=0 BP59FRST=BP59
|
---|
65 | . . . . S BPRXINFO(BP59)=$E($G(@VALMAR@(+$G(BP59ARR(BP59)),0)),7,99)
|
---|
66 | . . . ; call CH2NDINS^BPSSCRU5 only once for all claims for this patient and insurance
|
---|
67 | . . . ; you can use one BP59FRST for the group of claims here as a parameter since
|
---|
68 | . . . ; they all are all identical from the "patient-insurance pair" point of view
|
---|
69 | . . . D:BP59FRST>0 CH2NDINS^BPSSCRU5(BP59FRST,$E($$PATNAME^BPSSCRU2(BPDFN),1,13),BPINSNM,.BPRXINFO)
|
---|
70 | ;
|
---|
71 | I BPQ="^" Q $$QUITCL()
|
---|
72 | ;
|
---|
73 | W @IOF
|
---|
74 | ;and finally close all
|
---|
75 | S BPCLTOT=0
|
---|
76 | S BPDFN="" F S BPDFN=$O(BPNEWARR(BPDFN)) Q:BPDFN="" D
|
---|
77 | . S BP59="" F S BP59=$O(BPNEWARR(BPDFN,BP59)) Q:BP59="" D
|
---|
78 | . . I $P($G(BPNEWARR(BPDFN,BP59)),U,3)=0 Q ;can't be closed
|
---|
79 | . . S BPCOP=0
|
---|
80 | . . I +BPRCOPAY=1,$P($G(BPNEWARR(BPDFN,BP59)),U,4)=1 S BPCOP=1 ;release copay
|
---|
81 | . . I $$CLOSEIT(BP59,$P(BPREAS,U,2),BPCOMM,BP90ANSW,BPCOP)>0 D
|
---|
82 | . . . S BPCLTOT=BPCLTOT+1
|
---|
83 | ;
|
---|
84 | W !,BPCLTOT," claim",$S(BPCLTOT'=1:"s have",1:" has")," been closed.",!
|
---|
85 | D PAUSE^VALM1
|
---|
86 | Q BPCLTOT
|
---|
87 | ;
|
---|
88 | QUITCL() ;
|
---|
89 | W !!,"0 claims have been closed."
|
---|
90 | D PAUSE^VALM1
|
---|
91 | Q 0
|
---|
92 | ;/**
|
---|
93 | ;Ask all necessary questions
|
---|
94 | ;Input
|
---|
95 | ; BPRELCOP - ask release copay question
|
---|
96 | ; .BPREAZ - ptr to #356.8 ^ CLOSE REASON NAME ^ ECME FLAG ^ ECME PAPER FLAG
|
---|
97 | ; .BPCOMZ - close comment (string)
|
---|
98 | ; .BP90ANSZ - "", "D"(drop to paper) or "N" (non-billable)
|
---|
99 | ; .BPRCOPAZ - 1(Yes) or 0(No) , answer to "release copay" question
|
---|
100 | ;Output:
|
---|
101 | ; 0 - cancel process
|
---|
102 | ; ^ - emergency quit (cancel process)
|
---|
103 | ; 1 - ok, can proceed
|
---|
104 | ASKQUEST(BPRELCOP,BPREAZ,BPCOMZ,BP90ANSZ,BPRCOPAZ) ;*/
|
---|
105 | S BPCOMZ=""
|
---|
106 | S BP90ANSZ=""
|
---|
107 | S BPRCOPAZ=0
|
---|
108 | ;ask the user to choose the close reason from #356.8
|
---|
109 | ;using set of close reasons in IB file 356.8
|
---|
110 | S BPREAZ=$$REASON()
|
---|
111 | I BPREAZ="^" Q "^"
|
---|
112 | I ($P(BPREAZ,U,4)=1) D ;if has ECME PAPER FLAG
|
---|
113 | . ;ask if the claim is still billable thru paper?
|
---|
114 | . S BP90ANSZ=$$PROMPT^BPSSCRCV("S^N:NON-BILLABLE;D:DROP TO PAPER","Treat as (N)on-Billable Episode or (D)rop Bill to Paper?","")
|
---|
115 | I BP90ANSZ=-1 Q "^"
|
---|
116 | S BPCOMZ=$$COMMENT("Comment ",40)
|
---|
117 | I (BPCOMZ="^") Q "^"
|
---|
118 | I $L(BPCOMZ)>0,BPCOMZ?1" "." " S BPCOMZ=""
|
---|
119 | ;check copay
|
---|
120 | ;ask "release copay?" in all NON-BILLABLE cases, i.e. except user answered "DROP TO PAPER"
|
---|
121 | ;(even in cases when he was not asked about it)
|
---|
122 | I BP90ANSZ'="D",BPRELCOP D
|
---|
123 | . ; Ask user if s/he wants to release a copay
|
---|
124 | . S BPRCOPAZ=$$YESNO^BPSSCRRS("Release Patient CoPay(Y/N)")
|
---|
125 | I BPRCOPAZ=-1 Q "^"
|
---|
126 | ;
|
---|
127 | S BPQ=$$YESNO^BPSSCRRS("Are you sure?(Y/N)")
|
---|
128 | I BPQ=-1 Q "^" ;quit by "^"
|
---|
129 | I BPQ'=1 Q 0 ;doesn't want to proceed
|
---|
130 | Q 1 ; answers can be used
|
---|
131 | ;
|
---|
132 | ;/**
|
---|
133 | ;ask for the close reason
|
---|
134 | ;return:
|
---|
135 | ; ptr to #356.8 ^ CLOSE REASON NAME ^ ECME FLAG ^ ECME PAPER FLAG
|
---|
136 | REASON() ;
|
---|
137 | N DIC,BPREASNM,BP3568,Y
|
---|
138 | ; - Asks for REASON for Closing
|
---|
139 | S DIC="^IBE(356.8,",DIC(0)="AEQMZ"
|
---|
140 | S DIC("S")="I $P(^(0),U,2)=1"
|
---|
141 | D ^DIC
|
---|
142 | I Y=-1 Q "^"
|
---|
143 | Q +Y_U_Y(0)
|
---|
144 | ;/**
|
---|
145 | ;enter the comment
|
---|
146 | ;BPSTR -prompt string
|
---|
147 | ;BPMLEN -maxlen
|
---|
148 | COMMENT(BPSTR,BPMLEN) ;*/
|
---|
149 | N DIR,DTOUT,DUOUT,BPQ
|
---|
150 | I '$D(BPSTR) S BPSTR="Comment "
|
---|
151 | I '$D(BPMLEN) S BPMLEN=40
|
---|
152 | S DIR(0)="FO^0:250"
|
---|
153 | S DIR("A")=BPSTR
|
---|
154 | S DIR("?",1)="This response must have at least 0 characters and no more"
|
---|
155 | S DIR("?")="than "_BPMLEN_" characters and must not contain embedded uparrow"
|
---|
156 | S BPQ=0
|
---|
157 | F D Q:+BPQ'=0
|
---|
158 | . D ^DIR
|
---|
159 | . I $D(DUOUT)!($D(DTOUT)) S BPQ=-1 Q
|
---|
160 | . I $L(Y)'>BPMLEN S BPQ=1 Q
|
---|
161 | . W !!,"This response must have at least 0 characters and no more"
|
---|
162 | . W !,"than "_BPMLEN_" characters and must not contain embedded uparrow.",!
|
---|
163 | . S DIR("B")=$E(Y,1,BPMLEN)
|
---|
164 | Q:BPQ<0 "^"
|
---|
165 | Q Y
|
---|
166 | ;/**
|
---|
167 | ;close the claim
|
---|
168 | ;the approach and code partially borrowed from IHS code CLOSE^BPSOS6N
|
---|
169 | ;BPSTRA - ptr to #9002313.59
|
---|
170 | ;REASON - text name of the close reason
|
---|
171 | ;BPSCLCM - comment
|
---|
172 | ;BPDROP:
|
---|
173 | ; "D" - DROP BILL TO PAPER
|
---|
174 | ; "N" - NON-BILLABLE
|
---|
175 | ;BPRELCOP - 1 (Yes) or 0 (No) release copay or not?
|
---|
176 | CLOSEIT(BPSTRA,REASON,BPSCLCM,BPDROP,BPRELCOP) ;
|
---|
177 | N BPSCLA,ERROR,DA,DR,BPLCK,DIE
|
---|
178 | S BPSCLA=$$GET1^DIQ(9002313.59,BPSTRA,3,"I")
|
---|
179 | W !,"Closing Claim ",$$GET1^DIQ(9002313.02,BPSCLA,.01),"..."
|
---|
180 | S BPLCK=0
|
---|
181 | L +^BPSC(BPSCLA):0
|
---|
182 | I $T S BPLCK=1
|
---|
183 | E W !," *** CLAIM ",$$GET1^DIQ(9002313.02,BPSCLA,.01)," IN USE ***" Q 0
|
---|
184 | D CLOSE^BPSBUTL(BPSCLA,BPSTRA,REASON,$S($G(BPDROP)="D":1,1:0),BPRELCOP,BPSCLCM,.ERROR)
|
---|
185 | I $D(ERROR) W "NOT OK" D DSPERR(ERROR) D Q 0
|
---|
186 | . I BPLCK=1 L -^BPSC(BPSCLA)
|
---|
187 | S DIE="^BPSC(",DA=BPSCLA,DR="901///1;902///"_$$NOW^XLFDT()_";903///"_$G(DUZ)_";904///"_REASON_";905////"_BPDROP D ^DIE
|
---|
188 | I BPLCK=1 L -^BPSC(BPSCLA)
|
---|
189 | H 1 W "OK"
|
---|
190 | Q 1
|
---|
191 | ;
|
---|
192 | DSPERR(MSG) ; Display the ERROR message
|
---|
193 | W !,"Error: *** ",MSG," ***"
|
---|
194 | Q
|
---|
195 | ;
|
---|
196 | ;/**
|
---|
197 | ;ECME has tried to submit the claim to insurance with the name BPINSNAM
|
---|
198 | ;but the claim was rejected and now we need to determine if the patient
|
---|
199 | ;has any other insurance with pharmacy coverage that can be billed for the RX
|
---|
200 | ;Input:
|
---|
201 | ; BP59 - pointer to file #9002313.59
|
---|
202 | ; BPINSNAM - insurance that have already been used by ECME
|
---|
203 | ;Output:
|
---|
204 | ; 0 - not found
|
---|
205 | ; 1 ^ Insurance Name ^ Group Number ^ Date of service
|
---|
206 | NEXTINS(BP59,BPINSNAM) ;get insurance info by the pointer of #9002313.59
|
---|
207 | N BPDOS,BPDFN,BPZZ,BP36,BPX,BPHONE,BPY,BPINSNM
|
---|
208 | N BPPHARM,BPCOORD,BPINS,BPFOUND
|
---|
209 | S BPY=0
|
---|
210 | S BPHONE=$P($G(^BPST(BP59,10,+$G(^BPST(BP59,9)),3)),U,2)
|
---|
211 | S BPDOS=+$P($G(^BPST(BP59,12)),U,2)\1
|
---|
212 | I BPDOS=0 S BPDOS=+$P($G(^BPST(BP59,0)),U,8)\1
|
---|
213 | S BPDFN=+$P($G(^BPST(BP59,0)),U,6)
|
---|
214 | ; call INSUR^IBBAPI to get information about:
|
---|
215 | ;1 = Insurance Company Name
|
---|
216 | ;7 = Coordination of Benefits (primary, secondary, tertiary)
|
---|
217 | ;15 = Pharmacy Coverage?
|
---|
218 | ;18 = Group Number
|
---|
219 | S BPX=$$INSUR^IBBAPI(BPDFN,BPDOS,,.BPZZ,"1,7,15,18")
|
---|
220 | S BP1="" F S BP1=$O(BPZZ("IBBAPI","INSUR",BP1)) Q:+BP1=0 D
|
---|
221 | . ;get pharmacy coverage
|
---|
222 | . S BPPHARM=+$G(BPZZ("IBBAPI","INSUR",BP1,15))
|
---|
223 | I BPX<1 Q 0
|
---|
224 | D PROCINS(.BPZZ)
|
---|
225 | ;check pharmacy coverage
|
---|
226 | S BPFOUND=0 ;if found will be set to insurance node in the INSUR^IBBAPI array
|
---|
227 | S BPPHARM=1 ;look only at those with pharmacy coverage
|
---|
228 | S BPCOORD=0
|
---|
229 | F S BPCOORD=+$O(BPZZ("RES",BPPHARM,BPCOORD)) Q:BPCOORD=0!(BPFOUND'=0) D
|
---|
230 | . S BPINS=+$O(BPZZ("RES",BPPHARM,BPCOORD,0))
|
---|
231 | . I BPINS>0 I $P($G(BPZZ("IBBAPI","INSUR",BPINS,1)),U,2)'=BPINSNAM S BPFOUND=BPINS
|
---|
232 | I BPFOUND=0 Q 0
|
---|
233 | Q 1_U_$P($G(BPZZ("IBBAPI","INSUR",BPFOUND,1)),U,2)_U_$P($G(BPZZ("IBBAPI","INSUR",BPFOUND,18)),U)_U_BPDOS
|
---|
234 | ;
|
---|
235 | ;process insurances
|
---|
236 | ;input: local array returned by INSUR^IBBAPI
|
---|
237 | ;output: BPZZ("RES",pharmacy coverage,coordination,insurance element # in BPZZ array)
|
---|
238 | PROCINS(BPZZ) ;
|
---|
239 | N BP1,BP2,BP0,BPPHONE,BPPHARM,BPCOORD
|
---|
240 | S BP1="" F S BP1=$O(BPZZ("IBBAPI","INSUR",BP1)) Q:+BP1=0 D
|
---|
241 | . ;get pharmacy coverage
|
---|
242 | . S BPPHARM=+$G(BPZZ("IBBAPI","INSUR",BP1,15))
|
---|
243 | . ;get coordination of benefits
|
---|
244 | . S BPCOORD=+$G(BPZZ("IBBAPI","INSUR",BP1,7))
|
---|
245 | . ;create ^TMP to sort results by pharmacy coverage and coordination of benefits
|
---|
246 | . S BPZZ("RES",BPPHARM,BPCOORD,BP1)=""
|
---|
247 | Q
|
---|
248 | ;
|
---|
249 | ;------------
|
---|
250 | MKNEWARR(BPARR,BPNEWARR,BPINSARR) ;
|
---|
251 | N BP59,BPREJ,BPREJCNT,BPRELCNT,BPREL,BPINS
|
---|
252 | S BPREJCNT=0,BPRELCNT=0
|
---|
253 | S BPINS=0
|
---|
254 | S BP59="" F S BP59=$O(BPARR(BP59)) Q:BP59="" D
|
---|
255 | . S BPREJ=0
|
---|
256 | . S BPDFN=+$P($G(^BPST(BP59,0)),U,6)
|
---|
257 | . S BPREJ=$S($P($$CLAIMST^BPSSCRU3(BP59),U)="E REJECTED":1,1:0)
|
---|
258 | . S:BPREJ BPREJCNT=BPREJCNT+1
|
---|
259 | . S BPREL=$S($$RXAPI1^BPSUTIL1(+$P($$RXREF^BPSSCRU2(BP59),U),106,"I"):1,1:0)
|
---|
260 | . S:BPREL BPRELCNT=BPRELCNT+1
|
---|
261 | . S BPNEWARR(BPDFN,BP59)=BPARR(BP59)_U_BPREJ_U_BPREL
|
---|
262 | . S BPINS=$P($$GETINSUR^BPSSCRU2(BP59),U,2)
|
---|
263 | . I BPREJ=1,$L(BPINS)>0 S BPINSARR(BPDFN,BPINS,BP59)=BPARR(BP59)
|
---|
264 | Q BPREJCNT_U_BPRELCNT
|
---|
265 | ;
|
---|