| [613] | 1 | LA7VOBXA ;DALOI/JMC - LAB OBX Segment message builder (cont'd) ; 5 June 2003
 | 
|---|
 | 2 |  ;;5.2;AUTOMATED LAB INSTRUMENTS;**46,70,64**;Sep 27, 1994
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 |  Q
 | 
|---|
 | 5 |  ;
 | 
|---|
 | 6 | OBX2 ; Build OBX-2 sequence - Value type
 | 
|---|
 | 7 |  ;
 | 
|---|
 | 8 |  ; default value - string data
 | 
|---|
 | 9 |  S LA7VAL="ST"
 | 
|---|
 | 10 |  S LA7TYP="",LA7FILE=$G(LA7FILE),LA7FIELD=$G(LA7FIELD)
 | 
|---|
 | 11 |  ;
 | 
|---|
 | 12 |  I LA7FILE,LA7FIELD S LA7TYP=$$GET1^DID(LA7FILE,LA7FIELD,"","TYPE","","LA7ERR")
 | 
|---|
 | 13 |  ;
 | 
|---|
 | 14 |  I LA7TYP="DATE/TIME" S LA7VAL="TS"
 | 
|---|
 | 15 |  I LA7TYP="FREE TEXT" S LA7VAL="ST"
 | 
|---|
 | 16 |  I LA7TYP="WORD-PROCESSING" S LA7VAL="FT"
 | 
|---|
 | 17 |  I LA7TYP="NUMERIC" S LA7VAL="NM"
 | 
|---|
 | 18 |  I LA7TYP="SET" S LA7VAL="ST"
 | 
|---|
 | 19 |  I LA7TYP="POINTER" S LA7VAL="CE"
 | 
|---|
 | 20 |  ;
 | 
|---|
 | 21 |  Q
 | 
|---|
 | 22 |  ;
 | 
|---|
 | 23 |  ;
 | 
|---|
 | 24 | OBX3 ; Build OBX-3 sequence - Observation identifier field
 | 
|---|
 | 25 |  ;
 | 
|---|
 | 26 |  ; Initialize variables 
 | 
|---|
 | 27 |  S LA7J=1,LA7Y=""
 | 
|---|
 | 28 |  ;
 | 
|---|
 | 29 |  ; Build sequence using LOINC codes only
 | 
|---|
 | 30 |  ; LOINC code/code name/"LN"
 | 
|---|
 | 31 |  I LA7953'="" D
 | 
|---|
 | 32 |  . N LA7IENS,LA7Z
 | 
|---|
 | 33 |  . S LA7953=$P(LA7953,"-"),LA7IENS=LA7953_","
 | 
|---|
 | 34 |  . D GETS^DIQ(95.3,LA7IENS,".01;80","E","LA7X")
 | 
|---|
 | 35 |  . ; Invalid code???
 | 
|---|
 | 36 |  . I $G(LA7X(95.3,LA7IENS,.01,"E"))="" Q
 | 
|---|
 | 37 |  . S LA7Z=LA7X(95.3,LA7IENS,.01,"E")
 | 
|---|
 | 38 |  . S LA7Z=$$CHKDATA^LA7VHLU3(LA7Z,LA7FS_LA7ECH)
 | 
|---|
 | 39 |  . S $P(LA7Y,$E(LA7ECH,1),LA7J)=LA7Z
 | 
|---|
 | 40 |  . S LA7Z=$G(LA7X(95.3,LA7IENS,80,"E")),LA7Z=$TR(LA7Z,"~","^")
 | 
|---|
 | 41 |  . S LA7Z=$$CHKDATA^LA7VHLU3(LA7Z,LA7FS_LA7ECH)
 | 
|---|
 | 42 |  . S $P(LA7Y,$E(LA7ECH,1),LA7J+1)=LA7Z
 | 
|---|
 | 43 |  . S $P(LA7Y,$E(LA7ECH,1),LA7J+2)="LN"
 | 
|---|
 | 44 |  . S LA7J=4
 | 
|---|
 | 45 |  ;
 | 
|---|
 | 46 |  ; Build sequence using NLT codes
 | 
|---|
 | 47 |  ; File #64 NLT code/NLT code name/"99VA64"
 | 
|---|
 | 48 |  ; If LOINC is primary make NLT alternate, otherwise NLT primary.
 | 
|---|
 | 49 |  I LA7NLT'="" D
 | 
|---|
 | 50 |  . N LA7642,LA7Z
 | 
|---|
 | 51 |  . S LA764=$O(^LAM("E",LA7NLT,0)),LA7Z=""
 | 
|---|
 | 52 |  . S $P(LA7Y,$E(LA7ECH,1),LA7J)=LA7NLT
 | 
|---|
 | 53 |  . I LA764 S LA7Z=$$GET1^DIQ(64,LA764_",",.01,"I")
 | 
|---|
 | 54 |  . I LA7Z="" D
 | 
|---|
 | 55 |  . . S LA764=$O(^LAM("E",$P(LA7NLT,".")_".0000",0))
 | 
|---|
 | 56 |  . . I LA764 S LA7Z=$$GET1^DIQ(64,LA764_",",.01,"I")
 | 
|---|
 | 57 |  . . S LA7642=$O(^LAB(64.2,"C","."_$P(LA7NLT,".",2),0))
 | 
|---|
 | 58 |  . . I LA764,LA7642 S LA7Z=LA7Z_"~"_$$GET1^DIQ(64.2,LA7642_",",.01,"I")
 | 
|---|
 | 59 |  . S LA7Z=$$CHKDATA^LA7VHLU3(LA7Z,LA7FS_LA7ECH)
 | 
|---|
 | 60 |  . S $P(LA7Y,$E(LA7ECH,1),LA7J+1)=LA7Z
 | 
|---|
 | 61 |  . S $P(LA7Y,$E(LA7ECH,1),LA7J+2)="99VA64"
 | 
|---|
 | 62 |  . S LA7J=LA7J+3
 | 
|---|
 | 63 |  ;
 | 
|---|
 | 64 |  ; Non-standard/non-VA code
 | 
|---|
 | 65 |  ; Don't use alternate code when it's "99VA63" and we've already encoded
 | 
|---|
 | 66 |  ; a primary and alternate. If alternate is a non-VA code then use as
 | 
|---|
 | 67 |  ; alternate code.
 | 
|---|
 | 68 |  ; If primary and alternate are not 99VA63 then code 3rd triplet with
 | 
|---|
 | 69 |  ; 99VA63 per Julius Chou for Clinical Case Registry (JMC/May 13, 2004)
 | 
|---|
 | 70 |  I LA7ALT="" Q
 | 
|---|
 | 71 |  I $P(LA7ALT,"^",3)'="99VA63",LA7J>4 S LA7J=4
 | 
|---|
 | 72 |  I $P(LA7ALT,"^",3)="99VA63" D  Q:LA7J=0
 | 
|---|
 | 73 |  . I $P(LA7Y,$E(LA7ECH,1),3)="99VA63" S LA7J=0 Q
 | 
|---|
 | 74 |  . I LA7J>4,$P(LA7Y,$E(LA7ECH,1),6)="99VA63" S LA7J=0 Q
 | 
|---|
 | 75 |  . I LA7J>4 S LA7J=7
 | 
|---|
 | 76 |  S $P(LA7Y,$E(LA7ECH,1),LA7J)=$$CHKDATA^LA7VHLU3($P(LA7ALT,"^"),LA7FS_LA7ECH)
 | 
|---|
 | 77 |  S $P(LA7Y,$E(LA7ECH,1),LA7J+1)=$$CHKDATA^LA7VHLU3($P(LA7ALT,"^",2),LA7FS_LA7ECH)
 | 
|---|
 | 78 |  S $P(LA7Y,$E(LA7ECH,1),LA7J+2)=$$CHKDATA^LA7VHLU3($P(LA7ALT,"^",3),LA7FS_LA7ECH)
 | 
|---|
 | 79 |  ;
 | 
|---|
 | 80 |  Q
 | 
|---|
 | 81 |  ;
 | 
|---|
 | 82 |  ;
 | 
|---|
 | 83 | OBX5 ; Build OBX-5 sequence - Observation value
 | 
|---|
 | 84 |  ; Removes trailing spaces on string and text results.
 | 
|---|
 | 85 |  ; Removes leading & trailing spaces on numeric results.
 | 
|---|
 | 86 |  ;
 | 
|---|
 | 87 |  S LA7Y=""
 | 
|---|
 | 88 |  ;
 | 
|---|
 | 89 |  I $G(LA7OBX2)="" S LA7OBX2="ST" ; default value type
 | 
|---|
 | 90 |  I LA7OBX2="ST"!(LA7OBX2="TX") D
 | 
|---|
 | 91 |  . S LA7VAL=$$TRIM^XLFSTR(LA7VAL,"R"," ")
 | 
|---|
 | 92 |  . S LA7Y=$$CHKDATA^LA7VHLU3(LA7VAL,LA7FS_LA7ECH)
 | 
|---|
 | 93 |  I LA7OBX2="NM" S LA7Y=$$TRIM^XLFSTR(LA7VAL,"RL"," ")
 | 
|---|
 | 94 |  I LA7OBX2="TS" D
 | 
|---|
 | 95 |  . S LA7VAL=$$CHKDT^LA7VHLU1(LA7VAL)
 | 
|---|
 | 96 |  . S LA7Y=$$FMTHL7^XLFDT(LA7VAL)
 | 
|---|
 | 97 |  I LA7OBX2="CE" D
 | 
|---|
 | 98 |  . N I,X
 | 
|---|
 | 99 |  . F I=1:1:6 D
 | 
|---|
 | 100 |  . . I '$L($P(LA7VAL,"^",I)) Q
 | 
|---|
 | 101 |  . . S X=$$CHKDATA^LA7VHLU3($P(LA7VAL,"^",I),LA7FS_LA7ECH)
 | 
|---|
 | 102 |  . . S $P(LA7Y,$E(LA7ECH),I)=X
 | 
|---|
 | 103 |  ;
 | 
|---|
 | 104 |  Q
 | 
|---|
 | 105 |  ;
 | 
|---|
 | 106 |  ;
 | 
|---|
 | 107 | OBX5M ; Build OBX-5 sequence - Observation value - multi-line textual result
 | 
|---|
 | 108 |  ;
 | 
|---|
 | 109 |  K LA7WP
 | 
|---|
 | 110 |  ;
 | 
|---|
 | 111 |  S LA7WP=""
 | 
|---|
 | 112 |  S LA7TYPE=$$GET1^DID(LA7FN,LA7FLD,"","TYPE","LA7ERR(1)")
 | 
|---|
 | 113 |  ;
 | 
|---|
 | 114 |  ; Process word-processing type field.
 | 
|---|
 | 115 |  ; Check and encode data
 | 
|---|
 | 116 |  I LA7TYPE="WORD-PROCESSING" D  Q
 | 
|---|
 | 117 |  . N DIWF,DIWL,DIWR,X
 | 
|---|
 | 118 |  . S LA7WP=$$GET1^DIQ(LA7FN,LA7IENS,LA7FLD,"","LA7WP","LA7ERR(2)")
 | 
|---|
 | 119 |  . K ^UTILITY($J,"W")
 | 
|---|
 | 120 |  . S DIWL=1,DIWR=245,DIWF="",LA7I=0
 | 
|---|
 | 121 |  . I $$GET1^DID(+$$GET1^DID(LA7FN,LA7FLD,"","SPECIFIER","LA7ERR(1)"),.01,"","SPECIFIER","LA7ERR(3)")["L" S DIWF="N"
 | 
|---|
 | 122 |  . F  S LA7I=$O(LA7WP(LA7I)) Q:'LA7I  S X=LA7WP(LA7I) D ^DIWP
 | 
|---|
 | 123 |  . K LA7WP
 | 
|---|
 | 124 |  . S LA7I=0
 | 
|---|
 | 125 |  . F  S LA7I=$O(^UTILITY($J,"W",DIWL,LA7I)) Q:'LA7I  D
 | 
|---|
 | 126 |  . . S LA7WP(LA7I)=$$CHKDATA^LA7VHLU3(^UTILITY($J,"W",DIWL,LA7I,0),LA7FS_LA7ECH)
 | 
|---|
 | 127 |  . . I LA7I>1 S LA7WP(LA7I)=$E(LA7ECH,3)_".br"_$E(LA7ECH,3)_LA7WP(LA7I)
 | 
|---|
 | 128 |  . K ^UTILITY($J,"W")
 | 
|---|
 | 129 |  ;
 | 
|---|
 | 130 |  ; Free text, assumes multiple valued
 | 
|---|
 | 131 |  I LA7TYPE="FREE TEXT" D
 | 
|---|
 | 132 |  . D GETS^DIQ(LA7FN,LA7IENS,LA7FLD_"*","","LA7WP","LA7ERR")
 | 
|---|
 | 133 |  ;
 | 
|---|
 | 134 |  Q
 | 
|---|
 | 135 |  ;
 | 
|---|
 | 136 |  ;
 | 
|---|
 | 137 | OBX5R ; Build OBX-5 sequence with repetition - Observation value
 | 
|---|
 | 138 |  ;
 | 
|---|
 | 139 |  S (LA7I,LA7Y)=""
 | 
|---|
 | 140 |  F  S LA7I=$O(LA7VAL(LA7I)) Q:'LA7I  D
 | 
|---|
 | 141 |  . S LA7Y=LA7Y_$$OBX5^LA7VOBX(LA7VAL(LA7I),LA7OBX2,LA7FS,LA7ECH)_$E(LA7ECH,2)
 | 
|---|
 | 142 |  ;
 | 
|---|
 | 143 |  Q
 | 
|---|
 | 144 |  ;
 | 
|---|
 | 145 |  ;
 | 
|---|
 | 146 | OBX6 ; Build OBX-6 sequence - Units
 | 
|---|
 | 147 |  ;
 | 
|---|
 | 148 |  S LA7ECH=$G(LA7ECH),LA7Y=""
 | 
|---|
 | 149 |  ;
 | 
|---|
 | 150 |  ; Units - remove leading and trailing spaces
 | 
|---|
 | 151 |  I $G(LA7VAL)'="" S LA7Y=$$TRIM^XLFSTR(LA7VAL,"LR"," ")
 | 
|---|
 | 152 |  ;
 | 
|---|
 | 153 |  ; Build sequence using LOINC codes only
 | 
|---|
 | 154 |  ; LOINC code/code name/"LN"
 | 
|---|
 | 155 |  I $G(LA764061) D
 | 
|---|
 | 156 |  . N LA7IENS,LA7X,LA7Z
 | 
|---|
 | 157 |  . S LA7IENS=LA764061_","
 | 
|---|
 | 158 |  . D GETS^DIQ(64.061,LA7IENS,".01;1","E","LA7X")
 | 
|---|
 | 159 |  . ; LOINC code
 | 
|---|
 | 160 |  . S LA7Z=$G(LA7X(64.061,LA7IENS,.01,"E"))
 | 
|---|
 | 161 |  . S LA7Z=$$CHKDATA^LA7VHLU3(LA7Z,LA7FS_LA7ECH)
 | 
|---|
 | 162 |  . S $P(LA7Y,$E(LA7ECH,1),1)=LA7Z
 | 
|---|
 | 163 |  . ; LOINC code name
 | 
|---|
 | 164 |  . S LA7Z=$G(LA7X(64.061,LA7IENS,1,"E"))
 | 
|---|
 | 165 |  . S LA7Z=$$CHKDATA^LA7VHLU3(LA7Z,LA7FS_LA7ECH)
 | 
|---|
 | 166 |  . S $P(LA7Y,$E(LA7ECH,1),2)=LA7Z
 | 
|---|
 | 167 |  . S $P(LA7Y,$E(LA7ECH,1),3)="LN"
 | 
|---|
 | 168 |  ;
 | 
|---|
 | 169 |  Q
 | 
|---|
 | 170 |  ;
 | 
|---|
 | 171 |  ;
 | 
|---|
 | 172 | OBX7 ; Build OBX-7 sequence - Reference range
 | 
|---|
 | 173 |  ; Removes leading and trailing quote marks ("").
 | 
|---|
 | 174 |  ;
 | 
|---|
 | 175 |  S LA7Y=""
 | 
|---|
 | 176 |  ;
 | 
|---|
 | 177 |  I $G(LA7LOW)'="" D
 | 
|---|
 | 178 |  . S LA7LOW=$$TRIM^XLFSTR(LA7LOW,"RL","""")
 | 
|---|
 | 179 |  . I LA7LOW?1A.E S LA7Y=LA7Y_LA7LOW Q  ; alphabetic value
 | 
|---|
 | 180 |  . I $G(LA7HIGH)="",$E(LA7LOW)'=">" S LA7Y=">"
 | 
|---|
 | 181 |  . S LA7Y=LA7Y_LA7LOW
 | 
|---|
 | 182 |  ;
 | 
|---|
 | 183 |  I $G(LA7HIGH)'="" D
 | 
|---|
 | 184 |  . S LA7HIGH=$$TRIM^XLFSTR(LA7HIGH,"RL","""")
 | 
|---|
 | 185 |  . I LA7HIGH?1A.E S LA7Y=LA7Y_LA7HIGH Q  ; alphabetic value
 | 
|---|
 | 186 |  . I $G(LA7LOW)="" D  Q
 | 
|---|
 | 187 |  . . I $E(LA7HIGH)'="<" S LA7Y="<"
 | 
|---|
 | 188 |  . . S LA7Y=LA7Y_LA7HIGH
 | 
|---|
 | 189 |  . S LA7Y=LA7Y_"-"_LA7HIGH
 | 
|---|
 | 190 |  ;
 | 
|---|
 | 191 |  S LA7Y=$$CHKDATA^LA7VHLU3(LA7Y,LA7FS_LA7ECH)
 | 
|---|
 | 192 |  ;
 | 
|---|
 | 193 |  Q
 | 
|---|