| [613] | 1 | LA7UIIN1 ;DALOI/JRR - Process Incoming UI Msgs, continued ; 12/3/1997 | 
|---|
|  | 2 | ;;5.2;AUTOMATED LAB INSTRUMENTS;**17,23,27,57,59**;Sep 27, 1994 | 
|---|
|  | 3 | ; This routine is a continuation of LA7UIIN and is only | 
|---|
|  | 4 | ; called from there.  It is called with each message found | 
|---|
|  | 5 | ; in the incoming queue. | 
|---|
|  | 6 | ; | 
|---|
|  | 7 | Q | 
|---|
|  | 8 | ; | 
|---|
|  | 9 | NXTMSG ; | 
|---|
|  | 10 | N LA70070,LA7150,LA761,LA762,LA7624,LA762495 | 
|---|
|  | 11 | N LA7AA,LA7AD,LA7ACC,LA7CNT,LA7CS,LA7CUP,LA7ECH,LA7ENTRY,LA7FS,LA7IDE,LA7LWL,LA7MSH,LA7OBR,LA7OBR3,LA7QUIT,LA7TRAY,LA7USID | 
|---|
|  | 12 | N CUP,IDE,IDENT,ISQN | 
|---|
|  | 13 | ; | 
|---|
|  | 14 | S (LA7CNT,LA7QUIT)=0 | 
|---|
|  | 15 | S (LA7AN,LA7INST,LA7OBR,LA7UID)="" | 
|---|
|  | 16 | S DT=$$DT^XLFDT | 
|---|
|  | 17 | ; Message built but no text. | 
|---|
|  | 18 | I '$O(^LAHM(62.49,LA76249,150,0)) D  Q | 
|---|
|  | 19 | . D CREATE^LA7LOG(6) | 
|---|
|  | 20 | ; | 
|---|
|  | 21 | MSH S LA7MSH=$G(^($O(^LAHM(62.49,LA76249,150,0)),0)) | 
|---|
|  | 22 | ; Bad first line of message | 
|---|
|  | 23 | I $E(LA7MSH,1,3)'="MSH" D  Q | 
|---|
|  | 24 | . D CREATE^LA7LOG(7) | 
|---|
|  | 25 | S LA7FS=$E(LA7MSH,4) | 
|---|
|  | 26 | S LA7CS=$E(LA7MSH,5) | 
|---|
|  | 27 | S LA7ECH=$E(LA7MSH,5,8) | 
|---|
|  | 28 | ; No field or component seperator | 
|---|
|  | 29 | I LA7FS=""!(LA7CS="") D  Q | 
|---|
|  | 30 | . D CREATE^LA7LOG(8) | 
|---|
|  | 31 | ; | 
|---|
|  | 32 | ; Find the OBR segment | 
|---|
|  | 33 | S LA762495=0 | 
|---|
|  | 34 | OBR F  S LA762495=$O(^LAHM(62.49,LA76249,150,LA762495)) Q:'LA762495!($E($G(^(+LA762495,0)),1,3)="OBR") | 
|---|
|  | 35 | S DT=$$DT^XLFDT | 
|---|
|  | 36 | ; | 
|---|
|  | 37 | ; No more OBR's, found at least 1. | 
|---|
|  | 38 | I 'LA762495,$L($G(LA7OBR)) Q | 
|---|
|  | 39 | ; | 
|---|
|  | 40 | S LA7OBR=$G(^LAHM(62.49,LA76249,150,+LA762495,0)) | 
|---|
|  | 41 | ; | 
|---|
|  | 42 | ; Should only be working on OBR | 
|---|
|  | 43 | I $E(LA7OBR,1,3)'="OBR" D  Q | 
|---|
|  | 44 | . D CREATE^LA7LOG(9) | 
|---|
|  | 45 | ; | 
|---|
|  | 46 | ; Extracting 1st piece | 
|---|
|  | 47 | S LA7INST=$P($P(LA7OBR,LA7FS,19),LA7CS,1) | 
|---|
|  | 48 | I LA7INST="" D  Q | 
|---|
|  | 49 | . D CREATE^LA7LOG(10) | 
|---|
|  | 50 | S LA7624=+$O(^LAB(62.4,"B",LA7INST,0)) | 
|---|
|  | 51 | ; Instrument name not found in xref | 
|---|
|  | 52 | I 'LA7624 D  Q | 
|---|
|  | 53 | . D CREATE^LA7LOG(11) | 
|---|
|  | 54 | S LA7INST=$G(^LAB(62.4,LA7624,0)) | 
|---|
|  | 55 | ; Instrument entry not found in file | 
|---|
|  | 56 | I LA7INST="" D  Q | 
|---|
|  | 57 | . D CREATE^LA7LOG(11) | 
|---|
|  | 58 | ; | 
|---|
|  | 59 | S LA7ENTRY=$P(LA7INST,"^",6) ;LOG,LLIST,IDENT or SEQN | 
|---|
|  | 60 | S:LA7ENTRY="" LA7ENTRY="LOG" | 
|---|
|  | 61 | ; | 
|---|
|  | 62 | ; Universal service id | 
|---|
|  | 63 | S LA7USID=$P(LA7OBR,LA7FS,4) | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | S LA7TRAY=+$P($P(LA7OBR,LA7FS,20),LA7CS,1) ;Tray | 
|---|
|  | 66 | S LA7CUP=+$P($P(LA7OBR,LA7FS,20),LA7CS,2) ; Cup | 
|---|
|  | 67 | S LA7AA=+$P($P(LA7OBR,LA7FS,20),LA7CS,3) ;  Accession Area | 
|---|
|  | 68 | S LA7AD=+$P($P(LA7OBR,LA7FS,20),LA7CS,4) ;  Accession Date | 
|---|
|  | 69 | S LA7AN=+$P($P(LA7OBR,LA7FS,20),LA7CS,5) ;  Accession Entry | 
|---|
|  | 70 | S LA7ACC=$P($P(LA7OBR,LA7FS,20),LA7CS,6) ;  Accession | 
|---|
|  | 71 | S LA7UID=$P($P(LA7OBR,LA7FS,20),LA7CS,7) ;  Unique ID | 
|---|
|  | 72 | S LA7IDE=$P($P(LA7OBR,LA7FS,20),LA7CS,8) ;  Sequence Number | 
|---|
|  | 73 | S LA7LWL=$P(LA7INST,"^",4) ;  Load/Work List | 
|---|
|  | 74 | S LA7OBR3=$P(LA7OBR,LA7FS,3) ; Sample ID or Bar code | 
|---|
|  | 75 | S LA7OBR(15)=$P(LA7OBR,LA7FS,16) ; Specimen source | 
|---|
|  | 76 | ; | 
|---|
|  | 77 | ; UID might come as Sample ID | 
|---|
|  | 78 | I LA7UID="",LA7OBR3?10UN S LA7UID=LA7OBR3 | 
|---|
|  | 79 | ; | 
|---|
|  | 80 | ; Try to figure out LRAA LRAD LRAN by using the unique ID (LRUID) | 
|---|
|  | 81 | ; accession may have rolled over, use UID to get current accession info. | 
|---|
|  | 82 | I LA7UID]"" D | 
|---|
|  | 83 | . N X | 
|---|
|  | 84 | . S X=$Q(^LRO(68,"C",LA7UID)) | 
|---|
|  | 85 | . I $QS(X,3)'=LA7UID S LA7UID="" Q  ; UID not on file. | 
|---|
|  | 86 | . S LA7AA=+$QS(X,4),LA7AD=+$QS(X,5),LA7AN=+$QS(X,6) | 
|---|
|  | 87 | ; If still not known, compute from default date and accession area | 
|---|
|  | 88 | ; Calculate accession date based on accession transform. | 
|---|
|  | 89 | I '(LA7AA*LA7AD*LA7AN) D | 
|---|
|  | 90 | . N X | 
|---|
|  | 91 | . S DT=$$DT^XLFDT | 
|---|
|  | 92 | . S LA7AA=+$P(LA7INST,"^",11) | 
|---|
|  | 93 | . S X=$P($G(^LRO(68,LA7AA,0)),U,3) | 
|---|
|  | 94 | . S LA7AD=$S(X="D":DT,X="M":$E(DT,1,5)_"00",X="Y":$E(DT,1,3)_"0000",X="Q":$E(DT,1,3)_"0000"+(($E(DT,4,5)-1)\3*300+100),1:DT) | 
|---|
|  | 95 | . S LA7AN=+LA7OBR3 | 
|---|
|  | 96 | ; Log but cont | 
|---|
|  | 97 | I LA7ENTRY="LOG",'$D(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0)) D | 
|---|
|  | 98 | . D CREATE^LA7LOG(13) | 
|---|
|  | 99 | ; cup=sequence number | 
|---|
|  | 100 | I LA7ENTRY="LLIST" S:'LA7CUP LA7CUP=LA7IDE | 
|---|
|  | 101 | ; | 
|---|
|  | 102 | ; Create entry in ^LAH global | 
|---|
|  | 103 | D LAGEN | 
|---|
|  | 104 | ; Couldn't create entry in ^LAH | 
|---|
|  | 105 | I $G(LA7ISQN)="" D  Q | 
|---|
|  | 106 | . D CREATE^LA7LOG(14) | 
|---|
|  | 107 | ; | 
|---|
|  | 108 | ; specimen(topography), collection sample, HL7 specimen source | 
|---|
|  | 109 | S (LA761,LA762,LA70070)="" | 
|---|
|  | 110 | I $O(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,5,0)) D | 
|---|
|  | 111 | . N X | 
|---|
|  | 112 | . S X=$O(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,5,0)) | 
|---|
|  | 113 | . ; specimen^collection sample | 
|---|
|  | 114 | . S X(0)=$G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,5,X,0)) | 
|---|
|  | 115 | . S LA761=$P(X(0),"^") ; specimen | 
|---|
|  | 116 | . S LA762=$P(X(0),"^",2) ; collection sample | 
|---|
|  | 117 | . ; HL7 code from Topography | 
|---|
|  | 118 | . I LA761 S LA70070=$$GET1^DIQ(61,LA761_",","LEDI HL7:HL7 ABBR") | 
|---|
|  | 119 | ; | 
|---|
|  | 120 | ; Log error when specimen source does not match accession's specimen | 
|---|
|  | 121 | I $L(LA70070),$L($P($P(LA7OBR(15),LA7CS),$E(LA7ECH,4))) D | 
|---|
|  | 122 | . ; Check if using HL7 table 0070 | 
|---|
|  | 123 | . I $P($P(LA7OBR(15),LA7CS),$E(LA7ECH,4),3)'["0070" Q | 
|---|
|  | 124 | . ; Message matches accession | 
|---|
|  | 125 | . I LA70070=$P($P(LA7OBR(15),LA7CS),$E(LA7ECH,4)) Q | 
|---|
|  | 126 | . D CREATE^LA7LOG(22) | 
|---|
|  | 127 | . S LA7QUIT=1 | 
|---|
|  | 128 | ; | 
|---|
|  | 129 | ; Something wrong, process next OBR | 
|---|
|  | 130 | I LA7QUIT S LA7QUIT=0 G OBR | 
|---|
|  | 131 | ; | 
|---|
|  | 132 | ; Zeroth node of acession area. | 
|---|
|  | 133 | S LA7AA(0)=$G(^LRO(68,+LA7AA,0)) | 
|---|
|  | 134 | ; | 
|---|
|  | 135 | ; No subscript defined for this area. | 
|---|
|  | 136 | I $P(LA7AA(0),"^",2)="" G OBR | 
|---|
|  | 137 | ; | 
|---|
|  | 138 | ; Processing of this subscript not supported. | 
|---|
|  | 139 | I "CHMI"'[$P(LA7AA(0),"^",2) G OBR | 
|---|
|  | 140 | ; | 
|---|
|  | 141 | S LA7150=LA762495 | 
|---|
|  | 142 | ; Process "CH" subscript results - NTE and OBX segments. | 
|---|
|  | 143 | I $P(LA7AA(0),"^",2)="CH" D NTE^LA7UIIN2 | 
|---|
|  | 144 | ; | 
|---|
|  | 145 | ; Process "MI" subscript results. | 
|---|
|  | 146 | I $P(LA7AA(0),"^",2)="MI" D | 
|---|
|  | 147 | . N X | 
|---|
|  | 148 | . S X="LA7UIIN3" X ^%ZOSF("TEST") Q:'$T | 
|---|
|  | 149 | . D MI^LA7UIIN3 | 
|---|
|  | 150 | ; | 
|---|
|  | 151 | ; No more segments to process, reached end of global array. | 
|---|
|  | 152 | I 'LA762495 Q | 
|---|
|  | 153 | ; | 
|---|
|  | 154 | ; Reset subscript variable. | 
|---|
|  | 155 | I LA762495>LA7150 S LA762495=LA762495-1 | 
|---|
|  | 156 | ; | 
|---|
|  | 157 | ; Go back to find/process additional OBR segments. | 
|---|
|  | 158 | G OBR | 
|---|
|  | 159 | ; | 
|---|
|  | 160 | ; | 
|---|
|  | 161 | LAGEN ; subroutine to set up variables for call to ^LAGEN, build entry in LAH | 
|---|
|  | 162 | ; requires LA7INST,LA7TRAY,LA7CUP,LA7AA,LA7AD,LA7AN,LA7LWL | 
|---|
|  | 163 | ; returns LA7ISQN=subscript to store results in ^LAH global | 
|---|
|  | 164 | ; | 
|---|
|  | 165 | K TRAY,CUP,LWL,WL,LROVER,METH,LOG,IDENT,ISQN | 
|---|
|  | 166 | K LADT,LAGEN,LA7ISQN | 
|---|
|  | 167 | ; | 
|---|
|  | 168 | S LA7ISQN="" | 
|---|
|  | 169 | S TRAY=+$G(LA7TRAY) S:'TRAY TRAY=1 | 
|---|
|  | 170 | S CUP=+$G(LA7CUP) S:'CUP CUP=1 | 
|---|
|  | 171 | S LWL=LA7LWL | 
|---|
|  | 172 | I '$D(^LRO(68.2,+LWL,0)) D  Q | 
|---|
|  | 173 | . D CREATE^LA7LOG(19) | 
|---|
|  | 174 | ; | 
|---|
|  | 175 | ; Set accession area to area of specimen, allow multiple areas on same instrument. | 
|---|
|  | 176 | S WL=LA7AA | 
|---|
|  | 177 | I '$D(^LRO(68,+WL,0)) D  Q | 
|---|
|  | 178 | . D CREATE^LA7LOG(20) | 
|---|
|  | 179 | ; | 
|---|
|  | 180 | S LROVER=$P(LA7INST,"^",12) | 
|---|
|  | 181 | S METH=$P(LA7INST,"^",10) | 
|---|
|  | 182 | S LOG=LA7AN | 
|---|
|  | 183 | ; Identity field | 
|---|
|  | 184 | S IDENT=$P($G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0)),"^",6) | 
|---|
|  | 185 | S IDE=+LA7IDE | 
|---|
|  | 186 | S LADT=LA7AD | 
|---|
|  | 187 | ; | 
|---|
|  | 188 | ; This disregards the CROSS LINK field in 62.4 | 
|---|
|  | 189 | D @(LA7ENTRY_"^LAGEN") | 
|---|
|  | 190 | S LA7ISQN=$G(ISQN) | 
|---|
|  | 191 | ; | 
|---|
|  | 192 | Q | 
|---|