| [613] | 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
 | 
|---|