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