PXRMETCO ; SLC/PJH - QUERI Extract Compliance Report ;06/09/2009
;;2.0;CLINICAL REMINDERS;**6,12**;Feb 04, 2005;Build 73
;
;
ADHOC(IEN,PXRMSTRT,PXRMSTOP) ;Ad Hoc Conformance Report
D DUMMY1^PXRMRUTL
Q
;
D JOB
Q
;
;BOOKMARK - cloned from PXRMETX, needs modifying to avoid patient list
;update. Build ^TMP("PXRMETX",$J) for report
;
REPORT ;Initialise
K ^TMP("PXRMETX",$J)
;Workfile node for ^TMP
S PXRMNODE="PXRMRULE"
;Get details from parameter file
N DATA,DATES,LIST,NAME,PARTYPE,TEXT
;N PERIOD,TEXT,YEAR
S DATA=$G(^PXRM(810.2,IEN,0))
;
;Determine Extract Name and period
S NAME=$P(DATA,U),PARTYPE=$P(DATA,U,2)
;S YEAR=$P(NEXT,"/",2),PERIOD=$P(NEXT,"/")
;Calculate report period start and end dates
;D CALC^PXRMEUT(NEXT,.PXRMSTRT,.PXRMSTOP)
;Determine output name for patient list and extract summary
S DATES=$$FMTE^XLFDT(PXRMSTRT)_" - "_$$FMTE^XLFDT(PXRMSTOP)
;
;Bookmark - Needs inventive patient list names
S LIST=NAME_" REPORT "_DATES
;Process (single) Denominator rule into patient list
N INDP,INTP,SEQ,SUB,SUFFIX
S SEQ=""
F S SEQ=$O(^PXRM(810.2,IEN,10,"B",SEQ)) Q:'SEQ D
.S SUB=$O(^PXRM(810.2,IEN,10,"B",SEQ,"")) Q:'SUB
.S DATA=$G(^PXRM(810.2,IEN,10,SUB,0)) Q:DATA=""
.S PXRMRULE=$P(DATA,U,2) Q:'PXRMRULE
.S SUFFIX=$P(DATA,U,3)
.I SUFFIX="" S SUFFIX="DENOMINATOR "_SEQ
.S INDP=+$P(DATA,U,4)
.S INTP=+$P(DATA,U,5)
.;Create new patient list
.S PXRMLIST=$$CRLST^PXRMRUL1(LIST_" "_SUFFIX) Q:'PXRMLIST
.D START^PXRMRULE(PXRMRULE,PXRMLIST,PXRMNODE,PXRMSTRT,PXRMSTOP,IEN,INDP,INTP)
.;Clear ^TMP lists created for rule
.D CLEAR^PXRMRULE(PXRMRULE,PXRMNODE)
.;Process reminders
.D REM^PXRMETXR(SUB,PXRMLIST)
;
;Bookmark - Report stuff goes here
;Update totals section
N APPL,CNT,DUE,DATA,ETYP,EVAL
N FAPPL,FCNT,FDATA,FDUE,FEVAL,FGNAM,FIND,FNAPPL,FNDUE,FSEQ
N NAPPL,NDUE,PXRMLIST,RCNT,RIEN,RSEQ,SEQ
S SEQ=0,CNT=1
F S SEQ=$O(^TMP("PXRMETX",$J,SEQ)) Q:'SEQ D
.S RCNT=0,RSEQ=0
.F S RCNT=$O(^TMP("PXRMETX",$J,SEQ,RCNT)) Q:'RCNT D
..S DATA=$G(^TMP("PXRMETX",$J,SEQ,RCNT)) Q:'DATA
..S RIEN=$P(DATA,U),PXRMLIST=$P(DATA,U,5)
..S EVAL=$P(DATA,U,2),APPL=$P(DATA,U,3),DUE=$P(DATA,U,4)
..S NAPPL=EVAL-APPL,NDUE=APPL-DUE
..S CNT=CNT+1,RSEQ=RSEQ+1
..;bookmark - write patient line
..;For each count type
..S ETYP="",FCNT=CNT
..F S ETYP=$O(^TMP("PXRMETX",$J,SEQ,RCNT,ETYP)) Q:ETYP="" D
...;For each term
...S FIND=0,FSEQ=0
...F S FIND=$O(^TMP("PXRMETX",$J,SEQ,RCNT,ETYP,FIND)) Q:FIND="" D
....;Update finding totals
....S FDATA=$G(^TMP("PXRMETX",$J,SEQ,RCNT,ETYP,FIND)),FCNT=FCNT+1
....S FEVAL=$P(FDATA,U,2),FAPPL=$P(FDATA,U,3),FDUE=$P(FDATA,U,4)
....S FNAPPL=FEVAL-FAPPL,FNDUE=FAPPL-FDUE
....S FSEQ=FSEQ+1,FGNAM=$P(DATA,U,9)
....;Bookmark - write finding line
..;Update CNT
..S CNT=FCNT
Q
;
;Determine whether the report should be queued.
JOB ;
N DBDUZ,PXRMQUE
N %ZIS,ZTDESC,ZTSAVE,ZTRTN,ZTSK
S DBDUZ=DUZ
D SAVE^PXRMXQUE
S %ZIS="Q"
S ZTDESC="QUERI Compliance Report - print"
S ZTRTN="REPORT^PXRMETCO"
S ZTSK=1
S PXRMQUE=0
S PXRMQUE=$$DEVICE^PXRMXQUE(ZTRTN,ZTDESC,.ZTSAVE,.%ZIS,.ZTSK)
I PXRMQUE=1 G EXIT
I PXRMQUE>0 S ^XTMP(PXRMXTMP,"PRZTSK")=PXRMQUE
Q
;
EXIT ;Clean things up.
D ^%ZISC
D HOME^%ZIS
K IO("Q")
K DIRUT,DTOUT,DUOUT,POP,ZTREQ
I $D(ZTSK) D KILL^%ZTLOAD
K ZTSK,ZTQUEUED
K ^TMP("PXRMXTR",$J)
Q
;
SAVE ;Save the variables for queing.
S ZTSAVE("IEN")=""
S ZTSAVE("PXRMSTRT")=""
S ZTSAVE("PXRMSTOP")=""
Q
;
;
QUE ;BOOKMARK - NOT USED
;Queue the MST synchronization job.
N DIR,DTOUT,DUOUT,MINDT,SDTIME,STIME,X,Y
S MINDT=$$NOW^XLFDT
W !,"Queue the Clinical Reminders MST synchronization."
S DIR("A",1)="Enter the date and time you want the job to start."
S DIR("A",2)="It must be after "_$$FMTE^XLFDT(MINDT,"5Z")
S DIR("A")="Start the task at: "
S DIR(0)="DAU"_U_MINDT_"::RSX"
D ^DIR
I $D(DTOUT)!$D(DUOUT) Q
S SDTIME=Y
K DIR
S DIR(0)="YA"
S DIR("A")="Do you want to run the MST synchronization at the same time every day? "
S DIR("B")="Y"
D ^DIR
I $D(DTOUT)!$D(DUOUT) Q
I Y S STIME="1."_$P(SDTIME,".",2)
E S STIME=-1
;
;Put the task into the queue.
K ZTSAVE
;S ZTSAVE("START")=SDTIME
S ZTSAVE("STIME")=STIME
S ZTRTN="SYNCH^PXRMMST"
S ZTDESC="Clinical Reminders MST synchronization job"
S ZTDTH=SDTIME
S ZTIO=""
D ^%ZTLOAD
W !,"Task number ",ZTSK," queued."
Q
PXRMETCO ; SLC/PJH - QUERI Extract Compliance Report ;06/09/2009
+1 ;;2.0;CLINICAL REMINDERS;**6,12**;Feb 04, 2005;Build 73
+2 ;
+3 ;
ADHOC(IEN,PXRMSTRT,PXRMSTOP) ;Ad Hoc Conformance Report
+1 DO DUMMY1^PXRMRUTL
+2 QUIT
+3 ;
+4 DO JOB
+5 QUIT
+6 ;
+7 ;BOOKMARK - cloned from PXRMETX, needs modifying to avoid patient list
+8 ;update. Build ^TMP("PXRMETX",$J) for report
+9 ;
REPORT ;Initialise
+1 KILL ^TMP("PXRMETX",$JOB)
+2 ;Workfile node for ^TMP
+3 SET PXRMNODE="PXRMRULE"
+4 ;Get details from parameter file
+5 NEW DATA,DATES,LIST,NAME,PARTYPE,TEXT
+6 ;N PERIOD,TEXT,YEAR
+7 SET DATA=$GET(^PXRM(810.2,IEN,0))
+8 ;
+9 ;Determine Extract Name and period
+10 SET NAME=$PIECE(DATA,U)
SET PARTYPE=$PIECE(DATA,U,2)
+11 ;S YEAR=$P(NEXT,"/",2),PERIOD=$P(NEXT,"/")
+12 ;Calculate report period start and end dates
+13 ;D CALC^PXRMEUT(NEXT,.PXRMSTRT,.PXRMSTOP)
+14 ;Determine output name for patient list and extract summary
+15 SET DATES=$$FMTE^XLFDT(PXRMSTRT)_" - "_$$FMTE^XLFDT(PXRMSTOP)
+16 ;
+17 ;Bookmark - Needs inventive patient list names
+18 SET LIST=NAME_" REPORT "_DATES
+19 ;Process (single) Denominator rule into patient list
+20 NEW INDP,INTP,SEQ,SUB,SUFFIX
+21 SET SEQ=""
+22 FOR
SET SEQ=$ORDER(^PXRM(810.2,IEN,10,"B",SEQ))
IF 'SEQ
QUIT
Begin DoDot:1
+23 SET SUB=$ORDER(^PXRM(810.2,IEN,10,"B",SEQ,""))
IF 'SUB
QUIT
+24 SET DATA=$GET(^PXRM(810.2,IEN,10,SUB,0))
IF DATA=""
QUIT
+25 SET PXRMRULE=$PIECE(DATA,U,2)
IF 'PXRMRULE
QUIT
+26 SET SUFFIX=$PIECE(DATA,U,3)
+27 IF SUFFIX=""
SET SUFFIX="DENOMINATOR "_SEQ
+28 SET INDP=+$PIECE(DATA,U,4)
+29 SET INTP=+$PIECE(DATA,U,5)
+30 ;Create new patient list
+31 SET PXRMLIST=$$CRLST^PXRMRUL1(LIST_" "_SUFFIX)
IF 'PXRMLIST
QUIT
+32 DO START^PXRMRULE(PXRMRULE,PXRMLIST,PXRMNODE,PXRMSTRT,PXRMSTOP,IEN,INDP,INTP)
+33 ;Clear ^TMP lists created for rule
+34 DO CLEAR^PXRMRULE(PXRMRULE,PXRMNODE)
+35 ;Process reminders
+36 DO REM^PXRMETXR(SUB,PXRMLIST)
End DoDot:1
+37 ;
+38 ;Bookmark - Report stuff goes here
+39 ;Update totals section
+40 NEW APPL,CNT,DUE,DATA,ETYP,EVAL
+41 NEW FAPPL,FCNT,FDATA,FDUE,FEVAL,FGNAM,FIND,FNAPPL,FNDUE,FSEQ
+42 NEW NAPPL,NDUE,PXRMLIST,RCNT,RIEN,RSEQ,SEQ
+43 SET SEQ=0
SET CNT=1
+44 FOR
SET SEQ=$ORDER(^TMP("PXRMETX",$JOB,SEQ))
IF 'SEQ
QUIT
Begin DoDot:1
+45 SET RCNT=0
SET RSEQ=0
+46 FOR
SET RCNT=$ORDER(^TMP("PXRMETX",$JOB,SEQ,RCNT))
IF 'RCNT
QUIT
Begin DoDot:2
+47 SET DATA=$GET(^TMP("PXRMETX",$JOB,SEQ,RCNT))
IF 'DATA
QUIT
+48 SET RIEN=$PIECE(DATA,U)
SET PXRMLIST=$PIECE(DATA,U,5)
+49 SET EVAL=$PIECE(DATA,U,2)
SET APPL=$PIECE(DATA,U,3)
SET DUE=$PIECE(DATA,U,4)
+50 SET NAPPL=EVAL-APPL
SET NDUE=APPL-DUE
+51 SET CNT=CNT+1
SET RSEQ=RSEQ+1
+52 ;bookmark - write patient line
+53 ;For each count type
+54 SET ETYP=""
SET FCNT=CNT
+55 FOR
SET ETYP=$ORDER(^TMP("PXRMETX",$JOB,SEQ,RCNT,ETYP))
IF ETYP=""
QUIT
Begin DoDot:3
+56 ;For each term
+57 SET FIND=0
SET FSEQ=0
+58 FOR
SET FIND=$ORDER(^TMP("PXRMETX",$JOB,SEQ,RCNT,ETYP,FIND))
IF FIND=""
QUIT
Begin DoDot:4
+59 ;Update finding totals
+60 SET FDATA=$GET(^TMP("PXRMETX",$JOB,SEQ,RCNT,ETYP,FIND))
SET FCNT=FCNT+1
+61 SET FEVAL=$PIECE(FDATA,U,2)
SET FAPPL=$PIECE(FDATA,U,3)
SET FDUE=$PIECE(FDATA,U,4)
+62 SET FNAPPL=FEVAL-FAPPL
SET FNDUE=FAPPL-FDUE
+63 SET FSEQ=FSEQ+1
SET FGNAM=$PIECE(DATA,U,9)
+64 ;Bookmark - write finding line
End DoDot:4
End DoDot:3
+65 ;Update CNT
+66 SET CNT=FCNT
End DoDot:2
End DoDot:1
+67 QUIT
+68 ;
+69 ;Determine whether the report should be queued.
JOB ;
+1 NEW DBDUZ,PXRMQUE
+2 NEW %ZIS,ZTDESC,ZTSAVE,ZTRTN,ZTSK
+3 SET DBDUZ=DUZ
+4 DO SAVE^PXRMXQUE
+5 SET %ZIS="Q"
+6 SET ZTDESC="QUERI Compliance Report - print"
+7 SET ZTRTN="REPORT^PXRMETCO"
+8 SET ZTSK=1
+9 SET PXRMQUE=0
+10 SET PXRMQUE=$$DEVICE^PXRMXQUE(ZTRTN,ZTDESC,.ZTSAVE,.%ZIS,.ZTSK)
+11 IF PXRMQUE=1
GOTO EXIT
+12 IF PXRMQUE>0
SET ^XTMP(PXRMXTMP,"PRZTSK")=PXRMQUE
+13 QUIT
+14 ;
EXIT ;Clean things up.
+1 DO ^%ZISC
+2 DO HOME^%ZIS
+3 KILL IO("Q")
+4 KILL DIRUT,DTOUT,DUOUT,POP,ZTREQ
+5 IF $DATA(ZTSK)
DO KILL^%ZTLOAD
+6 KILL ZTSK,ZTQUEUED
+7 KILL ^TMP("PXRMXTR",$JOB)
+8 QUIT
+9 ;
SAVE ;Save the variables for queing.
+1 SET ZTSAVE("IEN")=""
+2 SET ZTSAVE("PXRMSTRT")=""
+3 SET ZTSAVE("PXRMSTOP")=""
+4 QUIT
+5 ;
+6 ;
QUE ;BOOKMARK - NOT USED
+1 ;Queue the MST synchronization job.
+2 NEW DIR,DTOUT,DUOUT,MINDT,SDTIME,STIME,X,Y
+3 SET MINDT=$$NOW^XLFDT
+4 WRITE !,"Queue the Clinical Reminders MST synchronization."
+5 SET DIR("A",1)="Enter the date and time you want the job to start."
+6 SET DIR("A",2)="It must be after "_$$FMTE^XLFDT(MINDT,"5Z")
+7 SET DIR("A")="Start the task at: "
+8 SET DIR(0)="DAU"_U_MINDT_"::RSX"
+9 DO ^DIR
+10 IF $DATA(DTOUT)!$DATA(DUOUT)
QUIT
+11 SET SDTIME=Y
+12 KILL DIR
+13 SET DIR(0)="YA"
+14 SET DIR("A")="Do you want to run the MST synchronization at the same time every day? "
+15 SET DIR("B")="Y"
+16 DO ^DIR
+17 IF $DATA(DTOUT)!$DATA(DUOUT)
QUIT
+18 IF Y
SET STIME="1."_$PIECE(SDTIME,".",2)
+19 IF '$TEST
SET STIME=-1
+20 ;
+21 ;Put the task into the queue.
+22 KILL ZTSAVE
+23 ;S ZTSAVE("START")=SDTIME
+24 SET ZTSAVE("STIME")=STIME
+25 SET ZTRTN="SYNCH^PXRMMST"
+26 SET ZTDESC="Clinical Reminders MST synchronization job"
+27 SET ZTDTH=SDTIME
+28 SET ZTIO=""
+29 DO ^%ZTLOAD
+30 WRITE !,"Task number ",ZTSK," queued."
+31 QUIT