| [613] | 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;; | 
|---|