| 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 | 
|---|