1 | DG53735P ;EG,TMK - Re-transmit OEF-OIF Data to HEC ; 10/24/2006
|
---|
2 | ;;5.3;Registration;**735**;Aug 13,1993;Build 11
|
---|
3 | ; LOGIC USED:
|
---|
4 | ; - Find all veterans with OEF/OIF data using the 'ALOEIF;' cross
|
---|
5 | ; reference by latest OEF/OIF TO DATE and patient
|
---|
6 | ; - Check the PATIENT file (#2) record for a valid CV end date.
|
---|
7 | ; - If the CV end date is not valid, or
|
---|
8 | ; If the CV End Date is valid, but the last Z07 message transmission
|
---|
9 | ; for the veteran was dated before the OEF/OIF data was added,
|
---|
10 | ; Flag the record so it will be sent to HEC via an HL7 Z07 message
|
---|
11 | ; and if the CV End date was not valid, update it to be the
|
---|
12 | ; calculated value.
|
---|
13 | ;
|
---|
14 | EP ; Queue the conversion
|
---|
15 | N %
|
---|
16 | S %=$$NEWCP^XPDUTL("IEN12","POST^DG53735P")
|
---|
17 | S %=$$NEWCP^XPDUTL("END","END^DG53735P") ; Leave as last update
|
---|
18 | Q
|
---|
19 | ;
|
---|
20 | POST N ZTSK
|
---|
21 | D BMES^XPDUTL("Queue-ing Transmit OEF/OIF data to HEC ...")
|
---|
22 | D QUE
|
---|
23 | D BMES^XPDUTL("This request queued as Task # "_$G(ZTSK))
|
---|
24 | D BMES^XPDUTL("=====================================================")
|
---|
25 | D BMES^XPDUTL("")
|
---|
26 | Q
|
---|
27 | ;
|
---|
28 | END ; Post-install done
|
---|
29 | D BMES^XPDUTL("Post install complete.")
|
---|
30 | Q
|
---|
31 | ;
|
---|
32 | QUE N ZTRTN,ZTDESC,ZTSAVE,ZTIO,ZTDTH
|
---|
33 | S ZTRTN="RUN^DG53735P",ZTDESC="Re-transmit of OEF/OIF Data"
|
---|
34 | S ZTIO="",ZTDTH=$$NOW^XLFDT()
|
---|
35 | D ^%ZTLOAD
|
---|
36 | Q
|
---|
37 | ;
|
---|
38 | RUN ;entry point from taskman
|
---|
39 | N NAMSPC
|
---|
40 | S NAMSPC=$$NAMSPC
|
---|
41 | I '$$CHKSTAT(1,NAMSPC) D Q
|
---|
42 | . D BMES^XPDUTL("Conversion routine already running, process aborted")
|
---|
43 | N TESTING
|
---|
44 | S TESTING="N" K ^XTMP(NAMSPC) D DEQUE(NAMSPC)
|
---|
45 | Q
|
---|
46 | ;
|
---|
47 | TEST ; test entry point
|
---|
48 | N TESTING,X,STARTDT,ENDDT,NAMSPC
|
---|
49 | S NAMSPC=$$NAMSPC
|
---|
50 | S TESTING="Y"
|
---|
51 | S X=$$CHKSTAT(0,NAMSPC)
|
---|
52 | K ^XTMP(NAMSPC,"TEST RANGE"),^XTMP(NAMSPC,"TEST")
|
---|
53 | S STARTDT=$$TESTID("Starting ")
|
---|
54 | Q:'STARTDT
|
---|
55 | S ENDDT=$$TESTID("Ending ")
|
---|
56 | Q:'ENDDT
|
---|
57 | I ENDDT<STARTDT W !,?10,"Ending To Date can't be less than starting To Date" Q
|
---|
58 | S ^XTMP(NAMSPC,"TEST RANGE")=STARTDT_U_ENDDT
|
---|
59 | D DEQUE(NAMSPC)
|
---|
60 | Q
|
---|
61 | ;
|
---|
62 | TESTID(MESS) ;
|
---|
63 | N DGX,DIR,DTOUT,DUOUT,X,Y
|
---|
64 | S DIR(0)="DA",DIR("A")=MESS_" To Date for OEF/OIF xref: "
|
---|
65 | W !! D ^DIR K DIR
|
---|
66 | S DGX=Y
|
---|
67 | I $D(DUOUT)!$D(DTOUT) S DGX=""
|
---|
68 | Q DGX
|
---|
69 | ;
|
---|
70 | DEQUE(NAMSPC) ;
|
---|
71 | N X
|
---|
72 | I '$D(TESTING) N TESTING S TESTING="N"
|
---|
73 | D SETUPX(90,NAMSPC)
|
---|
74 | S X=$G(^XTMP(NAMSPC,0,0))
|
---|
75 | S $P(X,U,6)="RUNNING"
|
---|
76 | S $P(X,U,7)=$$NOW^XLFDT()
|
---|
77 | S ^XTMP(NAMSPC,0,0)=X
|
---|
78 | ;
|
---|
79 | S ZTSTOP=$$LOOP(NAMSPC,TESTING)
|
---|
80 | S X=$G(^XTMP(NAMSPC,0,0))
|
---|
81 | S $P(X,U,6)=$S(ZTSTOP:"STOPPED",1:"COMPLETED")
|
---|
82 | S $P(X,U,8)=$$NOW^XLFDT()
|
---|
83 | S ^XTMP(NAMSPC,0,0)=X
|
---|
84 | ;
|
---|
85 | D MAIL(NAMSPC,TESTING,DUZ)
|
---|
86 | K TESTING
|
---|
87 | L -^XTMP(NAMSPC)
|
---|
88 | Q
|
---|
89 | ;
|
---|
90 | SETUPX(EXPDAYS,NAMSPC) ;
|
---|
91 | ; requires EXPDAYS - # of days to keep XTMP
|
---|
92 | N BEGTIME,PURGDT
|
---|
93 | S BEGTIME=$$NOW^XLFDT()
|
---|
94 | S PURGDT=$$FMADD^XLFDT(BEGTIME,EXPDAYS)
|
---|
95 | S ^XTMP(NAMSPC,0)=PURGDT_U_BEGTIME
|
---|
96 | S $P(^XTMP(NAMSPC,0),U,3)="Transmit unsent OEF/OIF data to HEC"
|
---|
97 | Q
|
---|
98 | ;
|
---|
99 | LOOP(NAMSPC,TESTING) ;
|
---|
100 | ;returns stop flag
|
---|
101 | N X,XREC,LASTREC,TOTREC,TOTPAT
|
---|
102 | S LASTREC="0;0;;0;0",ZTSTOP=0
|
---|
103 | S TOTREC=0
|
---|
104 | I $D(^XTMP(NAMSPC,0,0)) D
|
---|
105 | . S XREC=$G(^XTMP(NAMSPC,0,0))
|
---|
106 | . ;last TODT processed
|
---|
107 | . S LASTREC=$P(XREC,U,1)
|
---|
108 | . ;total records read
|
---|
109 | . S TOTREC=+$P(XREC,U,2)
|
---|
110 | . S TOTPAT=+$P(XREC,U,10)
|
---|
111 | . Q
|
---|
112 | D ALOEIF(NAMSPC,TESTING,.ZTSTOP)
|
---|
113 | Q ZTSTOP
|
---|
114 | ;
|
---|
115 | ALOEIF(NAMSPC,TESTING,ZTSTOP) ;
|
---|
116 | N CONF,DFN,END,FIRST,FRDT,IEN,TODT,X
|
---|
117 | S ZTSTOP=0
|
---|
118 | S TODT=$P(LASTREC,";"),END=9999999
|
---|
119 | I $G(TESTING)="Y" D
|
---|
120 | . S X=$G(^XTMP(NAMSPC,"TEST RANGE"))
|
---|
121 | . I $L(X) S TODT=$P(X,U,1)-1,END=$P(X,U,2)
|
---|
122 | S FIRST("FRDT")=$P(LASTREC,";",2),FIRST("CONF")=$P(LASTREC,";",3),FIRST("DFN")=$P(LASTREC,";",4),FIRST("IEN")=$P(LASTREC,";",5)
|
---|
123 | F S TODT=$O(^DPT("ALOEIF",TODT)) Q:'TODT!ZTSTOP S:TODT>END ZTSTOP=2 Q:ZTSTOP S FRDT=FIRST("FRDT"),FIRST("FRDT")=0 F S FRDT=$O(^DPT("ALOEIF",TODT,FRDT)) Q:'FRDT!ZTSTOP S CONF=FIRST("CONF"),FIRST("CONF")="" D
|
---|
124 | . F S CONF=$O(^DPT("ALOEIF",TODT,FRDT,CONF)) Q:CONF=""!ZTSTOP S DFN=FIRST("DFN"),FIRST("DFN")=0 F S DFN=$O(^DPT("ALOEIF",TODT,FRDT,CONF,DFN)) Q:'DFN!ZTSTOP S IEN=FIRST("IEN"),FIRST("IEN")=0 D
|
---|
125 | .. F S IEN=$O(^DPT("ALOEIF",TODT,FRDT,CONF,DFN,IEN)) Q:'IEN!ZTSTOP D CHKR(DFN,IEN)
|
---|
126 | Q
|
---|
127 | ;
|
---|
128 | CHKR(DFN,IEN) ;
|
---|
129 | N X,CEN,CALC
|
---|
130 | ; Assume TODT,FRDT,CONF,TOTREC,LASTREC,TOTPAT,NAMSPC are defined
|
---|
131 | S TOTREC=TOTREC+1
|
---|
132 | ;
|
---|
133 | ; Chk for correct CV End Date
|
---|
134 | I '$$CHPAT(DFN,.CEN,.CALC) D
|
---|
135 | . D TRANSMIT(DFN)
|
---|
136 | ;
|
---|
137 | E D ; If CV End Date OK, must be transmitted after OEF/OIF filed
|
---|
138 | . N LD,LTR,LOEIF
|
---|
139 | . S LD=$$YEAR^IVMPLOG(DFN),LTR=$P($G(^IVM(301.5,+$O(^IVM(301.5,"APT",DFN,+LD,0)),0)),U,5)
|
---|
140 | . S LOEIF=$P($G(^DPT(DFN,.3215,IEN,0)),U,5)
|
---|
141 | . I $S('LD!'LTR:1,LOEIF>LTR:1,1:0) D
|
---|
142 | .. D SET(DFN,CEN,CALC,"OEF/OIF DATA NOT TX")
|
---|
143 | .. D TRANSMIT(DFN)
|
---|
144 | ;
|
---|
145 | S LASTREC=TODT_";"_FRDT_";"_CONF_";"_DFN_";"_IEN
|
---|
146 | D UPDATEX(NAMSPC,TOTREC,LASTREC,TOTPAT)
|
---|
147 | ;
|
---|
148 | I (TOTREC#100)=0 S ZTSTOP=$$STOP(NAMSPC)
|
---|
149 | Q
|
---|
150 | ;
|
---|
151 | TRANSMIT(DFN) ;
|
---|
152 | S TOTPAT=TOTPAT+1
|
---|
153 | Q:TESTING="Y" ; No update
|
---|
154 | D EVENT^IVMPLOG(DFN)
|
---|
155 | Q
|
---|
156 | ;
|
---|
157 | CHPAT(DFN,CEN,CALC) ; Function returns:
|
---|
158 | ; 0 if no CV End date or CV End date not correct
|
---|
159 | ; 1 if CV End Date correct
|
---|
160 | ; Also returns CEN=CV END DATE ON FILE CALC=CALCULATED CV END DATE
|
---|
161 | ;
|
---|
162 | N DGARRY,DGOK,X
|
---|
163 | S (CEN,CALC)=""
|
---|
164 | S CEN=$P($G(^DPT(DFN,.52)),U,15)
|
---|
165 | S CALC=$$CVDATE^DGCVRPT(DFN,.DGARRY)
|
---|
166 | ;
|
---|
167 | I 'CEN D:CALC UPDCVED(NAMSPC,DFN,CEN,CALC) D SET(DFN,CEN,CALC,"CV END DATE MISSING") S DGOK=0
|
---|
168 | ;
|
---|
169 | I CEN D
|
---|
170 | . I $G(DGARRY("OEF/OIF")) D
|
---|
171 | .. N LSSD
|
---|
172 | .. S LSSD=$G(DGARRY(2,DFN_",",.327,"I"))
|
---|
173 | .. I DGARRY("OEF/OIF")>LSSD S ^XTMP(NAMSPC,"DATA",DFN,"MSE DATA MISSING")=CEN_U_CALC
|
---|
174 | .. ; Correct CV End Date if value on file is not the calculated value
|
---|
175 | .. Q:CEN=CALC
|
---|
176 | .. D UPDCVED(NAMSPC,DFN,CEN,CALC)
|
---|
177 | . I CEN=CALC S DGOK=1 Q
|
---|
178 | . D SET(DFN,CEN,CALC,"CV END DATE INCORRECT")
|
---|
179 | . S DGOK=0
|
---|
180 | Q DGOK
|
---|
181 | ;
|
---|
182 | UPDCVED(NAMSPC,DFN,CEN,CALC) ; Update CV end date
|
---|
183 | N DA,DIE,DR,X,Y
|
---|
184 | S DA=DFN,DIE="^DPT(",DR=".5295////"_CALC
|
---|
185 | D ^DIE
|
---|
186 | S ^XTMP(NAMSPC,"DATA",DFN,"CV END DATE UPDATED TO "_CALC)=CEN
|
---|
187 | Q
|
---|
188 | ;
|
---|
189 | SET(DFN,CEN,CALC,REASON) ;
|
---|
190 | S ^XTMP(NAMSPC,"DATA",DFN)=CEN_U_CALC_U_REASON
|
---|
191 | Q
|
---|
192 | ;
|
---|
193 | UPDATEX(NAMSPC,TOTREC,LASTREC,TOTPAT) ;
|
---|
194 | N X
|
---|
195 | S X=$G(^XTMP(NAMSPC,0,0))
|
---|
196 | S $P(X,U,1)=$G(LASTREC),$P(X,U,2)=$G(TOTREC)
|
---|
197 | S $P(X,U,10)=$G(TOTPAT)
|
---|
198 | S ^XTMP(NAMSPC,0,0)=X
|
---|
199 | Q
|
---|
200 | ;
|
---|
201 | STATUS ; current run status
|
---|
202 | N X,NAMSPC
|
---|
203 | S NAMSPC=$$NAMSPC
|
---|
204 | S X=$G(^XTMP(NAMSPC,0,0))
|
---|
205 | I X="" U 0 W !!,"Task not started!!!" Q
|
---|
206 | W !!," Current status: ",$P(X,U,6)
|
---|
207 | W !," Starting time: ",$$FMTE^XLFDT($P(X,U,7))
|
---|
208 | I $P(X,U,8) D
|
---|
209 | . W !," Ending time: ",$$FMTE^XLFDT($P(X,U,8))
|
---|
210 | W !!," Total patient records read: ",$P(X,U,2)
|
---|
211 | W !," Last ALOEIF xref processed: ",$P(X,U,1)
|
---|
212 | W !," Total patient records set for re-transmit: ",$P(X,U,10)
|
---|
213 | Q
|
---|
214 | ;
|
---|
215 | STOP(NAMSPC) ; returns stop flag
|
---|
216 | N X
|
---|
217 | S ZTSTOP=0
|
---|
218 | I $$S^%ZTLOAD S ZTSTOP=1
|
---|
219 | I $D(^XTMP(NAMSPC,"STOP")) S ZTSTOP=1 K ^XTMP(NAMSPC,"STOP")
|
---|
220 | I ZTSTOP D
|
---|
221 | . S X=$G(^XTMP(NAMSPC,0,0))
|
---|
222 | . S $P(X,U,6)="STOPPED",$P(X,U,7)=$$NOW^XLFDT()
|
---|
223 | . S ^XTMP(NAMSPC,0,0)=X
|
---|
224 | . Q
|
---|
225 | Q ZTSTOP
|
---|
226 | ;
|
---|
227 | MAIL(NAMSPC,TESTING,DUZ) ; stats
|
---|
228 | N ETIME,STAT,STIME,TOTPAT,TOTREC,X
|
---|
229 | S X=$G(^XTMP(NAMSPC,0,0))
|
---|
230 | S TOTREC=$P(X,U,2)
|
---|
231 | S STAT=$P(X,U,6),STIME=$P(X,U,7)
|
---|
232 | S ETIME=$P(X,U,8)
|
---|
233 | S TOTPAT=$P(X,U,10)
|
---|
234 | ;
|
---|
235 | D HDNG(NAMSPC,.LIN,STAT,STIME,ETIME,TESTING)
|
---|
236 | D SUMRY(.LIN,TOTREC,TOTPAT,NAMSPC)
|
---|
237 | D MAILIT("SUMMARY STATS - TRANSMIT UNSENT OEF/OIF DATA TO HEC",DUZ,NAMSPC)
|
---|
238 | K ^TMP(NAMSPC,$J,"MSG")
|
---|
239 | Q
|
---|
240 | ;
|
---|
241 | HDNG(NAMSPC,LIN,STAT,STIME,ETIME,TESTING) ; hdr lines
|
---|
242 | N HTEXT,TEXT,X
|
---|
243 | K ^TMP(NAMSPC,$J,"MSG")
|
---|
244 | S LIN=0
|
---|
245 | S HTEXT="Transmit unsent OEF/OIF data to HEC "_STAT_" on "
|
---|
246 | D BLDLINE(NAMSPC,HTEXT,.LIN)
|
---|
247 | S HTEXT=$$FMTE^XLFDT(ETIME)
|
---|
248 | D BLDLINE(NAMSPC,HTEXT,.LIN)
|
---|
249 | D BLDLINE(NAMSPC,"",.LIN)
|
---|
250 | I TESTING="Y" D
|
---|
251 | . S TEXT="** TESTING - NO CHANGES MADE TO DATABASE **"
|
---|
252 | . D BLDLINE(NAMSPC,TEXT,.LIN)
|
---|
253 | D BLDLINE(NAMSPC,"",.LIN)
|
---|
254 | Q
|
---|
255 | ;
|
---|
256 | SUMRY(LIN,TOTREC,TOTPAT,NAMSPC) ; summary lines
|
---|
257 | N TEXT,X
|
---|
258 | S TEXT=" Total Patient Records Read: "_$J($FN(TOTREC,","),11)
|
---|
259 | D BLDLINE(NAMSPC,TEXT,.LIN)
|
---|
260 | S TEXT=" Total Patient Records Set for Re-transmit: "_$J($FN(TOTPAT,","),11)
|
---|
261 | D BLDLINE(NAMSPC,TEXT,.LIN)
|
---|
262 | Q
|
---|
263 | ;
|
---|
264 | BLDLINE(NAMSPC,TEXT,LIN) ;bld line in TMP
|
---|
265 | S LIN=LIN+1
|
---|
266 | S ^TMP(NAMSPC,$J,"MSG",LIN)=TEXT
|
---|
267 | Q
|
---|
268 | ;
|
---|
269 | MAILIT(HTEXT,DUZ,NAMSPC) ; send mail msg
|
---|
270 | N XMY,XMDUZ,XMSUB,XMTEXT
|
---|
271 | S XMY(DUZ)="",XMDUZ=.5
|
---|
272 | S XMY("G.DGEN ELIGIBILITY ALERT")=""
|
---|
273 | S XMSUB=HTEXT
|
---|
274 | S XMTEXT="^TMP(NAMSPC,$J,""MSG"","
|
---|
275 | D ^XMD
|
---|
276 | Q
|
---|
277 | ;
|
---|
278 | CHKSTAT(POST,NAMSPC) ;check if job is running, stopped, or complete
|
---|
279 | L +^XTMP(NAMSPC):1
|
---|
280 | I '$T Q 0
|
---|
281 | D KILIT(POST,NAMSPC)
|
---|
282 | Q 1
|
---|
283 | ;
|
---|
284 | KILIT(POST,NAMSPC) ;
|
---|
285 | I 'POST K ^XTMP(NAMSPC)
|
---|
286 | Q
|
---|
287 | ;
|
---|
288 | NAMSPC() ;
|
---|
289 | Q $T(+0)
|
---|
290 | ;
|
---|