1 | DGENQRY1 ;ALB/CJM - API for ENROLLMENT QUERIES (continued); 4-SEP-97 ; 5/14/02 9:57am
|
---|
2 | ;;5.3;REGISTRATION;**147,232,363,472**;Aug 13,1993
|
---|
3 | ;
|
---|
4 | BATCH ;
|
---|
5 | ;Description: This procedure will re-send all queries still outstanding
|
---|
6 | ;with status of TRANSMITTED with QUERY DT/TM of more than 2 days in the
|
---|
7 | ;past.
|
---|
8 | ;
|
---|
9 | ;Input:
|
---|
10 | ; None
|
---|
11 | ;Output:
|
---|
12 | ; The ENROLLMENT QUERY LOG file is updated with all the query activity. New queries to HEC are generated where necessary.
|
---|
13 | ;
|
---|
14 | N QRY,DATE
|
---|
15 | S DATE=$$FMADD^XLFDT(DT,-2)
|
---|
16 | F S DATE=$O(^DGEN(27.12,"ADS",DATE),-1) Q:'DATE D
|
---|
17 | .S QRY=0
|
---|
18 | .F S QRY=$O(^DGEN(27.12,"ADS",DATE,QRY)) Q:'QRY D
|
---|
19 | ..I '$$RESEND(QRY) ;then something went wrong, but continue
|
---|
20 | Q
|
---|
21 | ;
|
---|
22 | RECEIVE(IEN,ERRORMSG,RMSGID) ;
|
---|
23 | ;Description: This function will update the query log to show status
|
---|
24 | ;RECEIVED. If the NOTIFY field is contains a user to notify, it will
|
---|
25 | ;also send the notification message.
|
---|
26 | ;Input:
|
---|
27 | ; IEN - internal entry number of a record in the ENROLLMENT QUERY LOG
|
---|
28 | ; ERRORMSG - error message to include in notification (optional)
|
---|
29 | ; RMSGID - message id from the response
|
---|
30 | ;
|
---|
31 | ;Output:
|
---|
32 | ; Function Value - 1 if successful, 0 otherwise.
|
---|
33 | ;
|
---|
34 | N SUCCESS,DGQRY,DATA,IEN2,DGQRY2
|
---|
35 | S SUCCESS=0
|
---|
36 | ;
|
---|
37 | D
|
---|
38 | .Q:'$G(IEN)
|
---|
39 | .Q:'$$GET^DGENQRY(IEN,.DGQRY)
|
---|
40 | .;
|
---|
41 | .;try to get a lock, but proceed anyway
|
---|
42 | .I $$LOCK^DGENQRY(DGQRY("DFN"))
|
---|
43 | .;
|
---|
44 | .;if the query was retransmitted, then update the status of the patient's last query
|
---|
45 | .I DGQRY("STATUS")=2 D
|
---|
46 | ..S IEN2=$$FINDLAST^DGENQRY(DGQRY("DFN"))
|
---|
47 | ..Q:'IEN2
|
---|
48 | ..Q:'$$GET^DGENQRY(IEN2,.DGQRY2)
|
---|
49 | ..I DGQRY2("FIRST")=DGQRY("FIRST") S IEN=IEN2 M DGQRY=DGQRY2
|
---|
50 | .;
|
---|
51 | .S DATA(.03)=$S($L($G(ERRORMSG)):4,1:3)
|
---|
52 | .S DGQRY("STATUS")=DATA(.03)
|
---|
53 | .S DATA(.06)=$$NOW^XLFDT
|
---|
54 | .S DGQRY("RESPONSE")=DATA(.06)
|
---|
55 | .S DATA(1)=$G(ERRORMSG)
|
---|
56 | .S DATA(.07)=$G(RMSGID)
|
---|
57 | .S DGQRY("RESPONSEID")=DATA(.07)
|
---|
58 | .S DGQRY("ERROR")=DATA(1)
|
---|
59 | .Q:'$$UPD^DGENDBS(27.12,IEN,.DATA)
|
---|
60 | .;
|
---|
61 | .I DGQRY("NOTIFY") I '$$NOTIFY(.DGQRY)
|
---|
62 | .;
|
---|
63 | .S SUCCESS=1
|
---|
64 | ;
|
---|
65 | D:$G(DGQRY("DFN")) UNLOCK^DGENQRY(DGQRY("DFN"))
|
---|
66 | Q SUCCESS
|
---|
67 | ;
|
---|
68 | NOTIFY(DGQRY) ;
|
---|
69 | ;Description: send notification of reply received for enrollment query.
|
---|
70 | ;
|
---|
71 | ;Input:
|
---|
72 | ; DGQRY() - array containing the ENROLLMENT QUERY LOG record (pass by reference)
|
---|
73 | ;
|
---|
74 | ;Output:
|
---|
75 | ; Function Value: 1 on success, 0 on failure
|
---|
76 | ;
|
---|
77 | N PATIENT,TEXT,XMDUZ,XMTEXT,XMSUB,XMSTRIP,XMROU,XMY,XMZ,XMDF
|
---|
78 | Q:'$$GET^DGENPTA($G(DGQRY("DFN")),.PATIENT) 0
|
---|
79 | ;
|
---|
80 | S XMDF=""
|
---|
81 | S (XMDUN,XMDUZ)="Registration Enrollment Module"
|
---|
82 | S XMSUB="Enrollment/Eligibility Query Reply: "_PATIENT("NAME")
|
---|
83 | S XMY(DGQRY("NOTIFY"))=""
|
---|
84 | S XMTEXT="TEXT("
|
---|
85 | S TEXT(1)="A reply to the enrollment/eligibility query that you sent has been received."
|
---|
86 | S TEXT(2)=" "
|
---|
87 | S TEXT(3)="Patient Name : "_PATIENT("NAME")
|
---|
88 | S TEXT(4)="SSN : "_PATIENT("SSN")
|
---|
89 | S TEXT(5)="Query Date/Time: "_$$FMTE^XLFDT(DGQRY("FIRST"),"1")
|
---|
90 | S TEXT(6)="Query Status : "_$$EXTERNAL^DILFD(27.12,.03,"F",DGQRY("STATUS"))
|
---|
91 | ;
|
---|
92 | I $L(DGQRY("ERROR")) D
|
---|
93 | .S TEXT(7)=" "
|
---|
94 | .S TEXT(8)="The following problem was encountered:"
|
---|
95 | .S TEXT(9)=" "
|
---|
96 | .S TEXT(10)=DGQRY("ERROR")
|
---|
97 | ;
|
---|
98 | D ^XMD
|
---|
99 | Q 1
|
---|
100 | ;
|
---|
101 | CLOSE(IEN,ERROR) ;
|
---|
102 | ;Description: This function can be used to change a query with status
|
---|
103 | ;of TRANSMITTED to a status of CLOSED. This will prevent retransmission.
|
---|
104 | ;It can be used, for example, when an unsolicited enrollment message is
|
---|
105 | ;received while a query is still outstanding.
|
---|
106 | ;Input:
|
---|
107 | ; IEN: The ien of a record in the ENROLLMENT QUERY LOG file.
|
---|
108 | ;
|
---|
109 | ;Output:
|
---|
110 | ; Function Value - 1 if successful, 0 otherwise.
|
---|
111 | ; ERROR - if unsuccessful, returns an error message (optional, pass by reference)
|
---|
112 | ;
|
---|
113 | N SUCCESS,DGQRY,DATA
|
---|
114 | S SUCCESS=0
|
---|
115 | S ERROR=""
|
---|
116 | ;
|
---|
117 | D
|
---|
118 | .I '$G(IEN) S ERROR="ENTRY IN ENROLLMENT QUERY LOG DOES NOT EXIST" Q
|
---|
119 | .Q:'$$GET^DGENQRY(IEN,.DGQRY)
|
---|
120 | .I '$$LOCK^DGENQRY(DGQRY("DFN")) S ERROR="UNABLE TO LOCK ENROLLMENT QUERY LOG" Q
|
---|
121 | .I DGQRY("STATUS") S ERROR="QUERY STATUS IS NOT TRANSMITTED" Q
|
---|
122 | .;
|
---|
123 | .S DATA(.03)=1
|
---|
124 | .I '$$UPD^DGENDBS(27.12,IEN,.DATA,.ERROR) S ERROR="UNABLE TO UPDATE ENROLLMENT QUERY LOG WITH NEW STATUS" Q
|
---|
125 | .;
|
---|
126 | .S SUCCESS=1
|
---|
127 | ;
|
---|
128 | D UNLOCK^DGENQRY(DGQRY("DFN"))
|
---|
129 | Q SUCCESS
|
---|
130 | ;
|
---|
131 | RESEND(IEN,ERROR) ;
|
---|
132 | ;Description: Used to re-send an outstanding query.
|
---|
133 | ;Input:
|
---|
134 | ; IEN - ien of a record in the ENROLLMENT QUERY LOG. It identifies the query to be re-sent.
|
---|
135 | ;Output:
|
---|
136 | ; Function Value - 1 if successful, 0 otherwise.
|
---|
137 | ; ERROR - if unsuccessful returns a mssg (pass by reference, optional)
|
---|
138 | ;
|
---|
139 | N SUCCESS,DGQRY,DATA
|
---|
140 | S SUCCESS=0
|
---|
141 | S ERROR=""
|
---|
142 | ;
|
---|
143 | D
|
---|
144 | .I '$G(IEN) S ERROR="ENTRY IN ENROLLMENT QUERY LOG DOES NOT EXIST" Q
|
---|
145 | .Q:'$$GET^DGENQRY(IEN,.DGQRY)
|
---|
146 | .I '$$LOCK^DGENQRY(DGQRY("DFN")) S ERROR="UNABLE TO LOCK ENROLLMENT QUERY LOG" Q
|
---|
147 | .I DGQRY("STATUS") S ERROR="QUERY STATUS IS NOT TRANSMITTED" Q
|
---|
148 | .S DATA(.03)=2
|
---|
149 | .I '$$UPD^DGENDBS(27.12,IEN,.DATA,.ERROR) S ERROR="UNABLE TO UPDATE ENROLLMENT QUERY LOG WITH NEW STATUS" Q
|
---|
150 | .I '$$SEND(DGQRY("DFN"),DGQRY("NOTIFY"),DGQRY("FIRST"),.ERROR) Q
|
---|
151 | .S SUCCESS=1
|
---|
152 | ;
|
---|
153 | D UNLOCK^DGENQRY(DGQRY("DFN"))
|
---|
154 | Q SUCCESS
|
---|
155 | ;
|
---|
156 | SEND(DFN,NOTIFY,FIRST,ERROR) ;
|
---|
157 | ;Description: This function is used to send an ENROLLMENT/ELIGIBILITY
|
---|
158 | ;QUERY to HEC for a particular patient.
|
---|
159 | ;
|
---|
160 | ;Input:
|
---|
161 | ; DFN - the patient for whom to send the query
|
---|
162 | ; NOTIFY - who should receive notification when the query reply is
|
---|
163 | ; received. Is a pointer to the NEW USER file. (Optional)
|
---|
164 | ; FIRST - DATE/TIME to enter to the FIRST DT/TIME field of the
|
---|
165 | ; ENROLLMENT QUERY LOG file (Optional)
|
---|
166 | ;
|
---|
167 | ;Output:
|
---|
168 | ; Function Value - 1 on success, 0 on failure.
|
---|
169 | ; ERROR - if unsuccessful, this variable will return an error message, (pass by reference) (optional)
|
---|
170 | ;
|
---|
171 | ; quit if enrollment transmit query to HEC switch is off
|
---|
172 | I '$$ON^DGENQRY Q 0
|
---|
173 | ;
|
---|
174 | N LAST,DGQRY,MSGID,SUCCESS,SENT
|
---|
175 | ;
|
---|
176 | S SUCCESS=1
|
---|
177 | I '$$LOCK^DGENQRY($G(DFN)) S SUCCESS=0,ERROR="UNABLE TO LOCK ENROLLMENT QUERY LOG"
|
---|
178 | S LAST=$$FINDLAST^DGENQRY(DFN)
|
---|
179 | I SUCCESS,LAST,$$GET^DGENQRY(LAST,.DGQRY),'DGQRY("STATUS") S SUCCESS=0,ERROR="ENROLLMENT/ELIGIBILITY QUERY ALREADY SENT"
|
---|
180 | D:SUCCESS
|
---|
181 | .S SENT=$$MSG(DFN,.MSGID,.ERROR)
|
---|
182 | .I 'SENT S SUCCESS=0 Q
|
---|
183 | .S DGQRY("DFN")=DFN
|
---|
184 | .S DGQRY("SENT")=SENT
|
---|
185 | .S DGQRY("STATUS")=0
|
---|
186 | .S DGQRY("MSGID")=MSGID
|
---|
187 | .S DGQRY("NOTIFY")=$G(NOTIFY)
|
---|
188 | .S DGQRY("FIRST")=$S($G(FIRST):FIRST,1:SENT)
|
---|
189 | .S DGQRY("RESPONSE")=""
|
---|
190 | .S DGQRY("RESPONSEID")=""
|
---|
191 | .I '$$LOG^DGENQRY(.DGQRY) S SUCCESS=0,ERROR="UNABLE TO ENTER QUERY TO ENROLLMENT QUERY LOG" Q
|
---|
192 | .;
|
---|
193 | SENDQ ;
|
---|
194 | D UNLOCK^DGENQRY($G(DFN))
|
---|
195 | Q SUCCESS
|
---|
196 | ;
|
---|
197 | MSG(DFN,MSGID,ERROR) ; Send enrollment/eligibility query to HEC
|
---|
198 | ;
|
---|
199 | ;Input:
|
---|
200 | ; DFN - Pointer to the patient in file #2
|
---|
201 | ;Output
|
---|
202 | ; Function Value - if successful, returns 1, otherwise returns 0
|
---|
203 | ; MSGID - if successful, returns the message id assigned by the HL7 package (pass by reference)
|
---|
204 | ; ERROR - if unsuccessful,returns an error message (pass by reference)
|
---|
205 | ;
|
---|
206 | N HLSDT,HLMTN,HLDAP,HLEVN,HLERR,HLDA,HLDAN,HLDT,HLDT1,HLECH,HLFS,HLNDAP,HLNDAP0,HLPID,HLQ,HLVER,HLMID,SUCCESS,DGPAT
|
---|
207 | N HL,HLARYTYP,HLFORMAT,HLRESLT
|
---|
208 | ;
|
---|
209 | K HLA("HLS") ;DG*5.3.472
|
---|
210 | S SUCCESS=0
|
---|
211 | ;
|
---|
212 | ; - init HL7 variables
|
---|
213 | S HLMTN="QRY"
|
---|
214 | S HLDAP="IVM"
|
---|
215 | S HLEID="VAMC "_$P($$SITE^VASITE,"^",3)_" QRY-Z11 SERVER"
|
---|
216 | S HLEID=$O(^ORD(101,"B",HLEID,0))
|
---|
217 | D INIT^HLFNC2(HLEID,.HL)
|
---|
218 | I $G(HL)]"" S HLERR=$P(HL,"^",2)
|
---|
219 | I '$D(HLERR) D CREATE^HLTF(.HLMID,.HLMTIEN,.HLDT,.HLDT1)
|
---|
220 | S HLEVN=0 ; initialize event counter
|
---|
221 | S HLSDT=$$NOW^XLFDT
|
---|
222 | I $D(HLERR) S ERROR=HLERR G MSGQ
|
---|
223 | ;
|
---|
224 | I '$$GET^DGENPTA(DFN,.DGPAT) S ERROR="PATIENT NOT FOUND" G MSGQ
|
---|
225 | I (DGPAT("SEX")="") S ERROR="PATIENT SEX IS REQUIRED" G MSGQ
|
---|
226 | I (DGPAT("DOB")="") S ERROR="PATIENT DATE OF BIRTH IS REQUIRED" G MSGQ
|
---|
227 | I (DGPAT("SSN")="") S ERROR="PATIENT SSN IS REQUIRED" G MSGQ
|
---|
228 | ;
|
---|
229 | ; - build HL7 query (QRY) msg and send
|
---|
230 | D QRD,QRF
|
---|
231 | S HLARYTYP="LM" ;DG*5.3*472
|
---|
232 | S HLFORMAT=1
|
---|
233 | D GENERATE^HLMA(HLEID,HLARYTYP,HLFORMAT,.HLRESLT)
|
---|
234 | I $P($G(HLRESLT),"^",2)]"" S HLERR=$P(HLRESLT,"^",3)
|
---|
235 | I $D(HLERR) S ERROR=HLERR G MSGQ
|
---|
236 | S SUCCESS=HLSDT
|
---|
237 | ;
|
---|
238 | S MSGID=+HLRESLT
|
---|
239 | ;
|
---|
240 | MSGQ ; - exit and clean-up
|
---|
241 | D KILL^HLTRANS
|
---|
242 | K HLA("HLS") ;DG*5.3*472
|
---|
243 | Q SUCCESS
|
---|
244 | ;
|
---|
245 | QRD ; Build (HL7) QRD segment for patient
|
---|
246 | N QUERY
|
---|
247 | S $P(QUERY,HLFS,1)=$$HLDATE^HLFNC(HLDT) ; date/time query generated
|
---|
248 | S $P(QUERY,HLFS,2)="R" ; query format code (record oriented format)
|
---|
249 | S $P(QUERY,HLFS,3)="I" ; query priority (immediate)
|
---|
250 | S $P(QUERY,HLFS,4)=DFN ; query ID (DFN)
|
---|
251 | S $P(QUERY,HLFS,7)="1~RD" ; quanity limited request (1 record)
|
---|
252 | S $P(QUERY,HLFS,8)=DGPAT("SSN") ; who subject filter (SSN)
|
---|
253 | S $P(QUERY,HLFS,9)="OTH" ; what subject filter
|
---|
254 | S $P(QUERY,HLFS,10)="ENROLLMENT" ;What department data code
|
---|
255 | S $P(QUERY,HLFS,12)="T" ; query results level (full results)
|
---|
256 | S HLA("HLS",1)="QRD"_HLFS_QUERY ;DG*5.3*472
|
---|
257 | Q
|
---|
258 | ;
|
---|
259 | ;
|
---|
260 | QRF ; Build HL7 (QRF) segment for patient
|
---|
261 | N FILTER
|
---|
262 | S $P(FILTER,HLFS,1)="IVM" ; where subject filter (IVM Center)
|
---|
263 | S $P(FILTER,HLFS,4)=$$HLDATE^HLFNC(DGPAT("DOB")) ; what user qualifier (DOB)
|
---|
264 | S $P(FILTER,HLFS,5)=DGPAT("SEX") ; other subj. query filter (sex)
|
---|
265 | S HLA("HLS",2)="QRF"_HLFS_FILTER ;DG*5.3*472
|
---|
266 | Q
|
---|