| [613] | 1 | IBCU65 ;ALB/ARH - BILL CHARGE UTILITY: COMBINE E&M ; 12/01/04
 | 
|---|
 | 2 |  ;;2.0;INTEGRATED BILLING;**287**;21-MAR-94
 | 
|---|
 | 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
 | 4 |  ;
 | 
|---|
 | 5 |  ; Combine (E&M) Charges on one bill: 
 | 
|---|
 | 6 |  ; 90801-90815, 90845-90899, 99201-99215, 99241-99245, 99271-99288, 99385-99387, 99395-99429, 99499
 | 
|---|
 | 7 |  ; For each of the procedures update the first line item to include both the professional and facility charge
 | 
|---|
 | 8 |  ; If there is another line item for the procedure then delete it (no bill CT)
 | 
|---|
 | 9 |  ;
 | 
|---|
 | 10 | ASKCMB(IBIFN) ; if the user requests, combine (E&M) charges on the bill
 | 
|---|
 | 11 |  N DIR,DIRUT,DTOUT,DUOUT,X,Y S IBIFN=+$G(IBIFN) Q:'IBIFN
 | 
|---|
 | 12 |  ;
 | 
|---|
 | 13 |  I '$$CHKBILL(IBIFN) Q  ; provider based bill with combinable procedures
 | 
|---|
 | 14 |  ;
 | 
|---|
 | 15 |  W !! S DIR("?")="Enter Yes to add both Institutional and Professional charge for E&M codes"
 | 
|---|
 | 16 |  S DIR("?",1)="The Professional and Facility charges of certain E&M codes may be combined onto"
 | 
|---|
 | 17 |  S DIR("?",2)="one line item on this bill.",DIR("?",3)=" "
 | 
|---|
 | 18 |  S DIR("B")="NO",DIR("A")="Combine Institutional and Professional Charges for E&M Procedures"
 | 
|---|
 | 19 |  S DIR(0)="Y" D ^DIR Q:$D(DIRUT)  Q:'Y
 | 
|---|
 | 20 |  ;
 | 
|---|
 | 21 |  I Y=1 D CHGCMB(IBIFN)
 | 
|---|
 | 22 |  Q
 | 
|---|
 | 23 |  ;
 | 
|---|
 | 24 | CHGCMB(IBIFN) ; combine certain E&M codes on the bill
 | 
|---|
 | 25 |  N IBRC,IBRC0,IBCPT,IBRCCT,IBMATCH,IBCHGS,IBTCHG,IBDONE,IBX K ^TMP($J,"IBCU65 CMB") Q:'$G(IBIFN)
 | 
|---|
 | 26 |  ;
 | 
|---|
 | 27 |  D BILLCHG(IBIFN) I '$D(^TMP($J,"IBCU65 CMB")) Q
 | 
|---|
 | 28 |  ;
 | 
|---|
 | 29 |  S IBRC=0 F  S IBRC=$O(^DGCR(399,IBIFN,"RC",IBRC)) Q:'IBRC  D
 | 
|---|
 | 30 |  . S IBRC0=$G(^DGCR(399,IBIFN,"RC",IBRC,0))
 | 
|---|
 | 31 |  . ;
 | 
|---|
 | 32 |  . S IBCPT=$P(IBRC0,U,6) Q:'IBCPT  I '$$CHKCODE(IBCPT) Q  ; charge must be for a combinable cpt
 | 
|---|
 | 33 |  . S IBRCCT=$P(IBRC0,U,12) I IBRCCT'=1,IBRCCT'=2 Q  ; must be a component charge
 | 
|---|
 | 34 |  . I '$P(IBRC0,U,8) Q  ; charge must be auto created
 | 
|---|
 | 35 |  . ;
 | 
|---|
 | 36 |  . S IBMATCH=$P(IBRC0,U,3)_U_IBCPT_U_$P(IBRC0,U,7)_U_$P(IBRC0,U,10)_U_$P(IBRC0,U,11)
 | 
