Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: LA7COBX1

LA7COBX1.m

Go to the documentation of this file.
  1. LA7COBX1 ;VA/DALOI/JMC - LAB OBX Segment message builder (CH subscript) cont'd ; 22-Oct-2013 09:22 ; MAW
  1. ;;5.2;AUTOMATED LAB INSTRUMENTS;**46,61,63,1018,64,71,1027,68,1033**;NOV 1, 1997
  1. ;
  1. CH ; Observation/Result segment for "CH" subscript results.
  1. ; Called by LA7VOBX
  1. ;
  1. N LA760,LA76304,LA7ALT,LA7DDERR,LA7DIV,LA7I,LA7RS,LA7X,LA7Y,X,LA7VAL
  1. ;
  1. ; "CH" subscript requires a dataname
  1. I '$G(LRSB) Q
  1. ;
  1. ; get result node from LR global.
  1. S LA76304(0)=$G(^LR(LRDFN,LRSS,LRIDT,0))
  1. S LA7RS=$P(LRSB,"^",2),LRSB=$P(LRSB,"^")
  1. S LA7VAL=$G(^LR(LRDFN,LRSS,LRIDT,LRSB))
  1. ; If previous results have been corrected then send corrected status
  1. I LA7RS="",$P(LA7VAL,"^",10)=2 S LA7RS="C"
  1. ;
  1. ; Check if test is OK to send - (O)utput or (B)oth
  1. S LA7X=$P(LA7VAL,"^",12)
  1. I LA7X]"","BO"'[LA7X Q
  1. I LA7X="",'$$OKTOSND^LA7VHLU1(LRSS,LRSB,+$P($P(LA7VAL,"^",3),"!",7)) Q
  1. ;
  1. ; If no result NLT or LOINC try to determine from file #60
  1. S LA7X=$P(LA7VAL,"^",3)
  1. I $P(LA7X,"!",2)=""!($P(LA7X,"!",3)="") S $P(LA7VAL,"^",3)=$$DEFCODE^LA7CHLU5(LRSS,LRSB,LA7X,$P(LA76304(0),"^",5))
  1. ; No result NLT code - log error
  1. I $P($P(LA7VAL,"^",3),"!",2)="" D
  1. . N LA7X
  1. . S LA7X="["_LRSB_"]"_$$GET1^DID(63.04,LRSB,"","LABEL")
  1. . D CREATE^LA7LOG(36)
  1. ;
  1. ; something missing - No result.
  1. I $P(LA7VAL,"^")="" Q
  1. ;
  1. ; Check for missing units/reference ranges
  1. D CHECK
  1. ;
  1. ; Initialize OBX segment
  1. S LA7OBX(0)="OBX"
  1. S LA7OBX(1)=$$OBX1^LA7VOBX(.LA7OBXSN)
  1. ;
  1. ; Value type
  1. ; If result is "cancel", "comment" or "pending" then data type is ST - string data
  1. S LA7X=$S("canccommentpending"[$P(LA7VAL,"^"):1,1:0)
  1. I LA7X,LA7INTYP'=30 S LA7OBX(2)="SN"
  1. E S LA7OBX(2)=$$OBX2^LA7COBX(63.04,LRSB)
  1. ;I LA7OBX(2)'="NM",$P(LA7VAL,"^")?1(1.N,.N1"."1.N) S LA7OBX(2)="NM"
  1. ;
  1. ; Observation identifer
  1. ; build alternate code based on dataname from file #63 in case it's needed
  1. S LA7X=$P(LA7VAL,"^",3)
  1. S LA7ALT="CH"_LRSB_"^"_$$GET1^DID(63.04,LRSB,"","LABEL")_"^L"
  1. I $P(LA7X,"!",7) S LA760=$P(LA7X,"!",7)
  1. E S LA760=+$O(^LAB(60,"C","CH;"_LRSB_";1",0))
  1. I LA760 S $P(LA7ALT,"^",4,6)=LA760_"^"_$P(^LAB(60,LA760,0),"^")_"^L"
  1. S LA7OBX(3)=$$OBX3^LA7COBX($P(LA7X,"!",2),$P(LA7X,"!",3),LA7ALT,LA7FS,LA7ECH,$G(LA7INTYP))
  1. S $P(LA7OBX(3),$E(LA7ECH),7)=2.40 ;MU2
  1. S $P(LA7OBX(3),$E(LA7ECH),8)=5.2 ;MU2
  1. I $G(LA7INPT) S $P(LA7OBX(3),$E(LA7ECH),9)=$P(LA7OBX(3),$E(LA7ECH),2) ;mu2 inpatient
  1. I $G(LA7INPT) S LA7STOR($P($P(LA7OBX(3),$E(LA7ECH)),"-"))=$G(LA7OBX(3))
  1. ;
  1. ; Build sub-id to aid in linking updates to previous transmissions.
  1. S LA7OBX(4)=$$OBX4^LA7COBX("CH"_LRSB,LA7FS,LA7ECH)
  1. I $G(LA7INPT) S $P(LA7STOR($P($P(LA7OBX(3),$E(LA7ECH)),"-")),"*",2)=$G(LA7OBX(4))
  1. ;
  1. ; Test value
  1. ; If DoD and "canc" then report "PL Cancelled" per Lab Interop ICD.
  1. S LA7X=$P(LA7VAL,"^") K LA7DDERR
  1. I LA7X'="canc",$$GET1^DID(63.04,LRSB,"","TYPE","","LA7DDERR")="SET" D
  1. . N LA71,LA72,LA73,LA74,LA75,LA76,LA77,LA78,LA79,LA7XUP
  1. . S LA73="SCT"
  1. . S LA74=LA7X
  1. . S LA7X=$$EXTERNAL^DILFD(63.04,LRSB,"",LA7X)
  1. . S LA71=$P($$LOOKDSC^LA7CQRY1("","SCT",$$UPPER^HLFNC(LA7X),$E(LA7ECH)),$E(LA7ECH)) ;get snomed code here
  1. . S LA72=LA7X
  1. . S LA75=LA7X
  1. . S LA76="L"
  1. . S LA77="07/31/2012"
  1. . S LA78="5.2"
  1. . S LA79=LA7X
  1. . S $P(LA7X,$E(LA7ECH))=LA71
  1. . S $P(LA7X,$E(LA7ECH),2)=LA72
  1. . S $P(LA7X,$E(LA7ECH),3)=LA73
  1. . S $P(LA7X,$E(LA7ECH),4)=LA74
  1. . S $P(LA7X,$E(LA7ECH),5)=LA75
  1. . S $P(LA7X,$E(LA7ECH),6)=LA76
  1. . S $P(LA7X,$E(LA7ECH),7)=LA77
  1. . S $P(LA7X,$E(LA7ECH),8)=LA78
  1. . S $P(LA7X,$E(LA7ECH),9)=LA79
  1. . I LA7X="" S LA7X=$P(LA7VAL,"^")
  1. I $G(LA7NVAF)=1,LA7X="canc" S LA7X="PL Cancelled"
  1. S LA7OBX(5)=$$OBX5^LA7COBX(LA7X,LA7OBX(2),LA7FS,LA7ECH)
  1. ; Log exception when data dictionary appears corrupt.
  1. I $D(LA7DDERR) D CREATE^LA7LOG(121) K LA7DDERR
  1. ;
  1. ; Suppress "pending" results when sending to HDR
  1. I LA7INTYP=30,$P(LA7VAL,"^")="pending" S LA7OBX(2)="",LA7OBX(5)=""
  1. ;
  1. ; Units
  1. S LA7X=$P(LA7VAL,"^",5)
  1. I $P(LA7X,"!",7)]"" S LA7OBX(6)=$$OBX6^LA7COBX($P(LA7X,"!",7),"",LA7FS,LA7ECH,$G(LA7INTYP))
  1. ;
  1. ; Reference range - use therapeutic low/high if present.
  1. K LA7Y
  1. I $P(LA7X,"!",11)="",$P(LA7X,"!",12)="" D
  1. . S LA7Y("LOW")=$P(LA7X,"!",2)
  1. . S LA7Y("HIGH")=$P(LA7X,"!",3)
  1. E D
  1. . S LA7Y("LOW")=$P(LA7X,"!",11)
  1. . S LA7Y("HIGH")=$P(LA7X,"!",12)
  1. ;
  1. S LA7OBX(7)=$$OBX7^LA7COBX(LA7Y("LOW"),LA7Y("HIGH"),LA7FS,LA7ECH)
  1. K LA7Y
  1. ;
  1. ; Abnormal flags
  1. N ABTXT
  1. S ABTXT=""
  1. ;S LA7OBX(8)=$$OBX8^LA7COBX($P(LA7VAL,"^",2))
  1. N LA7AB
  1. S LA7AB=$G(^LAB(60,LA760,1,LRSPEC,"IHS"))
  1. I LA7AB]"" S $P(LA7VAL,"^",2)="A"
  1. I $P(LA7VAL,"^",2)="" S $P(LA7VAL,"^",2)="N"
  1. S LA7OBX(8)=$$LOOKTAB^LA7CQRY1("HL7","0078",$E($P(LA7VAL,"^",2)),$E(LA7ECH))
  1. ;I $E(LA7OBX(8))="H" S ABTXT="Above High Normal"
  1. ;I $E(LA7OBX(8))="L" S ABTXT="Below Low Normal"
  1. I $G(LA7INPT) S LA7OBX(8)=$E(LA7OBX(8))
  1. I '$G(LA7INPT) D
  1. .S $P(LA7OBX(8),$E(LA7ECH),4)=$P(LA7OBX(8),$E(LA7ECH))
  1. .S $P(LA7OBX(8),$E(LA7ECH),5)=$P(LA7OBX(8),$E(LA7ECH),2)
  1. .S $P(LA7OBX(8),$E(LA7ECH),6)="L"
  1. .S $P(LA7OBX(8),$E(LA7ECH),7)="2.7"
  1. .S $P(LA7OBX(8),$E(LA7ECH),8)="1.0"
  1. ;
  1. ; "P"artial or "F"inal results
  1. S LA7X=$S("canccommentpending"[$P(LA7VAL,"^"):$P(LA7VAL,"^"),1:"F")
  1. I LA7RS="C" D
  1. . S LA7X=LA7RS
  1. . I LA7INTYP=30,$P(LA7VAL,"^")="pending" S LA7X="W",LA7OBX(5)=""""""
  1. S LA7OBX(11)=$$OBX11^LA7COBX(LA7X)
  1. I LA7INTYP=30,$P(LA7VAL,"^")="canc",LA7OBX(11)="X" S LA7OBX(2)="",LA7OBX(5)=""
  1. I $G(LA7INPT),$G(LA7OBX(11))="" S LA7OBX(11)="F" ;mu2 inpatient
  1. ;
  1. ; Observation date/time - collection date/time per HL7 standard
  1. S LA7X=$P(LA76304(0),"^") S:$P(LA76304(0),"^",2) LA7X=$P(LA7X,".")
  1. I LA7X S LA7OBX(14)=$$OBX14^LA7COBX(LA7X)
  1. ;
  1. S LA7DIV=$P(LA7VAL,"^",9)
  1. I LA7DIV="" S LA7DIV=$P($G(^LR(LRDFN,LRSS,LRIDT,"RF")),"^")
  1. I LA7DIV="",$$DIV4^XUSER(.LA7DIV,$P(LA7VAL,"^",4)) S LA7DIV=$O(LA7DIV(0))
  1. ;
  1. ; Facility that performed the testing
  1. S LA7OBX(15)=$$OBX15^LA7COBX(LA7DIV,LA7FS,LA7ECH)
  1. ;
  1. ; Person that verified the test
  1. S LA7OBX(16)=$$OBX16^LA7COBX($P(LA7VAL,"^",4),LA7DIV,LA7FS,LA7ECH)
  1. ;
  1. ; Observation method - workkload suffix (LA7X) and result NLT code (LA7Y)
  1. S LA7X=$P($P(LA7VAL,"^",3),"!",4),LA7Y=$P($P(LA7VAL,"^",3),"!",2)
  1. I LA7X'=""!(LA7Y="") S LA7OBX(17)=$$OBX17^LA7COBX(LA7X,LA7Y,LA7FS,LA7ECH)
  1. I $G(LA7Y)]"" D
  1. . N WKI
  1. . S WKI=$O(^LAM("E",LA7Y,0))
  1. . Q:'WKI
  1. . S OBSI=$P($G(^LAM(WKI,0)),U,6)
  1. . Q:'OBSI
  1. . S OBSE=$$LOOKTAB^LA7CQRY1("","OBSMETHOD",+OBSI,$E(LA7ECH))
  1. . I $G(OBSE)]"" D
  1. .. S LA7OBX(17)=OBSI_$E(LA7ECH)_$P(OBSE,$E(LA7ECH),2)_$E(LA7ECH)_"OBSMETHOD"_$E(LA7ECH)_+OBSI_$E(LA7ECH)_$P(OBSE,$E(LA7ECH),2)_$E(LA7ECH)_"L"_$E(LA7ECH)_"20090501"_$E(LA7ECH)_LA7VER
  1. ; Equipment entity identifier
  1. I $P(LA7VAL,"^",11)'="" S LA7OBX(18)=$$OBX18^LA7COBX($P(LA7VAL,"^",11),LA7FS,LA7ECH)
  1. ;
  1. ; Date/time of the analysis
  1. I $P(LA7VAL,"^",6)'="" S LA7OBX(19)=$$OBX19^LA7COBX($P(LA7VAL,"^",6))
  1. I $G(LA7OBX(19))="" S LA7OBX(19)=$G(LA7OBX(14))
  1. ;
  1. ; Performing organization name/address
  1. I LA7DIV="" S LA7DIV=DUZ(2) ;MU2
  1. I LA7DIV'="" D
  1. . N LA7DT
  1. . S LA7OBX(23)=$$OBX23^LA7COBX(4,LA7DIV,LA7FS,LA7ECH)
  1. . S $P(LA7OBX(23),$E(LA7ECH,1),6)="CLIA"_$E(LA7ECH,4)_"2.16.840.1.113883.4.7"_$E(LA7ECH,4)_"ISO"
  1. . S $P(LA7OBX(23),$E(LA7ECH,1),7)="XX"
  1. . S $P(LA7OBX(23),$E(LA7ECH,1),10)=$P($G(^DIC(4,LA7DIV,99)),U)
  1. . S LA7DT=$S($P(LA7VAL,"^",6):$P(LA7VAL,"^",6),$P(LA76304(0),"^",3):$P(LA76304(0),"^",3),1:$$NOW^XLFDT)
  1. . S LA7OBX(24)=$$OBX24^LA7COBX(4,LA7DIV,LA7DT,LA7FS,LA7ECH)
  1. . S $P(LA7OBX(24),$E(LA7ECH),6)="USA"
  1. . S $P(LA7OBX(24),$E(LA7ECH),7)="L"
  1. . S $P(LA7OBX(24),$E(LA7ECH),9)=$P(LA7OBX(24),$E(LA7ECH),5) ;MU2 county code same as zip for now
  1. ;
  1. S LA7OBX(25)=$$OBX25^LA7COBX($$GET1^DIQ(9009029,DUZ(2),3027,"I"),DUZ(2),LA7FS,LA7ECH)
  1. S $P(LA7OBX(25),$E(LA7ECH),9)="NPI"_$E(LA7ECH,4)_"2.16.840.1.113883.4.6"_$E(LA7ECH,4)_"ISO"
  1. S $P(LA7OBX(25),$E(LA7ECH),10)="L"
  1. S $P(LA7OBX(25),$E(LA7ECH),13)="NPI"
  1. S $P(LA7OBX(25),$E(LA7ECH),14)="NPI_Facility"_$E(LA7ECH,4)_"2.16.840.1.113883.3.72.5.26"_$E(LA7ECH,4)_"ISO"
  1. S $P(LA7OBX(25),$E(LA7ECH),21)=$P(LA7OBX(25),$E(LA7ECH),6)
  1. I $G(LA7INPT) S $P(LA7OBX(25),$E(LA7ECH),7)="" ;mu2 inpatient
  1. D BUILDSEG^LA7VHLU(.LA7OBX,.LA7ARRAY,LA7FS)
  1. ;
  1. Q
  1. ;
  1. ;
  1. CHECK ; Check for missing units/reference ranges
  1. ;
  1. N LA7I,LA7X,LA7FLAG
  1. S LA7X=$P(LA7VAL,"^",5)
  1. ;
  1. ; If flag (NPC>1) indicates units/ranges are stored but pieces 5-9 are null then use values from file #60
  1. ; - some class III software still does not store this info in file #63 when NPC>1
  1. S LA7FLAG=0
  1. I $G(^LR(LRDFN,LRSS,LRIDT,"NPC"))>1 D
  1. . F LA7I=5:1:9 I $P(LA7VAL,"^",LA7I)'="" S LA7FLAG=1 Q
  1. I 'LA7FLAG D BUNR
  1. ;
  1. ; Evaluate low/high reference ranges in case M code in these fields.
  1. S:$G(SEX)="" SEX="M" S:$G(AGE)="" AGE=99
  1. F LA7I=2,3,11,12 I $E($P(LA7X,"!",LA7I),1,3)="$S(" D
  1. . S @("X="_$P(LA7X,"!",LA7I))
  1. . S $P(LA7X,"!",LA7I)=X
  1. ;
  1. ; Put units/reference ranges back in variable LA7VAL
  1. S $P(LA7VAL,"^",5)=LA7X
  1. ;
  1. Q
  1. ;
  1. ;
  1. BUNR ; Build units/normal ranges from file #60
  1. ;
  1. N LA7Y
  1. S LA7Y=$$REFUNIT^LA7VHLU1(LRSB,$P(LA76304(0),"^",5))
  1. ;
  1. ; Results missing units, use value from file #60
  1. I $P(LA7X,"!",7)="" S $P(LA7X,"!",7)=$P(LA7Y,"^",3)
  1. ;
  1. ; If results missing reference ranges, use values from file #60.
  1. I $P(LA7X,"!",2)="",$P(LA7X,"!",3)="",$P(LA7X,"!",11)="",$P(LA7X,"!",12)="" D
  1. . I $P(LA7X,"!",2)="",$P(LA7X,"!",3)="" D
  1. . . S $P(LA7X,"!",2)=$P(LA7Y,"^")
  1. . . S $P(LA7X,"!",3)=$P(LA7Y,"^",2)
  1. . I $P(LA7X,"!",11)="",$P(LA7X,"!",12)="" D
  1. . . S $P(LA7X,"!",11)=$P(LA7Y,"^",6)
  1. . . S $P(LA7X,"!",12)=$P(LA7Y,"^",7)
  1. Q