| 1 | IBAMTEDU ;ALB/CPM - MEANS TEST BULLETIN UTILITIES ; 15-JUN-93
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**15,91,153**;21-MAR-94
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | CHG(IBDAT) ; Any charges billed on or after IBDAT?
 | 
|---|
| 6 |  ;  Input:  IBDAT  --  Date on or after which charges have been billed
 | 
|---|
| 7 |  ; Output:    0    --  No charges billed
 | 
|---|
| 8 |  ;            1    --  Charges were billed; IBARR contains array
 | 
|---|
| 9 |  ;                      of those charges
 | 
|---|
| 10 |  N IBFND,IBD,IBN,IBX,IBJOB,IBWHER K IBARR
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  ; - if the effective date of the test is today, cancel today's charges.
 | 
|---|
| 13 |  I $P(IBDAT,".")=DT D CANC G CHGQ
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  ; - find all charges which may need to be cancelled.
 | 
|---|
| 16 |  S IBX="" F  S IBX=$O(^IB("AFDT",DFN,IBX)) Q:'IBX  S IBD=0 F  S IBD=$O(^IB("AFDT",DFN,IBX,IBD)) Q:'IBD  D
 | 
|---|
| 17 |  .I $P($G(^IB(IBD,0)),"^",8)'["ADMISSION" D:-IBX'<IBDAT CHK(IBD) Q
 | 
|---|
| 18 |  .S IBN=0 F  S IBN=$O(^IB("AF",IBD,IBN)) Q:'IBN  D CHK(IBN)
 | 
|---|
| 19 | CHGQ Q +$G(IBFND)
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 | CHK(IBN) ; Place charge into the array.
 | 
|---|
| 22 |  ;  Input:  IBN   --  Charge to check
 | 
|---|
| 23 |  N IBND,IBNDL,IBLAST
 | 
|---|
| 24 |  S IBND=$G(^IB(IBN,0)) I $P(IBND,"^",15)<IBDAT G CHKQ
 | 
|---|
| 25 |  S IBLAST=$$LAST^IBECEAU(+$P(IBND,"^",9)),IBNDL=$G(^IB(+IBLAST,0))
 | 
|---|
| 26 |  I $P($G(^IBE(350.1,+$P(IBNDL,"^",3),0)),"^",5)'=2,"^1^2^3^4^8^20^21^"[("^"_$P(IBNDL,"^",5)_"^") S IBARR(+$P(IBNDL,"^",14),IBLAST)="",IBFND=1
 | 
|---|
| 27 | CHKQ Q
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 | CANC ; Cancel any charges for the patient for today.
 | 
|---|
| 30 |  N IBD,IBN,IBCRES,IBFAC,IBSITE,IBSERV,IBDUZ
 | 
|---|
| 31 |  Q:'$$CHECK^IBECEAU
 | 
|---|
| 32 |  S IBCRES=+$O(^IBE(350.3,"B","MT STATUS CHANGED FROM YES",0))
 | 
|---|
| 33 |  S:'IBCRES IBCRES=22 S IBJOB=7,IBWHER=30,IBDUZ=DUZ
 | 
|---|
| 34 |  S IBD=0 F  S IBD=$O(^IB("AFDT",DFN,-DT,IBD)) Q:'IBD  D
 | 
|---|
| 35 |  .I $P($G(^IB(IBD,0)),"^",8)'["ADMISSION" D CANCH^IBECEAU4(IBD,IBCRES,1) Q
 | 
|---|
| 36 |  .S IBN=0 F  S IBN=$O(^IB("AF",IBD,IBN)) Q:'IBN  D CANCH^IBECEAU4(IBN,IBCRES,1)
 | 
|---|
| 37 |  Q
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 | EP(IBDAT) ; Any billable episodes of care since IBDAT?
 | 
|---|
| 41 |  ;  Input:  IBDAT  --  Date on or after which patient received care
 | 
|---|
| 42 |  ; Output:    0    --  No billable episodes found
 | 
|---|
| 43 |  ;            1    --  Billable episodes were found; IBARR contains an
 | 
|---|
| 44 |  ;                      array of those episodes
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 |  N IBD,IBAD,IBNOW,IBEP,IBDT,IBI,IBPM,VA,VAIP,VAERR,IBVAL,IBCBK,IBZ,IBPB
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  ; - quit if the effective date of the test is today
 | 
|---|
| 49 |  I $P(IBDAT,".")=DT G EPQ
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  ; - find scheduled visits, stand-alone encounters and dispositions
 | 
|---|
| 52 |  ;   on or after IBDAT from the outpatient encounters file
 | 
|---|
| 53 |  D NOW^%DTC S IBNOW=%
 | 