|---|
 | 37 |  . ;
 | 
|---|
 | 38 |  . S IBCHGS=$G(^TMP($J,"IBCU65 CMB",IBMATCH)) Q:IBCHGS=""  ; find match
 | 
|---|
 | 39 |  . ;
 | 
|---|
 | 40 |  . I +$G(IBDONE(IBMATCH)) I $$RVDEL(IBIFN,IBRC) D  Q  ; if already combined delete line item
 | 
|---|
 | 41 |  .. S IBX(IBCPT_" "_IBRC)=$S(IBRCCT=1:"Facility",1:"Professional")_" Charge for "_IBCPT_" deleted "_$P(IBRC0,U,2)
 | 
|---|
 | 42 |  . ;
 | 
|---|
 | 43 |  . S IBTCHG=$P(IBCHGS,U,3) Q:'IBTCHG
 | 
|---|
 | 44 |  . ;
 | 
|---|
 | 45 |  . I $$RVCHG(IBIFN,IBRC,IBTCHG) S IBDONE(IBMATCH)=1 D  ; match found, combine charges
 | 
|---|
 | 46 |  .. S IBX(IBCPT_" "_IBRC)="Charge for "_IBCPT_" combined: "_$P(IBCHGS,U,1)_"+"_$P(IBCHGS,U,2)_"="_IBTCHG
 | 
|---|
 | 47 |  ;
 | 
|---|
 | 48 |  I '$D(ZTQUEUED),'$G(IBAUTO) S IBX="" F  S IBX=$O(IBX(IBX)) Q:IBX=""  W !,IBX(IBX)
 | 
|---|
 | 49 |  K ^TMP($J,"IBCU65 CMB")
 | 
|---|
 | 50 |  Q
 | 
|---|
 | 51 |  ;
 | 
|---|
 | 52 |  ;
 | 
|---|
 | 53 |  ;
 | 
|---|
 | 54 | RVDEL(IBIFN,RCIFN) ; delete charge line item, Output: 0/1
 | 
|---|
 | 55 |  ; Input:  IBIFN = Bill Number, RCIFN = Charge Line Item in RC multiple
 | 
|---|
 | 56 |  N IBX,DIK,DIC,X,Y,Z,Z1,DA,D0,D1,DG,DICR,DIG,DIH,DIW,DGXRF1 S IBX=0
 | 
|---|
 | 57 |  I $D(^DGCR(399,+$G(IBIFN),"RC",+$G(RCIFN),0)) D  S IBX=1
 | 
|---|
 | 58 |  . S DA(1)=+IBIFN,DA=+RCIFN,DIK="^DGCR(399,"_DA(1)_",""RC""," D ^DIK K DIK
 | 
|---|
 | 59 |  Q IBX
 | 
|---|
 | 60 |  ;
 | 
|---|
 | 61 | RVCHG(IBIFN,RCIFN,CHG) ; update line item charge and remove component, Output: 0/1
 | 
|---|
 | 62 |  ; Input:  IBIFN = Bill Number, RCIFN = Charge Line Item in RC multiple, CHG = New Charge Amount
 | 
|---|
 | 63 |  N IBX,DA,DIE,DIC,DR,X,Y,Z,Z1,D,D0,D1,DI,DQ,DGXRF1 S IBX=0
 | 
|---|
 | 64 |  I $D(^DGCR(399,+$G(IBIFN),"RC",+$G(RCIFN),0)) D  S IBX=1
 | 
|---|
 | 65 |  . S DA(1)=+IBIFN,DIE="^DGCR(399,"_DA(1)_",""RC"",",DR=".12///@;.02////"_+$G(CHG),DA=+RCIFN D ^DIE
 | 
|---|
 | 66 |  Q IBX
 | 
|---|
 | 67 |  ;
 | 
|---|
 | 68 |  ;
 | 
|---|
 | 69 | CHKCODE(CPT) ; return true if CPT code combinable
 | 
|---|
 | 70 |  N IBOUT S CPT=+$G(CPT) S IBOUT=0
 | 
