| 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
 | 
|---|