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

PXRMGEVA.m

Go to the documentation of this file.
  1. PXRMGEVA ;SLC/AGP,RFR - Generic entry point to run different Reminder Evaluation ;Jan 13, 2023@17:06
  1. ;;2.0;CLINICAL REMINDERS;**45,71,84**;Feb 04, 2005;Build 2
  1. ;
  1. ; Reference to OIS^ORX8 in ICR #2467
  1. ; Reference to EN^ORQ1 in ICR #3154
  1. ; Reference to EN^ORX8 in ICR #871
  1. ; Reference to PKGID^ORX8 in ICR #3071
  1. ; Reference to VALUE^ORX8 in ICR #2467
  1. ; Reference to ^ORD(100.98,"B", in ICR #873
  1. ;
  1. ERROR(RESULT,MSG) ;
  1. S @RESULT@(0)=-1_U_MSG
  1. Q
  1. ;
  1. FINDDGS(RESULT,INPUT) ;
  1. N FAIL,IEN,NAME
  1. S NAME="",FAIL=0 F S NAME=$O(INPUT("ROC DISPLAY GROUPS",NAME)) Q:NAME=""!(FAIL>0) D
  1. .S IEN=$O(^ORD(100.98,"B",NAME,"")) I IEN'>0 D ERROR(.RESULT,"Could not find Display Group: "_NAME) S FAIL=1
  1. .S INPUT("DG IEN",IEN)=""
  1. .S INPUT("DG IEN",IEN,"START")=+$G(INPUT("ROC DISPLAY GROUPS",NAME,"START"))
  1. .S INPUT("DG IEN",IEN,"STOP")=+$G(INPUT("ROC DISPLAY GROUPS",NAME,"STOP"))
  1. Q
  1. ;
  1. GETOIS(INPUT) ; find orderable items for each order
  1. N CNT,NUM,ARRAY,OI,ORDIEN,POS,PXRMOIS
  1. S ORDIEN=0 F S ORDIEN=$O(INPUT("ROC ORDERS",ORDIEN)) Q:ORDIEN'>0 D
  1. .K PXRMOIS D OIS^ORX8(.PXRMOIS,ORDIEN) I '$D(PXRMOIS) Q
  1. .M INPUT("ROC ORDERS",ORDIEN,"OI")=PXRMOIS
  1. Q
  1. ;
  1. GTORDERS(INPUT) ;
  1. N DIEN,DATE,END,NODE,PAT,ORDIEN,ORN,PXRMOIS,START,STOP,ORLIST,MOD,PXRMINST,ORUPCHUK
  1. S PAT=$G(INPUT("DFN"))
  1. S DIEN=0 F S DIEN=$O(INPUT("DG IEN",DIEN)) Q:DIEN'>0 D
  1. .K ^TMP("ORR",$J)
  1. .S START=$S(INPUT("DG IEN",DIEN,"START")>0:INPUT("DG IEN",DIEN,"START"),1:$G(INPUT("ROC START")))
  1. .S STOP=$S(INPUT("DG IEN",DIEN,"STOP")>0:INPUT("DG IEN",DIEN,"STOP"),1:$G(INPUT("ROC STOP")))
  1. .;call for current activities
  1. .D EN^ORQ1(PAT_";DPT(",DIEN,1,,START,STOP,1)
  1. .S DATE="" F S DATE=$O(^TMP("ORR",$J,DATE)) Q:DATE="" D
  1. ..F ORN=1:1:$G(^TMP("ORR",$J,DATE,"TOT")) D
  1. ...S NODE=$G(^TMP("ORR",$J,DATE,ORN))
  1. ...I $D(INPUT("ROC ORDERS",+$P(NODE,U))) Q
  1. ...I ('$D(INPUT("ROC STATUS","*"))&('$D(INPUT("ROC STATUS",$P(NODE,U,6))))) Q
  1. ...I $D(INPUT("ROC ORDERED WITHIN"))&(($P(NODE,U,3)<START)!($P(NODE,U,3)>STOP)) Q
  1. ...S ORDIEN=+$P(NODE,U)
  1. ...D EN^ORX8(ORDIEN)
  1. ...S NODE=NODE_U_$P(ORUPCHUK("ORNP"),U)
  1. ...K ORUPCHUK
  1. ...S INPUT("ROC ORDERS",ORDIEN)=NODE
  1. ...M INPUT("ROC ORDERS",ORDIEN,"TX")=^TMP("ORR",$J,DATE,ORN,"TX")
  1. ...S INPUT("ROC ORDERS",ORDIEN,"PKG ID")=$$PKGID^ORX8(ORDIEN)
  1. ...F PXRMINST=1:1 S MOD=$$VALUE^ORX8(ORDIEN,"MODIFIER",PXRMINST,"E") Q:MOD="" D
  1. ....S INPUT("ROC ORDERS",ORDIEN,"MODIFIERS",PXRMINST)=MOD
  1. ...K PXRMOIS D OIS^ORX8(.PXRMOIS,ORDIEN)
  1. ...I $D(PXRMOIS) M INPUT("ROC ORDERS",ORDIEN,"OI")=PXRMOIS
  1. K ^TMP("ORR",$J)
  1. Q
  1. ;
  1. GETVAL(INPUT,TYPE) ;
  1. Q $G(INPUT("VARIABLES",TYPE))
  1. ;
  1. REM(RESULT,INPUT) ; controller for reminder evaluation types
  1. I $D(INPUT("LR")) D REMLIST(.RESULT,.INPUT) Q
  1. I $D(INPUT("REMINDERS")) D REMEVAL(.RESULT,.INPUT) Q
  1. D REMOC(.RESULT,.INPUT)
  1. Q
  1. ;
  1. REMMDEF(INPUT,DEFARR) ; update DEFARR with modifiers
  1. N ITEM,NUM,SUB,PIECE,TEMP,VALUE
  1. S NUM=0 F S NUM=$O(DEFARR(20,NUM)) Q:NUM'>0 D
  1. .S ITEM=$P($G(DEFARR(20,NUM,0)),U) I ITEM="" Q
  1. .I '$D(INPUT("EVAL","FINDINGS",ITEM)) Q
  1. .S SUB="" F S SUB=$O(INPUT("EVAL","FINDINGS",ITEM,SUB)) Q:SUB="" D
  1. ..S PIECE=0 F S PIECE=$O(INPUT("EVAL","FINDINGS",ITEM,SUB,PIECE)) Q:PIECE'>0 D
  1. ...S VALUE=$G(INPUT("EVAL","FINDINGS",ITEM,SUB,PIECE)) I VALUE="" Q
  1. ...I VALUE["$$" S TEMP="S VALUE="_VALUE X TEMP
  1. ...S $P(DEFARR(20,NUM,SUB),U,PIECE)=VALUE
  1. I $G(INPUT("EVAL","EVAL DATE"))["$$" D Q
  1. .S TEMP="S VALUE="_INPUT("EVAL","EVAL DATE") X TEMP
  1. .S INPUT("EVAL","NEW EVAL DATE")=VALUE
  1. Q
  1. ;
  1. REMEVAL(RESULT,INPUT) ;
  1. N RIEN,FIEVAL,TODAY,OUTTYPE,PNAME,ONAME,PXRMSRCFF
  1. S PXRMSRCFF=1
  1. K ^TMP("PXRHM",$J)
  1. S RIEN=0 F S RIEN=$O(INPUT("REMINDERS",RIEN)) Q:'+RIEN D
  1. .S ONAME=$P(INPUT("REMINDERS",RIEN),U),FIEVAL=$P(INPUT("REMINDERS",RIEN),U,2)
  1. .S OUTTYPE=+$P(INPUT("REMINDERS",RIEN),U,3),TODAY=+$P(INPUT("REMINDERS",RIEN),U,4)
  1. .D MAINDF(INPUT("DFN"),RIEN,OUTTYPE,TODAY,FIEVAL)
  1. .S PNAME=$P($G(^PXD(811.9,RIEN,0)),U,3)
  1. .I PNAME="" S PNAME=$P($G(^PXD(811.9,RIEN,0)),U)
  1. .S @RESULT@(ONAME)=$G(^TMP("PXRHM",$J,RIEN,PNAME))
  1. .S @RESULT@(ONAME,"PRINT NAME")=PNAME
  1. .I FIEVAL M @RESULT@(ONAME,"FIEVAL")=^TMP("PXRHM",$J,RIEN,"FIEVAL")
  1. .I OUTTYPE>0 M @RESULT@(ONAME,"MAINTENANCE")=^TMP("PXRHM",$J,RIEN,PNAME,"TXT")
  1. .K ^TMP("PXRHM",$J)
  1. .I $D(^TMP("PXRM BL DATA",$J)) D
  1. ..S RIEN("C")=$G(^TMP("PXRM BL DATA",$J,"REMINDER IEN"))
  1. ..S PNAME=$G(^TMP("PXRM BL DATA",$J,"REMINDER NAME"))
  1. ..I RIEN("C")=""!(PNAME="") Q
  1. ..S @RESULT@(ONAME,"FINDINGS",PNAME)=$G(^TMP("PXRM BL DATA",$J,"PXRHM",RIEN("C"),PNAME))
  1. ..I FIEVAL M @RESULT@(ONAME,"FINDINGS",PNAME,"FIEVAL")=^TMP("PXRM BL DATA",$J,"FIEVAL")
  1. ..I OUTTYPE>0 M @RESULT@(ONAME,"FINDINGS",PNAME,"MAINTENANCE")=^TMP("PXRM BL DATA",$J,"PXRHM",RIEN("C"),PNAME,"TXT")
  1. ..K ^TMP("PXRM BL DATA",$J)
  1. Q
  1. ;
  1. MAINDF(DFN,PXRMITEM,OUTTYPE,EVALDT,SAVEFIE) ;
  1. N DEFARR,FIEVAL,REMCFIEN,MESSAGE,FINDING
  1. D DEF^PXRMLDR(PXRMITEM,.DEFARR)
  1. I OUTTYPE>0 D
  1. .S REMCFIEN=+$O(^PXRMD(811.4,"B","VA-REMINDER DEFINITION","")) Q:REMCFIEN<1
  1. .S FINDING=0 F S FINDING=+$O(DEFARR("E","PXRMD(811.4,",REMCFIEN,FINDING)) Q:'+FINDING S $P(DEFARR(20,FINDING,15),U,4)=OUTTYPE
  1. I $G(EVALDT)?7N S SAVEFIE=1 ;MAINDF^PXRM, which allows passing evaluation date, always saved the FIEVAL array
  1. E S EVALDT=$$NOW^XLFDT
  1. D EVAL^PXRM(DFN,.DEFARR,OUTTYPE,0,.FIEVAL,EVALDT)
  1. I $G(SAVEFIE) M ^TMP("PXRHM",$J,PXRMITEM,"FIEVAL")=FIEVAL
  1. Q
  1. ;
  1. REMLIST(RESULT,INPUT) ;
  1. N BEG,END,CNT,DATA,DATANAM,DATAVAL,FAIL,INC,LIEN,LNAME,NODE,NUM,OVER,PAT,PFNAME,PNAME,PLIST,PATCREAT,RETDATA,SECURE
  1. S LNAME="",FAIL=0 F S LNAME=$O(INPUT("LR",LNAME)) Q:LNAME=""!(FAIL=1) D
  1. .K BEG,END,LIEN,PFNAME,PNAME,PLIST,SECURE,OVER,RETDATA
  1. .S LIEN=+$O(^PXRM(810.4,"B",LNAME,"")) I LIEN'>0 D ERROR(.RESULT,"List Rule: "_LNAME_" not found") S FAIL=1 Q
  1. .S NODE=$G(INPUT("LR",LNAME)),PNAME=$P(NODE,U),BEG=$P(NODE,U,2),END=$P(NODE,U,3),SECURE=$P(NODE,U,4),OVER=$P(NODE,U,5),RETDATA=+$P(NODE,U,6)
  1. .S PLIST=$$REMPLCRE(PNAME,SECURE,OVER) I +PLIST'>0 D ERROR(.RESULT,"Error could not find or create patient list "_PLNAME) S FAIL=1 Q
  1. .S PFNAME=$P(PLIST,U,2)
  1. .D RUN^PXRMLCR(LIEN,+PLIST,"PXRMRULE",BEG,END,0,1)
  1. .I '$D(^PXRMXP(810.5,+PLIST,30)) Q
  1. .S NUM=0 F S NUM=$O(^PXRMXP(810.5,+PLIST,30,NUM)) Q:NUM'>0 D
  1. ..S PAT=$P($G(^PXRMXP(810.5,+PLIST,30,NUM,0)),U) I PAT="" Q
  1. ..S @RESULT@(LNAME,PAT)=""
  1. ..I RETDATA=0 Q
  1. ..S CNT=0 F S CNT=$O(^PXRMXP(810.5,+PLIST,30,NUM,"DATA",CNT)) Q:CNT'>0 D
  1. ...S DATA=$G(^PXRMXP(810.5,+PLIST,30,NUM,"DATA",CNT,0)) I DATA="" Q
  1. ...S DATANAM=$P($P(DATA,U),",",2),DATAVAL=$P(DATA,U,2) I DATANAM="" Q
  1. ...S @RESULT@(LNAME,PAT,"DATA",DATANAM)=DATAVAL
  1. .S @RESULT@(LNAME,"PATIENT LIST CREATED")=PFNAME
  1. .S @RESULT@(0)=1
  1. Q
  1. ;
  1. REMPLCRE(PLNAME,SECURE,OVER) ;
  1. N FDA,IENS,NAME,NUM,RESULT,UNIQUE
  1. S (NUM,RESULT,UNIQUE)=0
  1. ;if overwrite check to see if the list exist
  1. I OVER=1 S RESULT=$O(^PXRMXP(810.5,"B",PLNAME,""))
  1. I RESULT>0 Q RESULT
  1. S NAME=PLNAME
  1. ;if not overwrite find unique and name exist create unique name
  1. I OVER=0,$D(^PXRMXP(810.5,"B",NAME))>0 D
  1. .F Q:UNIQUE=1 D
  1. ..S NAME=PLNAME_" ("_$$NOW^XLFDT()_")"
  1. ..I $D(^PXRMXP(810.5,"B",NAME))=0 S UNIQUE=1 Q
  1. ..H 1
  1. ;create stub in 810.5
  1. S IENS="?+1,"
  1. S FDA(810.5,IENS,.01)=NAME,FDA(810.5,IENS,100)="L",FDA(810.5,IENS,.07)=DUZ,FDA(810.5,IENS,.08)=$S(SECURE=0:"PUB",1:"PVT")
  1. D UPDATE^DIE("","FDA","","MSG")
  1. ;if error display message and quit
  1. I $D(MSG) Q 0
  1. S RESULT=$O(^PXRMXP(810.5,"B",NAME,""))
  1. Q RESULT_U_NAME
  1. ;
  1. REMOC(RESULT,INPUT) ; controller for reminder order checks
  1. N DISPLAY,FOUND,GROUPS,NUM,OI,OINAME,ORDIEN,PAT,PNAME,SEV,STATUS,RNAME,RIEN,GNAME,OIGROUPS
  1. I '$D(INPUT("ROC","ALL")) M GROUPS=INPUT("ROC")
  1. I '$D(INPUT("ROC ORDERS")) Q
  1. S PAT=$G(INPUT("DFN"))
  1. S STATUS=0
  1. ;loop through orders
  1. S ORDIEN=0,FOUND=0 F S ORDIEN=$O(INPUT("ROC ORDERS",ORDIEN)) Q:ORDIEN'>0 D
  1. .;loop through orderable items for each order
  1. .S OI=0 F S OI=$O(INPUT("ROC ORDERS",ORDIEN,"OI",OI)) Q:OI'>0 D
  1. ..S OINAME=$P($G(INPUT("ROC ORDERS",ORDIEN,"OI",OI)),U)
  1. ..I $D(INPUT("ROC RETURN TYPE","GROUPS")) D
  1. ...D GETGRPS^PXRMORCH(OI,.OIGROUPS) Q:'$D(OIGROUPS)
  1. ...S @RESULT@(0)=1
  1. ...M @RESULT@(ORDIEN,"GROUPS")=OIGROUPS
  1. ..;does not process reminder order checks
  1. ..I '$D(INPUT("ROC RETURN TYPE","RULES")) Q
  1. ..;Process OI against all Production Reminder Order checks Rule
  1. ..I '$D(GROUPS) D ORDERCHK^PXRMORCH(PAT,OI,STATUS,0,0)
  1. ..;Process OI against Production Reminder Order Checks only found in the array of groups
  1. ..I $D(GROUPS) D ORDERGRP^PXRMORCH(PAT,OI,STATUS,0,.GROUPS)
  1. ..;quit if no order checks found
  1. ..I '$D(^TMP($J,OI)) Q
  1. ..S @RESULT@(0)=1
  1. ..S SEV=0 F S SEV=$O(^TMP($J,OI,SEV)) Q:SEV'>0 D
  1. ...S DISPLAY="" F S DISPLAY=$O(^TMP($J,OI,SEV,DISPLAY)) Q:DISPLAY="" D
  1. ....S RIEN=$O(^PXD(801.1,"D",DISPLAY,0)) I RIEN>0 S RNAME=$P($G(^PXD(801.1,RIEN,0)),U)
  1. ....I RNAME="" S RNAME=DISPLAY
  1. ....S @RESULT@(ORDIEN,"RULES",RNAME)=""
  1. ..K ^TMP($J,OI)
  1. .I '(($D(@RESULT@(ORDIEN,"RULES")))!($D(@RESULT@(ORDIEN,"GROUPS")))) Q
  1. .S @RESULT@(ORDIEN)=$G(INPUT("ROC ORDERS",ORDIEN))
  1. .M @RESULT@(ORDIEN,"TX")=INPUT("ROC ORDERS",ORDIEN,"TX")
  1. .I $D(INPUT("ROC RETURN TYPE","OI")) M @RESULT@(ORDIEN,"OI")=INPUT("ROC ORDERS",ORDIEN,"OI")
  1. Q
  1. ;