| 1 | IBECEA3 ;ALB/CPM - Cancel/Edit/Add... Add a Charge ;30-MAR-93
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**7,57,52,132,150,153,166,156,167,176,198,188,183,202,240,312**;21-MAR-94
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | ADD ; Add a Charge protocol
 | 
|---|
| 6 |  N IBSWINFO S IBSWINFO=$$SWSTAT^IBBAPI()                     ;IB*2.0*312
 | 
|---|
| 7 |  N IBGMT,IBGMTR
 | 
|---|
| 8 |  S (IBGMT,IBGMTR)=0
 | 
|---|
| 9 |  S IBCOMMIT=0,IBEXSTAT=$$RXST^IBARXEU(DFN,DT),IBCATC=$$BILST^DGMTUB(DFN),IBCVAEL=$$CVA^IBAUTL5(DFN),IBLTCST=$$LTCST^IBAECU(DFN,DT,1)
 | 
|---|
| 10 |  ;I 'IBCVAEL,'IBCATC,'$G(IBRX),+IBEXSTAT<1 W !!,"This patient has never been Means Test billable." S VALMBCK="" D PAUSE^VALM1 G ADDQ1
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  ; - clear screen and begin
 | 
|---|
| 13 |  D CLOCK^IBAUTL3 I 'IBCLDA S (IBMED,IBCLDAY,IBCLDOL,IBCLDT)=0
 | 
|---|
| 14 |  D HDR^IBECEAU("A D D")
 | 
|---|
| 15 |  I IBY<0 D NODED^IBECEAU3 G ADDQ
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  ; - ask for the charge type
 | 
|---|
| 18 |  D CHTYP^IBECEA33 G:IBY<0 ADDQ
 | 
|---|
| 19 |  N IBAFEE S:$P($G(^IBE(350.1,+$G(IBATYP),0)),"^",8)="FEE SERVICE/OUTPATIENT" IBAFEE=IBATYP
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  ; - process CHAMPVA charges
 | 
|---|
| 22 |  I IBXA=6 D CHMPVA^IBECEA32 G ADDQ
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  ; - process TRICARE charges
 | 
|---|
| 25 |  I IBXA=7 D CUS^IBECEA35 G ADDQ
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  ; - display MT billing clock data
 | 
|---|
| 28 |  I IBXA=2,$P($G(^IBE(350.1,+IBATYP,0)),"^",8)'["NHCU",IBCLDAY>90 S IBMED=IBMED/2
 | 
|---|
| 29 |  I IBXA=1,IBCLDAY>90 D MED^IBECEA34 G:IBY<0 ADDQ
 | 
