| 1 | IBCEMRAB ;ALB/DSM - MEDICARE REMITTANCE ADVICE DETAIL-PART B ; 12/29/05 9:58am
 | 
|---|
| 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  ; this routine must be called at an entry point
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  ;  This routine prints MRA Report for CMS-1500 (Part B) Form Type
 | 
|---|
| 8 | PRNT ;
 | 
|---|
| 9 |  ; Claim Level Adjustments
 | 
|---|
| 10 |  N DIC,Y,IBEOB,IBILL,IBILLU,IBTD,IBFD,TOT,PRFRMID
 | 
|---|
| 11 |  D GDATA,HDR
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  ; Initialize Totals
 | 
|---|
| 14 |  S (TOT("ALWD"),TOT("SRVDED"),TOT("SRVCOIN"),TOT("SRVADJ"),TOT("PAID"))=0
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  ; Service Line Level Adjustments
 | 
|---|
| 17 |  I $D(^IBM(361.1,IEN,15)) D SRVPRNT I IBQUIT Q
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ; Print Totals Line
 | 
|---|
| 20 |  D TOTAL
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 |  ; Print Disclaimer
 | 
|---|
| 23 |  D DSCLMR^IBCEMRAX
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  Q  ;PRNT
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 | GDATA ; Get MRA data
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  N I
 | 
|---|
| 30 |  F I=0,1,2,3,6 S IBEOB(I)=$G(^IBM(361.1,IEN,I))
 | 
|---|
| 31 |  S IBILL=$G(^DGCR(399,$P(IBEOB(0),U),0)),IBILLU=$G(^DGCR(399,$P(IBEOB(0),U),"U"))
 | 
|---|
| 32 |  S IBTD=$$FMTE^XLFDT($P(IBILLU,U),5),IBFD=$$FMTE^XLFDT($P(IBILLU,U,2),5)
 | 
|---|
| 33 |  Q  ;GDATA
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 | HDR ; Print Header
 | 
|---|
| 36 |  I $E(IOST,1,2)["C-" W @IOF
 | 
|---|
| 37 |  S IBPGN=IBPGN+1
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ; Row 1,2,3
 | 
|---|
| 40 |  W !,?102,"Medicare-equivalent",!?104,"Remittance Advice",!
 | 
|---|
| 41 |  ; Row 7
 | 
|---|
| 42 |  W !!!!,"DEPT OF VETERANS AFFAIRS"
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  N PRVDR,LVL,STATE,LINE,PTNM,PTLEN,RMKS,HIC
 | 
|---|
| 45 |  ; Retrieve the Provider data from IB Site Parameters file - ^IBE(350.9)
 | 
|---|
| 46 |  S PRVDR=$G(^IBE(350.9,1,2))
 | 
|---|
| 47 |  ; ProviderName^AgentCashierAddress^City^State^Zip
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  F LVL=1:1:5 S PRVDR(LVL)=$P(PRVDR,U,LVL)
 | 
|---|
| 50 |  ; PRVDR(1)  Provider Name (Agent Cashier Mail Symbol)
 | 
|---|
| 51 |  ; PRVDR(2)  Agent Cashier Street Address
 | 
|---|
| 52 |  ; PRVDR(3)  Agent Cashier City
 | 
|---|
| 53 |  ; PRVDR(4)  Agent Cashier State
 | 
|---|
| 54 |  ; PRVDR(5)  Agent Cashier Zip
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 |  ; resolve the State File Pointer in PRVDR(4) & get State Abbreviation
 | 
|---|
| 57 |  S STATE=$S(PRVDR(4)'="":$P($G(^DIC(5,PRVDR(4),0)),U,2),1:"")
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 |  ; Row 8
 | 
|---|
| 60 |  W !,PRVDR(2),?97,"PROVIDER #:",?111,"VA0"_$P($$SITE^VASITE,U,3)
 | 
|---|
| 61 |  ; Row 9
 | 
|---|
| 62 |  W !,PRVDR(1),?97,"PAGE #:",?111,$J(IBPGN,3)
 | 
|---|
| 63 |  ; Row 10
 | 
|---|
| 64 |  W !,PRVDR(3),", ",STATE," ",PRVDR(5),?97,"DATE:",?111,$$FMTE^XLFDT($P(IBEOB(0),U,6),5)
 | 
|---|
| 65 |  ; Row 14
 | 
|---|
| 66 |  W !!!!,"PERF PROV",?12,"SERV DATE",?25,"POS",?29,"NOS",?34,"PROC",?40,"MODS",?53,"BILLED",?63,"ALLOWED",?75,"DEDUCT"
 | 
|---|
| 67 |  W ?87,"COINS",?93,"GRP-RC",?107,"AMT",?114,"PROV PD"
 | 
|---|
| 68 |  ; Row 15
 | 
|---|
| 69 |  S $P(LINE,"-",122)="" W !,LINE
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  ; format and standardize patient name for display
 | 
|---|
| 72 |  S PTNM("FILE")=2,PTNM("IENS")=$P(IBILL,U,2),PTNM("FIELD")=.01,PTLEN=23
 | 
|---|
| 73 |  S PTNM=$$BLDNAME^XLFNAME(.PTNM,PTLEN)
 | 
|---|
| 74 |  I $P(IBEOB(6),U,1)'="" S PTNM=$E($P(IBEOB(6),U,1),1,PTLEN)
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  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))
 | 
