1 | LA7VORM1 ;DALOI/DLR - LAB ORM (Order) message builder ;1/27/07 12:25
|
---|
2 | ;;5.2;AUTOMATED LAB INSTRUMENTS;**27,51,46,61,64,73**;Sep 27, 1994;Build 7
|
---|
3 | ; Modified from FOIA VISTA,
|
---|
4 | ; Copyright (C) 2007 WorldVistA
|
---|
5 | ;
|
---|
6 | ; This program is free software; you can redistribute it and/or modify
|
---|
7 | ; it under the terms of the GNU General Public License as published by
|
---|
8 | ; the Free Software Foundation; either version 2 of the License, or
|
---|
9 | ; (at your option) any later version.
|
---|
10 | ;
|
---|
11 | ; This program is distributed in the hope that it will be useful,
|
---|
12 | ; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
13 | ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
14 | ; GNU General Public License for more details.
|
---|
15 | ;
|
---|
16 | ; You should have received a copy of the GNU General Public License
|
---|
17 | ; along with this program; if not, write to the Free Software
|
---|
18 | ; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
---|
19 | ;
|
---|
20 | BUILD(LA7628) ;
|
---|
21 | ; Call with LA7628 = ien of entry in file #62.8 Shipping Manifest
|
---|
22 | ;
|
---|
23 | N LA7101,LA762801,LA7629,LA7NVAF,LA7PIDSN,LA7X,ECNT,GBL,SHP,SHPC,SITE,ORUID,NTST
|
---|
24 | N LDATE,LDATE2
|
---|
25 | ;
|
---|
26 | I $G(LA7628)<1!('$D(^LAHM(62.8,+$G(LA7628),0))) D Q
|
---|
27 | . ; Need to add error logging for manifest not found.
|
---|
28 | . D EXIT
|
---|
29 | ;
|
---|
30 | S LDATE2=$P(^LAHM(62.8,LA7628,0),"-",2)
|
---|
31 | S LDATE=($E(LDATE2,1,4)-1700)_$E(LDATE2,5,8)
|
---|
32 | S GBL="^TMP(""HLS"","_$J_")",ECNT=1
|
---|
33 | S LA7628(0)=$G(^LAHM(62.8,LA7628,0))
|
---|
34 | S LA7629=$P(LA7628(0),U,2)
|
---|
35 | S LA7629(0)=$G(^LAHM(62.9,LA7629,0))
|
---|
36 | S LA76248=+$P(LA7629(0),"^",7)
|
---|
37 | S LA76248(0)=$G(^LAHM(62.48,LA76248,0))
|
---|
38 | I '$P(LA76248(0),"^",3) D EXIT Q ; not active
|
---|
39 | ;
|
---|
40 | S LA7V("INST")=$P(LA7629(0),U,11)
|
---|
41 | Q:LA7V("INST")=$P(LA7629(0),U,6) ;Same system shipment
|
---|
42 | ;
|
---|
43 | S LA7NVAF=$$NVAF^LA7VHLU2(+LA7V("INST")),SITE=""
|
---|
44 | I LA7NVAF=0 S SITE=$$GET1^DIQ(4,+$P(LA7629(0),U,11)_",",99)
|
---|
45 | I LA7NVAF=1 S SITE=$$ID^XUAF4("DMIS",+$P(LA7629(0),U,11))
|
---|
46 | S LA7V("NON")=$P(LA7629(0),U,12)
|
---|
47 | I LA7V("NON")'="" S SITE=LA7V("NON")
|
---|
48 | ;
|
---|
49 | S LA7X=$$NVAF^LA7VHLU2(+$P(LA7629(0),U,2))
|
---|
50 | I LA7X=0 S LA7V("CLNT")=$$GET1^DIQ(4,+$P(LA7629(0),U,2)_",",99)
|
---|
51 | I LA7X=1 S LA7V("CLNT")=$$ID^XUAF4("DMIS",+$P(LA7629(0),U,2))
|
---|
52 | S $P(LA7V("CLNT"),U,2)=$$GET1^DIQ(4,+$P(LA7629(0),U,2)_",",.01)
|
---|
53 | ;
|
---|
54 | S LA7X=$$NVAF^LA7VHLU2(+$P(LA7629(0),U,3))
|
---|
55 | I LA7X=0 S LA7V("HOST")=$$GET1^DIQ(4,+$P(LA7629(0),U,3)_",",99)
|
---|
56 | I LA7X=1 S LA7V("HOST")=$$ID^XUAF4("DMIS",+$P(LA7629(0),U,3))
|
---|
57 | S $P(LA7V("HOST"),U,2)=$$GET1^DIQ(4,+$P(LA7629(0),U,3)_",",.01)
|
---|
58 | ;
|
---|
59 | ; Assuming the receiving institution is the primary site (site with the computer system)
|
---|
60 | ;
|
---|
61 | ; Sort tests by patient,UID,test - only need to build one PID, PV1 per patient
|
---|
62 | ; ^TMP("LA7628",$J, LRDFN, accession UID, ien of shipping manifest specimen entry)
|
---|
63 | K ^TMP("LA7628",$J)
|
---|
64 | S LA762801=0
|
---|
65 | F S LA762801=$O(^LAHM(62.8,LA7628,10,LA762801)) Q:'LA762801 D
|
---|
66 | . S X(0)=$G(^LAHM(62.8,LA7628,10,LA762801,0))
|
---|
67 | . I $P(X(0),"^",8)=0 Q ; Removed from manifest
|
---|
68 | . I $P(X(0),"^"),$L($P(X(0),"^",5)) S ^TMP("LA7628",$J,+$P(X(0),"^"),$P(X(0),"^",5),LA762801)=""
|
---|
69 | K LA762801
|
---|
70 | ;
|
---|
71 | ; Nothing to send
|
---|
72 | I '$D(^TMP("LA7628",$J)) D EXIT Q
|
---|
73 | ;
|
---|
74 | ; Set flag = 0 (multiple PID's/message - build one message)
|
---|
75 | ; 1 (one PID/message - build multiple messages)
|
---|
76 | ; 2 (one ORC/message - build multiple messages)
|
---|
77 | S LA7SMSG=+$P(LA76248(0),"^",8)
|
---|
78 | ;
|
---|
79 | I LA7SMSG=0 D Q:$G(HL)
|
---|
80 | . D STARTMSG
|
---|
81 | . I $G(HL) D EXIT
|
---|
82 | ;
|
---|
83 | S (LRDFN,LRI,LA7PIDSN)=0
|
---|
84 | F S LRDFN=$O(^TMP("LA7628",$J,LRDFN)) Q:'LRDFN D Q:$G(HL)
|
---|
85 | . N LA7PID,LA7PV1,ORNUM
|
---|
86 | . I LA7SMSG=1 D STARTMSG Q:$G(HL)
|
---|
87 | . I LA7SMSG<2 D PID,PV1,IN1^LA7VORM4
|
---|
88 | . S LA7UID=""
|
---|
89 | . F S LA7UID=$O(^TMP("LA7628",$J,LRDFN,LA7UID)) Q:LA7UID="" D
|
---|
90 | . . N LA76802,LA7ORC,X,ORCCHK,DGCHK
|
---|
91 | . . S ORCCHK="",DGCHK=""
|
---|
92 | . . S X=$Q(^LRO(68,"C",LA7UID))
|
---|
93 | . . I $QS(X,3)'=LA7UID Q
|
---|
94 | . . S LRAA=$QS(X,4),LRAD=$QS(X,5),LRAN=$QS(X,6)
|
---|
95 | . . F I=0,.3,3 S LA76802(I)=$G(^LRO(68,LRAA,1,LRAD,1,LRAN,I))
|
---|
96 | . . S I=$O(^LRO(68,LRAA,1,LRAD,1,LRAN,5,0))
|
---|
97 | . . S LA76802(5)=$G(^LRO(68,LRAA,1,LRAD,1,LRAN,5,I,0))
|
---|
98 | . . ;check for VOE before inserting insurance
|
---|
99 | . . I DUZ("AG")="E",LA7SMSG=2 D STARTMSG Q:$G(HL) D PID,PV1,IN1^LA7VORM4
|
---|
100 | . . I DUZ("AG")'="E",LA7SMSG=2 D STARTMSG Q:$G(HL) D PID,PV1
|
---|
101 | . . S (LA7OBRSN,LA762801)=0
|
---|
102 | . . F S LA762801=$O(^TMP("LA7628",$J,LRDFN,LA7UID,LA762801)) Q:'LA762801 D
|
---|
103 | . . . N LA7OBR,I
|
---|
104 | . . . F I=0,.1,1,2,5 S LA762801(I)=$G(^LAHM(62.8,LA7628,10,LA762801,I))
|
---|
105 | . . . I $$CHKTST^LA7SMU(LA7628,LA762801)'=0 Q ;deleted accession
|
---|
106 | . . . ; check for VOE to prepare for Diagnosis codes.
|
---|
107 | . . . I DUZ("AG")="E" D ; check for VOE
|
---|
108 | . . . . S ITEMNUM=0
|
---|
109 | . . . . F S ITEMNUM=ITEMNUM+1 Q:ITEMNUM>$P(^LRO(69,LDATE,1,0),"^",4) D
|
---|
110 | . . . . . I LRDFN=$P(^LRO(69,LDATE,1,ITEMNUM,0),"^") S ORNUM=$P(^LRO(69,LDATE,1,ITEMNUM,0),"^",11)
|
---|
111 | . . . . I ORCCHK'=1 D ORC S ORCCHK=1
|
---|
112 | . . . . D OBR^LA7VORM3,OBX^LA7VORM3
|
---|
113 | . . . E D ; not VOE
|
---|
114 | . . . . D ORC,OBR^LA7VORM3,OBX^LA7VORM3
|
---|
115 | . . ; check for VOE before inserting Diagnosis code
|
---|
116 | . . I DUZ("AG")="E",DGCHK'=1 D DG1^LA7VORM4(ORNUM) S DGCHK=1
|
---|
117 | . . I LA7SMSG=2 D BLG,SENDMSG
|
---|
118 | . I LA7SMSG<2 D BLG
|
---|
119 | . I LA7SMSG=1 D SENDMSG
|
---|
120 | ;
|
---|
121 | I LA7SMSG=0 D SENDMSG
|
---|
122 | ;
|
---|
123 | ;
|
---|
124 | EXIT ;
|
---|
125 | K @GBL,^TMP("LA7628",$J)
|
---|
126 | K DIC,DFN,EID,HL,HLCOMP,HLFS,HLQ,HLSUB,INT
|
---|
127 | K LA760,LA7628,LA762801,LA7629
|
---|
128 | K LA7ECH,LA7FS,LA7MID,LA7V,LA7HDR,LA7OBRSN,LA7OBXSN,LA7VIEN,LAEVNT
|
---|
129 | K LRAA,LRACC,LRAD,LRAN,LRDFN,LRI
|
---|
130 | K LTST,NLT,NLTIEN,PCNT,RUID,SNIEN,TIEN,X,Y,LA
|
---|
131 | K ORCCHK,DGCHK,LDATE,LDATE2
|
---|
132 | D KVAR^LRX
|
---|
133 | I $D(ZTQUEUED) S ZTREQ="@"
|
---|
134 | Q
|
---|
135 | ;
|
---|
136 | ;
|
---|
137 | STARTMSG ; Create/initialize HL message
|
---|
138 | ;
|
---|
139 | K @GBL
|
---|
140 | S (LA76249,LA7PIDSN)=0
|
---|
141 | D STARTMSG^LA7VHLU("LA7V Order to "_SITE,.LA76249)
|
---|
142 | Q
|
---|
143 | ;
|
---|
144 | ;
|
---|
145 | SENDMSG ; File HL7 message with HL and LAB packages.
|
---|
146 | ;
|
---|
147 | N LA7DATA,LA7ID
|
---|
148 | S LA7ID="LA7V HOST "_SITE_"-O-"_$P($G(LA7628(0)),"^")
|
---|
149 | ; If no message to send then quit
|
---|
150 | I '$D(^TMP("HLS",$J)) D Q
|
---|
151 | . N FDA,LA7ER
|
---|
152 | . I $G(LA76248) S FDA(1,62.49,LA76249_",",.5)=LA76248
|
---|
153 | . S FDA(1,62.49,LA76249_",",1)="O"
|
---|
154 | . S FDA(1,62.49,LA76249_",",2)="E"
|
---|
155 | . S FDA(1,62.49,LA76249_",",5)=LA7ID
|
---|
156 | . D FILE^DIE("","FDA(1)","LA7ER(1)")
|
---|
157 | . D CLEAN^DILF
|
---|
158 | . L -^LAHM(62.49,LA76249)
|
---|
159 | ;
|
---|
160 | D GEN^LA7VHLU
|
---|
161 | S LA7DATA="SM06"_"^"_$$NOW^XLFDT
|
---|
162 | D SEUP^LA7SMU($P(LA7628(0),"^"),"1",LA7DATA)
|
---|
163 | D UPDT6249
|
---|
164 | ; Unlock entry
|
---|
165 | L -^LAHM(62.49,LA76249)
|
---|
166 | Q
|
---|
167 | ;
|
---|
168 | ;
|
---|
169 | UPDT6249 ; update entry in 62.49
|
---|
170 | ;
|
---|
171 | N FDA,LA7ER
|
---|
172 | ;
|
---|
173 | I $G(LA76248) S FDA(1,62.49,LA76249_",",.5)=LA76248
|
---|
174 | S FDA(1,62.49,LA76249_",",1)="O"
|
---|
175 | I $P(^LAHM(62.49,LA76249,0),"^",3)'="E" D
|
---|
176 | . I $G(HL("APAT"))="AL" S FDA(1,62.49,LA76249_",",2)="A"
|
---|
177 | . E S FDA(1,62.49,LA76249_",",2)="X"
|
---|
178 | . I $G(LA7ERR) S FDA(1,62.49,LA76249_",",2)="E"
|
---|
179 | S FDA(1,62.49,LA76249_",",5)=LA7ID
|
---|
180 | I $G(HL("SAN"))'="" S FDA(1,62.49,LA76249_",",102)=HL("SAN")
|
---|
181 | I $G(HL("SAF"))'="" S FDA(1,62.49,LA76249_",",103)=HL("SAF")
|
---|
182 | I $G(HL("MTN"))'="" S FDA(1,62.49,LA76249_",",108)=HL("MTN")
|
---|
183 | I $G(HL("PID"))'="" S FDA(1,62.49,LA76249_",",110)=HL("PID")
|
---|
184 | I $G(HL("VER"))'="" S FDA(1,62.49,LA76249_",",111)=HL("VER")
|
---|
185 | I $P($G(LA7MID),"^")'="" S FDA(1,62.49,LA76249_",",109)=$P(LA7MID,"^")
|
---|
186 | I $P($G(LA7MID),"^",2) D
|
---|
187 | . S FDA(1,62.49,LA76249_",",160)=$P(LA7MID,"^",2)
|
---|
188 | . S FDA(1,62.49,LA76249_",",161)=$P(LA7MID,"^",3)
|
---|
189 | D FILE^DIE("","FDA(1)","LA7ER(1)")
|
---|
190 | D CLEAN^DILF
|
---|
191 | Q
|
---|
192 | ;
|
---|
193 | ;
|
---|
194 | PID ; Patient identification
|
---|
195 | S LRDPF=$P(^LR(LRDFN,0),"^",2),DFN=$P(^(0),"^",3)
|
---|
196 | D DEM^LRX
|
---|
197 | D PID^LA7VPID(LRDFN,"",.LA7PID,.LA7PIDSN,.HL,"")
|
---|
198 | ; DoD/CHCS facilities only use 1st repetition of PID-3.
|
---|
199 | I LA7NVAF=1 D
|
---|
200 | . S X=$P(LA7PID(0),LA7FS,4),X=$P(X,$E(LA7ECH,2))
|
---|
201 | . S $P(LA7PID(0),LA7FS,4)=X
|
---|
202 | D FILESEG^LA7VHLU(GBL,.LA7PID)
|
---|
203 | D FILE6249^LA7VHLU(LA76249,.LA7PID)
|
---|
204 | Q
|
---|
205 | ;
|
---|
206 | ;
|
---|
207 | PV1 ; Location information
|
---|
208 | ; DoD/CHCS facilities do not use PV1 segment
|
---|
209 | I LA7NVAF=1 Q
|
---|
210 | ;
|
---|
211 | D PV1^LA7VPID(LRDFN,.LA7PV1,LA7FS,LA7ECH)
|
---|
212 | D FILESEG^LA7VHLU(GBL,.LA7PV1)
|
---|
213 | D FILE6249^LA7VHLU(LA76249,.LA7PV1)
|
---|
214 | Q
|
---|
215 | ;
|
---|
216 | ;
|
---|
217 | ORC ;Order Control
|
---|
218 | ;
|
---|
219 | N ORC,LA7DATA,LA7DUR,LA7DURU,LA76205,LA762801,LA7X
|
---|
220 | ;
|
---|
221 | S ORC(0)="ORC"
|
---|
222 | S ORC(1)=$$ORC1^LA7VORC("NW")
|
---|
223 | ;
|
---|
224 | ; Place order number - accession UID
|
---|
225 | S ORC(2)=$$ORC2^LA7VORC($P(LA76802(.3),"^"),LA7FS,LA7ECH)
|
---|
226 | ;
|
---|
227 | ; Placer group number - shipping manifest invoice #
|
---|
228 | S ORC(4)=$$ORC4^LA7VORC($P(LA7628(0),"^"),LA7FS,LA7ECH)
|
---|
229 | ;
|
---|
230 | ; Quantity/Timing
|
---|
231 | S (LA76205,LA7DUR,LA7DURU)=""
|
---|
232 | S LA762801=0
|
---|
233 | F S LA762801=$O(^TMP("LA7628",$J,LRDFN,LA7UID,LA762801)) Q:'LA762801 D
|
---|
234 | . N I,LA760
|
---|
235 | . ; Test duration
|
---|
236 | . F I=0,2 S LA762801(I)=$G(^LAHM(62.8,LA7628,10,LA762801,I))
|
---|
237 | . I $P(LA762801(2),"^",4) D
|
---|
238 | . . S LA7DUR=$P(LA762801(2),"^",6) ; collection duration
|
---|
239 | . . S LA7DURU=$P(LA762801(2),"^",7) ; duration units
|
---|
240 | . ; Test urgency - find highest urgency on accession
|
---|
241 | . S LA760=+$P(LA762801(0),"^",2)
|
---|
242 | . S X=+$$GET1^DIQ(68.04,LA760_","_LRAN_","_LRAD_","_LRAA_",",1,"I")
|
---|
243 | . I 'LA76205 S LA76205=X
|
---|
244 | . I LA76205,X<LA76205 S LA76205=X
|
---|
245 | S ORC(7)=$$ORC7^LA7VORC(LA7DUR,LA7DURU,LA76205,LA7FS,LA7ECH)
|
---|
246 | ;
|
---|
247 | ; Order Date/Time - if no order date/time then try draw time
|
---|
248 | I $P(LA76802(0),"^",4) S ORC(9)=$$ORC9^LA7VORC($P(LA76802(0),"^",4))
|
---|
249 | I '$P(LA76802(0),"^",4),$P(LA76802(3),"^") S ORC(9)=$$ORC9^LA7VORC($P(LA76802(3),"^"))
|
---|
250 | ;
|
---|
251 | ; Ordering provider
|
---|
252 | S LA7X=$$FNDOLOC^LA7VHLU2(LA7UID)
|
---|
253 | S ORC(12)=$$ORC12^LA7VORC($P(LA76802(0),"^",8),$P(LA7X,"^",3),LA7FS,LA7ECH)
|
---|
254 | ;
|
---|
255 | ; Entering organization - VA facility
|
---|
256 | S ORC(17)=$$ORC17^LA7VORC($P($G(LA7629(0)),U,2),LA7FS,LA7ECH)
|
---|
257 | ;
|
---|
258 | D BUILDSEG^LA7VHLU(.ORC,.LA7DATA,LA7FS)
|
---|
259 | D FILESEG^LA7VHLU(GBL,.LA7DATA)
|
---|
260 | D FILE6249^LA7VHLU(LA76249,.LA7DATA)
|
---|
261 | Q
|
---|
262 | ;
|
---|
263 | BLG ; Billing segment
|
---|
264 | ;
|
---|
265 | N LA7BLG
|
---|
266 | ;
|
---|
267 | I $P(LA7629(0),U,13)="" Q
|
---|
268 | S LA7BLG(0)=$$BLG^LA7VHLU($P(LA7629(0),"^",13),"CO",LA7FS,LA7ECH)
|
---|
269 | D FILESEG^LA7VHLU(GBL,.LA7BLG)
|
---|
270 | D FILE6249^LA7VHLU(LA76249,.LA7BLG)
|
---|
271 | Q
|
---|