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

NHINVLR.m

Go to the documentation of this file.
  1. NHINVLR ;SLC/MKB -- Laboratory extract
  1. ;;1.0;NHIN;**1**;Oct 25, 2010;Build 11
  1. ;
  1. ; External References DBIA#
  1. ; ------------------- -----
  1. ; ^DPT 10035
  1. ; ^LAB(60 10054
  1. ; ^LRO(69 2407
  1. ; ^LR 525
  1. ; DIC 2051
  1. ; DIQ 2056
  1. ; LR7OR1,^TMP("LRRR",$J) 2503
  1. ;
  1. ; ------------ Get results from VistA ------------
  1. ;
  1. EN(DFN,BEG,END,MAX,ID) ; -- find patient's lab results
  1. N NHSUB,NHIDT,NHI,NHITM,LRDFN,SUB
  1. S DFN=+$G(DFN) Q:$G(DFN)<1
  1. S BEG=$G(BEG,1410101),END=$G(END,9999998),MAX=$G(MAX,999999)
  1. K ^TMP("LRRR",$J,DFN) S LRDFN=$G(^DPT(DFN,"LR")),NHSUB="CH"
  1. ;
  1. ; get result(s)
  1. I $L($G(ID)) D Q:NHI ;done
  1. . S NHSUB=$P(ID,";"),NHIDT=+$P(ID,";",2),(BEG,END)=9999999-NHIDT
  1. . S NHI=$P(ID,";",3) I NHI D ;skip loop - single result
  1. .. D RR^LR7OR1(DFN,,BEG,END,NHSUB)
  1. .. S SUB=$S("CH^MI"[NHSUB:NHSUB,1:"AP")_"(.NHITM)"
  1. .. D @SUB,XML(.NHITM)
  1. .. K ^TMP("LRRR",$J,DFN)
  1. ;
  1. D RR^LR7OR1(DFN,,BEG,END,NHSUB,,,MAX)
  1. S NHSUB="" F S NHSUB=$O(^TMP("LRRR",$J,DFN,NHSUB)) Q:NHSUB="" D
  1. . S NHIDT=0 F S NHIDT=$O(^TMP("LRRR",$J,DFN,NHSUB,NHIDT)) Q:NHIDT<1 D
  1. .. S NHI=0 F S NHI=$O(^TMP("LRRR",$J,DFN,NHSUB,NHIDT,NHI)) Q:NHI<1 D
  1. ... K NHITM S SUB=$S("CH^MI"[NHSUB:NHSUB,1:"AP")_"(.NHITM)"
  1. ... D @SUB,XML(.NHITM)
  1. K ^TMP("LRRR",$J,DFN)
  1. Q
  1. ;
  1. CH(LAB) ; -- return a Chemistry result in LAB("attribute")=value
  1. ; Expects ^TMP("LRRR",$J,DFN,"CH",NHIDT,NHI),LRDFN
  1. N CDT,LR0,LRI,X0,X,LOINC,ORD,CMMT K LAB
  1. S LAB("id")="CH;"_NHIDT_";"_NHI,LAB("type")="CH"
  1. S CDT=9999999-NHIDT,LAB("collected")=CDT
  1. S LR0=$G(^LR(LRDFN,"CH",NHIDT,0)),LRI=$G(^(NHI))
  1. S LAB("status")="completed",LAB("resulted")=$P(LR0,U,3)
  1. S X0=$G(^TMP("LRRR",$J,DFN,"CH",NHIDT,NHI))
  1. S LAB("test")=$P($G(^LAB(60,+X0,0)),U) ;$P(X0,U,10)?
  1. S:$L($P(X0,U,2)) LAB("result")=$P(X0,U,2)
  1. S:$L($P(X0,U,4)) LAB("units")=$P(X0,U,4)
  1. S:$L($P(X0,U,3)) LAB("interpretation")=$P(X0,U,3)
  1. S X=$P(X0,U,5) I $L(X),X["-" S LAB("low")=$P(X,"-"),LAB("high")=$P(X,"-",2)
  1. S LAB("localName")=$S($L($P(X0,U,15)):$P(X0,U,15),1:LAB("test"))
  1. S LAB("groupName")=$P(X0,U,16) ;accession#
  1. S X=$P($P(LRI,U,3),"!",3) S:X LOINC=$$GET1^DIQ(95.3,X_",",.01)
  1. S X=+$P(X0,U,19) I X D ;specimen
  1. . N VUID,IENS,NHY S VUID="",IENS=X_","
  1. . D GETS^DIQ(61,IENS,".01;2",,"NHY")
  1. . S LAB("specimen")=$G(NHY(61,IENS,2))_U_$G(NHY(61,IENS,.01)) ;SNOMED^name
  1. . S LAB("sample")=$$GET1^DIQ(61,X_",",4.1) ;name
  1. . ; LOINC=+$G(^LAB(60,+X0,1,X,95.3))
  1. . S:'$G(LOINC) LOINC=$$GET1^DIQ(60.01,X_","_+X0_",",95.3)
  1. . I LOINC S LAB("loinc")=LOINC,VUID=$$VUID^NHINV(+LOINC,95.3)
  1. . S:VUID LAB("vuid")=VUID
  1. S ORD=+$P(X0,U,17) S:ORD LAB("labOrderID")=ORD
  1. S X=$$ORDER(ORD,+X0) S:X LAB("orderID")=X
  1. S X=$P(LR0,U,14)
  1. S:X LAB("facility")=$$STA^XUAF4(X)_U_$P($$NS^XUAF4(X),U)
  1. I 'X S LAB("facility")=$$FAC^NHINV ;local stn#^name
  1. I $D(^TMP("LRRR",$J,DFN,"CH",NHIDT,"N")) M CMMT=^("N") S LAB("comment")=$$STRING^NHINV(.CMMT)
  1. Q
  1. ;
  1. ORDER(LABORD,TEST) ; -- return #100 order for Lab order# & Test
  1. N Y,D,S,T S Y=""
  1. S D=$O(^LRO(69,"C",LABORD,0)) I D D
  1. . S S=0 F S S=$O(^LRO(69,"C",LABORD,D,S)) Q:S<1 D
  1. .. S T=0 F S T=$O(^LRO(69,D,1,S,2,T)) Q:T<1 I +$G(^(T,0))=TEST S Y=+$P(^(0),U,7)
  1. Q Y
  1. ;
  1. MI(LAB) ; -- return a Microbiology result in LAB("attribute")=value
  1. ; Expects ^TMP("LRRR",$J,DFN,"MI",NHIDT,NHI),LRDFN
  1. N ID,CDT,X0,X,CMMT,LR0 K LAB
  1. S X0=$G(^TMP("LRRR",$J,DFN,"MI",NHIDT,NHI)) Q:$L($P(X0,U))'>1
  1. S LAB("id")="MI;"_NHIDT_"#"_NHI,LAB("status")="completed"
  1. S LAB("type")="MI",CDT=9999999-NHIDT,LAB("collected")=CDT
  1. S LR0=$G(^LR(LRDFN,"MI",NHIDT,0)),LAB("resulted")=$P(LR0,U,3)
  1. S:$L($P(X0,U,2)) LAB("result")=$P(X0,U,2)
  1. S:$L($P(X0,U,4)) LAB("units")=$P(X0,U,4)
  1. S:$L($P(X0,U,3)) LAB("interpretation")=$P(X0,U,3)
  1. S (LAB("test"),LAB("localName"))=$P(X0,U,15)
  1. S X=+$P(X0,U,19) I X D ;specimen
  1. . N IENS,NHY S IENS=X_","
  1. . D GETS^DIQ(61,IENS,".01;2",,"NHY")
  1. . S LAB("specimen")=$G(NHY(61,IENS,2))_U_$G(NHY(61,IENS,.01)) ;SNOMED^name
  1. . S LAB("sample")=$$GET1^DIQ(61,X_",",4.1) ;name
  1. S X=$P(LR0,U,14)
  1. S:X LAB("facility")=$$STA^XUAF4(X)_U_$P($$NS^XUAF4(X),U)
  1. I 'X S LAB("facility")=$$FAC^NHINV ;local stn#^name
  1. I $D(^TMP("LRRR",$J,DFN,"MI",NHIDT,"N")) M CMMT=^("N") S LAB("comment")=$$STRING^NHINV(.CMMT)
  1. Q
  1. ;
  1. AP(LAB) ; -- return a Pathology result in LAB("attribute")=value
  1. K LAB ;not implemented yet
  1. Q
  1. ;
  1. TYPE(X) ; -- Return name of lab section
  1. N NHIY,Y S Y=X
  1. D FIND^DIC(68,,.01,"PQX",X,,"B",,,"NHIY")
  1. S:$G(NHIY("DILIST",1,0)) Y=$P(NHIY("DILIST",1,0),U,2) ;name
  1. Q Y
  1. ;
  1. ; ------------ Return data to middle tier ------------
  1. ;
  1. XML(LAB) ; -- Return result as XML in @NHIN@(#)
  1. N ATT,X,Y,P,NAMES,TAG
  1. D ADD("<lab>") S NHINTOTL=$G(NHINTOTL)+1
  1. S ATT="" F S ATT=$O(LAB(ATT)) Q:ATT="" D D:$L(Y) ADD(Y)
  1. . S X=$G(LAB(ATT)),Y="" Q:'$L(X)
  1. . I ATT="comment" S Y="<"_ATT_" xml:space='preserve'>"_$$ESC^NHINV(X)_"</"_ATT_">" Q
  1. . I X'["^" S Y="<"_ATT_" value='"_$$ESC^NHINV(X)_"' />" Q
  1. . I $L(X)>1 D S Y=""
  1. .. S Y="<"_ATT_" ",NAMES="code^name^Z"
  1. .. F P=1:1 S TAG=$P(NAMES,U,P) Q:TAG="Z" I $L($P(X,U,P)) S Y=Y_TAG_"='"_$$ESC^NHINV($P(X,U,P))_"' "
  1. .. S Y=Y_"/>" D ADD(Y)
  1. D ADD("</lab>")
  1. Q
  1. ;
  1. ADD(X) ; -- Add a line @NHIN@(n)=X
  1. S NHINI=$G(NHINI)+1
  1. S @NHIN@(NHINI)=X
  1. Q