|---|
| 30 |  I "^1^2^3^"[("^"_IBXA_"^"),IBCLDA W !!,"  ** Active Billing Clock **   # Inpt Days: ",IBCLDAY,"    ",$$INPT^IBECEAU(IBCLDAY)," 90 days: $",+IBCLDOL,!
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  ; - display LTC billing clock data
 | 
|---|
| 33 |  I IBXA>7,IBXA<10 D  G:IBCLDA<1 ADDQ
 | 
|---|
| 34 |  . N IBCLZ
 | 
|---|
| 35 |  . S IBCLDA=$O(^IBA(351.81,"AE",DFN,9999999),-1)
 | 
|---|
| 36 |  . S:IBCLDA IBCLDA=$O(^IBA(351.81,"AE",DFN,IBCLDA,0))
 | 
|---|
| 37 |  . I 'IBCLDA W !!,"  ** Patient has no LTC billing clock **" Q
 | 
|---|
| 38 |  . S IBCLZ=^IBA(351.81,IBCLDA,0)
 | 
|---|
| 39 |  . W !!,"  **Last LTC Billing Clock    Start Date: ",$$FMTE^XLFDT($P(IBCLZ,"^",3)),"  Free Days Remaining: ",+$P(IBCLZ,"^",6)
 | 
|---|
| 40 |  . I $P(IBCLZ,"^",6) W !,"The patient must use his free days first." S IBCLDA=0
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  ; - ask units for rx copay charge
 | 
|---|
| 43 |  I IBXA=5 D UNIT^IBECEAU2(0) G ADDQ:IBY<0 D  G ADDQ:IBY<0 G PROC
 | 
|---|
| 44 |  . ;
 | 
|---|
| 45 |  . ; has patient been previously tracked for cap info
 | 
|---|
| 46 |  . D TRACK^IBARXMN(DFN)
 | 
|---|
| 47 |  . ;
 | 
|---|
| 48 |  . D CTBB^IBECEAU3
 | 
|---|
| 49 |  . ;
 | 
|---|
| 50 |  . ; check if above cap
 | 
|---|
| 51 |  . I IBY'<0 D
 | 
|---|
| 52 |  .. N IBB,IBN,DIR,DIRUT,DUOUT,DTOUT,X,Y
 | 
|---|
| 53 |  .. D NEW^IBARXMC(1,IBCHG,DT,.IBB,.IBN) Q:'IBN
 | 
|---|
| 54 |  .. ;
 | 
|---|
| 55 |  .. ; display message ask to proceed
 | 
|---|
| 56 |  .. W !!,"This charge will put the patient > $",$J(IBN,0,2)," above their cap amount."
 | 
|---|
| 57 |  .. S DIR(0)="Y",DIR("A")="Okay to proceed" D ^DIR S:'Y IBY=-1
 | 
|---|
| 58 |  .. ;
 | 
|---|
| 59 |  S IBLIM=$S(IBXA=4!(IBXA=3):DT,1:$$FMADD^XLFDT(DT,-1))
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 | FR ; - ask 'bill from' date
 | 
|---|
| 62 |  D FR^IBECEAU2(0) G:IBY<0 ADDQ
 | 
|---|
| 63 |  ; Do NOT PROCESS on VistA if IBFR>=Switch Eff Date          ;CCR-930
 | 
|---|
| 64 |  I +IBSWINFO,(IBFR+1)>$P(IBSWINFO,"^",2) D  G FR             ;IB*2.0*312
 | 
|---|
| 65 |    .W !!,"The 'Bill From' date cannot be on or AFTER the PFSS Effective Date"
 | 
|---|
| 66 |    .W ": ",$$FMTE^XLFDT($P(IBSWINFO,"^",2))
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  S IBGMT=$$ISGMTPT^IBAGMT(DFN,IBFR),IBGMTR=0 ;GMT Copayment Status
 | 
|---|
| 69 |  I IBGMT>0,IBXA>0,IBXA<4 W !,"The patient has GMT Copayment Status."
 | 
|---|
| 70 |  ; - check the MT billing clock
 | 
|---|
| 71 |  I IBXA'=8,IBXA'=9 D CLMSG^IBECEA33 G:IBY<0 ADDQ
 | 
|---|
| 72 |  ;Adjust Deductible for GMT patient
 | 
|---|
| 73 |  I IBGMT>0,IBXA>0,IBXA<4,$G(IBMED) S IBMED=$$REDUCE^IBAGMT(IBMED) W !,"Medicare Deductible reduced due to GMT Copayment Status ($",$J(IBMED,"",2),")."
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 |  ; - check the LTC billing clock
 | 
|---|
| 76 |  I IBXA>7,IBXA<10 D  I IBY<0 W !!,"The patient has no LTC clock active for the date.",! G ADDQ
 | 
|---|
| 77 |  . N IBCLZ S IBCLZ=^IBA(351.81,IBCLDA,0)
 | 
|---|
| 78 |  . ;
 | 
|---|
| 79 |  . ; is this the clock and within the date range
 | 
|---|
| 80 |  . I IBFR'<$P(IBCLZ,"^",3),$$YR^IBAECU($P(IBCLZ,"^",3),IBFR) S IBY=-1 Q
 | 
|---|
| 81 |  . ;
 | 
|---|
| 82 |  . ; look for another clock that might fit the date
 | 
|---|
| 83 |  . I IBFR<$P(IBCLZ,"^",3) S IBCLDA=$O(^IBA(351.81,"AE",DFN,IBFR+1),-1) I 'IBCLDA!($$YR^IBAECU($P($G(^IBA(351.81,+IBCLDA,0)),"^",3),IBFR)) S IBY=-1
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 |  ; - calculate the MT inpt copay charge
 | 
|---|
| 86 |  I IBXA=2 S IBDT=IBFR D COPAY^IBAUTL2 G ADDQ:IBY<0 S:IBGMT>0 IBGMTR=1,IBCHG=$$REDUCE^IBAGMT(IBCHG) I IBCHG+IBCLDOL<IBMED W *7,"   ($",IBCHG,"/day)" W:IBGMTR " GMT Rate"
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  ; - find the correct clock from the 'bill from' date (ignore LTC)
 | 
|---|
| 89 |  I IBXA'=8,IBXA'=9,('IBCLDA!(IBCLDA&(IBFR<IBCLDT))) D NOCL^IBECEA33 G:IBY<0 ADDQ
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  ; - perform outpatient edits
 | 
|---|
| 92 |  N IBSTOPDA
 | 
|---|
| 93 |  I IBXA=4 D  G ADDQ:IBY<0,PROC
 | 
|---|
| 94 |  .   ;  for visits prior to 12/6/01 or FEE
 | 
|---|
| 95 |  .   I IBFR<3011206!($G(IBAFEE)) D OPT^IBECEA33 Q
 | 
|---|
| 96 |  .   ;  for visits on or after 12/5/01
 | 
|---|
| 97 |  .   D OPT^IBEMTSCU
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 |  ; - if LTC outpatient calculate the charge
 | 
|---|
| 100 |  I IBXA=8 D  G:IBY<0 ADDQ S (IBDT,IBTO,IBEVDT)=IBFR,IBDESC=$P(^IBE(350.1,IBATYP,0),"^",8),IBUNIT=1,IBEVDA="*" D COST^IBAUTL2,CALC^IBAECO,CTBB^IBECEAU3 G @$S(IBCHG:"PROC",1:"ADDQ")
 | 
|---|
| 101 |  . ;
 | 
|---|
| 102 |  . ; is this day already a free day
 | 
|---|
| 103 |  . I $D(^IBA(351.81,IBCLDA,1,"AC",IBFR)) W !!,"This day is already marked as a Free Day." S IBY=-1
 | 
|---|
| 104 |  . ;
 | 
|---|
| 105 |  . ; have we already billed for this day
 | 
|---|
| 106 |  . I $D(^IB("AFDT",DFN,-IBFR)) W !!,"This patient has already been billed for this date." S IBY=-1
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  ; - find per diem charge and description
 | 
|---|
| 109 |  I IBXA=3 D  I 'IBCHG W !!,"Unable to determine the per diem rate.  Please check your rate table." G ADDQ
 | 
|---|
| 110 |  .N IBDT S IBDT=IBFR,IBGMTR=0 D COST^IBAUTL2
 | 
|---|
| 111 |  .I IBGMT>0 S IBGMTR=1,IBCHG=$$REDUCE^IBAGMT(IBCHG)
 | 
|---|
| 112 |  .S IBDESC="" X:$D(^IBE(350.1,IBATYP,20)) ^(20)
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 |  ; - calculate charge for the inpatient copay
 | 
|---|
| 115 |  I IBXA=2,IBCHG+IBCLDOL'<IBMED S IBCHG=IBMED-IBCLDOL,IBUNIT=1,IBTO=IBFR D CTBB^IBECEAU3 G EV
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 | TO ; - ask 'bill to' date
 | 
|---|
| 118 |  D TO^IBECEAU2(0) G:IBY<0 ADDQ
 | 
|---|
| 119 |  ; Do NOT PROCESS on VistA if IBTO>=Switch Eff Date         ;CCR-930
 | 
|---|
| 120 |  I +IBSWINFO,(IBTO+1)>$P(IBSWINFO,"^",2) D  G TO            ;IB*2.0*312
 | 
|---|
| 121 |   .W !!,"The 'Bill To' date cannot be on or AFTER the PFSS Effective Date"
 | 
|---|
| 122 |   .W ": ",$$FMTE^XLFDT($P(IBSWINFO,"^",2))
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |  I IBXA>0,IBXA<4,IBGMT'=$$ISGMTPT^IBAGMT(DFN,IBTO) W !!,"The patient's GMT Copayment status changed within the specified period!",! G ADDQ
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 |  ; - calculate unit charge for LTC inpatient in IBCHG
 | 
|---|
| 127 |  I IBXA=9 S IBDT=IBFR,IBEVDA=$$EVF^IBECEA31(DFN,IBFR,IBTO,IBNH),IBEVDT=$E(IBFR,1,5)_"01" D:IBEVDA<1  G ADDQ:IBY<0 D COST^IBAUTL2 I $E(IBFR,1,5)'=$E(IBTO,1,5) W !!,"  LTC Copayment charges cannot go from one month to another." G ADDQ
 | 
|---|
| 128 |  . D NOEV^IBECEA31 I '$G(IBDG)!(IBY<0) S IBY=-1 Q
 | 
|---|
| 129 |  . ; - build the event record
 | 
|---|
| 130 |  . N IBNHLTC S IBNHLTC=1 D ADEV^IBECEA31
 | 
|---|
| 131 |  ;
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 |  ; - calculate units and total charge
 | 
|---|
| 134 |  S IBUNIT=$$FMDIFF^XLFDT(IBTO,IBFR) S:IBXA'=3!(IBFR=IBTO) IBUNIT=IBUNIT+1
 | 
|---|
| 135 |  I IBXA=1 D:IBGMT>0  D FEPR^IBECEA32 G ADDQ:IBY<0,EV
 | 
|---|
| 136 |  . S IBGMTR=1
 | 
|---|
| 137 |  . W !,"The patient has GMT Copayment Status! GMT rate must be applied.",!
 | 
|---|
| 138 |  S IBCHG=IBCHG*IBUNIT S:IBXA=2 IBCHG=$S(IBCLDOL+IBCHG>IBMED:IBMED-IBCLDOL,1:IBCHG)
 | 
|---|
| 139 |  ;
 | 
|---|
| 140 |  ; adjust the LTC charge based on the calculated copay cap
 | 
|---|
| 141 |  I IBXA=9 D CALC^IBAECI G:IBY<1!('IBCHG) ADDQ S IBDESC="LTC INPATIENT COPAY"
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 |  D CTBB^IBECEAU3 W:IBXA=3!(IBXA=9) "  (for ",IBUNIT," day",$E("s",IBUNIT>1),")" W:IBGMTR " GMT Rate"
 | 
|---|
| 144 |  ;
 | 
|---|
| 145 | EV ; - find event record, or select admission for linkage
 | 
|---|
| 146 |  I IBXA'=9 S IBEVDA=$$EVF^IBECEA31(DFN,IBFR,IBTO,IBNH)
 | 
|---|
| 147 |  I IBEVDA'>0 D NOEV^IBECEA31 G ADDQ:IBY<0,PROC
 | 
|---|
| 148 |  S IBSL=$P($G(^IB(+IBEVDA,0)),"^",4)
 | 
|---|
| 149 |  W !!,"Linked charge to ",$$TYP(),"admission on ",$$DAT1^IBOUTL($P(IBEVDA,"^",2)),"  ("
 | 
|---|
| 150 |  W $S($P(IBEVDA,"^",3)=9999999:"Still admitted)",1:"Discharged on "_$$DAT1^IBOUTL($P(IBEVDA,"^",3))_$S($P(IBEVDA,"^",3)>DT:" [pseudo])",1:")"))," ..."
 | 
|---|
| 151 |  S IBEVDA=+IBEVDA
 | 
|---|
| 152 |  I '$G(IBSIBC) D SPEC^IBECEA32(0,$O(^IBE(351.2,"AD",IBEVDA,0)))
 | 
|---|
| 153 |  ;
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 | PROC ; - okay to proceed?
 | 
|---|
| 156 |  D PROC^IBECEAU4("add") G:IBY<0 ADDQ
 | 
|---|
| 157 |  ;
 | 
|---|
| 158 |  ; - build the event record first if necessary
 | 
|---|
| 159 |  I $G(IBDG),IBXA'=9 D @("ADEV^IBECEA3"_$S($G(IBFEEV):4,1:1)) G:IBY<0 ADDQ
 | 
|---|
| 160 |  ;
 | 
|---|
| 161 |  ; - disposition the special inpatient billing case, if necessary
 | 
|---|
| 162 |  I $G(IBSIBC) D CEA^IBAMTI1(IBSIBC,IBEVDA)
 | 
|---|
| 163 |  ;
 | 
|---|
| 164 |  ; - generate entry in file #354.71 and #350
 | 
|---|
| 165 |  I IBXA=5 W !!,"Building the new transaction...  " S IBAM=$$ADD^IBARXMN(DFN,"^^"_DT_"^^P^^"_IBUNIT_"^"_IBCHG_"^"_IBDESC_"^^"_IBCHG_"^0^"_IBSITE) G:IBAM<0 ADDQ
 | 
|---|
| 166 |  D ADD^IBECEAU3 G:IBY<0 ADDQ W "done."
 | 
|---|
| 167 |  ;
 | 
|---|
| 168 |  ; - pass the charge off to AR on-line
 | 
|---|
| 169 |  W !,"Passing the charge directly to Accounts Receivable... "
 | 
|---|
| 170 |  D PASSCH^IBECEA22 W:IBY>0 "done." G:IBY<0 ADDQ
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 |  ; - review the special inpatient billing case
 | 
|---|
| 173 |  I $G(IBSIBC1) D CHK^IBAMTI1(IBSIBC1,IBEVDA)
 | 
|---|
| 174 |  ;
 | 
|---|
| 175 |  ; - handle updating of clock
 | 
|---|
| 176 |  I IBXA'=8,IBXA'=9 D CLUPD^IBECEA32
 | 
|---|
| 177 |  ;
 | 
|---|
| 178 | ADDQ ; - display error, rebuild list, and quit
 | 
|---|
| 179 |  D ERR^IBECEAU4:IBY<0,PAUSE^IBECEAU S VALMBCK="R"
 | 
|---|
| 180 |  I IBCOMMIT S IBBG=VALMBG W !,"Rebuilding list of charges..." D ARRAY^IBECEA0 S VALMBG=IBBG
 | 
|---|
| 181 |  K IBMED,IBCLDA,IBCLDT,IBCLDOL,IBCLDAY,IBATYP,IBDG,IBSEQNO,IBXA,IBNH,IBBS,IBLIM,IBFR,IBTO,IBRTED,IBSIBC,IBSIBC1,IBBG,IBFEEV,IBAM
 | 
|---|
| 182 |  K IBX,IBCHG,IBUNIT,IBDESC,IBDT,IBEVDT,IBEVDA,IBSL,IBNOS,IBN,IBTOTL,IBARTYP,IBIL,IBTRAN,IBAFY,IBCVA,IBCLSF,IBDD,IBND,VADM,VA,VAERR,IBADJMED
 | 
|---|
| 183 | ADDQ1 K IBEXSTAT,IBCOMMIT,IBCATC,IBCVAEL,IBLTCST
 | 
|---|
| 184 |  Q
 | 
|---|
| 185 |  ;
 | 
|---|
| 186 |  ;
 | 
|---|
| 187 | TYP() ; Return descriptive admission type.
 | 
|---|
| 188 |  N X S X=""
 | 
|---|
| 189 |  I IBNH'=2 G TYPQ
 | 
|---|
| 190 |  I $G(IBADJMED) S X=$S(IBADJMED=1:"C",1:"H")
 | 
|---|
| 191 |  E  S X=$S($P($G(^IBE(350.1,+IBATYP,0)),"^")["NHCU":"C",1:"H")
 | 
|---|
| 192 |  S X=$S(X="C":"CNH ",1:"Contract Hospital ")
 | 
|---|
| 193 | TYPQ Q X
 | 
|---|