| 1 | LA7UIIN2 ;DALOI/JRR - Process Incoming UI Msgs, continued ; 12/3/1997
 | 
|---|
| 2 |  ;;5.2;AUTOMATED LAB INSTRUMENTS;**17,23,27,46**;Sep 27, 1994
 | 
|---|
| 3 |  ;This routine is a continuation of LA7UIIN1 and is only called from there.
 | 
|---|
| 4 |  ;It is called to begin processing the NTE & OBX segments.
 | 
|---|
| 5 |  QUIT
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 | NTE ; Process NTE segments that follow the OBR and OBX segments
 | 
|---|
| 8 |  ; These NTE segments contain comments from instruments or other facilities.
 | 
|---|
| 9 |  ; NTE segments following OBR's contain comments which refer to the entire test battery.
 | 
|---|
| 10 |  ; NTE segments following OBX's contain comments which are test specific.
 | 
|---|
| 11 |  ; Test specific comments can be prefaced with a site defined prefix -
 | 
|---|
| 12 |  ;   see field REMARK PREFIX (#19) in CHEM TEST multiple of AUTOMATED INSTRUMENT (#62.4 file.
 | 
|---|
| 13 |  ; NTE segments are not allowed anywhere except after the OBR or OBX segments.
 | 
|---|
| 14 |  ; There can be more than one NTE, each will be stored as a comment in ^LAH.
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  F LA762495=LA762495:0 S LA762495=$O(^LAHM(62.49,LA76249,150,LA762495)) Q:'LA762495  S LA7NTE=$G(^(LA762495,0)) Q:$E(LA7NTE,1,3)'="NTE"  D
 | 
|---|
| 17 |  . N LA7,LA7I
 | 
|---|
| 18 |  . S LA7RMK=$P(LA7NTE,LA7FS,4)
 | 
|---|
| 19 |  . S LA7=$RE(LA7RMK)
 | 
|---|
| 20 |  . F LA7I=1:1:$L(LA7)  Q:$E(LA7,LA7I)'=" "  ; Find start of trailing spaces.
 | 
|---|
| 21 |  . S LA7RMK=$E(LA7RMK,1,($L(LA7RMK)-LA7I+1)) ; Truncate trailing spaces.
 | 
|---|
| 22 |  . I LA7RMK=$TR($P($G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,3)),"^",6),"~") Q  ; Don't store remark if same as specimen comment (without "~").
 | 