|---|
| 77 |  ; Row 17
 | 
|---|
| 78 |  ; Patient Name, HIC, ACNT, ICN, ASG
 | 
|---|
| 79 |  W !!,"NAME",?7,PTNM,?31,"HIC",?35,HIC
 | 
|---|
| 80 |  W ?49,"ACNT",?54,$P($$SITE^VASITE,U,3),"-",$P(IBILL,U),?76,"ICN",?80,$P(IBEOB(0),U,14)
 | 
|---|
| 81 |  W ?97,"ASG",?101,$S($P(IBILLU,U,6):"Y",1:"N")
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 |  ; MOA: Medicare Outpatient Remarks Code
 | 
|---|
| 84 |  S RMKS=$P(IBEOB(3),U,3,7) I RMKS="" S RMKS="^^^^"
 | 
|---|
| 85 |  W ?104,"MOA   " I RMKS'?1."^" W $P(RMKS,U,1)," ",$P(RMKS,U,2)
 | 
|---|
| 86 |  I $P(RMKS,U,3,5)'?1."^" S RMKS=$TR(RMKS,U," ") W !,RMKS
 | 
|---|
| 87 |  ; Secondary Performing Provider ID
 | 
|---|
| 88 |  ; On CMS-1500 Form Type reports, If Medicare WNR is Primary or Secondary, then set Performing Provider ID
 | 
|---|
| 89 |  I $$WNRBILL^IBEFUNC(IBIFN,1)!$$WNRBILL^IBEFUNC(IBIFN,2) S PRFRMID="V"_$$MCRSPEC^IBCEU4(IBIFN,1)_$P($$SITE^VASITE,U,3)
 | 
