- Timestamp:
- Dec 4, 2009, 12:11:15 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
WorldVistAEHR/trunk/r/INTEGRATED_BILLING-IB-PRQ--IBD--IBQ--PRQS/IBCRBC.m
r613 r623 1 IBCRBC ;ALB/ARH - RATES: BILL CALCULATION OF CHARGES ; 22-MAY-1996 2 ;;2.0;INTEGRATED BILLING;**52,80,106,51,137,245,370**;21-MAR-94;Build 5 3 ;;Per VHA Directive 2004-038, this routine should not be modified. 4 ; 5 ; Variable DGPTUPDT may be defined on entry/exit for inpt bills so the PTF will only be updated once per session 6 ; Charges may be filed on the bill and if IBRSARR is passed but does not exist it may be updated 7 ; otherwise there are no other outputs/results of this call. 8 ; 9 BILL(IBIFN,IBRSARR) ; given a bill number calculate and store all charges 10 ; if IBRSARR is defined it will be used to create charges rather than the standard set for the bills Rate Type 11 ; 12 N IB0,IBU,IBBRT,IBBTYPE,IBCTYPE,DFN,PTF,IBDGPT,IBRS,IBCS,IBBEVNT Q:'$G(IBIFN) 13 K ^TMP($J,"IBCRCC"),^TMP($J,"IBCRCS") 14 ; 15 S IB0=$G(^DGCR(399,+IBIFN,0)) Q:IB0="" S IBU=$G(^DGCR(399,+IBIFN,"U")) Q:'IBU 16 S IBBRT=+$P(IB0,U,7),IBBTYPE=$S($$INPAT^IBCEF(IBIFN):1,1:3),IBCTYPE=+$P(IB0,U,27),DFN=$P(IB0,U,2) Q:'DFN 17 ; 18 ; if who's responsible is insurer, but bill has no insurer defined quit 19 I $P(IB0,U,11)="i",'$G(^DGCR(399,+IBIFN,"MP")),'$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN)) Q 20 ; 21 ; if inpt bill, PTF Status is Open, not a Fee Basis record and not previously done then Update the PTF record 22 I IBBTYPE<3,'$D(DGPTUPDT) S PTF=$P(IB0,U,8) Q:'PTF S IBDGPT=$G(^DGPT(+PTF,0)) Q:IBDGPT="" D 23 . I '$P(IBDGPT,U,6),'$P(IBDGPT,U,4) D UPDT^DGPTUTL S DGPTUPDT="" 24 ; 25 ; 26 D DSPDL^IBCRBC3,DELALLRC^IBCRBF(IBIFN) ; delete all existing auto charges on the bill 27 ; 28 ; get standard set of all rate schedules and charge sets available for entire date range of the bill 29 I '$D(IBRSARR) D RT^IBCRU3(IBBRT,IBBTYPE,$P(IBU,U,1,2),.IBRSARR,"",IBCTYPE) I 'IBRSARR G END 30 ; 31 ; process charge sets - set all charges for the bill into array 32 S IBRS=0 F S IBRS=$O(IBRSARR(IBRS)) Q:'IBRS D 33 . S IBCS=0 F S IBCS=$O(IBRSARR(IBRS,IBCS)) Q:'IBCS I +IBRSARR(IBRS,IBCS) D 34 .. S IBBEVNT=+$P($G(^IBE(363.1,+IBCS,0)),U,3) Q:'IBBEVNT S IBBEVNT=$$EMUTL^IBCRU1(IBBEVNT) Q:IBBEVNT="" 35 .. ; 36 .. I IBBEVNT["INPATIENT BEDSECTION STAY" D INPTBS^IBCRBC1(IBIFN,IBRS,IBCS) 37 .. I IBBEVNT["INPATIENT DRG" D INPTDRG^IBCRBC11(IBIFN,IBRS,IBCS) 38 .. I IBBEVNT["OUTPATIENT VISIT DATE" D OPTVST^IBCRBC1(IBIFN,IBRS,IBCS) 39 .. I IBBEVNT["PRESCRIPTION" D RX^IBCRBC1(IBIFN,IBRS,IBCS) 40 .. I IBBEVNT["PROSTHETICS" D PI^IBCRBC1(IBIFN,IBRS,IBCS) 41 .. I IBBEVNT["PROCEDURE" D CPT^IBCRBC1(IBIFN,IBRS,IBCS) 42 ; 43 I '$D(^TMP($J,"IBCRCC")) G END 44 ; 45 D SORTCI^IBCRBC3 I '$D(^TMP($J,"IBCRCS")) G END 46 ; 47 D ADDBCHGS^IBCRBC3(IBIFN) 48 ; 49 D MAILADD(IBIFN,IBBTYPE) 50 ; 51 END I $D(^TMP("IBCRRX",$J)) D CLEANRX^IBCRBC3(IBIFN) 52 K ^TMP($J,"IBCRCC"),^TMP($J,"IBCRCS") 53 Q 54 ; 55 MAILADD(IBIFN,BTYPE) ; update the bill mailing address: it may be based on the types of charges 56 ; an outpatient bill may go to either the opt or rx mailing addresses depending on the types of charges 57 N DA,IB01,IB02 58 I $G(BTYPE)>2,+$G(IBIFN),$D(^IBA(362.4,"C",+IBIFN)),+$$CHGTYPE^IBCU(+IBIFN)=3 S DA=IBIFN D MAILA^IBCU5 D 59 . I '$D(ZTQUEUED),'$G(IBAUTO) W !!,"Updating Bill Mailing Address" 60 Q 61 ; 62 BILLITEM(IBIFN,IBITMARR) ; add selected unassociated item charges to the bill 63 N IBRS,IBCS,IBBEVNT K ^TMP($J,"IBCRCC"),^TMP($J,"IBCRCS") 64 ; 65 S IBRS=0 F S IBRS=$O(IBITMARR(IBRS)) Q:'IBRS D 66 . S IBCS=0 F S IBCS=$O(IBITMARR(IBRS,IBCS)) Q:'IBCS D 67 .. S IBBEVNT=+$P($G(^IBE(363.1,+IBCS,0)),U,3) Q:'IBBEVNT S IBBEVNT=$$EMUTL^IBCRU1(IBBEVNT) Q:IBBEVNT="" 68 .. ; 69 .. I IBBEVNT["UNASSOCIATED" D UNASSOC^IBCRBC11(IBIFN,IBRS,IBCS,.IBITMARR) 70 ; 71 I $D(^TMP($J,"IBCRCC")) D SORTCI^IBCRBC3 72 ; 73 I $D(^TMP($J,"IBCRCS")) D ADDBCHGS^IBCRBC3(IBIFN) 74 ; 75 K ^TMP($J,"IBCRCC"),^TMP($J,"IBCRCS") 76 Q 77 ; 78 ; 79 ; 80 ; There are 3 types of charges/items: 81 ; - ITEM: charge for an individual item: specific item has one or more charge entries in 363.2 82 ; for the charge to be applied to the bill the specific item must be found on the bill 83 ; 84 ; - EVENT: charge for an event, not an item: items are defined in 363.2 85 ; all charge items active on a date in the set define the charge for the event 86 ; the item does not need to be defined on the bill for the charge to be applied to the bill 87 ; the charge set on a date becomes the events charge, so effective date cuts across item and applies to event 88 ; all charge items with the same effective date are used to calculate the event charge for that date 89 ; each charge item effective date in the set overrides all previous entries in the set regardless of item 90 ; 91 ; - VA COST: charge for an individual item but no entries in 363.2 92 ; instead the charge is calculated/obtained when it is needed from an interface with the source package 93 ; 94 ; 95 ; Auto calculation and filing of a bills charges 96 ; 97 ; IBCRBC (BILL) - determine if charges can be calculated and which rates (RS/CS) should be used 98 ; then find billable items/events, calculate and store the charges 99 ; called anytime a bills charges need to be updated 100 ; 101 ; IBCRBC1 (event) - gather billable items/events for each billable event type 102 ; then accumulate all charges for the bill for each billable event/item 103 ; 104 ; IBCRCGx (event) - pull billable items/events from the bill 105 ; IBCRBC2 (BITMCHRG) - calculate charges for billable item/event 106 ; 107 ; IBCRBC3 (SORTCI) - sort accumulated charges into order to store on bill, combine if possible 108 ; IBCRBC3 (ADDBCHRGS) - store the sorted accumulated charges on the bill 109 ; 110 ; 111 ; The Billable Event of the Charge Set is directly related to the Type of charge assigned 112 ; to the charges calculated for that Charge Set. So, Billable Event (363.1,.03) <-> Type (399,42,.1) 113 ; 114 ; 115 ; ^TMP($J,"IBCRCC") - array containing raw charges for a bill and related data, created in IBRCBC2 116 ; ^TMP($J,"IBCRCC",X) = 1 charge item ifn 117 ; 2 charge set ifn 118 ; 3 rate schedule ifn 119 ; 4 item ptr (to source) 120 ; 5 cpt modifier ptr 121 ; 6 revenue code ptr 122 ; 7 billable bedsection (bill) 123 ; 8 event date (visit or st from or admission) 124 ; 9 charge per unit/qty 125 ; 10 units/qty (qty of item) 126 ; 11 total charge per unit/qty 127 ; 12 adjusted total charge per unit/qty 128 ; 13 units (# item on bill) 129 ; 14 CPT ptr 130 ; 15 division ptr 131 ; 16 item type (source) 132 ; 17 item ptr (to source) 133 ; 18 charge component 134 ; 19 billable bedsection (for item) 135 ; 20 procedure provider 136 ; 21 procedures associated clinic 137 ; 22 procedures Outpatient Encounter, pointer to #409.68 138 ; 23 list of all the procedures modifiers, separated by ',' 139 ; 140 ; ^TMP($J,"IBCRCC",X,"CC",x) = comments explaining charge adjustements 141 ; 142 ; ^TMP($J,"IBCRCS") - array of charges from IBCRCC in sorted order and with only data needed to save on bill 143 ; ^TMP($J,"IBCRCS", BS, RV, X) = 1 revenue code ptr 144 ; 2 bedsection ptr 145 ; 3 charge per units (adjusted total charge) 146 ; 4 units (# item on bill) 147 ; 5 CPT ptr 148 ; 6 division ptr 149 ; 7 item type 150 ; 8 item ptr 151 ; 9 charge component 152 ; 153 ; 154 ; 155 ; Inpatient Bill Dates use follow rules: 156 ; - admission date is counted as billable 157 ; - the discharge date is not billable and is not counted 158 ; 159 ; - if admission movement is found in the Patient Movement file then the dates of admission and discharge 160 ; will be used as the outside limits of the LOS, even if date range of the bill is longer (LOS^IBCU64) 161 ; 162 ; - a day is counted as billable to the bedsection the patient was in at the end of the day (ie. counted 163 ; in LOS of next movement after midnight) 164 ; - if there is a movement on any given date that date is included in the LOS of the bedsection the patient 165 ; moved into (same as admission date) 166 ; - if there is a movement on any given date that date is NOT included in the LOS of the bedsection the 167 ; patient moved out of (same as discharge date) 168 ; 169 ; - if the time frame of the bill is: 170 ; - either interim-first or interim-continuous the last date on the bill should be billed 171 ; - if the last date is counted it is added to the LOS of the bedsection the patient was in at the end 172 ; of the day 173 ; - either NOT interim-first or interim-continuous (final bills) the last date on the bill 174 ; should NOT be billed (i.e. this is considered the discharge date) 175 ; 176 ; - start with first bedsection after begin date, day is counted in the bedsection the patient is in at midnight 177 ; - continuous: last bedsection counted is the bedsection the patient is in at midnight of the end date 178 ; - final:last bedsection counted is the bedsection the patient is in at midnight of the day before the end date 179 ; 1 IBCRBC ;ALB/ARH - RATES: BILL CALCULATION OF CHARGES ; 22-MAY-1996 2 ;;2.0;INTEGRATED BILLING;**52,80,106,51,137,245**;21-MAR-94 3 ;;Per VHA Directive 10-93-142, this routine should not be modified. 4 ; 5 ; Variable DGPTUPDT may be defined on entry/exit for inpt bills so the PTF will only be updated once per session 6 ; Charges may be filed on the bill and if IBRSARR is passed but does not exist it may be updated 7 ; otherwise there are no other outputs/results of this call. 8 ; 9 BILL(IBIFN,IBRSARR) ; given a bill number calculate and store all charges 10 ; if IBRSARR is defined it will be used to create charges rather than the standard set for the bills Rate Type 11 ; 12 N IB0,IBU,IBBRT,IBBTYPE,IBCTYPE,DFN,PTF,IBDGPT,IBRS,IBCS,IBBEVNT Q:'$G(IBIFN) 13 K ^TMP($J,"IBCRCC"),^TMP($J,"IBCRCS") 14 ; 15 S IB0=$G(^DGCR(399,+IBIFN,0)) Q:IB0="" S IBU=$G(^DGCR(399,+IBIFN,"U")) Q:'IBU 16 S IBBRT=+$P(IB0,U,7),IBBTYPE=$S($$INPAT^IBCEF(IBIFN):1,1:3),IBCTYPE=+$P(IB0,U,27),DFN=$P(IB0,U,2) Q:'DFN 17 ; 18 ; if who's responsible is insurer, but bill has no insurer defined quit 19 I $P(IB0,U,11)="i",'$G(^DGCR(399,+IBIFN,"MP")),'$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN)) Q 20 ; 21 ; if inpt bill, PTF Status is Open, not a Fee Basis record and not previously done then Update the PTF record 22 I IBBTYPE<3,'$D(DGPTUPDT) S PTF=$P(IB0,U,8) Q:'PTF S IBDGPT=$G(^DGPT(+PTF,0)) Q:IBDGPT="" D 23 . I '$P(IBDGPT,U,6),'$P(IBDGPT,U,4) D UPDT^DGPTUTL S DGPTUPDT="" 24 ; 25 ; 26 D DSPDL^IBCRBC3,DELALLRC^IBCRBF(IBIFN) ; delete all existing auto charges on the bill 27 ; 28 ; get standard set of all rate schedules and charge sets available for entire date range of the bill 29 I '$D(IBRSARR) D RT^IBCRU3(IBBRT,IBBTYPE,$P(IBU,U,1,2),.IBRSARR,"",IBCTYPE) I 'IBRSARR G END 30 ; 31 ; process charge sets - set all charges for the bill into array 32 S IBRS=0 F S IBRS=$O(IBRSARR(IBRS)) Q:'IBRS D 33 . S IBCS=0 F S IBCS=$O(IBRSARR(IBRS,IBCS)) Q:'IBCS I +IBRSARR(IBRS,IBCS) D 34 .. S IBBEVNT=+$P($G(^IBE(363.1,+IBCS,0)),U,3) Q:'IBBEVNT S IBBEVNT=$$EMUTL^IBCRU1(IBBEVNT) Q:IBBEVNT="" 35 .. ; 36 .. I IBBEVNT["INPATIENT BEDSECTION STAY" D INPTBS^IBCRBC1(IBIFN,IBRS,IBCS) 37 .. I IBBEVNT["INPATIENT DRG" D INPTDRG^IBCRBC11(IBIFN,IBRS,IBCS) 38 .. I IBBEVNT["OUTPATIENT VISIT DATE" D OPTVST^IBCRBC1(IBIFN,IBRS,IBCS) 39 .. I IBBEVNT["PRESCRIPTION" D RX^IBCRBC1(IBIFN,IBRS,IBCS) 40 .. I IBBEVNT["PROSTHETICS" D PI^IBCRBC1(IBIFN,IBRS,IBCS) 41 .. I IBBEVNT["PROCEDURE" D CPT^IBCRBC1(IBIFN,IBRS,IBCS) 42 ; 43 I '$D(^TMP($J,"IBCRCC")) G END 44 ; 45 D MULTCPT^IBCRBCA1 ; adjust charges for Multiple Surgical Procedure Discount 46 D PSB^IBCRBCA2 ; adjust charges for Primary/Secondary Bundling 47 D MODADJ^IBCRBCA3 ; adjust charges for Modifier Adjustment 48 ; 49 D SORTCI^IBCRBC3 I '$D(^TMP($J,"IBCRCS")) G END 50 ; 51 D ADDBCHGS^IBCRBC3(IBIFN) 52 ; 53 D MAILADD(IBIFN,IBBTYPE) 54 ; 55 END I $D(^TMP("IBCRRX",$J)) D CLEANRX^IBCRBC3(IBIFN) 56 K ^TMP($J,"IBCRCC"),^TMP($J,"IBCRCS") 57 Q 58 ; 59 MAILADD(IBIFN,BTYPE) ; update the bill mailing address: it may be based on the types of charges 60 ; an outpatient bill may go to either the opt or rx mailing addresses depending on the types of charges 61 N DA,IB01,IB02 62 I $G(BTYPE)>2,+$G(IBIFN),$D(^IBA(362.4,"C",+IBIFN)),+$$CHGTYPE^IBCU(+IBIFN)=3 S DA=IBIFN D MAILA^IBCU5 D 63 . I '$D(ZTQUEUED),'$G(IBAUTO) W !!,"Updating Bill Mailing Address" 64 Q 65 ; 66 BILLITEM(IBIFN,IBITMARR) ; add selected unassociated item charges to the bill 67 N IBRS,IBCS,IBBEVNT K ^TMP($J,"IBCRCC"),^TMP($J,"IBCRCS") 68 ; 69 S IBRS=0 F S IBRS=$O(IBITMARR(IBRS)) Q:'IBRS D 70 . S IBCS=0 F S IBCS=$O(IBITMARR(IBRS,IBCS)) Q:'IBCS D 71 .. S IBBEVNT=+$P($G(^IBE(363.1,+IBCS,0)),U,3) Q:'IBBEVNT S IBBEVNT=$$EMUTL^IBCRU1(IBBEVNT) Q:IBBEVNT="" 72 .. ; 73 .. I IBBEVNT["UNASSOCIATED" D UNASSOC^IBCRBC11(IBIFN,IBRS,IBCS,.IBITMARR) 74 ; 75 I $D(^TMP($J,"IBCRCC")) D SORTCI^IBCRBC3 76 ; 77 I $D(^TMP($J,"IBCRCS")) D ADDBCHGS^IBCRBC3(IBIFN) 78 ; 79 K ^TMP($J,"IBCRCC"),^TMP($J,"IBCRCS") 80 Q 81 ; 82 ; 83 ; 84 ; There are 3 types of charges/items: 85 ; - ITEM: charge for an individual item: specific item has one or more charge entries in 363.2 86 ; for the charge to be applied to the bill the specific item must be found on the bill 87 ; 88 ; - EVENT: charge for an event, not an item: items are defined in 363.2 89 ; all charge items active on a date in the set define the charge for the event 90 ; the item does not need to be defined on the bill for the charge to be applied to the bill 91 ; the charge set on a date becomes the events charge, so effective date cuts across item and applies to event 92 ; all charge items with the same effective date are used to calculate the event charge for that date 93 ; each charge item effective date in the set overrides all previous entries in the set regardless of item 94 ; 95 ; - VA COST: charge for an individual item but no entries in 363.2 96 ; instead the charge is calculated/obtained when it is needed from an interface with the source package 97 ; 98 ; 99 ; Auto calculation and filing of a bills charges 100 ; 101 ; IBCRBC (BILL) - determine if charges can be calculated and which rates (RS/CS) should be used 102 ; then find billable items/events, calculate and store the charges 103 ; called anytime a bills charges need to be updated 104 ; 105 ; IBCRBC1 (event) - gather billable items/events for each billable event type 106 ; then accumulate all charges for the bill for each billable event/item 107 ; 108 ; IBCRCGx (event) - pull billable items/events from the bill 109 ; IBCRBC2 (BITMCHRG) - calculate charges for billable item/event 110 ; 111 ; IBCRBC3 (SORTCI) - sort accumulated charges into order to store on bill, combine if possible 112 ; IBCRBC3 (ADDBCHRGS) - store the sorted accumulated charges on the bill 113 ; 114 ; 115 ; The Billable Event of the Charge Set is directly related to the Type of charge assigned 116 ; to the charges calculated for that Charge Set. So, Billable Event (363.1,.03) <-> Type (399,42,.1) 117 ; 118 ; 119 ; ^TMP($J,"IBCRCC") - array containing raw charges for a bill and related data, created in IBRCBC2 120 ; ^TMP($J,"IBCRCC",X) = 1 charge item ifn 121 ; 2 charge set ifn 122 ; 3 rate schedule ifn 123 ; 4 item ptr (to source) 124 ; 5 cpt modifier ptr 125 ; 6 revenue code ptr 126 ; 7 billable bedsection (bill) 127 ; 8 event date (visit or st from or admission) 128 ; 9 charge per unit/qty 129 ; 10 units/qty (qty of item) 130 ; 11 total charge per unit/qty 131 ; 12 adjusted total charge per unit/qty 132 ; 13 units (# item on bill) 133 ; 14 CPT ptr 134 ; 15 division ptr 135 ; 16 item type (source) 136 ; 17 item ptr (to source) 137 ; 18 charge component 138 ; 19 billable bedsection (for item) 139 ; 20 procedure provider 140 ; 21 procedures associated clinic 141 ; 22 procedures Outpatient Encounter, pointer to #409.68 142 ; 143 ; ^TMP($J,"IBCRCC",X,"CC",x) = comments explaining charge adjustements 144 ; 145 ; ^TMP($J,"IBCRCS") - array of charges from IBCRCC in sorted order and with only data needed to save on bill 146 ; ^TMP($J,"IBCRCS", BS, RV, X) = 1 revenue code ptr 147 ; 2 bedsection ptr 148 ; 3 charge per units (adjusted total charge) 149 ; 4 units (# item on bill) 150 ; 5 CPT ptr 151 ; 6 division ptr 152 ; 7 item type 153 ; 8 item ptr 154 ; 9 charge component 155 ; 156 ; 157 ; 158 ; Inpatient Bill Dates use follow rules: 159 ; - admission date is counted as billable 160 ; - the discharge date is not billable and is not counted 161 ; 162 ; - if admission movement is found in the Patient Movement file then the dates of admission and discharge 163 ; will be used as the outside limits of the LOS, even if date range of the bill is longer (LOS^IBCU64) 164 ; 165 ; - a day is counted as billable to the bedsection the patient was in at the end of the day (ie. counted 166 ; in LOS of next movement after midnight) 167 ; - if there is a movement on any given date that date is included in the LOS of the bedsection the patient 168 ; moved into (same as admission date) 169 ; - if there is a movement on any given date that date is NOT included in the LOS of the bedsection the 170 ; patient moved out of (same as discharge date) 171 ; 172 ; - if the time frame of the bill is: 173 ; - either interim-first or interim-continuous the last date on the bill should be billed 174 ; - if the last date is counted it is added to the LOS of the bedsection the patient was in at the end 175 ; of the day 176 ; - either NOT interim-first or interim-continuous (final bills) the last date on the bill 177 ; should NOT be billed (i.e. this is considered the discharge date) 178 ; 179 ; - start with first bedsection after begin date, day is counted in the bedsection the patient is in at midnight 180 ; - continuous: last bedsection counted is the bedsection the patient is in at midnight of the end date 181 ; - final:last bedsection counted is the bedsection the patient is in at midnight of the day before the end date 182 ;
Note:
See TracChangeset
for help on using the changeset viewer.