|---|
| 54 |  K IBARR,^TMP("IBOE",$J)
 | 
|---|
| 55 |  S IBVAL("DFN")=DFN,IBVAL("BDT")=IBDAT,IBVAL("EDT")=IBNOW
 | 
|---|
| 56 |  ;Consider only parent encounters
 | 
|---|
| 57 |  S IBFILTER=""
 | 
|---|
| 58 |  S IBCBK="I '$P(Y0,U,6) S ^TMP(""IBOE"",$J,Y)=Y0"
 | 
|---|
| 59 |  D SCAN^IBSDU("PATIENT/DATE",.IBVAL,IBFILTER,IBCBK,1) K ^TMP("DIERR",$J)
 | 
|---|
| 60 |  F IBZ=0,1,2,9,13 S IBCK(IBZ)=""
 | 
|---|
| 61 |  S IBOE=0 F  S IBOE=$O(^TMP("IBOE",$J,IBOE)) Q:'IBOE  S IBOE0=$G(^(IBOE)) D
 | 
|---|
| 62 |  . K IBPB
 | 
|---|
| 63 |  . S IBEP=$$BILLCK(IBOE,IBOE0,.IBCK,.IBPB)
 | 
|---|
| 64 |  . S IBZ=0 F  S IBZ=$O(IBPB(IBZ)) Q:'IBZ  D
 | 
|---|
| 65 |  .. I IBZ=1 S IBARR(+IBOE0,"APP")=$P(IBOE0,U,4)_U_$P(IBOE0,U,10)
 | 
|---|
| 66 |  .. I IBZ=2 S IBARR(IBOE0\1,"SC"_IBOE)=$P(IBOE0,U,3)_U_$P(IBOE0,U,10)
 | 
|---|
| 67 |  .. I IBZ=3 S IBARR(+IBOE0,"R")=$P(IBPB(3),U,7)
 | 
|---|
| 68 |  K ^TMP("IBOE",$J)
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  ; - find admissions since IBDAT
 | 
|---|
| 71 |  S VAIP("D")=IBDAT D IN5^VADPT I VAIP(13) S IBPM=$G(^DGPM(+VAIP(13),0)),IBARR(+IBPM,"ADM")=$P(IBPM,"^",6),IBEP=1
 | 
|---|
| 72 |  S IBD="" F  S IBD=$O(^DGPM("ATID1",DFN,IBD)) Q:'IBD!(9999999.999999-IBD<IBDAT)  S IBPM=$G(^DGPM(+$O(^(IBD,0)),0)),IBARR(+IBPM,"ADM")=$P(IBPM,"^",6),IBEP=1
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 | EPQ Q +$G(IBEP)
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 | BILLCK(IBOE,IBOE0,IBCK,IBPB) ; Check for potentially billable outpt enctr
 | 
|---|
| 77 |  ; IBOE = encounter ien in file 409.68
 | 
|---|
| 78 |  ; IBOE0 = encounter 0-node
 | 
|---|
| 79 |  ; IBCK = array subscriptd by # that, if defined, specifies edit to check
 | 
|---|
| 80 |  ;        and exclude if it doesn't pass it
 | 
|---|
| 81 |  ;        (0) = check if pt claimed exposure
 | 
|---|
| 82 |  ;        (1) = check if non-billable appt type for means test
 | 
|---|
| 83 |  ;        (2) = check if non-count clinic
 | 
|---|
| 84 |  ;        (3) = check if non-billable clinic
 | 
|---|
| 85 |  ;        (4) = check if pt not Means Test copay pt
 | 
|---|
| 86 |  ;        (5) = check if pt admitted by midnight same date
 | 
|---|
| 87 |  ;        (6) = check if C&P exam same date
 | 
|---|
| 88 |  ;        (7) = check if non-billable stop code (third party)
 | 
|---|
| 89 |  ;        (8) = check if non-billable stop code (auto-biller)
 | 
|---|
| 90 |  ;        (9) = check if disposition and application without exam
 | 
|---|
| 91 |  ;       (10) = check if non-billable disposition
 | 
|---|
| 92 |  ;       (11) = check if service connected (ck parent only)
 | 
|---|
| 93 |  ;       (12) = check if non-billable clinic
 | 
|---|
| 94 |  ;       (13) = check if appt status is set (cancelled/noshow/inpt/etc)
 | 
|---|
| 95 |  ;       (13.1) = same as (13) except don't exclude if encounter status is non-count
 | 
|---|
| 96 |  ;       (14) = check if non-billable appt type for report
 | 
|---|
| 97 |  ; Returns IBPB = the # of the edit that failed
 | 
