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

NHINVLRA.m

Go to the documentation of this file.
  1. NHINVLRA ;SLC/MKB -- Laboratory extract by accession
  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. ; ^VA(200 10060
  1. ; DIC 2051
  1. ; DIQ 2056
  1. ; LR7OR1,^TMP("LRRR",$J) 2503
  1. ; LR7OSUM,^TMP("LRC") 2766
  1. ; PXAPI 1894
  1. ; XUAF4 2171
  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,LR0,ORD,X
  1. S DFN=+$G(DFN) Q:$G(DFN)<1
  1. S BEG=$G(BEG,1410101),END=$G(END,9999998),MAX=$G(MAX,999999)
  1. S LRDFN=$G(^DPT(DFN,"LR")),NHSUB=""
  1. K ^TMP("LRRR",$J,DFN)
  1. ;
  1. ; get result(s)
  1. I $L($G(ID)) D ;reset search parameters
  1. . S NHSUB=$P(ID,";"),NHIDT=+$P(ID,";",2)
  1. . S:NHIDT (BEG,END)=9999999-NHIDT
  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 I $O(^(NHIDT,0)) D
  1. .. K NHITM,CMMT I "CH^MI"'[NHSUB D AP(.NHITM),XML(.NHITM) Q
  1. .. S NHITM("type")=NHSUB,NHITM("id")=NHSUB_";"_NHIDT
  1. .. S NHITM("collected")=9999999-NHIDT,NHITM("status")="completed"
  1. .. S LR0=$G(^LR(LRDFN,NHSUB,NHIDT,0))
  1. .. S NHITM("resulted")=$P(LR0,U,3),X=+$P(LR0,U,5) I X D
  1. ... N IENS,NHY S IENS=X_","
  1. ... D GETS^DIQ(61,IENS,".01:2",,"NHY")
  1. ... S NHITM("specimen")=$G(NHY(61,IENS,2))_U_$G(NHY(61,IENS,.01)) ;SNOMED^name
  1. ... S NHITM("sample")=$$GET1^DIQ(61,X_",",4.1) ;name
  1. .. S NHITM("groupName")=$P(LR0,U,6),X=+$P(LR0,U,14)
  1. .. S:X NHITM("facility")=$$STA^XUAF4(X)_U_$P($$NS^XUAF4(X),U)
  1. .. I 'X S NHITM("facility")=$$FAC^NHINV ;local stn#^name
  1. .. S:NHSUB="MI" NHITM("content")=$$TEXT(DFN,NHSUB,NHIDT)
  1. .. S NHI=0 F S NHI=$O(^TMP("LRRR",$J,DFN,NHSUB,NHIDT,NHI)) Q:NHI<1 D
  1. ... S X=$S(NHSUB="MI":$$MI,1:$$CH)
  1. ... S:$L(X) NHITM("lab",NHI)=X
  1. ... S:$G(ORD) NHITM("labOrderID")=ORD
  1. .. I $D(^TMP("LRRR",$J,DFN,NHSUB,NHIDT,"N")) M CMMT=^("N") S NHITM("comment")=$$STRING^NHINV(.CMMT)
  1. .. D XML(.NHITM)
  1. K ^TMP("LRRR",$J,DFN)
  1. Q
  1. ;
  1. CH() ; -- return a Chemistry result as:
  1. ; id^test^result^interpretation^units^low^high^loinc^vuid^order
  1. ; Expects ^TMP("LRRR",$J,DFN,"CH",NHIDT,NHI),LRDFN
  1. N X,Y,X0,NODE,CMMT,LOINC
  1. S X0=$G(^TMP("LRRR",$J,DFN,"CH",NHIDT,NHI)),NODE=$G(^LR(LRDFN,"CH",NHIDT,NHI))
  1. S X=$P($G(^LAB(60,+X0,0)),U)
  1. S Y="CH;"_NHIDT_";"_NHI_U_X_U_$P(X0,U,2,4)
  1. S X=$P(X0,U,5) I $L(X),X["-" S X=$TR(X,"- ","^"),$P(Y,U,6,7)=X
  1. S X=$P($P(NODE,U,3),"!",3) S:X LOINC=$$GET1^DIQ(95.3,X_",",.01)
  1. I '$G(LOINC) S X=+$P(X0,U,19) S:X LOINC=$$LOINC(+X0,X)
  1. S $P(Y,U,8,9)=$G(LOINC)_U_$$VUID^NHINV(+LOINC,95.3)
  1. S ORD=+$P(X0,U,17),X=$$ORDER(ORD,+X0) S:X $P(Y,U,10)=X
  1. Q Y
  1. ;
  1. MI() ; -- return a Microbiology result as:
  1. ; id^test^result^interpretation^units
  1. ; Expects ^TMP("LRRR",$J,DFN,"MI",NHIDT,NHI)
  1. N Y,X0
  1. S X0=$G(^TMP("LRRR",$J,DFN,"MI",NHIDT,NHI)),Y=""
  1. S:$L($P(X0,U))>1 Y="MI;"_NHIDT_";"_NHI_U_$P(X0,U,1,4)
  1. Q Y
  1. ;
  1. AP(LAB) ; -- return a Pathology result in LAB("attribute")=value
  1. N LR0,X,I,NODE
  1. S LR0=$G(^LR(LRDFN,NHSUB,NHIDT,0))
  1. S LAB("type")=NHSUB,LAB("id")=NHSUB_";"_NHIDT
  1. S LAB("collected")=9999999-NHIDT,LAB("status")="completed"
  1. S LAB("resulted")=$P(LR0,U,11),LAB("groupName")=$P(LR0,U,6)
  1. S X="",I=0 F S I=$O(^LR(LRDFN,NHSUB,NHIDT,.1,I)) Q:I<1 S X=X_$S($L(X):", ",1:"")_$P($G(^(I,0)),U)
  1. S:$L(X) LAB("specimen")=U_X
  1. S LAB("facility")=$$FAC^NHINV
  1. S NODE=$S(NHSUB="AU":$NA(^LR(LRDFN,101)),1:$NA(^LR(LRDFN,NHSUB,NHIDT,.05)))
  1. S I=0 F S I=$O(@NODE@(I)) Q:I<1 S X=+$P($G(@NODE@(I,0)),U,2) I X D
  1. . N LT,NT
  1. . S LT=$$GET1^DIQ(8925,+X_",",.01) Q:$P(LT," ")="Addendum"
  1. . S NT=$$GET1^DIQ(8925,+X_",",".01:1501")
  1. . S LAB("document",I)=+X_U_LT_U_NT
  1. I '$O(NHITM("document",0)) S NHITM("content")=$$TEXT(DFN,NHSUB,NHIDT)
  1. Q
  1. ;
  1. LOINC(TEST,SPEC) ; -- Look up LOINC code, if not mapped
  1. N Y,LAM,NHIN,IENS S Y=""
  1. S TEST=+$G(TEST),SPEC=+$G(SPEC)
  1. S LAM=$G(^LAB(60,TEST,64)),LAM=$S($P(LAM,U,2):$P(LAM,U,2),1:+LAM)
  1. D GETS^DIQ(64.01,SPEC_","_LAM_",","30*",,"NHIN")
  1. S IENS=$O(NHIN(64.02,"")) S:IENS Y=$G(NHIN(64.02,IENS,4))
  1. S:'Y Y=$$GET1^DIQ(60.01,SPEC_","_TEST_",",95.3)
  1. Q Y
  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. NAME(X) ; -- Return name of subscript X
  1. I X="AU" Q "AUTOPSY"
  1. I X="BB" Q "BLOOD BANK"
  1. I X="CH" Q "CHEM,HEM,TOX,RIA,SER,etc."
  1. I X="CY" Q "CYTOLOGY"
  1. I X="EM" Q "ELECTRON MICROSCOPY"
  1. I X="MI" Q "MICROBIOLOGY"
  1. I X="SP" Q "SURGICAL PATHOLOGY"
  1. Q "ANATOMIC PATHOLOGY"
  1. ;
  1. RPT(DFN,ID,RPT) ; -- return report as a TIU document
  1. S DFN=+$G(DFN),ID=$G(ID) Q:DFN<1 Q:'$L(ID)
  1. N SUB,IDT,LRDFN,LR0,X
  1. S SUB=$P(ID,";"),IDT=+$P(ID,";",2)
  1. S LRDFN=$G(^DPT(DFN,"LR")),LR0=$G(^LR(LRDFN,SUB,IDT,0))
  1. S RPT("id")=ID,RPT("referenceDateTime")=9999999-IDT
  1. S RPT("localTitle")=$$NAME(SUB),RPT("status")="COMPLETED"
  1. S X=+$P(LR0,U,14),RPT("facility")=$$FAC^NHINV(X)
  1. S X=$P(LR0,U,13) I X["SC(" D
  1. . N CDT,HLOC S HLOC=+X,CDT=9999999-IDT
  1. . S X=$$GETENC^PXAPI(DFN,CDT,HLOC)
  1. . S:X RPT("encounter")=+X
  1. S X=+$P(LR0,U,4) S:X RPT("clinician",1)=X_U_$P($G(^VA(200,X,0)),U)
  1. S RPT("content")=$$TEXT(DFN,SUB,IDT)
  1. Q
  1. ;
  1. TEXT(DFN,SUB,IDT) ; -- return report text as a string
  1. N LRDFN,DATE,NAME,NHS,NHY,I,X,Y
  1. K ^TMP("LRC",$J),^TMP("LRH",$J),^TMP("LRT",$J)
  1. S DATE=9999999-+$G(IDT),NAME=$$NAME(SUB),NHS(NAME)=""
  1. D EN^LR7OSUM(.NHY,DFN,DATE,DATE,,,.NHS)
  1. S I=+$G(^TMP("LRH",$J,NAME))+1,Y=$G(^TMP("LRC",$J,I,0)) ;LRH=header: Y=1st line
  1. F S I=$O(^TMP("LRC",$J,I)) Q:I<1 S X=$G(^(I,0)) Q:X?1."=" S Y=Y_$C(13,10)_X
  1. K ^TMP("LRC",$J),^TMP("LRH",$J),^TMP("LRT",$J)
  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,NAMES
  1. D ADD("<accession>") S NHINTOTL=$G(NHINTOTL)+1
  1. S ATT="" F S ATT=$O(LAB(ATT)) Q:ATT="" D D:$L(Y) ADD(Y)
  1. . I $O(LAB(ATT,0)) D S Y="" Q
  1. .. D ADD("<"_ATT_"s>")
  1. .. S NAMES=$S(ATT="document":"id^localTitle^nationalTitle^Z",ATT="lab":"id^test^result^interpretation^units^low^high^loinc^vuid^order^Z",1:"code^name^Z")
  1. .. S I=0 F S I=$O(LAB(ATT,I)) Q:I<1 D
  1. ... S X=$G(LAB(ATT,I))
  1. ... S Y="<"_ATT_" "_$$LOOP_"/>" D ADD(Y)
  1. .. D ADD("</"_ATT_"s>")
  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 ATT="content" 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 NAMES="code^name^Z"
  1. .. S Y="<"_ATT_" "_$$LOOP_"/>" D ADD(Y)
  1. D ADD("</accession>")
  1. Q
  1. ;
  1. LOOP() ; -- build sub-items string from NAMES and X
  1. N STR,P,TAG S STR=""
  1. F P=1:1 S TAG=$P(NAMES,U,P) Q:TAG="Z" I $L($P(X,U,P)) S STR=STR_TAG_"='"_$$ESC^NHINV($P(X,U,P))_"' "
  1. Q STR
  1. ;
  1. ADD(X) ; -- Add a line @NHIN@(n)=X
  1. S NHINI=$G(NHINI)+1
  1. S @NHIN@(NHINI)=X
  1. Q