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

LRPXRM.m

Go to the documentation of this file.
LRPXRM ;VA/SLC/STAFF - Lab reminder index for micro and ap ; 17-Oct-2014 09:22 ; MKK
 ;;5.2;LAB SERVICE;**1030,1031,1034**;NOV 01, 1997;Build 88
 ;
 ;;VA LR Patch(s): 295
 ;
UPDATE(LRDFN,SUB,LRIDT) ; update Micro and AP xrefs in ^PXRMINDX(63
 Q:'$$PATCH^BLRUTIL4("PXRM*1.5*12")                ; IHS/MSC/MKK - LR*5.2*1031
 ; 
 ; 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
 ;