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

VPRSDAB.m

Go to the documentation of this file.
  1. VPRSDAB ;SLC/MKB -- SDA Lab utilities ;4/11/19 21:05
  1. ;;1.0;VIRTUAL PATIENT RECORD;**20,26,27,31,35**;Sep 01, 2011;Build 16
  1. ;;Per VHA Directive 6402, this routine should not be modified.
  1. ;
  1. ; External References DBIA#
  1. ; ------------------- -----
  1. ; ^DDE 7008
  1. ; ^LAB(60 10054
  1. ; ^LR 525
  1. ; ^OR(100 5771
  1. ; ^ORD(100.98 6982
  1. ; ^ORD(101.43 2843
  1. ; DIC 2051
  1. ; DIQ 2056
  1. ; LR7OR1, ^TMP("LRRR",$J 2503
  1. ; LR7OSUM, ^TMP("LR"*,$J 2766
  1. ; LR7OU1 2955
  1. ; LRPXAPIU 4246
  1. ; ORQ1, ^TMP("ORR",$J) 3154
  1. ; ORX8 2467,3071
  1. ;
  1. ORDERS ; -- Return DLIST(#)=order# of Lab orders
  1. ; Includes VBECS/BB orders [not in use yet]
  1. ; Expects DFN, DSTRT,DSTOP, DMAX
  1. N ORDG,VBECS,ORIGVIEW,ORKID,ORLIST,VPRI,VPRN,ORDER,X0,X3
  1. S ORDG=+$O(^ORD(100.98,"B","LAB",0))
  1. S VBECS=+$$FIND1^DIC(9.4,,"QX","VBEC","C")
  1. ; return original view, child orders
  1. S ORIGVIEW=2,ORKID=1
  1. D EN^ORQ1(DFN_";DPT(",ORDG,6,,DSTRT,DSTOP,,,,1) S VPRN=0
  1. S VPRI=0 F S VPRI=$O(^TMP("ORR",$J,ORLIST,VPRI)) Q:VPRI<1 S ORDER=$G(^(VPRI)) D Q:VPRN'<DMAX
  1. . I $P($P(ORDER,U),";",2)>1 Q ;skip order actions
  1. . S ORDER=+ORDER,X0=$G(^OR(100,ORDER,0)),X3=$G(^(3))
  1. . Q:$P(X3,U,3)=13 Q:$P(X3,U,3)=14 ;cancelled or lapsed
  1. . ; only VBECS parent orders, to get to veiled child orders
  1. . I $O(^OR(100,ORDER,2,0)) Q:$P(X0,U,14)'=VBECS D Q
  1. .. S ORKID=0 F S ORKID=$O(^OR(100,ORDER,2,ORKID)) Q:ORKID<1 D
  1. ... Q:$P($G(^OR(100,ORKID,0)),U,14)'=VBECS ;VBECS child orders
  1. ... S VPRN=VPRN+1,DLIST(VPRN)=ORKID
  1. . I $P(X3,U,9),$P($G(^OR(100,+$P(X3,U,9),0)),U,14)=VBECS Q
  1. . S VPRN=VPRN+1,DLIST(VPRN)=ORDER
  1. K ^TMP("ORR",$J)
  1. Q
  1. ;
  1. ONE(ID) ; -- ID processing for Lab order returns: [not in use yet]
  1. ; ORPK = Lab order/data string
  1. ; ORDAD = parent order#
  1. ; VPRCDT = Lab collection (start) date.time
  1. ; VPRVBEC = 1 or 0, if VBECS order
  1. ; ORLAB = associated Lab child order#, if VBECS
  1. ;
  1. S ID=+$G(ID) Q:ID<1 S ORLAB=""
  1. S VPRCDT=$P($G(^OR(100,ID,0)),U,8),ORDAD=$P($G(^(3)),U,9),ORPK=$G(^(4))
  1. S VPRVBEC=$$VB(ID) I VPRVBEC D Q ;get lab child#
  1. . S ORLAB=$$VALUE^ORX8(ID,"LAB") I 'ORLAB S DDEOUT=1 Q
  1. . S VPRCDT=$P($G(^OR(100,ORLAB,0)),U,8),ORPK=$G(^(4))
  1. Q
  1. ;
  1. VB(ORIFN) ; -- return 1 or 0, if order is for Blood Bank
  1. N X,Y,DG S Y=0
  1. S X=$P($G(^OR(100,+$G(ORIFN),0)),U,11),DG=$P($G(^ORD(100.98,+X,0)),U,3)
  1. I DG?1"VB".E S Y=1
  1. Q Y
  1. ;
  1. DG(DG) ; -- convert DG to section, if needed
  1. ; Returns LRSUB = DG abbreviation
  1. N X,Y S X="",Y=0 D ;get LR section
  1. . S X=$P($G(ORPK),";",4) Q:$L(X)
  1. . S X=$P($G(^ORD(101.43,+$G(ORIT),"LR")),U,6) Q:$L(X)
  1. . I $G(VPRVBEC) S X="VBEC"
  1. I X'="" S Y=$O(^ORD(100.98,"B",X,0)) S:Y DG=Y
  1. S LRSUB=$P($G(^ORD(100.98,+$G(DG),0)),U,3)
  1. Q
  1. ;
  1. LRDFN(ORIFN) ; -- set up LRDFN for Lab Order
  1. I '$G(DFN),$G(ORIFN) S DFN=+$$GET1^DIQ(100,+ORIFN_",",.02,"I")
  1. S LRDFN=$S($G(DFN):$$LRDFN^LRPXAPIU(DFN),1:0)
  1. Q
  1. ;
  1. RSLT ; -- get Entity for LabOrder Result
  1. ; Returns VALUE, ENTITY, DATA
  1. N SUB,IDT S SUB=$S($G(VPRVBEC):"BB",1:$G(LRSUB))
  1. I SUB="BB" S DDEOUT=1 Q ;for now
  1. S IDT=$P($G(ORPK),";",5) S:'IDT IDT=9999999-$G(VPRCDT)
  1. S VALUE=IDT_","_+$G(LRDFN),ENTITY="VPR LR"_SUB_" RESULT"
  1. S ENTITY=+$O(^DDE("B",ENTITY,0)) I ENTITY<1 S DDEOUT=1 Q
  1. S DATA=+$P($G(ORIT),U,3) ;#60 ien ordered
  1. Q
  1. ;
  1. CH(TEST) ; -- builds DLIST(#) of result nodes for TEST
  1. ; called from ResultItems in VPR LRCH RESULT, expects DIEN
  1. Q:'$P($G(LR0),U,3) ;only return final results
  1. N T,X S TEST=+$G(TEST)
  1. D EXPAND^LR7OU1(TEST,.DLIST)
  1. S T=0 F S T=$O(DLIST(T)) Q:T<1 D
  1. . S X=$P($G(^LAB(60,T,0)),U,3) I X'="O",X'="B" Q ;not displayable
  1. . ; DLIST(60 ien) = CH data node#,LRIDT,LRDFN
  1. . S DLIST(T)=$$LRDN^LRPXAPIU(T)_","_DIEN
  1. Q
  1. ;
  1. VALRNG(LOW,HIGH) ; -- Validate that range values will be accepted in SDA format for <ResultNormalRange> post REFRNG execution
  1. ;LOW - Range low value
  1. ;HIGH - range high value
  1. ;RESULT - Ture/False value, will pass or fail SDA <ResultNormalRnage> format
  1. N RESULT
  1. S RESULT=1
  1. S LOW=$G(LOW),HIGH=$G(HIGH)
  1. ;Strip any surrounding quotes
  1. I LOW?1"""".E1"""" S LOW=$E(LOW,2,$L(LOW)-1)
  1. I HIGH?1"""".E1"""" S HIGH=$E(HIGH,2,$L(HIGH)-1)
  1. ;If both parameters are defined, we have a ##-## range and the first character of LOW and HIGH must be numeric.
  1. I LOW'="",(HIGH'="") D
  1. .I $E(LOW)'?1N,($E(LOW,1,2)'?1"."1N) S RESULT=0
  1. .I $E(HIGH)'?1N,($E(HIGH,1,2)'?1"."1N) S RESULT=0
  1. Q RESULT
  1. ;
  1. REFRNG(RLV,RHV) ; -- format low-high ref range string
  1. ;RLV - Range low value
  1. ;RHV - Range high value
  1. ;Based on supported EN^LRLRRVF
  1. S RLV=$G(RLV),RHV=$G(RHV)
  1. I RLV="",RHV="" Q RLV
  1. ;Strip any surrounding quotes
  1. I RLV?1"""".E1"""" S RLV=$E(RLV,2,$L(RLV)-1)
  1. I RHV?1"""".E1"""" S RHV=$E(RHV,2,$L(RHV)-1)
  1. ;If only the low is defined
  1. I RLV'="",RHV="" D Q RLV
  1. . I RLV=0 S RLV=">"_RLV Q
  1. . I ($E(RLV)="<")!($E(RLV)=">") Q ;ok
  1. . I (RLV?.N.".".N) S RLV=">"_RLV Q ;numeric
  1. . ;else return RLV as is (non-numeric)
  1. ;If only the high is defined
  1. I RLV="",RHV'="" D Q RHV
  1. . I RHV=0 S RHV="<"_RHV Q
  1. . I ($E(RHV)="<")!($E(RHV)=">") Q ;ok
  1. . I (RHV?.N.".".N) S RHV="<"_RHV Q ;numeric
  1. . S RHV="-"_RHV
  1. ;If both are defined
  1. Q RLV_"-"_RHV
  1. ;
  1. MI1(D0,D1) ; -- return MI approval node
  1. N GBL,N,X,Y
  1. S D0=+$G(D0),D1=+$G(D1),GBL=$NA(^LR(D0,"MI",D1)),Y=""
  1. F N=1,5,8,11,16 S X=$G(@GBL@(N)) I X,$P(X,U,2)="F" D Q
  1. . S Y=$P(X,U,1,2)_U_$S(N=11:$P(X,U,5),1:$P(X,U,3))
  1. Q Y
  1. ;
  1. APRPTS ; -- Anatomic Pathology reports query [from DDEGET]
  1. ; Expects DFN, DSTRT,DSTOP, DMAX, LRDFN
  1. ; Return DLIST(#) = IDT,LRDFN~SUB
  1. N SUB,IDT,VPRN,CTR S VPRN=0
  1. D RR^LR7OR1(DFN,,DSTRT,DSTOP,"AP")
  1. S SUB="" F S SUB=$O(^TMP("LRRR",$J,DFN,SUB)) Q:SUB="" D
  1. . S IDT=0 F S IDT=$O(^TMP("LRRR",$J,DFN,SUB,IDT)) Q:IDT<1 I $O(^(IDT,0)) D Q:VPRN'<DMAX
  1. .. Q:$O(^LR(LRDFN,SUB,IDT,.05,0)) ;report in TIU
  1. .. Q:'$P($G(^LR(LRDFN,SUB,IDT,0)),U,11) ;not final results
  1. .. S VPRN=VPRN+1,DLIST(VPRN)=IDT_","_LRDFN_"~"_SUB
  1. K ^TMP("LRRR",$J,DFN)
  1. Q
  1. ;
  1. MIRPTS ; -- Microbiology reports query [from DDEGET]
  1. ; Expects DFN, DSTRT,DSTOP, DMAX, LRDFN
  1. ; Return DLIST(#) = IDT,LRDFN~SUB
  1. N IDT,VPRN,CTR S VPRN=0
  1. D RR^LR7OR1(DFN,,DSTRT,DSTOP,"MI")
  1. S IDT=0 F S IDT=$O(^TMP("LRRR",$J,DFN,"MI",IDT)) Q:IDT<1 I $O(^(IDT,0)) D Q:VPRN'<DMAX
  1. . ;Q:'$P($G(^LR(LRDFN,"MI",IDT,0)),U,3) ;not final results
  1. . Q:'$$MI1^VPRSDAB(LRDFN,IDT) ;not final results
  1. . S VPRN=VPRN+1,DLIST(VPRN)=IDT_","_LRDFN_"~MI"
  1. K ^TMP("LRRR",$J,DFN)
  1. Q
  1. ;
  1. AP1(ID) ; -- parse ID='IDT,LRDFN~SUB' for AP,MI report
  1. ; Returns DIFN, LRSUB, updated ID, LR0=^LR(LRDFN,SUB,IDT,0)
  1. ; and LR1=^LR(LRDFN,"MI",IDT,#) report approval if MI
  1. S ID=$G(ID),LRSUB=$P(ID,"~",2),ID=$P(ID,"~")
  1. I LRSUB D ;sub-file#
  1. . S DIFN=LRSUB,LRSUB=$S(DIFN=63.05:"MI",DIFN=63.09:"CY",DIFN=63.02:"EM",DIFN=63.08:"SP",1:"AP")
  1. E S DIFN=$S(LRSUB="MI":63.05,LRSUB="CY":63.09,LRSUB="EM":63.02,LRSUB="SP":63.08,1:0)
  1. I DIFN<1 S DDEOUT=1 Q
  1. S:'$G(LRDFN) LRDFN=+$P(ID,",",2)
  1. S LR0=$G(^LR(LRDFN,LRSUB,+ID,0))
  1. I LRSUB="MI" S LR1=$$MI1(LRDFN,+ID)
  1. Q
  1. ;
  1. RR ; -- returns addl reports for order in DLIST(#) = IDT;SUB or IEN;TIU
  1. ; Expects DFN, ORPK, LRDFN
  1. N SUB,IDT,X,CNT
  1. Q:$G(DFN)<1 Q:$P($G(ORPK),";",4)=""
  1. D RR^LR7OR1(DFN,ORPK)
  1. S SUB=$P(ORPK,";",4),CNT=0
  1. S IDT=0 F S IDT=$O(^TMP("LRRR",$J,DFN,SUB,IDT)) Q:IDT<1 D
  1. . Q:$P(ORPK,";",5)=IDT ;returned in Result.DocumentNumber
  1. . I SUB="MI" Q:'$$MI1(LRDFN,IDT) S X=IDT_";MI"
  1. . I SUB'="MI" Q:'$P($G(^LR(LRDFN,SUB,IDT,0)),U,11) S X=$$LRTIU(SUB,IDT)
  1. . S CNT=CNT+1,DLIST(CNT)=X
  1. Q
  1. ;
  1. LRTIU(IDT,SUB) ; -- return TIU ien of lab report
  1. N I,IEN,X,Y
  1. S IDT=$G(IDT),SUB=$G(SUB),Y=IDT_";"_SUB
  1. S I=0 F S I=$O(^LR(LRDFN,SUB,IDT,.05,I)) Q:I<1 S IEN=+$P($G(^(I,0)),U,2),X=+$$GET1^DIQ(8925,IEN,.05,"I") I (X=7)!(X=8) S Y=IEN_";TIU" Q
  1. Q Y
  1. ;
  1. RPT(SUB,IDT) ; -- return report text in WP(), expects DFN
  1. N I,DATE,NAME,VPRS,VPRY,X,LRAU
  1. N LRSUB,TAG,FILE,FIELD,IEN ;protect
  1. K ^TMP("LRC",$J),^TMP("LRH",$J),^TMP("LRT",$J)
  1. S DATE=9999999-+$G(IDT),NAME=$S(SUB="EM":"EM",1:$$NAME^VPRDLRA(SUB)),VPRS(NAME)=""
  1. D EN^LR7OSUM(.VPRY,DFN,DATE,DATE,,,.VPRS)
  1. S I=+$G(^TMP("LRH",$J,NAME)) ;LRH=header
  1. F S I=$O(^TMP("LRC",$J,I)) Q:I<1 S X=$G(^(I,0)) Q:X?1."=" S WP(I)=X
  1. K ^TMP("LRC",$J),^TMP("LRH",$J),^TMP("LRT",$J)
  1. Q