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

LR7OB3.m

Go to the documentation of this file.
  1. LR7OB3 ;DALOI/DCM/JAH - Build message, backdoor from Lab order #;Sep 27, 2018@10:00:00
  1. ;;5.2;LAB SERVICE;**121,187,272,291,462,512,541**;Sep 27, 1994;Build 7
  1. 69 K ^TMP("LRX",$J)
  1. D 69^LR7OB69(ODT,SN) Q:'$D(^TMP("LRX",$J,69)) G OUT:'$D(DFN) D:LRFIRST FIRST^LR7OB0 S LRFIRST=0
  1. SNEAK ;
  1. N Y,Y9,Y10,Y11,GRP,L1,L2,L3,END,LROR100
  1. S IFN=0 F S IFN=$O(^TMP("LRX",$J,69,IFN)) Q:IFN<1 S (COBR,COBX)=0 D
  1. . I $O(^TMP("LRX",$J,69,IFN,68,0)) S Z=^TMP("LRX",$J,69,IFN,68) D Q
  1. .. S IFN1=0 F S IFN1=$O(^TMP("LRX",$J,69,IFN,68,IFN1)) Q:IFN1<1 S Z1=^TMP("LRX",$J,69,IFN,68,IFN1) D
  1. ... S (Y9,Y10,Y11)="" I $P($G(^LAB(60,+Z1,64)),"^") S Y9=$P(^(64),"^"),Y10=$P(^LAM(Y9,0),"^"),Y9=$P(^(0),"^",2),Y11="99NLT"
  1. ... S X1=$$UVID^LR7OU0($P(Z1,"^"),$P(^TMP("LRX",$J,69),"^",10),Y9,Y11,Y10,.MSG,$G(SS))
  1. ... S X2=$$HL7DT^LR7OU0($P(Z,"^",4)) ;Obs Start date
  1. ... S X3=$$ACTCODE^LR7OU0($P(^TMP("LRX",$J,69),"^",4)) ;Specimen Act Code
  1. ... S X4=$$HL7DT^LR7OU0($P(Z,"^",5)) ;Specimen Received D/T
  1. ... S X5=$$SAMP^LR7OU0($P(^TMP("LRX",$J,69),"^",3),$P(^TMP("LRX",$J,69),"^",10)) ;Specimen Source
  1. ... S X6=$P(Z,"^",3) ;Filler Fld 1 (Accession)
  1. ... S X7=$$HL7DT^LR7OU0($P(Z,"^",6)) ;Results rpt/Sts Change D/T
  1. ... ;CPRS order number:
  1. ... S LROR100=$P($G(^TMP("LRX",$J,69,IFN)),"^",7)
  1. ... ;
  1. ... ;Check to see if the CPRS order number matches the ORC order number
  1. ... I $P($P(@MSG@(ORCMSG),"|",3),"^")'=LROR100 D
  1. .... N LRORC
  1. .... S LRORC=$P(@MSG@(ORCMSG),"|",3)
  1. .... S $P(LRORC,"^")=LROR100
  1. .... S $P(@MSG@(ORCMSG),"|",3)=LRORC
  1. ... S (GRP,END)=0
  1. ... I '$G(CORRECT),$P(Z,"^",6) S GRP=1
  1. ... ;LR*5.2*512 change on line below so that status of each panel and/or
  1. ... ;atomic test is evaluated: added $P(Z1,"^",4):"F"
  1. ... ;Variables:
  1. ... ; Z = (1) Lab order number ^ (2) LRDFN ^ (3) accession ^ (4) draw time ^
  1. ... ; (5) lab arrival time ^ (6) date/time results available (i.e. accession complete date)
  1. ... ; (7) inverse date (i.e. file 63 subscript corresponding to this accession)
  1. ... ;
  1. ... ; Z1 = (1) test number ^ (2) test urgency ^ (3) technologist ^ (4) complete date/time ^
  1. ... ;
  1. ... S X8=$S($G(CORRECT):"C",$P(Z,"^",6):$S(GRP:"F",1:"I"),$P(Z1,"^",4):"F",$P(Z,"^",5):"I",1:"O") ;Result Status
  1. ... D AX8
  1. ... S X10=$P(^TMP("LRX",$J,69),"^",7),$P(@MSG@(3),"|",4)=X10 ;Routing Location
  1. ... S X9="^^^^^"_$$URG^LR7OU0($P(^TMP("LRX",$J,69,IFN),"^",2))
  1. ... I $O(LINK(0)) S CTR=CTR+1 D NTE^LR7OU01(2,"L","LINK(",CTR) K LINK
  1. ... I $O(^TMP("LRX",$J,69,IFN,"NC",0)) S CTR=CTR+1 D NTE^LR7OU01("","L","^TMP(""LRX"",$J,69,"_IFN_",""NC"",",CTR)
  1. ... I CONTROL'="SN" S CTR=CTR+1 D NTE^LR7OU01("","P","^TMP(""LRX"",$J,69,"_IFN_",""N"",",CTR)
  1. ... I CONTROL'="SN" S CTR=CTR+1 D NTE^LR7OU01("","P","^TMP(""LRX"",$J,69,""N"",",CTR)
  1. ... S CTR=CTR+1,COBR=COBR+1,OBRMSG=CTR D OBR^LR7OU01(CTR)
  1. ... S CTR=CTR+1 D SDG1^LRBEBA2(IFN,.CTR,.MSG)
  1. ... I CONTROL="SN" S CTR=CTR+1 D NTE^LR7OU01("","P","^TMP(""LRX"",$J,69,"_IFN_",""N"",",CTR)
  1. ... I CONTROL="SN" S CTR=CTR+1 D NTE^LR7OU01("","P","^TMP(""LRX"",$J,69,""N"",",CTR)
  1. .. S IFN1=0 F S IFN1=$O(^TMP("LRX",$J,69,IFN,63,IFN1)) Q:IFN1<1 S Z1=^TMP("LRX",$J,69,IFN,63,IFN1) D
  1. ... S X1=$S($L($P(Z1,"^",8)):$P(Z1,"^",8),1:"ST") ;Value type
  1. ... S X2=$$UVID^LR7OU0($P(Z1,"^"),$P(^TMP("LRX",$J,69),"^",10),$P(Z1,"^",9),$P(Z1,"^",11),$P(Z1,"^",10),.MSG,$G(SS))
  1. ... S X3=$P(Z1,"^",7) ;Obs SubID
  1. ... S X4=$P(Z1,"^",2) S:$L($P(Z1,"^",9))&(MSG["LRAP") X4=$P(Z1,"^",9)_"^"_$P(Z1,"^",2)_"^"_$P(Z1,"^",10) ;Value
  1. ... S X5=$P(Z1,"^",4) ;Units
  1. ... S X6=$P(Z1,"^",5) ;Ref Ranges
  1. ... S X7=$$FLAG^LR7OU0($P(Z1,"^",3)) ;Flag
  1. ... S (GRP,END)=0
  1. ... I '$G(CORRECT),$P(Z1,"^",6)="F"!($P(Z,"^",6)) S GRP=1
  1. ... S X8=$S($G(CORRECT):"C",$P(Z1,"^",6)="F"!($P(Z,"^",6)):$S(GRP:"F",1:"I"),$L($P(Z1,"^",6)):$S($P(Z1,"^",6)'="F":$P(Z1,"^",6),1:"R"),1:"R")
  1. ... S $P(@MSG@(OBRMSG),"|",26)=X8 ;Result Status
  1. ... I @MSG@(OBRMSG)'?.E1"|",$O(@MSG@(OBRMSG,0))]"" S @MSG@(OBRMSG)=@MSG@(OBRMSG)_"|" ;RLM
  1. ... ;LR*5.2*512 commenting out line below
  1. ... ;because a single result status should not update
  1. ... ;the overall order status in the ORC segment
  1. ... ;LR*5.2*541: invoking line below only if:
  1. ... ; (1) not in full edit mode logic (as in LEDI or if user elects not to do full edit)
  1. ... ; (2) and if status of a test is preliminary. Any preliminary test should cause an
  1. ... ; order to remain at "active" status.
  1. ... I $D(LREDITTYPE),LREDITTYPE<3 S:X8="P" X8="I" D AX8
  1. ... I $L($P(Z1,"^",18)) S X=$P(@MSG@(ORCMSG),"|",4),Y=$P(X,"^",2),X=$P(X,"^")_$P(Z1,"^",18) S $P(@MSG@(ORCMSG),"|",4)=X_"^"_Y ;Append 63 ptr to placer ID
  1. ... I "SPCYEM"[$P($G(X),";",4)&($L($P(X,";",5))) S $P(@MSG@(ORCMSG),"|",4)=X_"^LRAP" ;;* added to correct result update to CPRS where the package reference was not being updated properly for AP results
  1. ... ; X=ORD#;LRODT;LRSN;LRSS;LRIDT, indirect set of ^TMP("LRAP",$J
  1. ... S X10=$P(Z1,"^",14) ;Theraputic flag
  1. ... S X11=$P(Z1,"^",12) ;Verified by
  1. ... S CTR=CTR+1,COBX=COBX+1 D OBX^LR7OU01(CTR)
  1. .. I $O(^TMP("LRX",$J,69,IFN,63,0)),$O(^("N",0)) S CTR=CTR+1 D NTE^LR7OU01("","L","^TMP(""LRX"",$J,69,"_IFN_",63,""N"",",CTR)
  1. . ;
  1. . ;Note to anyone researching this routine in the future:
  1. . ;The lines below are not called because of the quit after the loop at SNEAK+3
  1. . ;(not deleting them in case the lines are needed in the future.)
  1. . ;
  1. . S Z=$G(^TMP("LRX",$J,69,IFN))
  1. . S (Y9,Y10,Y11)="" I $P($G(^LAB(60,+Z,64)),"^") S Y9=$P(^(64),"^"),Y10=$P(^LAM(Y9,0),"^"),Y9=$P(^(0),"^",2),Y11="99NLT"
  1. . S X1=$$UVID^LR7OU0($P(Z,"^"),$P(^TMP("LRX",$J,69),"^",10),Y9,Y11,Y10,.MSG,$G(SS))
  1. . S X2="" ;Obs Start date
  1. . S X3=$$ACTCODE^LR7OU0($P(^TMP("LRX",$J,69),"^",4)) ;Specimen Action Code
  1. . S X4="" ;Specimen Received D/T
  1. . S X5=$$SAMP^LR7OU0($P(^TMP("LRX",$J,69),"^",3),$P(^TMP("LRX",$J,69),"^",10)) ;Specimen Source
  1. . S X6="" ;Filler Fld 1 (Accession)
  1. . S X7="" ;Results rpt/Sts change D/T
  1. . S X8="O"
  1. . I $G(CONTROL)="RE",$P(Z,"^",8) S X8=$S($G(CORRECT):"C",1:"F"),$P(@MSG@(ORCMSG),"|",6)="CM" ;Status
  1. . S X10=$P(^TMP("LRX",$J,69),"^",7),$P(@MSG@(3),"|",4)=X10 ;Routing Location
  1. . S X9="^^^^^"_$$URG^LR7OU0($P($G(^TMP("LRX",$J,69,IFN)),"^",2))
  1. . I $O(LINK(0)) S CTR=CTR+1 D NTE^LR7OU01(2,"L","LINK(",CTR) K LINK
  1. . I $O(^TMP("LRX",$J,69,IFN,"NC",0)) S CTR=CTR+1 D NTE^LR7OU01("","L","^TMP(""LRX"",$J,69,"_IFN_",""NC"",",CTR)
  1. . I CONTROL'="SN" S CTR=CTR+1 D NTE^LR7OU01("","P","^TMP(""LRX"",$J,69,"_IFN_",""N"",",CTR)
  1. . I CONTROL'="SN" S CTR=CTR+1 D NTE^LR7OU01("","P","^TMP(""LRX"",$J,69,""N"",",CTR)
  1. . S CTR=CTR+1,COBR=COBR+1,OBRMSG=CTR D OBR^LR7OU01(CTR)
  1. . S CTR=CTR+1 D SDG1^LRBEBA2(IFN,.CTR,.MSG)
  1. . I CONTROL="SN" S CTR=CTR+1 D NTE^LR7OU01("","P","^TMP(""LRX"",$J,69,""N"",",CTR)
  1. . I CONTROL="SN" S CTR=CTR+1 D NTE^LR7OU01("","P","^TMP(""LRX"",$J,69,"_IFN_",""N"",",CTR)
  1. OUT ;Exit here
  1. K ^TMP("LRX",$J)
  1. Q
  1. AX8 ;Modify order status based on result status
  1. ;LR*5.2*512 added three lines below for panels
  1. ;Routine LRVER3A sets ^TMP("LR",$J,"PANEL",order number)=status (final or active)
  1. I $G(LROR100)]"",$D(^TMP("LR",$J,"PANEL",LROR100)) D Q
  1. . Q:$P($P(@MSG@(ORCMSG),"|",3),"^")'=LROR100
  1. . S $P(@MSG@(ORCMSG),"|",6)=$S($G(^TMP("LR",$J,"PANEL",LROR100)):"CM",1:"SC")
  1. I X8="F"!(X8="C")!($G(LRSTATI)=2) S $P(@MSG@(ORCMSG),"|",6)="CM" Q ;Order Status
  1. I X8="I" S $P(@MSG@(ORCMSG),"|",6)="SC"
  1. Q