LRPXRM ;SLC/STAFF Lab reminder index for micro and ap ;5/6/04 13:21
;;5.2;LAB SERVICE;**295**;Sep 27, 1994
;
UPDATE(LRDFN,SUB,LRIDT) ; update Micro and AP xrefs in ^PXRMINDX(63
; from LRAPDA,LRAPDSR,LRMIEDZ,LRMIEDZ2,LRMISTF1,LRMIV,LRMIV1,LRMIV2
; - ^TMP("LRPX",$J, is used for processing any edits of Micro or AP data:
; - All results "AR" are copied when the patient's sample is edited.
; - Indexes of the patient's "PDI" are copied before "B" edits.
; - Indexes created from the "AR" data provide an index after "A" edits.
; - "A" and "B" are compared to determine what has been added "ADD"
; and what has been deleted "DEL".
; - The ^PXRMINDX(63 indexes are added or deleted using "ADD" and "DEL".
N DATE,DFN K ^TMP("LRPX",$J)
S LRIDT=+$G(LRIDT)
S DFN=$$DFN^LRPXAPIU(+$G(LRDFN)) I 'DFN Q
I SUB="AU" D Q
. S DATE=$$DOD^LRPXAPIU(DFN) I 'DATE Q
. I '+$G(^LR(LRDFN,"AU")) Q
. I '($P(^LR(LRDFN,"AU"),U,3)&($P(^("AU"),U,15))) Q
. M ^TMP("LRPX",$J,"B")=^PXRMINDX(63,"PDI",DFN,DATE)
. M ^TMP("LRPX",$J,"AR","AY")=^LR(LRDFN,"AY")
. M ^TMP("LRPX",$J,"AR",80)=^LR(LRDFN,80)
. M ^TMP("LRPX",$J,"AR",33)=^LR(LRDFN,33)
. D AP(DFN,LRDFN,DATE,LRIDT,SUB)
. K ^TMP("LRPX",$J)
S DATE=$$LRIDT^LRPXAPIU(LRIDT)
M ^TMP("LRPX",$J,"B")=^PXRMINDX(63,"PDI",DFN,DATE)
I SUB="MI" D
. M ^TMP("LRPX",$J,"AR")=^LR(LRDFN,SUB,LRIDT)
. D MICRO(DFN,LRDFN,DATE,LRIDT)
E D
. M ^TMP("LRPX",$J,"AR",0)=^LR(LRDFN,SUB,LRIDT,0)
. M ^TMP("LRPX",$J,"AR",.1)=^LR(LRDFN,SUB,LRIDT,.1)
. M ^TMP("LRPX",$J,"AR",2)=^LR(LRDFN,SUB,LRIDT,2)
. M ^TMP("LRPX",$J,"AR",3)=^LR(LRDFN,SUB,LRIDT,3)
. D AP(DFN,LRDFN,DATE,LRIDT,SUB)
K ^TMP("LRPX",$J)
Q
;
MICRO(DFN,LRDFN,DATE,LRIDT) ;
N AB,ABDN,ACC,ITEM,NODE,ORG,ORGNUM,SPEC,SUB,TB,TBDN,TEST,TESTS K TESTS
S ITEM=0
F S ITEM=$O(^TMP("LRPX",$J,"B",ITEM)) Q:ITEM="" D
. I $E(ITEM)'="M" K ^TMP("LRPX",$J,"B",ITEM)
I '+$G(^TMP("LRPX",$J,"AR",0)) Q
I '$$MIVER(LRDFN,LRIDT) Q
S SPEC=+$P(^TMP("LRPX",$J,"AR",0),U,5)
I 'SPEC Q
S ITEM="M;S;"_SPEC
S NODE=LRDFN_";MI;"_LRIDT_";0"
D TMPSET(ITEM,NODE)
S ACC=$P(^TMP("LRPX",$J,"AR",0),U,6)
I $L(ACC) D
. D ACCY^LRPXAPI(.TESTS,ACC,DATE)
. I $O(TESTS(0)) D
.. S TEST=0
.. F S TEST=+$O(TESTS(TEST)) Q:TEST<1 D
... S ITEM="M;T;"_TEST
... D TMPSET(ITEM,NODE)
I $G(^TMP("LRPX",$J,"AR",1)) D
. S ORGNUM=0
. F S ORGNUM=$O(^TMP("LRPX",$J,"AR",3,ORGNUM)) Q:ORGNUM<1 D
.. S ORG=+$G(^TMP("LRPX",$J,"AR",3,ORGNUM,0))
.. I 'ORG Q
.. S ITEM="M;O;"_ORG
.. S NODE=LRDFN_";MI;"_LRIDT_";3;"_ORGNUM_";0"
.. D TMPSET(ITEM,NODE)
.. S ABDN=1
.. F S ABDN=$O(^TMP("LRPX",$J,"AR",3,ORGNUM,ABDN)) Q:ABDN<1 D
... S AB=$$AB^LRPXAPIU(ABDN)
... I 'AB Q
... S ITEM="M;A;"_AB
... S NODE=LRDFN_";MI;"_LRIDT_";3;"_ORGNUM_";"_ABDN
... D TMPSET(ITEM,NODE)
F SUB=6,9,12,17 D
. I '$G(^TMP("LRPX",$J,"AR",(SUB-1))) Q
. S ORGNUM=0
. F S ORGNUM=$O(^TMP("LRPX",$J,"AR",SUB,ORGNUM)) Q:ORGNUM<1 D
.. S ORG=+$G(^TMP("LRPX",$J,"AR",SUB,ORGNUM,0))
.. I 'ORG Q
.. S ITEM="M;O;"_ORG
.. S NODE=LRDFN_";MI;"_LRIDT_";"_SUB_";"_ORGNUM_";0"
.. D TMPSET(ITEM,NODE)
.. I SUB'=12 Q
.. S TBDN=2
.. F S TBDN=$O(^TMP("LRPX",$J,"AR",12,ORGNUM,TBDN)) Q:TBDN<2 D
... S TB=$$TB^LRPXAPIU(TBDN)
... I '$L(TB) Q
... S ITEM="M;M;"_TB
... S NODE=LRDFN_";MI;"_LRIDT_";12;"_ORGNUM_";"_TBDN
... D TMPSET(ITEM,NODE)
D CKDEL
D CKADD
D DEL(DFN,DATE)
D ADD(DFN,DATE)
Q
;
MIVER(LRDFN,LRIDT) ; $$(lrdfn,lridt) -> 1 if any portion of micro is verified
N OK,SUB
S OK=0
F SUB=1,5,8,11,16 D Q:OK
. I $G(^LR(LRDFN,"MI",LRIDT,SUB)) S OK=1
Q OK
;
AP(DFN,LRDFN,DATE,LRIDT,SUB) ;
N ITEM
I '$$APVERIFY^LRPXAPI(LRDFN,LRIDT,SUB) Q
S ITEM=0
F S ITEM=$O(^TMP("LRPX",$J,"B",ITEM)) Q:ITEM="" D
. I $E(ITEM)'="A" K ^TMP("LRPX",$J,"B",ITEM)
I SUB="AU" D AUTOPSY(LRDFN)
E D CYEMSP(LRDFN,LRIDT,DATE,SUB) ; cyto, electron micro, surg path
D CKDEL
D CKADD
D DEL(DFN,DATE)
D ADD(DFN,DATE)
Q
;
AUTOPSY(LRDFN) ;
N ETIOL,I,II,III,ICD,ICDX,ITEM,NODE,ORGAN,SNOMED,SPEC,SUB,SUBS
S SPEC=0
F S SPEC=$O(^TMP("LRPX",$J,"AR",33,SPEC)) Q:SPEC<1 D
. I '$L($P($G(^TMP("LRPX",$J,"AR",33,SPEC,0)),U)) Q
. S ITEM="A;S;1."_$P(^TMP("LRPX",$J,"AR",33,SPEC,0),U)
. S NODE=LRDFN_";33;"_SPEC_";0"
. D TMPSET(ITEM,NODE)
S ICD=0
F S ICD=$O(^TMP("LRPX",$J,"AR",80,ICD)) Q:ICD<1 D
. S ICDX=+$G(^TMP("LRPX",$J,"AR",80,ICD,0))
. I 'ICDX Q
. S ITEM="A;I;"_ICDX
. S NODE=LRDFN_";80;"_ICD_";0"
. D TMPSET(ITEM,NODE)
S I=0
F S I=$O(^TMP("LRPX",$J,"AR","AY",I)) Q:I<1 D
. S ORGAN=+$G(^TMP("LRPX",$J,"AR","AY",I,0))
. I 'ORGAN Q
. S ITEM="A;O;"_ORGAN
. S NODE=LRDFN_";AY;"_I_";0"
. D TMPSET(ITEM,NODE)
. F SUBS="1D","2M","3F","4P" D
.. S SUB=+SUBS
.. S II=0
.. F S II=$O(^TMP("LRPX",$J,"AR","AY",I,SUB,II)) Q:II<1 D
... S SNOMED=+$G(^TMP("LRPX",$J,"AR","AY",I,SUB,II,0))
... I 'SNOMED Q
... S ITEM="A;"_$E(SUBS,2)_";"_SNOMED
... S NODE=LRDFN_";AY;"_I_";"_SUB_";"_II_";0"
... D TMPSET(ITEM,NODE)
... I SUB'=2 Q
... S III=0
... F S III=$O(^TMP("LRPX",$J,"AR","AY",I,SUB,II,1,III)) Q:III<1 D
.... S ETIOL=+$G(^TMP("LRPX",$J,"AR","AY",I,SUB,II,1,III,0))
.... I 'ETIOL Q
.... S ITEM="A;E;"_ETIOL
.... S NODE=LRDFN_";AY;"_I_";"_SUB_";"_II_";1;"_III_";0"
.... D TMPSET(ITEM,NODE)
Q
;
CYEMSP(LRDFN,LRIDT,DATE,SUB) ;
N ACC,I,ICD,ICDX,ITEM,NODE,ORGAN,PREP,SPEC,TEST,TESTS K TESTS
I '($P($G(^TMP("LRPX",$J,"AR",0)),U,3)&($P($G(^(0)),U,11))) Q
S SPEC=0
F S SPEC=$O(^TMP("LRPX",$J,"AR",.1,SPEC)) Q:SPEC<1 D
. I '$L($P($G(^TMP("LRPX",$J,"AR",.1,SPEC,0)),U)) Q
. S ITEM="A;S;1."_$$UP^XLFSTR($P(^TMP("LRPX",$J,"AR",.1,SPEC,0),U))
. S NODE=LRDFN_";"_SUB_";"_LRIDT_";.1;"_SPEC_";0"
. D TMPSET(ITEM,NODE)
. S PREP=0
. F S PREP=$O(^TMP("LRPX",$J,"AR",.1,SPEC,1,PREP)) Q:PREP<1 D
.. S TEST=0
.. F S TEST=$O(^TMP("LRPX",$J,"AR",.1,SPEC,1,PREP,1,TEST)) Q:TEST<1 D
... S TEST=+$G(^TMP("LRPX",$J,"AR",.1,SPEC,1,PREP,1,TEST,0))
... I 'TEST Q
... S ITEM="A;T;"_TEST
... S NODE=LRDFN_";"_SUB_";"_LRIDT_";.1;"_SPEC_";1;"_PREP_";1;"_TEST_";0"
... D TMPSET(ITEM,NODE)
; S ACC=$P(^TMP("LRPX",$J,"AR",0),U,6) ; do not use tests on acc
; I $L(ACC) D
; . S NODE=LRDFN_";"_SUB_";"_LRIDT_";0"
; . D ACCY^LRPXAPI(.TESTS,ACC,DATE)
; . I $O(TESTS(0)) D
; .. S TEST=0
; .. F S TEST=$O(TESTS(TEST)) Q:TEST<1 D
; ... S ITEM="A;T;"_TEST
; ... D TMPSET(ITEM,NODE)
S ICD=0
F S ICD=$O(^TMP("LRPX",$J,"AR",3,ICD)) Q:ICD<1 D
. S ICDX=+$G(^TMP("LRPX",$J,"AR",3,ICD,0))
. I 'ICDX Q
. S ITEM="A;I;"_ICDX
. S NODE=LRDFN_";"_SUB_";"_LRIDT_";3;"_ICD_";0"
. D TMPSET(ITEM,NODE)
S I=0
F S I=$O(^TMP("LRPX",$J,"AR",2,I)) Q:I<1 D
. S ORGAN=+$G(^TMP("LRPX",$J,"AR",2,I,0))
. I 'ORGAN Q
. S ITEM="A;O;"_ORGAN
. S NODE=LRDFN_";"_SUB_";"_LRIDT_";2;"_I_";0"
. D TMPSET(ITEM,NODE)
. D SNOMED(LRDFN,LRIDT,SUB,I)
Q
;
SNOMED(LRDFN,LRIDT,APSUB,I) ;
N ETIOL,II,III,ITEM,NODE,SNOMED,SUB,SUBS
F SUBS="1D","2M","3F","4P" D
. S SUB=+SUBS
. S II=0
. F S II=$O(^TMP("LRPX",$J,"AR",2,I,SUB,II)) Q:II<1 D
.. S SNOMED=+$G(^TMP("LRPX",$J,"AR",2,I,SUB,II,0))
.. I 'SNOMED Q
.. S ITEM="A;"_$E(SUBS,2)_";"_SNOMED
.. S NODE=LRDFN_";"_APSUB_";"_LRIDT_";2;"_I_";"_SUB_";"_II_";0"
.. D TMPSET(ITEM,NODE)
.. I SUB'=2 Q
.. S III=0
.. F S III=$O(^TMP("LRPX",$J,"AR",2,I,SUB,II,1,III)) Q:III<1 D
... S ETIOL=+$G(^TMP("LRPX",$J,"AR",2,I,SUB,II,1,III,0))
... I 'ETIOL Q
... S ITEM="A;E;"_ETIOL
... S NODE=LRDFN_";"_APSUB_";"_LRIDT_";2;"_I_";"_SUB_";"_II_";1;"_III_";0"
... D TMPSET(ITEM,NODE)
Q
;
TMPSET(ITEM,NODE) ;
S ^TMP("LRPX",$J,"A",ITEM,NODE)=""
Q
;
CKDEL ;
N ITEM,NODE
S ITEM=""
F S ITEM=$O(^TMP("LRPX",$J,"B",ITEM)) Q:ITEM="" D
. S NODE=""
. F S NODE=$O(^TMP("LRPX",$J,"B",ITEM,NODE)) Q:NODE="" D
.. I $D(^TMP("LRPX",$J,"A",ITEM,NODE)) Q
.. S ^TMP("LRPX",$J,"DEL",ITEM,NODE)=""
Q
;
CKADD ;
N ITEM,NODE
S ITEM=""
F S ITEM=$O(^TMP("LRPX",$J,"A",ITEM)) Q:ITEM="" D
. S NODE=""
. F S NODE=$O(^TMP("LRPX",$J,"A",ITEM,NODE)) Q:NODE="" D
.. I $D(^TMP("LRPX",$J,"B",ITEM,NODE)) Q
.. S ^TMP("LRPX",$J,"ADD",ITEM,NODE)=""
Q
;
DEL(DFN,DATE) ;
N ITEM,NODE
S ITEM=""
F S ITEM=$O(^TMP("LRPX",$J,"DEL",ITEM)) Q:ITEM="" D
. S NODE=""
. F S NODE=$O(^TMP("LRPX",$J,"DEL",ITEM,NODE)) Q:NODE="" D
.. D KLAB^LRPX(DFN,DATE,ITEM,NODE)
Q
;
ADD(DFN,DATE) ;
N ITEM,NODE
S ITEM=""
F S ITEM=$O(^TMP("LRPX",$J,"ADD",ITEM)) Q:ITEM="" D
. S NODE=""
. F S NODE=$O(^TMP("LRPX",$J,"ADD",ITEM,NODE)) Q:NODE="" D
.. D SLAB^LRPX(DFN,DATE,ITEM,NODE)
.. ; D TIMESTMP^LRLOG(DFN,$P(NODE,";",2),DATE,DUZ) ; *** future lab patch
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HLRPXRM 8678 printed Oct 16, 2024@18:20:25 Page 2
LRPXRM ;SLC/STAFF Lab reminder index for micro and ap ;5/6/04 13:21
+1 ;;5.2;LAB SERVICE;**295**;Sep 27, 1994
+2 ;
UPDATE(LRDFN,SUB,LRIDT) ; update Micro and AP xrefs in ^PXRMINDX(63
+1 ; from LRAPDA,LRAPDSR,LRMIEDZ,LRMIEDZ2,LRMISTF1,LRMIV,LRMIV1,LRMIV2
+2 ; - ^TMP("LRPX",$J, is used for processing any edits of Micro or AP data:
+3 ; - All results "AR" are copied when the patient's sample is edited.
+4 ; - Indexes of the patient's "PDI" are copied before "B" edits.
+5 ; - Indexes created from the "AR" data provide an index after "A" edits.
+6 ; - "A" and "B" are compared to determine what has been added "ADD"
+7 ; and what has been deleted "DEL".
+8 ; - The ^PXRMINDX(63 indexes are added or deleted using "ADD" and "DEL".
+9 NEW DATE,DFN
KILL ^TMP("LRPX",$JOB)
+10 SET LRIDT=+$GET(LRIDT)
+11 SET DFN=$$DFN^LRPXAPIU(+$GET(LRDFN))
IF 'DFN
QUIT
+12 IF SUB="AU"
Begin DoDot:1
+13 SET DATE=$$DOD^LRPXAPIU(DFN)
IF 'DATE
QUIT
+14 IF '+$GET(^LR(LRDFN,"AU"))
QUIT
+15 IF '($PIECE(^LR(LRDFN,"AU"),U,3)&($PIECE(^("AU"),U,15)))
QUIT
+16 MERGE ^TMP("LRPX",$JOB,"B")=^PXRMINDX(63,"PDI",DFN,DATE)
+17 MERGE ^TMP("LRPX",$JOB,"AR","AY")=^LR(LRDFN,"AY")
+18 MERGE ^TMP("LRPX",$JOB,"AR",80)=^LR(LRDFN,80)
+19 MERGE ^TMP("LRPX",$JOB,"AR",33)=^LR(LRDFN,33)
+20 DO AP(DFN,LRDFN,DATE,LRIDT,SUB)
+21 KILL ^TMP("LRPX",$JOB)
End DoDot:1
QUIT
+22 SET DATE=$$LRIDT^LRPXAPIU(LRIDT)
+23 MERGE ^TMP("LRPX",$JOB,"B")=^PXRMINDX(63,"PDI",DFN,DATE)
+24 IF SUB="MI"
Begin DoDot:1
+25 MERGE ^TMP("LRPX",$JOB,"AR")=^LR(LRDFN,SUB,LRIDT)
+26 DO MICRO(DFN,LRDFN,DATE,LRIDT)
End DoDot:1
+27 IF '$TEST
Begin DoDot:1
+28 MERGE ^TMP("LRPX",$JOB,"AR",0)=^LR(LRDFN,SUB,LRIDT,0)
+29 MERGE ^TMP("LRPX",$JOB,"AR",.1)=^LR(LRDFN,SUB,LRIDT,.1)
+30 MERGE ^TMP("LRPX",$JOB,"AR",2)=^LR(LRDFN,SUB,LRIDT,2)
+31 MERGE ^TMP("LRPX",$JOB,"AR",3)=^LR(LRDFN,SUB,LRIDT,3)
+32 DO AP(DFN,LRDFN,DATE,LRIDT,SUB)
End DoDot:1
+33 KILL ^TMP("LRPX",$JOB)
+34 QUIT
+35 ;
MICRO(DFN,LRDFN,DATE,LRIDT) ;
+1 NEW AB,ABDN,ACC,ITEM,NODE,ORG,ORGNUM,SPEC,SUB,TB,TBDN,TEST,TESTS
KILL TESTS
+2 SET ITEM=0
+3 FOR
SET ITEM=$ORDER(^TMP("LRPX",$JOB,"B",ITEM))
if ITEM=""
QUIT
Begin DoDot:1
+4 IF $EXTRACT(ITEM)'="M"
KILL ^TMP("LRPX",$JOB,"B",ITEM)
End DoDot:1
+5 IF '+$GET(^TMP("LRPX",$JOB,"AR",0))
QUIT
+6 IF '$$MIVER(LRDFN,LRIDT)
QUIT
+7 SET SPEC=+$PIECE(^TMP("LRPX",$JOB,"AR",0),U,5)
+8 IF 'SPEC
QUIT
+9 SET ITEM="M;S;"_SPEC
+10 SET NODE=LRDFN_";MI;"_LRIDT_";0"
+11 DO TMPSET(ITEM,NODE)
+12 SET ACC=$PIECE(^TMP("LRPX",$JOB,"AR",0),U,6)
+13 IF $LENGTH(ACC)
Begin DoDot:1
+14 DO ACCY^LRPXAPI(.TESTS,ACC,DATE)
+15 IF $ORDER(TESTS(0))
Begin DoDot:2
+16 SET TEST=0
+17 FOR
SET TEST=+$ORDER(TESTS(TEST))
if TEST<1
QUIT
Begin DoDot:3
+18 SET ITEM="M;T;"_TEST
+19 DO TMPSET(ITEM,NODE)
End DoDot:3
End DoDot:2
End DoDot:1
+20 IF $GET(^TMP("LRPX",$JOB,"AR",1))
Begin DoDot:1
+21 SET ORGNUM=0
+22 FOR
SET ORGNUM=$ORDER(^TMP("LRPX",$JOB,"AR",3,ORGNUM))
if ORGNUM<1
QUIT
Begin DoDot:2
+23 SET ORG=+$GET(^TMP("LRPX",$JOB,"AR",3,ORGNUM,0))
+24 IF 'ORG
QUIT
+25 SET ITEM="M;O;"_ORG
+26 SET NODE=LRDFN_";MI;"_LRIDT_";3;"_ORGNUM_";0"
+27 DO TMPSET(ITEM,NODE)
+28 SET ABDN=1
+29 FOR
SET ABDN=$ORDER(^TMP("LRPX",$JOB,"AR",3,ORGNUM,ABDN))
if ABDN<1
QUIT
Begin DoDot:3
+30 SET AB=$$AB^LRPXAPIU(ABDN)
+31 IF 'AB
QUIT
+32 SET ITEM="M;A;"_AB
+33 SET NODE=LRDFN_";MI;"_LRIDT_";3;"_ORGNUM_";"_ABDN
+34 DO TMPSET(ITEM,NODE)
End DoDot:3
End DoDot:2
End DoDot:1
+35 FOR SUB=6,9,12,17
Begin DoDot:1
+36 IF '$GET(^TMP("LRPX",$JOB,"AR",(SUB-1)))
QUIT
+37 SET ORGNUM=0
+38 FOR
SET ORGNUM=$ORDER(^TMP("LRPX",$JOB,"AR",SUB,ORGNUM))
if ORGNUM<1
QUIT
Begin DoDot:2
+39 SET ORG=+$GET(^TMP("LRPX",$JOB,"AR",SUB,ORGNUM,0))
+40 IF 'ORG
QUIT
+41 SET ITEM="M;O;"_ORG
+42 SET NODE=LRDFN_";MI;"_LRIDT_";"_SUB_";"_ORGNUM_";0"
+43 DO TMPSET(ITEM,NODE)
+44 IF SUB'=12
QUIT
+45 SET TBDN=2
+46 FOR
SET TBDN=$ORDER(^TMP("LRPX",$JOB,"AR",12,ORGNUM,TBDN))
if TBDN<2
QUIT
Begin DoDot:3
+47 SET TB=$$TB^LRPXAPIU(TBDN)
+48 IF '$LENGTH(TB)
QUIT
+49 SET ITEM="M;M;"_TB
+50 SET NODE=LRDFN_";MI;"_LRIDT_";12;"_ORGNUM_";"_TBDN
+51 DO TMPSET(ITEM,NODE)
End DoDot:3
End DoDot:2
End DoDot:1
+52 DO CKDEL
+53 DO CKADD
+54 DO DEL(DFN,DATE)
+55 DO ADD(DFN,DATE)
+56 QUIT
+57 ;
MIVER(LRDFN,LRIDT) ; $$(lrdfn,lridt) -> 1 if any portion of micro is verified
+1 NEW OK,SUB
+2 SET OK=0
+3 FOR SUB=1,5,8,11,16
Begin DoDot:1
+4 IF $GET(^LR(LRDFN,"MI",LRIDT,SUB))
SET OK=1
End DoDot:1
if OK
QUIT
+5 QUIT OK
+6 ;
AP(DFN,LRDFN,DATE,LRIDT,SUB) ;
+1 NEW ITEM
+2 IF '$$APVERIFY^LRPXAPI(LRDFN,LRIDT,SUB)
QUIT
+3 SET ITEM=0
+4 FOR
SET ITEM=$ORDER(^TMP("LRPX",$JOB,"B",ITEM))
if ITEM=""
QUIT
Begin DoDot:1
+5 IF $EXTRACT(ITEM)'="A"
KILL ^TMP("LRPX",$JOB,"B",ITEM)
End DoDot:1
+6 IF SUB="AU"
DO AUTOPSY(LRDFN)
+7 ; cyto, electron micro, surg path
IF '$TEST
DO CYEMSP(LRDFN,LRIDT,DATE,SUB)
+8 DO CKDEL
+9 DO CKADD
+10 DO DEL(DFN,DATE)
+11 DO ADD(DFN,DATE)
+12 QUIT
+13 ;
AUTOPSY(LRDFN) ;
+1 NEW ETIOL,I,II,III,ICD,ICDX,ITEM,NODE,ORGAN,SNOMED,SPEC,SUB,SUBS
+2 SET SPEC=0
+3 FOR
SET SPEC=$ORDER(^TMP("LRPX",$JOB,"AR",33,SPEC))
if SPEC<1
QUIT
Begin DoDot:1
+4 IF '$LENGTH($PIECE($GET(^TMP("LRPX",$JOB,"AR",33,SPEC,0)),U))
QUIT
+5 SET ITEM="A;S;1."_$PIECE(^TMP("LRPX",$JOB,"AR",33,SPEC,0),U)
+6 SET NODE=LRDFN_";33;"_SPEC_";0"
+7 DO TMPSET(ITEM,NODE)
End DoDot:1
+8 SET ICD=0
+9 FOR
SET ICD=$ORDER(^TMP("LRPX",$JOB,"AR",80,ICD))
if ICD<1
QUIT
Begin DoDot:1
+10 SET ICDX=+$GET(^TMP("LRPX",$JOB,"AR",80,ICD,0))
+11 IF 'ICDX
QUIT
+12 SET ITEM="A;I;"_ICDX
+13 SET NODE=LRDFN_";80;"_ICD_";0"
+14 DO TMPSET(ITEM,NODE)
End DoDot:1
+15 SET I=0
+16 FOR
SET I=$ORDER(^TMP("LRPX",$JOB,"AR","AY",I))
if I<1
QUIT
Begin DoDot:1
+17 SET ORGAN=+$GET(^TMP("LRPX",$JOB,"AR","AY",I,0))
+18 IF 'ORGAN
QUIT
+19 SET ITEM="A;O;"_ORGAN
+20 SET NODE=LRDFN_";AY;"_I_";0"
+21 DO TMPSET(ITEM,NODE)
+22 FOR SUBS="1D","2M","3F","4P"
Begin DoDot:2
+23 SET SUB=+SUBS
+24 SET II=0
+25 FOR
SET II=$ORDER(^TMP("LRPX",$JOB,"AR","AY",I,SUB,II))
if II<1
QUIT
Begin DoDot:3
+26 SET SNOMED=+$GET(^TMP("LRPX",$JOB,"AR","AY",I,SUB,II,0))
+27 IF 'SNOMED
QUIT
+28 SET ITEM="A;"_$EXTRACT(SUBS,2)_";"_SNOMED
+29 SET NODE=LRDFN_";AY;"_I_";"_SUB_";"_II_";0"
+30 DO TMPSET(ITEM,NODE)
+31 IF SUB'=2
QUIT
+32 SET III=0
+33 FOR
SET III=$ORDER(^TMP("LRPX",$JOB,"AR","AY",I,SUB,II,1,III))
if III<1
QUIT
Begin DoDot:4
+34 SET ETIOL=+$GET(^TMP("LRPX",$JOB,"AR","AY",I,SUB,II,1,III,0))
+35 IF 'ETIOL
QUIT
+36 SET ITEM="A;E;"_ETIOL
+37 SET NODE=LRDFN_";AY;"_I_";"_SUB_";"_II_";1;"_III_";0"
+38 DO TMPSET(ITEM,NODE)
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
+39 QUIT
+40 ;
CYEMSP(LRDFN,LRIDT,DATE,SUB) ;
+1 NEW ACC,I,ICD,ICDX,ITEM,NODE,ORGAN,PREP,SPEC,TEST,TESTS
KILL TESTS
+2 IF '($PIECE($GET(^TMP("LRPX",$JOB,"AR",0)),U,3)&($PIECE($GET(^(0)),U,11)))
QUIT
+3 SET SPEC=0
+4 FOR
SET SPEC=$ORDER(^TMP("LRPX",$JOB,"AR",.1,SPEC))
if SPEC<1
QUIT
Begin DoDot:1
+5 IF '$LENGTH($PIECE($GET(^TMP("LRPX",$JOB,"AR",.1,SPEC,0)),U))
QUIT
+6 SET ITEM="A;S;1."_$$UP^XLFSTR($PIECE(^TMP("LRPX",$JOB,"AR",.1,SPEC,0),U))
+7 SET NODE=LRDFN_";"_SUB_";"_LRIDT_";.1;"_SPEC_";0"
+8 DO TMPSET(ITEM,NODE)
+9 SET PREP=0
+10 FOR
SET PREP=$ORDER(^TMP("LRPX",$JOB,"AR",.1,SPEC,1,PREP))
if PREP<1
QUIT
Begin DoDot:2
+11 SET TEST=0
+12 FOR
SET TEST=$ORDER(^TMP("LRPX",$JOB,"AR",.1,SPEC,1,PREP,1,TEST))
if TEST<1
QUIT
Begin DoDot:3
+13 SET TEST=+$GET(^TMP("LRPX",$JOB,"AR",.1,SPEC,1,PREP,1,TEST,0))
+14 IF 'TEST
QUIT
+15 SET ITEM="A;T;"_TEST
+16 SET NODE=LRDFN_";"_SUB_";"_LRIDT_";.1;"_SPEC_";1;"_PREP_";1;"_TEST_";0"
+17 DO TMPSET(ITEM,NODE)
End DoDot:3
End DoDot:2
End DoDot:1
+18 ; S ACC=$P(^TMP("LRPX",$J,"AR",0),U,6) ; do not use tests on acc
+19 ; I $L(ACC) D
+20 ; . S NODE=LRDFN_";"_SUB_";"_LRIDT_";0"
+21 ; . D ACCY^LRPXAPI(.TESTS,ACC,DATE)
+22 ; . I $O(TESTS(0)) D
+23 ; .. S TEST=0
+24 ; .. F S TEST=$O(TESTS(TEST)) Q:TEST<1 D
+25 ; ... S ITEM="A;T;"_TEST
+26 ; ... D TMPSET(ITEM,NODE)
+27 SET ICD=0
+28 FOR
SET ICD=$ORDER(^TMP("LRPX",$JOB,"AR",3,ICD))
if ICD<1
QUIT
Begin DoDot:1
+29 SET ICDX=+$GET(^TMP("LRPX",$JOB,"AR",3,ICD,0))
+30 IF 'ICDX
QUIT
+31 SET ITEM="A;I;"_ICDX
+32 SET NODE=LRDFN_";"_SUB_";"_LRIDT_";3;"_ICD_";0"
+33 DO TMPSET(ITEM,NODE)
End DoDot:1
+34 SET I=0
+35 FOR
SET I=$ORDER(^TMP("LRPX",$JOB,"AR",2,I))
if I<1
QUIT
Begin DoDot:1
+36 SET ORGAN=+$GET(^TMP("LRPX",$JOB,"AR",2,I,0))
+37 IF 'ORGAN
QUIT
+38 SET ITEM="A;O;"_ORGAN
+39 SET NODE=LRDFN_";"_SUB_";"_LRIDT_";2;"_I_";0"
+40 DO TMPSET(ITEM,NODE)
+41 DO SNOMED(LRDFN,LRIDT,SUB,I)
End DoDot:1
+42 QUIT
+43 ;
SNOMED(LRDFN,LRIDT,APSUB,I) ;
+1 NEW ETIOL,II,III,ITEM,NODE,SNOMED,SUB,SUBS
+2 FOR SUBS="1D","2M","3F","4P"
Begin DoDot:1
+3 SET SUB=+SUBS
+4 SET II=0
+5 FOR
SET II=$ORDER(^TMP("LRPX",$JOB,"AR",2,I,SUB,II))
if II<1
QUIT
Begin DoDot:2
+6 SET SNOMED=+$GET(^TMP("LRPX",$JOB,"AR",2,I,SUB,II,0))
+7 IF 'SNOMED
QUIT
+8 SET ITEM="A;"_$EXTRACT(SUBS,2)_";"_SNOMED
+9 SET NODE=LRDFN_";"_APSUB_";"_LRIDT_";2;"_I_";"_SUB_";"_II_";0"
+10 DO TMPSET(ITEM,NODE)
+11 IF SUB'=2
QUIT
+12 SET III=0
+13 FOR
SET III=$ORDER(^TMP("LRPX",$JOB,"AR",2,I,SUB,II,1,III))
if III<1
QUIT
Begin DoDot:3
+14 SET ETIOL=+$GET(^TMP("LRPX",$JOB,"AR",2,I,SUB,II,1,III,0))
+15 IF 'ETIOL
QUIT
+16 SET ITEM="A;E;"_ETIOL
+17 SET NODE=LRDFN_";"_APSUB_";"_LRIDT_";2;"_I_";"_SUB_";"_II_";1;"_III_";0"
+18 DO TMPSET(ITEM,NODE)
End DoDot:3
End DoDot:2
End DoDot:1
+19 QUIT
+20 ;
TMPSET(ITEM,NODE) ;
+1 SET ^TMP("LRPX",$JOB,"A",ITEM,NODE)=""
+2 QUIT
+3 ;
CKDEL ;
+1 NEW ITEM,NODE
+2 SET ITEM=""
+3 FOR
SET ITEM=$ORDER(^TMP("LRPX",$JOB,"B",ITEM))
if ITEM=""
QUIT
Begin DoDot:1
+4 SET NODE=""
+5 FOR
SET NODE=$ORDER(^TMP("LRPX",$JOB,"B",ITEM,NODE))
if NODE=""
QUIT
Begin DoDot:2
+6 IF $DATA(^TMP("LRPX",$JOB,"A",ITEM,NODE))
QUIT
+7 SET ^TMP("LRPX",$JOB,"DEL",ITEM,NODE)=""
End DoDot:2
End DoDot:1
+8 QUIT
+9 ;
CKADD ;
+1 NEW ITEM,NODE
+2 SET ITEM=""
+3 FOR
SET ITEM=$ORDER(^TMP("LRPX",$JOB,"A",ITEM))
if ITEM=""
QUIT
Begin DoDot:1
+4 SET NODE=""
+5 FOR
SET NODE=$ORDER(^TMP("LRPX",$JOB,"A",ITEM,NODE))
if NODE=""
QUIT
Begin DoDot:2
+6 IF $DATA(^TMP("LRPX",$JOB,"B",ITEM,NODE))
QUIT
+7 SET ^TMP("LRPX",$JOB,"ADD",ITEM,NODE)=""
End DoDot:2
End DoDot:1
+8 QUIT
+9 ;
DEL(DFN,DATE) ;
+1 NEW ITEM,NODE
+2 SET ITEM=""
+3 FOR
SET ITEM=$ORDER(^TMP("LRPX",$JOB,"DEL",ITEM))
if ITEM=""
QUIT
Begin DoDot:1
+4 SET NODE=""
+5 FOR
SET NODE=$ORDER(^TMP("LRPX",$JOB,"DEL",ITEM,NODE))
if NODE=""
QUIT
Begin DoDot:2
+6 DO KLAB^LRPX(DFN,DATE,ITEM,NODE)
End DoDot:2
End DoDot:1
+7 QUIT
+8 ;
ADD(DFN,DATE) ;
+1 NEW ITEM,NODE
+2 SET ITEM=""
+3 FOR
SET ITEM=$ORDER(^TMP("LRPX",$JOB,"ADD",ITEM))
if ITEM=""
QUIT
Begin DoDot:1
+4 SET NODE=""
+5 FOR
SET NODE=$ORDER(^TMP("LRPX",$JOB,"ADD",ITEM,NODE))
if NODE=""
QUIT
Begin DoDot:2
+6 DO SLAB^LRPX(DFN,DATE,ITEM,NODE)
+7 ; D TIMESTMP^LRLOG(DFN,$P(NODE,";",2),DATE,DUZ) ; *** future lab patch
End DoDot:2
End DoDot:1
+8 QUIT
+9 ;