| 1 | LA7VOBX ;DALOI/JMC - LAB OBX Segment message builder ; Feb 19, 2004 | 
|---|
| 2 | ;;5.2;AUTOMATED LAB INSTRUMENTS;**46,64**;Sep 27, 1994 | 
|---|
| 3 | ; | 
|---|
| 4 | OBX(LRDFN,LRSS,LRIDT,LRSB,LA7ARRAY,LA7OBXSN,LA7FS,LA7ECH,LA7NVAF) ; Observation/Result segment for Lab Results. | 
|---|
| 5 | ; Call with    LRDFN = ien of entry in file #63 | 
|---|
| 6 | ;               LRSS = file #63 subscript | 
|---|
| 7 | ;              LRIDT = inverse date/time of specimen | 
|---|
| 8 | ;               LRSB = ien of dataname if "CH" subscript or global subscript for others | 
|---|
| 9 | ;           LA7ARRAY = array to return OBX segment, pass by reference | 
|---|
| 10 | ;           LA7OBXSN = OBX segment sequence number, pass by reference | 
|---|
| 11 | ;              LA7FS = HL field separator | 
|---|
| 12 | ;             LA7ECH = HL encoding characters | 
|---|
| 13 | ;            LA7NVAF = flag indicating type of receiving facility (see NVAF^LA7VHLU2) | 
|---|
| 14 | ; | 
|---|
| 15 | ; Returns LA7OBXSN = current OBX segment sequence number | 
|---|
| 16 | ;         LA7ARRAY = array containing OBX segment | 
|---|
| 17 | ; | 
|---|
| 18 | N LA7OBX,LA7VAL,LA7X | 
|---|
| 19 | ; | 
|---|
| 20 | ; No subscript/patient/specimen | 
|---|
| 21 | I $G(LRSS)=""!('$G(LRDFN))!('$G(LRIDT)) Q | 
|---|
| 22 | ; | 
|---|
| 23 | S LA7NVAF=$G(LA7NVAF) | 
|---|
| 24 | ; | 
|---|
| 25 | ; "CH" subscript | 
|---|
| 26 | I LRSS="CH" D CH^LA7VOBX1 Q | 
|---|
| 27 | ; | 
|---|
| 28 | ; "MI" subscript | 
|---|
| 29 | I LRSS="MI" D MI^LA7VOBX3 Q | 
|---|
| 30 | ; | 
|---|
| 31 | ; "SP" subscrpt | 
|---|
| 32 | I LRSS="SP" D AP^LA7VOBX2 Q | 
|---|
| 33 | ; | 
|---|
| 34 | ; "CY" subscrpt | 
|---|
| 35 | I LRSS="CY" D AP^LA7VOBX2 Q | 
|---|
| 36 | ; | 
|---|
| 37 | ; "EM" subscrpt | 
|---|
| 38 | I LRSS="EM" D AP^LA7VOBX2 Q | 
|---|
| 39 | ; | 
|---|
| 40 | Q | 
|---|
| 41 | ; | 
|---|
| 42 | ; | 
|---|
| 43 | OBX1(LA7OBXSN) ; Build OBX-1 sequence - Set ID (sequence number) | 
|---|
| 44 | ; Call with LA7OBXSN = sequence number (pass by reference) | 
|---|
| 45 | ; | 
|---|
| 46 | N LA7Y | 
|---|
| 47 | ; | 
|---|
| 48 | ; increment sequence number | 
|---|
| 49 | S (LA7OBXSN,LA7Y)=$G(LA7OBXSN)+1 | 
|---|
| 50 | ; | 
|---|
| 51 | Q LA7Y | 
|---|
| 52 | ; | 
|---|
| 53 | ; | 
|---|
| 54 | OBX2(LA7FILE,LA7FIELD) ; Build OBX-2 sequence - Value type | 
|---|
| 55 | ; Call with   LA7FILE = FileMan DD file/subfield number | 
|---|
| 56 | ;            LA7FIELD = Fileman DD field number | 
|---|
| 57 | ; | 
|---|
| 58 | ; Returns      LA7VAL = value type  (HL7 table 0125) | 
|---|
| 59 | ; | 
|---|
| 60 | N LA7ERR,LA7TYP,LA7VAL | 
|---|
| 61 | ; | 
|---|
| 62 | D OBX2^LA7VOBXA | 
|---|
| 63 | ; | 
|---|
| 64 | Q LA7VAL | 
|---|
| 65 | ; | 
|---|
| 66 | ; | 
|---|
| 67 | OBX3(LA7NLT,LA7953,LA7ALT,LA7FS,LA7ECH) ; Build OBX-3 sequence - Observation identifier field | 
|---|
| 68 | ; Call with  LA7NLT = NLT code. | 
|---|
| 69 | ;            LA7953 = LOINC code | 
|---|
| 70 | ;            LA7ALT = alternate code - local/non-VA (code^text^system) | 
|---|
| 71 | ;             LA7FS = HL field separator | 
|---|
| 72 | ;            LA7ECH = HL encoding characters | 
|---|
| 73 | ; | 
|---|
| 74 | N LA764,LA7J,LA7LN,LA7X,LA7Y | 
|---|
| 75 | ; | 
|---|
| 76 | D OBX3^LA7VOBXA | 
|---|
| 77 | ; | 
|---|
| 78 | Q LA7Y | 
|---|
| 79 | ; | 
|---|
| 80 | ; | 
|---|
| 81 | OBX4(LA7VAL,LA7FS,LA7ECH) ; Build OBX-4 sequence - Observation sub-ID | 
|---|
| 82 | ; Call with  LA7VAL = value of the observation | 
|---|
| 83 | ;             LA7FS = HL field separator | 
|---|
| 84 | ;            LA7ECH = HL encoding characters | 
|---|
| 85 | ; | 
|---|
| 86 | ; Returns LA7Y = Observation sub-ID checked for escape encoding | 
|---|
| 87 | ; | 
|---|
| 88 | N LA7Y | 
|---|
| 89 | ; | 
|---|
| 90 | S LA7Y=$$CHKDATA^LA7VHLU3(LA7VAL,LA7FS_LA7ECH) | 
|---|
| 91 | ; | 
|---|
| 92 | Q LA7Y | 
|---|
| 93 | ; | 
|---|
| 94 | ; | 
|---|
| 95 | OBX5(LA7VAL,LA7OBX2,LA7FS,LA7ECH) ; Build OBX-5 sequence - Observation value | 
|---|
| 96 | ; Call with  LA7VAL = value of the observation | 
|---|
| 97 | ;           LA7OBX2 = value type | 
|---|
| 98 | ;             LA7FS = HL field separator | 
|---|
| 99 | ;            LA7ECH = HL encoding characters | 
|---|
| 100 | ; | 
|---|
| 101 | N LA7Y | 
|---|
| 102 | ; | 
|---|
| 103 | D OBX5^LA7VOBXA | 
|---|
| 104 | ; | 
|---|
| 105 | Q LA7Y | 
|---|
| 106 | ; | 
|---|
| 107 | ; | 
|---|
| 108 | OBX5M(LA7FN,LA7IENS,LA7FLD,LA7WP,LA7FS,LA7ECH) ; Build OBX-5 sequence - Observation value - multi-line textual result | 
|---|
| 109 | ; Call with LA7FN = File number or subfile | 
|---|
| 110 | ;         LA7IENS = Standard FileMan IENS indicating internal entry numbers | 
|---|
| 111 | ;          LA7FLD = Field number | 
|---|
| 112 | ;           LA7WP = array passed by reference to return text | 
|---|
| 113 | ;           LA7FS = HL field separator | 
|---|
| 114 | ;          LA7ECH = HL encoding characters | 
|---|
| 115 | ; | 
|---|
| 116 | ; Returns   LA7WP = subscripted array containing text of results | 
|---|
| 117 | ;                   LA7WP(0), LA7WP(1), LA7WP(2),... | 
|---|
| 118 | ; | 
|---|
| 119 | N LA7ERR,LA7I,LA7J,LA7TYPE,LA7X,LA7Y | 
|---|
| 120 | ; | 
|---|
| 121 | D OBX5M^LA7VOBXA | 
|---|
| 122 | ; | 
|---|
| 123 | Q | 
|---|
| 124 | ; | 
|---|
| 125 | ; | 
|---|
| 126 | OBX5R(LA7VAL,LA7OBX2,LA7FS,LA7ECH) ; Build OBX-5 sequence with repetition - Observation value | 
|---|
| 127 | ; Call with  LA7VAL = array passed by reference | 
|---|
| 128 | ;           LA7OBX2 = value type | 
|---|
| 129 | ;             LA7FS = HL field separator | 
|---|
| 130 | ;            LA7ECH = HL encoding characters | 
|---|
| 131 | ; | 
|---|
| 132 | N LA7I,LA7Y | 
|---|
| 133 | ; | 
|---|
| 134 | D OBX5R^LA7VOBXA | 
|---|
| 135 | ; | 
|---|
| 136 | Q LA7Y | 
|---|
| 137 | ; | 
|---|
| 138 | ; | 
|---|
| 139 | OBX6(LA7VAL,LA764061,LA7FS,LA7ECH) ; Build OBX-6 sequence - Units | 
|---|
| 140 | ; Call with   LA7VAL = Units if in external format | 
|---|
| 141 | ;           LA764061 = ien of units in #64.061 | 
|---|
| 142 | ;              LA7FS = HL field separator | 
|---|
| 143 | ;             LA7ECH = HL encoding characters | 
|---|
| 144 | ; Returns units | 
|---|
| 145 | ; | 
|---|
| 146 | N LA7Y | 
|---|
| 147 | ; | 
|---|
| 148 | D OBX6^LA7VOBXA | 
|---|
| 149 | ; | 
|---|
| 150 | Q LA7Y | 
|---|
| 151 | ; | 
|---|
| 152 | ; | 
|---|
| 153 | OBX7(LA7LOW,LA7HIGH,LA7FS,LA7ECH) ; Build OBX-7 sequence - Reference range | 
|---|
| 154 | ; Call with  LA7LOW = lower limit | 
|---|
| 155 | ;           LA7HIGH = upper limit | 
|---|
| 156 | ;             LA7FS = HL field separator | 
|---|
| 157 | ;            LA7ECH = HL encoding characters | 
|---|
| 158 | ; Returns reference range | 
|---|
| 159 | ; | 
|---|
| 160 | N LA7Y | 
|---|
| 161 | ; | 
|---|
| 162 | D OBX7^LA7VOBXA | 
|---|
| 163 | ; | 
|---|
| 164 | Q LA7Y | 
|---|
| 165 | ; | 
|---|
| 166 | ; | 
|---|
| 167 | OBX8(LA7FLAG) ; Build OBX-8 sequence - Abnormal flags | 
|---|
| 168 | ; Call with LA7FLAG = DHCP Lab normalcy flag | 
|---|
| 169 | ; Returns abnormal flags based on HL7 table 0078 | 
|---|
| 170 | ; | 
|---|
| 171 | N LA7Y | 
|---|
| 172 | ; | 
|---|
| 173 | S LA7Y=$TR(LA7FLAG,"*",$E(LA7FLAG,1)) ; abnormal flag | 
|---|
| 174 | Q LA7Y | 
|---|
| 175 | ; | 
|---|
| 176 | ; | 
|---|
| 177 | OBX11(LA7FLAG) ; Build OBX-11 sequence - Observation result status | 
|---|
| 178 | ; Call with LA7FLAG = DHCP Lab status flag | 
|---|
| 179 | ; Returns result status based on HL7 table 0085 | 
|---|
| 180 | ; | 
|---|
| 181 | N LA7Y | 
|---|
| 182 | ; | 
|---|
| 183 | S LA7Y="" | 
|---|
| 184 | ; | 
|---|
| 185 | I LA7FLAG="canc" S LA7Y="X" | 
|---|
| 186 | I LA7FLAG="comment" S LA7Y="F" | 
|---|
| 187 | I LA7FLAG="pending" S LA7Y="I" | 
|---|
| 188 | I LA7FLAG="F" S LA7Y="F" | 
|---|
| 189 | I LA7FLAG="P" S LA7Y="P" | 
|---|
| 190 | I LA7FLAG="A" S LA7Y="C" | 
|---|
| 191 | I LA7FLAG="C" S LA7Y="C" | 
|---|
| 192 | ; | 
|---|
| 193 | Q LA7Y | 
|---|
| 194 | ; | 
|---|
| 195 | ; | 
|---|
| 196 | OBX13(LA7VAL,LA7SRC,LA7FS,LA7ECH) ; Build OBX-13 sequence - User defined access checks | 
|---|
| 197 | ; Call with LA7VAL = access screen to expand | 
|---|
| 198 | ;           LA7SRC = source of access screen | 
|---|
| 199 | ;            LA7FS = HL field separator | 
|---|
| 200 | ;           LA7ECH = HL encoding characters | 
|---|
| 201 | ; | 
|---|
| 202 | ; Returns     LA7Y = access screen text | 
|---|
| 203 | ; | 
|---|
| 204 | N LA7Y | 
|---|
| 205 | S LA7Y="" | 
|---|
| 206 | ; | 
|---|
| 207 | ; Expanding antibiotic susceptibility display screen | 
|---|
| 208 | I LA7SRC="MIS" D | 
|---|
| 209 | . S LA7Y=$S(LA7VAL="A":"ALWAYS DISPLAY",LA7VAL="N":"NEVER DISPLAY",LA7VAL="R":"RESTRICT DISPLAY",1:"") | 
|---|
| 210 | ; | 
|---|
| 211 | S LA7Y=$$CHKDATA^LA7VHLU3(LA7Y,LA7FS_LA7ECH) | 
|---|
| 212 | ; | 
|---|
| 213 | Q LA7Y | 
|---|
| 214 | ; | 
|---|
| 215 | ; | 
|---|
| 216 | OBX14(LA7DT) ; Build OBX-14 sequence - date/time of observation | 
|---|
| 217 | ; Call with LA7DT = FileMan date/time | 
|---|
| 218 | ; Returns OBX-14 sequence | 
|---|
| 219 | ; | 
|---|
| 220 | S LA7DT=$$CHKDT^LA7VHLU1(LA7DT) | 
|---|
| 221 | Q $$FMTHL7^XLFDT(LA7DT) | 
|---|
| 222 | ; | 
|---|
| 223 | ; | 
|---|
| 224 | OBX15(LA74,LA7FS,LA7ECH) ; Build OBX-15 sequence - Producer's ID field | 
|---|
| 225 | ; Call with   LA74 = ien of institution in file #4 | 
|---|
| 226 | ;                    if null/undefined then use Kernel Site file. | 
|---|
| 227 | ;            LA7FS = HL field separator | 
|---|
| 228 | ;           LA7ECH = HL encoding characters | 
|---|
| 229 | ; | 
|---|
| 230 | ; Returns facility that performed the testing (ID^text^99VA4) | 
|---|
| 231 | ; | 
|---|
| 232 | Q $$INST^LA7VHLU4(LA74,LA7FS,LA7ECH) | 
|---|
| 233 | ; | 
|---|
| 234 | ; | 
|---|
| 235 | OBX16(LA7DUZ,LA7DIV,LA7FS,LA7ECH) ; Build OBX-16 sequence - Responsible observer field | 
|---|
| 236 | ; Call with   LA7DUZ = DUZ of verifying user | 
|---|
| 237 | ;             LA7DIV = Institution of user | 
|---|
| 238 | ;              LA7FS = HL field separator | 
|---|
| 239 | ;             LA7ECH = HL encoding characters | 
|---|
| 240 | ; | 
|---|
| 241 | ; Returns OBX-16 sequence | 
|---|
| 242 | ; | 
|---|
| 243 | Q $$XCN^LA7VHLU4(LA7DUZ,LA7DIV,LA7FS,LA7ECH) | 
|---|
| 244 | ; | 
|---|
| 245 | ; | 
|---|
| 246 | OBX17(LA7VAL,LA7FS,LA7ECH) ; Build OBX-17 sequence - Observation method field | 
|---|
| 247 | ; Call with   LA7VAL = WKLD SUFFIX CODES #64.2 with leading decimal | 
|---|
| 248 | ;              LA7FS = HL field separator | 
|---|
| 249 | ;             LA7ECH = HL encoding characters | 
|---|
| 250 | ; | 
|---|
| 251 | ; Returns       LA7Y = OBX-17 sequence | 
|---|
| 252 | ; | 
|---|
| 253 | N LA7X,LA7Y | 
|---|
| 254 | ; | 
|---|
| 255 | ; method suffix code maybe stored without leading decimal, | 
|---|
| 256 | ;  add "." back for lookup, also add trailing space for lookup in x-ref. | 
|---|
| 257 | I LA7VAL>1 S LA7VAL="."_LA7VAL | 
|---|
| 258 | S LA7X=$O(^LAB(64.2,"C",LA7VAL_" ",0)),LA7Y="" | 
|---|
| 259 | I LA7X D | 
|---|
| 260 | . S LA7X(.01)=$$GET1^DIQ(64.2,LA7X_",",.01) | 
|---|
| 261 | . S LA7X(.01)=$$CHKDATA^LA7VHLU3(LA7X(.01),LA7FS_LA7ECH) | 
|---|
| 262 | . S LA7Y=LA7VAL_$E(LA7ECH)_LA7X(.01)_$E(LA7ECH)_"99VA64_2" | 
|---|
| 263 | ; | 
|---|
| 264 | Q LA7Y | 
|---|
| 265 | ; | 
|---|
| 266 | ; | 
|---|
| 267 | OBX18(LA7VAL,LA7FS,LA7ECH) ; Build OBX-18 sequence - Equipment entity identifier field | 
|---|
| 268 | ; Call with   LA7VAL = Equipment entity identifier | 
|---|
| 269 | ;              LA7FS = HL field separator | 
|---|
| 270 | ;             LA7ECH = HL encoding characters | 
|---|
| 271 | ; | 
|---|
| 272 | ; Returns       LA7X = OBX-18 sequence | 
|---|
| 273 | ; | 
|---|
| 274 | N LA7I,LA7J,LA7X,LA7Y | 
|---|
| 275 | ; | 
|---|
| 276 | S LA7X="",LA7J=$L(LA7VAL,"!") | 
|---|
| 277 | F LA7I=1:1:LA7J D | 
|---|
| 278 | . S LA7Y=$P(LA7VAL,"!",LA7I) | 
|---|
| 279 | . I LA7Y="" Q | 
|---|
| 280 | . S $P(LA7X,$E(LA7ECH,1),LA7I)=$$CHKDATA^LA7VHLU3(LA7Y,LA7FS_LA7ECH) | 
|---|
| 281 | ; | 
|---|
| 282 | Q LA7X | 
|---|