LRPXAPI4 ;VA/SLC/STAFF - Lab Extract API code: Exact Match ;9/29/03 21:17
;;5.2;LAB SERVICE;**1030,1031**;NOV 01, 1997
;
;;VA LR Patche(s): 295
;
;
EXACT(DFN,DATE,CONDS) ; from LRPXAPI5
Q:'$$PATCH^BLRUTIL4("PXRM*1.5*12") 0 ; IHS/MSC/MKK - LR*5.2*1031
;
; check if conditions are met for date/time
N FETCH,ITEM,NODE,OK,RESULTS,SEPARATE,XDATE K FETCH,RESULTS,SEPARATE
S OK=1
I '$L($O(CONDS(""))) Q 1
M FETCH=^PXRMINDX(63,"PDI",DFN,DATE)
S ITEM=""
F S ITEM=$O(FETCH(ITEM)) Q:ITEM="" D
. S NODE=""
. F S NODE=$O(FETCH(ITEM,NODE)) Q:NODE="" D
.. S SEPARATE($P(NODE,";",1,3),ITEM,NODE)=""
S XDATE=""
F S XDATE=$O(SEPARATE(XDATE)) Q:XDATE="" D Q:OK
. K RESULTS
. M RESULTS=SEPARATE(XDATE)
. I '$L($O(RESULTS(""))) S OK=0 Q
. I $D(CONDS("MIR")) D MIR(.CONDS,.RESULTS,.OK) I 'OK Q
. I $D(CONDS("AS")) D AS(.CONDS,.RESULTS,.OK) I 'OK Q
. I $D(CONDS("MC")) D MC(.CONDS,.RESULTS,.OK) I 'OK Q
. I $D(CONDS("AC")) D AC(.CONDS,.RESULTS,.OK) I 'OK Q
. I $D(CONDS(1)) D EQUAL(.CONDS,.RESULTS,.OK) I 'OK Q
. I $D(CONDS(0)) D NOTEQUAL(.CONDS,.RESULTS,.OK) I 'OK Q
. I '$L($O(RESULTS(""))) S OK=0 Q
. D SCRAPS(.CONDS,.RESULTS,.OK) I 'OK Q
. D THREAD(.CONDS,.RESULTS,.OK) I 'OK Q
Q OK
;
THREAD(CONDS,RESULTS,OK) ;
; uses TCHK within this scope
N CHK,FILE,IEN,ITEM,ITEMC,NEXT,NODE,NODEC,NUM,PAR,PARSTOP,START,STOP
S OK=1
; check Micro - only O <-> A match
I $D(CONDS("X","M;O")),($D(CONDS("X","M;A"))!$D(CONDS("X","M;M"))) D Q:'OK
. I '($D(CONDS("X","M;A"))!$D(CONDS("X","M;M"))!$D(CONDS("X","M;MIR"))) Q
. S ITEM="M;O;"
. F S ITEM=$O(RESULTS(ITEM)) Q:ITEM="" Q:ITEM]"M;O;Z" D Q:'OK
.. S NODE=""
.. F S NODE=$O(RESULTS(ITEM,NODE)) Q:NODE="" D Q:'OK
... S IEN=$P(NODE,";",5)
... S OK=0
... S ITEMC="M;A;"
... F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]"M;A;Z" D Q:OK
.... S NODEC=""
.... F S NODEC=$O(RESULTS(ITEMC,NODEC)) Q:NODEC="" D Q:OK
..... I IEN=$P(NODEC,";",5) S OK=1 Q
... S ITEMC="M;M;"
... F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]"M;M;Z" D Q:OK
.... S NODEC=""
.... F S NODEC=$O(RESULTS(ITEMC,NODEC)) Q:NODEC="" D Q:OK
..... I IEN=$P(NODEC,";",5) S OK=1 Q
I $D(CONDS("X","M")) Q
; check AP - M <-> E , S <-> T and O <-> [D M F P] match
S PAR="A;M",START="A;E"
I $D(CONDS("X",PAR)),$D(CONDS("X",START)) D TCHK(PAR,7,START) Q:'OK
S PAR="A;S",START="A;T"
I $D(CONDS("X",PAR)),$D(CONDS("X",START)) D TCHK(PAR,5,START) Q:'OK
S PAR="A;O"
I $D(CONDS("X",PAR)) D Q:'OK
. F FILE="D","M","F","P" D Q:'OK
.. S START="A;"_FILE
.. I $D(CONDS("X",START)) D TCHK(PAR,5,START)
Q
TCHK(PAR,NUM,START) ; within scope of THREAD
S ITEM=PAR,PARSTOP=PAR_";Z",STOP=START_";Z"
F S ITEM=$O(RESULTS(ITEM)) Q:ITEM="" Q:ITEM]PARSTOP D Q:'OK
. S NODE=""
. F S NODE=$O(RESULTS(ITEM,NODE)) Q:NODE="" D Q:'OK
.. S IEN=$P(NODE,";",1,NUM)
.. S CHK=0
.. S ITEMC=START
.. F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]STOP D Q:CHK
... S NODEC=""
... F S NODEC=$O(RESULTS(ITEMC,NODEC)) Q:NODEC="" D Q:CHK
.... I IEN=$P(NODEC,";",1,NUM) S CHK=1 Q
.... I $L(NODEC,";")=4 S CHK=1 Q ; at collection date
.. I 'CHK K RESULTS(ITEM)
S NEXT=$O(RESULTS(PAR))
I NEXT="" S OK=0 Q
I NEXT]PARSTOP S OK=0 Q
Q
;
SCRAPS(CONDS,RESULTS,OK) ;
N ITEM,ITEMC
S OK=1
S ITEM=""
F S ITEM=$O(RESULTS(ITEM)) Q:ITEM="" D
. S ITEMC=$P(ITEM,";",1,2)
. I ITEMC="M;A",$D(CONDS("MIR")) Q
. I ITEMC="M;M",$D(CONDS("MIR")) Q
. I '$D(CONDS("X",ITEMC)) K RESULTS(ITEM)
I '$L($O(RESULTS(""))) S OK=0 Q
Q
;
NOTEQUAL(CONDS,RESULTS,OK) ;
; check not equal condition for pointer values
N FILE,ITEM,START,STOP,TYPE
S OK=1
S ITEM=""
F S ITEM=$O(CONDS(0,ITEM)) Q:ITEM="" D Q:'OK
. S TYPE=$E(ITEM),FILE=$E(ITEM,3),START=TYPE_";"_FILE,STOP=TYPE_";"_FILE_";Z"
. K RESULTS(ITEM)
. S NEXT=$O(RESULTS(START))
. I NEXT="" S OK=0 Q
. I NEXT]STOP S OK=0 Q
Q
;
EQUAL(CONDS,RESULTS,OK) ;
; check equal condition for pointer values
N FILE,ITEM,ITEMC,NEXT,START,STOP,TYPE
S OK=1
S ITEM=""
F S ITEM=$O(CONDS(1,ITEM)) Q:ITEM="" D
. S TYPE=$E(ITEM),FILE=$E(ITEM,3),START=TYPE_";"_FILE,STOP=TYPE_";"_FILE_";Z"
. S ITEMC=START
. F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]STOP D
.. I ITEMC=ITEM Q
.. K RESULTS(ITEMC)
S NEXT=$O(RESULTS(START))
I NEXT="" S OK=0 Q
I NEXT]STOP S OK=0 Q
Q
;
AC(CONDS,RESULTS,OK) ;
; check conditions for AP categories
N CAT,CATEGORY,ITEM,ITEMC,NODE,NOTEQUAL,SUB
S OK=1
S ITEM=""
F S ITEM=$O(CONDS("AC",ITEM)) Q:ITEM="" D
. S CATEGORY=$P(ITEM,"=",2)
. I '$L(CATEGORY) Q
. S CATEGORY=$E(CATEGORY,2)
. S NOTEQUAL=0
. I $L($P(ITEM,"'=",2)) S NOTEQUAL=1
. S ITEMC="A"
. F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]"A;Z" D
.. I ITEMC["A;T;" Q
.. S NODE=""
.. F S NODE=$O(RESULTS(ITEMC,NODE)) Q:NODE="" D
... S SUB=$P(NODE,";",2)
... I SUB=33!(SUB=80) S CAT="A"
... E S CAT=$E(SUB)
... I NOTEQUAL,CAT=CATEGORY K RESULTS(ITEMC,NODE) Q
... I 'NOTEQUAL,CAT'=CATEGORY K RESULTS(ITEMC,NODE) Q
I '$L($O(RESULTS(""))) S OK=0 Q
Q
;
MC(CONDS,RESULTS,OK) ;
; check conditions for Micro categories
N CATEGORY,CATSUB,ITEM,ITEMC,NEXT,NODE,NOTEQUAL,SUB
S OK=1
S ITEM=""
F S ITEM=$O(CONDS("MC",ITEM)) Q:ITEM="" D
. S CATEGORY=$P(ITEM,"=",2)
. I '$L(CATEGORY) Q
. S CATEGORY=$E(CATEGORY,2)
. S CATSUB=$$CATSUB^LRPXAPIU(CATEGORY,"M")
. S NOTEQUAL=0
. I $L($P(ITEM,"'=",2)) S NOTEQUAL=1
. S ITEMC="M"
. F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]"M;Z" D
.. I ITEMC["M;T;" Q
.. I ITEMC["M;S;" Q
.. S NODE=""
.. F S NODE=$O(RESULTS(ITEMC,NODE)) Q:NODE="" D
... S SUB=$P(NODE,";",4)
... I NOTEQUAL,SUB=CATSUB K RESULTS(ITEMC,NODE) Q
... I 'NOTEQUAL,SUB'=CATSUB K RESULTS(ITEMC,NODE) Q
S NEXT=$O(RESULTS("M"))
I NEXT="" S OK=0 Q
I NEXT]"M;S" S OK=0 Q
Q
;
AS(CONDS,RESULTS,OK) ;
; check conditions for AP specimen
N CHECK,ITEM,ITEMC,NEXT,S
S OK=1
S ITEM=""
F S ITEM=$O(CONDS("AS",ITEM)) Q:ITEM="" D
. I $E(ITEM,2)="'" D Q
.. ; good if the specimen text is not present for this collection
.. S ITEMC="A;S;1"
.. F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]"A;S;Z" D
... S S=$P(ITEMC,"1.",2)
... S CHECK="I "_ITEM
... X CHECK I '$T K RESULTS(ITEMC)
. ; good if any of the specimen text for this collection have a matching text
. I $O(RESULTS("A;S;1"))="" Q
. I $O(RESULTS("A;S;1"))]"A;S;Z" Q
. S OK=0
. S ITEMC="A;S;1"
. F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]"A;S;Z" D
.. S S=$P(ITEMC,"1.",2)
.. S CHECK="I "_ITEM
.. X CHECK I '$T K RESULTS(ITEMC)
S NEXT=$O(RESULTS("A;S;"))
I NEXT="" S OK=0 Q
I NEXT]"A;S;Z" S OK=0 Q
S OK=1
Q
;
MIR(CONDS,RESULTS,OK) ;
; check conditions for antimicrobial results and interpretations
; uses MCHK within this scope
N ABNODE,ABTYPE,CHECK,I,ITEM,ITEMC,NEXTA,NEXTM,NODE,R,START,STOP
S OK=0
F ABTYPE="A","M" D MCHK(ABTYPE)
S NEXTA=$O(RESULTS("M;A"))
S NEXTM=$O(RESULTS("M;M"))
I NEXTA="",NEXTM="" Q
I NEXTA="",NEXTM]"M;M;Z" Q
I NEXTA]"M;A;Z",NEXTM="" Q
I NEXTA]"M;A;Z",NEXTM]"M;M;Z" Q
S OK=1
Q
MCHK(ABTYPE) ; within scope of MIR
S START="M;"_ABTYPE
S STOP=START_";Z"
S ITEM=""
F S ITEM=$O(CONDS("MIR",ITEM)) Q:ITEM="" D
. I $E(ITEM,2)="'" D Q
.. ; good if the interpretation/result is not present for this collection
.. S ITEMC=START
.. F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]STOP D
... S NODE=""
... F S NODE=$O(RESULTS(ITEMC,NODE)) Q:NODE="" D
.... S ABNODE=$$REFVAL^LRPXAPI(NODE)
.... I ABTYPE="A" D
..... S I=$P(ABNODE,U,2)
..... S R=$P(ABNODE,U)
.... E D
..... S R=$P(ABNODE,U)
..... S I=R
.... S CHECK="I "_ITEM
.... X CHECK I $T Q
.... K RESULTS(ITEMC,NODE)
. ; good if any of the interpretations/results have matching conditions
. I $O(RESULTS(START))="" Q
. I $O(RESULTS(START))]STOP Q
. S ITEMC=START
. F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]STOP D
.. S NODE=""
.. F S NODE=$O(RESULTS(ITEMC,NODE)) Q:NODE="" D
... S ABNODE=$$REFVAL^LRPXAPI(NODE)
... S I=$P(ABNODE,U,2)
... S R=$P(ABNODE,U)
... S CHECK="I "_ITEM
... X CHECK I '$T K RESULTS(ITEMC,NODE)
Q
;
LRPXAPI4 ;VA/SLC/STAFF - Lab Extract API code: Exact Match ;9/29/03 21:17
+1 ;;5.2;LAB SERVICE;**1030,1031**;NOV 01, 1997
+2 ;
+3 ;;VA LR Patche(s): 295
+4 ;
+5 ;
EXACT(DFN,DATE,CONDS) ; from LRPXAPI5
+1 ; IHS/MSC/MKK - LR*5.2*1031
IF '$$PATCH^BLRUTIL4("PXRM*1.5*12")
QUIT 0
+2 ;
+3 ; check if conditions are met for date/time
+4 NEW FETCH,ITEM,NODE,OK,RESULTS,SEPARATE,XDATE
KILL FETCH,RESULTS,SEPARATE
+5 SET OK=1
+6 IF '$LENGTH($ORDER(CONDS("")))
QUIT 1
+7 MERGE FETCH=^PXRMINDX(63,"PDI",DFN,DATE)
+8 SET ITEM=""
+9 FOR
SET ITEM=$ORDER(FETCH(ITEM))
IF ITEM=""
QUIT
Begin DoDot:1
+10 SET NODE=""
+11 FOR
SET NODE=$ORDER(FETCH(ITEM,NODE))
IF NODE=""
QUIT
Begin DoDot:2
+12 SET SEPARATE($PIECE(NODE,";",1,3),ITEM,NODE)=""
End DoDot:2
End DoDot:1
+13 SET XDATE=""
+14 FOR
SET XDATE=$ORDER(SEPARATE(XDATE))
IF XDATE=""
QUIT
Begin DoDot:1
+15 KILL RESULTS
+16 MERGE RESULTS=SEPARATE(XDATE)
+17 IF '$LENGTH($ORDER(RESULTS("")))
SET OK=0
QUIT
+18 IF $DATA(CONDS("MIR"))
DO MIR(.CONDS,.RESULTS,.OK)
IF 'OK
QUIT
+19 IF $DATA(CONDS("AS"))
DO AS(.CONDS,.RESULTS,.OK)
IF 'OK
QUIT
+20 IF $DATA(CONDS("MC"))
DO MC(.CONDS,.RESULTS,.OK)
IF 'OK
QUIT
+21 IF $DATA(CONDS("AC"))
DO AC(.CONDS,.RESULTS,.OK)
IF 'OK
QUIT
+22 IF $DATA(CONDS(1))
DO EQUAL(.CONDS,.RESULTS,.OK)
IF 'OK
QUIT
+23 IF $DATA(CONDS(0))
DO NOTEQUAL(.CONDS,.RESULTS,.OK)
IF 'OK
QUIT
+24 IF '$LENGTH($ORDER(RESULTS("")))
SET OK=0
QUIT
+25 DO SCRAPS(.CONDS,.RESULTS,.OK)
IF 'OK
QUIT
+26 DO THREAD(.CONDS,.RESULTS,.OK)
IF 'OK
QUIT
End DoDot:1
IF OK
QUIT
+27 QUIT OK
+28 ;
THREAD(CONDS,RESULTS,OK) ;
+1 ; uses TCHK within this scope
+2 NEW CHK,FILE,IEN,ITEM,ITEMC,NEXT,NODE,NODEC,NUM,PAR,PARSTOP,START,STOP
+3 SET OK=1
+4 ; check Micro - only O <-> A match
+5 IF $DATA(CONDS("X","M;O"))
IF ($DATA(CONDS("X","M;A"))!$DATA(CONDS("X","M;M")))
Begin DoDot:1
+6 IF '($DATA(CONDS("X","M;A"))!$DATA(CONDS("X","M;M"))!$DATA(CONDS("X","M;MIR")))
QUIT
+7 SET ITEM="M;O;"
+8 FOR
SET ITEM=$ORDER(RESULTS(ITEM))
IF ITEM=""
QUIT
IF ITEM]"M;O;Z"
QUIT
Begin DoDot:2
+9 SET NODE=""
+10 FOR
SET NODE=$ORDER(RESULTS(ITEM,NODE))
IF NODE=""
QUIT
Begin DoDot:3
+11 SET IEN=$PIECE(NODE,";",5)
+12 SET OK=0
+13 SET ITEMC="M;A;"
+14 FOR
SET ITEMC=$ORDER(RESULTS(ITEMC))
IF ITEMC=""
QUIT
IF ITEMC]"M;A;Z"
QUIT
Begin DoDot:4
+15 SET NODEC=""
+16 FOR
SET NODEC=$ORDER(RESULTS(ITEMC,NODEC))
IF NODEC=""
QUIT
Begin DoDot:5
+17 IF IEN=$PIECE(NODEC,";",5)
SET OK=1
QUIT
End DoDot:5
IF OK
QUIT
End DoDot:4
IF OK
QUIT
+18 SET ITEMC="M;M;"
+19 FOR
SET ITEMC=$ORDER(RESULTS(ITEMC))
IF ITEMC=""
QUIT
IF ITEMC]"M;M;Z"
QUIT
Begin DoDot:4
+20 SET NODEC=""
+21 FOR
SET NODEC=$ORDER(RESULTS(ITEMC,NODEC))
IF NODEC=""
QUIT
Begin DoDot:5
+22 IF IEN=$PIECE(NODEC,";",5)
SET OK=1
QUIT
End DoDot:5
IF OK
QUIT
End DoDot:4
IF OK
QUIT
End DoDot:3
IF 'OK
QUIT
End DoDot:2
IF 'OK
QUIT
End DoDot:1
IF 'OK
QUIT
+23 IF $DATA(CONDS("X","M"))
QUIT
+24 ; check AP - M <-> E , S <-> T and O <-> [D M F P] match
+25 SET PAR="A;M"
SET START="A;E"
+26 IF $DATA(CONDS("X",PAR))
IF $DATA(CONDS("X",START))
DO TCHK(PAR,7,START)
IF 'OK
QUIT
+27 SET PAR="A;S"
SET START="A;T"
+28 IF $DATA(CONDS("X",PAR))
IF $DATA(CONDS("X",START))
DO TCHK(PAR,5,START)
IF 'OK
QUIT
+29 SET PAR="A;O"
+30 IF $DATA(CONDS("X",PAR))
Begin DoDot:1
+31 FOR FILE="D","M","F","P"
Begin DoDot:2
+32 SET START="A;"_FILE
+33 IF $DATA(CONDS("X",START))
DO TCHK(PAR,5,START)
End DoDot:2
IF 'OK
QUIT
End DoDot:1
IF 'OK
QUIT
+34 QUIT
TCHK(PAR,NUM,START) ; within scope of THREAD
+1 SET ITEM=PAR
SET PARSTOP=PAR_";Z"
SET STOP=START_";Z"
+2 FOR
SET ITEM=$ORDER(RESULTS(ITEM))
IF ITEM=""
QUIT
IF ITEM]PARSTOP
QUIT
Begin DoDot:1
+3 SET NODE=""
+4 FOR
SET NODE=$ORDER(RESULTS(ITEM,NODE))
IF NODE=""
QUIT
Begin DoDot:2
+5 SET IEN=$PIECE(NODE,";",1,NUM)
+6 SET CHK=0
+7 SET ITEMC=START
+8 FOR
SET ITEMC=$ORDER(RESULTS(ITEMC))
IF ITEMC=""
QUIT
IF ITEMC]STOP
QUIT
Begin DoDot:3
+9 SET NODEC=""
+10 FOR
SET NODEC=$ORDER(RESULTS(ITEMC,NODEC))
IF NODEC=""
QUIT
Begin DoDot:4
+11 IF IEN=$PIECE(NODEC,";",1,NUM)
SET CHK=1
QUIT
+12 ; at collection date
IF $LENGTH(NODEC,";")=4
SET CHK=1
QUIT
End DoDot:4
IF CHK
QUIT
End DoDot:3
IF CHK
QUIT
+13 IF 'CHK
KILL RESULTS(ITEM)
End DoDot:2
IF 'OK
QUIT
End DoDot:1
IF 'OK
QUIT
+14 SET NEXT=$ORDER(RESULTS(PAR))
+15 IF NEXT=""
SET OK=0
QUIT
+16 IF NEXT]PARSTOP
SET OK=0
QUIT
+17 QUIT
+18 ;
SCRAPS(CONDS,RESULTS,OK) ;
+1 NEW ITEM,ITEMC
+2 SET OK=1
+3 SET ITEM=""
+4 FOR
SET ITEM=$ORDER(RESULTS(ITEM))
IF ITEM=""
QUIT
Begin DoDot:1
+5 SET ITEMC=$PIECE(ITEM,";",1,2)
+6 IF ITEMC="M;A"
IF $DATA(CONDS("MIR"))
QUIT
+7 IF ITEMC="M;M"
IF $DATA(CONDS("MIR"))
QUIT
+8 IF '$DATA(CONDS("X",ITEMC))
KILL RESULTS(ITEM)
End DoDot:1
+9 IF '$LENGTH($ORDER(RESULTS("")))
SET OK=0
QUIT
+10 QUIT
+11 ;
NOTEQUAL(CONDS,RESULTS,OK) ;
+1 ; check not equal condition for pointer values
+2 NEW FILE,ITEM,START,STOP,TYPE
+3 SET OK=1
+4 SET ITEM=""
+5 FOR
SET ITEM=$ORDER(CONDS(0,ITEM))
IF ITEM=""
QUIT
Begin DoDot:1
+6 SET TYPE=$EXTRACT(ITEM)
SET FILE=$EXTRACT(ITEM,3)
SET START=TYPE_";"_FILE
SET STOP=TYPE_";"_FILE_";Z"
+7 KILL RESULTS(ITEM)
+8 SET NEXT=$ORDER(RESULTS(START))
+9 IF NEXT=""
SET OK=0
QUIT
+10 IF NEXT]STOP
SET OK=0
QUIT
End DoDot:1
IF 'OK
QUIT
+11 QUIT
+12 ;
EQUAL(CONDS,RESULTS,OK) ;
+1 ; check equal condition for pointer values
+2 NEW FILE,ITEM,ITEMC,NEXT,START,STOP,TYPE
+3 SET OK=1
+4 SET ITEM=""
+5 FOR
SET ITEM=$ORDER(CONDS(1,ITEM))
IF ITEM=""
QUIT
Begin DoDot:1
+6 SET TYPE=$EXTRACT(ITEM)
SET FILE=$EXTRACT(ITEM,3)
SET START=TYPE_";"_FILE
SET STOP=TYPE_";"_FILE_";Z"
+7 SET ITEMC=START
+8 FOR
SET ITEMC=$ORDER(RESULTS(ITEMC))
IF ITEMC=""
QUIT
IF ITEMC]STOP
QUIT
Begin DoDot:2
+9 IF ITEMC=ITEM
QUIT
+10 KILL RESULTS(ITEMC)
End DoDot:2
End DoDot:1
+11 SET NEXT=$ORDER(RESULTS(START))
+12 IF NEXT=""
SET OK=0
QUIT
+13 IF NEXT]STOP
SET OK=0
QUIT
+14 QUIT
+15 ;
AC(CONDS,RESULTS,OK) ;
+1 ; check conditions for AP categories
+2 NEW CAT,CATEGORY,ITEM,ITEMC,NODE,NOTEQUAL,SUB
+3 SET OK=1
+4 SET ITEM=""
+5 FOR
SET ITEM=$ORDER(CONDS("AC",ITEM))
IF ITEM=""
QUIT
Begin DoDot:1
+6 SET CATEGORY=$PIECE(ITEM,"=",2)
+7 IF '$LENGTH(CATEGORY)
QUIT
+8 SET CATEGORY=$EXTRACT(CATEGORY,2)
+9 SET NOTEQUAL=0
+10 IF $LENGTH($PIECE(ITEM,"'=",2))
SET NOTEQUAL=1
+11 SET ITEMC="A"
+12 FOR
SET ITEMC=$ORDER(RESULTS(ITEMC))
IF ITEMC=""
QUIT
IF ITEMC]"A;Z"
QUIT
Begin DoDot:2
+13 IF ITEMC["A;T;"
QUIT
+14 SET NODE=""
+15 FOR
SET NODE=$ORDER(RESULTS(ITEMC,NODE))
IF NODE=""
QUIT
Begin DoDot:3
+16 SET SUB=$PIECE(NODE,";",2)
+17 IF SUB=33!(SUB=80)
SET CAT="A"
+18 IF '$TEST
SET CAT=$EXTRACT(SUB)
+19 IF NOTEQUAL
IF CAT=CATEGORY
KILL RESULTS(ITEMC,NODE)
QUIT
+20 IF 'NOTEQUAL
IF CAT'=CATEGORY
KILL RESULTS(ITEMC,NODE)
QUIT
End DoDot:3
End DoDot:2
End DoDot:1
+21 IF '$LENGTH($ORDER(RESULTS("")))
SET OK=0
QUIT
+22 QUIT
+23 ;
MC(CONDS,RESULTS,OK) ;
+1 ; check conditions for Micro categories
+2 NEW CATEGORY,CATSUB,ITEM,ITEMC,NEXT,NODE,NOTEQUAL,SUB
+3 SET OK=1
+4 SET ITEM=""
+5 FOR
SET ITEM=$ORDER(CONDS("MC",ITEM))
IF ITEM=""
QUIT
Begin DoDot:1
+6 SET CATEGORY=$PIECE(ITEM,"=",2)
+7 IF '$LENGTH(CATEGORY)
QUIT
+8 SET CATEGORY=$EXTRACT(CATEGORY,2)
+9 SET CATSUB=$$CATSUB^LRPXAPIU(CATEGORY,"M")
+10 SET NOTEQUAL=0
+11 IF $LENGTH($PIECE(ITEM,"'=",2))
SET NOTEQUAL=1
+12 SET ITEMC="M"
+13 FOR
SET ITEMC=$ORDER(RESULTS(ITEMC))
IF ITEMC=""
QUIT
IF ITEMC]"M;Z"
QUIT
Begin DoDot:2
+14 IF ITEMC["M;T;"
QUIT
+15 IF ITEMC["M;S;"
QUIT
+16 SET NODE=""
+17 FOR
SET NODE=$ORDER(RESULTS(ITEMC,NODE))
IF NODE=""
QUIT
Begin DoDot:3
+18 SET SUB=$PIECE(NODE,";",4)
+19 IF NOTEQUAL
IF SUB=CATSUB
KILL RESULTS(ITEMC,NODE)
QUIT
+20 IF 'NOTEQUAL
IF SUB'=CATSUB
KILL RESULTS(ITEMC,NODE)
QUIT
End DoDot:3
End DoDot:2
End DoDot:1
+21 SET NEXT=$ORDER(RESULTS("M"))
+22 IF NEXT=""
SET OK=0
QUIT
+23 IF NEXT]"M;S"
SET OK=0
QUIT
+24 QUIT
+25 ;
AS(CONDS,RESULTS,OK) ;
+1 ; check conditions for AP specimen
+2 NEW CHECK,ITEM,ITEMC,NEXT,S
+3 SET OK=1
+4 SET ITEM=""
+5 FOR
SET ITEM=$ORDER(CONDS("AS",ITEM))
IF ITEM=""
QUIT
Begin DoDot:1
+6 IF $EXTRACT(ITEM,2)="'"
Begin DoDot:2
+7 ; good if the specimen text is not present for this collection
+8 SET ITEMC="A;S;1"
+9 FOR
SET ITEMC=$ORDER(RESULTS(ITEMC))
IF ITEMC=""
QUIT
IF ITEMC]"A;S;Z"
QUIT
Begin DoDot:3
+10 SET S=$PIECE(ITEMC,"1.",2)
+11 SET CHECK="I "_ITEM
+12 XECUTE CHECK
IF '$TEST
KILL RESULTS(ITEMC)
End DoDot:3
End DoDot:2
QUIT
+13 ; good if any of the specimen text for this collection have a matching text
+14 IF $ORDER(RESULTS("A;S;1"))=""
QUIT
+15 IF $ORDER(RESULTS("A;S;1"))]"A;S;Z"
QUIT
+16 SET OK=0
+17 SET ITEMC="A;S;1"
+18 FOR
SET ITEMC=$ORDER(RESULTS(ITEMC))
IF ITEMC=""
QUIT
IF ITEMC]"A;S;Z"
QUIT
Begin DoDot:2
+19 SET S=$PIECE(ITEMC,"1.",2)
+20 SET CHECK="I "_ITEM
+21 XECUTE CHECK
IF '$TEST
KILL RESULTS(ITEMC)
End DoDot:2
End DoDot:1
+22 SET NEXT=$ORDER(RESULTS("A;S;"))
+23 IF NEXT=""
SET OK=0
QUIT
+24 IF NEXT]"A;S;Z"
SET OK=0
QUIT
+25 SET OK=1
+26 QUIT
+27 ;
MIR(CONDS,RESULTS,OK) ;
+1 ; check conditions for antimicrobial results and interpretations
+2 ; uses MCHK within this scope
+3 NEW ABNODE,ABTYPE,CHECK,I,ITEM,ITEMC,NEXTA,NEXTM,NODE,R,START,STOP
+4 SET OK=0
+5 FOR ABTYPE="A","M"
DO MCHK(ABTYPE)
+6 SET NEXTA=$ORDER(RESULTS("M;A"))
+7 SET NEXTM=$ORDER(RESULTS("M;M"))
+8 IF NEXTA=""
IF NEXTM=""
QUIT
+9 IF NEXTA=""
IF NEXTM]"M;M;Z"
QUIT
+10 IF NEXTA]"M;A;Z"
IF NEXTM=""
QUIT
+11 IF NEXTA]"M;A;Z"
IF NEXTM]"M;M;Z"
QUIT
+12 SET OK=1
+13 QUIT
MCHK(ABTYPE) ; within scope of MIR
+1 SET START="M;"_ABTYPE
+2 SET STOP=START_";Z"
+3 SET ITEM=""
+4 FOR
SET ITEM=$ORDER(CONDS("MIR",ITEM))
IF ITEM=""
QUIT
Begin DoDot:1
+5 IF $EXTRACT(ITEM,2)="'"
Begin DoDot:2
+6 ; good if the interpretation/result is not present for this collection
+7 SET ITEMC=START
+8 FOR
SET ITEMC=$ORDER(RESULTS(ITEMC))
IF ITEMC=""
QUIT
IF ITEMC]STOP
QUIT
Begin DoDot:3
+9 SET NODE=""
+10 FOR
SET NODE=$ORDER(RESULTS(ITEMC,NODE))
IF NODE=""
QUIT
Begin DoDot:4
+11 SET ABNODE=$$REFVAL^LRPXAPI(NODE)
+12 IF ABTYPE="A"
Begin DoDot:5
+13 SET I=$PIECE(ABNODE,U,2)
+14 SET R=$PIECE(ABNODE,U)
End DoDot:5
+15 IF '$TEST
Begin DoDot:5
+16 SET R=$PIECE(ABNODE,U)
+17 SET I=R
End DoDot:5
+18 SET CHECK="I "_ITEM
+19 XECUTE CHECK
IF $TEST
QUIT
+20 KILL RESULTS(ITEMC,NODE)
End DoDot:4
End DoDot:3
End DoDot:2
QUIT
+21 ; good if any of the interpretations/results have matching conditions
+22 IF $ORDER(RESULTS(START))=""
QUIT
+23 IF $ORDER(RESULTS(START))]STOP
QUIT
+24 SET ITEMC=START
+25 FOR
SET ITEMC=$ORDER(RESULTS(ITEMC))
IF ITEMC=""
QUIT
IF ITEMC]STOP
QUIT
Begin DoDot:2
+26 SET NODE=""
+27 FOR
SET NODE=$ORDER(RESULTS(ITEMC,NODE))
IF NODE=""
QUIT
Begin DoDot:3
+28 SET ABNODE=$$REFVAL^LRPXAPI(NODE)
+29 SET I=$PIECE(ABNODE,U,2)
+30 SET R=$PIECE(ABNODE,U)
+31 SET CHECK="I "_ITEM
+32 XECUTE CHECK
IF '$TEST
KILL RESULTS(ITEMC,NODE)
End DoDot:3
End DoDot:2
End DoDot:1
+33 QUIT
+34 ;