|---|
| 90 |  Q  ;HDR
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 | SRVPRNT ; Print Service Level Data of EOB file (#361.1 Level 15)
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  N LNLVL,RLVL,RLVLD,LNLVLD,SRVFDT,SRVTDT,UNIT,PRCD,MOD,I
 | 
|---|
| 95 |  N ALWD,GLVL,GLVLD,GRPCD,OPRCD,PAID,RCNT,SRMKS,SRVCOIN
 | 
|---|
| 96 |  N SRVDED,SRVADJ,SRVCHRG,SRVDT,CLMLN,Z
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  ; RLVLD=reason_code^amount^quantity^reason text
 | 
|---|
| 99 |  S LNLVL=0
 | 
|---|
| 100 |  F  S LNLVL=$O(^IBM(361.1,IEN,15,LNLVL)) Q:'LNLVL  S LNLVLD=^(LNLVL,0) D  I IBQUIT Q
 | 
|---|
| 101 |  . I ($Y+4)>IOSL D  I IBQUIT Q
 | 
|---|
| 102 |  . . D PAUSE^IBCEMRAX I IBQUIT Q
 | 
|---|
| 103 |  . . W @IOF D HDR
 | 
|---|
| 104 |  . ; From Service Date, To Service Date
 | 
|---|
| 105 |  . S SRVFDT=$P(LNLVLD,U,16),SRVTDT=$P(LNLVLD,U,17)
 | 
|---|
| 106 |  . S SRVFDT=$$FMTE^XLFDT(SRVFDT,5),SRVTDT=$$FMTE^XLFDT(SRVTDT,5)
 | 
|---|
| 107 |  . ; Get Units, Procedure Code, Original Procedure Code
 | 
|---|
| 108 |  . S UNIT=$P(LNLVLD,U,11),PRCD=$P(LNLVLD,U,4),OPRCD=$P(LNLVLD,U,15)
 | 
|---|
| 109 |  . S PAID=$P(LNLVLD,U,3),TOT("PAID")=TOT("PAID")+PAID    ; Provider Paid Amount
 | 
|---|
| 110 |  . S ALWD=$P(LNLVLD,U,13),TOT("ALWD")=TOT("ALWD")+ALWD   ; Allowed Amount
 | 
|---|
| 111 |  . ; Handle Multiple Paid Modifiers from the Service Line Level - string together
 | 
|---|
| 112 |  . K MOD M MOD=^IBM(361.1,IEN,15,LNLVL,2) S MOD="" F I=1:1:4 Q:'$D(MOD(I))  S MOD=MOD_MOD(I,0)
 | 
|---|
| 113 |  . ; Calculate Submitted Service Line Charge
 | 
|---|
| 114 |  . S CLMLN=$P(LNLVLD,U,12)   ; use to match EOB line # to VistA Bill line#
 | 
|---|
| 115 |  . S SRVCHRG=$P($G(IBZDATA(CLMLN)),U,8)*$P($G(IBZDATA(CLMLN)),U,9)
 | 
|---|
| 116 |  . ; Service Line Level Remarks Codes
 | 
|---|
| 117 |  . S Z=0 F  S Z=$O(^IBM(361.1,IEN,15,LNLVL,4,Z)) Q:'Z  I $G(^(Z,0))'="" S SRMKS(Z)=$P(^(0),U,2)
 | 
|---|
| 118 |  . ; Get Service Level Group Code/Reason Code Data
 | 
|---|
| 119 |  . S (SRVDED,GLVL,RCNT,SRVCOIN)=0 K RSNCD
 | 
|---|
| 120 |  . F  S GLVL=$O(^IBM(361.1,IEN,15,LNLVL,1,GLVL)) Q:'GLVL  S GLVLD=^(GLVL,0) D  ;
 | 
|---|
| 121 |  . . S GRPCD=$P(GLVLD,U),RLVL=0
 | 
|---|
| 122 |  . . F  S RLVL=$O(^IBM(361.1,IEN,15,LNLVL,1,GLVL,1,RLVL)) Q:'RLVL  S RLVLD=^(RLVL,0),RSNCD=$P(RLVLD,U) D  ;
 | 
|---|
| 123 |  . . . I GRPCD="PR",RSNCD="AAA" Q  ;exception
 | 
|---|
| 124 |  . . . I GRPCD="OA",RSNCD="AB3" Q  ;exception
 | 
|---|
| 125 |  . . . I GRPCD="LQ" Q              ;exception
 | 
|---|
| 126 |  . . . I GRPCD="PR",RSNCD=1 S SRVDED=SRVDED+$P(RLVLD,U,2),TOT("SRVDED")=TOT("SRVDED")+SRVDED Q  ;deductible
 | 
|---|
| 127 |  . . . I GRPCD="PR",RSNCD=2 S SRVCOIN=$P(RLVLD,U,2),TOT("SRVCOIN")=TOT("SRVCOIN")+SRVCOIN Q  ;coinsurance
 | 
|---|
| 128 |  . . . S SRVADJ=$P(RLVLD,U,2),TOT("SRVADJ")=TOT("SRVADJ")+SRVADJ  ;adjustment
 | 
|---|
| 129 |  . . . S RCNT=RCNT+1,RSNCD(RCNT)=GRPCD_"-"_RSNCD_U_SRVADJ
 | 
|---|
| 130 |  . ; Performing Provider ID
 | 
|---|
| 131 |  . W !,$G(PRFRMID)
 | 
|---|
| 132 |  . ; From Date in MMDD (w/leading zero) format
 | 
|---|
| 133 |  . I SRVFDT'="" S SRVDT=$E("00",1,2-$L(+SRVFDT))_+SRVFDT_$E("00",1,2-$L($P(SRVFDT,"/",2)))_$P(SRVFDT,"/",2) W ?12,SRVDT
 | 
|---|
| 134 |  . ; To Date in MMDDYY (w/leading zero) format
 | 
|---|
| 135 |  . I SRVTDT'="" W ?17,$E("00",1,2-$L(+SRVTDT)),+SRVTDT,$E("00",1,2-$L($P(SRVTDT,"/",2))),$P(SRVTDT,"/",2),$E($P(SRVTDT,"/",3),3,4)
 | 
|---|
| 136 |  . ; If To Date is Null, Print From Date with year (if not Null)
 | 
|---|
| 137 |  . I SRVTDT="",SRVFDT'="" W ?17,SRVDT,$E($P(SRVFDT,"/",3),3,4)
 | 
|---|
| 138 |  . ; Place of Service - from 837 Extract from CMS-1500 Service Line Level
 | 
|---|
| 139 |  . W ?25,$P($G(IBZDATA(CLMLN)),U,3)
 | 
|---|
| 140 |  . ; Print Units, Procedure Code Paid, Modifiers, Submitted Line Charge, Allowed Amt, Deductable, Coinsurance
 | 
|---|
| 141 |  . W ?28,UNIT,?34,PRCD,?40,MOD,?49,$J(SRVCHRG,10,2),?60,$J(ALWD,10,2),?71,$J(SRVDED,10,2),?82,$J(SRVCOIN,10,2)
 | 
|---|
| 142 |  . ; Print 1st Line of Group Code-Reason Code, Adjustment Amount, Paid Amount
 | 
|---|
| 143 |  . W ?93,$P($G(RSNCD(1)),U),?100,$J($P($G(RSNCD(1)),U,2),10,2),?111,$J(PAID,10,2)
 | 
|---|
| 144 |  . ; print PRCD Submitted, Remarks if any
 | 
|---|
| 145 |  . I OPRCD'=""!$O(SRMKS(0)) W ! D  ;
 | 
|---|
| 146 |  . . I OPRCD'="" W ?33,"(",OPRCD,")"
 | 
|---|
| 147 |  . . I $O(SRMKS(0)) W ?44,"REM: " S Z=0 F  S Z=$O(SRMKS(Z)) Q:'Z  W SRMKS(Z),$S($O(SRMKS(Z)):",",1:"")
 | 
|---|
| 148 |  . ; Print the rest of Group Code-Reason Code, Reason Code Amount
 | 
|---|
| 149 |  . F I=2:1:RCNT W !?93,$P(RSNCD(I),U),?100,$J($P(RSNCD(I),U,2),10,2)
 | 
|---|
| 150 |  Q  ;SRVPRNT
 | 
|---|
| 151 |  ;
 | 
|---|
| 152 | TOTAL ; Print Totals
 | 
|---|
| 153 |  W !!,"PT RESP ",$J($P($G(IBEOB(1)),U,2),10,2)  ;Patient Responsibility
 | 
|---|
| 154 |  ; Billed Amount, Allowed Amount, Deductable Amount
 | 
|---|
| 155 |  W ?35,"CLAIM TOTAL",?49,$J($P($G(IBEOB(2)),U,4),10,2),?60,$J(TOT("ALWD"),10,2),?71,$J(TOT("SRVDED"),10,2)
 | 
|---|
| 156 |  ; Coinsurance Amount, Adjustment Amount, Paid Amount
 | 
|---|
| 157 |  W ?82,$J(TOT("SRVCOIN"),10,2),?100,$J(TOT("SRVADJ"),10,2),?111,$J(TOT("PAID"),10,2)
 | 
|---|
| 158 |  Q  ;TOTAL
 | 
|---|
| 159 |  ;
 | 
|---|