1 | IBCEMQC ;ALB/ESG - MRA EOB CRITERIA FOR AUTO-AUTHORIZE ; 11/1/06 10:34am
|
---|
2 | ;;2.0;INTEGRATED BILLING;**155,323,302,350,359**;21-MAR-94;Build 9
|
---|
3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | Q ; must be called at proper entry point
|
---|
6 | ;
|
---|
7 | CRIT(IBEOB) ; Function to determine if EOB entry meets the criteria for
|
---|
8 | ; auto-authorization and secondary claim submission
|
---|
9 | ;
|
---|
10 | ; Input: IBEOB - internal entry number for an entry in 361.1
|
---|
11 | ;
|
---|
12 | ; Output: This function returns a pieced string
|
---|
13 | ; [1] 0 or 1, EOB meets criteria
|
---|
14 | ; [2] error message if the first piece is 0
|
---|
15 | ;
|
---|
16 | NEW IBM,IBM3,IBM5,IBIFN,PCE,REMC,Z,OK,REASON,STOP,IBPTRESP
|
---|
17 | ;
|
---|
18 | S OK=0,REASON="Unknown",IBEOB=+$G(IBEOB)
|
---|
19 | ;
|
---|
20 | S IBM=$G(^IBM(361.1,IBEOB,0)) I IBM="" S REASON="No EOB Data Found" G CRITX
|
---|
21 | I $D(^IBM(361.1,IBEOB,"ERR")) S REASON="Filing Errors" G CRITX
|
---|
22 | I $P(IBM,U,13)'=1 S REASON="Claim Status is "_$$GET1^DIQ(361.1,IBEOB_",",.13)_". It must be PROCESSED." G CRITX
|
---|
23 | ;
|
---|
24 | I $P(IBM,U,4)'=1 S REASON="The EOB Type is not Medicare MRA" G CRITX
|
---|
25 | ;
|
---|
26 | ; If any other MRA's on file for this bill failed the auto-generation
|
---|
27 | ; check, then this MRA must also fail the check
|
---|
28 | S IBIFN=+IBM,Z=0,STOP=0
|
---|
29 | F S Z=$O(^IBM(361.1,"B",IBIFN,Z)) Q:'Z D Q:STOP
|
---|
30 | . I Z=IBEOB Q ; check different EOB records if they exist
|
---|
31 | . I $P($G(^IBM(361.1,Z,0)),U,4)'=1 Q ; must be an MRA
|
---|
32 | . I $P($G(^IBM(361.1,Z,30)),U,1)="" Q ; no problems recorded
|
---|
33 | . S REASON="Another MRA for this bill (ien="_Z_") failed the auto-generation criteria check."
|
---|
34 | . S STOP=1
|
---|
35 | . Q
|
---|
36 | I STOP G CRITX
|
---|
37 | ;
|
---|
38 | ; If this EOB is a split EOB, then don't allow it
|
---|
39 | I $$SPLIT^IBCEMU1(IBEOB) S REASON="Claim level remark code MA15 received. Multiple MRA's" G CRITX
|
---|
40 | ;
|
---|
41 | ; Call the function that checks the claim level and/or line level
|
---|
42 | ; adjustments for this EOB
|
---|
43 | I '$$CAS(IBEOB,"B",.REASON) G CRITX ; "B" for both
|
---|
44 | ;
|
---|
45 | ; Make sure the patient responsibility amount for this MRA is greater than $0
|
---|
46 | S IBPTRESP=$P($G(^IBM(361.1,IBEOB,1)),U,2) ; Pt Resp Amt 1.02 field
|
---|
47 | I $$FT^IBCEF(IBIFN)=3 S IBPTRESP=$$PTRESPI^IBCECOB1(IBEOB)
|
---|
48 | I IBPTRESP'>0 S REASON="Patient responsibility dollar amount is less than or equal to $0" G CRITX
|
---|
49 | ;
|
---|
50 | ; Check the parameter values last of all
|
---|
51 | I '$P($G(^IBE(350.9,1,8)),U,11) S REASON="Automatic MRA Processing parameter is turned off. File 350.9, Field 8.11." G CRITX
|
---|
52 | I '$P($G(^IBE(350.9,1,8)),U,12) S REASON="Allow MRA Processing parameter is turned off. File 350.9, Field 8.12." G CRITX
|
---|
53 | ;
|
---|
54 | ; At this point, we're OK
|
---|
55 | S OK=1,REASON=""
|
---|
56 | ;
|
---|
57 | CRITX ;
|
---|
58 | Q OK_U_REASON
|
---|
59 | ;
|
---|
60 | ;
|
---|
61 | CAS(IBEOB,ADJFLAG,REASON) ; This function determines if the EOB
|
---|
62 | ; adjustment group codes and reason codes from file 361.1 (either
|
---|
63 | ; claim level or line level or both) meet the criteria for auto-
|
---|
64 | ; authorization and secondary claim submission.
|
---|
65 | ;
|
---|
66 | ; Input Parameters
|
---|
67 | ; IBEOB - ien of entry in file 361.1
|
---|
68 | ; ADJFLAG - adjustment flag
|
---|
69 | ; "C" - look at claim level adjustments only
|
---|
70 | ; "L" - look at line level adjustments only
|
---|
71 | ; "B" - look at both claim and line level adjustments
|
---|
72 | ; Output Parameter
|
---|
73 | ; REASON - error message describing why it failed
|
---|
74 | ;
|
---|
75 | ; Function Value is either 0 or 1, indicating if it passed the criteria
|
---|
76 | ;
|
---|
77 | NEW EOBADJ,OK,OKCOMBO,PATRESP,STOP,LNIEN
|
---|
78 | ;
|
---|
79 | S IBEOB=+$G(IBEOB)
|
---|
80 | S ADJFLAG=$G(ADJFLAG,"B") ; default is "B" if not passed in
|
---|
81 | D BUILD ; build the array of OK group/reason combinations
|
---|
82 | S PATRESP=0 ; patient responsibility flag (default false)
|
---|
83 | S STOP=0 ; Stop flag
|
---|
84 | S OK=0 ; OK flag (function value)
|
---|
85 | S REASON="" ; error reason text
|
---|
86 | ;
|
---|
87 | ; claim level adjustments
|
---|
88 | I $F(".C.B.","."_ADJFLAG_".") D
|
---|
89 | . KILL EOBADJ
|
---|
90 | . M EOBADJ=^IBM(361.1,IBEOB,10)
|
---|
91 | . D ADJCHK
|
---|
92 | . Q
|
---|
93 | ;
|
---|
94 | ; Get out if the claim level adjustments failed
|
---|
95 | I STOP G CASX
|
---|
96 | ;
|
---|
97 | ; line level adjustments
|
---|
98 | I $F(".L.B.","."_ADJFLAG_".") D
|
---|
99 | . S LNIEN=0
|
---|
100 | . F S LNIEN=$O(^IBM(361.1,IBEOB,15,LNIEN)) Q:'LNIEN D Q:STOP
|
---|
101 | .. KILL EOBADJ
|
---|
102 | .. M EOBADJ=^IBM(361.1,IBEOB,15,LNIEN,1)
|
---|
103 | .. D ADJCHK
|
---|
104 | .. Q
|
---|
105 | . Q
|
---|
106 | ;
|
---|
107 | ; Get out if the line level adjustments failed
|
---|
108 | I STOP G CASX
|
---|
109 | ;
|
---|
110 | ; Get out if there was no patient responsibility adjustments found
|
---|
111 | I 'PATRESP S REASON="No Patient Responsibility Adjustments found" G CASX
|
---|
112 | ;
|
---|
113 | ; At this point, we're OK
|
---|
114 | S OK=1,REASON=""
|
---|
115 | CASX ;
|
---|
116 | Q OK
|
---|
117 | ;
|
---|
118 | ;
|
---|
119 | ADJCHK ; This procedure checks the adjustments for this EOB. The group codes
|
---|
120 | ; and reason codes are in the EOBADJ array structures from file 361.1.
|
---|
121 | ;
|
---|
122 | ; Variables STOP and REASON will be returned on an error
|
---|
123 | ; Variable PATRESP will be returned if a valid PR adjustment found
|
---|
124 | ;
|
---|
125 | NEW ADJIEN,GROUP,RSNIEN,RSNCODE
|
---|
126 | S ADJIEN=0
|
---|
127 | F S ADJIEN=$O(EOBADJ(ADJIEN)) Q:'ADJIEN D Q:STOP
|
---|
128 | . S GROUP=$P($G(EOBADJ(ADJIEN,0)),U,1)
|
---|
129 | . I GROUP="LQ" Q ; line level remark code kludge: 42 rec [3]
|
---|
130 | . I GROUP="" S GROUP="<Undefined>"
|
---|
131 | . I '$D(OKCOMBO(GROUP)) S STOP=1,REASON="Unacceptable Claim Adjustment Group Code: "_GROUP Q
|
---|
132 | . S RSNIEN=0
|
---|
133 | . F S RSNIEN=$O(EOBADJ(ADJIEN,1,RSNIEN)) Q:'RSNIEN D Q:STOP
|
---|
134 | .. S RSNCODE=$P($G(EOBADJ(ADJIEN,1,RSNIEN,0)),U,1)
|
---|
135 | .. ;
|
---|
136 | .. ; Ignore some special adjustment data that is filed with the MRA
|
---|
137 | .. I GROUP="PR",RSNCODE="AAA" Q ; Allowed Amount: 41 rec [3]
|
---|
138 | .. I GROUP="OA",RSNCODE="AB3" Q ; Covered Amount: 15 rec [3]
|
---|
139 | .. ;
|
---|
140 | .. I RSNCODE="" S RSNCODE="<Undefined>"
|
---|
141 | .. I '$D(OKCOMBO(GROUP,RSNCODE)) S STOP=1,REASON="Unacceptable Reason Code ("_RSNCODE_") for Claim Adjustment Group Code ("_GROUP_")" Q
|
---|
142 | .. ;
|
---|
143 | .. ; Set the flag if the group is PR
|
---|
144 | .. I GROUP="PR" S PATRESP=1
|
---|
145 | .. Q
|
---|
146 | . Q
|
---|
147 | ADJCHKX ;
|
---|
148 | Q
|
---|
149 | ;
|
---|
150 | ;
|
---|
151 | BUILD ; This procedure builds the OKCOMBO array which identifies which
|
---|
152 | ; combinations of group codes and reason codes are acceptable
|
---|
153 | ;
|
---|
154 | NEW LN,LINE,GROUP,RSNLST,R,RSN
|
---|
155 | KILL OKCOMBO
|
---|
156 | F LN=1:1 D Q:$P(LINE,";",4)=""&$D(OKCOMBO)
|
---|
157 | . S LINE=$T(OKCOMBO+LN)
|
---|
158 | . S GROUP=$P(LINE,";",3) Q:GROUP=""
|
---|
159 | . S RSNLST=$P(LINE,";",4) Q:RSNLST=""
|
---|
160 | . F R=1:1:$L(RSNLST,",") D
|
---|
161 | .. S RSN=$P(RSNLST,",",R) Q:RSN=""
|
---|
162 | .. S OKCOMBO(GROUP,RSN)=""
|
---|
163 | .. Q
|
---|
164 | . Q
|
---|
165 | BUILDX ;
|
---|
166 | Q
|
---|
167 | ;
|
---|
168 | ;
|
---|
169 | OKCOMBO ; This section lists OK combinations of adjustment category group codes
|
---|
170 | ; and associated reason codes.
|
---|
171 | ; The format is as follows - semi-colon delimiter
|
---|
172 | ; [3] Adjustment category (group code)
|
---|
173 | ; [4] List of acceptable reason codes - comma delimiter
|
---|
174 | ;
|
---|
175 | ; PR-AAA is created by VistA for the Allowed Amount
|
---|
176 | ; OA-AB3 is created by VistA for the Covered Amount
|
---|
177 | ; LQ-zzz is created by VistA for the Line Level remark
|
---|
178 | ;
|
---|
179 | ;;CO;A2,B6,42,45,172,94,194
|
---|
180 | ;;PR;1,2,66,122,AAA
|
---|
181 | ;;OA;AB3
|
---|
182 | ;
|
---|