PXRMXSE1 ; SLC/PJH - Build Patient lists for Reminder Due report; 01/25/2006
 ;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21
 ;
 ; Called/jobbed from PXRMXD
 ;
 ; Input - PXRMSEL,PXRMXTMP
 ;         PXRM*
 ; Output- ^XTMP(PXRMXTMP
 ;
 ;
START ;  
 N LIT,TOTAL,TODAY,ZTSTOP,BUSY
 S DBDOWN=0
 S TOTAL=0,ZTSTOP="",TODAY=$$DT^XLFDT-.0001
 ;
 K ^TMP($J,"PXRM PATIENT LIST"),^TMP($J,"PXRM PATIENT EVAL")
 K ^TMP($J,"PXRM FUTURE APPT"),^TMP($J,"SDAMA301")
 K ^TMP($J),^TMP(PXRMRT,$J),^TMP("PXRMDUP",$J)
 K ^TMP("PXRMCMB",$J),^TMP("PXRMCMB1",$J),^TMP("PXRMCMB2",$J)
 N PXRMRERR
 ;
 I '(PXRMQUE!$D(IO("S"))) D INIT^PXRMXBSY(.BUSY)
 ;
 ;OE/RR team selected (PXRMOTM)
 I PXRMSEL="O" D OERR^PXRMXSL1
 ; 
 ;PCMM team selected (PXRMPCM)
 I PXRMSEL="T" D PCMMT^PXRMXSL1
 ;
 N HLIEN,FACILITY
 ;Location selected (PXRMLCHL,PXRMCGRP)
 I PXRMSEL="L" D  G:ZTSTOP=1 EXIT
 .;Build Clinic List
 .D BHLOC^PXRMXSL1
 .;Prior Visits - build patient list in ^TMP
 .I PXRMFD="P" D VISITS^PXRMXSL2 I DBDOWN=1 Q
 .;Inpatient Admissions and current inpatient locations
 .I PXRMFD="A"!(PXRMFD="C") D INPADM^PXRMXSL1
 .;Future Appointments - build patient list in ^TMP
 .I PXRMFD="F" D APPTS^PXRMXSL2 I DBDOWN=1 Q
 .;End task requested
 .Q:ZTSTOP=1
 ;Update ^XTMP from ^TMP
 I '(PXRMQUE!$D(IO("S"))) D INIT^PXRMXBSY(.BUSY)
 ;
 ;PCMM provider selected (PXRMPRV)
 I PXRMSEL="P" D PCMMP^PXRMXSL1
 ;
 ;Individual Patients selected (PXRMPAT)
 I PXRMSEL="I" D IND^PXRMXSL1
 ;
 ;Patient List selected (PXRMLIST)
 I PXRMSEL="R" D LIST^PXRMXSL1
 ;
 I DBDOWN=1 G EXIT
 S START=$H
 D EVAL^PXRMXEVL("PXRM PATIENT EVAL",.REMINDER)
 D XTMP(START)
 ;
 ;Update patient list
 I PXRMSEL'="I"&(PXRMUSER'="Y")&($G(PXRMLIS1)'="") D
 .;If no patients due delete patient list
 .I +$O(^TMP($J,"PXRMXPAT",""))=0 D  Q
 ..N DA,DIK S DA=PXRMLIS1,DIK="^PXRMXP(810.5," D ^DIK
 .;Otherwise create patient list
 .D UPDLST^PXRMRULE("PXRMXPAT",PXRMLIS1,"","")
 .S $P(^PXRMXP(810.5,PXRMLIS1,0),U,9)=1
 K ^TMP($J,"PXRMXPAT")
 K ^TMP($J),^TMP(PXRMRT,$J),^TMP("PXRMDUP",$J)
 K ^TMP("PXRMCMB",$J),^TMP("PXRMCMB1",$J),^TMP("PXRMCMB2",$J),^TMP("PXRMCMB3",$J)
 K DBDOWN
 ;
DONE ;
 ;Sorting is done.
 I '(PXRMQUE!$D(IO("S"))!(PXRMTABS="Y")) W ! D DONE^PXRMXBSY("done")
 ;
 ;I PXRMDBUG="Y" D DEBUG("End of evaluation:",PXRMREP,"^XTMP(PXRMXTMP,PX)")
 ;Print the report information.
 I PXRMQUE D  Q
 .;Start the printing that was queued but not scheduled.
 .N DESC,ROUTINE,TASK
 .S ROUTINE="^PXRMXPR"
 .S DESC="Reminder Due Report - print"
 .S TASK=$G(^XTMP(PXRMXTMP,"PRZTSK"))
 .I TASK="" D NOPRZTSK(PXRMXTMP) Q
 .D REQUE^PXRMXQUE(DESC,ROUTINE,TASK)
 .S ZTREQ="@"
 I 'PXRMQUE D ^PXRMXPR
 Q
 ;
AWRITE(REF,LS)     ;This line tag is a copy of AWRITE^PXRMUTIL
 N CNT,DONE,IC,IND,LEN,PROOT,ROOT,START,TEMP
 I REF="" Q
 S PROOT=$P(REF,")",1)
 S TEMP=$NA(@REF)
 S ROOT=$P(TEMP,")",1)
 S REF=$Q(@REF)
 I REF'[ROOT Q
 S DONE=0,CNT=LS
 F IC=0:0 Q:(REF="")!(DONE)  D
 . S START=$F(REF,ROOT)
 . S LEN=$L(REF)
 . S IND=$E(REF,START,LEN)
 . S CNT=CNT+1,^TMP("PXRMXMZ",$J,CNT,0)=PROOT_IND_"="_@REF
 . S REF=$Q(@REF)
 . I REF'[ROOT S DONE=1
 Q
 ;
DEBUG(LOC,TYPE,REF) ;
 N CNT,DDAT,FACILITY,HEADER,PNAM,PX,SUB
 K ^TMP("PXRMXMZ",$J)
 S PX="PXRM"
 I TYPE'="P"&(TYPE'="DEBUG") D  Q
 .D AWRITE(REF,0)
 .D SEND^PXRMMSG("Debug output: "_LOC_" Reminder Report type "_TYPE_" ("_$$NOW^XLFDT_")",DUZ)
 D AWRITE(REF,0)
 S HEADER=LOC_" ("_$$NOW^XLFDT_")"
 D SEND^PXRMMSG("Debug output: "_HEADER,DUZ)
 Q
 ;
