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