1 | IBAECN1 ;WOIFO/SS-LTC PHASE 2 NIGHTLY JOB ; 20-FEB-02
|
---|
2 | ;;2.0;INTEGRATED BILLING;**176,188**;21-MAR-94
|
---|
3 | ;; Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | BILDATE() ;billing start date for Long Term Care Billing
|
---|
6 | ; Means Test for LTC care billing stopped on JUNE 17,2002 /see
|
---|
7 | ; STDATE^IBAECU1()/ . LTC billing for LTC care must start on
|
---|
8 | ; JULY 26,2002. There is no billing for LTC care in period
|
---|
9 | ; between JUNE 17,2002 and JULY 26,2002. That means LTC clock
|
---|
10 | ; will start on JULY 5,2002 (because of 21 "free" days)
|
---|
11 | Q 3020705 ;
|
---|
12 | ;
|
---|
13 | NJ ;LTC Nightly job
|
---|
14 | N X I $D(^%ZOSF("TRAP")) S X="ERR^IBAECN1",@^("TRAP")
|
---|
15 | N IBPRMNTH S IBPRMNTH=$$PREVMNTH^IBAECM1() ;last day of previous month
|
---|
16 | Q:$$BILDATE()>IBPRMNTH
|
---|
17 | ;
|
---|
18 | N IBLSTMJ S IBLSTMJ=$$LASTMJ^IBAECU()
|
---|
19 | ;run code for the 1st monthly job
|
---|
20 | I IBLSTMJ=0 D MJ1ST^IBAECM3 Q
|
---|
21 | ;if was run & successfully completed this month- quit
|
---|
22 | Q:IBLSTMJ'<($E($$TODAY(),1,5)_"01")
|
---|
23 | ;------- local arrays
|
---|
24 | ;IBMDS1(0)-1st,IBMDS1(1) last day in the month,
|
---|
25 | ;IBMDS1(2)-year_month, IBMDS1 - number of days
|
---|
26 | N IBMDS1 S IBMDS1=""
|
---|
27 | ;dates,days for processing month which is normally
|
---|
28 | ; previous month because MJ runs 1stday of the month
|
---|
29 | S IBMDS1(1)=IBPRMNTH,IBMDS1(2)=$E(IBMDS1(1),1,5)
|
---|
30 | S IBMDS1(0)=IBMDS1(2)_"01",IBMDS1=$E(IBMDS1(1),6,7)
|
---|
31 | D MJT^IBAECM1
|
---|
32 | D RESET
|
---|
33 | Q
|
---|
34 | ;
|
---|
35 | ERR ;Error trap for NJ
|
---|
36 | N XMSUB,XMTEXT,XMY,XMZ,XMMG,IBL,IBT,XMDUZ,IBPAT,IBTODAY
|
---|
37 | N XMGROUP S XMGROUP=$$GET1^DIQ(350.9,"1,",.09)
|
---|
38 | Q:XMGROUP=""
|
---|
39 | S XMGROUP="G."_XMGROUP
|
---|
40 | S IBPAT="Unknown",IBTODAY=""
|
---|
41 | N Y D NOW^%DTC S Y=% X ^DD("DD") S IBTODAY=Y
|
---|
42 | I +$G(DFN)>0 D
|
---|
43 | . N VADM,VA,VAERR
|
---|
44 | . D DEM^VADPT
|
---|
45 | . S IBPAT=$G(VADM(1))_", SSN: "_$P($G(VADM(2)),"^",2)
|
---|
46 | S:IBPAT=", SSN: " IBPAT="Unknown"
|
---|
47 | S XMSUB="LTC Monthly Job Failure",XMY(XMGROUP)=""
|
---|
48 | S XMTEXT="IBT(",XMDUZ="INTEGRATED BILLING PACKAGE"
|
---|
49 | S IBT(1,0)="**********************************************"
|
---|
50 | S IBT(2,0)="LTC Monthly Job crashed on "_IBTODAY
|
---|
51 | S IBT(3,0)="when the system was processing the following patient : "
|
---|
52 | S IBT(4,0)=" "_IBPAT
|
---|
53 | S IBT(5,0)="Please verify data for the patient, fix findings"
|
---|
54 | S IBT(6,0)="and then:"
|
---|
55 | S IBT(7,0)="- if today is the last day of the month then you"
|
---|
56 | S IBT(8,0)=" need to run NJ^IBAECN1 today manually from"
|
---|
57 | S IBT(9,0)=" programmer mode."
|
---|
58 | S IBT(10,0)="- otherwise let the system run the NJ^IBAECN1"
|
---|
59 | S IBT(11,0)=" automatically after midnight."
|
---|
60 | S IBT(12,0)=""
|
---|
61 | S IBT(13,0)="In both cases, please, check patient's charges and"
|
---|
62 | S IBT(14,0)="your e-mail again."
|
---|
63 | D ^XMD
|
---|
64 | Q
|
---|
65 | ;
|
---|
66 | ;checks if the most recent treating specialty of the admission
|
---|
67 | ;is related to LTC?
|
---|
68 | ;invoked from PROC^IBAMTC Exmpl:
|
---|
69 | ; I $$ISLTCADM(DFN,IBA)
|
---|
70 | ;to create entries in 351.81 if necessary
|
---|
71 | ;Input:
|
---|
72 | ;IBDFN - patient's ien in file (#2)
|
---|
73 | ;IB405 - ien of admission (#405)
|
---|
74 | ;Output:
|
---|
75 | ;returns 0 if the specialty for non-LTC care
|
---|
76 | ;otherwise - returns 1
|
---|
77 | ;
|
---|
78 | ISLTCADM(IBDFN,IB405) ;
|
---|
79 | ;1) treat all LTC as Means Test if the legislation is not effective yet
|
---|
80 | I $$YESTRDAY()<$$BILDATE() Q 0
|
---|
81 | N IBSPEC,IBTS
|
---|
82 | S IBTS="M"
|
---|
83 | ;2) determine treating specialty (TS)
|
---|
84 | S IBSPEC=$$LASTTS(IBDFN,IB405) ;most recent TS (pointer #42.4)
|
---|
85 | I IBSPEC>0 S IBTS=$P($$TREATSP^IBAECU2(IBSPEC),"^",1) ;is it LTC or not?
|
---|
86 | I IBSPEC'>0 S IBTS="M" ;treat unknown as Means Test
|
---|
87 | I IBTS="L" D Q 1 ;if TS is LTC
|
---|
88 | . I $$CLOCK^IBAECU(IBDFN,$$YESTRDAY())
|
---|
89 | Q 0
|
---|
90 | ;finds the most recent parent entry in #350 related to admission
|
---|
91 | ;Input:
|
---|
92 | ;IBDFN - patient's dfn
|
---|
93 | ;IBDT - the date to seek from (today)
|
---|
94 | ;IBADM - admission we are seeking for
|
---|
95 | ;IBSTAT = status we are seeking for
|
---|
96 | ;output:
|
---|
97 | ;returns ien_of_350^IB_action_type
|
---|
98 | ;or "0^" if not found
|
---|
99 | FIND350(IBDFN,IBDATE,IBADM,IBSTAT) ;
|
---|
100 | N IB350,IBDT,IBINF,IBFL
|
---|
101 | S IBFL=0,IBINF=""
|
---|
102 | S IBDT=-IBDATE F S IBDT=$O(^IB("AFDT",IBDFN,IBDT)) Q:IBFL!(+IBDT=0) D
|
---|
103 | . S IB350=0 F S IB350=$O(^IB("AFDT",IBDFN,IBDT,IB350)) Q:+IB350=0 D
|
---|
104 | . . Q:'$D(^IB("AC",IBSTAT,IB350))
|
---|
105 | . . S IBINF=$G(^IB(IB350,0))
|
---|
106 | . . Q:IB350'=$P(IBINF,"^",16) ;non parent
|
---|
107 | . . Q:$P($P(IBINF,"^",4),":",1)'="405" ;non inpatient
|
---|
108 | . . S:$P($P(IBINF,"^",4),":",2)=IBADM IBFL=IB350
|
---|
109 | Q IBFL_"^"_$P($G(IBINF),"^",3)
|
---|
110 | ;
|
---|
111 | ;edit #350 event entry
|
---|
112 | ;IBIENCL - ien of #350
|
---|
113 | ;IBLSTDT = DATE LAST BILLED
|
---|
114 | ;IBADM - ien in #405
|
---|
115 | STAT350(IBIENCL,IBLSTDT,IBADM) ;
|
---|
116 | N IBIENS,IBFDA,IBERR,IBDFN1
|
---|
117 | S IBDFN1=$P($G(^IB(IBIENCL,0)),"^",2)
|
---|
118 | Q:+IBDFN1=0
|
---|
119 | S IBIENS=IBIENCL_"," ; "D0,"
|
---|
120 | S IBFDA(350,IBIENS,13)=+$G(DUZ)
|
---|
121 | S:'$P($G(^IB(IBIENCL,0)),"^",17) IBFDA(350,IBIENS,.17)=(+$G(^DGPM(IBADM,0)))\1
|
---|
122 | S IBFDA(350,IBIENS,.18)=(+$G(IBLSTDT))\1
|
---|
123 | D NOW^%DTC S IBD=%
|
---|
124 | S IBFDA(350,IBIENS,14)=IBD
|
---|
125 | D FILE^DIE("","IBFDA","IBERR")
|
---|
126 | I $D(IBERR) D
|
---|
127 | . D ERRLOG^IBAECU5(+$G(IBDFN1),+$G(IBIENCL),"BILLING ACTION:","closing parent entry"_$G(IBERR("DIERR",1,"TEXT",1)))
|
---|
128 | Q
|
---|
129 | ;------
|
---|
130 | ;create a new inpatient parent event entry in #350
|
---|
131 | ;Input:
|
---|
132 | ;DFN - patient's ien #2
|
---|
133 | ;IBADMIEN - admission ien #405
|
---|
134 | ;IBEVDT - event date (piece 17) for parent entry must be an admission date,
|
---|
135 | ;IBNH:
|
---|
136 | ; 1 - for 56 (#350.1) NHCU ADMISSION
|
---|
137 | ; 93 - for 93 (#350.1) LTC ADMISSION
|
---|
138 | ; 0 - all other events
|
---|
139 | ;Returns:
|
---|
140 | ;New ien of #350 Or 0 if not created
|
---|
141 | CREV350(DFN,IBADMIEN,IBEVDT,IBNH) ;
|
---|
142 | Q:IBEVDT=0 0
|
---|
143 | N IBEVDA,IBSL,IBSERV
|
---|
144 | S IBEVDA=0
|
---|
145 | D SERV^IBAUTL2
|
---|
146 | I '$D(IBSITE)!('$D(IBFAC)) D SITE^IBAUTL
|
---|
147 | S IBSL="405:"_IBADMIEN
|
---|
148 | ;if LTC ADMISSION set IBNHLTC
|
---|
149 | I IBNH=93 N IBNHLTC S IBNHLTC=93
|
---|
150 | D EVADD^IBAUTL3
|
---|
151 | Q IBEVDA
|
---|
152 | ;
|
---|
153 | ;Find original admission ien, considering ASIH movements
|
---|
154 | ;Input: ien of 405 that can be "child", for example
|
---|
155 | ; we have ien of Nursing Home admission
|
---|
156 | ; then patient moved to ASIH to hospital
|
---|
157 | ; if IBA is ASIH hospital admission ien then call will return
|
---|
158 | ; "original" Nursing Home admission's ien
|
---|
159 | ;Output: ien of 405 of "original" admission
|
---|
160 | ORIGADM(IBA) ;
|
---|
161 | N X,Y,Z S Z=IBA
|
---|
162 | F S X=$G(^DGPM(Z,0)),Y=$P(X,"^",21) Q:Y="" S Z=+$P($G(^DGPM(Y,0)),"^",14)
|
---|
163 | Q +Z
|
---|
164 | ;
|
---|
165 | ;most recent treating specialty
|
---|
166 | ;input:
|
---|
167 | ;IBDFN - patient ien
|
---|
168 | ;IB405ADM - admission's #405 ien
|
---|
169 | ;output:
|
---|
170 | ;returns ien of SPECIALTY FILE (#42.4)
|
---|
171 | LASTTS(IBDFN,IB405ADM) ;
|
---|
172 | N IBDT6,IBSPEC
|
---|
173 | S IBDT6=0
|
---|
174 | S IBDT6=+$O(^DGPM("ATS",IBDFN,IB405ADM,IBDT6))
|
---|
175 | Q:+IBDT6=0 -1 ;error
|
---|
176 | S IBSPEC=$O(^DGPM("ATS",IBDFN,IB405ADM,IBDT6,0))
|
---|
177 | Q:+IBSPEC=0 -1 ;error
|
---|
178 | ;convert fac spec (45.7) -> treat spec (#42.4)
|
---|
179 | S IBSPEC=+$P($G(^DIC(45.7,IBSPEC,0)),"^",2)
|
---|
180 | Q:+IBSPEC=0 -1
|
---|
181 | Q IBSPEC
|
---|
182 | ;returns today date
|
---|
183 | TODAY() ;
|
---|
184 | N X
|
---|
185 | D NOW^%DTC
|
---|
186 | Q X
|
---|
187 | ;returns yesterday date
|
---|
188 | YESTRDAY() ;
|
---|
189 | N X1,X2,X
|
---|
190 | S X1=$$TODAY()
|
---|
191 | S X2=-1
|
---|
192 | D C^%DTC
|
---|
193 | Q X
|
---|
194 | ;returns 1 if the most recent treating specialty for this billable
|
---|
195 | ;event and for this date was LTC
|
---|
196 | ;DFN -patient ien
|
---|
197 | ;IBEVDA - ien of event in #350
|
---|
198 | ;IBDT - date
|
---|
199 | ASIHORG(DFN,IBEVDA,IBDT) ;
|
---|
200 | N IB405 S IB405=+$P($P($G(^IB(+IBEVDA,0)),"^",4),":",2)
|
---|
201 | Q:IB405=0 0
|
---|
202 | Q $$ISLTC4DT(DFN,IB405,IBDT_.2359)
|
---|
203 | ;
|
---|
204 | ;returns 1 if the most recent treating specialty for the admission
|
---|
205 | ;and the date was LTC specialty
|
---|
206 | ;otherwise returns 0 or -1
|
---|
207 | ;DFN -patient ien
|
---|
208 | ;IB405ADM - ien of #405
|
---|
209 | ;IBDT - date
|
---|
210 | ISLTC4DT(IBDFN,IB405ADM,IBDT) ;
|
---|
211 | N IBDT6,IBSPEC,IBTS
|
---|
212 | S IBDT6=9999999.9999999-IBDT
|
---|
213 | S IBDT6=+$O(^DGPM("ATS",IBDFN,IB405ADM,IBDT6))
|
---|
214 | Q:+IBDT6=0 -1 ;error
|
---|
215 | S IBSPEC=$O(^DGPM("ATS",IBDFN,IB405ADM,IBDT6,0))
|
---|
216 | Q:+IBSPEC=0 -1 ;error
|
---|
217 | ;convert fac spec (45.7) -> treat spec (#42.4)
|
---|
218 | S IBSPEC=+$P($G(^DIC(45.7,IBSPEC,0)),"^",2)
|
---|
219 | I IBSPEC>0 S IBTS=$P($$TREATSP^IBAECU2(IBSPEC),"^",1) ;is it LTC or not?
|
---|
220 | I IBSPEC'>0 S IBTS="M" ;unknown as Means Test
|
---|
221 | I IBTS="L" Q 1 ;if TS is LTC
|
---|
222 | Q 0
|
---|
223 | ;
|
---|
224 | RESET ; this will reset the ^xtmp global
|
---|
225 | K ^XTMP("IB1010EC")
|
---|
226 | S ^XTMP("IB1010EC",0)=$$FMADD^XLFDT(DT,60)_"^"_DT_"^LIST OF PATIENTS ALREADY REPORTED AS MISSING 1010EC INFO"
|
---|
227 | Q
|
---|
228 | ;
|
---|