ERROR(STATUS,ITEM) ;
 ;Create XTMP entry for Reminders that error out or could not be
 ;determing on evaluation
 N ERRNAME
 S STATUS=$P(STATUS,U)
 S ERRNAME=$P(^PXD(811.9,ITEM,0),U)
 I $D(^XTMP(PXRMXTMP,STATUS,ERRNAME))>0,^XTMP(PXRMXTMP,STATUS,ERRNAME)>0 D
 .S ^XTMP(PXRMXTMP,STATUS,ERRNAME)=^XTMP(PXRMXTMP,STATUS,ERRNAME)+1
 E  S ^XTMP(PXRMXTMP,STATUS,ERRNAME)=1
 Q
 ;
 ;End Task requested
EXIT ;
 S ZTSK=$G(^XTMP(PXRMXTMP,"PRZTSK"))
 I ZTSK>0 D KILL^%ZTLOAD
 D EXIT^PXRMXGUT
 K DBDOWN
 Q
 ;
NOPRZTSK(PXRMXTMP)       ;Could not get PRZTSK send an error message
 N TEXT
 K ^TMP("PXRMXMZ",$J)
 S TEXT(1,0)="The task number for the print job cannot be determined."
 S TEXT(2,0)="The reason is:"
 I '$D(^XTMP(PXRMXTMP)) S TEXT(3,0)=" The ^XTMP(PXRMXTMP) global is not defined."
 I $D(^XTMP(PXRMXTMP)),'$D(^XTMP(PXRMXTMP,"PRZTSK")) S TEXT(3,0)=" ^XTMP(PXRMXTMP,""PRZTSK"") does not exist."
 I $D(^XTMP(PXRMXTMP,"PRZTSK")) S TEXT(3,0)=" ^XMTP(PXRMXTMP,""PRZTSK"") is null."
 S TEXT(4,0)="PXRMXTMP="_PXRMXTMP
 M ^TMP("PXRMXMZ",$J)=TEXT
 D SEND^PXRMMSG("REMINDER REPORT ERROR",DUZ)
 Q
 ;
