1 | IBCRCU1 ;ALB/ARH - RATES: CALCULATION UTILITIES ; 22-MAY-1996
|
---|
2 | ;;2.0;INTEGRATED BILLING;**52,106,245**;21-MAR-94
|
---|
3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ; there are two types of Charge Sets (363.1) that have Charge Item entries (363.2):
|
---|
6 | ; 1 - ITEM: each item has an individual charge: an item on the bill has corresponding charge item entries,
|
---|
7 | ; the item may have more than one Charge Item entry but they are specifically defined for that item
|
---|
8 | ; ex: an inpt bs, a CPT, or a drug
|
---|
9 | ; 2 - EVENT: the charge is for an event not an item: all charge items active on a date in the Set
|
---|
10 | ; combine to give the charge for the item on the bill for that date
|
---|
11 | ; all items in the set define the event charge - the total charges for a set on a date is the event charge
|
---|
12 | ; the item does not have to match an item on the bill and is only relevant because it is then added
|
---|
13 | ; to the RC multiple of the bill as one of the bills charge lines
|
---|
14 | ; ex: the charge for a bills opt visit date is the combined charge of all items active in the Set
|
---|
15 | ; on the visit date (this may be more than simply the Outpatient Visit Date bedsection charge if
|
---|
16 | ; there is another bedsection charge defined for that date)
|
---|
17 | ;
|
---|
18 | CSITMS(CS) ; returns 1 (ITEM) if the CS requires a single billable item or 2 (EVENT) if all active items for date are used
|
---|
19 | ;
|
---|
20 | N IBX,IBCSBR,IBBEVNT,IBBLITEM,IBCHGMTH S IBX=0 I '$G(CS) G CSITMSQ
|
---|
21 | S IBCSBR=$$CSBR^IBCRU3(+CS) I IBCSBR="" G CSITMSQ
|
---|
22 | S IBBEVNT=$P(IBCSBR,U,1),IBBLITEM=$P(IBCSBR,U,4),IBCHGMTH=$P(IBCSBR,U,5)
|
---|
23 | ;
|
---|
24 | I IBBEVNT["INPATIENT BEDSECTION STAY",IBBLITEM=1,IBCHGMTH=1 S IBX=1 G CSITMSQ
|
---|
25 | I IBBEVNT["OUTPATIENT VISIT DATE",IBBLITEM=1,IBCHGMTH=1 S IBX=2 G CSITMSQ
|
---|
26 | I IBBEVNT["PRESCRIPTION",IBBLITEM=1,IBCHGMTH=1 S IBX=2 G CSITMSQ
|
---|
27 | I IBBEVNT["PRESCRIPTION",IBBLITEM=3,IBCHGMTH=3 S IBX=1 G CSITMSQ
|
---|
28 | I IBBEVNT["PRESCRIPTION",IBCHGMTH=2 S IBX=1 G CSITMSQ
|
---|
29 | I IBBEVNT["PROSTHETICS",IBBLITEM=1,IBCHGMTH=1 S IBX=2 G CSITMSQ
|
---|
30 | I IBBEVNT["PROSTHETICS",IBCHGMTH=2 S IBX=1 G CSITMSQ
|
---|
31 | I IBBEVNT["PROCEDURE",IBBLITEM=2,IBCHGMTH=1 S IBX=1 G CSITMSQ
|
---|
32 | I IBBEVNT["PROCEDURE",IBBLITEM=2,IBCHGMTH=4 S IBX=1 G CSITMSQ
|
---|
33 | I IBBEVNT["PROCEDURE",IBBLITEM=2,IBCHGMTH=5 S IBX=1 G CSITMSQ
|
---|
34 | I IBBEVNT["PROCEDURE",IBBLITEM=2,IBCHGMTH=6 S IBX=1 G CSITMSQ
|
---|
35 | I IBBEVNT["INPATIENT DRG",IBBLITEM=4,IBCHGMTH=1 S IBX=1 G CSITMSQ
|
---|
36 | I IBBEVNT["UNASSOCIATED",IBBLITEM=9,IBCHGMTH=1 S IBX=1 G CSITMSQ
|
---|
37 | CSITMSQ Q IBX
|
---|
38 | ;
|
---|
39 | CSALL(CS,EVDT,ARR) ; returns all items billable on a given effective date for charge sets where all active items are billed (EVENT)
|
---|
40 | ; finds most recent effective date, returns all items active on that date ie. does not check item inactive date
|
---|
41 | ; first get all active items on date then get only those items active on most recent effective date
|
---|
42 | ; Ouput: ARR = chg effective date
|
---|
43 | ; ARR(source item pointer) =""
|
---|
44 | ;
|
---|
45 | N IBXRF,IBITM,IBEVDT,ARR1 K ARR S ARR=0,EVDT=$G(EVDT)\1 I '$G(CS)!(EVDT'?7N) G CSALLQ
|
---|
46 | I +$$CSITMS(CS)'=2 G CSALLQ
|
---|
47 | ;
|
---|
48 | S IBXRF="AIVDTS"_CS
|
---|
49 | S IBITM=0 F S IBITM=$O(^IBA(363.2,IBXRF,IBITM)) Q:'IBITM D
|
---|
50 | . S IBEVDT=$O(^IBA(363.2,IBXRF,IBITM,-(EVDT+.01))) Q:'IBEVDT
|
---|
51 | . S ARR1(IBEVDT,IBITM)=""
|
---|
52 | ;
|
---|
53 | S IBEVDT=$O(ARR1(""))
|
---|
54 | I +IBEVDT S IBITM=0 F S IBITM=$O(ARR1(IBEVDT,IBITM)) Q:'IBITM S ARR(IBITM)="",ARR=-IBEVDT
|
---|
55 | ;
|
---|
56 | CSALLQ Q
|
---|
57 | ;
|
---|
58 | CPTUNITS(CS,UNIT) ; return raw data returns CPT units based on Charge Set and item
|
---|
59 | ; Input: CS - Charge Set of charge determines Charge Method
|
---|
60 | ; UNIT - total miles/minutes/hours of item
|
---|
61 | ; Output: UNIT or calculated for miles/minutes/hours
|
---|
62 | N IBUNITS,IBCSBR,IBCHGMTH S IBUNITS=+$G(UNIT) I 'IBUNITS G CPTUNITQ
|
---|
63 | S CS=$G(CS) S IBCSBR=$$CSBR^IBCRU3(CS),IBCHGMTH=$P(IBCSBR,U,5)
|
---|
64 | I +IBCHGMTH=4 S IBUNITS=$$MLUNIT^IBCRCC(UNIT) ; miles
|
---|
65 | I +IBCHGMTH=5 S IBUNITS=$$MNUNIT^IBCRCC(UNIT) ; minutes
|
---|
66 | I +IBCHGMTH=6 S IBUNITS=$$HRUNIT^IBCRCC(UNIT) ; hours
|
---|
67 | CPTUNITQ Q IBUNITS
|
---|
68 | ;
|
---|
69 | CPTMOD(CS,CPT,MODS,DATE) ; check to see if a CPT-Modifier combination has a charge in this Charge Set, returns "" or CI IFN
|
---|
70 | ; Input MODS is a list of modifiers to check separated by ','
|
---|
71 | ; Output "" or list of modifiers with active charges in the set on date
|
---|
72 | N IBMOD,IBI,IBX,IBY S (IBX,IBY)="" I '$G(CS)!'$G(CPT)!'$G(MODS)!'$G(DATE) G CPTMODQ
|
---|
73 | F IBI=1:1 S IBMOD=$P(MODS,",",IBI) Q:IBMOD="" D
|
---|
74 | . I +$$FNDCI^IBCRU4(CS,CPT,DATE,,IBMOD) S IBX=IBX_IBY_IBMOD S IBY=","
|
---|
75 | ;
|
---|
76 | CPTMODQ Q IBX
|
---|
77 | ;
|
---|
78 | CHGMOD(IBIFN,CPT,EFFDT,CT) ; find charges for a procedure and a date for a bill
|
---|
79 | ; returns: count of charges ':' list of charge items ':' list of charge modifiers
|
---|
80 | N IB0,IBU,IBBDV,IBBCT,ARRCS,IBRS,IBCS,ARRCHG,IBFND,IBCIS,IBMODS,IBX S IBFND=0,(IBCIS,IBMODS)=""
|
---|
81 | S IB0=$G(^DGCR(399,+$G(IBIFN),0)),IBU=$G(^DGCR(399,+$G(IBIFN),"U")),IBBDV=$P(IB0,U,22),IBBCT=$S($D(CT):CT,1:$P(IB0,U,27))
|
---|
82 | I IB0'="",+IBU,+IBBDV,+$G(CPT),+$G(EFFDT) D RT^IBCRU3($P(IB0,U,7),$P(IB0,U,5),EFFDT,.ARRCS,"PROCEDURE",IBBCT) D
|
---|
83 | . S IBRS=0 F S IBRS=$O(ARRCS(IBRS)) Q:'IBRS D
|
---|
84 | .. S IBCS=0 F S IBCS=$O(ARRCS(IBRS,IBCS)) Q:'IBCS I +ARRCS(IBRS,IBCS) D
|
---|
85 | ... I $$CSDV^IBCRU3(IBCS,IBBDV)<0 Q ; check division
|
---|
86 | ... I '$$CHGOTH^IBCRBC2(IBIFN,IBRS,EFFDT) Q ; ckeck snf/non-snf
|
---|
87 | ... I +$$FNDCI^IBCRU4(IBCS,CPT,EFFDT,.ARRCHG) S IBFND=IBFND+ARRCHG D
|
---|
88 | .... S IBX=0 F S IBX=$O(ARRCHG(IBX)) Q:'IBX S IBCIS=IBCIS_IBX_U,IBMODS=IBMODS_$P(ARRCHG(IBX),U,7)_U
|
---|
89 | I +IBFND S IBFND=IBFND_":"_IBCIS_":"_IBMODS
|
---|
90 | CHGMODQ Q IBFND
|
---|
91 | ;
|
---|
92 | CPTCHG(IBIFN,CT) ; return true if bill has auto add CPT charges for the Charge Type passed in (regardless of modifier)
|
---|
93 | N IBFND,IB0,IBU,IBBILLDV,IBBCT,IBCT,ARRCPT,ARRCS,IBRS,IBCS,IBCPT,IBCPTDA,IBCPT0 S IBFND=0,CT=$G(CT)
|
---|
94 | ;
|
---|
95 | S IB0=$G(^DGCR(399,+$G(IBIFN),0)) I IB0="" G CPTCHGQ
|
---|
96 | S IBU=$G(^DGCR(399,+$G(IBIFN),"U")) I 'IBU G CPTCHGQ
|
---|
97 | S IBBILLDV=$P(IB0,U,22),IBBCT=$P(IB0,U,27)
|
---|
98 | ;
|
---|
99 | S IBCT=$S(CT="BILL":IBBCT,CT="INST":1,CT="PROF":2,CT="OPST"&(IBBCT=1):2,CT="OPST"&(IBBCT=2):1,CT="":"",1:-1)
|
---|
100 | I IBCT<0 G CPTCHGQ
|
---|
101 | ;
|
---|
102 | D CPT^IBCRBG1(IBIFN,.ARRCPT) I '$O(ARRCPT(0)) G CPTCHGQ
|
---|
103 | D RT^IBCRU3($P(IB0,U,7),$P(IB0,U,5),$P(IBU,U,1,2),.ARRCS,"PROCEDURE",IBCT)
|
---|
104 | ;
|
---|
105 | S IBRS=0 F S IBRS=$O(ARRCS(IBRS)) Q:'IBRS D I +IBFND Q
|
---|
106 | . S IBCS=0 F S IBCS=$O(ARRCS(IBRS,IBCS)) Q:'IBCS I +ARRCS(IBRS,IBCS) D I +IBFND Q
|
---|
107 | .. ;
|
---|
108 | .. S IBCPT=0 F S IBCPT=$O(ARRCPT(IBCPT)) Q:'IBCPT D I +IBFND Q
|
---|
109 | ... S IBCPTDA=0 F S IBCPTDA=$O(ARRCPT(IBCPT,IBCPTDA)) Q:'IBCPTDA D I +IBFND Q
|
---|
110 | .... ;
|
---|
111 | .... S IBCPT0=ARRCPT(IBCPT,IBCPTDA)
|
---|
112 | .... I $$CSDV^IBCRU3(IBCS,$P(IBCPT0,U,3),IBBILLDV)<0 Q ; check division
|
---|
113 | .... ;
|
---|
114 | .... I +$$CHKIPB^IBCU7A1(IBCPT,IBCT) S IBFND=1 Q
|
---|
115 | .... I +$$FNDCI^IBCRU4(IBCS,IBCPT,$P(IBCPT0,U,1)) S IBFND=1
|
---|
116 | ;
|
---|
117 | CPTCHGQ Q IBFND
|
---|