| 1 | IBAMTC ;ALB/CPM-MEANS TEST NIGHTLY COMPILATION JOB ;09-OCT-91 | 
|---|
| 2 | V ;;2.0;INTEGRATED BILLING;**34,52,70,93,100,118,115,132,150,153,137,176,215,275,321,312**;21-MAR-94 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | INIT ; Entry point - initialize variables and parameters | 
|---|
| 6 | ; | 
|---|
| 7 | ;*** | 
|---|
| 8 | ;S XRTL=$ZU(0),XRTN="IBAMTC-1" D T0^%ZOSV ;start rt clock | 
|---|
| 9 | ; | 
|---|
| 10 | D UPDT^IBARXEPS($$FMADD^XLFDT(DT,-30),DT,1) | 
|---|
| 11 | ; | 
|---|
| 12 | D NIGHTLY^IBTRKR ; claims tracking nightly update | 
|---|
| 13 | ; | 
|---|
| 14 | D ^IBCD ; automated biller | 
|---|
| 15 | ; | 
|---|
| 16 | D RELPR^IBAMTV3 ; auto-release patient charges on hold at least 60 days | 
|---|
| 17 | ; | 
|---|
| 18 | D EN^IBOHRL ; auto-release patient charges on hold longer than 90 days | 
|---|
| 19 | ; | 
|---|
| 20 | K IBDT D BJ^IBJDE  ; Automated DM extract monthly background job. | 
|---|
| 21 | ; | 
|---|
| 22 | ; - transfer pricing background job | 
|---|
| 23 | I '+$$SWSTAT^IBBAPI() D ^IBATEI1                           ;IB*2.0*312 | 
|---|
| 24 | ; | 
|---|
| 25 | D NIGHT^IBARXMA ; transmit copay cap info | 
|---|
| 26 | ; | 
|---|
| 27 | D NOW^%DTC S IBAFY=$$FY^IBOUTL(X),DT=X,U="^" | 
|---|
| 28 | S (IBERRN,IBWHER,IBJOB,IBY,Y)=1,IBCNT=0 K ^TMP($J,"IBAMTC") | 
|---|
| 29 | D SITE^IBAUTL I Y<1 S IBY=Y D ERR G CLEAN | 
|---|
| 30 | D SERV^IBAUTL2 I IBY<1 D ERR G CLEAN | 
|---|
| 31 | ; | 
|---|
| 32 | ; Compile Means Test copay and per diem charges for all inpatients | 
|---|
| 33 | ; Check PFSS Switch                                        ;IB*2.0*312 | 
|---|
| 34 | I '+$$SWSTAT^IBBAPI() S (IBWARD,DFN)="" F  S IBWARD=$O(^DPT("CN",IBWARD)) Q:IBWARD=""  F  S DFN=$O(^DPT("CN",IBWARD,DFN)) Q:'DFN  W !,DFN S IBA=^(DFN),IBY=1 D PROC | 
|---|
| 35 | ; | 
|---|
| 36 | ;send inpatients' CV (CombatVet) expiration e-mail alert | 
|---|
| 37 | D CVEXMAIL^IBACV(DT) | 
|---|
| 38 | ; | 
|---|
| 39 | ;check & start LTC Monthly Job LTC if necessary | 
|---|
| 40 | ; This code may need to be expanded, IF we don't          ;IB*2.0*312 | 
|---|
| 41 | ; implement on the 1st of the month, for a clean cut over ;IB*2.0*312 | 
|---|
| 42 | I '+$$SWSTAT^IBBAPI() D NJ^IBAECN1                        ;IB*2.0*312 | 
|---|
| 43 | ; | 
|---|
| 44 | D EN^IBCE ; Transmit electronic bills | 
|---|
| 45 | ; Clean up expired Means Test billing clocks | 
|---|
| 46 | CLEAN S %H=+$H-1 D YMD^%DTC S IBDT=X,(IBN,DFN)=0,IBWHER=23 | 
|---|
| 47 | F  S DFN=$O(^IBE(351,"ACT",DFN)) Q:'DFN  D | 
|---|
| 48 | . F  S IBN=$O(^IBE(351,"ACT",DFN,IBN)) Q:'IBN  D | 
|---|
| 49 | ..  S IBY=1,X1=IBDT,(X2,IBCLDT)=+$P($G(^IBE(351,+IBN,0)),"^",3) D ^%DTC | 
|---|
| 50 | ..  I X>364 S IBCLDA=IBN D CLOCKCL^IBAUTL3,ERR:IBY<1 | 
|---|
| 51 | ; | 
|---|
| 52 | ; Close out incomplete events where the patient has been discharged, | 
|---|
| 53 | ; pass the related charges if they appear correct, and send a bulletin | 
|---|
| 54 | ; - also, send bulletins on old incomplete charges where there is no | 
|---|
| 55 | ; incomplete event | 
|---|
| 56 | D MAIN^IBAMTC2 | 
|---|
| 57 | ; | 
|---|
| 58 | ;D ^IBAMTC1 | 
|---|
| 59 | ; | 
|---|
| 60 | ; Send bulletin reporting job completion | 
|---|
| 61 | I '+$$SWSTAT^IBBAPI() D BULL^IBAMTC1                     ;IB*2.0*312 | 
|---|
| 62 | ; | 
|---|
| 63 | ; -- purge alerts | 
|---|
| 64 | D PURGE^IBAERR3 | 
|---|
| 65 | ; | 
|---|
| 66 | ; Monitor special inpatient billing cases | 
|---|
| 67 | D BGJ^IBAMTI | 
|---|
| 68 | ; | 
|---|
| 69 | ; Print Pharmacy Copay Exemption Income Test Reminder Letters | 
|---|
| 70 | D EN^IBARXEL | 
|---|
| 71 | ; | 
|---|
| 72 | ; Kill variables and quit. | 
|---|
| 73 | D KILL1 | 
|---|
| 74 | ; | 
|---|
| 75 | I $D(ZTQUEUED),$G(ZTSK) D KILL^%ZTLOAD | 
|---|
| 76 | ;*** | 
|---|
| 77 | ;I $D(XRT0) S:'$D(XRTN) XRTN="IBAMTC" D T1^%ZOSV ;stop rt clock | 
|---|
| 78 | ; | 
|---|
| 79 | Q | 
|---|
| 80 | ; | 
|---|
| 81 | ; | 
|---|
| 82 | PROC ; Process all currently admitted patients. | 
|---|
| 83 | ; | 
|---|
| 84 | D IFCVEXP^IBACV(DFN,DT,IBA) ;if CV has expired (see CVEXMAIL^IBACV) | 
|---|
| 85 | ;-- | 
|---|
| 86 | ;1) checks effective date for LTC legislation. | 
|---|
| 87 | ;2) determine current treating specialty (TS) for the | 
|---|
| 88 | ;"original" admission. | 
|---|
| 89 | ;if TS is LTC: | 
|---|
| 90 | ;  - creates new LTC #350 parent event entry if necessary. | 
|---|
| 91 | ;NOTE: It doesn't stop MT billing for LTC. CALC^IBAUTL4 does it. | 
|---|
| 92 | I $$ISLTCADM^IBAECN1(DFN,IBA) | 
|---|
| 93 | ;-- | 
|---|
| 94 | D ORIG  ; find "original" admission date | 
|---|
| 95 | Q:$$BILST^DGMTUB(DFN)<IBADMDT  ; pat. was last billable before admission | 
|---|
| 96 | Q:IBADMDT\1=DT  ; patient was admitted today - process tomorrow | 
|---|
| 97 | Q:+$$MVT^DGPMOBS(IBA)  ; admitted for Observation & Examination | 
|---|
| 98 | Q:$O(^IBE(351.2,"AC",IBA,0))  ; skip special inpatient admissions | 
|---|
| 99 | ; | 
|---|
| 100 | ; - if vet is SC, create a Special Inpatient Billing Case | 
|---|
| 101 | ;   in file #351.2 (use code 3 for SC, as it is changed to 4 in IBAMTI) | 
|---|
| 102 | D ELIG^VADPT I VAEL(3) D ADM^IBAMTI(DFN,IBA,3) Q | 
|---|
| 103 | ; | 
|---|
| 104 | ; - gather event information | 
|---|
| 105 | D EVFIND^IBAUTL3 I 'IBEVDA D BSEC Q:'IBBS  ; wasn't billable yesterday | 
|---|
| 106 | S X=IBADMDT D H^%DTC S IBBDT=%H D:'IBEVDA LAST^IBAUTL5 | 
|---|
| 107 | I IBEVDA,IBEVCAL S X1=IBEVCAL,X2=1 D C^%DTC S IBBDT=%H | 
|---|
| 108 | S IBEDT=+$H-1 | 
|---|
| 109 | ; - gather clock information | 
|---|
| 110 | S IBWHER=24 D CLOCK^IBAUTL3 I IBY<1 D ERR G PROCQ | 
|---|
| 111 | I IBCLDA S X=IBCLDT D H^%DTC S IBCLCT=IBBDT-%H | 
|---|
| 112 | ; - build charges for inpatient days | 
|---|
| 113 | D ^IBAUTL4 I IBY<1 D ERR G PROCQ | 
|---|
| 114 | ; - pass per diem if over 30 days old, or both per diem and the copay | 
|---|
| 115 | ; - if 4 days from patient's statement date; update event, clock | 
|---|
| 116 | S IBWHER=22 | 
|---|
| 117 | I $G(IBCHPDA),$P($G(^IB(+IBCHPDA,0)),"^",6)>30!($$STD^IBAUTL5(DFN)) S IBNOS=IBCHPDA D FILER^IBAUTL5 I IBY<1 D ERR G PROCQ | 
|---|
| 118 | I $G(IBCHCDA),$$STD^IBAUTL5(DFN) S IBNOS=IBCHCDA D FILER^IBAUTL5 I IBY<1 D ERR G PROCQ | 
|---|
| 119 | I IBEVDA,$D(IBDT) S IBEVCLD=IBDT D EVUPD^IBAUTL3 | 
|---|
| 120 | I IBCLDA D CLUPD^IBAUTL3 | 
|---|
| 121 | PROCQ D KILL Q | 
|---|
| 122 | ; | 
|---|
| 123 | BSEC ; Determine patient's bedsection for the previous day. | 
|---|
| 124 | S X1=DT,X2=-1 D C^%DTC | 
|---|
| 125 | S VAIP("D")=X_.2359 D IN5^VADPT S IBBS=$$SECT^IBAUTL5(+VAIP(8)) Q | 
|---|
| 126 | ; | 
|---|
| 127 | ERR ; Error processing.  Input:  IBY, IBWHER, IBCNT | 
|---|
| 128 | S IBDUZ=DUZ,IBCNT=IBCNT+1 D ^IBAERR1 K IBDUZ Q | 
|---|
| 129 | ;S ^TMP($J,"IBAMTC","E",IBERRN)=$P(IBY,"^",2)_"^"_$S($D(DFN):DFN,1:"")_"^"_IBWHER,IBERRN=IBERRN+1 Q | 
|---|
| 130 | ; | 
|---|
| 131 | ORIG ; Find first admission date, considering ASIH movements | 
|---|
| 132 | ;  Input:  IBA    Output:  IBADMDT | 
|---|
| 133 | N X,Y,Z S Z=IBA | 
|---|
| 134 | F  S X=$G(^DGPM(Z,0)),Y=$P(X,"^",21) Q:Y=""  S Z=+$P($G(^DGPM(Y,0)),"^",14) | 
|---|
| 135 | S IBADMDT=+X Q | 
|---|
| 136 | ; | 
|---|
| 137 | KILL1 ; Kill all IB variables. | 
|---|
| 138 | K VAERR,VAEL,VAIP,IBA,IBADMDT,IBAFY,IBATYP,IBBDT,IBBS,IBCHARG,IBCHG,IBCNT,IBCUR,IBDESC,IBDISDT,IBDT,IBDUZ,IBFAC,IBI,IBIL,IBJOB,IBLC,IBMAX | 
|---|
| 139 | K IBN,IBNOS,IBSAVBS,IBSEQNO,IBSERV,IBSITE,IBSL,IBTRAN,IBX,IBY,IBWHER,IBWARD,IBEDT,IBCHCTY,IBCHPDE,IBERRN,IBASIH,IBRTED | 
|---|
| 140 | KILL ; Kill all IB variables needed to build charges. | 
|---|
| 141 | K IBCLCT,IBCLDA,IBCLDT,IBCLDAY,IBCLDOL,IBCHPDA,IBCHCDA,IBCHG,IBCHFR,IBCHTO,IBCHTOTL,IBBS,IBNH | 
|---|
| 142 | K IBEVDA,IBEVDT,IBEVCLD,IBEVCAL,IBEVNEW,IBEVOLD,IBMED,IBTOTL,IBDESC,IBIL,IBTRAN,IBATYP,IBDATE | 
|---|
| 143 | Q | 
|---|