XTMP(START) ;
 N CNT,CCNT,DDAT,INP,ITEM,LIT,LSSN,MCNBD,MCNBDR,NAME,SUB,STATUS,TEMP,TEMP1
 K ^TMP($J,"PXRM CNBD")
 S CCNT=0,MCNBD=$G(^PXRM(800,1,"MIERR")),MCNBDR=0
 ;I PXRMDBUG="Y" D DEBUG("PATIENT DATA","P","^TMP($J,""PXRM PATIENT EVAL"")")
 S BUSY=0,SUB="NAM",TEMP=0,PX="PXRM"
 N DDAT,DDUE,DEMARR,DFN,DLAST,DNEXT,FACILITY,NAM,PNAM
 S FACILITY="",DDAT="N/A"
 F  S FACILITY=$O(^TMP(PXRMRT,$J,FACILITY)) Q:FACILITY=""  D
 .S NAM=""
 .F  S NAM=$O(^TMP(PXRMRT,$J,FACILITY,NAM)) Q:NAM=""  D
 ..S DFN="" F  S DFN=$O(^TMP(PXRMRT,$J,FACILITY,NAM,DFN)) Q:DFN=""  D
 ...I '(PXRMQUE!$D(IO("S"))!(PXRMTABS="Y")) D SPIN^PXRMXBSY("Evaluating Reminders",.BUSY)
 ...S INP=$G(^TMP(PXRMRT,$J,FACILITY,NAM,DFN))
 ...S CNT=0 F  S CNT=$O(REMINDER(CNT)) Q:CNT'>0  D
 ....S ITEM=$P(REMINDER(CNT),U,1),LIT=$P(REMINDER(CNT),U,4)
 ....I LIT="" S LIT=$P(REMINDER(CNT),U,2)
 ....S STATUS=$G(^TMP($J,"PXRM PATIENT EVAL",DFN,ITEM))
 ....I STATUS="" Q
 ....I STATUS["ERROR"!(STATUS["CNBD") D
 .....D ERROR(STATUS,ITEM) I STATUS["ERROR"!(MCNBDR=1) Q
 .....I CCNT=0 D  Q
 ......S ^TMP($J,"PXRM CNBD",1,0)=$$RJ^XLFSTR(" ",5)_$$LJ^XLFSTR("PATIENT NAME",30)_$$RJ^XLFSTR("LAST 4",10)
 ......S (TEMP,TEMP1)=""
 ......F X=1:1:30 S TEMP=TEMP_"_"
 ......F X=1:1:6 S TEMP1=TEMP1_"_"
 ......S ^TMP($J,"PXRM CNBD",2,0)=$$RJ^XLFSTR(" ",5)_$$LJ^XLFSTR(TEMP,30)_$$RJ^XLFSTR(TEMP1,10)
 ......S CCNT=2
 .....S CCNT=CCNT+1
 .....I CCNT>MCNBD S MCNBDR=1 Q
 .....S NAME=$P(^DPT(DFN,0),U)
 .....S LSSN=$E($P(^DPT(DFN,0),U,9),6,9)
 .....S ^TMP($J,"PXRM CNBD",CCNT,0)=$$RJ^XLFSTR(" ",5)_$$LJ^XLFSTR(NAME,30)_$$RJ^XLFSTR(LSSN,10)
 ....;Add reminder status to patient list TMP Global
 ....I STATUS["DUE NOW" S ^TMP($J,"PXRMXPAT",DFN,"REM",ITEM)=ITEM_U_STATUS
 ....I PXRMREP="D" D SDET^PXRMXDT1(DFN,STATUS,NAM,FACILITY,INP)
 ....I PXRMREP="S" D SUM^PXRMXDT1(DFN,STATUS,FACILITY,NAM)
 I $D(^TMP($J,"PXRM CNBD"))>0 D DBDOWN^PXRMXDT1("C")
 K ^TMP($J,"PXRM CNBD")
 S END=$H
 I '(PXRMQUE!$D(IO("S"))!(PXRMTABS="Y")) D DETIME^PXRMXSL1(START,END,"Evaluating Reminders")
 ;I PXRMDBUG="Y" D DEBUG("DEBUG PATIENT DATA EVALUATION","DEBUG","^TMP($J,""PXRMDEBUG"")")
 K ^TMP($J,"PXRM PATIENT EVAL")
 Q
 ;
