PXRMFNFT ; SLC/PKR - Process found/not found text. ;04/01/2022
;;2.0;CLINICAL REMINDERS;**4,12,16,47,46,65**;Feb 04, 2005;Build 438
;
;===============
AGE(DFN,DEFARR,FIEVAL,NTXT) ;Output the age match/no match
;text.
N CCSUBO,CSUBTEXT,CTIUO,FI,IC,LC,NCSUBL,NIN,NLINES,NTIUL
N TEXT,TEXTIN,TIUTEXT
I '$D(FIEVAL("AGE")) Q
S NLINES=0
S IC=""
F S IC=$O(FIEVAL("AGE",IC)) Q:IC="" D
. S FI=$S(FIEVAL("AGE",IC):1,1:2)
. S NIN=$P(DEFARR(7,IC,3),U,FI)
. I +NIN=0 Q
.;If CCSUBO is true the text contains a CSUB object.
. S CCSUBO=$S(NIN["C":1,1:0)
.;If CTIUO is true the text contains a TIU object.
. S CTIUO=$S(NIN["T":1,1:0)
. S NIN=+NIN
. K TEXTIN
. F LC=1:1:NIN S TEXTIN(LC)=^PXD(811.9,PXRMITEM,7,IC,FI,LC,0)
. S NIN=NIN+1,TEXTIN(NIN)="\\"
. I CCSUBO D FNFTXTCSUBO(NIN,.TEXTIN,.NCSUBL,.CSUBTEXT,.FIEVAL)
. I CTIUO D
.. N VSTR S VSTR=""
.. I CCSUBO D FNFTXTTIUO(NCSUBL,.CSUBTEXT,DFN,VSTR,.NTIUL,.TIUTEXT)
.. I 'CCSUBO D FNFTXTTIUO(NIN,.TEXTIN,DFN,VSTR,.NTIUL,.TIUTEXT)
. I CTIUO D FNFTXTF(1,NTIUL,.TIUTEXT,.NLINES,.TEXT)
. I CCSUBO&('CTIUO) D FNFTXTF(1,NCSUBL,.CSUBTEXT,.NLINES,.TEXT)
. I ('CTIUO)&('CCSUBO) D FNFTXTF(1,NIN,.TEXTIN,.NLINES,.TEXT)
D COPYTXT^PXRMOUTU(.NTXT,NLINES,.TEXT)
Q
;
;===============
ALLWSP(TEXT) ;If $P(TEXT,"\\",IND) is all whitespace, ASCII characters < 33
;return 1, otherwise return 0.
N ACHAR,ALLWSP,IND,JND,LEN,NDSP,TEMP
S ALLWSP=1
S NDSP=$L(TEXT,"\\")
F IND=1:1:NDSP D
. I ALLWSP=0 S IND=NDSP Q
. S TEMP=$P(TEXT,"\\",IND)
. S LEN=$L(TEMP)
. F JND=1:1:LEN D
.. I ALLWSP=0 S JND=LEN Q
.. S ACHAR=$A(TEMP,JND)
.. I ACHAR>32 S ALLWSP=0
Q ALLWSP
;
;===============
CRLOGIC(DFN,NUMLINES,WPNODE,NTXT) ;Output the CONTRAINDICATED and REFUSED
;true and not true text.
I +NUMLINES'>0 Q
N CCSUBO,CSUBTEXT,CTIUO,FORMAT,LC,NCSUBL,NIN,NLINES,NTIUL
N TEXT,TEXTIN,TIUTEXT
;If CCSUBO is true the text contains a CSUB object.
S CCSUBO=$S(NUMLINES["C":1,1:0)
;If CTIUO is true the text contains a TIU object.
S CTIUO=$S(NUMLINES["T":1,1:0)
S NIN=+NUMLINES,NLINES=0
F LC=1:1:NIN S TEXTIN(LC)=^PXD(811.9,PXRMITEM,WPNODE,LC,0)
S NIN=NIN+1,TEXTIN(NIN)="\\"
I $E(TEXTIN(1),1,5)="'FMT:" D
. S FORMAT=0
. S TEXTIN(1)=$P(TEXTIN(1),"'FMT:",2)
E S FORMAT=1
I CCSUBO D FNFTXTCSUBO(NIN,.TEXTIN,.NCSUBL,.CSUBTEXT,.FIEVAL)
I CTIUO D
. N VSTR S VSTR=""
. I CCSUBO D FNFTXTTIUO(NCSUBL,.CSUBTEXT,DFN,VSTR,.NTIUL,.TIUTEXT)
. I 'CCSUBO D FNFTXTTIUO(NIN,.TEXTIN,DFN,VSTR,.NTIUL,.TIUTEXT)
I CTIUO D FNFTXTF(1,NTIUL,.TIUTEXT,.NLINES,.TEXT)
I CCSUBO&('CTIUO) D FNFTXTF(1,NCSUBL,.CSUBTEXT,.NLINES,.TEXT)
I ('CTIUO)&('CCSUBO) D FNFTXTF(1,NIN,.TEXTIN,.NLINES,.TEXT)
D COPYTXT^PXRMOUTU(.NTXT,NLINES,.TEXT)
Q
;
;===============
FINDING(DFN,FINDING,FIEVAL,IFIEVAL,NLINES,TEXT) ;Output the finding found/not
;found text.
N CCSUBO,CSUBTEXT,CTIUO,FI,LC,NCSUBL,NIN,NODE,NTIUL
N TEMP,TEXTIN,TIUTEXT
S FI=$S(IFIEVAL:1,1:2)
S NODE=$S(FINDING["FF":25,1:20)
S TEMP=$G(DEFARR(NODE,FINDING,6))
S NIN=$P(TEMP,U,FI)
I +NIN=0 Q
;If CCSUBO is true the text contains a CSUB object.
S CCSUBO=$S(NIN["C":1,1:0)
;If CTIUO is true the text contains a TIU object.
S CTIUO=$S(NIN["T":1,1:0)
I FINDING["FF" S FINDING=$P(FINDING,"FF",2)
S NIN=+NIN
F LC=1:1:NIN S TEXTIN(LC)=^PXD(811.9,PXRMITEM,NODE,FINDING,FI,LC,0)
S NIN=NIN+1,TEXTIN(NIN)="\\"
I CCSUBO D FNFTXTCSUBO(NIN,.TEXTIN,.NCSUBL,.CSUBTEXT,.FIEVAL)
I CTIUO D
. N VSTR
. I $D(IFIEVAL("VISIT")) D
.. N TEMP,VDATE,VLOC,VSC
.. S TEMP=^AUPNVSIT(IFIEVAL("VISIT"),0)
.. S VDATE=$P(TEMP,U,1)
.. S VLOC=$P(TEMP,U,22)
.. S VSC=$P(TEMP,U,7)
.. S VSTR=VLOC_";"_VDATE_";"_VSC
. E S VSTR=""
. I CCSUBO D FNFTXTTIUO(NCSUBL,.CSUBTEXT,DFN,VSTR,.NTIUL,.TIUTEXT)
. I 'CCSUBO D FNFTXTTIUO(NIN,.TEXTIN,DFN,VSTR,.NTIUL,.TIUTEXT)
I CTIUO D FNFTXTF(1,NTIUL,.TIUTEXT,.NLINES,.TEXT)
I CCSUBO&('CTIUO) D FNFTXTF(1,NCSUBL,.CSUBTEXT,.NLINES,.TEXT)
I ('CTIUO)&('CCSUBO) D FNFTXTF(1,NIN,.TEXTIN,.NLINES,.TEXT)
Q
;
;===============
FNFTXTCSUBO(NIN,TEXTIN,NOUT,TEXTOUT,FIEVAL) ;Process Found/Not Found Text that
;contains CSUB objects.
N IND
S NOUT=0
F IND=1:1:NIN D
. S NOUT=NOUT+1
. I TEXTIN(IND)'["$$CSUB" S TEXTOUT(NOUT)=TEXTIN(IND) Q
. S TEXTOUT(NOUT)=$$CSUBOBJ^PXRMCSUBOBJ(TEXTIN(IND),.FIEVAL)
Q
;
;===============
FNFTXTF(INDENT,NIN,TEXTIN,NLINES,TEXT) ;Format Found/Not Found Text.
;If the original text contains objects they have been processed.
;Handles 'FMT{...}FMT blocks.
N BEND,BSTART,INBLOCK,IND,DONE,END,JND,LEN,NTFMT,NOUT,NSBL
N SKIP,START,TEMP,TEXTFMT,TEXTOUT,TEXTSBL,TEXTSTRING
;Process SBL blocks.
D SBL(NIN,.TEXTIN,.NSBL,.TEXTSBL)
S INBLOCK=0,NTFMT=0
F IND=1:1:NSBL D
. S TEMP=TEXTSBL(IND)
. I INBLOCK=0 D
.. S BSTART=$F(TEMP,"'FMT{",1)
.. I BSTART=0 S NTFMT=NTFMT+1,TEXTFMT(NTFMT)=TEMP Q
.. I BSTART>0 D
... S INBLOCK=1,END=BSTART-6
...;If there is text before the non-format block format it.
... I END>0 S NTFMT=NTFMT+1,TEXTFMT(NTFMT)=$E(TEMP,1,END)
... I NTFMT>0 D
.... D FORMAT^PXRMTEXT(INDENT,PXRMRM,NTFMT,.TEXTFMT,.NOUT,.TEXTOUT)
.... F JND=1:1:NOUT S NLINES=NLINES+1,TEXT(NLINES)=TEXTOUT(JND)
.... S NTFMT=0
.... K TEXTFMT
. I INBLOCK>0 D
.. S START=$S(INBLOCK=1:BSTART,1:1),BEND=$F(TEMP,"}FMT")
.. I BEND=0 D
... S INBLOCK=INBLOCK+1
... I $E(TEMP,START)="_" S TEXT(NLINES)=TEXT(NLINES)_$E(TEMP,START+1,$L(TEMP))
... E S NLINES=NLINES+1,TEXT(NLINES)=$E(TEMP,START,$L(TEMP))
.. I BEND>0 D
... I $E(TEMP,1)="_" S TEXT(NLINES)=TEXT(NLINES)_$E(TEMP,2,BEND-5)
... E S NLINES=NLINES+1,TEXT(NLINES)=$E(TEMP,START,BEND-5)
... S INBLOCK=0,END=$L(TEMP)
... I END'<BEND S NTFMT=NTFMT+1,TEXTFMT(NTFMT)=$E(TEMP,BEND,END)
I NTFMT=0 Q
;Remaining text to format.
D FORMAT^PXRMTEXT(INDENT,PXRMRM,NTFMT,.TEXTFMT,.NOUT,.TEXTOUT)
F JND=1:1:NOUT S NLINES=NLINES+1,TEXT(NLINES)=TEXTOUT(JND)
Q
;
;===============
FNFTXTO(INDENT,NIN,TEXTIN,DFN,VSTR,NLINES,TEXT) ;This entry point is used
;by GETOCTXT^PXRMORCH.
N IND,NFOUT,NTIUL,TEXTFOUT,TIUTEXT
S NFOUT=0
D FNFTXTTIUO(NIN,.TEXTIN,DFN,VSTR,.NTIUL,.TIUTEXT)
D FNFTXTF(INDENT,NTIUL,.TIUTEXT,.NFOUT,.TEXTFOUT)
F IND=1:1:NFOUT S NLINES=NLINES+1,TEXT(NLINES)=TEXTFOUT(IND)
Q
;
;===============
FNFTXTTIUO(NIN,TEXTIN,DFN,VSTR,NOUT,TEXTOUT) ;Process Found/Not Found
;Text that contains TIU objects.
N IND,INOBJECT,JND,OBJLINE,NOL,TA
;Make sure this works if it is being called a part of an object.
I $D(^TMP("TIUBOIL",$J)) D
. K ^TMP("PXRMTIUBOIL",$J)
. M ^TMP("PXRMTIUBOIL",$J)=^TMP("TIUBOIL",$J)
. S INOBJECT=1
E S INOBJECT=0
S NOUT=0
K TEXTOUT
F IND=1:1:NIN D
. I TEXTIN(IND)'["|" S NOUT=NOUT+1,TEXTOUT(NOUT)=TEXTIN(IND) Q
. S OBJLINE(1,0)=TEXTIN(IND)
. K ^TMP("TIUBOIL",$J)
. D BLRPLT^TIUSRVD(.TA,"",DFN,VSTR,"OBJLINE")
. S NOL=$P(^TMP("TIUBOIL",$J,0),U,3)
. F JND=1:1:NOL S NOUT=NOUT+1,TEXTOUT(NOUT)=^TMP("TIUBOIL",$J,JND,0)
K ^TMP("TIUBOIL",$J)
I INOBJECT M ^TMP("TIUBOIL",$J)=^TMP("PXRMTIUBOIL",$J) K ^TMP("PXRMTIUBOIL",$J)
Q
;
;===============
LOGIC(DFN,LOGSTR,LOGTYPE,TTYPE,DEFARR,FIEVAL,NTXT) ;Output the detailed
;logic found/not found text.
I LOGSTR="" Q
N CCSUBO,CSUBTEXT,CTIUO,FI,FORMAT,LC,NCSUBL,NIN,NLINES,NTIUL,SUB
N TEXT,TEXTIN,TIUTEXT
I TTYPE="S" S NLINES=$S(LOGTYPE="PCL":DEFARR(72),LOGTYPE="RES":DEFARR(77),1:0)
E S NLINES=$S(LOGTYPE="PCL":DEFARR(62),LOGTYPE="RES":DEFARR(67),1:0)
S FI=$P(LOGSTR,U,1)
S NIN=$S(FI=1:$P(NLINES,U,1),FI=0:$P(NLINES,U,2),1:0)
I +NIN=0 Q
;If CCSUBO is true the text contains a CSUB object.
S CCSUBO=$S(NIN["C":1,1:0)
;If CTIUO is true the text contains a TIU object.
S CTIUO=$S(NIN["T":1,1:0)
I TTYPE="S" D
. I LOGTYPE="PCL",FI=1 S SUB=70
. I LOGTYPE="PCL",FI=0 S SUB=71
. I LOGTYPE="RES",FI=1 S SUB=75
. I LOGTYPE="RES",FI=0 S SUB=76
E D
. I LOGTYPE="PCL",FI=1 S SUB=60
. I LOGTYPE="PCL",FI=0 S SUB=61
. I LOGTYPE="RES",FI=1 S SUB=65
. I LOGTYPE="RES",FI=0 S SUB=66
S NLINES=0
F LC=1:1:+NIN S TEXTIN(LC)=^PXD(811.9,PXRMITEM,SUB,LC,0)
S NIN=NIN+1,TEXTIN(NIN)="\\"
I $E(TEXTIN(1),1,5)="'FMT:" D
. S FORMAT=0
. S TEXTIN(1)=$P(TEXTIN(1),"'FMT:",2)
E S FORMAT=1
I CCSUBO D FNFTXTCSUBO(NIN,.TEXTIN,.NCSUBL,.CSUBTEXT,.FIEVAL)
I CTIUO D
. N VSTR S VSTR=""
. I CCSUBO D FNFTXTTIUO(NCSUBL,.CSUBTEXT,DFN,VSTR,.NTIUL,.TIUTEXT)
. I 'CCSUBO D FNFTXTTIUO(NIN,.TEXTIN,DFN,VSTR,.NTIUL,.TIUTEXT)
I CTIUO D FNFTXTF(1,NTIUL,.TIUTEXT,.NLINES,.TEXT)
I CCSUBO&('CTIUO) D FNFTXTF(1,NCSUBL,.CSUBTEXT,.NLINES,.TEXT)
I ('CTIUO)&('CCSUBO) D FNFTXTF(1,NIN,.TEXTIN,.NLINES,.TEXT)
D COPYTXT^PXRMOUTU(.NTXT,NLINES,.TEXT)
Q
;
;===============
SBL(NIN,TEXTIN,NOUT,TEXTOUT) ;Process SBL{...}SBL blocks.
N BEND,BSTART,END,INBLOCK,JND,SBLSTRING,SKIP,START,TEMP
S INBLOCK=0,NOUT=0,SBLSTRING=""
F JND=1:1:NIN D
. S TEMP=TEXTIN(JND)
. S BSTART=$S(INBLOCK=0:$F(TEMP,"SBL{"),1:0)
. I (INBLOCK=0),(BSTART=0) S NOUT=NOUT+1,TEXTOUT(NOUT)=TEMP Q
.;If BSTART>5 there is text before the start of the SBL{ block.
. I BSTART>5 S NOUT=NOUT+1,TEXTOUT(NOUT)=$E(TEMP,1,BSTART-6),INBLOCK=INBLOCK+1
. S BEND=$F(TEMP,"}SBL")
. I (BSTART>0),(BEND)>0 D Q
.. S SBLSTRING=$E(TEMP,BSTART,BEND-5)
.. S SKIP=$$ALLWSP(SBLSTRING)
.. I 'SKIP S NOUT=NOUT+1,TEXTOUT(NOUT)=SBLSTRING
..;If there is text after the SBL block add it.
.. S END=$L(TEMP)
.. I END>BEND S NOUT=NOUT+1,TEXTOUT(NOUT)=$E(TEMP,BEND,END)
. I ((INBLOCK>0)!(BSTART>0)),(BEND=0) D Q
.. S INBLOCK=INBLOCK+1
.. S END=$L(TEMP)
.. S START=$S(BSTART>0:BSTART,1:1)
.. S SBLSTRING=SBLSTRING_$E(TEMP,START,END)
.. I TEMP'["\\" Q
.. S SKIP=$$ALLWSP(SBLSTRING)
.. I 'SKIP S NOUT=NOUT+1,TEXTOUT(NOUT)=SBLSTRING
.. S SBLSTRING=""
. I (INBLOCK>0),(BEND>0) D
.. S INBLOCK=0
.. S SBLSTRING=SBLSTRING_$E(TEMP,1,BEND-5)
.. S SKIP=$$ALLWSP(SBLSTRING)
.. I 'SKIP S NOUT=NOUT+1,TEXTOUT(NOUT)=SBLSTRING
.. S SBLSTRING=""
..;If there is text after the SBL block add it.
.. S END=$L(TEMP)
.. I END>BEND S TEXTOUT(NOUT)=TEXTOUT(NOUT)_$E(TEMP,BEND,END)
Q
;
;===============
SNMLA(RIEN) ;Set the number of match lines for the age match text.
N IND,JND,LC,MATCHLC,NCSUB,NPIPE,RES,TEXT,WMSG
S IND=0
F S IND=+$O(^PXD(811.9,RIEN,7,IND)) Q:IND=0 D
.;Age match text
. S (JND,LC,NCSUB,NPIPE)=0
. F S JND=$O(^PXD(811.9,RIEN,7,IND,1,JND)) Q:JND="" D
.. S TEXT=^PXD(811.9,RIEN,7,IND,1,JND,0)
.. I TEXT["$$CSUB" S NCSUB=NCSUB+1
.. S NPIPE=NPIPE+$L(TEXT,"|")-1
.. S LC=LC+1
. S MATCHLC=LC
. I (NPIPE#2)=1 D
.. S WMSG="match text for age range "_IND
.. D TIUOBJW(WMSG,NPIPE)
. I NCSUB>0 S MATCHLC=MATCHLC_"C"
. I NPIPE>1 S MATCHLC=MATCHLC_"T"
.;Age no match text
. S (JND,LC,NCSUB,NPIPE)=0
. F S JND=$O(^PXD(811.9,RIEN,7,IND,2,JND)) Q:JND="" D
.. S TEXT=^PXD(811.9,RIEN,7,IND,2,JND,0)
.. I TEXT["$$CSUB" S NCSUB=NCSUB+1
.. S NPIPE=NPIPE+$L(TEXT,"|")-1
.. S LC=LC+1
. I (NPIPE#2)=1 D
.. S WMSG="no match text for age range "_IND
.. D TIUOBJW(WMSG,NPIPE)
. I NCSUB>0 S LC=LC_"C"
. I NPIPE>1 S LC=LC_"T"
. S ^PXD(811.9,RIEN,7,IND,3)=MATCHLC_U_LC
Q
;
;===============
SNMLF(RIEN,NODE) ;Set the number of found lines for the found text.
;For regular and function findings.
N IND,JND,LC,NCSUB,NFL,NNAME,NPIPE,RES,TEXT,WMSG
S NNAME=$S(NODE=20:"finding",NODE=25:"function finding",1:"?")
S IND=0
F S IND=+$O(^PXD(811.9,RIEN,NODE,IND)) Q:IND=0 D
.;Found text
. S (JND,LC,NCSUB,NPIPE)=0
. F S JND=$O(^PXD(811.9,RIEN,NODE,IND,1,JND)) Q:JND="" D
.. S TEXT=^PXD(811.9,RIEN,NODE,IND,1,JND,0)
.. I TEXT["$$CSUB" S NCSUB=NCSUB+1
.. S NPIPE=NPIPE+$L(TEXT,"|")-1
.. S LC=LC+1
. S NFL=LC
. I (NPIPE#2)=1 D
.. S WMSG="found text for "_NNAME_" "_IND
.. D TIUOBJW(WMSG,NPIPE)
. I NCSUB>0 S NFL=NFL_"C"
. I NPIPE>1 S NFL=NFL_"T"
.;Not found text
. S (JND,LC,NCSUB,NPIPE)=0
. F S JND=$O(^PXD(811.9,RIEN,NODE,IND,2,JND)) Q:JND="" D
.. S TEXT=^PXD(811.9,RIEN,NODE,IND,2,JND,0)
.. I TEXT["$$CSUB" S NCSUB=NCSUB+1
.. S NPIPE=NPIPE+$L(TEXT,"|")-1
.. S LC=LC+1
. I (NPIPE#2)=1 D
.. S WMSG="not found text for "_NNAME_" "_IND
.. D TIUOBJW(WMSG,NPIPE)
. I NCSUB>0 S LC=LC_"C"
. I NPIPE>1 S LC=LC_"T"
. S ^PXD(811.9,RIEN,NODE,IND,6)=NFL_U_LC
Q
;
;===============
SNMLL(RIEN) ;Set the number of lines for the logic found/not found
;text. Append a "T" to the number of lines if the text contains
;a TIU object.
N CSTR,CSUB,IND,LC,NPIPE,RES,SUB,TEXT,TTYPE
;SUB=60 General cohort found text
;SUB=61 General cohort not found text
;SUB=65 General resolution found text
;SUB=66 General resolution not found text
;SUB=70 Summary cohort found text
;SUB=71 Summary cohort not found text
;SUB=75 Summary resolution found text
;SUB=76 Summary resolution not found text
;SUB=83 Contraindicated true text
;SUB=84 Contraindicated false text
;SUB=93 Refused true tex
;SUB=94 Refused false text
F SUB=60,61,65,66,70,71,75,76,83,84,93,94 D
. S (IND,LC,NCSUB,NPIPE)=0
. F S IND=$O(^PXD(811.9,RIEN,SUB,IND)) Q:IND="" D
.. S TEXT=^PXD(811.9,RIEN,SUB,IND,0)
.. I TEXT["$$CSUB" S NCSUB=NCSUB+1
.. S NPIPE=NPIPE+$L(TEXT,"|")-1
.. S LC=LC+1
. I (NPIPE#2)=1 D
.. I SUB=60 S TTYPE="general cohort found text"
.. I SUB=61 S TTYPE="general cohort not found text"
.. I SUB=65 S TTYPE="general resolution found text"
.. I SUB=66 S TTYPE="general resolution not found text"
.. I SUB=70 S TTYPE="summary cohort found text"
.. I SUB=71 S TTYPE="summary cohort not found text"
.. I SUB=75 S TTYPE="summary resolution found text"
.. I SUB=76 S TTYPE="summary resolution not found text"
.. I SUB=83 S TTYPE="contraindicated true text"
.. I SUB=84 S TTYPE="contraindicated false text"
.. I SUB=93 S TTYPE="refused true text"
.. I SUB=94 S TTYPE="refused false text"
.. D TIUOBJW(TTYPE,NPIPE)
. I NCSUB>0 S LC=LC_"C"
. I NPIPE>1 S LC=LC_"T"
. I SUB=60 S CSTR=LC
. I SUB=61 S ^PXD(811.9,RIEN,62)=CSTR_U_LC
. I SUB=65 S CSTR=LC
. I SUB=66 S ^PXD(811.9,RIEN,67)=CSTR_U_LC
. I SUB=70 S CSTR=LC
. I SUB=71 S ^PXD(811.9,RIEN,72)=CSTR_U_LC
. I SUB=75 S CSTR=LC
. I SUB=76 S ^PXD(811.9,RIEN,77)=CSTR_U_LC
. I SUB=83 S CSTR=LC
. I SUB=84 S ^PXD(811.9,RIEN,85)=CSTR_U_LC
. I SUB=93 S CSTR=LC
. I SUB=94 S ^PXD(811.9,RIEN,95)=CSTR_U_LC
Q
;
;===============
TIUOBJW(WMSG,NPIPE) ;Odd number of "|" characters in text, issue
;a warning that TIU OBJ expansion will not work.
N TEXT
S TEXT(1)=""
S TEXT(2)="Warning, "_WMSG_" has "_NPIPE_" ""|"" characters."
S TEXT(3)="Because this is an odd number, TIU Object expansion will not work."
D MES^XPDUTL(.TEXT)
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPXRMFNFT 14639 printed Dec 13, 2024@01:45:31 Page 2
PXRMFNFT ; SLC/PKR - Process found/not found text. ;04/01/2022
+1 ;;2.0;CLINICAL REMINDERS;**4,12,16,47,46,65**;Feb 04, 2005;Build 438
+2 ;
+3 ;===============
AGE(DFN,DEFARR,FIEVAL,NTXT) ;Output the age match/no match
+1 ;text.
+2 NEW CCSUBO,CSUBTEXT,CTIUO,FI,IC,LC,NCSUBL,NIN,NLINES,NTIUL
+3 NEW TEXT,TEXTIN,TIUTEXT
+4 IF '$DATA(FIEVAL("AGE"))
QUIT
+5 SET NLINES=0
+6 SET IC=""
+7 FOR
SET IC=$ORDER(FIEVAL("AGE",IC))
if IC=""
QUIT
Begin DoDot:1
+8 SET FI=$SELECT(FIEVAL("AGE",IC):1,1:2)
+9 SET NIN=$PIECE(DEFARR(7,IC,3),U,FI)
+10 IF +NIN=0
QUIT
+11 ;If CCSUBO is true the text contains a CSUB object.
+12 SET CCSUBO=$SELECT(NIN["C":1,1:0)
+13 ;If CTIUO is true the text contains a TIU object.
+14 SET CTIUO=$SELECT(NIN["T":1,1:0)
+15 SET NIN=+NIN
+16 KILL TEXTIN
+17 FOR LC=1:1:NIN
SET TEXTIN(LC)=^PXD(811.9,PXRMITEM,7,IC,FI,LC,0)
+18 SET NIN=NIN+1
SET TEXTIN(NIN)="\\"
+19 IF CCSUBO
DO FNFTXTCSUBO(NIN,.TEXTIN,.NCSUBL,.CSUBTEXT,.FIEVAL)
+20 IF CTIUO
Begin DoDot:2
+21 NEW VSTR
SET VSTR=""
+22 IF CCSUBO
DO FNFTXTTIUO(NCSUBL,.CSUBTEXT,DFN,VSTR,.NTIUL,.TIUTEXT)
+23 IF 'CCSUBO
DO FNFTXTTIUO(NIN,.TEXTIN,DFN,VSTR,.NTIUL,.TIUTEXT)
End DoDot:2
+24 IF CTIUO
DO FNFTXTF(1,NTIUL,.TIUTEXT,.NLINES,.TEXT)
+25 IF CCSUBO&('CTIUO)
DO FNFTXTF(1,NCSUBL,.CSUBTEXT,.NLINES,.TEXT)
+26 IF ('CTIUO)&('CCSUBO)
DO FNFTXTF(1,NIN,.TEXTIN,.NLINES,.TEXT)
End DoDot:1
+27 DO COPYTXT^PXRMOUTU(.NTXT,NLINES,.TEXT)
+28 QUIT
+29 ;
+30 ;===============
ALLWSP(TEXT) ;If $P(TEXT,"\\",IND) is all whitespace, ASCII characters < 33
+1 ;return 1, otherwise return 0.
+2 NEW ACHAR,ALLWSP,IND,JND,LEN,NDSP,TEMP
+3 SET ALLWSP=1
+4 SET NDSP=$LENGTH(TEXT,"\\")
+5 FOR IND=1:1:NDSP
Begin DoDot:1
+6 IF ALLWSP=0
SET IND=NDSP
QUIT
+7 SET TEMP=$PIECE(TEXT,"\\",IND)
+8 SET LEN=$LENGTH(TEMP)
+9 FOR JND=1:1:LEN
Begin DoDot:2
+10 IF ALLWSP=0
SET JND=LEN
QUIT
+11 SET ACHAR=$ASCII(TEMP,JND)
+12 IF ACHAR>32
SET ALLWSP=0
End DoDot:2
End DoDot:1
+13 QUIT ALLWSP
+14 ;
+15 ;===============
CRLOGIC(DFN,NUMLINES,WPNODE,NTXT) ;Output the CONTRAINDICATED and REFUSED
+1 ;true and not true text.
+2 IF +NUMLINES'>0
QUIT
+3 NEW CCSUBO,CSUBTEXT,CTIUO,FORMAT,LC,NCSUBL,NIN,NLINES,NTIUL
+4 NEW TEXT,TEXTIN,TIUTEXT
+5 ;If CCSUBO is true the text contains a CSUB object.
+6 SET CCSUBO=$SELECT(NUMLINES["C":1,1:0)
+7 ;If CTIUO is true the text contains a TIU object.
+8 SET CTIUO=$SELECT(NUMLINES["T":1,1:0)
+9 SET NIN=+NUMLINES
SET NLINES=0
+10 FOR LC=1:1:NIN
SET TEXTIN(LC)=^PXD(811.9,PXRMITEM,WPNODE,LC,0)
+11 SET NIN=NIN+1
SET TEXTIN(NIN)="\\"
+12 IF $EXTRACT(TEXTIN(1),1,5)="'FMT:"
Begin DoDot:1
+13 SET FORMAT=0
+14 SET TEXTIN(1)=$PIECE(TEXTIN(1),"'FMT:",2)
End DoDot:1
+15 IF '$TEST
SET FORMAT=1
+16 IF CCSUBO
DO FNFTXTCSUBO(NIN,.TEXTIN,.NCSUBL,.CSUBTEXT,.FIEVAL)
+17 IF CTIUO
Begin DoDot:1
+18 NEW VSTR
SET VSTR=""
+19 IF CCSUBO
DO FNFTXTTIUO(NCSUBL,.CSUBTEXT,DFN,VSTR,.NTIUL,.TIUTEXT)
+20 IF 'CCSUBO
DO FNFTXTTIUO(NIN,.TEXTIN,DFN,VSTR,.NTIUL,.TIUTEXT)
End DoDot:1
+21 IF CTIUO
DO FNFTXTF(1,NTIUL,.TIUTEXT,.NLINES,.TEXT)
+22 IF CCSUBO&('CTIUO)
DO FNFTXTF(1,NCSUBL,.CSUBTEXT,.NLINES,.TEXT)
+23 IF ('CTIUO)&('CCSUBO)
DO FNFTXTF(1,NIN,.TEXTIN,.NLINES,.TEXT)
+24 DO COPYTXT^PXRMOUTU(.NTXT,NLINES,.TEXT)
+25 QUIT
+26 ;
+27 ;===============
FINDING(DFN,FINDING,FIEVAL,IFIEVAL,NLINES,TEXT) ;Output the finding found/not
+1 ;found text.
+2 NEW CCSUBO,CSUBTEXT,CTIUO,FI,LC,NCSUBL,NIN,NODE,NTIUL
+3 NEW TEMP,TEXTIN,TIUTEXT
+4 SET FI=$SELECT(IFIEVAL:1,1:2)
+5 SET NODE=$SELECT(FINDING["FF":25,1:20)
+6 SET TEMP=$GET(DEFARR(NODE,FINDING,6))
+7 SET NIN=$PIECE(TEMP,U,FI)
+8 IF +NIN=0
QUIT
+9 ;If CCSUBO is true the text contains a CSUB object.
+10 SET CCSUBO=$SELECT(NIN["C":1,1:0)
+11 ;If CTIUO is true the text contains a TIU object.
+12 SET CTIUO=$SELECT(NIN["T":1,1:0)
+13 IF FINDING["FF"
SET FINDING=$PIECE(FINDING,"FF",2)
+14 SET NIN=+NIN
+15 FOR LC=1:1:NIN
SET TEXTIN(LC)=^PXD(811.9,PXRMITEM,NODE,FINDING,FI,LC,0)
+16 SET NIN=NIN+1
SET TEXTIN(NIN)="\\"
+17 IF CCSUBO
DO FNFTXTCSUBO(NIN,.TEXTIN,.NCSUBL,.CSUBTEXT,.FIEVAL)
+18 IF CTIUO
Begin DoDot:1
+19 NEW VSTR
+20 IF $DATA(IFIEVAL("VISIT"))
Begin DoDot:2
+21 NEW TEMP,VDATE,VLOC,VSC
+22 SET TEMP=^AUPNVSIT(IFIEVAL("VISIT"),0)
+23 SET VDATE=$PIECE(TEMP,U,1)
+24 SET VLOC=$PIECE(TEMP,U,22)
+25 SET VSC=$PIECE(TEMP,U,7)
+26 SET VSTR=VLOC_";"_VDATE_";"_VSC
End DoDot:2
+27 IF '$TEST
SET VSTR=""
+28 IF CCSUBO
DO FNFTXTTIUO(NCSUBL,.CSUBTEXT,DFN,VSTR,.NTIUL,.TIUTEXT)
+29 IF 'CCSUBO
DO FNFTXTTIUO(NIN,.TEXTIN,DFN,VSTR,.NTIUL,.TIUTEXT)
End DoDot:1
+30 IF CTIUO
DO FNFTXTF(1,NTIUL,.TIUTEXT,.NLINES,.TEXT)
+31 IF CCSUBO&('CTIUO)
DO FNFTXTF(1,NCSUBL,.CSUBTEXT,.NLINES,.TEXT)
+32 IF ('CTIUO)&('CCSUBO)
DO FNFTXTF(1,NIN,.TEXTIN,.NLINES,.TEXT)
+33 QUIT
+34 ;
+35 ;===============
FNFTXTCSUBO(NIN,TEXTIN,NOUT,TEXTOUT,FIEVAL) ;Process Found/Not Found Text that
+1 ;contains CSUB objects.
+2 NEW IND
+3 SET NOUT=0
+4 FOR IND=1:1:NIN
Begin DoDot:1
+5 SET NOUT=NOUT+1
+6 IF TEXTIN(IND)'["$$CSUB"
SET TEXTOUT(NOUT)=TEXTIN(IND)
QUIT
+7 SET TEXTOUT(NOUT)=$$CSUBOBJ^PXRMCSUBOBJ(TEXTIN(IND),.FIEVAL)
End DoDot:1
+8 QUIT
+9 ;
+10 ;===============
FNFTXTF(INDENT,NIN,TEXTIN,NLINES,TEXT) ;Format Found/Not Found Text.
+1 ;If the original text contains objects they have been processed.
+2 ;Handles 'FMT{...}FMT blocks.
+3 NEW BEND,BSTART,INBLOCK,IND,DONE,END,JND,LEN,NTFMT,NOUT,NSBL
+4 NEW SKIP,START,TEMP,TEXTFMT,TEXTOUT,TEXTSBL,TEXTSTRING
+5 ;Process SBL blocks.
+6 DO SBL(NIN,.TEXTIN,.NSBL,.TEXTSBL)
+7 SET INBLOCK=0
SET NTFMT=0
+8 FOR IND=1:1:NSBL
Begin DoDot:1
+9 SET TEMP=TEXTSBL(IND)
+10 IF INBLOCK=0
Begin DoDot:2
+11 SET BSTART=$FIND(TEMP,"'FMT{",1)
+12 IF BSTART=0
SET NTFMT=NTFMT+1
SET TEXTFMT(NTFMT)=TEMP
QUIT
+13 IF BSTART>0
Begin DoDot:3
+14 SET INBLOCK=1
SET END=BSTART-6
+15 ;If there is text before the non-format block format it.
+16 IF END>0
SET NTFMT=NTFMT+1
SET TEXTFMT(NTFMT)=$EXTRACT(TEMP,1,END)
+17 IF NTFMT>0
Begin DoDot:4
+18 DO FORMAT^PXRMTEXT(INDENT,PXRMRM,NTFMT,.TEXTFMT,.NOUT,.TEXTOUT)
+19 FOR JND=1:1:NOUT
SET NLINES=NLINES+1
SET TEXT(NLINES)=TEXTOUT(JND)
+20 SET NTFMT=0
+21 KILL TEXTFMT
End DoDot:4
End DoDot:3
End DoDot:2
+22 IF INBLOCK>0
Begin DoDot:2
+23 SET START=$SELECT(INBLOCK=1:BSTART,1:1)
SET BEND=$FIND(TEMP,"}FMT")
+24 IF BEND=0
Begin DoDot:3
+25 SET INBLOCK=INBLOCK+1
+26 IF $EXTRACT(TEMP,START)="_"
SET TEXT(NLINES)=TEXT(NLINES)_$EXTRACT(TEMP,START+1,$LENGTH(TEMP))
+27 IF '$TEST
SET NLINES=NLINES+1
SET TEXT(NLINES)=$EXTRACT(TEMP,START,$LENGTH(TEMP))
End DoDot:3
+28 IF BEND>0
Begin DoDot:3
+29 IF $EXTRACT(TEMP,1)="_"
SET TEXT(NLINES)=TEXT(NLINES)_$EXTRACT(TEMP,2,BEND-5)
+30 IF '$TEST
SET NLINES=NLINES+1
SET TEXT(NLINES)=$EXTRACT(TEMP,START,BEND-5)
+31 SET INBLOCK=0
SET END=$LENGTH(TEMP)
+32 IF END'<BEND
SET NTFMT=NTFMT+1
SET TEXTFMT(NTFMT)=$EXTRACT(TEMP,BEND,END)
End DoDot:3
End DoDot:2
End DoDot:1
+33 IF NTFMT=0
QUIT
+34 ;Remaining text to format.
+35 DO FORMAT^PXRMTEXT(INDENT,PXRMRM,NTFMT,.TEXTFMT,.NOUT,.TEXTOUT)
+36 FOR JND=1:1:NOUT
SET NLINES=NLINES+1
SET TEXT(NLINES)=TEXTOUT(JND)
+37 QUIT
+38 ;
+39 ;===============
FNFTXTO(INDENT,NIN,TEXTIN,DFN,VSTR,NLINES,TEXT) ;This entry point is used
+1 ;by GETOCTXT^PXRMORCH.
+2 NEW IND,NFOUT,NTIUL,TEXTFOUT,TIUTEXT
+3 SET NFOUT=0
+4 DO FNFTXTTIUO(NIN,.TEXTIN,DFN,VSTR,.NTIUL,.TIUTEXT)
+5 DO FNFTXTF(INDENT,NTIUL,.TIUTEXT,.NFOUT,.TEXTFOUT)
+6 FOR IND=1:1:NFOUT
SET NLINES=NLINES+1
SET TEXT(NLINES)=TEXTFOUT(IND)
+7 QUIT
+8 ;
+9 ;===============
FNFTXTTIUO(NIN,TEXTIN,DFN,VSTR,NOUT,TEXTOUT) ;Process Found/Not Found
+1 ;Text that contains TIU objects.
+2 NEW IND,INOBJECT,JND,OBJLINE,NOL,TA
+3 ;Make sure this works if it is being called a part of an object.
+4 IF $DATA(^TMP("TIUBOIL",$JOB))
Begin DoDot:1
+5 KILL ^TMP("PXRMTIUBOIL",$JOB)
+6 MERGE ^TMP("PXRMTIUBOIL",$JOB)=^TMP("TIUBOIL",$JOB)
+7 SET INOBJECT=1
End DoDot:1
+8 IF '$TEST
SET INOBJECT=0
+9 SET NOUT=0
+10 KILL TEXTOUT
+11 FOR IND=1:1:NIN
Begin DoDot:1
+12 IF TEXTIN(IND)'["|"
SET NOUT=NOUT+1
SET TEXTOUT(NOUT)=TEXTIN(IND)
QUIT
+13 SET OBJLINE(1,0)=TEXTIN(IND)
+14 KILL ^TMP("TIUBOIL",$JOB)
+15 DO BLRPLT^TIUSRVD(.TA,"",DFN,VSTR,"OBJLINE")
+16 SET NOL=$PIECE(^TMP("TIUBOIL",$JOB,0),U,3)
+17 FOR JND=1:1:NOL
SET NOUT=NOUT+1
SET TEXTOUT(NOUT)=^TMP("TIUBOIL",$JOB,JND,0)
End DoDot:1
+18 KILL ^TMP("TIUBOIL",$JOB)
+19 IF INOBJECT
MERGE ^TMP("TIUBOIL",$JOB)=^TMP("PXRMTIUBOIL",$JOB)
KILL ^TMP("PXRMTIUBOIL",$JOB)
+20 QUIT
+21 ;
+22 ;===============
LOGIC(DFN,LOGSTR,LOGTYPE,TTYPE,DEFARR,FIEVAL,NTXT) ;Output the detailed
+1 ;logic found/not found text.
+2 IF LOGSTR=""
QUIT
+3 NEW CCSUBO,CSUBTEXT,CTIUO,FI,FORMAT,LC,NCSUBL,NIN,NLINES,NTIUL,SUB
+4 NEW TEXT,TEXTIN,TIUTEXT
+5 IF TTYPE="S"
SET NLINES=$SELECT(LOGTYPE="PCL":DEFARR(72),LOGTYPE="RES":DEFARR(77),1:0)
+6 IF '$TEST
SET NLINES=$SELECT(LOGTYPE="PCL":DEFARR(62),LOGTYPE="RES":DEFARR(67),1:0)
+7 SET FI=$PIECE(LOGSTR,U,1)
+8 SET NIN=$SELECT(FI=1:$PIECE(NLINES,U,1),FI=0:$PIECE(NLINES,U,2),1:0)
+9 IF +NIN=0
QUIT
+10 ;If CCSUBO is true the text contains a CSUB object.
+11 SET CCSUBO=$SELECT(NIN["C":1,1:0)
+12 ;If CTIUO is true the text contains a TIU object.
+13 SET CTIUO=$SELECT(NIN["T":1,1:0)
+14 IF TTYPE="S"
Begin DoDot:1
+15 IF LOGTYPE="PCL"
IF FI=1
SET SUB=70
+16 IF LOGTYPE="PCL"
IF FI=0
SET SUB=71
+17 IF LOGTYPE="RES"
IF FI=1
SET SUB=75
+18 IF LOGTYPE="RES"
IF FI=0
SET SUB=76
End DoDot:1
+19 IF '$TEST
Begin DoDot:1
+20 IF LOGTYPE="PCL"
IF FI=1
SET SUB=60
+21 IF LOGTYPE="PCL"
IF FI=0
SET SUB=61
+22 IF LOGTYPE="RES"
IF FI=1
SET SUB=65
+23 IF LOGTYPE="RES"
IF FI=0
SET SUB=66
End DoDot:1
+24 SET NLINES=0
+25 FOR LC=1:1:+NIN
SET TEXTIN(LC)=^PXD(811.9,PXRMITEM,SUB,LC,0)
+26 SET NIN=NIN+1
SET TEXTIN(NIN)="\\"
+27 IF $EXTRACT(TEXTIN(1),1,5)="'FMT:"
Begin DoDot:1
+28 SET FORMAT=0
+29 SET TEXTIN(1)=$PIECE(TEXTIN(1),"'FMT:",2)
End DoDot:1
+30 IF '$TEST
SET FORMAT=1
+31 IF CCSUBO
DO FNFTXTCSUBO(NIN,.TEXTIN,.NCSUBL,.CSUBTEXT,.FIEVAL)
+32 IF CTIUO
Begin DoDot:1
+33 NEW VSTR
SET VSTR=""
+34 IF CCSUBO
DO FNFTXTTIUO(NCSUBL,.CSUBTEXT,DFN,VSTR,.NTIUL,.TIUTEXT)
+35 IF 'CCSUBO
DO FNFTXTTIUO(NIN,.TEXTIN,DFN,VSTR,.NTIUL,.TIUTEXT)
End DoDot:1
+36 IF CTIUO
DO FNFTXTF(1,NTIUL,.TIUTEXT,.NLINES,.TEXT)
+37 IF CCSUBO&('CTIUO)
DO FNFTXTF(1,NCSUBL,.CSUBTEXT,.NLINES,.TEXT)
+38 IF ('CTIUO)&('CCSUBO)
DO FNFTXTF(1,NIN,.TEXTIN,.NLINES,.TEXT)
+39 DO COPYTXT^PXRMOUTU(.NTXT,NLINES,.TEXT)
+40 QUIT
+41 ;
+42 ;===============
SBL(NIN,TEXTIN,NOUT,TEXTOUT) ;Process SBL{...}SBL blocks.
+1 NEW BEND,BSTART,END,INBLOCK,JND,SBLSTRING,SKIP,START,TEMP
+2 SET INBLOCK=0
SET NOUT=0
SET SBLSTRING=""
+3 FOR JND=1:1:NIN
Begin DoDot:1
+4 SET TEMP=TEXTIN(JND)
+5 SET BSTART=$SELECT(INBLOCK=0:$FIND(TEMP,"SBL{"),1:0)
+6 IF (INBLOCK=0)
IF (BSTART=0)
SET NOUT=NOUT+1
SET TEXTOUT(NOUT)=TEMP
QUIT
+7 ;If BSTART>5 there is text before the start of the SBL{ block.
+8 IF BSTART>5
SET NOUT=NOUT+1
SET TEXTOUT(NOUT)=$EXTRACT(TEMP,1,BSTART-6)
SET INBLOCK=INBLOCK+1
+9 SET BEND=$FIND(TEMP,"}SBL")
+10 IF (BSTART>0)
IF (BEND)>0
Begin DoDot:2
+11 SET SBLSTRING=$EXTRACT(TEMP,BSTART,BEND-5)
+12 SET SKIP=$$ALLWSP(SBLSTRING)
+13 IF 'SKIP
SET NOUT=NOUT+1
SET TEXTOUT(NOUT)=SBLSTRING
+14 ;If there is text after the SBL block add it.
+15 SET END=$LENGTH(TEMP)
+16 IF END>BEND
SET NOUT=NOUT+1
SET TEXTOUT(NOUT)=$EXTRACT(TEMP,BEND,END)
End DoDot:2
QUIT
+17 IF ((INBLOCK>0)!(BSTART>0))
IF (BEND=0)
Begin DoDot:2
+18 SET INBLOCK=INBLOCK+1
+19 SET END=$LENGTH(TEMP)
+20 SET START=$SELECT(BSTART>0:BSTART,1:1)
+21 SET SBLSTRING=SBLSTRING_$EXTRACT(TEMP,START,END)
+22 IF TEMP'["\\"
QUIT
+23 SET SKIP=$$ALLWSP(SBLSTRING)
+24 IF 'SKIP
SET NOUT=NOUT+1
SET TEXTOUT(NOUT)=SBLSTRING
+25 SET SBLSTRING=""
End DoDot:2
QUIT
+26 IF (INBLOCK>0)
IF (BEND>0)
Begin DoDot:2
+27 SET INBLOCK=0
+28 SET SBLSTRING=SBLSTRING_$EXTRACT(TEMP,1,BEND-5)
+29 SET SKIP=$$ALLWSP(SBLSTRING)
+30 IF 'SKIP
SET NOUT=NOUT+1
SET TEXTOUT(NOUT)=SBLSTRING
+31 SET SBLSTRING=""
+32 ;If there is text after the SBL block add it.
+33 SET END=$LENGTH(TEMP)
+34 IF END>BEND
SET TEXTOUT(NOUT)=TEXTOUT(NOUT)_$EXTRACT(TEMP,BEND,END)
End DoDot:2
End DoDot:1
+35 QUIT
+36 ;
+37 ;===============
SNMLA(RIEN) ;Set the number of match lines for the age match text.
+1 NEW IND,JND,LC,MATCHLC,NCSUB,NPIPE,RES,TEXT,WMSG
+2 SET IND=0
+3 FOR
SET IND=+$ORDER(^PXD(811.9,RIEN,7,IND))
if IND=0
QUIT
Begin DoDot:1
+4 ;Age match text
+5 SET (JND,LC,NCSUB,NPIPE)=0
+6 FOR
SET JND=$ORDER(^PXD(811.9,RIEN,7,IND,1,JND))
if JND=""
QUIT
Begin DoDot:2
+7 SET TEXT=^PXD(811.9,RIEN,7,IND,1,JND,0)
+8 IF TEXT["$$CSUB"
SET NCSUB=NCSUB+1
+9 SET NPIPE=NPIPE+$LENGTH(TEXT,"|")-1
+10 SET LC=LC+1
End DoDot:2
+11 SET MATCHLC=LC
+12 IF (NPIPE#2)=1
Begin DoDot:2
+13 SET WMSG="match text for age range "_IND
+14 DO TIUOBJW(WMSG,NPIPE)
End DoDot:2
+15 IF NCSUB>0
SET MATCHLC=MATCHLC_"C"
+16 IF NPIPE>1
SET MATCHLC=MATCHLC_"T"
+17 ;Age no match text
+18 SET (JND,LC,NCSUB,NPIPE)=0
+19 FOR
SET JND=$ORDER(^PXD(811.9,RIEN,7,IND,2,JND))
if JND=""
QUIT
Begin DoDot:2
+20 SET TEXT=^PXD(811.9,RIEN,7,IND,2,JND,0)
+21 IF TEXT["$$CSUB"
SET NCSUB=NCSUB+1
+22 SET NPIPE=NPIPE+$LENGTH(TEXT,"|")-1
+23 SET LC=LC+1
End DoDot:2
+24 IF (NPIPE#2)=1
Begin DoDot:2
+25 SET WMSG="no match text for age range "_IND
+26 DO TIUOBJW(WMSG,NPIPE)
End DoDot:2
+27 IF NCSUB>0
SET LC=LC_"C"
+28 IF NPIPE>1
SET LC=LC_"T"
+29 SET ^PXD(811.9,RIEN,7,IND,3)=MATCHLC_U_LC
End DoDot:1
+30 QUIT
+31 ;
+32 ;===============
SNMLF(RIEN,NODE) ;Set the number of found lines for the found text.
+1 ;For regular and function findings.
+2 NEW IND,JND,LC,NCSUB,NFL,NNAME,NPIPE,RES,TEXT,WMSG
+3 SET NNAME=$SELECT(NODE=20:"finding",NODE=25:"function finding",1:"?")
+4 SET IND=0
+5 FOR
SET IND=+$ORDER(^PXD(811.9,RIEN,NODE,IND))
if IND=0
QUIT
Begin DoDot:1
+6 ;Found text
+7 SET (JND,LC,NCSUB,NPIPE)=0
+8 FOR
SET JND=$ORDER(^PXD(811.9,RIEN,NODE,IND,1,JND))
if JND=""
QUIT
Begin DoDot:2
+9 SET TEXT=^PXD(811.9,RIEN,NODE,IND,1,JND,0)
+10 IF TEXT["$$CSUB"
SET NCSUB=NCSUB+1
+11 SET NPIPE=NPIPE+$LENGTH(TEXT,"|")-1
+12 SET LC=LC+1
End DoDot:2
+13 SET NFL=LC
+14 IF (NPIPE#2)=1
Begin DoDot:2
+15 SET WMSG="found text for "_NNAME_" "_IND
+16 DO TIUOBJW(WMSG,NPIPE)
End DoDot:2
+17 IF NCSUB>0
SET NFL=NFL_"C"
+18 IF NPIPE>1
SET NFL=NFL_"T"
+19 ;Not found text
+20 SET (JND,LC,NCSUB,NPIPE)=0
+21 FOR
SET JND=$ORDER(^PXD(811.9,RIEN,NODE,IND,2,JND))
if JND=""
QUIT
Begin DoDot:2
+22 SET TEXT=^PXD(811.9,RIEN,NODE,IND,2,JND,0)
+23 IF TEXT["$$CSUB"
SET NCSUB=NCSUB+1
+24 SET NPIPE=NPIPE+$LENGTH(TEXT,"|")-1
+25 SET LC=LC+1
End DoDot:2
+26 IF (NPIPE#2)=1
Begin DoDot:2
+27 SET WMSG="not found text for "_NNAME_" "_IND
+28 DO TIUOBJW(WMSG,NPIPE)
End DoDot:2
+29 IF NCSUB>0
SET LC=LC_"C"
+30 IF NPIPE>1
SET LC=LC_"T"
+31 SET ^PXD(811.9,RIEN,NODE,IND,6)=NFL_U_LC
End DoDot:1
+32 QUIT
+33 ;
+34 ;===============
SNMLL(RIEN) ;Set the number of lines for the logic found/not found
+1 ;text. Append a "T" to the number of lines if the text contains
+2 ;a TIU object.
+3 NEW CSTR,CSUB,IND,LC,NPIPE,RES,SUB,TEXT,TTYPE
+4 ;SUB=60 General cohort found text
+5 ;SUB=61 General cohort not found text
+6 ;SUB=65 General resolution found text
+7 ;SUB=66 General resolution not found text
+8 ;SUB=70 Summary cohort found text
+9 ;SUB=71 Summary cohort not found text
+10 ;SUB=75 Summary resolution found text
+11 ;SUB=76 Summary resolution not found text
+12 ;SUB=83 Contraindicated true text
+13 ;SUB=84 Contraindicated false text
+14 ;SUB=93 Refused true tex
+15 ;SUB=94 Refused false text
+16 FOR SUB=60,61,65,66,70,71,75,76,83,84,93,94
Begin DoDot:1
+17 SET (IND,LC,NCSUB,NPIPE)=0
+18 FOR
SET IND=$ORDER(^PXD(811.9,RIEN,SUB,IND))
if IND=""
QUIT
Begin DoDot:2
+19 SET TEXT=^PXD(811.9,RIEN,SUB,IND,0)
+20 IF TEXT["$$CSUB"
SET NCSUB=NCSUB+1
+21 SET NPIPE=NPIPE+$LENGTH(TEXT,"|")-1
+22 SET LC=LC+1
End DoDot:2
+23 IF (NPIPE#2)=1
Begin DoDot:2
+24 IF SUB=60
SET TTYPE="general cohort found text"
+25 IF SUB=61
SET TTYPE="general cohort not found text"
+26 IF SUB=65
SET TTYPE="general resolution found text"
+27 IF SUB=66
SET TTYPE="general resolution not found text"
+28 IF SUB=70
SET TTYPE="summary cohort found text"
+29 IF SUB=71
SET TTYPE="summary cohort not found text"
+30 IF SUB=75
SET TTYPE="summary resolution found text"
+31 IF SUB=76
SET TTYPE="summary resolution not found text"
+32 IF SUB=83
SET TTYPE="contraindicated true text"
+33 IF SUB=84
SET TTYPE="contraindicated false text"
+34 IF SUB=93
SET TTYPE="refused true text"
+35 IF SUB=94
SET TTYPE="refused false text"
+36 DO TIUOBJW(TTYPE,NPIPE)
End DoDot:2
+37 IF NCSUB>0
SET LC=LC_"C"
+38 IF NPIPE>1
SET LC=LC_"T"
+39 IF SUB=60
SET CSTR=LC
+40 IF SUB=61
SET ^PXD(811.9,RIEN,62)=CSTR_U_LC
+41 IF SUB=65
SET CSTR=LC
+42 IF SUB=66
SET ^PXD(811.9,RIEN,67)=CSTR_U_LC
+43 IF SUB=70
SET CSTR=LC
+44 IF SUB=71
SET ^PXD(811.9,RIEN,72)=CSTR_U_LC
+45 IF SUB=75
SET CSTR=LC
+46 IF SUB=76
SET ^PXD(811.9,RIEN,77)=CSTR_U_LC
+47 IF SUB=83
SET CSTR=LC
+48 IF SUB=84
SET ^PXD(811.9,RIEN,85)=CSTR_U_LC
+49 IF SUB=93
SET CSTR=LC
+50 IF SUB=94
SET ^PXD(811.9,RIEN,95)=CSTR_U_LC
End DoDot:1
+51 QUIT
+52 ;
+53 ;===============
TIUOBJW(WMSG,NPIPE) ;Odd number of "|" characters in text, issue
+1 ;a warning that TIU OBJ expansion will not work.
+2 NEW TEXT
+3 SET TEXT(1)=""
+4 SET TEXT(2)="Warning, "_WMSG_" has "_NPIPE_" ""|"" characters."
+5 SET TEXT(3)="Because this is an odd number, TIU Object expansion will not work."
+6 DO MES^XPDUTL(.TEXT)
+7 QUIT
+8 ;