|---|
 | 71 |  I (CPT<90800)!(CPT>99500) S IBOUT=0 G CHKCODQ
 | 
|---|
 | 72 |  ;
 | 
|---|
 | 73 |  I CPT>90800,CPT<90816 S IBOUT=1 G CHKCODQ
 | 
|---|
 | 74 |  I CPT>90844,CPT<90900 S IBOUT=1 G CHKCODQ
 | 
|---|
 | 75 |  I CPT>99200,CPT<99216 S IBOUT=1 G CHKCODQ
 | 
|---|
 | 76 |  I CPT>99240,CPT<99246 S IBOUT=1 G CHKCODQ
 | 
|---|
 | 77 |  I CPT>99270,CPT<99289 S IBOUT=1 G CHKCODQ
 | 
|---|
 | 78 |  I CPT>99384,CPT<99388 S IBOUT=1 G CHKCODQ
 | 
|---|
 | 79 |  I CPT>99394,CPT<99430 S IBOUT=1 G CHKCODQ
 | 
|---|
 | 80 |  I CPT=99499 S IBOUT=1
 | 
|---|
 | 81 |  ;
 | 
|---|
 | 82 | CHKCODQ Q IBOUT
 | 
|---|
 | 83 |  ;
 | 
|---|
 | 84 | CHKBILL(IBIFN) ; return true if combining charges is applicable or available for bill
 | 
|---|
 | 85 |  ; bill must be Provider Based and have at least one combinable procedure
 | 
|---|
 | 86 |  N IBOUT,IBX,IBY S IBOUT=0 S IBIFN=+$G(IBIFN) I 'IBIFN G CHKBILQ
 | 
|---|
 | 87 |  ;
 | 
|---|
 | 88 |  S IBX=$P($G(^DGCR(399,+IBIFN,0)),U,22) S IBY=$P($$RCDV^IBCRU8(IBX),U,3) I IBY'=1,IBY'=2 S IBOUT=0 G CHKBILQ
 | 
|---|
 | 89 |  ;
 | 
