| 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 | ;
|
---|