| 1 | IBCEMRAA ;ALB/DSM - MEDICARE REMITTANCE ADVICE DETAIL-PART A ; 12/29/05 9:57am | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**155,323,349**;21-MAR-94;Build 46 | 
|---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | Q  ; must call an entry point | 
|---|
| 6 | ; | 
|---|
| 7 | ;  This routine prints MRA Report for UB-04 (Part A) Form Type | 
|---|
| 8 | ; | 
|---|
| 9 | MRA(IBIFN) ;;Module - Entry point to print ALL MRA reports, for a given IBIFN. | 
|---|
| 10 | ; This entry point doesn't ask for a Bill Number, it must pass IBIFN as Input. | 
|---|
| 11 | ; It will prompt the user for a device. | 
|---|
| 12 | ; | 
|---|
| 13 | ; Input   IBIFN  = ien of Bill Number (required) | 
|---|
| 14 | ; | 
|---|
| 15 | N IBQUIT,IBPGN S IBQUIT=0 | 
|---|
| 16 | D ENT1 | 
|---|
| 17 | Q  ;MRA | 
|---|
| 18 | ; | 
|---|
| 19 | ENT ; Menu Option Entry Point | 
|---|
| 20 | N IBQUIT,IBEOB,IBIFN,FRMTYP,IBPGN | 
|---|
| 21 | S IBQUIT=0 | 
|---|
| 22 | D GETBIL I IBQUIT Q   ;ENT | 
|---|
| 23 | ; | 
|---|
| 24 | ENT1 ; Prompt for a print device and print MRA Reports | 
|---|
| 25 | D DEV^IBCEMRAX(IBIFN) I IBQUIT Q    ; device handling  ENT1 | 
|---|
| 26 | ; | 
|---|
| 27 | PROC ; This section must have IBIFN defined | 
|---|
| 28 | ; This section is called as both a foreground and a background process, | 
|---|
| 29 | ; so all write stmts need to consider printing in both cases. | 
|---|
| 30 | N FRMTYP,IEN,IBZDATA,INPAT | 
|---|
| 31 | S IBQUIT=$G(IBQUIT) | 
|---|
| 32 | S FRMTYP=$$FT^IBCEF(IBIFN)    ;Form Type | 
|---|
| 33 | S INPAT=$$INPAT^IBCEF(IBIFN)  ;Inpatient Flag | 
|---|
| 34 | ; | 
|---|
| 35 | ; Get Service Line Level Data from 837 Extract - Make the appropriate call | 
|---|
| 36 | ; based on the Bill's Form Type 3=UB-04  ; 2=CMS-1500 | 
|---|
| 37 | D  ; | 
|---|
| 38 | . I FRMTYP=2 D F^IBCEF("N-HCFA 1500 SERVICE LINE (EDI)","IBZDATA",,IBIFN) Q | 
|---|
| 39 | . D F^IBCEF("N-UB-04 SERVICE LINE (EDI)","IBZDATA",,IBIFN) | 
|---|
| 40 | ; | 
|---|
| 41 | ; For a given IBIFN, print all MRA's on file for that Bill | 
|---|
| 42 | S IEN=0 | 
|---|
| 43 | F  S IEN=$O(^IBM(361.1,"B",IBIFN,IEN)) Q:'IEN  D  I IBQUIT Q | 
|---|
| 44 | . I $P($G(^IBM(361.1,IEN,0)),U,4)'=1 Q  ;not an MRA | 
|---|
| 45 | . D PRNTMRA  ; print an MRA | 
|---|
| 46 | ; | 
|---|
| 47 | ; Force a form feed at end of a printer report | 
|---|
| 48 | I $E(IOST,1,2)'["C-" W @IOF | 
|---|
| 49 | ; Pause on screen before exiting | 
|---|
| 50 | I 'IBQUIT,$E(IOST,1,2)["C-" W ! S DIR("A")="Press RETURN to continue: ",DIR(0)="EA" D ^DIR K DIR | 
|---|
| 51 | ; | 
|---|
| 52 | ; Quit if called from a background process (ZTQUEUED defined) | 
|---|
| 53 | I $D(ZTQUEUED) S ZTREQ="@" Q  ;PROC | 
|---|
| 54 | D ^%ZISC     ; handle device closing before exiting | 
|---|
| 55 | Q   ;PROC | 
|---|
| 56 | ; | 
|---|
| 57 | PRNTMRA ; Print a single MRA | 
|---|
| 58 | ; Input IEN - the ien# of EOB file (361.1); Required | 
|---|
| 59 | S IBPGN=0 | 
|---|
| 60 | ; Print Part B - CMS-1500 | 
|---|
| 61 | I FRMTYP=2 D PRNT^IBCEMRAB Q  ;PRNTMRA | 
|---|
| 62 | ; | 
|---|
| 63 | ; Print Part A - Institutional next | 
|---|
| 64 | ; Claim Level | 
|---|
| 65 | N RSNCD,NCVRCHRG,IBILL,IBILLU,IBCOINS,IBCTADJ,IBEOB,RMKS,IBFD,IBTD,IBDED,CLMADJ | 
|---|
| 66 | I IBPGN>1 D PAUSE^IBCEMRAX I IBQUIT Q  ;pause between EOB reports | 
|---|
| 67 | D CLMDATA,CLMHDR I IBQUIT Q | 
|---|
| 68 | D CLMPRNT | 
|---|
| 69 | ; | 
|---|
| 70 | ; Print Service Line Level Adjustments - check if exist | 
|---|
| 71 | I $D(^IBM(361.1,IEN,15)) D  I IBQUIT Q | 
|---|
| 72 | . I ($Y+4)>IOSL D PAUSE^IBCEMRAX Q:IBQUIT  W @IOF D CLMHDR | 
|---|
| 73 | . D SRVHDR^IBCEMRAX,SRVDATA^IBCEMRAX | 
|---|
| 74 | ; | 
|---|
| 75 | ; Print Disclaimer | 
|---|
| 76 | D DSCLMR^IBCEMRAX | 
|---|
| 77 | Q  ;PRTMRA | 
|---|
| 78 | ; | 
|---|
| 79 | GETBIL ; Prompt the user for a Bill#. Get INIFN and IBEOB. | 
|---|
| 80 | ; | 
|---|
| 81 | N DIC,Y W ! | 
|---|
| 82 | ; Access Explanation Of Benefits File #361.1 | 
|---|
| 83 | ; Screen: only allow access to EOB's of Type = 1 (Medicare MRA) | 
|---|
| 84 | S DIC="^IBM(361.1,",DIC(0)="AEMQ",DIC("S")="I $P(^(0),U,4)=1" | 
|---|
| 85 | S DIC("W")="D EOBLST^IBCEMU1(Y)"   ; modify generic lister | 
|---|
| 86 | D ^DIC | 
|---|
| 87 | I Y<1!$D(DTOUT)!$D(DUOUT) S IBQUIT=1 Q  ; GETBIL | 
|---|
| 88 | S IBIFN=+$P(Y,U,2)   ; get index to Bill file (#399) | 
|---|
| 89 | Q  ;GETBIL | 
|---|
| 90 | ; | 
|---|
| 91 | CLMDATA ; Get MRA Claim Level data of EOB file (#361.1) | 
|---|
| 92 | N I,RCNT,GRPCD,GLVL,GLVLD,RLVL,RLVLD,RCDED,RCOINS,RCTADJ,RCNCVR,RCLMADJ,CLMLVL | 
|---|
| 93 | F I=1:1:5 S @($P($T(TABLE+I),";",3))=$P($T(TABLE+I),";",4) | 
|---|
| 94 | ; | 
|---|
| 95 | ; Get Top Levels of EOB file (#361.1) | 
|---|
| 96 | F I=0,1,3:1:6 S IBEOB(I)=$G(^IBM(361.1,IEN,I)) | 
|---|
| 97 | ; | 
|---|
| 98 | ; Get Claim Level Remarks Code from appropriate levels of 361.1 based on | 
|---|
| 99 | ; whether Bill is Outpatient or Inpatient. | 
|---|
| 100 | D  ; | 
|---|
| 101 | . I INPAT S RMKS=IBEOB(5) Q   ; Inpatient remarks code | 
|---|
| 102 | . S RMKS=$P(IBEOB(3),U,3,7)   ; Outpatient remarks code | 
|---|
| 103 | ; | 
|---|
| 104 | ; Get Group Level Data | 
|---|
| 105 | ; RLVLD=reason_code^amount^quantity^reason text | 
|---|
| 106 | ; CLMLVL=Claim Level Flag indicating where the displayed data is coming from | 
|---|
| 107 | ; 1=Claim Level; 0=Line Level | 
|---|
| 108 | ; | 
|---|
| 109 | S (GLVL,RLVL,RCNT,NCVRCHRG,IBDED,IBCOINS,IBCTADJ,CLMADJ,CLMLVL)=0 | 
|---|
| 110 | F  S GLVL=$O(^IBM(361.1,IEN,10,GLVL)) Q:'GLVL  S GLVLD=^(GLVL,0) D  ; | 
|---|
| 111 | . S GRPCD=$P(GLVLD,U),RLVL=0 | 
|---|
| 112 | . F  S RLVL=$O(^IBM(361.1,IEN,10,GLVL,1,RLVL)) Q:'RLVL  S RLVLD=^(RLVL,0) D  ; | 
|---|
| 113 | . . S RSNCD=$P(RLVLD,U) | 
|---|
| 114 | . . I GRPCD="PR",RSNCD="AAA" Q   ;exception | 
|---|
| 115 | . . I GRPCD="OA",RSNCD="AB3" Q   ;exception | 
|---|
| 116 | . . I GRPCD="LQ" Q               ;exception | 
|---|
| 117 | . . S RCNT=RCNT+1,RSNCD(RCNT)=RSNCD ;display | 
|---|
| 118 | . . I RCLMADJ[(","_RSNCD_",") S CLMADJ=CLMADJ+$P(RLVLD,U,2),CLMLVL=1 ;Claim Adjustment | 
|---|
| 119 | . . ; Get data from Claim Level: calculate Coinsurance, Contractual Adjustment, | 
|---|
| 120 | . . ; Noncovered Charges and Deductible amounts | 
|---|
| 121 | . . I GRPCD="PR",RCOINS[(","_RSNCD_",") S IBCOINS=$P(RLVLD,U,2),CLMLVL=1 Q | 
|---|
| 122 | . . I GRPCD="PR",RCDED[(","_RSNCD_",") S IBDED=IBDED+$P(RLVLD,U,2),CLMLVL=1 Q | 
|---|
| 123 | . . I GRPCD="CO" D  ; | 
|---|
| 124 | . . . I RCTADJ[(","_RSNCD_",") S IBCTADJ=IBCTADJ+$P(RLVLD,U,2),CLMLVL=1 | 
|---|
| 125 | . . . I RCNCVR'[(","_RSNCD_",") S NCVRCHRG=NCVRCHRG+$P(RLVLD,U,2),CLMLVL=1 | 
|---|
| 126 | ; | 
|---|
| 127 | ; If no data was found at Claim Level, get data from Line Level | 
|---|
| 128 | I 'CLMLVL D LINELVL^IBCEMRAX | 
|---|
| 129 | S IBILL=$G(^DGCR(399,$P(IBEOB(0),U),0)),IBILLU=$G(^DGCR(399,$P(IBEOB(0),U),"U")) | 
|---|
| 130 | S IBFD=$$FMTE^XLFDT($P(IBILLU,U),5),IBTD=$$FMTE^XLFDT($P(IBILLU,U,2),5) | 
|---|
| 131 | ; | 
|---|
| 132 | Q  ;CLMDATA | 
|---|
| 133 | ; | 
|---|
| 134 | CLMHDR ; Print Claim Level Header | 
|---|
| 135 | S IBPGN=IBPGN+1 | 
|---|
| 136 | I IBPGN=1,$E(IOST,1,2)["C-" W @IOF  ; refresh terminal screen on 1st hdr | 
|---|
| 137 | ; | 
|---|
| 138 | ; Rows 1 to 3 | 
|---|
| 139 | W !,?108,"Medicare-equivalent",!?110,"Remittance Advice",! | 
|---|
| 140 | N PRVDR,LVL,STATE | 
|---|
| 141 | ; Retrieve the Provider data from IB Site Parameters file - ^IBE(350.9) | 
|---|
| 142 | S PRVDR=$G(^IBE(350.9,1,2)) | 
|---|
| 143 | ; ProviderName^AgentCashierAddress^City^State^Zip | 
|---|
| 144 | ; | 
|---|
| 145 | F LVL=1:1:5 S PRVDR(LVL)=$P(PRVDR,U,LVL) | 
|---|
| 146 | ; PRVDR(1)  Provider Name (Agent Cashier Mail Symbol) | 
|---|
| 147 | ; PRVDR(2)  Agent Cashier Street Address | 
|---|
| 148 | ; PRVDR(3)  Agent Cashier City | 
|---|
| 149 | ; PRVDR(4)  Agent Cashier State | 
|---|
| 150 | ; PRVDR(5)  Agent Cashier Zip | 
|---|
| 151 | ; | 
|---|
| 152 | ; resolve the State File Pointer in PRVDR(4) & get State Abbreviation | 
|---|
| 153 | S STATE=$S(PRVDR(4)'="":$P($G(^DIC(5,PRVDR(4),0)),U,2),1:"") | 
|---|
| 154 | ; Row 4 to 15 | 
|---|
| 155 | W !!!,"DEPT OF VETERANS AFFAIRS" | 
|---|
| 156 | W !,PRVDR(2),?103,"PROVIDER #:",?117,$P($G(^IBE(350.9,1,1)),U,5) ;Tax ID | 
|---|
| 157 | W !,PRVDR(1),?103,"PAGE #:",?117,$J(IBPGN,3) | 
|---|
| 158 | W !,PRVDR(3),", ",STATE," ",PRVDR(5),?103,"DATE: ",?117,$$FMTE^XLFDT($P(IBEOB(0),U,6),5) | 
|---|
| 159 | W !!,"PATIENT NAME",?24,"PATIENT CNTRL NUMBER",?48,"RC",?52,"REM",?58,"DRG#",?72,"DRG OUT AMT" | 
|---|
| 160 | W ?86,"COINSURANCE",?100,"PAT REFUND",?115,"CONTRACT ADJ" | 
|---|
| 161 | W !,"HIC NUMBER",?24,"ICN NUMBER",?48,"RC",?52,"REM",?58,"OUTCD CAPCD",?72,"DRG CAP AMT" | 
|---|
| 162 | W ?86,"COVD CHGS",?100,"ESRD NET ADJ",?115,"PER DIEM RTE" | 
|---|
| 163 | W !,"FROM DT    THRU DT",?24,"NACHG  HICHG  TOB",?48,"RC",?52,"REM",?58,"PROF COMP",?72,"MSP PAYMT" | 
|---|
| 164 | W ?86,"NCOVD CHGS",?100,"INTEREST",?115,"PROC CD AMT" | 
|---|
| 165 | W !,"CLM STATUS",?24,"COST  COVDY  NCOVDY",?48,"RC",?52,"REM",?58,"DRG AMT",?72,"DEDUCTIBLES" | 
|---|
| 166 | W ?86,"DENIED CHGS",?100,"CLAIM ADJ",?115,"NET REIMB",! | 
|---|
| 167 | Q  ;CLMHDR | 
|---|
| 168 | ; | 
|---|
| 169 | CLMPRNT ; - Print Claim Level part of the Report | 
|---|
| 170 | N PTNM,PTLEN,HIC | 
|---|
| 171 | ; ROW 16 | 
|---|
| 172 | ; format and standardize patient name for display | 
|---|
| 173 | S PTNM("FILE")=2,PTNM("IENS")=$P(IBILL,U,2),PTNM("FIELD")=.01,PTLEN=23 | 
|---|
| 174 | S PTNM=$$BLDNAME^XLFNAME(.PTNM,PTLEN) | 
|---|
| 175 | I $P(IBEOB(6),U,1)'="" S PTNM=$E($P(IBEOB(6),U,1),1,PTLEN) | 
|---|
| 176 | W !,PTNM | 
|---|
| 177 | ; Account # (Bill #) | 
|---|
| 178 | W ?24,$P($$SITE^VASITE,U,3),"-",$P(IBILL,U) | 
|---|
| 179 | ; Reason Code,Remarks Code 1 | 
|---|
| 180 | W ?48,$G(RSNCD(1)),?52,$P(RMKS,U,1) | 
|---|
| 181 | ; DRG Code Used | 
|---|
| 182 | W ?58,$P(IBEOB(0),U,10) | 
|---|
| 183 | ; Coinsurance, Contract Adjustment | 
|---|
| 184 | W ?86,$J($G(IBCOINS),11,2),?115,$J($G(IBCTADJ),11,2) | 
|---|
| 185 | ; ROW 17 | 
|---|
| 186 | ; HIC & ICN | 
|---|
| 187 | S HIC=$S($P(IBEOB(6),U,2)'="":$P(IBEOB(6),U,2),$$WNRBILL^IBEFUNC(IBIFN,1):$P($G(^DGCR(399,$P(IBEOB(0),U),"I1")),U,2),1:$P($G(^DGCR(399,$P(IBEOB(0),U),"I2")),U,2)) | 
|---|
| 188 | W !,HIC,?24,$P(IBEOB(0),U,14) | 
|---|
| 189 | ; Reason Code, Remarks Code 2 | 
|---|
| 190 | W ?48,$G(RSNCD(2)),?52,$P(RMKS,U,2) | 
|---|
| 191 | ; covered charges | 
|---|
| 192 | W ?86,$J($P(IBEOB(1),U,3),11,2) | 
|---|
| 193 | ; Outpatient Reimbursement Rate | 
|---|
| 194 | I 'INPAT W ?115,$J($P(IBEOB(3),U,1),11,2) | 
|---|
| 195 | ; ROW 18 | 
|---|
| 196 | W !,IBFD,?12,IBTD | 
|---|
| 197 | ; Type of Bill (=Location of Care_Bill Clasification_Frequency) | 
|---|
| 198 | W ?38,$P(IBILL,U,24)_$P($G(^DGCR(399.1,$P(IBILL,U,25),0)),U,2)_$P(IBILL,U,26) | 
|---|
| 199 | ; Reason Code,Remarks Code 3 | 
|---|
| 200 | W ?48,$G(RSNCD(3)),?52,$P(RMKS,U,3) | 
|---|
| 201 | ; non-covered amount (Pt Responsibility) | 
|---|
| 202 | W ?86,$J(NCVRCHRG,11,2) | 
|---|
| 203 | ; Interest Amount | 
|---|
| 204 | I $P(IBEOB(1),U,7) W ?100,$J($P(IBEOB(1),U,7),11,2) | 
|---|
| 205 | ; Procedure code amount | 
|---|
| 206 | W ?115,$J($P(IBEOB(3),U,2),11,2) | 
|---|
| 207 | ; ROW 19 | 
|---|
| 208 | ; claim status | 
|---|
| 209 | W !?6,$E($P(IBEOB(0),U,21),1,2) | 
|---|
| 210 | ; M-Care Inp Cost Report Day Ct | 
|---|
| 211 | W ?24,$P(IBEOB(4),U,14) | 
|---|
| 212 | ; M-Care Inp Cov. Days/Visit Ct | 
|---|
| 213 | W ?30,$P(IBEOB(4),U,1) | 
|---|
| 214 | ; Medicare Non-Covered Days | 
|---|
| 215 | W ?38,$P(IBEOB(4),U,19) | 
|---|
| 216 | ; Reason Code,Remarks Code 4 | 
|---|
| 217 | W ?48,$G(RSNCD(4)),?52,$P(RMKS,U,4) | 
|---|
| 218 | ; M-Care Inp Claim Drg Amt | 
|---|
| 219 | W ?58,$J($P(IBEOB(4),U,3),11,2) | 
|---|
| 220 | ; if Group Code is PR, print the sum of Reason Codes 1 and 66 | 
|---|
| 221 | W ?72,$J($G(IBDED),11,2) | 
|---|
| 222 | ; Claim Adjustments | 
|---|
| 223 | W ?100,$J($G(CLMADJ),10,2) | 
|---|
| 224 | ; net reimburse | 
|---|
| 225 | W ?115,$J($P(IBEOB(1),U,1),11,2) | 
|---|
| 226 | ; Row 20 | 
|---|
| 227 | ; Reason Code,Remarks Code 5 | 
|---|
| 228 | W !?48,$G(RSNCD(5)),?52,$P(RMKS,U,5) | 
|---|
| 229 | ; | 
|---|
| 230 | Q  ; CLMPRNT | 
|---|
| 231 | TABLE ;;variable;list of Reason Codes w/leading & trailing commas; description; | 
|---|
| 232 | ;;RCDED;,1,66,;reason code to calc deductible amount; | 
|---|
| 233 | ;;RCOINS;,2,;reason code to calc coinsurance amount; | 
|---|
| 234 | ;;RCTADJ;,A2,;reason codes to calc contract adjustment amount; | 
|---|
| 235 | ;;RCNCVR;,1,2,23,42,45,66,70,71,89,94,97,118,A1,A2,B3,B6,;reason codes excluded from calc of noncovered charges amount; | 
|---|
| 236 | ;;RCLMADJ;,42,45,70,94,97,122,A1,;reason codes to calc claim adj | 
|---|
| 237 | ; | 
|---|