[613] | 1 | IBTUBO1 ;ALB/AAS - UNBILLED AMOUNTS - GENERATE UNBILLED REPORTS ;29-SEP-94
|
---|
| 2 | ;;2.0;INTEGRATED BILLING;**19,31,32,91,123,159,247,155,277,339**;21-MAR-94;Build 2
|
---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | OPT(IBOE,IBQUERY) ; - Has the outpatient encounter been billed?
|
---|
| 6 | ; Input: IBOE=pointer to outpatient encounter in file #409.68
|
---|
| 7 | ; (NOTE: this value may be null)
|
---|
| 8 | ; IBQUERY (Passed by reference)=flag that is incremented when
|
---|
| 9 | ; the Scheduling query API is invoked
|
---|
| 10 | ; *Pre-set variables: DFN=patient IEN, IBDT=event date, IBRT=bill rate,
|
---|
| 11 | ; IBEDT=End of reporting period date.
|
---|
| 12 | ; IBX=ien of CLAIMS TRACKING entry file 356
|
---|
| 13 | ;
|
---|
| 14 | I '$G(DFN)!('$G(IBDT))!('$G(IBRT))!'$G(IBX) G OPTQ
|
---|
| 15 | N IBCN,IBCPT,IBCT,IBDATA,IBDAY,IBDIV,IBFL,IBNAME,IBQUIT,IBNCF,IBXX,IBYD,IBYY,IBZ,IBMRA
|
---|
| 16 | ;
|
---|
| 17 | ; - Check to be sure the encounter is billable.
|
---|
| 18 | I $$INPT^IBAMTS1(DFN,IBDT\1_.2359) G OPTQ ; Became inpatient same day.
|
---|
| 19 | I $G(IBOE),$$ENCL^IBAMTS2(IBOE)["1" G OPTQ ; "ao^ir^sc^swa^mst^hnc^cv^shad" encounter.
|
---|
| 20 | S IBDAY=$E(IBDT,1,7),IBNAME=$P($G(^DPT(DFN,0)),U),IBQUIT="",IBNCF=0
|
---|
| 21 | ;
|
---|
| 22 | ; - If no encounter, see if add/edits or registrations are not billable.
|
---|
| 23 | I '$G(IBOE) D NOOE G:IBQUIT OPTQ
|
---|
| 24 | ;
|
---|
| 25 | ; - If encounter was dated prior to Reasonable Charges (9/1/99) and
|
---|
| 26 | ; the claim was not authorized before end of reporting period, add
|
---|
| 27 | ; encounter Tort Rate to Unbilled Outpatient Amount
|
---|
| 28 | I IBDAY<2990901 D PRERC,SETUB:'IBQUIT G OPTQ
|
---|
| 29 | I '$G(IBOE) G OPTQ ; If still no encounter, quit.
|
---|
| 30 | ;
|
---|
| 31 | ; - If encounter was made after start of Reasonable Charges (9/1/99)
|
---|
| 32 | ; and any of the encounter's procedure codes have no corresponding
|
---|
| 33 | ; inst. or prof. claims that were not authorized before end of the
|
---|
| 34 | ; reporting period, add the charges for the procedures to the
|
---|
| 35 | ; Unbilled Outpatient Amount.
|
---|
| 36 | ;
|
---|
| 37 | ; - Gather all procedures associated with the encounter.
|
---|
| 38 | D GETCPT^SDOE(IBOE,"IBYY") G:'$G(IBYY) OPTQ ; Check CPT qty.
|
---|
| 39 | ;
|
---|
| 40 | ; - Determine the encounter division.
|
---|
| 41 | S IBDIV=+$P($$GETOE^SDOE(IBOE),U,11) S:'IBDIV IBDIV=+$$PRIM^VASITE()
|
---|
| 42 | ;
|
---|
| 43 | ; - Build array of all billable encounter procedures.
|
---|
| 44 | S IBXX=0 F S IBXX=$O(IBYY(IBXX)) Q:'IBXX D
|
---|
| 45 | . ;
|
---|
| 46 | . ; - Get procedure pointer and code.
|
---|
| 47 | . S IBZ=+IBYY(IBXX),IBCN=$P($$CPT^ICPTCOD(IBZ),"^",2)
|
---|
| 48 | . ;
|
---|
| 49 | . ; - Ignore LAB services for vets with Medicare Supplemental coverage.
|
---|
| 50 | . I IBCN>79999,IBCN<90000 Q
|
---|
| 51 | . ;
|
---|
| 52 | . ; - Get the institutional/professional charge components.
|
---|
| 53 | . S IBCPT(IBZ,1)=+$$BICOST^IBCRCI(IBRT,3,IBDAY,"PROCEDURE",IBZ,"",IBDIV,"",1)
|
---|
| 54 | . S IBCPT(IBZ,2)=+$$BICOST^IBCRCI(IBRT,3,IBDAY,"PROCEDURE",IBZ,"",IBDIV,"",2)
|
---|
| 55 | . ;
|
---|
| 56 | . ; - Eliminate components without a charge.
|
---|
| 57 | . I 'IBCPT(IBZ,1) K IBCPT(IBZ,1)
|
---|
| 58 | . I 'IBCPT(IBZ,2) K IBCPT(IBZ,2)
|
---|
| 59 | ;
|
---|
| 60 | I '$D(IBCPT) G OPTQ ; Quit if no billable procedures remain.
|
---|
| 61 | ;
|
---|
| 62 | ; - Look at all of the vet's bills for the day and eliminate
|
---|
| 63 | ; from the array those procedures that have been billed.
|
---|
| 64 | S IBXX=0
|
---|
| 65 | F S IBXX=$O(^DGCR(399,"AOPV",DFN,IBDAY,IBXX)) Q:'IBXX D
|
---|
| 66 | . ;
|
---|
| 67 | . ; - Perform general checks on the claim.
|
---|
| 68 | . S IBDATA=$$CKBIL^IBTUBOU(IBXX) Q:IBDATA=""
|
---|
| 69 | . I $P(IBDATA,U,2)=2 S IBMRA(IBXX)=IBDATA ; MRA request
|
---|
| 70 | . S IBNCF=IBNCF+1
|
---|
| 71 | . ;
|
---|
| 72 | . ; If Compile/Store & Not authorized/MRA requested before reporting period - Quit.
|
---|
| 73 | . I $G(IBCOMP),$S('$G(IBMRA(IBXX)):$P(IBDATA,U,3),1:$P(IBDATA,U,6))>IBEDT Q
|
---|
| 74 | . ;
|
---|
| 75 | . ; - The episode has been billed. Check the revenue code multiple for
|
---|
| 76 | . ; all procedures billed on the claim.
|
---|
| 77 | . S IBYY=0
|
---|
| 78 | . F S IBYY=$O(^DGCR(399,IBXX,"RC",IBYY)) Q:'IBYY S IBYD=^(IBYY,0) D
|
---|
| 79 | . . ;
|
---|
| 80 | . . ; - Get the procedure code and charge type for the revenue code.
|
---|
| 81 | . . S IBZ=$P(IBYD,U,6)
|
---|
| 82 | . . S IBCT=$S($P(IBYD,U,12):$P(IBYD,U,12),1:$P(IBDATA,U,4))
|
---|
| 83 | . . I 'IBZ!('IBCT) Q ; Can't determine code/charge type for procedure.
|
---|
| 84 | . . I $G(IBMRA(IBXX))'="" S:$D(IBCPT(IBZ)) IBCPT("MRA",IBZ,IBCT)=1 Q
|
---|
| 85 | . . ; Delete procedure from unbilled procedures array.
|
---|
| 86 | . . I $D(IBCPT(IBZ,IBCT)) K IBCPT(IBZ,IBCT) Q
|
---|
| 87 | . . K IBCPT(IBZ)
|
---|
| 88 | ;
|
---|
| 89 | ; - Again, quit if no billable procedures remain.
|
---|
| 90 | I '$D(IBCPT) G OPTQ
|
---|
| 91 | ;
|
---|
| 92 | ; - The encounter has unbilled procedure codes. Increment the counters
|
---|
| 93 | ; as per the extract specification.
|
---|
| 94 | ;
|
---|
| 95 | ; - Count the encounter (element 37N).
|
---|
| 96 | S IBMRA=$S($D(IBCPT("MRA")):1,1:0)
|
---|
| 97 | S:'IBMRA IBUNB("ENCNTRS")=IBUNB("ENCNTRS")+1
|
---|
| 98 | S:$G(IBXTRACT) IB(14)=IB(14)+1
|
---|
| 99 | ;
|
---|
| 100 | ; - Look at all the unbilled procedures.
|
---|
| 101 | S IBZ=0 F S IBZ=$O(IBCPT(IBZ)) Q:'IBZ D
|
---|
| 102 | . ;
|
---|
| 103 | . S IBMRA=$S($D(IBCPT("MRA",IBZ)):1,1:0)
|
---|
| 104 | . ; - Count the procedure (element 37M).
|
---|
| 105 | . I $G(IBXTRACT) S IB(13)=IB(13)+1
|
---|
| 106 | . ;
|
---|
| 107 | . ; - Count the institutional component (element 37I) and its
|
---|
| 108 | . ; corresponding charge amount (element 37J).
|
---|
| 109 | . I $G(IBCPT(IBZ,1)) D
|
---|
| 110 | . . S:'IBMRA IBUNB("CPTMS-I")=IBUNB("CPTMS-I")+1
|
---|
| 111 | . . S:'IBMRA IBUNB("UNBILOP")=IBUNB("UNBILOP")+IBCPT(IBZ,1)
|
---|
| 112 | . . S:IBMRA IBUNB("CPTMS-I-MRA")=IBUNB("CPTMS-I-MRA")+1
|
---|
| 113 | . . S:IBMRA IBUNB("UNBILOP-MRA")=IBUNB("UNBILOP-MRA")+IBCPT(IBZ,1)
|
---|
| 114 | . . I $G(IBXTRACT) S IB(9)=IB(9)+1,IB(10)=IB(10)+IBCPT(IBZ,1)
|
---|
| 115 | . ;
|
---|
| 116 | . ; - Count the professional component (element 37K) and its
|
---|
| 117 | . ; corresponding charge amount (element 37L).
|
---|
| 118 | . I $G(IBCPT(IBZ,2)) D
|
---|
| 119 | . . S:'IBMRA IBUNB("CPTMS-P")=IBUNB("CPTMS-P")+1
|
---|
| 120 | . . S:'IBMRA IBUNB("UNBILOP")=IBUNB("UNBILOP")+IBCPT(IBZ,2)
|
---|
| 121 | . . S:IBMRA IBUNB("CPTMS-P-MRA")=IBUNB("CPTMS-P-MRA")+1
|
---|
| 122 | . . S:IBMRA IBUNB("UNBILOP-MRA")=IBUNB("UNBILOP-MRA")+IBCPT(IBZ,2)
|
---|
| 123 | . . I $G(IBXTRACT) S IB(11)=IB(11)+1,IB(12)=IB(12)+IBCPT(IBZ,2)
|
---|
| 124 | ;
|
---|
| 125 | D SETUB
|
---|
| 126 | ;
|
---|
| 127 | OPTQ Q
|
---|
| 128 | ;
|
---|
| 129 | PRERC ; - Determine if a pre-9/1/99 visit has been billed.
|
---|
| 130 | ; Output: IBQUIT will be set to 1 if the visit has been billed.
|
---|
| 131 | ; *Pre-set variables DFN,IBDAY,IBDET,IBNAME,IBNCF,IBQUIT,IBRT,IBEDT
|
---|
| 132 | ; and IB/IBUNB arrays required.
|
---|
| 133 | ; NO MRA Extract code needed for pre-RC processes
|
---|
| 134 | I $D(^TMP($J,"IBTUB-OPT",IBNAME_"@@"_DFN,IBDAY)) S IBQUIT=1 G PRCQ
|
---|
| 135 | ;
|
---|
| 136 | ; - Check all outpatient claims on event date.
|
---|
| 137 | N IBXX S IBXX=0
|
---|
| 138 | F S IBXX=$O(^DGCR(399,"AOPV",DFN,IBDAY,IBXX)) Q:'IBXX D Q:IBQUIT
|
---|
| 139 | . ;
|
---|
| 140 | . ; - Perform general checks on the claim.
|
---|
| 141 | . S IBDATA=$$CKBIL^IBTUBOU(IBXX) Q:IBDATA="" S IBNCF=IBNCF+1
|
---|
| 142 | . ;
|
---|
| 143 | . ; If Compile/Store & Not authorized before reporting period - Quit.
|
---|
| 144 | . I $G(IBCOMP),$P(IBDATA,U,3)>IBEDT Q
|
---|
| 145 | . ;
|
---|
| 146 | . S IBQUIT=1 ; Episode has been billed-set flag.
|
---|
| 147 | ;
|
---|
| 148 | I IBQUIT G PRCQ ; Episode was billed.
|
---|
| 149 | ;
|
---|
| 150 | ; - The episode was not billed; determine the tort rate for a visit
|
---|
| 151 | ; and increment the number and amount of unbilled pre-9/1/99 visits.
|
---|
| 152 | S IBXX=+$$BICOST^IBCRCI(IBRT,3,IBDAY,"OUTPATIENT VISIT DATE")
|
---|
| 153 | S IBUNB("UNBILOP")=IBUNB("UNBILOP")+IBXX
|
---|
| 154 | S IBUNB("ENCNTRS")=IBUNB("ENCNTRS")+1
|
---|
| 155 | ;
|
---|
| 156 | I $G(IBXTRACT) S IB(7)=IB(7)+1,IB(8)=IB(8)+IBXX ; For DM extract.
|
---|
| 157 | ;
|
---|
| 158 | PRCQ Q
|
---|
| 159 | ;
|
---|
| 160 | NOOE ; - If there is no encounter, look for add/edits or registrations.
|
---|
| 161 | ; Output: IBQUIT will be set to 1 if the visit is non-billable.
|
---|
| 162 | ; *Pre-set variable IBQUIT required.
|
---|
| 163 | N IBDATA,IBSC,IBSDV,IBXX,IBZERR
|
---|
| 164 | ;
|
---|
| 165 | ; - Check if for a visit at the visit date/time.
|
---|
| 166 | S IBXX=$$EXOE^SDOE(DFN,IBDT,IBDT,"","IBZERR")
|
---|
| 167 | I IBXX D CKENC^IBTUBOU(IBXX,"",.IBQUIT) G NOOEQ
|
---|
| 168 | ;
|
---|
| 169 | ; - Find next add/edit stop code encounter after IBDT.
|
---|
| 170 | D SCAN^IBTUBOU(DFN,IBDT,.IBQUERY)
|
---|
| 171 | ;
|
---|
| 172 | NOOEQ Q
|
---|
| 173 | ;
|
---|
| 174 | SETUB ; Set array elements for the detail report.
|
---|
| 175 | ; Array element format:
|
---|
| 176 | ; NON-MRA:
|
---|
| 177 | ; ^TMP($J,"IBTUB-OPT",NAME@@DFN,DATE,IBX)=bill status^claim type
|
---|
| 178 | ; ^TMP($J,"IBTUB-OPT",NAME@@DFN,DATE,IBX,CPT no)=inst rate^prof rate
|
---|
| 179 | ; MRA:
|
---|
| 180 | ; ^TMP($J,"IBTUB-OPT_MRA",NAME@@DFN,DATE,IBX,CPT no)=1 if MRA req
|
---|
| 181 | ;
|
---|
| 182 | N IBCTF,IBCPTNM
|
---|
| 183 | I $S($G(IBINMRA):1,1:'$O(IBCPT("MRA",""))) S ^TMP($J,"IBTUB-OPT",IBNAME_"@@"_DFN,IBDAY,IBX)=IBNCF
|
---|
| 184 | I $G(IBINMRA),$O(IBCPT("MRA","")) S ^TMP($J,"IBTUB-OPT_MRA",IBNAME_"@@"_DFN,IBDAY,IBX)=1
|
---|
| 185 | G:'IBDET SETUBQ
|
---|
| 186 | I $D(IBCPT) S IBXX=0 F S IBXX=$O(IBCPT(IBXX)) Q:'IBXX D
|
---|
| 187 | . S IBCPTNM=$$CODEC^ICPTCOD(IBXX) I IBCPTNM=-1 S IBCPTNM="UNK"
|
---|
| 188 | . S IBCTF=$S($G(IBCPT(IBXX,1)):"I",1:"")
|
---|
| 189 | . S IBCTF=$S($G(IBCPT(IBXX,2)):$S(IBCTF="I":"I,P",1:"P"),1:IBCTF)
|
---|
| 190 | . I $S($G(IBINMRA):1,1:'$O(IBCPT("MRA",""))) S ^TMP($J,"IBTUB-OPT",IBNAME_"@@"_DFN,IBDAY,IBX,IBCPTNM)=+$G(IBCPT(IBXX,1))_U_+$G(IBCPT(IBXX,2))_U_IBCTF
|
---|
| 191 | . I $G(IBINMRA) S:$G(IBCPT("MRA",IBXX)) ^TMP($J,"IBTUB-OPT_MRA",IBNAME_"@@"_DFN,IBDAY,IBX,IBCPTNM)=1
|
---|
| 192 | ;
|
---|
| 193 | SETUBQ Q
|
---|