| [613] | 1 | LA7VORM ;DALOI/DLR - LAB ORM (Order) message PROCESSOR ; April 13, 2004 | 
|---|
|  | 2 | ;;5.2;AUTOMATED LAB INSTRUMENTS;**27,42,46,64**;Sep 27, 1994 | 
|---|
|  | 3 | IN ; | 
|---|
|  | 4 | D ORM^LA7VHL | 
|---|
|  | 5 | Q | 
|---|
|  | 6 | ; | 
|---|
|  | 7 | OBR ;;OBR | 
|---|
|  | 8 | N LA760,LA76205,LA7629,LA7ACC,LA7CEDT,LA7CSCS,LA7CSNM,LA7CSTY,LA7DCODE,LA7HSITE,LA7I,LA7NCS,LA7OTST,LA7OTSTN,LA7PF1,LA7PF2,LA7RCI,LA7SPCS,LA7SPNM,LA7SPTY,LA7USID,LA7X,LA7Y,RTST,RTSTN | 
|---|
|  | 9 | ; | 
|---|
|  | 10 | ; OBR Set ID | 
|---|
|  | 11 | S LA7SOBR=$$P^LA7VHLU(.LA7SEG,2,LA7FS) | 
|---|
|  | 12 | ; | 
|---|
|  | 13 | ; Placer order number | 
|---|
|  | 14 | S LA7SID=$$P^LA7VHLU(.LA7SEG,3,LA7FS) | 
|---|
|  | 15 | ; | 
|---|
|  | 16 | ; Universal service ID | 
|---|
|  | 17 | S LA7USID=$$P^LA7VHLU(.LA7SEG,5,LA7FS) | 
|---|
|  | 18 | S LA7OTSTN=$P(LA7USID,LA7CS) | 
|---|
|  | 19 | I LA7OTSTN="" D  Q | 
|---|
|  | 20 | . N LA7X | 
|---|
|  | 21 | . S LA7X="PID-"_LA7SPID_"/OBR-"_LA7SOBR | 
|---|
|  | 22 | . D CREATE^LA7LOG(26) | 
|---|
|  | 23 | ; | 
|---|
|  | 24 | S LA7OTST=$$UNESC^LA7VHLU3($P(LA7USID,LA7CS,2),LA7FS_LA7ECH) | 
|---|
|  | 25 | S LA7NCS=$P(LA7USID,LA7CS,3) ; Name of coding system | 
|---|
|  | 26 | S RTSTN=$P(LA7USID,LA7CS,4) | 
|---|
|  | 27 | S RTST=$$UNESC^LA7VHLU3($P(LA7USID,LA7CS,5),LA7FS_LA7ECH) | 
|---|
|  | 28 | ; | 
|---|
|  | 29 | ; No ORC segment | 
|---|
|  | 30 | I LA7SEQ<20 D  Q | 
|---|
|  | 31 | . D CREATE^LA7LOG(29) | 
|---|
|  | 32 | ; | 
|---|
|  | 33 | ; Missing patient name | 
|---|
|  | 34 | I $G(LA7PNM)="" D  Q | 
|---|
|  | 35 | . D CREATE^LA7LOG(30) | 
|---|
|  | 36 | ; | 
|---|
|  | 37 | ; Non-VA system, not using NLT codes/file #60 tests | 
|---|
|  | 38 | I LA7NCS'="99VA64" D | 
|---|
|  | 39 | . I RTSTN="" S RTSTN=LA7OTST | 
|---|
|  | 40 | . I RTST="" S RTST=LA7OTSTN | 
|---|
|  | 41 | ; | 
|---|
|  | 42 | ; Specimen collection date/time | 
|---|
|  | 43 | S LA7CDT=$$HL7TFM^XLFDT($P($$P^LA7VHLU(.LA7SEG,8,LA7FS),LA7CS),"L") | 
|---|
|  | 44 | ; | 
|---|
|  | 45 | ; Specimen end collection date/time (timed collection) | 
|---|
|  | 46 | S LA7CEDT=$$HL7TFM^XLFDT($P($$P^LA7VHLU(.LA7SEG,9,LA7FS),LA7CS),"L") | 
|---|
|  | 47 | ; | 
|---|
|  | 48 | ; Collection volume | 
|---|
|  | 49 | S LA7VOL="" | 
|---|
|  | 50 | S LA7X=$$P^LA7VHLU(.LA7SEG,10,LA7FS) | 
|---|
|  | 51 | I $L($P(LA7X,LA7CS)) D | 
|---|
|  | 52 | . S $P(LA7VOL,"^")=$P(LA7X,LA7CS) ; volume | 
|---|
|  | 53 | . S $P(LA7VOL,"^",2)=$P(LA7X,LA7CS,2) ; volume units | 
|---|
|  | 54 | . S $P(LA7VOL,"^",3)=$P(LA7X,LA7CS,3) ; volume coding system | 
|---|
|  | 55 | ; | 
|---|
|  | 56 | ; Specimen action code | 
|---|
|  | 57 | S LA7X=$$P^LA7VHLU(.LA7SEG,12,LA7FS),LA7SAC="" | 
|---|
|  | 58 | I LA7X="A" S LA7SAC="Add ordered tests to the existing specimen" | 
|---|
|  | 59 | I LA7X="G" S LA7SAC="Generated order; reflex order" | 
|---|
|  | 60 | ; | 
|---|
|  | 61 | ; Danger code | 
|---|
|  | 62 | S LA7X=$P($$P^LA7VHLU(.LA7SEG,13,LA7FS),LA7CS,2) | 
|---|
|  | 63 | S LA7DCODE=$$UNESC^LA7VHLU3(LA7X,LA7FS_LA7ECH) | 
|---|
|  | 64 | I LA7DCODE]"" D | 
|---|
|  | 65 | . S LA7DCODE=$$TRIM^XLFSTR(LA7DCODE,"RL"," ") | 
|---|
|  | 66 | . S LA7DCODE="Danger Code - "_LA7DCODE | 
|---|
|  | 67 | ; | 
|---|
|  | 68 | ; Relevant clinical information | 
|---|
|  | 69 | S LA7X=$$P^LA7VHLU(.LA7SEG,14,LA7FS) | 
|---|
|  | 70 | S LA7RCI=$$UNESC^LA7VHLU3(LA7X,LA7FS_LA7ECH) | 
|---|
|  | 71 | I LA7RCI]"" D | 
|---|
|  | 72 | . S LA7RCI=$$TRIM^XLFSTR(LA7RCI,"RL"," ") | 
|---|
|  | 73 | . S LA7RCI="Relevant clinical information - "_LA7RCI | 
|---|
|  | 74 | ; | 
|---|
|  | 75 | ; Specimen source -  specimen code - name of specimen coding system | 
|---|
|  | 76 | ; If no primary then try alternate | 
|---|
|  | 77 | S LA7X=$$P^LA7VHLU(.LA7SEG,16,LA7FS) | 
|---|
|  | 78 | S LA7SPTY=$P($P(LA7X,LA7CS),$E(LA7ECH,4)) | 
|---|
|  | 79 | S LA7SPNM=$P($P(LA7X,LA7CS),$E(LA7ECH,4),2) | 
|---|
|  | 80 | S LA7SPCS=$P($P(LA7X,LA7CS),$E(LA7ECH,4),3) | 
|---|
|  | 81 | I LA7SPTY="" D | 
|---|
|  | 82 | . S LA7SPTY=$P($P(LA7X,LA7CS),$E(LA7ECH,4),4) | 
|---|
|  | 83 | . S LA7SPNM=$P($P(LA7X,LA7CS),$E(LA7ECH,4),5) | 
|---|
|  | 84 | . S LA7SPCS=$P($P(LA7X,LA7CS),$E(LA7ECH,4),6) | 
|---|
|  | 85 | ; | 
|---|
|  | 86 | ; Collection sample from body site | 
|---|
|  | 87 | S LA7CSTY=$P($P(LA7X,LA7CS,4),$E(LA7ECH,4)) | 
|---|
|  | 88 | S LA7CSNM=$P($P(LA7X,LA7CS,4),$E(LA7ECH,4),2) | 
|---|
|  | 89 | S LA7CSCS=$P($P(LA7X,LA7CS,4),$E(LA7ECH,4),3) | 
|---|
|  | 90 | ; | 
|---|
|  | 91 | ; Placer's ordering provider (last name, first name, mi [id]) | 
|---|
|  | 92 | ; Only process if LA7POP from ORC-12 is blank. | 
|---|
|  | 93 | I LA7POP="" D | 
|---|
|  | 94 | . S LA7X=$$P^LA7VHLU(.LA7SEG,17,LA7FS) | 
|---|
|  | 95 | . S LA7POP=$$XCNTFM^LA7VHLU4(LA7X,LA7ECH) | 
|---|
|  | 96 | . I LA7POP="^^" S LA7POP="" | 
|---|
|  | 97 | ; | 
|---|
|  | 98 | ; Specimen urgency | 
|---|
|  | 99 | S LA7UR=$P($$P^LA7VHLU(.LA7SEG,28,LA7FS),LA7CS,6) | 
|---|
|  | 100 | ; If no urgency see if it came in ORC-7 | 
|---|
|  | 101 | I LA7UR="" S LA7UR=$G(LA7OUR) | 
|---|
|  | 102 | ; | 
|---|
|  | 103 | ; Look for receiving facility in OBR, then use receiving facility from MSH | 
|---|
|  | 104 | S LA7X=$P($$P^LA7VHLU(.LA7SEG,35,LA7FS),LA7CS,7) | 
|---|
|  | 105 | S LA7HSITE=$$FINDSITE^LA7VHLU2(LA7X,1,1) | 
|---|
|  | 106 | I LA7HSITE'>0 S LA7HSITE=$$FINDSITE^LA7VHLU2(LA7RFAC,1,0) | 
|---|
|  | 107 | ; | 
|---|
|  | 108 | ; Find an "active" shipping configuration for this pair. | 
|---|
|  | 109 | S LA7629=0 | 
|---|
|  | 110 | I LA7CSITE,LA7HSITE D | 
|---|
|  | 111 | . N LA7X | 
|---|
|  | 112 | . S LA7X=0 | 
|---|
|  | 113 | . F  S LA7X=$O(^LAHM(62.9,"CH",LA7CSITE,LA7HSITE,LA7X)) Q:'LA7X  I $P($G(^LAHM(62.9,LA7X,0)),"^",4) S LA7629=LA7X Q | 
|---|
|  | 114 | ; Log error and quit if no active shipping configuration identified | 
|---|
|  | 115 | I 'LA7629 D  Q | 
|---|
|  | 116 | . D CREATE^LA7LOG(39) | 
|---|
|  | 117 | ; | 
|---|
|  | 118 | S LA7Y=$$DTTO^LA7SMU2(LA7629,LA7OTSTN,LA7SPTY,LA7NCS,LA7SPCS,LA7UR,LA7CSTY_"^"_LA7CSNM_"^"_LA7CSCS) | 
|---|
|  | 119 | S LA760=$P(LA7Y,"^"),LA761=$P(LA7Y,"^",2),LA762=$P(LA7Y,"^",3),LA76205=$P(LA7Y,"^",4) | 
|---|
|  | 120 | I $P(LA7Y,"^",5)'="" S LA7OTSTN=$P(LA7Y,"^",5),LA7OTST=$P(LA7Y,"^",6) | 
|---|
|  | 121 | F LA7I=1:1:4 I '$P(LA7Y,"^",LA7I) D | 
|---|
|  | 122 | . I LA7I=3,LA760,"MISPCYEM"[$P(^LAB(60,LA760,0),"^",4) Q | 
|---|
|  | 123 | . S LA7X="No local "_$P("lab test^topography^collection sample^urgency","^",LA7I)_" mapped." | 
|---|
|  | 124 | . N LA7I,LA7Y | 
|---|
|  | 125 | . D CREATE^LA7LOG(47) | 
|---|
|  | 126 | ; | 
|---|
|  | 127 | ; Placer fields 1 & 2 | 
|---|
|  | 128 | S LA7X=$$P^LA7VHLU(.LA7SEG,19,LA7FS) | 
|---|
|  | 129 | I LA7X'="",LA7X[LA7CS S LA7X=$TR(LA7X,LA7CS,"^") | 
|---|
|  | 130 | S LA7PF1=$$UNESC^LA7VHLU3(LA7X,LA7FS_LA7ECH) | 
|---|
|  | 131 | S LA7X=$$P^LA7VHLU(.LA7SEG,20,LA7FS) | 
|---|
|  | 132 | I LA7X'="",LA7X[LA7CS S LA7X=$TR(LA7X,LA7CS,"^") | 
|---|
|  | 133 | S LA7PF2=$$UNESC^LA7VHLU3(LA7X,LA7FS_LA7ECH) | 
|---|
|  | 134 | S LA7ACC=$P(LA7PF2,"^",6) | 
|---|
|  | 135 | ; | 
|---|
|  | 136 | ; New order - add to LAB PENDING ORDERS file #69.6 | 
|---|
|  | 137 | I LA7OTYPE="NW" D NW | 
|---|
|  | 138 | ; | 
|---|
|  | 139 | Q | 
|---|
|  | 140 | ; | 
|---|
|  | 141 | NW ; Create new order in LAB PENDING ORDERS file #69.6 | 
|---|
|  | 142 | ; | 
|---|
|  | 143 | N FDA,I,LA76964,LA7DIE,LA7I,LA7IEN,LA7PATID,LA7SSITE,LA7STAT,LA7WP | 
|---|
|  | 144 | ; | 
|---|
|  | 145 | ; Get lock on 69.6 | 
|---|
|  | 146 | L +^LRO(69.6,0):99999 | 
|---|
|  | 147 | I '$T D  Q | 
|---|
|  | 148 | . D CREATE^LA7LOG(31) | 
|---|
|  | 149 | ; | 
|---|
|  | 150 | S LA7696=$O(^LRO(69.6,"AD",$S($P(LA7SM,"^",2)'="":$P(LA7SM,"^",2),1:0),LA7SID,0)) | 
|---|
|  | 151 | ; | 
|---|
|  | 152 | ; Find "In-Transit" status in #64.061 | 
|---|
|  | 153 | S LA7STAT=$$FIND1^DIC(64.061,"","OMX","In-Transit","","I $P(^LAB(64.061,Y,0),U,7)=""U""") | 
|---|
|  | 154 | ; | 
|---|
|  | 155 | ; Create entry in LAB PENDING ORDER ENTRY file, log error if not added | 
|---|
|  | 156 | I $G(LA7696)'>0 D | 
|---|
|  | 157 | . S FDA(1,69.6,"+1,",.01)=LA7PNM | 
|---|
|  | 158 | . S FDA(1,69.6,"+1,",6)=LA7STAT | 
|---|
|  | 159 | . D UPDATE^DIE("","FDA(1)","LA7IEN","LA7DIE(1)") | 
|---|
|  | 160 | . S LA7696=LA7IEN(1) | 
|---|
|  | 161 | . I LA7696<1 D CREATE^LA7LOG(32) | 
|---|
|  | 162 | ; | 
|---|
|  | 163 | L -^LRO(69.6,0) | 
|---|
|  | 164 | I LA7696<1 Q | 
|---|
|  | 165 | ; | 
|---|
|  | 166 | L +^LRO(69.6,LA7696):99999 | 
|---|
|  | 167 | I '$T D  Q  ;cannot get lock on ENTRY in 69.6 | 
|---|
|  | 168 | . D CREATE^LA7LOG(33) | 
|---|
|  | 169 | ; | 
|---|
|  | 170 | ; Prevent duplication of tests | 
|---|
|  | 171 | I $D(^LRO(69.6,LA7696,2,"C",LA7OTSTN)) D UNLOCK Q | 
|---|
|  | 172 | ; | 
|---|
|  | 173 | ; Determine entry in INSTITUTION file (#4) that's the sending site. | 
|---|
|  | 174 | S LA7SSITE=$$FINDSITE^LA7VHLU2(LA7SFAC,2,0) | 
|---|
|  | 175 | ; | 
|---|
|  | 176 | ; Patient id to store with order | 
|---|
|  | 177 | S LA7PATID=LA7SSN | 
|---|
|  | 178 | I LA7PATID="" D | 
|---|
|  | 179 | . S LA7PATID=$P($G(LA7PTID3(1)),$E(LA7ECH)) | 
|---|
|  | 180 | . I LA7PATID'="" Q | 
|---|
|  | 181 | . I LA7PTID4'="" S LA7PATID=$P($P(LA7PTID4,$E(LA7ECH,2)),$E(LA7ECH)) | 
|---|
|  | 182 | . I LA7PATID'="" Q | 
|---|
|  | 183 | . I LA7PTID2'="" S LA7PATID=$P(LA7PTID2,$E(LA7ECH)) | 
|---|
|  | 184 | ; | 
|---|
|  | 185 | S FDA(2,69.6,LA7696_",",.01)=LA7PNM | 
|---|
|  | 186 | S FDA(2,69.6,LA7696_",",.02)=LA7SEX | 
|---|
|  | 187 | S FDA(2,69.6,LA7696_",",.03)=LA7DOB | 
|---|
|  | 188 | I $G(LA7PRACE)'="" S FDA(2,69.6,LA7696_",",.06)=LA7PRACE | 
|---|
|  | 189 | S FDA(2,69.6,LA7696_",",.09)=LA7PATID | 
|---|
|  | 190 | S FDA(2,69.6,LA7696_",",1)=LA7SSITE | 
|---|
|  | 191 | S FDA(2,69.6,LA7696_",",2)=LA7CSITE | 
|---|
|  | 192 | S FDA(2,69.6,LA7696_",",3)=LA7SID | 
|---|
|  | 193 | S FDA(2,69.6,LA7696_",",3.2)=LA7ACC | 
|---|
|  | 194 | I LA761 S FDA(2,69.6,LA7696_",",4)=LA761 | 
|---|
|  | 195 | I LA762 S FDA(2,69.6,LA7696_",",5)=LA762 | 
|---|
|  | 196 | S FDA(2,69.6,LA7696_",",10)=LA7ORDT | 
|---|
|  | 197 | S FDA(2,69.6,LA7696_",",11)=LA7CDT | 
|---|
|  | 198 | S FDA(2,69.6,LA7696_",",11.1)=LA7CEDT | 
|---|
|  | 199 | S FDA(2,69.6,LA7696_",",14)=LA7MEDT | 
|---|
|  | 200 | S FDA(2,69.6,LA7696_",",17)=LA7MID | 
|---|
|  | 201 | I $P(LA7SM,"^",2)'="" S LA7X=$P(LA7SM,"^",2) | 
|---|
|  | 202 | E  S LA7X=LA7SFAC_"-"_$E($$FMTHL7^XLFDT(LA7MEDT),1,8) | 
|---|
|  | 203 | S FDA(2,69.6,LA7696_",",18)=LA7X | 
|---|
|  | 204 | S FDA(2,69.6,LA7696_",",700)=LA7FS_LA7ECH | 
|---|
|  | 205 | I LA7PTID3'="" S FDA(2,69.6,LA7696_",",700.02)=LA7PTID3 | 
|---|
|  | 206 | I LA7PTID4'="" S FDA(2,69.6,LA7696_",",700.04)=LA7PTID4 | 
|---|
|  | 207 | D FILE^DIE("","FDA(2)","LA7DIE(2)") | 
|---|
|  | 208 | ; | 
|---|
|  | 209 | ; Add test to order | 
|---|
|  | 210 | S FDA(3,69.64,"+2,"_LA7696_",",.01)=LA7OTST | 
|---|
|  | 211 | S FDA(3,69.64,"+2,"_LA7696_",",1)=LA7OTSTN | 
|---|
|  | 212 | S FDA(3,69.64,"+2,"_LA7696_",",2)=RTST | 
|---|
|  | 213 | S FDA(3,69.64,"+2,"_LA7696_",",3)=RTSTN | 
|---|
|  | 214 | S FDA(3,69.64,"+2,"_LA7696_",",4)=LA7UR | 
|---|
|  | 215 | I LA760 S FDA(3,69.64,"+2,"_LA7696_",",11)=LA760 | 
|---|
|  | 216 | I LA76205 S FDA(3,69.64,"+2,"_LA7696_",",12)=LA76205 | 
|---|
|  | 217 | I $P(LA7POP,"^",3)'="" S FDA(3,69.64,"+2,"_LA7696_",",13)=$P(LA7POP,"^",3) | 
|---|
|  | 218 | I LA7USID'="" S FDA(3,69.64,"+2,"_LA7696_",",700.04)=LA7USID | 
|---|
|  | 219 | I LA7PF1'="" S FDA(3,69.64,"+2,"_LA7696_",",700.18)=LA7PF1 | 
|---|
|  | 220 | I LA7PF2'="" S FDA(3,69.64,"+2,"_LA7696_",",700.19)=LA7PF2 | 
|---|
|  | 221 | D UPDATE^DIE("","FDA(3)","LA76964","LA7DIE(3)") | 
|---|
|  | 222 | ; | 
|---|
|  | 223 | ; If no test status - set to In-transit. | 
|---|
|  | 224 | I $G(LA76964(2)),$P($G(^LRO(69.6,LA7696,2,LA76964(2),0)),"^",6)="" D | 
|---|
|  | 225 | . S FDA(4,69.64,LA76964(2)_","_LA7696_",",5)=LA7STAT | 
|---|
|  | 226 | . D FILE^DIE("","FDA(4)","LA7DIE(4)") | 
|---|
|  | 227 | ; | 
|---|
|  | 228 | ; Check for comments to store with order. | 
|---|
|  | 229 | ; Begin sections with <space> to avoid FM word wrap. | 
|---|
|  | 230 | S LA7I=1 | 
|---|
|  | 231 | I 'LA760 S LA7WP(LA7I,0)="For test "_LA7OTST | 
|---|
|  | 232 | E  S LA7WP(LA7I,0)="For test "_$$GET1^DIQ(60,LA760_",",.01) | 
|---|
|  | 233 | ; | 
|---|
|  | 234 | I LA7SAC'="" S LA7I=LA7I+1,LA7WP(LA7I,0)=" "_LA7SAC | 
|---|
|  | 235 | ; | 
|---|
|  | 236 | I LA7DCODE'="" F I=1:250:$L(LA7DCODE) S LA7I=LA7I+1,LA7WP(LA7I,0)=$S(I=1:" ",1:"")_$E(LA7DCODE,I,I+249) | 
|---|
|  | 237 | ; | 
|---|
|  | 238 | I LA7RCI'="" F I=1:250:$L(LA7RCI) S LA7I=LA7I+1,LA7WP(LA7I,0)=$S(I=1:" ",1:"")_$E(LA7RCI,I,I+249) | 
|---|
|  | 239 | ; | 
|---|
|  | 240 | I LA760,"MISPCYEM"[$P(^LAB(60,LA760,0),"^",4) D | 
|---|
|  | 241 | . S LA7I=LA7I+1,LA7WP(LA7I,0)=" Specimen source: "_LA7SPNM_" ["_LA7SPCS_": "_LA7SPTY_"]" | 
|---|
|  | 242 | . S LA7I=LA7I+1,LA7WP(LA7I,0)=" Collection sample: "_LA7CSNM_" ["_LA7CSCS_": "_LA7CSTY_"]" | 
|---|
|  | 243 | ; | 
|---|
|  | 244 | I $O(LA7WP(1)) D WP^DIE(69.6,LA7696_",",99,"A","LA7WP","LA7DIE(99)") | 
|---|
|  | 245 | ; | 
|---|
|  | 246 | D CLEAN^DILF | 
|---|
|  | 247 | D UNLOCK | 
|---|
|  | 248 | Q | 
|---|
|  | 249 | ; | 
|---|
|  | 250 | UNLOCK ; unlock entry in file #69.6 | 
|---|
|  | 251 | L -^LRO(69.6,LA7696) | 
|---|
|  | 252 | Q | 
|---|