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

PXRMCF.m

Go to the documentation of this file.
  1. PXRMCF ;SLC/PKR - Handle computed findings. ;02/07/2014
  1. ;;2.0;CLINICAL REMINDERS;**6,12,18,26**;Feb 04, 2005;Build 404
  1. ;
  1. ;=======================================================
  1. HELP(IEN) ;Display help for a computed finding.
  1. N ANS,IND,N,OUTPUT,TEMP,TEXT
  1. S TEMP=^PXRMD(811.4,IEN,0)
  1. S TEXT="Display help for CF."_$P(TEMP,U,1)
  1. S ANS=$$ASKYN^PXRMEUT("N",TEXT)
  1. I ANS=0 Q
  1. S TITLE="Computed Finding Description"
  1. S OUTPUT(1)="Computed finding: "_$P(TEMP,U,1)
  1. S OUTPUT(2)="Type: "_$$EXTERNAL^DILFD(811.4,5,"",$P(TEMP,U,5),"")
  1. S OUTPUT(3)="Class: "_$$EXTERNAL^DILFD(811.4,100,"",$P(^PXRMD(811.4,IEN,100),U,1),"")
  1. S OUTPUT(4)=""
  1. S IND=0,NL=4
  1. F S IND=+$O(^PXRMD(811.4,IEN,1,IND)) Q:IND=0 D
  1. . S NL=NL+1,OUTPUT(NL)=^PXRMD(811.4,IEN,1,IND,0)
  1. I NL=4 S OUTPUT(4)="There is no description for this computed finding."
  1. D BROWSE^DDBR("OUTPUT","NR","Computed Finding Help")
  1. Q
  1. ;
  1. ;=======================================================
  1. EVALFI(DFN,DEFARR,ENODE,FIEVAL) ;Evaluate computed findings.
  1. N FIEVT,FILENUM,FINDING,FINDPA,ITEM
  1. S FILENUM=$$GETFNUM^PXRMDATA(ENODE)
  1. S ITEM=""
  1. F S ITEM=$O(DEFARR("E",ENODE,ITEM)) Q:+ITEM=0 D
  1. . S FINDING=""
  1. . F S FINDING=$O(DEFARR("E",ENODE,ITEM,FINDING)) Q:+FINDING=0 D
  1. .. K FINDPA
  1. .. M FINDPA=DEFARR(20,FINDING)
  1. .. K FIEVT
  1. .. D FIEVAL(FILENUM,DFN,ITEM,.FINDPA,.FIEVT)
  1. .. M FIEVAL(FINDING)=FIEVT
  1. .. S FIEVAL(FINDING,"FINDING")=$P(FINDPA(0),U,1)
  1. Q
  1. ;
  1. ;=======================================================
  1. EVALPL(FINDPA,ENODE,TERMARR,PLIST) ;Patient list evaluator.
  1. ;Return the list in ^TMP($J,PLIST)
  1. N ITEM,FILENUM,PFINDPA
  1. N TEMP,TFINDING,TFINDPA
  1. S FILENUM=$$GETFNUM^PXRMDATA(ENODE)
  1. S ITEM=""
  1. F S ITEM=$O(TERMARR("E",ENODE,ITEM)) Q:+ITEM=0 D
  1. . S TFINDING=""
  1. . F S TFINDING=$O(TERMARR("E",ENODE,ITEM,TFINDING)) Q:+TFINDING=0 D
  1. .. K PFINDPA,TFINDPA
  1. .. M TFINDPA=TERMARR(20,TFINDING)
  1. ..;Set the finding parameters.
  1. .. D SPFINDPA^PXRMTERM(.FINDPA,.TFINDPA,.PFINDPA)
  1. .. D GPLIST(FILENUM,ITEM,.PFINDPA,PLIST)
  1. Q
  1. ;
  1. ;=======================================================
  1. EVALTERM(DFN,FINDPA,ENODE,TERMARR,TFIEVAL) ;General term
  1. ;evaluator.
  1. N FIEVT,FILENUM,ITEM,PFINDPA
  1. N TEMP,TFINDING,TFINDPA
  1. S FILENUM=$$GETFNUM^PXRMDATA(ENODE)
  1. S ITEM=""
  1. F S ITEM=$O(TERMARR("E",ENODE,ITEM)) Q:+ITEM=0 D
  1. . S TFINDING=""
  1. . F S TFINDING=$O(TERMARR("E",ENODE,ITEM,TFINDING)) Q:+TFINDING=0 D
  1. .. K FIEVT,PFINDPA,TFINDPA
  1. .. M TFINDPA=TERMARR(20,TFINDING)
  1. ..;Set the finding parameters.
  1. .. D SPFINDPA^PXRMTERM(.FINDPA,.TFINDPA,.PFINDPA)
  1. .. D FIEVAL(FILENUM,DFN,ITEM,.PFINDPA,.FIEVT)
  1. .. M TFIEVAL(TFINDING)=FIEVT
  1. .. S TFIEVAL(TFINDING,"FINDING")=$P(TFINDPA(0),U,1)
  1. Q
  1. ;
  1. ;=======================================================
  1. FIEVAL(FILENUM,DFN,ITEM,PFINDPA,FIEVAL) ;
  1. ;Evaluate regular patient findings.
  1. N BDT,CASESEN,COND,CONVAL,DAS,DATA,DATE,EDT,FLIST,ICOND,IND
  1. N NFOUND,NGET,NOCC,NP,PDATA,ROUTINE
  1. N SAVE,SDIR,STATUSA,TEMP,TEST,TEXT,TYPE,UCIFS,VALUE,VSLIST
  1. ;Set the finding search parameters.
  1. D SSPAR^PXRMUTIL(PFINDPA(0),.NOCC,.BDT,.EDT)
  1. I $G(PXRMDEBG) S FIEVAL("BDTE")=BDT,FIEVAL("EDTE")=EDT
  1. S SDIR=$S(NOCC<0:+1,1:-1)
  1. S TEST=PFINDPA(15)
  1. D SCPAR^PXRMCOND(.PFINDPA,.CASESEN,.COND,.UCIFS,.ICOND,.VSLIST)
  1. S NGET=$S(UCIFS:50,$D(STATUSA):50,1:NOCC)
  1. ;Make sure NGET has the same sign as NOCC.
  1. I NGET'=NOCC S NGET=NGET*($$ABS^XLFMTH(NOCC)/NOCC)
  1. S TEMP=^PXRMD(811.4,ITEM,0)
  1. S TYPE=$P(TEMP,U,5)
  1. I TYPE="" S TYPE="S"
  1. I TYPE="S" D
  1. . S ROUTINE=$P(TEMP,U,3)_"^"_$P(TEMP,U,2)_"(DFN,.TEST,.DATE,.VALUE,.TEXT)"
  1. . D @ROUTINE
  1. .;Make sure that the date is in range.
  1. . I TEST,DATE'<BDT,DATE'>EDT S NFOUND=1
  1. . E S NFOUND=0
  1. . I NFOUND D
  1. .. S TEST(1)=TEST,DATE(1)=DATE,TEXT(1)=$G(TEXT)
  1. .. S DATA(1,"VALUE")=$G(VALUE)
  1. .. I $D(VALUE)=11 S IND="" F S IND=$O(VALUE(IND)) Q:IND="" S DATA(1,IND)=VALUE(IND)
  1. I TYPE="M" D
  1. . S ROUTINE=$P(TEMP,U,3)_"^"_$P(TEMP,U,2)_"(DFN,NGET,BDT,EDT,.NFOUND,.TEST,.DATE,.DATA,.TEXT)"
  1. . D @ROUTINE
  1. I TYPE'="S",TYPE'="M" D
  1. . S NFOUND=0
  1. . S ^TMP(PXRMPID,$J,PXRMITEM,"WARNING","COMPUTED FINDING","WRONG TYPE")=TYPE_" IS NOT SUITABLE FOR REMINDER EVALUATION"
  1. I NFOUND=0 S FIEVAL=0 Q
  1. S NP=0
  1. F IND=1:1:NFOUND Q:NP=NOCC D
  1. . S DATA(IND,"DATE")=DATE(IND)
  1. . I TEST(IND),COND'="" D
  1. .. K PDATA M PDATA=DATA(IND)
  1. .. S CONVAL=$$COND^PXRMCOND(CASESEN,ICOND,VSLIST,.PDATA)
  1. . E S CONVAL=TEST(IND)
  1. . S SAVE=$S('UCIFS:1,(UCIFS&CONVAL):1,1:0)
  1. . I SAVE D
  1. .. S NP=NP+1
  1. .. S FIEVAL(NP)=CONVAL
  1. .. I COND'="" S FIEVAL(NP,"CONDITION")=CONVAL
  1. .. S FIEVAL(NP,"DATE")=DATE(IND)
  1. .. M FIEVAL(NP,"TEXT")=TEXT(IND)
  1. .. M FIEVAL(NP)=DATA(IND)
  1. .. I $G(PXRMDEBG) M FIEVAL(NP,"CSUB")=DATA(IND)
  1. ;
  1. ;Save the finding result.
  1. D SFRES^PXRMUTIL(SDIR,NP,.FIEVAL)
  1. S FIEVAL("FILE NUMBER")=FILENUM
  1. Q
  1. ;
  1. ;=======================================================
  1. GPLIST(FILENUM,CFIEN,PFINDPA,PLIST) ;Add to the patient list
  1. ;for a regular file.
  1. N BDT,CASESEN,COND,CONVAL,DAS,DATE,EDT,DATA,DFN,FLIST
  1. N ICOND,IND,IPLIST
  1. N NOCC,NOCCABS,NFOUND,NGET,NP,PARAM,ROUTINE
  1. N SAVE,STATUSA,TEMP,TEXT,TGLIST,TPLIST,TYPE
  1. N UCIFS,VALUE,VSLIST
  1. S TEMP=^PXRMD(811.4,CFIEN,0)
  1. S TYPE=$P(TEMP,U,5)
  1. I TYPE'="L" Q
  1. S TGLIST="GPLIST_PXRMCF"
  1. S PARAM=PFINDPA(15)
  1. ;Set the finding search parameters.
  1. D SSPAR^PXRMUTIL(PFINDPA(0),.NOCC,.BDT,.EDT)
  1. S NOCCABS=$$ABS^XLFMTH(NOCC)
  1. D SCPAR^PXRMCOND(.PFINDPA,.CASESEN,.COND,.UCIFS,.ICOND,.VSLIST)
  1. S NGET=$S(UCIFS:50,$D(STATUSA):50,1:NOCCABS)
  1. K ^TMP($J,TGLIST)
  1. S ROUTINE=$P(TEMP,U,3)_"^"_$P(TEMP,U,2)_"(NGET,BDT,EDT,TGLIST,PARAM)"
  1. D @ROUTINE
  1. ;Routine should return:
  1. ;^TMP($J,TGLIST,DFN,N)=DAS_U_DATE_U_FILENUM_U_ITEM_U_VALUE
  1. ;Data values for condition are returned in
  1. ;^TMP($J,TGLIST,DFN,N,SUB)=DATA(SUB)
  1. S DFN=""
  1. F S DFN=$O(^TMP($J,TGLIST,DFN)) Q:DFN="" D
  1. . K TPLIST
  1. . M TPLIST=^TMP($J,TGLIST,DFN)
  1. . S (IND,NFOUND)=0
  1. . K IPLIST
  1. . F S IND=$O(TPLIST(IND)) Q:(IND="")!(NFOUND=NOCCABS) D
  1. .. S TEMP=TPLIST(IND)
  1. .. K DATA M DATA=TPLIST(IND)
  1. .. S CONVAL=$S(COND'="":$$COND^PXRMCOND(CASESEN,ICOND,VSLIST,.DATA),1:1)
  1. .. S SAVE=$S('UCIFS:1,(UCIFS&CONVAL):1,1:0)
  1. .. I SAVE D
  1. ... S NFOUND=NFOUND+1
  1. ... S IPLIST(CONVAL,DFN,CFIEN,NFOUND,FILENUM)=TEMP
  1. . M ^TMP($J,PLIST)=IPLIST
  1. K ^TMP($J,TGLIST)
  1. Q
  1. ;
  1. ;=======================================================
  1. MHVOUT(INDENT,IFIEVAL,NLINES,TEXT) ;Produce the MHV output.
  1. N DATA,DATE,FIEN,IND,JND,KND,NAME,NOUT,PNAME,TEMP,TEXTOUT,VALUE
  1. S FIEN=$P(IFIEVAL("FINDING"),";",1)
  1. S TEMP=^PXRMD(811.4,FIEN,0)
  1. S PNAME=$P(TEMP,U,4)
  1. I PNAME="" S PNAME=$P(TEMP,U,1)
  1. S NAME="Computed Finding: "_PNAME_" = "
  1. S IND=0
  1. F S IND=+$O(IFIEVAL(IND)) Q:IND=0 D
  1. . S VALUE=$G(IFIEVAL(IND,"VALUE"))
  1. . S DATE=IFIEVAL(IND,"DATE")
  1. . S TEMP=NAME_VALUE_" ("_$$EDATE^PXRMDATE(DATE)_")"
  1. . D FORMATS^PXRMTEXT(INDENT+2,PXRMRM,TEMP,.NOUT,.TEXTOUT)
  1. . F JND=1:1:NOUT S NLINES=NLINES+1,TEXT(NLINES)=TEXTOUT(JND)
  1. .;If there is additional text output each line separately.
  1. . S KND=""
  1. . F S KND=$O(IFIEVAL(IND,"TEXT",KND)) Q:KND="" D
  1. .. D FORMATS^PXRMTEXT(INDENT+4,PXRMRM,IFIEVAL(IND,"TEXT",KND),.NOUT,.TEXTOUT)
  1. .. F JND=1:1:NOUT S NLINES=NLINES+1,TEXT(NLINES)=TEXTOUT(JND)
  1. S NLINES=NLINES+1,TEXT(NLINES)=""
  1. Q
  1. ;
  1. ;=======================================================
  1. OUTPUT(INDENT,IFIEVAL,NLINES,TEXT) ;Produce the clinical
  1. ;maintenance output.
  1. N DATA,DATE,FIEN,IND,JND,KND,NOUT,PNAME,TEMP,TEXTOUT,VALUE
  1. S FIEN=$P(IFIEVAL("FINDING"),";",1)
  1. S TEMP=^PXRMD(811.4,FIEN,0)
  1. S PNAME=$P(TEMP,U,4)
  1. I PNAME="" S PNAME=$P(TEMP,U,1)
  1. S NLINES=NLINES+1
  1. S TEXT(NLINES)=$$INSCHR^PXRMEXLC(INDENT," ")_"Computed Finding: "_PNAME
  1. S IND=0
  1. F S IND=+$O(IFIEVAL(IND)) Q:IND=0 D
  1. . S DATE=IFIEVAL(IND,"DATE")
  1. . S TEMP=$$EDATE^PXRMDATE(DATE)
  1. . S VALUE=$G(IFIEVAL(IND,"VALUE"))
  1. . I VALUE'="" S TEMP=TEMP_" value - "_VALUE
  1. .;If there is text append it.
  1. . I $G(IFIEVAL(IND,"TEXT"))'="" S TEMP=TEMP_"; "_IFIEVAL(IND,"TEXT")
  1. . D FORMATS^PXRMTEXT(INDENT+2,PXRMRM,TEMP,.NOUT,.TEXTOUT)
  1. . F JND=1:1:NOUT S NLINES=NLINES+1,TEXT(NLINES)=TEXTOUT(JND)
  1. .;If there is additional text output each line separately.
  1. . S KND=""
  1. . F S KND=$O(IFIEVAL(IND,"TEXT",KND)) Q:KND="" D
  1. .. D FORMATS^PXRMTEXT(INDENT+4,PXRMRM,IFIEVAL(IND,"TEXT",KND),.NOUT,.TEXTOUT)
  1. .. F JND=1:1:NOUT S NLINES=NLINES+1,TEXT(NLINES)=TEXTOUT(JND)
  1. S NLINES=NLINES+1,TEXT(NLINES)=""
  1. Q
  1. ;