- Timestamp:
- Dec 4, 2009, 12:11:15 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
WorldVistAEHR/trunk/r/AUTOMATED_LAB_INSTRUMENTS-LA/LA7VIN4.m
r613 r623 1 LA7VIN4 ;DALOI/JMC - Process Incoming UI Msgs, continued ; 7/27/07 11:24am 2 ;;5.2;AUTOMATED LAB INSTRUMENTS;**46,64,67,66**;Sep 27, 1994;Build 30 3 ;This routine is a continuation of LA7VIN1 and is only called from there. 4 Q 5 ; 6 OBR ; Process OBR segments 7 N I,LA7CUP,LA7ENTRY,LA7IDE,LA7INST,LA7PDUZ,LA7TRAY,LA7X,LA7Y 8 ; 9 ; OBR Set ID 10 S LA7SOBR=$$P^LA7VHLU(.LA7SEG,2,LA7FS) 11 ; 12 S LA7X=$$P^LA7VHLU(.LA7SEG,19,LA7FS) 13 S LA7X=$$UNESC^LA7VHLU3(LA7X,LA7FS_LA7ECH) 14 S LA7624=0,LA7INST=$P(LA7X,"^") ; extracting 1st piece 15 ; Look up #62.4 entry from instrument name. 16 I LA7INST'="" S LA7624=+$O(^LAB(62.4,"B",LA7INST,0)) 17 ; 18 ; If none then use sending application name to look up #62.4 entry. 19 I 'LA7624 S LA7624=+$O(^LAB(62.4,"B",LA7SAP,0)) 20 ; 21 ; Instrument name not found in xref 22 I 'LA7624 D Q 23 . I LA7INST="" D Q 24 . . S LA7ERR=10,LA7QUIT=2 25 . . D CREATE^LA7LOG(LA7ERR) 26 . S LA7ERR=11,LA7QUIT=2 27 . D CREATE^LA7LOG(LA7ERR) 28 S LA7624(0)=$G(^LAB(62.4,LA7624,0)) 29 S LA7ID=$P(LA7624(0),"^")_"-I-" 30 ; 31 S LA7LWL=+$P(LA7624(0),"^",4) ; Load/Work List 32 S LA7ENTRY=$P(LA7624(0),"^",6) ;LOG,LLIST,IDENT or SEQN 33 S:LA7ENTRY="" LA7ENTRY="LOG" 34 ; 35 ; Placer(sender)/filler order numbers 36 S LA7X=$$P^LA7VHLU(.LA7SEG,3,LA7FS) 37 S LA7SID=$P(LA7X,$E(LA7ECH)) F I=2:1:4 S LA7SID(I)=$P(LA7X,$E(LA7ECH),I) 38 S LA7X=$$P^LA7VHLU(.LA7SEG,4,LA7FS) 39 S LA7FID=$P(LA7X,$E(LA7ECH)) F I=2:1:4 S LA7FID(I)=$P(LA7X,$E(LA7ECH),I) 40 ; 41 ; Test order code - find order NLT code 42 ; If POC interface then see if NLT is used for ordering code 43 S LA7X=$$P^LA7VHLU(.LA7SEG,5,LA7FS),LA7ONLT="" 44 F I=1,4 D Q:LA7ONLT'="" 45 . I $P(LA7X,LA7CS,I)'?5N1"."4N Q 46 . I $P(LA7X,LA7CS,I+2)="99VA64" S LA7ONLT=$P(LA7X,LA7CS,I),LA7ONLT(0)=$P(LA7X,LA7CS,I+1) Q 47 . I LA7INTYP>19,LA7INTYP<30,$P(LA7X,LA7CS,I+2)="" S LA7ONLT=$P(LA7X,LA7CS,I),LA7ONLT(0)=$P(LA7X,LA7CS,I+1) Q 48 ; 49 ; Specimen collection date/time 50 S LA7CDT=$$HL7TFM^XLFDT($P($$P^LA7VHLU(.LA7SEG,8,LA7FS),LA7CS),"L") 51 ; 52 ; Pull info from placer field #2 (OBR-19) 53 S LA7X=$$P^LA7VHLU(.LA7SEG,20,LA7FS) 54 S LA7X=$$UNESC^LA7VHLU3(LA7X,LA7FS_LA7ECH) 55 S LA7TRAY=+$P(LA7X,"^",1) ;Tray 56 S LA7CUP=+$P(LA7X,"^",2) ; Cup 57 ; If POC interface set cup to file #62.49 ien 58 I LA7INTYP>19,LA7INTYP<30 S LA7CUP=LA76249 59 S LA7AA=$P(LA7X,"^",3) ; Accession Area 60 S LA7AD=$P(LA7X,"^",4) ; Accession Date 61 S LA7AN=$P(LA7X,"^",5) ; Accession Entry 62 S LA7ACC=$P(LA7X,"^",6) ; Accession 63 S LA7UID=$P(LA7X,"^",7) ; Unique ID 64 I LA7UID'?1(10UN,15UN) S LA7UID="" 65 ; 66 ; Sequence Number 67 ; If point of care interface (20-29) then use file #62.49 ien as IDE 68 S LA7IDE=$P(LA7X,LA7CS,8) 69 I LA7INTYP>19,LA7INTYP<30 S LA7IDE=LA76249 70 ; 71 ; UID might come as Sample ID 72 I LA7UID="",LA7SID?1(10UN,15UN) S LA7UID=LA7SID 73 ; 74 ; Try to figure out LA7AA LA7AD LA7AN by using the unique ID (UID) 75 ; accession may have rolled over, use UID to get current accession info. 76 I LA7UID]"" D 77 . N X 78 . S X=$Q(^LRO(68,"C",LA7UID)) 79 . I $QS(X,3)'=LA7UID S LA7UID="" Q ; UID not on file. 80 . S LA7AA=+$QS(X,4),LA7AD=+$QS(X,5),LA7AN=+$QS(X,6) 81 . D SETID^LA7VHLU1(LA76249,LA7ID,LA7UID) 82 ; 83 ; If still not known, compute from default accession date and area. 84 ; Calculate accession date based on accession transform. 85 I LA7AA<1!(LA7AD<1)!(LA7AN<1) D 86 . N X 87 . S LA7AA=+$P(LA7624(0),"^",11) 88 . S X=$P($G(^LRO(68,LA7AA,0)),U,3) 89 . 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) 90 . S LA7AN=+LA7SID 91 . I LA7AN>0 D SETID^LA7VHLU1(LA76249,LA7ID,LA7AN) Q 92 . D SETID^LA7VHLU1(LA76249,LA7ID,$S($G(LA7PNM)]"":LA7PNM,$G(LA7SSN)]"":LA7SSN,1:"NO ID")) 93 ; 94 ; Zeroth node of accession area. 95 S LA7AA(0)=$G(^LRO(68,+LA7AA,0)) 96 ; Accession's subscript 97 S LA7SS=$P(LA7AA(0),"^",2) 98 ; 99 ; Specimen action code 100 S LA7SAC=$$P^LA7VHLU(.LA7SEG,12,LA7FS) 101 ; 102 ; Specimen(topography), collection sample, HL7 specimen source 103 S (LA761,LA762,LA70070,LA7SPEC)="" 104 S LA7SPTY=$$P^LA7VHLU(.LA7SEG,16,LA7FS) 105 ; 106 ; Check if using HL7 table 0070 107 S LA7X=$P($P(LA7SPTY,LA7CS),$E(LA7ECH,4),3) 108 I LA7X=""!(LA7X="HL70070") S LA7SPEC=$P($P(LA7SPTY,LA7CS),$E(LA7ECH,4)) 109 ; 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 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 LA70070'="",LA7SPEC'="",LA70070'=LA7SPEC D 122 . ; Ignore if specimen related to lab control file #62.3 123 . I $P($G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0)),"^",2)=62.3 Q 124 . N LA7OBR 125 . S LA7OBR(15)=LA7SPEC ; backward compatible with old code 126 . S LA7ERR=22,LA7QUIT=2 127 . D CREATE^LA7LOG(LA7ERR) 128 ; 129 ; Don't continue if flag set to skip this segment 130 I LA7QUIT Q 131 ; 132 ; Placer's ordering provider (id^duz^last name, first name, mi [id]) 133 I $G(LA7POP)="" D 134 . S LA7POP="",LA7X=$$P^LA7VHLU(.LA7SEG,17,LA7FS) 135 . I LA7X="" Q 136 . S LA7POP=$$XCNTFM^LA7VHLU4(LA7X,LA7ECH) 137 . I LA7POP="^^" S LA7POP="" 138 ; 139 ; Create entry in LAH for supported subscripts. 140 I LA7MTYP="ORR",$G(LA7OTYPE)'="OK","CHMI"[LA7SS D 141 . D LAGEN 142 . I $G(LA7ISQN)="" D CREATE^LA7LOG(14) Q 143 . S LA7I=$O(^TMP("LA7 ORDER STATUS",$J,""),-1),LA7I=LA7I+1 144 . I LA7ONLT="" S X=$$P^LA7VHLU(.LA7SEG,5,LA7FS),LA7X=$P(X,LA7CS),LA7X(0)=$P(X,LA7CS,2) 145 . E S LA7X=LA7ONLT,LA7X(0)=LA7ONLT(0) 146 . S X=LA7LWL_"^"_LA7ISQN_"^"_LA7X_"^"_LA7X(0)_"^"_LA76248_"^"_LA76249_"^"_LA7OTYPE_"^^"_$P($G(LA7SM),"^",2) 147 . S ^TMP("LA7 ORDER STATUS",$J,LA7I)=X 148 . I $G(LA7OCR)'="" S ^TMP("LA7 ORDER STATUS",$J,LA7I,"OCR")=$TR(LA7OCR,LA7CS,"^") 149 . I $G(LA7MSATM)'="" S ^TMP("LA7 ORDER STATUS",$J,LA7I,"MSA")=LA7MSATM 150 ; 151 I LA7MTYP="ORU","CHMI"[LA7SS D 152 . D LAGEN 153 . I $G(LA7ISQN)<1 D CREATE^LA7LOG(14) Q 154 . I LA7INTYP=10,LA7SAC?1(1"A",1"G") D 155 . . S LA7I=$O(^TMP("LA7 ORDER STATUS",$J,""),-1),LA7I=LA7I+1,LA7SAC(0)=LA7I 156 . . I LA7ONLT="" S X=$$P^LA7VHLU(.LA7SEG,5,LA7FS),LA7X=$P(X,LA7CS),LA7X(0)=$P(X,LA7CS,2) 157 . . E S LA7X=LA7ONLT,LA7X(0)=LA7ONLT(0) 158 . . S X=LA7LWL_"^"_LA7ISQN_"^"_LA7X_"^"_LA7X(0)_"^"_LA76248_"^"_LA76249_"^"_$G(LA7OTYPE)_"^"_LA7SAC_"^"_$P($G(LA7SM),"^",2) 159 . . S ^TMP("LA7 ORDER STATUS",$J,LA7I)=X 160 ; 161 I LA7INTYP=10,$G(LA7SM)'="",$G(LA7UID)'="" D SMUPDT 162 Q 163 ; 164 ; 165 LAGEN ; Sets up variables for call to ^LAGEN, build entry in LAH 166 ; requires LA7INST,LA7TRAY,LA7CUP,LA7AA,LA7AD,LA7AN,LA7LWL 167 ; returns LA7ISQN=subscript to store results in ^LAH global 168 ; 169 I LA7ENTRY="LOG" D 170 . I LA7INTYP>19,LA7INTYP<30 Q 171 . I '$D(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0)) D CREATE^LA7LOG(13) 172 I LA7ENTRY="LLIST" S:'LA7CUP LA7CUP=LA7IDE ;cup=sequence number 173 ; 174 K LA7ISQN,LADT,LAGEN 175 K TRAY,CUP,LWL,WL,LROVER,METH,LOG,IDENT,ISQN 176 ; 177 S LA7ISQN="" 178 S TRAY=+$G(LA7TRAY) S:'TRAY TRAY=1 179 S CUP=+$G(LA7CUP) S:'CUP CUP=1 180 ; 181 S LWL=LA7LWL 182 I '$D(^LRO(68.2,+LWL,0)) D Q 183 . D CREATE^LA7LOG(19) 184 ; 185 ; Set accession area to area of specimen, allow multiple areas on same instrument. 186 S WL=LA7AA 187 I '$D(^LRO(68,+WL,0)) D Q 188 . D CREATE^LA7LOG(20) 189 S LROVER=$P(LA7624(0),"^",12) 190 S METH=$P(LA7624(0),"^",10) 191 S LOG=LA7AN 192 S IDENT=$P($G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0)),"^",6) ;identity field 193 S IDE=+LA7IDE 194 S LADT=LA7AD 195 ; 196 ; If POC interface call special entry point 197 D 198 . N LRDFN ; Protect LRDFN - call into LAGEN can set to 0 199 . I LA7INTYP>19,LA7INTYP<30 S IDE=LA76249 D POC^LAGEN Q 200 . D @(LA7ENTRY_"^LAGEN") ;this disregards the CROSS LINK field in 62.4 201 S LA7ISQN=$G(ISQN) 202 ; 203 I LA7ISQN<1 Q 204 ; 205 ; Build/store patient demographics array 206 N I,J,LA7OBRA,LA7PIDA,X,Y 207 S J="DFN^DOB^ICN^LOC^LRDFN^LRTDFN^PNM^SEX^SSN" 208 S J(0)="DFN^LA7DOB^LA7ICN^LA7LOC^LRDFN^LRTDFN^LA7PNM^LA7SEX^LA7SSN" 209 F I=1:1 S X=$P(J,"^",I) Q:X="" D 210 . S Y=$P(J(0),"^",I) 211 . I $G(@Y)'="" S LA7PIDA(X)=@Y 212 I $D(LA7PIDA) D POI^LAGEN(LA7LWL,LA7ISQN,"PID",.LA7PIDA) 213 ; 214 ; Build/store order info array 215 N LA7ONLTS 216 I LA7POP'="" S LA7POP=$P(LA7POP," [") 217 S X=$G(^LAH(LA7LWL,1,LA7ISQN,.1,"OBR","ORDNLT")) 218 I X'="",LA7ONLT'="",X'[LA7ONLT S LA7ONLTS=X_"^"_LA7ONLT 219 E S LA7ONLTS=LA7ONLT 220 S J="EOL^FID^ORCDT^ORDNLT^ORDP^ORDSPEC^PON^SID^PEB^PVB" 221 S J(0)="LA7EOL^LA7FID^LA7CDT^LA7ONLTS^LA7POP^LA7SPEC^LA7PON^LA7SID^LA7PEB^LA7PVB" 222 F I=1:1 S X=$P(J,"^",I) Q:X="" D 223 . S Y=$P(J(0),"^",I) 224 . I $G(@Y)'="" S LA7OBRA(X)=@Y 225 I $D(LA7OBRA) D POI^LAGEN(LA7LWL,LA7ISQN,"OBR",.LA7OBRA) 226 ; 227 ; Store interface type with results 228 D LATYP^LAGEN(LA7LWL,LA7ISQN,LA7INTYP) 229 ; 230 ; Store #62.49 ien with results 231 D LAMSGID^LAGEN(LA7LWL,LA7ISQN,LA76249) 232 ; 233 ; Store method name with LAH entry 234 D METH^LAGEN(LA7LWL,LA7ISQN,METH) 235 ; 236 ; Set flag if POC interface to start POC processing routine when 237 ; finished - tasked by LA7VIN before shutdown 238 I LA7INTYP>19,LA7INTYP<30 S LA7INTYP("LWL",LA7LWL)="" 239 ; 240 Q 241 ; 242 ; 243 SMUPDT ; Update shipping manifest in shipping event file #62.85 244 N LA7DATA,LA7NCS,LA7TST,LA7USID 245 ; 246 S LA7USID=$$P^LA7VHLU(.LA7SEG,5,LA7FS) ; Universal Service ID (OBR-4) 247 S LA7TST=$P(LA7USID,LA7CS,1) ; Test code 248 S LA7NCS=$P(LA7USID,LA7CS,3) ; Name of coding system 249 S LA7TST(2)=$P(LA7USID,LA7CS,4) ; Alternate test code 250 S LA7NCS(2)=$P(LA7USID,LA7CS,6) ; Alternate coding system 251 ; 252 ; Determine ordered test, check primary and alternate 253 S LA7OTST=$$DOT^LA7SMU1(LA7TST,LA7NCS,LA7UID,$P(LA7SM,"^")) 254 I 'LA7OTST,LA7TST(2)'="" S LA7OTST=$$DOT^LA7SMU1(LA7TST(2),LA7NCS(2),LA7UID,$P(LA7SM,"^")) 255 ; 256 ; Flag the Results Received Event in #62.85 257 I LA7MTYP="ORU" D 258 . S LA7DATA="SM70"_"^"_LA7MEDT_"^"_$G(LA7OTST)_"^"_$P(LA7SM,"^",2) 259 . D SEUP^LA7SMU(LA7UID,"2",LA7DATA) 260 ; 261 ; Flag the Test Received Event in #62.85 262 I LA7MTYP="ORR" D 263 . S LA7DATA="SM55"_"^"_LA7MEDT_"^"_$G(LA7OTST)_"^"_$P(LA7SM,"^",2) 264 . D SEUP^LA7SMU(LA7UID,"2",LA7DATA) 265 Q 1 LA7VIN4 ;DALOI/JMC - Process Incoming UI Msgs, continued ; Jan 12, 2004 2 ;;5.2;AUTOMATED LAB INSTRUMENTS;**46,64,67**;Sep 27, 1994 3 ;This routine is a continuation of LA7VIN1 and is only called from there. 4 Q 5 ; 6 OBR ; Process OBR segments 7 N I,LA7CUP,LA7ENTRY,LA7IDE,LA7INST,LA7PDUZ,LA7TRAY,LA7X,LA7Y 8 ; 9 ; OBR Set ID 10 S LA7SOBR=$$P^LA7VHLU(.LA7SEG,2,LA7FS) 11 ; 12 S LA7X=$$P^LA7VHLU(.LA7SEG,19,LA7FS) 13 S LA7X=$$UNESC^LA7VHLU3(LA7X,LA7FS_LA7ECH) 14 S LA7624=0,LA7INST=$P(LA7X,"^") ; extracting 1st piece 15 ; Look up #62.4 entry from instrument name. 16 I LA7INST'="" S LA7624=+$O(^LAB(62.4,"B",LA7INST,0)) 17 ; 18 ; If none then use sending application name to look up #62.4 entry. 19 I 'LA7624 S LA7624=+$O(^LAB(62.4,"B",LA7SAP,0)) 20 ; 21 ; Instrument name not found in xref 22 I 'LA7624 D Q 23 . I LA7INST="" D Q 24 . . S LA7ERR=10,LA7QUIT=2 25 . . D CREATE^LA7LOG(LA7ERR) 26 . S LA7ERR=11,LA7QUIT=2 27 . D CREATE^LA7LOG(LA7ERR) 28 S LA7624(0)=$G(^LAB(62.4,LA7624,0)) 29 S LA7ID=$P(LA7624(0),"^")_"-I-" 30 ; 31 S LA7LWL=+$P(LA7624(0),"^",4) ; Load/Work List 32 S LA7ENTRY=$P(LA7624(0),"^",6) ;LOG,LLIST,IDENT or SEQN 33 S:LA7ENTRY="" LA7ENTRY="LOG" 34 ; 35 ; Placer(sender)/filler order numbers 36 S LA7X=$$P^LA7VHLU(.LA7SEG,3,LA7FS) 37 S LA7SID=$P(LA7X,$E(LA7ECH)) F I=2:1:4 S LA7SID(I)=$P(LA7X,$E(LA7ECH),I) 38 S LA7X=$$P^LA7VHLU(.LA7SEG,4,LA7FS) 39 S LA7FID=$P(LA7X,$E(LA7ECH)) F I=2:1:4 S LA7FID(I)=$P(LA7X,$E(LA7ECH),I) 40 ; 41 ; Test order code - find order NLT code 42 ; If POC interface then see if NLT is used for ordering code 43 S LA7X=$$P^LA7VHLU(.LA7SEG,5,LA7FS),LA7ONLT="" 44 F I=1,4 D Q:LA7ONLT'="" 45 . I $P(LA7X,LA7CS,I)'?5N1"."4N Q 46 . I $P(LA7X,LA7CS,I+2)="99VA64" S LA7ONLT=$P(LA7X,LA7CS,I),LA7ONLT(0)=$P(LA7X,LA7CS,I+1) Q 47 . I LA7INTYP>19,LA7INTYP<30,$P(LA7X,LA7CS,I+2)="" S LA7ONLT=$P(LA7X,LA7CS,I),LA7ONLT(0)=$P(LA7X,LA7CS,I+1) Q 48 ; 49 ; Specimen collection date/time 50 S LA7CDT=$$HL7TFM^XLFDT($P($$P^LA7VHLU(.LA7SEG,8,LA7FS),LA7CS),"L") 51 ; 52 ; Pull info from placer field #2 (OBR-19) 53 S LA7X=$$P^LA7VHLU(.LA7SEG,20,LA7FS) 54 S LA7X=$$UNESC^LA7VHLU3(LA7X,LA7FS_LA7ECH) 55 S LA7TRAY=+$P(LA7X,"^",1) ;Tray 56 S LA7CUP=+$P(LA7X,"^",2) ; Cup 57 ; If POC interface set cup to file #62.49 ien 58 I LA7INTYP>19,LA7INTYP<30 S LA7CUP=LA76249 59 S LA7AA=$P(LA7X,"^",3) ; Accession Area 60 S LA7AD=$P(LA7X,"^",4) ; Accession Date 61 S LA7AN=$P(LA7X,"^",5) ; Accession Entry 62 S LA7ACC=$P(LA7X,"^",6) ; Accession 63 S LA7UID=$P(LA7X,"^",7) ; Unique ID 64 I LA7UID'?1(10UN,15UN) S LA7UID="" 65 ; 66 ; Sequence Number 67 ; If point of care interface (20-29) then use file #62.49 ien as IDE 68 S LA7IDE=$P(LA7X,LA7CS,8) 69 I LA7INTYP>19,LA7INTYP<30 S LA7IDE=LA76249 70 ; 71 ; UID might come as Sample ID 72 I LA7UID="",LA7SID?1(10UN,15UN) S LA7UID=LA7SID 73 ; 74 ; Try to figure out LA7AA LA7AD LA7AN by using the unique ID (UID) 75 ; accession may have rolled over, use UID to get current accession info. 76 I LA7UID]"" D 77 . N X 78 . S X=$Q(^LRO(68,"C",LA7UID)) 79 . I $QS(X,3)'=LA7UID S LA7UID="" Q ; UID not on file. 80 . S LA7AA=+$QS(X,4),LA7AD=+$QS(X,5),LA7AN=+$QS(X,6) 81 . D SETID^LA7VHLU1(LA76249,LA7ID,LA7UID) 82 ; 83 ; If still not known, compute from default accession date and area. 84 ; Calculate accession date based on accession transform. 85 I LA7AA<1!(LA7AD<1)!(LA7AN<1) D 86 . N X 87 . S LA7AA=+$P(LA7624(0),"^",11) 88 . S X=$P($G(^LRO(68,LA7AA,0)),U,3) 89 . 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) 90 . S LA7AN=+LA7SID 91 . I LA7AN>0 D SETID^LA7VHLU1(LA76249,LA7ID,LA7AN) 92 . E D SETID^LA7VHLU1(LA76249,LA7ID,$S(LA7PNM]"":LA7PNM,LA7SSN]"":LA7SSN,1:"NO ID")) 93 ; 94 ; Zeroth node of acession area. 95 S LA7AA(0)=$G(^LRO(68,+LA7AA,0)) 96 ; Accession's subscript 97 S LA7SS=$P(LA7AA(0),"^",2) 98 ; 99 ; Specimen action code 100 S LA7SAC=$$P^LA7VHLU(.LA7SEG,12,LA7FS) 101 ; 102 ; Specimen(topography), collection sample, HL7 specimen source 103 S (LA761,LA762,LA70070,LA7SPEC)="" 104 S LA7SPTY=$$P^LA7VHLU(.LA7SEG,16,LA7FS) 105 ; 106 ; Check if using HL7 table 0070 107 S LA7X=$P($P(LA7SPTY,LA7CS),$E(LA7ECH,4),3) 108 I LA7X=""!(LA7X="HL70070") S LA7SPEC=$P($P(LA7SPTY,LA7CS),$E(LA7ECH,4)) 109 ; 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 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 LA70070'="",LA7SPEC'="",LA70070'=LA7SPEC D 122 . N LA7OBR 123 . S LA7OBR(15)=LA7SPEC ; backward compatible with old code 124 . S LA7ERR=22,LA7QUIT=2 125 . D CREATE^LA7LOG(LA7ERR) 126 ; 127 ; Don't continue if flag set to skip this segment 128 I LA7QUIT Q 129 ; 130 ; Placer's ordering provider (id^duz^last name, first name, mi [id]) 131 I $G(LA7POP)="" D 132 . S LA7POP="",LA7X=$$P^LA7VHLU(.LA7SEG,17,LA7FS) 133 . I LA7X="" Q 134 . S LA7POP=$$XCNTFM^LA7VHLU4(LA7X,LA7ECH) 135 . I LA7POP="^^" S LA7POP="" 136 ; 137 ; Create entry in LAH for supported subscripts. 138 I LA7MTYP="ORR",$G(LA7OTYPE)'="OK","CHMI"[LA7SS D 139 . D LAGEN 140 . I $G(LA7ISQN)="" D CREATE^LA7LOG(14) Q 141 . S LA7I=$O(^TMP("LA7 ORDER STATUS",$J,""),-1),LA7I=LA7I+1 142 . I LA7ONLT="" S X=$$P^LA7VHLU(.LA7SEG,5,LA7FS),LA7X=$P(X,LA7CS),LA7X(0)=$P(X,LA7CS,2) 143 . E S LA7X=LA7ONLT,LA7X(0)=LA7ONLT(0) 144 . S X=LA7LWL_"^"_LA7ISQN_"^"_LA7X_"^"_LA7X(0)_"^"_LA76248_"^"_LA76249_"^"_LA7OTYPE_"^^"_$P($G(LA7SM),"^",2) 145 . S ^TMP("LA7 ORDER STATUS",$J,LA7I)=X 146 . I $G(LA7OCR)'="" S ^TMP("LA7 ORDER STATUS",$J,LA7I,"OCR")=$TR(LA7OCR,LA7CS,"^") 147 . I $G(LA7MSATM)'="" S ^TMP("LA7 ORDER STATUS",$J,LA7I,"MSA")=LA7MSATM 148 ; 149 I LA7MTYP="ORU","CHMI"[LA7SS D 150 . D LAGEN 151 . I $G(LA7ISQN)<1 D CREATE^LA7LOG(14) Q 152 . I LA7INTYP=10,LA7SAC?1(1"A",1"G") D 153 . . S LA7I=$O(^TMP("LA7 ORDER STATUS",$J,""),-1),LA7I=LA7I+1,LA7SAC(0)=LA7I 154 . . I LA7ONLT="" S X=$$P^LA7VHLU(.LA7SEG,5,LA7FS),LA7X=$P(X,LA7CS),LA7X(0)=$P(X,LA7CS,2) 155 . . E S LA7X=LA7ONLT,LA7X(0)=LA7ONLT(0) 156 . . S X=LA7LWL_"^"_LA7ISQN_"^"_LA7X_"^"_LA7X(0)_"^"_LA76248_"^"_LA76249_"^"_$G(LA7OTYPE)_"^"_LA7SAC_"^"_$P($G(LA7SM),"^",2) 157 . . S ^TMP("LA7 ORDER STATUS",$J,LA7I)=X 158 ; 159 I LA7INTYP=10,$G(LA7SM)'="",$G(LA7UID)'="" D SMUPDT 160 Q 161 ; 162 ; 163 LAGEN ; Sets up variables for call to ^LAGEN, build entry in LAH 164 ; requires LA7INST,LA7TRAY,LA7CUP,LA7AA,LA7AD,LA7AN,LA7LWL 165 ; returns LA7ISQN=subscript to store results in ^LAH global 166 ; 167 I LA7ENTRY="LOG" D 168 . I LA7INTYP>19,LA7INTYP<30 Q 169 . I '$D(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0)) D CREATE^LA7LOG(13) 170 I LA7ENTRY="LLIST" S:'LA7CUP LA7CUP=LA7IDE ;cup=sequence number 171 ; 172 K LA7ISQN,LADT,LAGEN 173 K TRAY,CUP,LWL,WL,LROVER,METH,LOG,IDENT,ISQN 174 ; 175 S LA7ISQN="" 176 S TRAY=+$G(LA7TRAY) S:'TRAY TRAY=1 177 S CUP=+$G(LA7CUP) S:'CUP CUP=1 178 ; 179 S LWL=LA7LWL 180 I '$D(^LRO(68.2,+LWL,0)) D Q 181 . D CREATE^LA7LOG(19) 182 ; 183 ; Set accession area to area of specimen, allow multiple areas on same instrument. 184 S WL=LA7AA 185 I '$D(^LRO(68,+WL,0)) D Q 186 . D CREATE^LA7LOG(20) 187 S LROVER=$P(LA7624(0),"^",12) 188 S METH=$P(LA7624(0),"^",10) 189 S LOG=LA7AN 190 S IDENT=$P($G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0)),"^",6) ;identity field 191 S IDE=+LA7IDE 192 S LADT=LA7AD 193 ; 194 ; If POC interface call special entry point 195 D 196 . N LRDFN ; Protect LRDFN - call into LAGEN can set to 0 197 . I LA7INTYP>19,LA7INTYP<30 S IDE=LA76249 D POC^LAGEN Q 198 . D @(LA7ENTRY_"^LAGEN") ;this disregards the CROSS LINK field in 62.4 199 S LA7ISQN=$G(ISQN) 200 ; 201 I LA7ISQN<1 Q 202 ; 203 ; Build/store patient demographics array 204 N I,J,LA7OBRA,LA7PIDA,X,Y 205 S J="DFN^DOB^ICN^LOC^LRDFN^LRTDFN^PNM^SEX^SSN" 206 S J(0)="DFN^LA7DOB^LA7ICN^LA7LOC^LRDFN^LRTDFN^LA7PNM^LA7SEX^LA7SSN" 207 F I=1:1 S X=$P(J,"^",I) Q:X="" D 208 . S Y=$P(J(0),"^",I) 209 . I $G(@Y)'="" S LA7PIDA(X)=@Y 210 I $D(LA7PIDA) D POI^LAGEN(LA7LWL,LA7ISQN,"PID",.LA7PIDA) 211 ; 212 ; Build/store order info array 213 N LA7ONLTS 214 I LA7POP'="" S LA7POP=$P(LA7POP," [") 215 S X=$G(^LAH(LA7LWL,1,LA7ISQN,.1,"OBR","ORDNLT")) 216 I X'="",LA7ONLT'="",X'[LA7ONLT S LA7ONLTS=X_"^"_LA7ONLT 217 E S LA7ONLTS=LA7ONLT 218 S J="EOL^FID^ORCDT^ORDNLT^ORDP^ORDSPEC^PON^SID^PEB^PVB" 219 S J(0)="LA7EOL^LA7FID^LA7CDT^LA7ONLTS^LA7POP^LA7SPEC^LA7PON^LA7SID^LA7PEB^LA7PVB" 220 F I=1:1 S X=$P(J,"^",I) Q:X="" D 221 . S Y=$P(J(0),"^",I) 222 . I $G(@Y)'="" S LA7OBRA(X)=@Y 223 I $D(LA7OBRA) D POI^LAGEN(LA7LWL,LA7ISQN,"OBR",.LA7OBRA) 224 ; 225 ; Store interface type with results 226 D LATYP^LAGEN(LA7LWL,LA7ISQN,LA7INTYP) 227 ; 228 ; Store #62.49 ien with results 229 D LAMSGID^LAGEN(LA7LWL,LA7ISQN,LA76249) 230 ; 231 ; Store method name with LAH entry 232 D METH^LAGEN(LA7LWL,LA7ISQN,METH) 233 ; 234 ; Set flag if POC interface to start POC processing routine when 235 ; finished - tasked by LA7VIN before shutdown 236 I LA7INTYP>19,LA7INTYP<30 S LA7INTYP("LWL",LA7LWL)="" 237 ; 238 Q 239 ; 240 ; 241 SMUPDT ; Update shipping manifest in shipping event file #62.85 242 N LA7DATA,LA7NCS,LA7TST,LA7USID 243 ; 244 S LA7USID=$$P^LA7VHLU(.LA7SEG,5,LA7FS) ; Universal Service ID (OBR-4) 245 S LA7TST=$P(LA7USID,LA7CS,1) ; Test code 246 S LA7NCS=$P(LA7USID,LA7CS,3) ; Name of coding system 247 S LA7TST(2)=$P(LA7USID,LA7CS,4) ; Alternate test code 248 S LA7NCS(2)=$P(LA7USID,LA7CS,6) ; Alternate coding system 249 ; 250 ; Determine ordered test, check primary and alternate 251 S LA7OTST=$$DOT^LA7SMU1(LA7TST,LA7NCS,LA7UID,$P(LA7SM,"^")) 252 I 'LA7OTST,LA7TST(2)'="" S LA7OTST=$$DOT^LA7SMU1(LA7TST(2),LA7NCS(2),LA7UID,$P(LA7SM,"^")) 253 ; 254 ; Flag the Results Received Event in #62.85 255 I LA7MTYP="ORU" D 256 . S LA7DATA="SM70"_"^"_LA7MEDT_"^"_$G(LA7OTST)_"^"_$P(LA7SM,"^",2) 257 . D SEUP^LA7SMU(LA7UID,"2",LA7DATA) 258 ; 259 ; Flag the Test Received Event in #62.85 260 I LA7MTYP="ORR" D 261 . S LA7DATA="SM55"_"^"_LA7MEDT_"^"_$G(LA7OTST)_"^"_$P(LA7SM,"^",2) 262 . D SEUP^LA7SMU(LA7UID,"2",LA7DATA) 263 Q
Note:
See TracChangeset
for help on using the changeset viewer.