|---|
| 23 |  . I LA7RMK=$G(^LR(+$G(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,0)),.091)) Q  ; or patient info (#.091 in file 63) - info previously downloaded
 | 
|---|
| 24 |  . I LA7RMK="" Q  ; No remark to store.
 | 
|---|
| 25 |  . I $O(LA7RMK(0,0)) D  Q  ; If test specific, store test name with comments (see below)
 | 
|---|
| 26 |  . . N LA7I
 | 
|---|
| 27 |  . . S LA7I=0
 | 
|---|
| 28 |  . . F  S LA7I=$O(LA7RMK(0,LA7I)) Q:'LA7I  I $P(LA7RMK(0,LA7I),"^") D RMKSET^LASET(LA7LWL,LA7ISQN,LA7RMK,$P(LA7RMK(0,LA7I),"^",2))
 | 
|---|
| 29 |  . I $P(LA7INST,"^",17) D RMKSET^LASET(LA7LWL,LA7ISQN,LA7RMK,"") ;store comment in 1 node of ^LAH global
 | 
|---|
| 30 |  K LA7RMK
 | 
|---|
| 31 |  Q:LA762495=""  ;no more segments to process
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 | OBX F LA762495=LA762495-1:0 S LA762495=$O(^LAHM(62.49,LA76249,150,LA762495)) Q:'LA762495  K LA7OBX S LA7OBX=^(LA762495,0) Q:$E(LA7OBX,1,3)'="OBX"  D
 | 
|---|
| 34 |  . K LA7RMK
 | 
|---|
| 35 |  . S LA7TEST=$P($P(LA7OBX,LA7FS,4),LA7CS,1)
 | 
|---|
| 36 |  . I LA7TEST="" D  QUIT
 | 
|---|
| 37 |  . . D CREATE^LA7LOG(15)
 | 
|---|
| 38 |  . I '$D(^LAB(62.4,LA7624,3,"AC",LA7TEST)) D  QUIT  ;test code not found in auto inst file
 | 
|---|
| 39 |  . . D CREATE^LA7LOG(16)
 | 
|---|
| 40 |  . S LA76241=0 ; Process results for all tests which use this test code.
 | 
|---|
| 41 |  . F  S LA76241=$O(^LAB(62.4,LA7624,3,"AC",LA7TEST,LA76241)) Q:'LA76241  D
 | 
|---|
| 42 |  . . S LA7VAL=$P(LA7OBX,LA7FS,6)
 | 
|---|
| 43 |  . . F LA7I=0,1,2 S LA76241(LA7I)=$G(^LAB(62.4,LA7624,3,LA76241,LA7I))
 | 
|---|
| 44 |  . . I (LA76241(0)="")!(LA76241(1)="") D  QUIT  ;chem test fields incorrect
 | 
|---|
| 45 |  . . . D CREATE^LA7LOG(18)
 | 
|---|
| 46 |  . . ; Setup LA7RMK(0) variable in case comments (NTE) sent with test results.
 | 
|---|
| 47 |  . . S LA7RMK(0,+LA76241(0))=+$P(LA76241(2),"^",7)_"^"_$P(LA76241(2),"^",8)
 | 
|---|
| 48 |  . . K LA7XFORM ;this array can be set from inside PARAM 1
 | 
|---|
| 49 |  . . X $P(LA76241(0),"^",2) ;execute PARAM 1
 | 
|---|
| 50 |  . . I LA7VAL="" D  QUIT  ;no value
 | 
|---|
| 51 |  . . . D CREATE^LA7LOG(17)
 | 
|---|
| 52 |  . . D XFORM ;transform result based on fields in file 62.4
 | 
|---|
| 53 |  . . Q:LA7VAL=""
 | 
|---|
| 54 |  . . I $G(LA7LIMIT)=1 D  ;flag to not store if wasn't explicitly ordered
 | 
|---|
| 55 |  . . . K LA7LIMIT,LA7TREEN,^TMP("LA7TREE",$J)
 | 
|---|
| 56 |  . . . F LA76804=0:0 S LA76804=$O(^LRO(68,LA7AA,1,LA7AD,1,LA7AN,4,LA76804)) Q:'LA76804  D UNWIND^LA7UTIL(LA76804) ;store all tests accessioned in ^TMP
 | 
|---|
| 57 |  . . . I '$D(^TMP("LA7TREE",$J,+LA76241(0))) S LA7LIMIT=1 ;wasn't ordered
 | 
|---|
| 58 |  . . I $G(LA7LIMIT) D  QUIT  ;don't store
 | 
|---|
| 59 |  . . . S $P(LA7RMK(0,+LA76241(0)),"^",1)=0 ; Set flag to not store comments if any.
 | 
|---|
| 60 |  . . . K LA7LIMIT,^TMP("LA7TREE",$J)
 | 
|---|
| 61 |  . . K ^TMP("LA7TREE",$J)
 | 
|---|
| 62 |  . . S LA76304=+$P(LA76241(1),"(",2) ;lab data field
 | 
|---|
| 63 |  . . I LA76304'>1 D  Q  ; No dataname for this result
 | 
|---|
| 64 |  . . . D CREATE^LA7LOG(18)
 | 
|---|
| 65 |  . . S ^LAH(LA7LWL,1,LA7ISQN,LA76304)=LA7VAL ;set data node=test value
 | 
|---|
| 66 |  . . D REFRNG($P(LA7OBX,LA7FS,8)) ; Store reference ranges
 | 
|---|
| 67 |  . . D ABFLAG($P(LA7OBX,LA7FS,9)) ; Store abnormal flags
 | 
|---|
| 68 |  . . D PRDID($P(LA7OBX,LA7FS,16),LA7CS) ; Store where test was performed.
 | 
|---|
| 69 |  I $E(LA7OBX,1,3)="NTE" S LA762495=LA762495-1 G NTE
 | 
|---|
| 70 |  K LA7RMK
 | 
|---|
| 71 |  Q
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 | XFORM ; Transform the result based on fields 12,13,14,16,17 in the Chem Test
 | 
|---|
| 74 |  ; multiple in the Auto Instrument file (62.4), or set on the fly
 | 
|---|
| 75 |  ; from PARAM 1
 | 
|---|
| 76 |  N LA7I
 | 
|---|
| 77 |  S LA7XFORM=LA76241(2)
 | 
|---|
| 78 |  ; get PARAM 1 overides
 | 
|---|
| 79 |  I $D(LA7XFORM(1)),LA7XFORM(1)?1.N S $P(LA7XFORM,"^")=LA7XFORM(1)
 | 
|---|
| 80 |  F LA7I=2,3,5,6 I $D(LA7XFORM(LA7I)) S $P(LA7XFORM,"^",LA7I)=LA7XFORM(LA7I)
 | 
|---|
| 81 |  ; set up defaults if field was not answered
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 |  ; accept results,yes
 | 
|---|
| 84 |  I $P(LA7XFORM,"^",3)="" S $P(LA7XFORM,"^",3)=1
 | 
|---|
| 85 |  ; strip spaces,yes
 | 
|---|
| 86 |  I $P(LA7XFORM,"^",6)="" S $P(LA7XFORM,"^",6)=1
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  ; now transform
 | 
|---|
| 89 |  ; don't accept results
 | 
|---|
| 90 |  I '$P(LA7XFORM,"^",3) S LA7VAL="" Q
 | 
|---|
| 91 |  ; accept ordered tests only
 | 
|---|
| 92 |  I $P(LA7XFORM,"^",5) S LA7LIMIT=1
 | 
|---|
| 93 |  ; decimal places if result start with number or decimal point
 | 
|---|
| 94 |  ; skip results i.e. ">100".
 | 
|---|
| 95 |  I $P(LA7XFORM,"^")?1.N,LA7VAL?1(1N.E,1".".E) D
 | 
|---|
| 96 |  . S LA7VAL=$FN(LA7VAL,"",+LA7XFORM)
 | 
|---|
| 97 |  ; strip spaces
 | 
|---|
| 98 |  I $P(LA7XFORM,"^",6) S LA7VAL=$TR(LA7VAL," ","")
 | 
|---|
| 99 |  ; make result a comment, store comment in ^LAH global
 | 
|---|
| 100 |  ; set value to null after making into remark, don't store twice.
 | 
|---|
| 101 |  I $P(LA7XFORM,"^",2) D
 | 
|---|
| 102 |  . D RMKSET^LASET(LA7LWL,LA7ISQN,LA7VAL,"")
 | 
|---|
| 103 |  . S LA7VAL=""
 | 
|---|
| 104 |  Q
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 | PRDID(LA7PRDID,LA7CS) ; Process/Store Producer's ID
 | 
|---|
| 108 |  ; Store where test was performed.
 | 
|---|
| 109 |  ; Call with LA7PRDID = Producer's ID field
 | 
|---|
| 110 |  ;              LA7CS = component encoding character
 | 
|---|
| 111 |  N LA7X,LA7Y
 | 
|---|
| 112 |  S LA7PRDID=$G(LA7PRDID),LA7CS=$G(LA7CS)
 | 
|---|
| 113 |  ; Don't store producer's id.
 | 
|---|
| 114 |  I LA7PRDID=""!('$P(LA76241(2),"^",9))!(LA7CS="") Q
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  S LA7X=$P(LA7PRDID,LA7CS,2)
 | 
|---|
| 117 |  I $L($P(LA7PRDID,LA7CS)) S LA7X=LA7X_$S($L(LA7X):" ",1:"")_"["_$P(LA7PRDID,LA7CS)_"]"
 | 
|---|
| 118 |  I LA7X="" Q
 | 
|---|
| 119 |  S LA7X="results from "_LA7X
 | 
|---|
| 120 |  S LA7Y=$P(LA7RMK(0,+LA76241(0)),"^",2)
 | 
|---|
| 121 |  ; If no prefix, use test name.
 | 
|---|
| 122 |  I '$L(LA7Y) S LA7Y=$P($G(^LAB(60,+LA76241(0),0)),"^")_": "
 | 
|---|
| 123 |  D RMKSET^LASET(LA7LWL,LA7ISQN,LA7X,LA7Y)
 | 
|---|
| 124 |  Q
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 | REFRNG(LA7X) ; Process/Store References Range.
 | 
|---|
| 128 |  ; Call with LA7X = reference range to store.
 | 
|---|
| 129 |  N LA7Y
 | 
|---|
| 130 |  S LA7X=$G(LA7X)
 | 
|---|
| 131 |  ; No ref range or don't store ref range.
 | 
|---|
| 132 |  I LA7X=""!('$P(LA76241(2),"^",10)) Q
 | 
|---|
| 133 |  S LA7X="ref range - "_LA7X
 | 
|---|
| 134 |  S LA7Y=$P(LA7RMK(0,+LA76241(0)),"^",2)
 | 
|---|
| 135 |  ; If no prefix, use test name.
 | 
|---|
| 136 |  I '$L(LA7Y) S LA7Y=$P($G(^LAB(60,+LA76241(0),0)),"^")_": "
 | 
|---|
| 137 |  D RMKSET^LASET(LA7LWL,LA7ISQN,LA7X,LA7Y)
 | 
|---|
| 138 |  Q
 | 
|---|
| 139 |  ;
 | 
|---|
| 140 |  ;
 | 
|---|
| 141 | ABFLAG(LA7X) ; Process/Store Abnormal Flags.
 | 
|---|
| 142 |  ; Call with LA7X = abnormal flags to store.
 | 
|---|
| 143 |  ; Converts flag to interpretation based on HL7 Table 0078.
 | 
|---|
| 144 |  ; If no match store code instead of interpretation
 | 
|---|
| 145 |  ;
 | 
|---|
| 146 |  N I,LA7Y,LA7Z
 | 
|---|
| 147 |  ;
 | 
|---|
| 148 |  S LA7X=$G(LA7X)
 | 
|---|
| 149 |  ; No flag or don't store abnormal flags.
 | 
|---|
| 150 |  I LA7X=""!('$P(LA76241(2),"^",11)) Q
 | 
|---|
| 151 |  F I=1:1:18 I LA7X=$P("L^H^LL^HH^<^>^N^A^AA^U^D^B^W^S^R^I^MS^VS","^",I) S LA7X=$P($T(ABFLAGS+I),";;",2) Q
 | 
|---|
| 152 |  S LA7X="normalcy status - "_LA7X
 | 
|---|
| 153 |  S LA7Y=$P(LA7RMK(0,+LA76241(0)),"^",2)
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 |  ; If no prefix, use test name.
 | 
|---|
| 156 |  I '$L(LA7Y) S LA7Y=$P($G(^LAB(60,+LA76241(0),0)),"^")_": "
 | 
|---|
| 157 |  ;
 | 
|---|
| 158 |  D RMKSET^LASET(LA7LWL,LA7ISQN,LA7X,LA7Y)
 | 
|---|
| 159 |  Q
 | 
|---|
| 160 |  ;
 | 
|---|
| 161 | ABFLAGS ;; HL7 Table 0078 Abnormal flags
 | 
|---|
| 162 |  ;;Below low normal;;
 | 
|---|
| 163 |  ;;Above high normal;;
 | 
|---|
| 164 |  ;;Below lower panic limits;;
 | 
|---|
| 165 |  ;;Above upper panic limits;;
 | 
|---|
| 166 |  ;;Below absolute low-off instrument scale;;
 | 
|---|
| 167 |  ;;Above absolute high-off instrument scale;;
 | 
|---|
| 168 |  ;;Normal;;
 | 
|---|
| 169 |  ;;Abnormal;;
 | 
|---|
| 170 |  ;;Very abnormal;;
 | 
|---|
| 171 |  ;;Significant change up;;
 | 
|---|
| 172 |  ;;Significant change down;;
 | 
|---|
| 173 |  ;;Better;;
 | 
|---|
| 174 |  ;;Worse;;
 | 
|---|
| 175 |  ;;Susceptible;;
 | 
|---|
| 176 |  ;;Resistant;;
 | 
|---|
| 177 |  ;;Intermediate;;
 | 
|---|
| 178 |  ;;Moderately susceptible;;
 | 
|---|
| 179 |  ;;Very susceptible;;
 | 
|---|