[623] | 1 | IBCE835 ;ALB/TMP - 835 EDI EXPLANATION OF BENEFITS MSG PROCESSING ;19-JAN-99
|
---|
| 2 | ;;2.0;INTEGRATED BILLING;**137,135,155**;21-MAR-94
|
---|
| 3 | Q
|
---|
| 4 | ;
|
---|
| 5 | ; MESSAGE HEADER DATA STRING =
|
---|
| 6 | ; type of message^msg queue^msg #^bill #^^date/time
|
---|
| 7 | ;
|
---|
| 8 | HDR(IBCLNO,IBD) ;Process header data
|
---|
| 9 | ; INPUT:
|
---|
| 10 | ; IBCLNO = claim #
|
---|
| 11 | ;
|
---|
| 12 | ; ^TMP("IBMSGH",$J,0) = header message text
|
---|
| 13 | ;
|
---|
| 14 | ; OUTPUT:
|
---|
| 15 | ; IBD array returned with processed data
|
---|
| 16 | ; "LINE" = The last line # populated in the message
|
---|
| 17 | ; "DATE" = Date/Time of EOB (Fileman format)
|
---|
| 18 | ; "MRA" = 1 if MRA, 0 if not
|
---|
| 19 | ; "X12" = 1 if X12, 0 if not
|
---|
| 20 | ;
|
---|
| 21 | ; ^TMP("IBMSG",$J,"CLAIM",claim #,0)=MESSAGE HEADER DATA STRING
|
---|
| 22 | ; ,"D",0,1)=header record raw data
|
---|
| 23 | ; ,"D1",1,0)=header record raw data
|
---|
| 24 | ; ,line #)=EOB message lines
|
---|
| 25 | ;
|
---|
| 26 | N CT,IB399,IBD0,IBBILL,LINE,L,X,Y,Z,%DT
|
---|
| 27 | S IBD0=$G(^TMP("IBMSGH",$J,0)),IBD("LINE")=0
|
---|
| 28 | Q:IBD0=""
|
---|
| 29 | S X=$P(IBD0,U,3),X=$E(X,5,8)_$E(X,1,4)_"@"_$P(IBD0,U,4)
|
---|
| 30 | I X S %DT="XTS" D ^%DT
|
---|
| 31 | S IBD("DATE")=$S(Y>0:Y,1:"")
|
---|
| 32 | S IBD("MRA")=$P(IBD0,U,5)
|
---|
| 33 | S IBD("X12")=($P(IBD0,U,2)="X")
|
---|
| 34 | S CT=0
|
---|
| 35 | ;
|
---|
| 36 | I $P(IBD0,U,6)'="" S CT=CT+1 S LINE(CT)=$G(LINE(CT))_"Payer Name: "_$P(IBD0,U,6)
|
---|
| 37 | ;
|
---|
| 38 | I CT D
|
---|
| 39 | . S (L,Z)=0
|
---|
| 40 | . F S Z=$O(LINE(Z)) Q:'Z S L=L+1,^TMP("IBMSG",$J,"CLAIM",IBCLNO,L)=LINE(Z)
|
---|
| 41 | . S IBD("LINE")=IBD("LINE")+CT
|
---|
| 42 | ;
|
---|
| 43 | S IB399=+$O(^DGCR(399,"B",$$GETCLM^IBCE277(IBCLNO),""),-1)
|
---|
| 44 | ;
|
---|
| 45 | S IBBILL=$$LAST364^IBCEF4(IB399)
|
---|
| 46 | ;
|
---|
| 47 | S ^TMP("IBMSG",$J,"CLAIM",IBCLNO,0)="835EOB"_U_$G(IBD("MSG#"))_U_$G(IBD("SUBJ"))_U_IBBILL_U_U_IBD("DATE")
|
---|
| 48 | ;
|
---|
| 49 | S ^TMP("IBMSG",$J,"CLAIM",IBCLNO,"D",0,1)="##RAW DATA: "_IBD0
|
---|
| 50 | S ^TMP("IBMSG",$J,"CLAIM",IBCLNO,"D1",1,0)="##RAW DATA: "_IBD0
|
---|
| 51 | Q
|
---|
| 52 | ;
|
---|
| 53 | 5(IBD) ; Process claim patient ID data
|
---|
| 54 | ; INPUT:
|
---|
| 55 | ; IBD must be passed by reference = entire message line
|
---|
| 56 | ;
|
---|
| 57 | ; OUTPUT:
|
---|
| 58 | ; IBD array
|
---|
| 59 | ; "LINE" = the last line # populated in the message
|
---|
| 60 | ;
|
---|
| 61 | ; ^TMP("IBMSG",$J,"CLAIM",claim #,line#)=claim pt id message lines
|
---|
| 62 | ; ,"D",5,msg seq #)=
|
---|
| 63 | ; ,"D1",msg seq #,5)=
|
---|
| 64 | ; claim pt id message raw data
|
---|
| 65 | ;
|
---|
| 66 | N IBBILL
|
---|
| 67 | S IBBILL=$$GETCLM^IBCE277($P(IBD,U,2))
|
---|
| 68 | ;
|
---|
| 69 | I '$D(^TMP("IBMSG",$J,"CLAIM",IBBILL)) D HDR(IBBILL,.IBD) ;Process header data if not already done for claim
|
---|
| 70 | ;
|
---|
| 71 | I $P(IBD,U,7)="Y"!($P(IBD,U,8)="Y") D ;New patient name or id reported
|
---|
| 72 | . ;
|
---|
| 73 | . ; Alert to EDI mail group that name or ID has changed
|
---|
| 74 | . N XQA,XQAMSG
|
---|
| 75 | . S XQA("G.IB EDI")=""
|
---|
| 76 | . S XQAMSG="EOB for bill # "_IBBILL_" indicates a new name or id exists for patient"
|
---|
| 77 | . D SETUP^XQALERT
|
---|
| 78 | . ;
|
---|
| 79 | . S IBD("LINE")=$G(IBD("LINE"))+1
|
---|
| 80 | . I $P(IBD,U,7)="Y" S ^TMP("IBMSG",$J,"CLAIM",IBBILL,IBD("LINE"))="New patient name: "_$P(IBD,U,3)_","_$P(IBD,U,4)_" "_$P(IBD,U,5)_" "
|
---|
| 81 | . I $P(IBD,U,8)="Y" S ^TMP("IBMSG",$J,"CLAIM",IBBILL,IBD("LINE"))=$G(^TMP("IBMSG",$J,"CLAIM",IBBILL,IBD("LINE")))_"New patient id: "_$P(IBD,U,6)
|
---|
| 82 | ;
|
---|
| 83 | I $P(IBD,U,9) D ;Statement dates
|
---|
| 84 | . S IBD("LINE")=$G(IBD("LINE"))+1
|
---|
| 85 | . S ^TMP("IBMSG",$J,"CLAIM",IBBILL,IBD("LINE"))="Statement Dates: "_$$DATE^IBCE277($P(IBD,U,9))_" - "_$$DATE^IBCE277($P(IBD,U,10))
|
---|
| 86 | ;
|
---|
| 87 | S ^TMP("IBMSG",$J,"CLAIM",IBBILL,"D",5,1)="##RAW DATA: "_IBD
|
---|
| 88 | S ^TMP("IBMSG",$J,"CLAIM",IBBILL,"D1",1,5)="##RAW DATA: "_IBD
|
---|
| 89 | Q
|
---|
| 90 | ;
|
---|
| 91 | 10(IBD) ; Process claim status data
|
---|
| 92 | ; INPUT:
|
---|
| 93 | ; IBD must be passed by reference = entire message line
|
---|
| 94 | ;
|
---|
| 95 | ; OUTPUT:
|
---|
| 96 | ; IBD array returned with processed data
|
---|
| 97 | ; "CLAIM" = The claim #
|
---|
| 98 | ; "LINE" = The last line # populated in the message
|
---|
| 99 | ;
|
---|
| 100 | ; ^TMP("IBMSG",$J,"CLAIM",claim #,line#)=claim status message lines
|
---|
| 101 | ; ,"D",10,msg seq #)=
|
---|
| 102 | ; ,"D1",msg seq #,10)=
|
---|
| 103 | ; claim status raw data
|
---|
| 104 | ;
|
---|
| 105 | N IBCLM,CT,LINE,L,Z,Z0,IBDATA,IBSTAT
|
---|
| 106 | S IBCLM=$$GETCLM^IBCE277($P(IBD,U,2))
|
---|
| 107 | Q:IBCLM=""
|
---|
| 108 | ;
|
---|
| 109 | I '$D(^TMP("IBMSG",$J,"CLAIM",IBCLM)) D HDR(IBCLM,.IBD) ;Process header data if not already done for claim
|
---|
| 110 | ;
|
---|
| 111 | S CT=0
|
---|
| 112 | F Z=3:1:6 I $P(IBD,U,Z)="Y" D Q ;Claim status
|
---|
| 113 | . S IBSTAT=(Z-2)
|
---|
| 114 | . S CT=CT+1,LINE(CT)="CLAIM STATUS: "_$P("PROCESSED^DENIED^PENDED^REVERSAL",U,IBSTAT)
|
---|
| 115 | I '$G(IBSTAT) D
|
---|
| 116 | . S CT=CT+1,LINE(CT)="CLAIM STATUS: "_$P(IBD,U,7)_" (OTHER)"
|
---|
| 117 | ;
|
---|
| 118 | I $P(IBD,U,8)'="" D ;Crossed over info
|
---|
| 119 | . S LINE(CT)=LINE(CT)_" Crossed over to: "_$P(IBD,U,9)_" "_$P(IBD,U,8)
|
---|
| 120 | ;
|
---|
| 121 | I CT D
|
---|
| 122 | . S L=$G(IBD("LINE")),Z=0
|
---|
| 123 | . F S Z=$O(LINE(Z)) Q:'Z S L=L+1,^TMP("IBMSG",$J,"CLAIM",IBCLM,L)=LINE(Z)
|
---|
| 124 | . S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",10,1)="##RAW DATA: "_IBD
|
---|
| 125 | . S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D1",1,10)="##RAW DATA: "_IBD
|
---|
| 126 | . S IBD("LINE")=$G(IBD("LINE"))+CT
|
---|
| 127 | Q
|
---|
| 128 | ;
|
---|
| 129 | 15(IBD) ; Process claim status data
|
---|
| 130 | ; INPUT:
|
---|
| 131 | ; IBD must be passed by reference = entire message line
|
---|
| 132 | ;
|
---|
| 133 | ; OUTPUT:
|
---|
| 134 | ; IBD array
|
---|
| 135 | ; "LINE" = The last line # populated in the message
|
---|
| 136 | ;
|
---|
| 137 | ; ^TMP("IBMSG",$J,"CLAIM",claim #,"D",15,msg seq #)=
|
---|
| 138 | ; ^TMP("IBMSG",$J,"CLAIM",claim #,"D1",msg seq #,15)=
|
---|
| 139 | ; claim status raw data
|
---|
| 140 | ;
|
---|
| 141 | N IBCLM,Z,Z0,IBDATA
|
---|
| 142 | S IBCLM=$$GETCLM^IBCE277($P(IBD,U,2))
|
---|
| 143 | Q:IBCLM=""
|
---|
| 144 | ;
|
---|
| 145 | I '$D(^TMP("IBMSG",$J,"CLAIM",IBCLM)) D HDR(IBCLM,.IBD) ;Process header data if not already done for claim
|
---|
| 146 | ;
|
---|
| 147 | S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",15,1)="##RAW DATA: "_IBD
|
---|
| 148 | S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D1",1,15)="##RAW DATA: "_IBD
|
---|
| 149 | Q
|
---|
| 150 | ;
|
---|
| 151 | 20(IBD) ; Process claim level adjustment data
|
---|
| 152 | ; Claim must have been referenced by a previous '05' level
|
---|
| 153 | ;
|
---|
| 154 | ; INPUT:
|
---|
| 155 | ; IBD must be passed by reference = entire message line
|
---|
| 156 | ;
|
---|
| 157 | ; OUTPUT:
|
---|
| 158 | ; IBD("LINE") = The last line # populated in the message
|
---|
| 159 | ; ^TMP("IBMSG",$J,"CLAIM",claim #,line #)=claim level adjustment
|
---|
| 160 | ; ,"D",20,seq#)=
|
---|
| 161 | ; ,"D1",seq#,20)=
|
---|
| 162 | ; claim level adjust. raw data
|
---|
| 163 | ;
|
---|
| 164 | N IBCLM
|
---|
| 165 | S IBCLM=$$GETCLM^IBCE277($P(IBD,U,2))
|
---|
| 166 | Q:'$D(^TMP("IBMSG",$J,"CLAIM",IBCLM))
|
---|
| 167 | S IBD("LINE")=$G(IBD("LINE"))+1
|
---|
| 168 | S ^TMP("IBMSG",$J,"CLAIM",IBCLM,IBD("LINE"))="ADJUSTMENT GROUP: "_$P(IBD,U,3)_" QTY: "_+$P(IBD,U,6)_", AMT: "_($P(IBD,U,5)/100)
|
---|
| 169 | S IBD("LINE")=IBD("LINE")+1
|
---|
| 170 | S ^TMP("IBMSG",$J,"CLAIM",IBCLM,IBD("LINE"))=" REASON: ("_$P(IBD,U,4)_") "_$P(IBD,U,7)
|
---|
| 171 | S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",20,IBD("LINE"))="##RAW DATA: "_IBD
|
---|
| 172 | S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D1",IBD("LINE"),20)="##RAW DATA: "_IBD
|
---|
| 173 | Q
|
---|
| 174 | ;
|
---|
| 175 | 37(IBD) ; Process claim level adjustment data for Inpatient MEDICARE
|
---|
| 176 | D 37^IBCE835A(.IBD)
|
---|
| 177 | Q
|
---|
| 178 | ;
|
---|
| 179 | 40(IBD) ; Process service line data
|
---|
| 180 | D 40^IBCE835A(.IBD)
|
---|
| 181 | Q
|
---|
| 182 | ;
|
---|
| 183 | 45(IBD) ; Process service line adjustment data
|
---|
| 184 | D 45^IBCE835A(.IBD)
|
---|
| 185 | Q
|
---|
| 186 | ;
|
---|
| 187 | 17(IBD) ; Process claim contact data segment
|
---|
| 188 | D XX(.IBD,17)
|
---|
| 189 | Q
|
---|
| 190 | ;
|
---|
| 191 | 30(IBD) ; Process MEDICARE inpatient adjudication data (part 1)
|
---|
| 192 | D XX(.IBD,30)
|
---|
| 193 | Q
|
---|
| 194 | ;
|
---|
| 195 | 35(IBD) ; Process MEDICARE inpatient adjudication data (part 2)
|
---|
| 196 | D XX(.IBD,35)
|
---|
| 197 | Q
|
---|
| 198 | ;
|
---|
| 199 | 41(IBD) ; Process service line data (part 2)
|
---|
| 200 | D XX(.IBD,41)
|
---|
| 201 | Q
|
---|
| 202 | ;
|
---|
| 203 | 42(IBD) ; Process service line data (part 3)
|
---|
| 204 | D XX(.IBD,42)
|
---|
| 205 | Q
|
---|
| 206 | ;
|
---|
| 207 | 99(IBD) ; Process trailer record for non-MRA EOB
|
---|
| 208 | D XX(.IBD,99)
|
---|
| 209 | Q
|
---|
| 210 | ;
|
---|
| 211 | XX(IBD,IBID) ; Store non-displayed data nodes in TMP array
|
---|
| 212 | ;
|
---|
| 213 | ; INPUT:
|
---|
| 214 | ; IBD must be passed by reference = entire message line
|
---|
| 215 | ; IBID = record id for generic store
|
---|
| 216 | ;
|
---|
| 217 | ; OUTPUT:
|
---|
| 218 | ; ^TMP("IBMSG",$J,"CLAIM",claim #,"D",IBID,msg seq #)=
|
---|
| 219 | ; ^TMP("IBMSG",$J,"CLAIM",claim #,"D1",msg seq #,IBID)=
|
---|
| 220 | ; claim status raw data
|
---|
| 221 | ; IBD("LINE") = The last line # populated in the message
|
---|
| 222 | ;
|
---|
| 223 | N IBCLM
|
---|
| 224 | S IBCLM=$$GETCLM^IBCE277($P(IBD,U,2))
|
---|
| 225 | ;
|
---|
| 226 | S IBD("LINE")=$G(IBD("LINE"))+1
|
---|
| 227 | S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D",IBID,IBD("LINE"))="##RAW DATA: "_IBD
|
---|
| 228 | S ^TMP("IBMSG",$J,"CLAIM",IBCLM,"D1",IBD("LINE"),IBID)="##RAW DATA: "_IBD
|
---|
| 229 | ;
|
---|
| 230 | Q
|
---|
| 231 | ;
|
---|