| [613] | 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 |  ;
 | 
|---|