| [613] | 1 | LREPI1 ;DALOI/SED - EMERGING PATHOGENS HL7 BUILDER ; 5/9/98 | 
|---|
|  | 2 | ;;5.2;LAB SERVICE;**132,157,175,260,281,320**;Sep 27, 1994 | 
|---|
|  | 3 | ; Reference to ^DD supported by IA #999 | 
|---|
|  | 4 | ; Reference to ^XLFSTR supported by IA #10104 | 
|---|
|  | 5 | EN(LRDFN,SS,IVDT,SEQ) ;Entry to build the HL7 Segment | 
|---|
|  | 6 | ;LRDFN=Patient ID | 
|---|
|  | 7 | ;SS=Subscripts in file 63  for results | 
|---|
|  | 8 | ;IVDT=Inverted Date and Time | 
|---|
|  | 9 | ;SEQ=Sequence Number | 
|---|
|  | 10 | ;S LRCS=$E(HL("ECH")) | 
|---|
|  | 11 | K ^TMP("HL7",$J) | 
|---|
|  | 12 | S:+$G(SEQ)'>0 SEQ=1 | 
|---|
|  | 13 | S CNT=1 | 
|---|
|  | 14 | Q:'$G(LRDFN)!('$G(IVDT))!('$L($G(SS))) | 
|---|
|  | 15 | I $L($T(@SS)) D @SS | 
|---|
|  | 16 | EXIT ;KILL THEN EXIT | 
|---|
|  | 17 | K CNT,IND,LRAND,LRANT,LRDATA,LRES,LRINLT,LRNT,LRRDTE,LRREF,LRTST,LRUNIT | 
|---|
|  | 18 | K ND,NLT,NLTP,ORGNB,ORGPT,SEQX,SITE,TYPE,LRCODE,LRFLD | 
|---|
|  | 19 | Q SEQ | 
|---|
|  | 20 | CY D CY^LREPI1A | 
|---|
|  | 21 | Q | 
|---|
|  | 22 | SITECD ;Determine the HL7 Speciman code from the Site and return LRCODE | 
|---|
|  | 23 | S LRCODE="" | 
|---|
|  | 24 | Q:'$D(SITE) | 
|---|
|  | 25 | S LRCODE=$P($G(^LAB(61,SITE,0)),U,8)     ;Use if LEDI is not defined | 
|---|
|  | 26 | S LRIPT=$P($G(^LAB(61,SITE,0)),U,9) Q:+LRIPT'>0 | 
|---|
|  | 27 | Q:'$D(^LAB(64.061,LRIPT,0)) | 
|---|
|  | 28 | Q:$P(^LAB(64.061,LRIPT,0),U,3)="" | 
|---|
|  | 29 | S LRCODE=$P(^LAB(64.061,LRIPT,0),U,3) | 
|---|
|  | 30 | Q | 
|---|
|  | 31 | CH ;BUILD HL7 MSG FOR CH SUBSCRIPT | 
|---|
|  | 32 | ;TO BUILD OBR SEGMENT FOR CHEM | 
|---|
|  | 33 | I '$D(^LR(LRDFN,SS,IVDT,0)) Q | 
|---|
|  | 34 | K LRDATA | 
|---|
|  | 35 | S $P(LRDATA,HLFS,1)=$G(SEQ) | 
|---|
|  | 36 | S $P(LRDATA,HLFS,4)="81121.0000"_LRCS_"CHEMISTRY TEST"_LRCS_"VANLT" | 
|---|
|  | 37 | S $P(LRDATA,HLFS,18)=$P(^LR(LRDFN,SS,IVDT,0),U,6) | 
|---|
|  | 38 | S $P(LRDATA,HLFS,7)=$$HLDATE^HLFNC(9999999-IVDT) | 
|---|
|  | 39 | S LRRDTE=$P($G(^LR(LRDFN,SS,IVDT,0)),U,3) | 
|---|
|  | 40 | S:+LRRDTE>0 LRRDTE=$$HLDATE^HLFNC(LRRDTE) | 
|---|
|  | 41 | S SITE=$P($G(^LR(LRDFN,SS,IVDT,0)),U,5) | 
|---|
|  | 42 | D SITECD | 
|---|
|  | 43 | S $P(LRDATA,HLFS,15)=LRCODE_LRCS_LRCS_$P($G(^LAB(61,SITE,0)),U) | 
|---|
|  | 44 | S ^TMP("HL7",$J,CNT)="OBR"_HLFS_$$UP^XLFSTR(LRDATA) | 
|---|
|  | 45 | ;TO BUILD OBX SEGMENT CHEM | 
|---|
|  | 46 | S (IND,SEQX)=1 | 
|---|
|  | 47 | F  S IND=$O(^LR(LRDFN,"CH",IVDT,IND)) Q:+IND'>0  D | 
|---|
|  | 48 | .S LRES=^LR(LRDFN,"CH",IVDT,IND) | 
|---|
|  | 49 | .Q:LRES="" | 
|---|
|  | 50 | .Q:'$D(^LAB(60,"C","CH;"_IND_";1")) | 
|---|
|  | 51 | .K LRDATA | 
|---|
|  | 52 | .S LRTST=$O(^LAB(60,"C","CH;"_IND_";1",0)) | 
|---|
|  | 53 | .Q:'$D(^TMP($J,"T",LRTST,LRPATH)) | 
|---|
|  | 54 | .S $P(LRDATA,HLFS,1)=SEQX,$P(LRDATA,HLFS,2)="ST" | 
|---|
|  | 55 | .S LRUNIT=$P($G(^LAB(60,LRTST,1,SITE,0)),U,7) | 
|---|
|  | 56 | .S LRREF=$P($G(^LAB(60,LRTST,1,SITE,0)),U,2)_"-" | 
|---|
|  | 57 | .S LRREF=LRREF_$P($G(^LAB(60,LRTST,1,SITE,0)),U,3) | 
|---|
|  | 58 | .S LRINLT=+$G(^LAB(60,LRTST,64)),LRNLT=LRCS_LRCS_LRCS | 
|---|
|  | 59 | .I LRINLT'="",$D(^LAM(LRINLT,0)) D | 
|---|
|  | 60 | ..S $P(LRNLT,LRCS,2)=$P(^LAM(LRINLT,0),U,1) | 
|---|
|  | 61 | ..S $P(LRNLT,LRCS,1)=$P(^LAM(LRINLT,0),U,2) | 
|---|
|  | 62 | ..S $P(LRNLT,LRCS,3)="VANLT" | 
|---|
|  | 63 | .S $P(LRDATA,HLFS,3)=LRNLT_LRTST_LRCS_$P(^LAB(60,LRTST,0),U)_LRCS_"VA60" | 
|---|
|  | 64 | .;ADD LOINC | 
|---|
|  | 65 | .S LRLOINC=$P($P(LRES,U,3),"!",3),LRLNCNAM="" | 
|---|
|  | 66 | .S:LRLOINC'="" LRLNCNAM=$E($P($G(^LAB(95.3,LRLOINC,80)),U),1,30) | 
|---|
|  | 67 | .S $P(LRDATA,HLFS,3)=$P(LRDATA,HLFS,3)_LRCS_LRLOINC_LRCS_LRLNCNAM_LRCS_"LOINC" | 
|---|
|  | 68 | .S $P(LRDATA,HLFS,5)=$P(LRES,U,1),$P(LRDATA,HLFS,8)=$P(LRES,U,2) | 
|---|
|  | 69 | .S $P(LRDATA,HLFS,6)=LRUNIT,$P(LRDATA,HLFS,7)=LRREF | 
|---|
|  | 70 | .S:LRRDTE>0 $P(LRDATA,HLFS,14)=LRRDTE | 
|---|
|  | 71 | .S:LRRDTE=0 $P(LRDATA,HLFS,14)="" | 
|---|
|  | 72 | .S CNT=CNT+1,SEQX=SEQX+1,^TMP("HL7",$J,CNT)="OBX"_HLFS_$$UP^XLFSTR(LRDATA) | 
|---|
|  | 73 | K LRLNCNAM,LRLOINC | 
|---|
|  | 74 | Q | 
|---|
|  | 75 | MI ;TO BUILD INITIAL OBR SEGMENT FOR MICRO | 
|---|
|  | 76 | I '$D(^LR(LRDFN,SS,IVDT,0)) Q | 
|---|
|  | 77 | K LRDATA | 
|---|
|  | 78 | S $P(LRDATA,HLFS,1)=$G(SEQ) | 
|---|
|  | 79 | S $P(LRDATA,HLFS,4)="87999.0000"_LRCS_"MICRO CULTURE"_LRCS_"VANLT" | 
|---|
|  | 80 | S $P(LRDATA,HLFS,7)=$$HLDATE^HLFNC(9999999-IVDT) | 
|---|
|  | 81 | S $P(LRDATA,HLFS,18)=$P(^LR(LRDFN,SS,IVDT,0),U,6) | 
|---|
|  | 82 | S SITE=$P(^LR(LRDFN,SS,IVDT,0),U,5) | 
|---|
|  | 83 | D SITECD | 
|---|
|  | 84 | S $P(LRDATA,HLFS,15)=LRCODE_LRCS_LRCS_$P($G(^LAB(61,SITE,0)),U) | 
|---|
|  | 85 | S ^TMP("HL7",$J,CNT)="OBR"_HLFS_$$UP^XLFSTR(LRDATA) | 
|---|
|  | 86 | ;LOOK INTO ALL MICRO SUB NODES FOR DATA AND BUILD FIRST OBX | 
|---|
|  | 87 | F ND=3,6,9,12,17  I $D(^LR(LRDFN,SS,IVDT,ND,0)) D TYPE,MIORG | 
|---|
|  | 88 | ;SECOND LOOP TO BUILD SECONDARY OBR AND OBX | 
|---|
|  | 89 | F ND=3,12  I $D(^LR(LRDFN,SS,IVDT,ND,0)) D TYPE,@("SEC"_ND) | 
|---|
|  | 90 | Q | 
|---|
|  | 91 | TYPE ;DETERMINES THE CORRECT NLT CODE TO USE | 
|---|
|  | 92 | S:ND=3 TYPE="87993.0000"_LRCS_"BACTERIOLOGY CULTURE"_LRCS_"VANLT" | 
|---|
|  | 93 | S:ND=6 TYPE="87505.0000"_LRCS_"PARASITOLOGY"_LRCS_"VANLT" | 
|---|
|  | 94 | S:ND=9 TYPE="87994.0000"_LRCS_"MYCOLOGY CULTURE"_LRCS_"VANLT" | 
|---|
|  | 95 | S:ND=12 TYPE="87995.0000"_LRCS_"MYCOBACTERIUM CULTURE"_LRCS_"VANLT" | 
|---|
|  | 96 | S:ND=17 TYPE="87996.0000"_LRCS_"VIROLOGY CULTURE"_LRCS_"VANLT" | 
|---|
|  | 97 | Q | 
|---|
|  | 98 | ; | 
|---|
|  | 99 | MIORG ;TO BUILD ORGANISM OBX SEGMENT FOR MICRO | 
|---|
|  | 100 | S ORGNB=0 F  S ORGNB=$O(^LR(LRDFN,SS,IVDT,ND,ORGNB)) Q:+ORGNB'>0  D | 
|---|
|  | 101 | .Q:'$D(^LR(LRDFN,SS,IVDT,ND,ORGNB,0)) | 
|---|
|  | 102 | .S LRRDTE="" | 
|---|
|  | 103 | .S:ND=3 LRRDTE=+$P($G(^LR(LRDFN,SS,IVDT,1)),U,1) | 
|---|
|  | 104 | .S:ND'=3 LRRDTE=+$P($G(^LR(LRDFN,SS,IVDT,(ND-1))),U,1) | 
|---|
|  | 105 | .S:+LRRDTE>0 LRRDTE=$$HLDATE^HLFNC(LRRDTE) | 
|---|
|  | 106 | .S ORGPT=+$P($G(^LR(LRDFN,SS,IVDT,ND,ORGNB,0)),U,1) | 
|---|
|  | 107 | .Q:'$D(^LAB(61.2,ORGPT,0)) | 
|---|
|  | 108 | .K LRDATA | 
|---|
|  | 109 | .S $P(LRDATA,HLFS,1)=ORGNB,$P(LRDATA,HLFS,2)="CE" | 
|---|
|  | 110 | .S $P(LRDATA,HLFS,3)=TYPE | 
|---|
|  | 111 | .S $P(LRDATA,HLFS,4)=ORGNB | 
|---|
|  | 112 | .S:LRRDTE'=0 $P(LRDATA,HLFS,14)=LRRDTE | 
|---|
|  | 113 | .E  S $P(LRDATA,HLFS,14)="" | 
|---|
|  | 114 | .S $P(LRDATA,HLFS,5)=LRCS_$P(^LAB(61.2,ORGPT,0),U,1) | 
|---|
|  | 115 | .S CNT=CNT+1,^TMP("HL7",$J,CNT)="OBX"_HLFS_$$UP^XLFSTR(LRDATA) | 
|---|
|  | 116 | Q | 
|---|
|  | 117 | SEC3 ;BUILD SUSCEPTIBILTY FOR ORGANISMS | 
|---|
|  | 118 | ;FIRST BUILD OBR THEN OBX FOR THE ANTIMICROBIAL TESTING | 
|---|
|  | 119 | S ORGNB=0 F  S ORGNB=$O(^LR(LRDFN,SS,IVDT,ND,ORGNB)) Q:+ORGNB'>0  D | 
|---|
|  | 120 | .Q:'$D(^LR(LRDFN,SS,IVDT,ND,ORGNB,0)) | 
|---|
|  | 121 | .;CHECK TO SEE IF ANY ANTIMICROBIAL INFORMATION BEFORE PROCEEDING | 
|---|
|  | 122 | .S LRAND=1,LRANDFG=1 | 
|---|
|  | 123 | .F  S LRAND=$O(^LR(LRDFN,SS,IVDT,ND,ORGNB,LRAND)) Q:+LRAND'>0  D | 
|---|
|  | 124 | ..Q:'$D(^LAB(62.06,"AD",LRAND)) | 
|---|
|  | 125 | ..S:$P(^LR(LRDFN,SS,IVDT,ND,ORGNB,LRAND),U,2)'="" LRANDFG=0 | 
|---|
|  | 126 | .Q:LRANDFG | 
|---|
|  | 127 | .K LRDATA,LRANDFG S SEQ=SEQ+1 | 
|---|
|  | 128 | .S $P(LRDATA,HLFS,1)=SEQ | 
|---|
|  | 129 | .S $P(LRDATA,HLFS,4)="87518.0000"_LRCS_"ANTIBIOTIC MIC"_LRCS_"VANLT" | 
|---|
|  | 130 | .S $P(LRDATA,HLFS,26)=$P(TYPE,LRCS,1)_LRCS_ORGNB | 
|---|
|  | 131 | .S $P(LRDATA,HLFS,7)=$$HLDATE^HLFNC(9999999-IVDT) | 
|---|
|  | 132 | .S SITE=$P(^LR(LRDFN,SS,IVDT,0),U,5) | 
|---|
|  | 133 | .D SITECD | 
|---|
|  | 134 | .S $P(LRDATA,HLFS,15)=LRCODE_LRCS_LRCS_$P($G(^LAB(61,SITE,0)),U) | 
|---|
|  | 135 | .S CNT=CNT+1,^TMP("HL7",$J,CNT)="OBR"_HLFS_$$UP^XLFSTR(LRDATA) | 
|---|
|  | 136 | ANTI3 .;NOW GET ANTIMICROBIAL INFORMATION | 
|---|
|  | 137 | .S SEQX=1,LRAND=1 | 
|---|
|  | 138 | .F  S LRAND=$O(^LR(LRDFN,SS,IVDT,ND,ORGNB,LRAND)) Q:+LRAND'>0  D | 
|---|
|  | 139 | ..Q:'$D(^LAB(62.06,"AD",LRAND)) | 
|---|
|  | 140 | ..Q:$P(^LR(LRDFN,SS,IVDT,ND,ORGNB,LRAND),U,2)="" | 
|---|
|  | 141 | ..K LRDATA | 
|---|
|  | 142 | ..S LRANT=$O(^LAB(62.06,"AD",LRAND,0)) | 
|---|
|  | 143 | ..S $P(LRDATA,HLFS,1)=SEQX,$P(LRDATA,HLFS,2)="ST" | 
|---|
|  | 144 | ..S NLT=LRCS_LRCS_LRCS_LRANT_LRCS_$P(^LAB(62.06,LRANT,0),U,1)_LRCS_"VA62.06" | 
|---|
|  | 145 | ..S NLTP=+$G(^LAB(62.06,LRANT,64)) | 
|---|
|  | 146 | ..S:$D(^LAM(NLTP,0)) $P(NLT,LRCS,1)=$P(^LAM(NLTP,0),U,2),$P(NLT,LRCS,2)=$P($P(^LAM(NLTP,0),U,1),LRCS),$P(NLT,LRCS,3)="VANLT" | 
|---|
|  | 147 | ..S $P(LRDATA,HLFS,3)=NLT | 
|---|
|  | 148 | ..S $P(LRDATA,HLFS,5)=$P(^LR(LRDFN,SS,IVDT,ND,ORGNB,LRAND),U) | 
|---|
|  | 149 | ..S $P(LRDATA,HLFS,8)=$P(^LR(LRDFN,SS,IVDT,ND,ORGNB,LRAND),U,2) | 
|---|
|  | 150 | ..S SEQX=SEQX+1,CNT=CNT+1,^TMP("HL7",$J,CNT)="OBX"_HLFS_$$UP^XLFSTR(LRDATA) | 
|---|
|  | 151 | Q | 
|---|
|  | 152 | SEC12 ; | 
|---|
|  | 153 | ;FIRST BUILD OBR THEN OBX FOR THE ANTIMICROBIAL TESTING | 
|---|
|  | 154 | S ORGNB=0 F  S ORGNB=$O(^LR(LRDFN,SS,IVDT,ND,ORGNB)) Q:+ORGNB'>0  D | 
|---|
|  | 155 | .Q:'$D(^LR(LRDFN,SS,IVDT,ND,ORGNB,0)) | 
|---|
|  | 156 | .;FIRST CHECK FOR ANTIMICROBIAL INFORMATION | 
|---|
|  | 157 | .S LRAND=1,LRANDFG=1 | 
|---|
|  | 158 | .F  S LRAND=$O(^LR(LRDFN,SS,IVDT,ND,ORGNB,LRAND)) Q:+LRAND'>0  D | 
|---|
|  | 159 | ..S:$P(^LR(LRDFN,SS,IVDT,ND,ORGNB,LRAND),U,2)'="" LRANDFG=0 | 
|---|
|  | 160 | .Q:LRANDFG | 
|---|
|  | 161 | .K LRDATA,LRANDFG S SEQ=SEQ+1 | 
|---|
|  | 162 | .S $P(LRDATA,HLFS,1)=SEQ | 
|---|
|  | 163 | .S $P(LRDATA,HLFS,4)="87518.0000"_LRCS_"ANTIBIOTIC MIC"_LRCS_"VANLT" | 
|---|
|  | 164 | .S $P(LRDATA,HLFS,26)=$P(TYPE,LRCS,1)_LRCS_ORGNB | 
|---|
|  | 165 | .S $P(LRDATA,HLFS,7)=$$HLDATE^HLFNC(9999999-IVDT) | 
|---|
|  | 166 | .S SITE=$P(^LR(LRDFN,SS,IVDT,0),U,5) | 
|---|
|  | 167 | .D SITECD | 
|---|
|  | 168 | .S $P(LRDATA,HLFS,15)=LRCODE_LRCS_LRCS_$P($G(^LAB(61,SITE,0)),U) | 
|---|
|  | 169 | .S CNT=CNT+1,^TMP("HL7",$J,CNT)="OBR"_HLFS_$$UP^XLFSTR(LRDATA) | 
|---|
|  | 170 | ANTI12 .;NOW GET ANTIMICROBIAL INFORMATION FOR THE MYCOBACTERIUM | 
|---|
|  | 171 | .S SEQX=1,LRAND=1 | 
|---|
|  | 172 | .F  S LRAND=$O(^LR(LRDFN,SS,IVDT,ND,ORGNB,LRAND)) Q:+LRAND'>0  D | 
|---|
|  | 173 | ..Q:$P(^LR(LRDFN,SS,IVDT,ND,ORGNB,LRAND),U,2)="" | 
|---|
|  | 174 | ..K LRDATA | 
|---|
|  | 175 | ..S LRNT=$O(^DD(63.39,"GL",LRAND,1,0)) | 
|---|
|  | 176 | .. S LRFILE=63.39,LRFLD=LRNT,LRANT=$$GET1^DID(LRFILE,LRFLD,"","TITLE","","LRERR") | 
|---|
|  | 177 | ..;S LRANT=$P($G(^DD(63.39,LRNT,.1)),U,1)replaced w/supported reference | 
|---|
|  | 178 | ..S:LRANT="" LRANT=$P(^DD(63.39,LRNT,0),U,1) | 
|---|
|  | 179 | ..S $P(LRDATA,HLFS,1)=SEQX,$P(LRDATA,HLFS,2)="ST" | 
|---|
|  | 180 | ..S $P(LRDATA,HLFS,3)=LRCS_LRCS_LRCS_LRAND_LRCS_LRANT_LRCS_"VA63.39" | 
|---|
|  | 181 | ..S $P(LRDATA,HLFS,5)=$P(^LR(LRDFN,SS,IVDT,ND,ORGNB,LRAND),U) | 
|---|
|  | 182 | ..S $P(LRDATA,HLFS,8)=$P(^LR(LRDFN,SS,IVDT,ND,ORGNB,LRAND),U,2) | 
|---|
|  | 183 | ..S SEQX=SEQX+1,CNT=CNT+1,^TMP("HL7",$J,CNT)="OBX"_HLFS_$$UP^XLFSTR(LRDATA) | 
|---|
|  | 184 | Q | 
|---|