1 | RORUTL05 ;HCIOFO/SG - MISCELLANEOUS UTILITIES ; 1/26/07 4:24pm
|
---|
2 | ;;1.5;CLINICAL CASE REGISTRIES;**1,2**;Feb 17, 2006;Build 6
|
---|
3 | ;
|
---|
4 | ; This routine uses the following IAs:
|
---|
5 | ;
|
---|
6 | ; #4493 Read the .01 field of the file #771.7 (private)
|
---|
7 | ; #10040 Access to the HOSPITAL LOCATION file (supported)
|
---|
8 | ; #10061 DEM^VADPT (supported)
|
---|
9 | ;
|
---|
10 | Q
|
---|
11 | ;
|
---|
12 | ;***** CHECKS IF THE E-MAIL NOTIFICATION IS ENABLED
|
---|
13 | ;
|
---|
14 | ; REGIEN Registry IEN
|
---|
15 | ;
|
---|
16 | ; Return Values:
|
---|
17 | ; 0 Do not send e-mail notifications
|
---|
18 | ; 1 E-mail notifications are enabled
|
---|
19 | ;
|
---|
20 | CCRNTFY(REGIEN) ;
|
---|
21 | N DOMAIN,RC
|
---|
22 | ;--- Check if not a production account
|
---|
23 | I $T(PROD^XUPROD)'="" Q:'$$PROD^XUPROD() 0
|
---|
24 | ;--- Check the domain name
|
---|
25 | S DOMAIN=$G(^XMB("NETNAME"))
|
---|
26 | Q:DOMAIN'?1.E1".VA.GOV" 0
|
---|
27 | Q:(DOMAIN?1"TEST.".E)!(DOMAIN?1"TST.".E) 0
|
---|
28 | ;--- Registry-specific checks
|
---|
29 | I $G(REGIEN)>0 S RC=1 D Q:'RC 0
|
---|
30 | . N HL,HLECH,HLFS,HLQ,NAME,RORMSG
|
---|
31 | . ;--- Get the HL7 protocol name
|
---|
32 | . S NAME=$$GET1^DIQ(798.1,+REGIEN,13,,,"RORMSG") Q:NAME=""
|
---|
33 | . ;--- Check the HL7 processing ID
|
---|
34 | . D INIT^HLFNC2(NAME,.HL)
|
---|
35 | . I $G(HL("PID"))'="",HL("PID")'="P" S RC=0 Q
|
---|
36 | ;--- Notification is enabled (production account)
|
---|
37 | Q 1
|
---|
38 | ;
|
---|
39 | ;***** CHECK IF THE PATIENT'S RECORD IN FILE #2 IS VALID
|
---|
40 | ;
|
---|
41 | ; DFN Patient IEN (in file #2)
|
---|
42 | ;
|
---|
43 | ; Return Values:
|
---|
44 | ; <0 Error code
|
---|
45 | ; 0 Ok
|
---|
46 | ;
|
---|
47 | CHKPTR(DFN,SILENT) ;
|
---|
48 | N RC,VA,VADM,VAERR
|
---|
49 | D VADEM(DFN)
|
---|
50 | I $G(VADM(1))="" S RC=-102 D:'$G(SILENT) Q RC
|
---|
51 | . D ERROR^RORERR(RC,,,,"PATIENT",DFN)
|
---|
52 | Q 0
|
---|
53 | ;
|
---|
54 | ;***** DELETES ALL RECORDS FROM THE (SUB)FILE
|
---|
55 | ;
|
---|
56 | ; FILE File/Subfile number
|
---|
57 | ; [IENS] IENS of the subfile
|
---|
58 | ;
|
---|
59 | ; Return Values:
|
---|
60 | ; <0 Error code
|
---|
61 | ; 0 Ok
|
---|
62 | ;
|
---|
63 | CLEAR(FILE,IENS) ;
|
---|
64 | Q:'$$VFILE^DILFD(FILE) 0
|
---|
65 | N DA,DIK,RC,ROOT,TMP
|
---|
66 | S IENS=$G(IENS)
|
---|
67 | ;--- Lock the (sub)file
|
---|
68 | S RC=$$LOCK^RORLOCK(FILE,IENS)
|
---|
69 | I RC D Q RC
|
---|
70 | . S TMP=$$GET1^DID(FILE,,,"NAME",,"RORMSG")
|
---|
71 | . S TMP=$S(TMP'="":"file",1:"subfile")_" #"_FILE
|
---|
72 | . S:IENS'="" TMP=TMP_"; IENS: '"_IENS_"'"
|
---|
73 | . S RC=$$ERROR^RORERR(-11,,"By "_$$TEXT^RORLOCK(RC),,TMP)
|
---|
74 | ;
|
---|
75 | ;--- Delete the records
|
---|
76 | S DIK=$$ROOT^DILFD(FILE,IENS)
|
---|
77 | S ROOT=$$CREF^DILF(DIK)
|
---|
78 | D DA^DILF(IENS,.DA) S DA=0
|
---|
79 | F S DA=$O(@ROOT@(DA)) Q:DA'>0 D ^DIK
|
---|
80 | ;
|
---|
81 | ;--- Unlock the (sub)file
|
---|
82 | D UNLOCK^RORLOCK(FILE,IENS)
|
---|
83 | Q $S(RC<0:RC,1:0)
|
---|
84 | ;
|
---|
85 | ;***** CLEARS THE FIELDS OF THE RECORDS FOUND BY NAME
|
---|
86 | ;
|
---|
87 | ; FILE File number
|
---|
88 | ; [IENS] IENS of the subfile
|
---|
89 | ; NAME Name of the record (value of the .01 field)
|
---|
90 | ; FIELDS List of field numbers separated by semicolons
|
---|
91 | ;
|
---|
92 | ; Return Values:
|
---|
93 | ; <0 Error code
|
---|
94 | ; 0 Ok
|
---|
95 | ;
|
---|
96 | CLRFLDS(FILE,IENS,NAME,FIELDS) ;
|
---|
97 | N FLD,I,IEN,IENS1,IS,RC,RORBUF,RORFDA,RORMSG
|
---|
98 | ;--- Find the record(s)
|
---|
99 | D FIND^DIC(FILE,$G(IENS),"@","X",NAME,,"B",,,"RORBUF","RORMSG")
|
---|
100 | S RC=$$DBS^RORERR("RORMSG",-9,,,FILE) Q:RC<0 RC
|
---|
101 | S:$G(IENS)="" IENS="," S FIELDS=$TR(FIELDS," ")
|
---|
102 | ;--- Update the record(s)
|
---|
103 | S IS="",RC=0
|
---|
104 | F S IS=$O(RORBUF("DILIST",2,IS)) Q:IS="" D Q:RC<0
|
---|
105 | . S IEN=RORBUF("DILIST",2,IS) Q:IEN'>0
|
---|
106 | . S IENS1=IEN_IENS
|
---|
107 | . F I=1:1 S FLD=$P(FIELDS,";",I) Q:FLD'>0 D
|
---|
108 | . . S RORFDA(FILE,IENS1,+FLD)="@"
|
---|
109 | . D FILE^DIE(,"RORFDA","RORMSG")
|
---|
110 | . S RC=$$DBS^RORERR("RORMSG",-9,,,FILE,IENS1)
|
---|
111 | Q $S(RC<0:RC,1:0)
|
---|
112 | ;
|
---|
113 | ;***** RETURNS THE END DATE FOR THE EVENT PURGE
|
---|
114 | EPDATE() ;
|
---|
115 | N DATE,IR,RC,RORBUF,RORMSG,TMP
|
---|
116 | D LIST^DIC(798.1,,"@;1I;2I","U",,,,"B",,,"RORBUF","RORMSG")
|
---|
117 | Q:$G(DIERR) $$DBS^RORERR("RORMSG",-9,,,798.1)
|
---|
118 | ;--- Get the oldest date of registry updates
|
---|
119 | S IR="",DATE=$$DT^XLFDT
|
---|
120 | F S IR=$O(RORBUF("DILIST","ID",IR)) Q:IR="" D
|
---|
121 | . S TMP=$G(RORBUF("DILIST","ID",IR,1)) ; REGISTRY UPDATED UNTIL
|
---|
122 | . I TMP>0 S:TMP<DATE DATE=TMP
|
---|
123 | . ;S TMP=$G(RORBUF("DILIST","ID",IR,2)) ; DATA EXTRACTED UNTIL
|
---|
124 | . ;I TMP>0 S:TMP<DATE DATE=TMP
|
---|
125 | ;--- Subtract additional 14 days (just in case)
|
---|
126 | S DATE=$$FMADD^XLFDT(DATE\1,-14)
|
---|
127 | ;--- No more than 60 days in the past
|
---|
128 | S TMP=$$FMADD^XLFDT($$DT^XLFDT,-60)
|
---|
129 | Q $S(DATE>TMP:DATE,1:TMP)
|
---|
130 | ;
|
---|
131 | ;***** RETURNS NAME OF THE HOSPITAL LOCATION
|
---|
132 | ;
|
---|
133 | ; HLIEN IEN of the hospital location
|
---|
134 | ;
|
---|
135 | HLNAME(HLIEN) ;
|
---|
136 | N NAME
|
---|
137 | S NAME=$$GET1^DIQ(44,(+HLIEN)_",",.01,,,"RORMSG")
|
---|
138 | D:$G(DIERR) DBS^RORERR("RORMSG",-9,,,44,(+HLIEN)_",")
|
---|
139 | Q NAME
|
---|
140 | ;
|
---|
141 | ;***** FORMATS THE TEXT THAT DESCRIBES STATUS OF THE HL7 MESSAGE
|
---|
142 | ;
|
---|
143 | ; MSGID A valid ID of the HL7 message
|
---|
144 | ;
|
---|
145 | ; .RORDST Reference to a local array that the text
|
---|
146 | ; is appended to
|
---|
147 | ;
|
---|
148 | ; [TITLE] Title of the output
|
---|
149 | ;
|
---|
150 | ; [DLGNUM] Number of an entry in the DIALOG file that
|
---|
151 | ; contains the text template (by default,
|
---|
152 | ; the 7980000.004 is used)
|
---|
153 | ;
|
---|
154 | ; [.PARAMS] Reference to a local variable containing
|
---|
155 | ; additional parameters that substitute the
|
---|
156 | ; placeholders in the text template
|
---|
157 | ; PARAMS(
|
---|
158 | ; "NOR") Number of retries to resend the message
|
---|
159 | ; "REGISTRY") Name of the registry
|
---|
160 | ;
|
---|
161 | ; [MSGSTAT] Status of the message (result value of the
|
---|
162 | ; $$MSGSTAT^HLUTIL function). If this parameter
|
---|
163 | ; is undefined or equal to an empty string, the
|
---|
164 | ; current status of the message is retrieved.
|
---|
165 | ;
|
---|
166 | MSG7STS(MSGID,RORDST,TITLE,DLGNUM,PARAMS,MSGSTAT) ;
|
---|
167 | N RORMSG,TMP
|
---|
168 | Q:$G(MSGID)?." "
|
---|
169 | S:$G(MSGSTAT)="" MSGSTAT=$$MSGSTAT^HLUTIL(MSGID)
|
---|
170 | ;--- Prepare the parameters
|
---|
171 | S PARAMS("ID")=MSGID
|
---|
172 | S PARAMS("STATUS")=$$MSGSTXT^RORHL7A(MSGSTAT)
|
---|
173 | S TMP=+$P(MSGSTAT,U,2)
|
---|
174 | S:TMP>0 PARAMS("UPDATED")=$$FMTE^XLFDT(TMP)
|
---|
175 | S PARAMS("ERRMSG")=$P(MSGSTAT,U,3)
|
---|
176 | S TMP=+$P(MSGSTAT,U,4)
|
---|
177 | S:TMP>0 PARAMS("ERRTYPE")=$$GET1^DIQ(771.7,TMP_",",.01,,,"RORMSG")
|
---|
178 | S PARAMS($S(+MSGSTAT=1:"QPOS",1:"RETRIES"))=$P(MSGSTAT,U,5)
|
---|
179 | S PARAMS("OPENFAIL")=$P(MSGSTAT,U,6)
|
---|
180 | S PARAMS("ACK")=$P(MSGSTAT,U,7)
|
---|
181 | ;--- Additional parameters
|
---|
182 | I $G(DLGNUM)>0 D
|
---|
183 | . S PARAMS("STATCODE")=+MSGSTAT
|
---|
184 | . S TMP=+$P(MSGSTAT,U,2)
|
---|
185 | . S:TMP>0 PARAMS("STATUPD")=$$FMTHL7^XLFDT(TMP)
|
---|
186 | . S TMP=$$SITE^RORUTL03()
|
---|
187 | . S PARAMS("STNAME")=$P(TMP,U,2)
|
---|
188 | . S PARAMS("STNUM")=$P(TMP,U)
|
---|
189 | . S:$G(PARAMS("NOR"))'>0 PARAMS("NOR")="several"
|
---|
190 | . S:$G(PARAMS("REGISTRY"))="" PARAMS("REGISTRY")="<unknown>"
|
---|
191 | E S DLGNUM=7980000.004
|
---|
192 | ;--- Build the text
|
---|
193 | S:$G(TITLE)'="" RORDST(1)=TITLE,RORDST(2)=" "
|
---|
194 | D BLD^DIALOG(DLGNUM,.PARAMS,,"RORDST","S")
|
---|
195 | Q
|
---|
196 | ;
|
---|
197 | ;***** CHECK IF THE ARGUMENT IS A NUMBER
|
---|
198 | ;
|
---|
199 | ; Return Values:
|
---|
200 | ; 1 Value starts from a number
|
---|
201 | ; 0 Otherwise
|
---|
202 | ;
|
---|
203 | NUMERIC(VAL,NUMVAL) ;
|
---|
204 | S NUMVAL=$$TRIM^XLFSTR(VAL)
|
---|
205 | I NUMVAL?.1(1"+",1"-")1(1.N.1".".N,.N.1"."1.N).1(1"E".1(1"+",1"-")1.N) S NUMVAL=+NUMVAL Q 1
|
---|
206 | S NUMVAL=""
|
---|
207 | Q 0
|
---|
208 | ;
|
---|
209 | ;***** MARKS THE REGISTRY RECORDS FOR RESENDING THE LOCAL DATA
|
---|
210 | ;
|
---|
211 | ; .REGLST Reference to a local array containing registry names
|
---|
212 | ; as subscripts and optional registry IENs as values
|
---|
213 | ;
|
---|
214 | ; WD Number of days to wait before marking the records
|
---|
215 | ; for resending the local registry data
|
---|
216 | ;
|
---|
217 | ; Return Values:
|
---|
218 | ; <0 Error code
|
---|
219 | ; 0 Ok
|
---|
220 | ;
|
---|
221 | REMARK(REGLST,WD) ;
|
---|
222 | N DATE,IEN,IENS,REGIEN,REGNAME,ROOT,RORFDA,RORMSG,TMP
|
---|
223 | S ROOT=$$ROOT^DILFD(798,,1),RC=0
|
---|
224 | S DATE=$$FMADD^XLFDT($$DT^XLFDT,-WD)
|
---|
225 | ;--- Process the registries from the list
|
---|
226 | S REGNAME=""
|
---|
227 | F S REGNAME=$O(REGLST(REGNAME)) Q:REGNAME="" D
|
---|
228 | . S REGIEN=+REGLST(REGNAME)
|
---|
229 | . I REGIEN'>0 S REGIEN=$$REGIEN^RORUTL02(REGNAME) Q:REGIEN'>0
|
---|
230 | . S IENS=REGIEN_","
|
---|
231 | . ;--- Get the registry parameters
|
---|
232 | . D GETS^DIQ(798.1,IENS,"21.04;21.05","I","RORFDA","RORMSG")
|
---|
233 | . I $G(DIERR) S TMP=$$DBS^RORERR("RORMSG",-9,,,798.1,IENS) Q
|
---|
234 | . ;--- Local data has been resent already
|
---|
235 | . Q:$G(RORFDA(798.1,IENS,21.04,"I"))
|
---|
236 | . ;--- The registry has not been populated yet
|
---|
237 | . Q:'$G(RORFDA(798.1,IENS,21.05,"I"))
|
---|
238 | . ;--- It is too early for resending the local data
|
---|
239 | . Q:RORFDA(798.1,IENS,21.05,"I")>DATE
|
---|
240 | . K RORFDA,RORMSG
|
---|
241 | . ;--- Mark registry records as modified
|
---|
242 | . S IEN=0
|
---|
243 | . F S IEN=$O(@ROOT@("AC",REGIEN,IEN)) Q:'IEN D
|
---|
244 | . . S IENS=IEN_","
|
---|
245 | . . S RORFDA(798,IENS,4)=1 ; UPDATE DEMOGRAPHICS
|
---|
246 | . . S RORFDA(798,IENS,5)=1 ; UPDATE LOCAL REGISTRY DATA
|
---|
247 | . . D FILE^DIE(,"RORFDA","RORMSG")
|
---|
248 | . . D:$G(DIERR) DBS^RORERR("RORMSG",-9,,,798,IENS)
|
---|
249 | . ;--- Update registry parameters
|
---|
250 | . S IENS=REGIEN_","
|
---|
251 | . S RORFDA(798.1,IENS,21.04)=$$NOW^XLFDT
|
---|
252 | . D FILE^DIE("K","RORFDA","RORMSG")
|
---|
253 | . I $G(DIERR) S TMP=$$DBS^RORERR("RORMSG",-9,,,798.1,IENS) Q
|
---|
254 | . ;--- Record the message
|
---|
255 | . S TMP="Local registry and demographic data will be resent to AAC"
|
---|
256 | . D LOG^RORLOG(2,TMP,,"Registry Name: "_REGNAME)
|
---|
257 | Q 0
|
---|
258 | ;
|
---|
259 | ;***** CALLS THE DEM^VADPT
|
---|
260 | ;
|
---|
261 | ; DFN Patient IEN (in file #2)
|
---|
262 | ; VALIDATE Make sure that required fields are not empty
|
---|
263 | ; VAPTYP
|
---|
264 | ; VAHOW
|
---|
265 | ;
|
---|
266 | VADEM(DFN,VALIDATE,VAPTYP,VAHOW) ;
|
---|
267 | N I,J,X,A,K,K1,NC,NF,NQ,T,VAROOT
|
---|
268 | D DEM^VADPT
|
---|
269 | S VA("BID")=$E($P($G(VADM(2)),U),6,10) ; Always 'Last4'
|
---|
270 | Q:'$G(VALIDATE)
|
---|
271 | ;--- Make sure that required fields are not empty
|
---|
272 | S:$G(VADM(1))="" VADM(1)="Unknown ("_DFN_")"
|
---|
273 | S:$G(VA("BID"))="" VA("BID")="UNKN"
|
---|
274 | Q
|
---|