|---|
 | 90 |  S IBX="90800;" F  S IBX=$O(^DGCR(399,IBIFN,"CP","B",IBX)) Q:('IBX)!(+IBX>99499)  I +$$CHKCODE(+IBX) S IBOUT=1 Q
 | 
|---|
 | 91 |  ;
 | 
|---|
 | 92 | CHKBILQ Q IBOUT
 | 
|---|
 | 93 |  ;
 | 
|---|
 | 94 |  ;
 | 
|---|
 | 95 | BILLCHG(IBIFN) ; get all possible charges for bill with discounts applied
 | 
|---|
 | 96 |  ; output array of charges for combinable procedures
 | 
|---|
 | 97 |  ; Output: ^TMP($J,"IBCU65 CMB", "units ^ cpt ^ div ^ itm type ^ itm ptr") = inst chg ^ prof chg ^ total chg
 | 
|---|
 | 98 |  ;
 | 
|---|
 | 99 |  N IBX,IB0,IBU,IBBRT,IBBTYPE,IBCBARR,IBLN,IBCPT,IBCMP,IBSBCR,IBCHGI,IBCHGP
 | 
|---|
 | 100 |  K ^TMP($J,"IBCRCC"),^TMP($J,"IBCRCSX"),^TMP($J,"IBCRCSXR"),^TMP($J,"IBCRCSXN")
 | 
|---|
 | 101 |  K ^TMP($J,"IBCU65 TMP"),^TMP($J,"IBCU65 CMB") Q:'$G(IBIFN)
 | 
|---|
 | 102 |  I '$O(^DGCR(399,+IBIFN,"RC",0)) Q
 | 
|---|
 | 103 |  ;
 | 
|---|
 | 104 |  S IB0=$G(^DGCR(399,+IBIFN,0)) Q:IB0=""  S IBU=$G(^DGCR(399,+IBIFN,"U")) Q:'IBU
 | 
|---|
 | 105 |  S IBBRT=+$P(IB0,U,7),IBBTYPE=$S($P(IB0,U,5)<3:1,1:3)
 | 
|---|
 | 106 |  ;
 | 
|---|
 | 107 |  ; get standard set of charge sets available for bill, including all Instutional and Professional charge sets
 | 
|---|
 | 108 |  D RT^IBCRU3(IBBRT,IBBTYPE,$P(IBU,U,1,2),.IBCBARR,"PROCEDURE") I 'IBCBARR  Q
 | 
|---|
 | 109 |  ;
 | 
|---|
 | 110 |  ; get all possible charges and sort as they would be added to the bill, including all discounts applied
 | 
|---|
 | 111 |  D BILL^IBCRBH1(IBIFN,1,.IBCBARR),SORTCI^IBCRBH1(IBIFN)
 | 
|---|
 | 112 |  ;
 | 
|---|
 | 113 |  ;
 | 
|---|
 | 114 |  ; compile like charges for procedures that are combinable
 | 
|---|
 | 115 |  S IBX=0 F  S IBX=$O(^TMP($J,"IBCRCSX",IBX)) Q:'IBX  D
 | 
|---|
 | 116 |  . S IBLN=$G(^TMP($J,"IBCRCSX",IBX))
 | 
|---|
 | 117 |  . ;
 | 
|---|
 | 118 |  . S IBCPT=$P(IBLN,U,5) Q:'IBCPT  I '$$CHKCODE(IBCPT) Q  ; CPT must be defined and combinable
 | 
|---|
 | 119 |  . S IBCMP=+$P(IBLN,U,9) Q:'IBCMP  ; must be a component charge
 | 
|---|
 | 120 |  . I '$P(IBLN,U,8) Q  ; item pointer must be defined
 | 
|---|
 | 121 |  . I $P(IBLN,U,7)'=4 Q  ; item type must be cpt
 | 
|---|
 | 122 |  . ;
 | 
|---|
 | 123 |  . S IBSBCR=$P(IBLN,U,4,8)
 | 
|---|
 | 124 |  . S ^TMP($J,"IBCU65 TMP",IBSBCR)=+$G(^TMP($J,"IBCU65 TMP",IBSBCR))+1
 | 
|---|
 | 125 |  . S ^TMP($J,"IBCU65 TMP",IBSBCR,IBCMP)=IBLN
 | 
|---|
 | 126 |  ;
 | 
|---|
 | 127 |  ;
 | 
|---|
 | 128 |  ; compile array of combinable charges by procedure, must be combinable cpt and have both charges available
 | 
|---|
 | 129 |  S IBSBCR="" F  S IBSBCR=$O(^TMP($J,"IBCU65 TMP",IBSBCR)) Q:IBSBCR=""  D
 | 
|---|
 | 130 |  . I +$G(^TMP($J,"IBCU65 TMP",IBSBCR))'=2 Q
 | 
|---|
 | 131 |  . ;
 | 
|---|
 | 132 |  . S IBCHGI=$P($G(^TMP($J,"IBCU65 TMP",IBSBCR,1)),U,3) Q:'IBCHGI
 | 
|---|
 | 133 |  . S IBCHGP=$P($G(^TMP($J,"IBCU65 TMP",IBSBCR,2)),U,3) Q:'IBCHGP
 | 
|---|
 | 134 |  . ;
 | 
|---|
 | 135 |  . S ^TMP($J,"IBCU65 CMB",IBSBCR)=IBCHGI_U_IBCHGP_U_(IBCHGI+IBCHGP)
 | 
|---|
 | 136 |  ;
 | 
|---|
 | 137 |  ;
 | 
|---|
 | 138 |  K ^TMP($J,"IBCRCC"),^TMP($J,"IBCRCSX"),^TMP($J,"IBCRCSXR"),^TMP($J,"IBCRCSXN"),^TMP($J,"IBCU65 TMP")
 | 
|---|
 | 139 |  Q
 | 
|---|