1 | LA7UIO1 ;DALOI/JMC - Process Download Message for an entry in 62.48 ;May 20, 2008
|
---|
2 | ;;5.2;AUTOMATED LAB INSTRUMENTS;**66**;Sep 27, 1994;Build 30
|
---|
3 | Q
|
---|
4 | ;
|
---|
5 | BUILD ; Build one accession into an HL7 message
|
---|
6 | ;
|
---|
7 | N GBL,HL,LA760,LA761,LA7CDT,LA7CMT,LA7ERR,LA7FAC,LA7FS,LA7ECH,LA7HLP,LA7I,LA7ID
|
---|
8 | N LA7LINK,LA7OBRSN,LA7PIDSN,LA7SID,LA7SPEC,LA7X,LA7Y
|
---|
9 | S GBL="^TMP(""HLS"","_$J_")"
|
---|
10 | ;
|
---|
11 | I '$D(ZTQUEUED),$G(LRLL) W:$X+5>IOM !,$S($G(LRTYPE):"Cup",1:"Seq"),": " W LA76822,", "
|
---|
12 | ;
|
---|
13 | S LA7CNT=0
|
---|
14 | F I=0,.1,.2,.3,3 S LA76802(I)=$G(^LRO(68,LA768,1,LA76801,1,LA76802,I))
|
---|
15 | S LA7X=LA76802(3)
|
---|
16 | ; Draw time
|
---|
17 | S LA7CDT=+LA7X
|
---|
18 | ; Specimen comment if any, strip "~"
|
---|
19 | S LA7CMT=$TR($P(LA7X,"^",6),"~")
|
---|
20 | ; Specimen
|
---|
21 | S LA761=+$G(^LRO(68,LA768,1,LA76801,1,LA76802,5,1,0))
|
---|
22 | ; Accession/unique ID - Long (UID) or short (accession #) sample ID
|
---|
23 | S LA7ACC=$P(LA76802(.2),"^"),LA7UID=$P(LA76802(.3),"^"),LA7X=$G(^LRO(68,LA768,.4))
|
---|
24 | I $P(LA7X,"^",2)="S" S LA7SID=$$RJ^XLFSTR(LA76802,+$P(LA7X,"^",3),"0")
|
---|
25 | E S LA7SID=LA7UID
|
---|
26 | ;
|
---|
27 | ; Start message
|
---|
28 | D INIT Q:$G(HL)
|
---|
29 | ;
|
---|
30 | ; Setup links and subscriber array for HL7 message generation
|
---|
31 | S LA76248(0)=$G(^LAHM(62.48,LA76248,0)),LA7Y=$P(LA76248(0),"^")
|
---|
32 | I $E(LA7Y,1,5)'="LA7UI"!($P(LA76248(0),"^",9)'=1) Q
|
---|
33 | S LA7LINK="LA7UI ORM-O01 SUBS 2.2^"_LA7Y
|
---|
34 | S LA7FAC=$P($$SITE^VASITE(DT),"^",3)
|
---|
35 | S LA7HLP("SUBSCRIBER")="^^"_LA7FAC_"^"_LA7Y_"^"
|
---|
36 | ; Following line used when debugging
|
---|
37 | ;S $P(LA7HLP("SUBSCRIBER"),"^",8)="1-1-2"
|
---|
38 | ;
|
---|
39 | ; Build segments PID, PV1, and ORC/OBR segment for each test to be sent
|
---|
40 | D PID,PV1
|
---|
41 | S (LA7I,LA7OBRSN)=0
|
---|
42 | F S LA7I=$O(LA7ACC(LA7I)) Q:'LA7I D ORC,OBR
|
---|
43 | ; Build entry in MESSAGE QUEUE file 62.49
|
---|
44 | D SENDMSG
|
---|
45 | L -^LAHM(62.49,LA76249)
|
---|
46 | D KVAR^LRX
|
---|
47 | Q
|
---|
48 | ;
|
---|
49 | ;
|
---|
50 | INIT ; Create/initialize HL message
|
---|
51 | ;
|
---|
52 | K @GBL
|
---|
53 | S (LA76249,LA7NVAF,LA7PIDSN)=0
|
---|
54 | D STARTMSG^LA7VHLU("LA7UI ORM-O01 EVENT 2.2",.LA76249)
|
---|
55 | S LA7ID=$P(LRAUTO,"^",1)_"-O-"_LA7UID
|
---|
56 | I $G(HL) S LA7ERR=28 D UPDT6249^LA7VORM1
|
---|
57 | Q
|
---|
58 | ;
|
---|
59 | ;
|
---|
60 | PID ; Build PID segment
|
---|
61 | N LA7DATA,PID
|
---|
62 | S LRDFN=+LA7ACC0,LRDPF=$P(^LR(LRDFN,0),"^",2),DFN=$P(^(0),"^",3)
|
---|
63 | D DEM^LRX
|
---|
64 | ;
|
---|
65 | S PID(0)="PID"
|
---|
66 | S PID(1)=1
|
---|
67 | S PID(3)=$$M11^HLFNC(LRDFN)
|
---|
68 | S PID(5)=$$HLNAME^HLFNC(PNM)
|
---|
69 | S PID(8)=$S(SEX'="":SEX,1:"U")
|
---|
70 | I SSN'="" S PID(19)=SSN
|
---|
71 | I DOB S PID(7)=$$FMTHL7^XLFDT(DOB)
|
---|
72 | D BUILDSEG^LA7VHLU(.PID,.LA7DATA,LA7FS)
|
---|
73 | D FILESEG^LA7VHLU(GBL,.LA7DATA)
|
---|
74 | D FILE6249^LA7VHLU(LA76249,.LA7DATA)
|
---|
75 | Q
|
---|
76 | ;
|
---|
77 | ;
|
---|
78 | PV1 ; Build PV1 segment
|
---|
79 | N LA7PV1,LA7X
|
---|
80 | D PV1^LA7VPID(LRDFN,.LA7PV1,LA7FS,LA7ECH)
|
---|
81 | ; If not inpatient use patient location from Accession
|
---|
82 | I $P(LA7PV1(0),LA7FS,3)'="I" S LA7X=$P($G(LA76802(0)),"^",7) S LA7X=$$CHKDATA^LA7VHLU3(LA7X,LA7FS_LA7ECH) S $P(LA7PV1(0),LA7FS,4)=LA7X
|
---|
83 | ;
|
---|
84 | D FILESEG^LA7VHLU(GBL,.LA7PV1)
|
---|
85 | D FILE6249^LA7VHLU(LA76249,.LA7PV1)
|
---|
86 | Q
|
---|
87 | ;
|
---|
88 | ;
|
---|
89 | ORC ; Build ORC segment
|
---|
90 | N LA7DATA,ORC
|
---|
91 | S ORC(0)="ORC"
|
---|
92 | S ORC(1)="NW"
|
---|
93 | ;
|
---|
94 | ; Placer/filler order number - sample ID
|
---|
95 | S ORC(2)=$$ORC2^LA7VORC(LA7SID,LA7FS,LA7ECH)
|
---|
96 | S ORC(3)=$$ORC3^LA7VORC(LA7SID,LA7FS,LA7ECH)
|
---|
97 | ;
|
---|
98 | ; Order/draw time - if no order date/time then try draw time
|
---|
99 | I $P(LA76802(0),"^",4) S ORC(9)=$$ORC9^LA7VORC($P(LA76802(0),"^",4))
|
---|
100 | I '$P(LA76802(0),"^",4),$P(LA76802(3),"^") S ORC(9)=$$ORC9^LA7VORC($P(LA76802(3),"^"))
|
---|
101 | ;
|
---|
102 | ; Provider
|
---|
103 | S LA7X=$$FNDOLOC^LA7VHLU2(LA7UID)
|
---|
104 | S ORC(12)=$$ORC12^LA7VORC($P(LA76802(0),"^",8),$P(LA7X,"^",3),LA7FS,LA7ECH)
|
---|
105 | D BUILDSEG^LA7VHLU(.ORC,.LA7DATA,LA7FS)
|
---|
106 | D FILESEG^LA7VHLU(GBL,.LA7DATA)
|
---|
107 | D FILE6249^LA7VHLU(LA76249,.LA7DATA)
|
---|
108 | Q
|
---|
109 | ;
|
---|
110 | ;
|
---|
111 | OBR ; Build OBR segment
|
---|
112 | N LA764,LA7ALT,LA7CADR,LA7NLT
|
---|
113 | K OBR
|
---|
114 | ;
|
---|
115 | S LA760=+LA7ACC(LA7I)
|
---|
116 | S LA764=+$P($G(^LAB(60,LA760,64)),"^")
|
---|
117 | S LA7NLT=$P($G(^LAM(LA764,0)),"^",2)
|
---|
118 | S LA7TMP=$G(^TMP("LA7",$J,LA7INST,LA7I))
|
---|
119 | Q:'LA7TMP
|
---|
120 | ;
|
---|
121 | S LA7CODE=$P(LA7TMP,"^",6),LA7DATA=$P(LA7TMP,"^",7)
|
---|
122 | S OBR(0)="OBR"
|
---|
123 | S OBR(1)=$$OBR1^LA7VOBR(.LA7OBRSN)
|
---|
124 | ; Placer/filler order number - sample ID
|
---|
125 | S OBR(2)=$$OBR2^LA7VOBR(LA7SID,LA7FS,LA7ECH)
|
---|
126 | S OBR(3)=$$OBR3^LA7VOBR(LA7SID,LA7FS,LA7ECH)
|
---|
127 | ; Test order code
|
---|
128 | S LA7ALT=LA7CODE_"^"_$$GET1^DIQ(60,LA760_",",.01)_"^"_"99001"
|
---|
129 | S OBR(4)=$$OBR4^LA7VOBR(LA7NLT,LA760,LA7ALT,LA7FS,LA7ECH)
|
---|
130 | ; Draw time.
|
---|
131 | I $G(LA7CDT) S OBR(7)=$$OBR7^LA7VOBR(LA7CDT)
|
---|
132 | ; Infection warning.
|
---|
133 | S OBR(12)=$$OBR12^LA7VOBR(LRDFN,LA7FS,LA7ECH)
|
---|
134 | ; Specimen comment
|
---|
135 | S OBR(13)=LA7CMT
|
---|
136 | ; Lab Arrival Time
|
---|
137 | S OBR(14)=$$OBR14^LA7VOBR($P(LA76802(3),"^",3))
|
---|
138 | ; HL7 code from Topography
|
---|
139 | S LA7X=$S(LRDPF=62.3:"^^^CONTROL",1:"")
|
---|
140 | S OBR(15)=$$OBR15^LA7VOBR(LA761,"",LA7X,LA7FS,LA7ECH)
|
---|
141 | ; Ordering provider
|
---|
142 | S LA7X=$$FNDOLOC^LA7VHLU2(LA7UID)
|
---|
143 | S OBR(16)=$$ORC12^LA7VORC($P(LA76802(0),"^",8),$P(LA7X,"^",3),LA7FS,LA7ECH)
|
---|
144 | ; Placer's field #1 - instrument name^card address
|
---|
145 | K LA7X
|
---|
146 | S LA7X(1)=$P(LRAUTO,"^")
|
---|
147 | S LA7CADR=$P($G(^LAB(62.4,LRINST,9)),U,9)
|
---|
148 | I LA7CADR'="" S LA7X(2)=LA7CADR
|
---|
149 | S OBR(18)=$$OBR18^LA7VOBR(.LA7X,LA7FS,LA7ECH)
|
---|
150 | ; Placer's field #2 - tray^cup^lraa^lrad^lran^lracc^lruid
|
---|
151 | K LA7X
|
---|
152 | ; No tray/cup if don't send tray/cup flag.
|
---|
153 | I $G(LRFORCE) S:LA76821 LA7X(1)=LA76821 S:LA76822 LA7X(2)=LA76822
|
---|
154 | S LA7X(3)=LA768,LA7X(4)=LA76801,LA7X(5)=LA76802,LA7X(6)=LA7ACC,LA7X(7)=LA7UID
|
---|
155 | S OBR(19)=$$OBR19^LA7VOBR(.LA7X,LA7FS,LA7ECH)
|
---|
156 | ;
|
---|
157 | ; Test urgency
|
---|
158 | S OBR(27)=$$OBR27^LA7VOBR("","",+$P(LA7ACC(LA7I),"^",2),LA7FS,LA7ECH)
|
---|
159 | ;
|
---|
160 | K LA7DATA
|
---|
161 | D BUILDSEG^LA7VHLU(.OBR,.LA7DATA,LA7FS)
|
---|
162 | D FILESEG^LA7VHLU(GBL,.LA7DATA)
|
---|
163 | D FILE6249^LA7VHLU(LA76249,.LA7DATA)
|
---|
164 | Q
|
---|
165 | ;
|
---|
166 | ;
|
---|
167 | SENDMSG ; Send the HL7 message.
|
---|
168 | N HLL,HLP
|
---|
169 | S HLL("LINKS",1)=LA7LINK
|
---|
170 | I $D(LA7HLP) M HLP=LA7HLP
|
---|
171 | D GEN^LA7VHLU,UPDT6249^LA7VORM1
|
---|
172 | Q
|
---|