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

PXRMDEV.m

Go to the documentation of this file.
  1. PXRMDEV ;SLC/PKR - This is a driver for testing Clinical Reminders. ;06/23/2020
  1. ;;2.0;CLINICAL REMINDERS;**4,6,11,16,18,24,26,47,45,46,42**;Feb 04, 2005;Build 245
  1. ;
  1. ;===============
  1. DEB ;Prompt for patient and reminder by name input component.
  1. N DATE,DFN,DIC,DIR,DIROUT,DTOUT,DUOUT,HASFF,HASTERM,IND
  1. N PXRHM,PXRMFFSS,PXRMITEM,PXRMTDEB,X,Y
  1. S DIC=2,DIC("A")="Select Patient: "
  1. S DIC(0)="AEQMZ"
  1. GPAT1 D ^DIC
  1. I $D(DIROUT)!$D(DIRUT) Q
  1. I $D(DTOUT)!$D(DUOUT) Q
  1. S DFN=+$P(Y,U,1)
  1. I DFN=-1 G GPAT1
  1. S DIC=811.9,DIC("A")="Select Reminder: "
  1. GREM1 D ^DIC
  1. I $D(DIROUT)!$D(DIRUT) Q
  1. I $D(DTOUT)!$D(DUOUT) Q
  1. S PXRMITEM=+$P(Y,U,1)
  1. I PXRMITEM=-1 G GREM1
  1. S DIR(0)="LA"_U_"0"
  1. S DIR("A")="Enter component number 0, 1, 5, 10, 11, 12, 55: "
  1. D ^DIR
  1. I $D(DIROUT)!$D(DIRUT) Q
  1. I $D(DTOUT)!$D(DUOUT) Q
  1. I X="" S X=5
  1. S PXRHM=X
  1. S DIR(0)="DA^"_0_"::ETX"
  1. S DIR("A")="Enter date for reminder evaluation: "
  1. S DIR("B")=$$FMTE^XLFDT($$DT^XLFDT,"D")
  1. S DIR("PRE")="S X=$$DCHECK^PXRMDATE(X) K:X=-1 X"
  1. W !
  1. D ^DIR K DIR
  1. I $D(DIROUT)!$D(DIRUT) Q
  1. I $D(DTOUT)!$D(DUOUT) Q
  1. S DATE=Y
  1. S (HASFF,HASTERM,PXRMFFSS,PXRMTDEB)=0
  1. I $D(^PXD(811.9,PXRMITEM,25,"B")) S HASFF=1
  1. I HASFF S PXRMFFSS=$$ASKYN^PXRMEUT("N","Display step-by-step function finding evaluation","","")
  1. I $D(^PXD(811.9,PXRMITEM,20,"E","PXRMD(811.5,")) S HASTERM=1
  1. I 'HASTERM D
  1. . S IND=0
  1. . F S IND=+$O(^PXD(811.9,PXRMITEM,20,"EDEP",IND)) Q:IND=0 D
  1. .. I $D(^PXD(811.9,PXRMITEM,20,"EDEP",IND,"PXRMD(811.5,")) S HASTERM=1
  1. I HASTERM S PXRMTDEB=$$ASKYN^PXRMEUT("N","Display all term findings","","")
  1. D DOREM(DFN,PXRMITEM,PXRHM,DATE)
  1. Q
  1. ;
  1. ;===============
  1. DEV ;Prompt for patient and reminder by name and evaluation date.
  1. N DATE,DFN,DIC,DIROUT,DIRUT,DTOUT,DUOUT,HASFF,HASTERM,IND
  1. N PXRHM,PXRMFFSS,PXRMITEM,PXRMTDEB,REF,X,Y
  1. S DIC=2,DIC("A")="Select Patient: "
  1. S DIC(0)="AEQMZ"
  1. GPAT2 D ^DIC
  1. I $D(DIROUT)!$D(DIRUT) Q
  1. I $D(DTOUT)!$D(DUOUT) Q
  1. S DFN=+$P(Y,U,1)
  1. I DFN=-1 G GPAT2
  1. S DIC=811.9,DIC("A")="Select Reminder: "
  1. GREM2 D ^DIC
  1. I $D(DIROUT)!$D(DIRUT) Q
  1. I $D(DTOUT)!$D(DUOUT) Q
  1. S PXRMITEM=+$P(Y,U,1)
  1. I PXRMITEM=-1 G GREM2
  1. S PXRHM=5
  1. S DIR(0)="DA^"_0_"::ET"
  1. S DIR("A")="Enter date for reminder evaluation: "
  1. S DIR("B")=$$FMTE^XLFDT($$DT^XLFDT,"D")
  1. S DIR("PRE")="S X=$$DCHECK^PXRMDATE(X) K:X=-1 X"
  1. W !
  1. D ^DIR K DIR
  1. I $D(DIROUT)!$D(DIRUT) Q
  1. I $D(DTOUT)!$D(DUOUT) Q
  1. S DATE=Y
  1. S (HASFF,HASTERM,PXRMFFSS,PXRMTDEB)=0
  1. I $D(^PXD(811.9,PXRMITEM,25,"B")) S HASFF=1
  1. I HASFF S PXRMFFSS=$$ASKYN^PXRMEUT("N","Display step-by-step function finding evaluation","","")
  1. I $D(^PXD(811.9,PXRMITEM,20,"E","PXRMD(811.5,")) S HASTERM=1
  1. I 'HASTERM D
  1. . S IND=0
  1. . F S IND=+$O(^PXD(811.9,PXRMITEM,20,"EDEP",IND)) Q:IND=0 D
  1. .. I $D(^PXD(811.9,PXRMITEM,20,"EDEP",IND,"PXRMD(811.5,")) S HASTERM=1
  1. I HASTERM S PXRMTDEB=$$ASKYN^PXRMEUT("N","Display all term findings","","")
  1. D DOREM(DFN,PXRMITEM,PXRHM,DATE)
  1. Q
  1. ;
  1. ;===============
  1. DISP01(FIEVAL) ;For Education Topics, Exams, and Health Factors the Print Name
  1. ;is displayed in the Clinical Maintenance Output. Since Print Names
  1. ;are not unique it can be difficult to determine what the actual
  1. ;finding is so display the .01.
  1. N IEN,IND
  1. S IND=0
  1. F S IND=+$O(FIEVAL(IND)) Q:IND=0 D
  1. . I FIEVAL(IND)=0 Q
  1. . S IEN=$P(FIEVAL(IND,"FINDING"),";",1)
  1. . I FIEVAL(IND,"FILE NUMBER")=9000010.16 S FIEVAL(IND,"NAME")=$P(^AUTTEDT(IEN,0),U,1)
  1. . I FIEVAL(IND,"FILE NUMBER")=9000010.13 S FIEVAL(IND,"NAME")=$P(^AUTTEXAM(IEN,0),U,1)
  1. . I FIEVAL(IND,"FILE NUMBER")=9000010.23 S FIEVAL(IND,"FACTOR")=$P(^AUTTHF(IEN,0),U,1)
  1. Q
  1. ;
  1. ;===============
  1. DOREM(DFN,PXRMITEM,PXRHM,DATE) ;Do the reminder
  1. ;Reference to XLFSHAN ICR #6157
  1. N BOP,DEFARR,END,FFN,FFNUMBER,FIEVAL,FINDING,IND,JND,NL,NOUT,OUTPUT
  1. N PNAME,PXRMDEBG,PXRMID,REF,RIEN,RNAME,START,STATUS
  1. N TEXT,TEXTOUT,TFIEVAL,TTEXT,WSTART,WEND,X
  1. ;This is a debugging run so set PXRMDEBG.
  1. S NL=0,PXRMDEBG=1
  1. S WSTART=$H
  1. S START=$$CPUTIME^XLFSHAN
  1. D DEF^PXRMLDR(PXRMITEM,.DEFARR)
  1. I +$G(DATE)=0 D EVAL^PXRM(DFN,.DEFARR,PXRHM,1,.FIEVAL)
  1. I +$G(DATE)>0 D EVAL^PXRM(DFN,.DEFARR,PXRHM,1,.FIEVAL,DATE)
  1. S END=$$CPUTIME^XLFSHAN
  1. S WEND=$H
  1. ;
  1. I $D(^TMP(PXRMID,$J,"FFDEB")) M FIEVAL=^TMP(PXRMID,$J,"FFDEB") K ^TMP(PXRMID,$J,"FFDEB")
  1. ;
  1. S TTEXT=^PXD(811.9,PXRMITEM,0)
  1. S PNAME=$P(TTEXT,U,2)
  1. I PNAME="" S PNAME=$P(TTEXT,U,1)
  1. S NL=NL+1,OUTPUT(NL)="Reminder: "_PNAME
  1. S NL=NL+1,OUTPUT(NL)="Patient: "_$$GET1^DIQ(2,DFN,.01)
  1. S NL=NL+1,OUTPUT(NL)="Reminder evaluation cpu time: "_$$ETIMEMS^XLFSHAN(START,END)
  1. S NL=NL+1,OUTPUT(NL)="Reminder evaluation clock time: "_$$HDIFF^XLFDT(WEND,WSTART,2)_" seconds"
  1. S NL=NL+1,OUTPUT(NL)=" "
  1. S NL=NL+1,OUTPUT(NL)="The elements of the FIEVAL array are:"
  1. S FFN="FF"
  1. F S FFN=$O(FIEVAL(FFN)) Q:FFN'["FF" D
  1. . S FFNUMBER=$P(FFN,"FF",2)
  1. . M FIEVAL("FF",FFNUMBER)=FIEVAL(FFN)
  1. . K FIEVAL(FFN)
  1. D DISP01(.FIEVAL)
  1. S REF="FIEVAL"
  1. D ACOPY^PXRMUTIL(REF,"TTEXT()")
  1. S IND=0
  1. F S IND=$O(TTEXT(IND)) Q:IND="" D
  1. . I $L(TTEXT(IND))<79 S NL=NL+1,OUTPUT(NL)=TTEXT(IND) Q
  1. . D FORMATS^PXRMTEXT(1,79,TTEXT(IND),.NOUT,.TEXTOUT)
  1. . F JND=1:1:NOUT S NL=NL+1,OUTPUT(NL)=TEXTOUT(JND)
  1. ;
  1. I $G(PXRMFFSS) D
  1. . N FFN,STEP
  1. . S NL=NL+1,OUTPUT(NL)="",NL=NL+1,OUTPUT(NL)=""
  1. . S NL=NL+1,OUTPUT(NL)="Step-by-step function finding evaluation:"
  1. . S FFNUMBER=0
  1. . F S FFNUMBER=+$O(FIEVAL("FF",FFNUMBER)) Q:FFNUMBER=0 D
  1. .. S NL=NL+1,OUTPUT(NL)=""
  1. .. S NL=NL+1,OUTPUT(NL)=" Function finding "_FFNUMBER_"="_FIEVAL("FF",FFNUMBER)
  1. .. D FORMATS^PXRMTEXT(1,79,$P(FIEVAL("FF",FFNUMBER,"DETAIL"),U,2),.NOUT,.TEXTOUT)
  1. .. S FFN="FF"_FFNUMBER
  1. .. F JND=1:1:NOUT S NL=NL+1,OUTPUT(NL)=TEXTOUT(JND)
  1. .. S NL=NL+1,OUTPUT(NL)=" = "_^TMP("PXRMFFSS",$J,FFN,0)
  1. .. S NL=NL+1,OUTPUT(NL)="Step Result"
  1. .. S STEP=0
  1. .. F S STEP=$O(^TMP("PXRMFFSS",$J,FFN,STEP)) Q:STEP="" D
  1. ... S NL=NL+1,OUTPUT(NL)=$$RJ^XLFSTR(STEP_".",4," ")_" "_^TMP("PXRMFFSS",$J,FFN,STEP)
  1. . K ^TMP("PXRMFFSS",$J)
  1. .;
  1. I $G(PXRMTDEB) D
  1. . S NL=NL+1,OUTPUT(NL)="",NL=NL+1,OUTPUT(NL)=""
  1. . S NL=NL+1,OUTPUT(NL)="Term findings:"
  1. . S REF="TFIEVAL"
  1. . S FINDING=0
  1. . F S FINDING=$O(^TMP("PXRMTDEB",$J,FINDING)) Q:FINDING="" D
  1. .. K TFIEVAL M TFIEVAL(FINDING)=^TMP("PXRMTDEB",$J,FINDING)
  1. .. S NL=NL+1,OUTPUT(NL)="Finding "_FINDING_":"
  1. .. K TTEXT
  1. .. D ACOPY^PXRMUTIL(REF,"TTEXT()")
  1. .. S IND=0
  1. .. F S IND=$O(TTEXT(IND)) Q:IND="" S NL=NL+1,OUTPUT(NL)=TTEXT(IND)
  1. . K ^TMP("PXRMTDEB",$J)
  1. ;
  1. ;If CF.VA-ELIGIBILITY has been used as a finding display the VAEL array.
  1. I $D(^TMP("PXRMELIG",$J)) D
  1. . N VAEL
  1. . M VAEL=^TMP("PXRMELIG",$J)
  1. . K ^TMP("PXRMELIG",$J),TTEXT
  1. . D ACOPY^PXRMUTIL("VAEL","TTEXT()")
  1. . S NL=NL+1,OUTPUT(NL)=""
  1. . S NL=NL+1,OUTPUT(NL)="VAEL array returned by ELIG^VADPT:"
  1. . S IND=0
  1. . F S IND=$O(TTEXT(IND)) Q:IND="" S NL=NL+1,OUTPUT(NL)=TTEXT(IND)
  1. ;
  1. ;Display the demographic variables.
  1. S NL=NL+1,OUTPUT(NL)="",NL=NL+1,OUTPUT(NL)=""
  1. S NL=NL+1,OUTPUT(NL)="The demographic variables are:"
  1. S IND=""
  1. F S IND=$O(^TMP("PXRMDEM",$J,IND)) Q:IND="" D
  1. . S TEXT=^TMP("PXRMDEM",$J,IND)
  1. . I (IND="DOB")!(IND="DOD")!(IND="LAD") S TEXT=$$FMTE^XLFDT(TEXT,"5Z")
  1. . S NL=NL+1,OUTPUT(NL)=IND_"="_TEXT
  1. K ^TMP("PXRMDEM",$J)
  1. ;
  1. I $D(^TMP(PXRMID,$J)) D
  1. . S NL=NL+1,OUTPUT(NL)="",NL=NL+1,OUTPUT(NL)=""
  1. . S NL=NL+1,OUTPUT(NL)="The elements of the ^TMP(PXRMID,$J) array are:"
  1. . S REF="^TMP(PXRMID,$J)"
  1. . K TTEXT
  1. . D ACOPY^PXRMUTIL(REF,"TTEXT()")
  1. . S IND=0
  1. . F S IND=$O(TTEXT(IND)) Q:IND="" S NL=NL+1,OUTPUT(NL)=TTEXT(IND)
  1. . K ^TMP(PXRMID,$J)
  1. ;
  1. I $D(^TMP("PXRHM",$J)) D
  1. . S NL=NL+1,OUTPUT(NL)="",NL=NL+1,OUTPUT(NL)=""
  1. . S NL=NL+1,OUTPUT(NL)="The elements of the ^TMP(""PXRHM"",$J) array are:"
  1. . S REF="^TMP(""PXRHM"",$J)"
  1. . K TTEXT
  1. . D ACOPY^PXRMUTIL(REF,"TTEXT()")
  1. . S IND=0
  1. . F S IND=$O(TTEXT(IND)) Q:IND="" S NL=NL+1,OUTPUT(NL)=TTEXT(IND)
  1. ;
  1. I (PXRHM=0)!(PXRHM=1)!(PXRHM=5)!(PXRHM=55) D
  1. . S TEXT=$S(PXRHM=0:"Due Now ",PXRHM=1:"Summary ",PXRHM=5:"Clinical Maintenance ",PXRHM=55:"Order Check ",1:"")
  1. . S NL=NL+1,OUTPUT(NL)="",NL=NL+1,OUTPUT(NL)=""
  1. . S NL=NL+1,OUTPUT(NL)=TEXT_"Output:"
  1. . D FMTOUT^PXRMFMTO("PXRHM",.NL,.OUTPUT)
  1. I (PXRHM=10)!(PXRHM=11) D
  1. . S NL=NL+1,OUTPUT(NL)="",NL=NL+1,OUTPUT(NL)=""
  1. . S NL=NL+1,OUTPUT(NL)="MHV "_$S(PXRHM=10:"Summary",PXRHM=11:"Detailed")_" Output:"
  1. . S RIEN=$O(^TMP("PXRHM",$J,""))
  1. . S RNAME=$O(^TMP("PXRHM",$J,RIEN,""))
  1. . S STATUS=$P($G(^TMP("PXRHM",$J,RIEN,RNAME)),U,1)
  1. . I STATUS="" S STATUS="UNKNOWN"
  1. . M ^TMP("PXRMMHV",$J,STATUS,RNAME,RIEN)=^TMP("PXRHM",$J,RIEN,RNAME)
  1. . D MHVOUT^PXRMFMTO("PXRMMHV",STATUS,RNAME,RIEN,.NL,.OUTPUT)
  1. I PXRHM=12 D
  1. . S NL=NL+1,OUTPUT(NL)="",NL=NL+1,OUTPUT(NL)=""
  1. . S NL=NL+1,OUTPUT(NL)="MHV Combined Output:"
  1. . D MHVCOUT^PXRMFMTO("PXRMMHVC",.NL,.OUTPUT)
  1. K ^TMP("PXRM",$J),^TMP("PXRHM",$J),^TMP("PXRMMHV",$J),^TMP("PXRMMHVC",$J)
  1. S BOP=$$BORP^PXRMUTIL("P")
  1. I BOP="B" D
  1. . S X="IORESET"
  1. . D ENDR^%ZISS
  1. . D BROWSE^DDBR("OUTPUT","NR","Reminder Test")
  1. . W IORESET
  1. . D KILL^%ZISS
  1. I BOP="P" D GPRINT^PXRMUTIL("OUTPUT")
  1. Q
  1. ;
  1. ;===============
  1. TERM ;
  1. N DFN,DIC,DIROUT,DIRUT,DTOUT,DUOUT
  1. N FIEVAL,FINDPA,IND,MAXOCC,OCC,TERMIEN,TERMARR
  1. S DIC=2,DIC("A")="Select Patient: "
  1. S DIC(0)="AEQMZ"
  1. TPAT D ^DIC
  1. I $D(DIROUT)!$D(DIRUT) Q
  1. I $D(DTOUT)!$D(DUOUT) Q
  1. S DFN=+$P(Y,U,1)
  1. I DFN=-1 G TPAT
  1. S DIC=811.5,DIC("A")="Select Reminder Term: "
  1. TTERM D ^DIC
  1. I $D(DIROUT)!$D(DIRUT) Q
  1. I $D(DTOUT)!$D(DUOUT) Q
  1. S TERMIEN=+$P(Y,U,1)
  1. I TERMIEN=-1 G TTERM
  1. D TERM^PXRMLDR(TERMIEN,.TERMARR)
  1. S IND=0,MAXOCC=1
  1. F S IND=+$O(TERMARR(20,IND)) Q:IND=0 D
  1. . I $P(TERMARR(20,IND,3),U,3)=1 S MAXOCC=50 Q
  1. . S OCC=+$P(TERMARR(20,IND,0),U,14)
  1. . I OCC>MAXOCC S MAXOCC=OCC
  1. S $P(FINDPA(0),U,14)=MAXOCC
  1. D IEVALTER^PXRMTERM(DFN,.FINDPA,.TERMARR,1,.FIEVAL)
  1. D DISP01(.FIEVAL)
  1. W !,"The term is "_$S($G(FIEVAL(1))=1:"True",1:"False")
  1. W !,"FIEVAL:"
  1. D AWRITE^PXRMUTIL("FIEVAL")
  1. Q
  1. ;