1 | LA7VMSG1 ;DALOI/JMC - LAB ORU (Observation Result) message builder cont'd; 4-10-00
|
---|
2 | ;;5.2;AUTOMATED LAB INSTRUMENTS;**56,46,61,64**;Sep 27, 1994
|
---|
3 | ;
|
---|
4 | START ; Process entries in queue
|
---|
5 | ; Called from LA7VMSG
|
---|
6 | ;
|
---|
7 | N LA,LAER,LA7VER
|
---|
8 | N EID,HLEID,HLMTIEN,HLRESLT,HLARYTYP,HLECH,HLFS,HLCOMP,HLFORMAT
|
---|
9 | N GBL,LA7MID,LA7V,LA7VS,LA7V0N,LA7VIEN,RSITE,LRNT
|
---|
10 | N LA76248,LA76249,LA76249P,LA7DT,LA7ECH,LA7END,LA7FS,LA7NVAF,LA7ROOT,LA7X,LRDFN,LRUID
|
---|
11 | ;
|
---|
12 | ; variable list
|
---|
13 | ; LA("LRUID") - Host Unique ID from the local ACCESSION file (#68)
|
---|
14 | ; LA("SITE") - Primary site number of remote site ($$SITE^VASITE)
|
---|
15 | ; LA("RUID") - Remote sites Unique ID from ACCESSION file (#68)
|
---|
16 | ; LA("ORD") - Free text ordered test name from WKLD CODE file (#64)
|
---|
17 | ; LA("LRNLT") - National Laboratory test code from WKLD CODE file (#64)
|
---|
18 | ; LA("LRIDT") - Inverse date/time (accession date/time)
|
---|
19 | ; LA("LRSS") - test subscript defined in LABORATORY TEST file (#60)
|
---|
20 | ; LA("LRDFN") - IEN in LAB DATA file (#63)
|
---|
21 | ; LA("ORDT") - Order date
|
---|
22 | ; LA(62.49) - entry in #62.49 which contains pointer to results to build
|
---|
23 | ;
|
---|
24 | L +^LAHM(62.49,"HL7 PROCESS",LA7MTYP):0 Q:'$T
|
---|
25 | ;
|
---|
26 | S GBL="^TMP(""HLS"","_$J_")"
|
---|
27 | ;
|
---|
28 | D SORTPAT
|
---|
29 | I $D(^TMP("LA76248",$J)) D PROCESS
|
---|
30 | D KVAR^LRX
|
---|
31 | ;
|
---|
32 | ; Release lock
|
---|
33 | L -^LAHM(62.49,"HL7 PROCESS",LA7MTYP)
|
---|
34 | ;
|
---|
35 | K ^TMP("LA76248",$J),^TMP("LA7VS",$J),^TMP("HLS",$J)
|
---|
36 | ;
|
---|
37 | I $D(ZTQUEUED) S ZTREQ="@"
|
---|
38 | ;
|
---|
39 | Q
|
---|
40 | ;
|
---|
41 | ;
|
---|
42 | SORTPAT ; Sort all results for tranmsission
|
---|
43 | ;
|
---|
44 | N LA76248,LA76249,LA7END,LA7ROOT,LRDFN,LRUID
|
---|
45 | ;
|
---|
46 | K ^TMP("LA76248",$J)
|
---|
47 | ; Flag to indicate end of global.
|
---|
48 | S LA7END=0
|
---|
49 | ;
|
---|
50 | ; Sort by configuration (LA76248), patient (LRDFN), UID (LRUID), file #62.49 ien (LA76249)
|
---|
51 | S LA7ROOT="^LAHM(62.49,""AC"",LA7MTYP,""P"")"
|
---|
52 | F S LA7ROOT=$Q(@LA7ROOT) Q:LA7END D
|
---|
53 | . I $QS(LA7ROOT,3)'=LA7MTYP!($QS(LA7ROOT,6)<1) S LA7END=1 Q
|
---|
54 | . S LA76248=$QS(LA7ROOT,5),LA76249=$QS(LA7ROOT,6)
|
---|
55 | . L +^LAHM(62.49,LA76249):5 Q:'$T
|
---|
56 | . S LRDFN=$P($G(^LAHM(62.49,LA76249,63)),"^",8)
|
---|
57 | . S LRUID=$P($G(^LAHM(62.49,LA76249,63)),"^",1)
|
---|
58 | . I LRDFN,LRUID]"" S ^TMP("LA76248",$J,LA76248,LRDFN,LRUID,LA76249)=""
|
---|
59 | . L -^LAHM(62.49,LA76249)
|
---|
60 | ;
|
---|
61 | Q
|
---|
62 | ;
|
---|
63 | ;
|
---|
64 | PROCESS ; Process and build messages to be sent
|
---|
65 | ;
|
---|
66 | N LA7101,LA76248,LA76249,LA76249P,LA7NTESN,LA7OBRSN,LA7OBXSN,LA7PIDSN,LA7SMSG,LA7VS,LRDFN
|
---|
67 | ;
|
---|
68 | ; Cleanup
|
---|
69 | K ^TMP("LA7VS",$J),^TMP("HLS",$J)
|
---|
70 | ; Initialize variables
|
---|
71 | S (LA76248,LA76249,LA76249P,LA7END,LRDFN)=0,LRUID=""
|
---|
72 | ;
|
---|
73 | ; Process sorted list of results to transmit.
|
---|
74 | S LA7ROOT="^TMP(""LA76248"",$J)"
|
---|
75 | F S LA7ROOT=$Q(@LA7ROOT) Q:LA7ROOT="" D Q:LA7END
|
---|
76 | . I $QS(LA7ROOT,1)'="LA76248"!($QS(LA7ROOT,2)'=$J) S LA7END=1 Q
|
---|
77 | . I LA76248'=$QS(LA7ROOT,3) D CONFIG
|
---|
78 | . I '$P(LA76248(0),"^",3) Q
|
---|
79 | . S (LA76249,LA(62.49))=$QS(LA7ROOT,6)
|
---|
80 | . S LA7X=$G(^LAHM(62.49,LA76249,63))
|
---|
81 | . S LA("HUID")=$P(LA7X,U),LA("SITE")=$P(LA7X,U,2),LA("RUID")=$P(LA7X,U,3),LA("ORD")=$P(LA7X,U,4),LA("NLT")=$P(LA7X,U,5),LA("LRIDT")=$P(LA7X,U,6),LA("SUB")=$P(LA7X,U,7),LA("LRDFN")=$P(LA7X,U,8),LA("ORDT")=$P(LA7X,U,9)
|
---|
82 | . S LA7NVAF=$$NVAF^LA7VHLU2(+LA("SITE"))
|
---|
83 | . I LRUID'=$QS(LA7ROOT,5),LA7SMSG=2 D PAT Q:LA7END
|
---|
84 | . I LRDFN'=$QS(LA7ROOT,4) D PAT Q:LA7END
|
---|
85 | . S LRUID=$QS(LA7ROOT,5)
|
---|
86 | . S ^TMP("LA7VS",$J,LA76249)=LA76249P
|
---|
87 | . N LA76249
|
---|
88 | . S LA76249=LA76249P
|
---|
89 | . I LA7MTYP="ORU" D EN^LA7VORU(.LA)
|
---|
90 | . I LA7MTYP="ORR" D EN^LA7VORR1(.LA)
|
---|
91 | ;
|
---|
92 | I LA76249P D SENDMSG
|
---|
93 | ;
|
---|
94 | Q
|
---|
95 | ;
|
---|
96 | ;
|
---|
97 | STARTMSG ; Initialize a HL7 message and variables
|
---|
98 | ;
|
---|
99 | N LA7EVNT,SITE
|
---|
100 | ;
|
---|
101 | K ^TMP("LA7VS",$J),@GBL
|
---|
102 | ;
|
---|
103 | S LA76249P=LA76249
|
---|
104 | S SITE=$$RETFACID^LA7VHLU2(LA("SITE"),2,1)
|
---|
105 | ;
|
---|
106 | I LA7MTYP="ORU" S LA7EVNT="LA7V Results Reporting to "_SITE
|
---|
107 | I LA7MTYP="ORR" S LA7EVNT="LA7V Order Response to "_SITE
|
---|
108 | D STARTMSG^LA7VHLU(LA7EVNT,LA76249P)
|
---|
109 | I $G(HL) S LA7END=1
|
---|
110 | ;
|
---|
111 | Q
|
---|
112 | ;
|
---|
113 | ;
|
---|
114 | SENDMSG ; File HL7 message with HL and LAB packages
|
---|
115 | ;
|
---|
116 | ; No data to send
|
---|
117 | I '$D(^TMP("HLS",$J)) Q
|
---|
118 | ;
|
---|
119 | D GEN^LA7VHLU
|
---|
120 | I $P(LA7MID,U)=0 D
|
---|
121 | . N LA7X
|
---|
122 | . S LA7X(1)=LA76249P,LA7X(2)=$TR($P(HLMID,"^",2,3),"^","-")
|
---|
123 | . D CREATE^LA7LOG(28)
|
---|
124 | ;
|
---|
125 | D UPDT6249
|
---|
126 | D UPDLPD
|
---|
127 | ;
|
---|
128 | S (LA76249P,LA7PIDSN,LA7OBRSN,LA7OBXSN,LA7NTESN)=0
|
---|
129 | ;
|
---|
130 | Q
|
---|
131 | ;
|
---|
132 | ;
|
---|
133 | CONFIG ; Setup for this configuration
|
---|
134 | ;
|
---|
135 | ; Send a building message
|
---|
136 | I LA76249P D SENDMSG
|
---|
137 | ;
|
---|
138 | ; Retrieve configuration information from #62.48
|
---|
139 | S LA76248=$QS(LA7ROOT,3)
|
---|
140 | S LA76248(0)=$G(^LAHM(62.48,LA76248,0))
|
---|
141 | ;
|
---|
142 | ; Flag to control message building; 1-one patient/msg, 2-one order/msg
|
---|
143 | S LA7SMSG=+$P(LA76248(0),"^",8)
|
---|
144 | ;
|
---|
145 | ; Initialize variables
|
---|
146 | S (LA76249,LA76249P,LRDFN)=0
|
---|
147 | S LRUID=""
|
---|
148 | ;
|
---|
149 | Q
|
---|
150 | ;
|
---|
151 | ;
|
---|
152 | PAT ; Build patient information
|
---|
153 | ;
|
---|
154 | N LA7ALTID,LA7EXTID,LA7PID,LA7PV1
|
---|
155 | ;
|
---|
156 | ; If one patient/msg or one order/msg and message building then send it.
|
---|
157 | I LA7SMSG>0,LA76249P D SENDMSG
|
---|
158 | ;
|
---|
159 | ; If no message building then start one.
|
---|
160 | I 'LA76249P S LA7PIDSN=0 D STARTMSG Q:LA7END
|
---|
161 | ;
|
---|
162 | ; Setup PID and PV1 segments.
|
---|
163 | S LRDFN=$QS(LA7ROOT,4)
|
---|
164 | S LRDPF=$P(^LR(LRDFN,0),"^",2),DFN=$P(^(0),"^",3)
|
---|
165 | D DEM^LRX
|
---|
166 | ;
|
---|
167 | ; Send placer's patient id (PID-3), return in PID-2, return PID-4 with alternate id
|
---|
168 | S (LA7ALTID,LA7EXTID)=""
|
---|
169 | D PTEXTID^LA7VHLU(LA("SITE"),LA("RUID"),.LA7EXTID)
|
---|
170 | I $L($G(LA7EXTID("PID-2"))) S LA7EXTID=$$CNVFLD^LA7VHLU3(LA7EXTID("PID-2"),LA7EXTID("ECH"),LA7ECH)
|
---|
171 | I $L($G(LA7EXTID("PID-4"))) S LA7ALTID=$$CNVFLD^LA7VHLU3(LA7EXTID("PID-4"),LA7EXTID("ECH"),LA7ECH)
|
---|
172 | ;
|
---|
173 | ; Build PID segment
|
---|
174 | D PID^LA7VPID(LRDFN,LA7EXTID,.LA7PID,.LA7PIDSN,.HL,LA7ALTID)
|
---|
175 | D FILESEG^LA7VHLU(GBL,.LA7PID)
|
---|
176 | D FILE6249^LA7VHLU(LA76249P,.LA7PID)
|
---|
177 | ;
|
---|
178 | ; Build PV1 segment
|
---|
179 | ; Not built when sending to DoD facility - not used by CHCS
|
---|
180 | I LA7NVAF'=1 D
|
---|
181 | . D PV1^LA7VPID(LRDFN,.LA7PV1,LA7FS,LA7ECH)
|
---|
182 | . D FILESEG^LA7VHLU(GBL,.LA7PV1)
|
---|
183 | . D FILE6249^LA7VHLU(LA76249P,.LA7PV1)
|
---|
184 | ;
|
---|
185 | S LRUID="",(LA7OBRSN,LA7OBXSN,LA7NTESN)=0
|
---|
186 | ;
|
---|
187 | Q
|
---|
188 | ;
|
---|
189 | ;
|
---|
190 | UPDT6249 ; Update entries in file #62.49
|
---|
191 | ;
|
---|
192 | N LA7ERR,LA76249,LA76249P
|
---|
193 | ;
|
---|
194 | S LA76249=0
|
---|
195 | F S LA76249=$O(^TMP("LA7VS",$J,LA76249)) Q:'LA76249 D
|
---|
196 | . N FDA,LA7ERR
|
---|
197 | . S LA76249P=+$G(^TMP("LA7VS",$J,LA76249))
|
---|
198 | . ; Set pointer to parent on child entry.
|
---|
199 | . I LA76249'=LA76249P S FDA(1,62.49,LA76249_",",6)=LA76249P
|
---|
200 | . I $G(HL("APAT"))="AL"!($G(HL("APAT"))="") S FDA(1,62.49,LA76249_",",2)="A"
|
---|
201 | . E S FDA(1,62.49,LA76249_",",2)="X"
|
---|
202 | . S FDA(1,62.49,LA76249_",",102)=HL("SAN")
|
---|
203 | . S FDA(1,62.49,LA76249_",",103)=HL("SAF")
|
---|
204 | . S FDA(1,62.49,LA76249_",",108)=HL("MTN")
|
---|
205 | . S FDA(1,62.49,LA76249_",",110)=HL("PID")
|
---|
206 | . S FDA(1,62.49,LA76249_",",111)=HL("VER")
|
---|
207 | . I $P($G(LA7MID),"^")'="" S FDA(1,62.49,LA76249_",",109)=$P(LA7MID,"^")
|
---|
208 | . I $P($G(LA7MID),"^",2) D
|
---|
209 | . . S FDA(1,62.49,LA76249_",",160)=$P(LA7MID,"^",2)
|
---|
210 | . . S FDA(1,62.49,LA76249_",",161)=$P(LA7MID,"^",3)
|
---|
211 | . D FILE^DIE("","FDA(1)","LA7ERR(1)")
|
---|
212 | . D CLEAN^DILF
|
---|
213 | ;
|
---|
214 | Q
|
---|
215 | ;
|
---|
216 | ;
|
---|
217 | UPDLPD ; Update lab pending orders (#69.6) for each entry in #62.49
|
---|
218 | ;
|
---|
219 | N LA76249
|
---|
220 | ;
|
---|
221 | S LA76249=0
|
---|
222 | F S LA76249=$O(^TMP("LA7VS",$J,LA76249)) Q:'LA76249 D UPD696
|
---|
223 | Q
|
---|
224 | ;
|
---|
225 | ;
|
---|
226 | UPD696 ; Update LAB PENDING ORDERS file #69.6
|
---|
227 | ;
|
---|
228 | N LA74,LA7696,LA76964,LA7ERR,LA7ORDT,LA7STAT,LA7X
|
---|
229 | ;
|
---|
230 | ; Find "Results Available" status in #64.061
|
---|
231 | S LA7STAT=$$FIND1^DIC(64.061,"","OMX","Results Available","","I $P(^LAB(64.061,Y,0),U,7)=""U""")
|
---|
232 | ;
|
---|
233 | S LA7X=$G(^LAHM(62.49,LA76249,63))
|
---|
234 | ;
|
---|
235 | ; Ordering institution - pointer to file #4
|
---|
236 | S LA74=$P(LA7X,"^",2)
|
---|
237 | I LA74="" Q
|
---|
238 | ;
|
---|
239 | ; Ordered test
|
---|
240 | S LA7ORDT=$P(LA7X,"^",4)
|
---|
241 | I LA7ORDT="" Q
|
---|
242 | ;
|
---|
243 | ; File #69.6 ien and ordered test multiple ien
|
---|
244 | S LA7696=0
|
---|
245 | F S LA7696=$O(^LRO(69.6,"RST",LA74,LA("RUID"),LA7696)) Q:'LA7696 D
|
---|
246 | . N FDA
|
---|
247 | . S LA76964=$O(^LRO(69.6,LA7696,2,"B",LA7ORDT,0))
|
---|
248 | . I LA76964<1 Q
|
---|
249 | . ;
|
---|
250 | . L +^LRO(69.6,LA7696):99999
|
---|
251 | . ; Cannot get lock on ENTRY in 69.6
|
---|
252 | . I '$T D CREATE^LA7LOG(33) Q
|
---|
253 | . ;
|
---|
254 | . ; Store outgoing HL7 message ID
|
---|
255 | . S FDA(1,69.64,LA76964_","_LA7696_",",7)=$P(LA7MID,U)
|
---|
256 | . ; Set to Results Available.
|
---|
257 | . S FDA(1,69.64,LA76964_","_LA7696_",",5)=LA7STAT
|
---|
258 | . D FILE^DIE("","FDA(1)","LA7ERR(1)")
|
---|
259 | . D CLEAN^DILF
|
---|
260 | . ;
|
---|
261 | . L -^LRO(69.6,LA7696)
|
---|
262 | ;
|
---|
263 | Q
|
---|