|---|
| 98 |  ;         IBPB(1) = "" if valid appt
 | 
|---|
| 99 |  ;         IBPB(2) = "" if valid add/edit stop code
 | 
|---|
| 100 |  ;         IBPB(3) = 0-node of disposition file entry if valid disp
 | 
|---|
| 101 |  ; Function returns true if potentially billable or false if not
 | 
|---|
| 102 |  N DFN,IBAD,IBD,IBSRCE,QUIT
 | 
|---|
| 103 |  S DFN=$P(IBOE0,U,2),IBSRCE=$P(IBOE0,U,8),IBD=IBOE0\1
 | 
|---|
| 104 |  I $D(IBCK(0))!($D(IBCK(11))) S QUIT=0 D  G:QUIT BILLCKQ
 | 
|---|
| 105 |  . N Z
 | 
|---|
| 106 |  . I $D(IBCK(11)),$P(IBOE0,U,6) D  Q:QUIT  ;Check parent encounter
 | 
|---|
| 107 |  .. S Z=$$ENCL^IBAMTS2($P(IBOE0,U,6))
 | 
|---|
| 108 |  .. I $P(Z,U,3)=1 S QUIT=1,IBPB=11
 | 
|---|
| 109 |  . S Z=$$ENCL^IBAMTS2(IBOE)
 | 
|---|
| 110 |  . I $D(IBCK(0)),Z[1 S QUIT=1,IBPB=0 Q
 | 
|---|
| 111 |  . I $D(IBCK(11)),'$P(IBOE0,U,6),$P(Z,U,3)=1 S QUIT=1,IBPB=11
 | 
|---|
| 112 |  I $D(IBCK(4)),'$$BIL^DGMTUB(DFN,+IBOE0) S IBPB=4 G BILLCKQ
 | 
|---|
| 113 |  I $D(IBCK(5)),$$INPT^IBAMTS1(DFN,IBD_.2359) S IBPB=5 G BILLCKQ
 | 
|---|
| 114 |  I $D(IBCK(6)),$$CNP^IBECEAU(DFN,IBD) S IBPB=6 G BILLCKQ
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  ; - Appointment or stop code
 | 
|---|
| 117 |  I "12"[IBSRCE D  G BILLCKQ
 | 
|---|
| 118 |  . I $D(IBCK(13))!($D(IBCK(13.1))),IBSRCE=1 D  Q:$G(IBPB)
 | 
|---|
| 119 |  .. I '$$APPTCT^IBEFUNC(IBOE0),$S('$D(IBCK(13.1)):1,1:$P(IBOE0,U,12)'=12) S IBPB=13
 | 
|---|
| 120 |  . I $D(IBCK(14)),$$RPT^IBEFUNC(+$P(IBOE0,U,10),IBD) S IBPB=14 Q
 | 
|---|
| 121 |  . I $D(IBCK(1)),$$IGN^IBEFUNC(+$P(IBOE0,U,10),IBD) S IBPB=1 Q
 | 
|---|
| 122 |  . I $D(IBCK(2)),$$NCTCL^IBEFUNC(IBOE) S IBPB=2 Q
 | 
|---|
| 123 |  . I $D(IBCK(3)),$$NBCL^IBEFUNC(+$P(IBOE0,U,4),IBD) S IBPB=3 Q
 | 
|---|
| 124 |  . I $D(IBCK(7)),$$NBST^IBEFUNC(+$P(IBOE0,U,3),IBD) S IBPB=7 Q
 | 
|---|
| 125 |  . I $D(IBCK(8)),$$NBCSC^IBEFUNC(+$P(IBOE0,U,3),IBD) S IBPB=8 Q
 | 
|---|
| 126 |  . I $D(IBCK(12)),$$NBCT^IBEFUNC(+$P(IBOE0,U,4),IBD) S IBPB=12 Q
 | 
|---|
| 127 |  . ;
 | 
|---|
| 128 |  . S IBPB(IBSRCE)=""
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 |  ; - Disposition
 | 
|---|
| 131 |  S IBAD=$$DISND^IBSDU(IBOE,IBOE0)
 | 
|---|
| 132 |  I $D(IBCK(9)),'$$DISCT^IBEFUNC(IBOE,IBOE0) S IBPB=9 G BILLCKQ
 | 
|---|
| 133 |  I $D(IBCK(10)),$$NBDIS^IBEFUNC(+$P(IBAD,U,7),IBD) S IBPB=10 G BILLCKQ
 | 
|---|
| 134 |  S IBPB(3)=IBAD
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 | BILLCKQ Q ($G(IBPB)="")
 | 
|---|
| 137 |  ;
 | 
|---|