PXRMETX ; SLC/PJH - Run Extract for QUERI ;01/28/2013
;;2.0;CLINICAL REMINDERS;**4,6,26**;Feb 04, 2005;Build 404
;
AUTO(ID,PURGE) ;Called from option scheduling (#19.2)
N IEN,LIST,LUVALUE,MODE,NEXT
S LUVALUE(1)=ID
D FIND^DIC(810.2,"","","U",.LUVALUE,"","","","","LIST")
;Get ien of extract parameter
S IEN=$P(LIST("DILIST",2,1),U,1) Q:'IEN
;Get next extract period
S NEXT=$P($G(^PXRM(810.2,IEN,0)),U,6) Q:NEXT=""
;Node is Extract and Transmit
S MODE=$S($P($G(^PXRM(810.2,IEN,100)),U)="N":0,1:1)
;Run extract
D RUN^PXRMETX(IEN,NEXT,MODE,PURGE)
;Purge Extract Summary
D PRGES^PXRMETXU
;Purge Patient Lists
D PRGPL^PXRMETXU
Q
;
GETNAME(NAME,CLASS) ;Get the extract name.
I '$D(^PXRMXT(810.3,"B",NAME)) Q NAME
N CNT,NEW
S (CNT,NEW)=0
;If name exists concatenate count
F D Q:NEW
.I '$D(^PXRMXT(810.3,"B",NAME)) S NEW=1 Q
.S CNT=CNT+1,NAME=$P(NAME,"/")_"/"_$$RJ^XLFSTR(CNT,2,0)
Q NAME
;
IHD ;Monthly IHD Extract, called from option PXRM EXTRACT VA-IHD QUERI.
D AUTO("VA-IHD QUERI","Y")
Q
;
MAIL(NAME,NEXT,MODE) ;Completion mail message
N FREQ,TEXT
S FREQ="year"
I $E(NEXT)="M" S FREQ="month"
I $E(NEXT)="Q" S FREQ="quarter"
;
I MODE=0 S TEXT="Extract and Transmission"
I MODE=1 S TEXT="Extract (No Transmission)"
I MODE=2 S TEXT="Manual Extract and Transmission"
I MODE=3 S TEXT="Manual Extract (No Transmission)"
;
S TEXT=NAME_" "_TEXT_" completed for "_FREQ_" "_NEXT
D MES^PXRMEUT(TEXT)
Q
;
MH ;Monthly MH Extract, called from option PXRM EXTRACT VA-MH QUERI.
D AUTO("VA-MH QUERI","Y")
Q
;
RUN(IEN,NEXT,MODE,PURGE) ;Process extract parameter
; IEN is ien of Extract Parameter
; NEXT is period to extract
; MODE = 0 is extract and transmission
; MODE = 1 is extract only
; MODE = 2 is manual extract and transmission (doesn't update 810.2)
; MODE = 3 is manual extract only (doesn't update 810.2)
;
N CLASS,FDA,FDAIEN,MSG
N PXRMIDOD,PXRMLIST,PXRMNODE,PXRMRULE,PXRMSTRT,PXRMXIEN,PATCREAT,XNAME
N ITER
;Initialise
K ^TMP("PXRMETX",$J),^TMP("PXRMETX1",$J)
;Workfile node for ^TMP
S PXRMNODE="PXRMRULE"
;Get details from parameter file
N DATA,INDP,INTP,LIST,NAME,PARTYPE,PERIOD,SNAME,TEXT,YEAR
;Get class from extract parameter
S CLASS=$P($G(^PXRM(810.2,IEN,100)),U)
;Otherwise default to local
I $G(CLASS)="" S CLASS="L"
;
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 XNAME=NAME_" "_YEAR_" "_PERIOD
S NAME=$$GETNAME(XNAME)
S ITER=$P(NAME,"/",2)
;Process (single) Denominator rule into patient list
N SEQ,SUB
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 LIST=$P(DATA,U,3) Q:LIST=""
.I LIST["yyyy" S LIST=$P(LIST,"yyyy")_YEAR_$P(LIST,"yyyy",2)
.I LIST["nn" S LIST=$P(LIST,"nn")_$E(PERIOD,2,10)_$P(LIST,"nn",2)
.S INDP=+$P(DATA,U,4)
.S INTP=+$P(DATA,U,5)
.;Create new patient list
.I ITER'="" S LIST=LIST_"/"_ITER
.S PATCREAT="Y",PXRMLIST=$$CRLST^PXRMRUL1(LIST,CLASS) Q:'PXRMLIST
.;
.D START^PXRMRULE(PXRMRULE,PXRMLIST,PXRMNODE,PXRMSTRT,PXRMSTOP,IEN,YEAR,PERIOD,INDP,INTP,ITER)
.;Clear ^TMP lists created for rule
.D CLEAR^PXRMRULE(PXRMRULE,PXRMNODE)
.;Process reminders and finding rules
.;If include deceased patients is true then set the flag so reminders
.;will be evaluated for deceased patients.
.S PXRMIDOD=$S(INDP:1,1:0)
.D REM^PXRMETXR(SUB,PXRMLIST,PXRMSTRT,PXRMSTOP,PARTYPE)
;
;Get the name
;S NAME=$$GETNAME(XNAME)
;Create extract summary entry
S FDA(810.3,"+1,",.01)=NAME
S FDA(810.3,"+1,",.02)=PXRMSTRT
S FDA(810.3,"+1,",.03)=PXRMSTOP
S FDA(810.3,"+1,",.06)=$$NOW^XLFDT
S FDA(810.3,"+1,",1)=IEN
S FDA(810.3,"+1,",2)=PARTYPE
S FDA(810.3,"+1,",3)=$E(PERIOD,2,99)
S FDA(810.3,"+1,",4)=YEAR
S FDA(810.3,"+1,",5)=$S(MODE<2:"A",1:"M")
S FDA(810.3,"+1,",7)=$E(PERIOD)
I PURGE="Y" S FDA(810.3,"+1,",50)=1
S FDA(810.3,"+1,",100)=CLASS
D UPDATE^DIE("","FDA","FDAIEN","MSG")
I $D(MSG) D AWRITE^PXRMUTIL("MSG") G EXIT
;
;Update extract summary from ^TMP
D UPDEX(FDAIEN(1))
;
;Transmit results
I (MODE=0)!(MODE=2) D TRANS(FDAIEN(1))
;
;Update extract parameters
I MODE<2 D UPDPAR
;
;Mail message that extract completed
D MAIL(NAME,NEXT,MODE)
;
EXIT ;Clear workfile
K ^TMP("PXRMETX",$J),^TMP("PXRMETX1",$J)
Q
;
TRANS(PXRMXIEN) ;Transmit HL7 messages
N HL7ID,NAME,NEXT
S HL7ID=""
D HL7^PXRM7API(PXRMXIEN,1,.HL7ID)
H 2
;Lock extract summary
D LOCK(PXRMXIEN) Q:$D(DUOUT)
;Update run information
S NAME=$P($G(^PXRMXT(810.3,PXRMXIEN,0)),U)
S NEXT=$P($G(^PXRMXT(810.3,PXRMXIEN,4)),U,3)
S FDA(810.3,"?1,",.01)=NAME
S FDA(810.36,"?+2,?1,",.01)=HL7ID
S FDA(810.36,"?+2,?1,",.02)=$$NOW^XLFDT
D UPDATE^DIE("","FDA","","MSG")
;Unlock extract summary
D UNLOCK(PXRMXIEN)
Q
;
UPDEX(IEN) ;Update extract summary
N DUOUT
;Lock extract summary
D LOCK(IEN) Q:$D(DUOUT)
;
;Update totals section
N APPL,CNT,DFN,DUE,DATA,ETYP,EVAL
N FAPPL,FCNT,FDATA,FDUE,FEVAL,FGNAM,FGSTA,FIND,FNAPPL,FNDUE,FSEQ
N GDATA,GSEQ,INST,NAPPL,NDUE,PCNT,PXRMLIST,RCNT,RIEN,RSEQ,SEQ,TEMP
S SEQ="",CNT=1,RSEQ=0
F S SEQ=$O(^TMP("PXRMETX",$J,SEQ)) Q:SEQ="" D
.S INST=0
.F S INST=$O(^TMP("PXRMETX",$J,SEQ,INST)) Q:'INST D
..S RCNT=""
..F S RCNT=$O(^TMP("PXRMETX",$J,SEQ,INST,RCNT)) Q:RCNT="" D
...S DATA=$G(^TMP("PXRMETX",$J,SEQ,INST,RCNT)) Q:'DATA
...S RIEN=$P(DATA,U,1),EVAL=$P(DATA,U,2),APPL=$P(DATA,U,3)
...S NAPPL=$P(DATA,U,4),DUE=$P(DATA,U,5),NDUE=$P(DATA,U,6)
...S PXRMLIST=$P(DATA,U,7)
...S CNT=CNT+1,RSEQ=RSEQ+1
...S TEMP=$$RJ^XLFSTR(RSEQ,3,0)_U_RIEN_U_INST_U_PXRMLIST_U_EVAL_U_APPL_U_NAPPL_U_DUE_U_NDUE
...S ^PXRMXT(810.3,IEN,3,RSEQ,0)=TEMP
...S ^PXRMXT(810.3,IEN,3,"B",$P(TEMP,U,1),RSEQ)=""
...;For each count type
...S GSEQ="",FCNT=0
...F S GSEQ=$O(^TMP("PXRMETX1",$J,SEQ,RCNT,GSEQ)) Q:GSEQ="" D
....S GDATA=$G(^TMP("PXRMETX1",$J,SEQ,RCNT,GSEQ))
....S FGNAM=$P(GDATA,U),ETYP=$P(GDATA,U,2),FGSTA=$P(GDATA,U,3)
....;For each term
....S FSEQ=0
....F S FSEQ=$O(^TMP("PXRMETX1",$J,SEQ,RCNT,GSEQ,FSEQ)) Q:FSEQ="" D
.....;Get the term ien
.....S FIND=$P($G(^TMP("PXRMETX1",$J,SEQ,RCNT,GSEQ,FSEQ)),U),FCNT=FCNT+1
.....;Update finding totals
.....S FDATA=$G(^TMP("PXRMETX",$J,SEQ,INST,RCNT,GSEQ,FSEQ))
.....S FEVAL=$P(FDATA,U,2),FAPPL=$P(FDATA,U,3),FNAPPL=$P(FDATA,U,4)
.....S FDUE=$P(FDATA,U,5),FNDUE=$P(FDATA,U,6)
.....S TEMP=FSEQ_U_$P(FIND,";")_U_ETYP_U_FEVAL_U_FAPPL_U_FNAPPL_U_FDUE_U_FNDUE_U_FGNAM_U_FGSTA
.....S ^PXRMXT(810.3,IEN,3,RSEQ,1,FCNT,0)=TEMP
.....;
.....;AGP REMOVE UNTIL A DECISION CAN BE MADE
.....;S DFN=0,PCNT=0
.....;F S DFN=$O(^TMP("PXRMETX",$J,SEQ,INST,RCNT,GSEQ,FSEQ,DFN)) Q:DFN'>0 D
.....;.S PCNT=PCNT+1,^PXRMXT(810.3,IEN,3,RSEQ,1,FCNT,1,PCNT,0)=DFN
.....;I PCNT>0 S ^PXRMXT(810.3,IEN,3,RSEQ,1,FCNT,1,0)="^810.3316PA"_U_PCNT_U_PCNT
....I FCNT>0 S ^PXRMXT(810.3,IEN,3,RSEQ,1,0)="^810.331I"_U_FCNT_U_FCNT
.I RSEQ>0 S ^PXRMXT(810.3,IEN,3,0)="^810.33I"_U_RSEQ_U_RSEQ
;Unlock extract summary
D UNLOCK(IEN)
Q
;
;File locking
LOCK(PXRMXIEN) L +^PXRMXT(810.3,PXRMXIEN):DILOCKTM
I '$T W !!?5,"Another user is using this extract summary" S DUOUT=1
Q
;
UNLOCK(PXRMXIEN) L -^PXRMXT(810.3,PXRMXIEN) Q
;
UPDPAR ;Update parameters when run complete
N DATA,LAST,NEXT,PERIOD,TYPE,YEAR
S DATA=$G(^PXRM(810.2,IEN,0)),NEXT=$P(DATA,U,6),TYPE=$P(DATA,U,3)
;Last run updated
S LAST=NEXT
;Calculate next run
I TYPE="Y" S NEXT=NEXT+1
I "QM"[TYPE D
.N NUM
.S PERIOD=$P(NEXT,"/",1),YEAR=$P(NEXT,"/",2)
.S NUM=$P(PERIOD,TYPE,2)+1
.I TYPE="Q",NUM>4 S NUM=1,YEAR=YEAR+1
.I TYPE="M",NUM>12 S NUM=1,YEAR=YEAR+1
.S NEXT=TYPE_NUM_"/"_YEAR
;Update last and next run fields
S $P(^PXRM(810.2,IEN,0),U,4,6)=LAST_U_$$NOW^XLFDT_U_NEXT
Q
;
PXRMETX ; SLC/PJH - Run Extract for QUERI ;01/28/2013
+1 ;;2.0;CLINICAL REMINDERS;**4,6,26**;Feb 04, 2005;Build 404
+2 ;
AUTO(ID,PURGE) ;Called from option scheduling (#19.2)
+1 NEW IEN,LIST,LUVALUE,MODE,NEXT
+2 SET LUVALUE(1)=ID
+3 DO FIND^DIC(810.2,"","","U",.LUVALUE,"","","","","LIST")
+4 ;Get ien of extract parameter
+5 SET IEN=$PIECE(LIST("DILIST",2,1),U,1)
IF 'IEN
QUIT
+6 ;Get next extract period
+7 SET NEXT=$PIECE($GET(^PXRM(810.2,IEN,0)),U,6)
IF NEXT=""
QUIT
+8 ;Node is Extract and Transmit
+9 SET MODE=$SELECT($PIECE($GET(^PXRM(810.2,IEN,100)),U)="N":0,1:1)
+10 ;Run extract
+11 DO RUN^PXRMETX(IEN,NEXT,MODE,PURGE)
+12 ;Purge Extract Summary
+13 DO PRGES^PXRMETXU
+14 ;Purge Patient Lists
+15 DO PRGPL^PXRMETXU
+16 QUIT
+17 ;
GETNAME(NAME,CLASS) ;Get the extract name.
+1 IF '$DATA(^PXRMXT(810.3,"B",NAME))
QUIT NAME
+2 NEW CNT,NEW
+3 SET (CNT,NEW)=0
+4 ;If name exists concatenate count
+5 FOR
Begin DoDot:1
+6 IF '$DATA(^PXRMXT(810.3,"B",NAME))
SET NEW=1
QUIT
+7 SET CNT=CNT+1
SET NAME=$PIECE(NAME,"/")_"/"_$$RJ^XLFSTR(CNT,2,0)
End DoDot:1
IF NEW
QUIT
+8 QUIT NAME
+9 ;
IHD ;Monthly IHD Extract, called from option PXRM EXTRACT VA-IHD QUERI.
+1 DO AUTO("VA-IHD QUERI","Y")
+2 QUIT
+3 ;
MAIL(NAME,NEXT,MODE) ;Completion mail message
+1 NEW FREQ,TEXT
+2 SET FREQ="year"
+3 IF $EXTRACT(NEXT)="M"
SET FREQ="month"
+4 IF $EXTRACT(NEXT)="Q"
SET FREQ="quarter"
+5 ;
+6 IF MODE=0
SET TEXT="Extract and Transmission"
+7 IF MODE=1
SET TEXT="Extract (No Transmission)"
+8 IF MODE=2
SET TEXT="Manual Extract and Transmission"
+9 IF MODE=3
SET TEXT="Manual Extract (No Transmission)"
+10 ;
+11 SET TEXT=NAME_" "_TEXT_" completed for "_FREQ_" "_NEXT
+12 DO MES^PXRMEUT(TEXT)
+13 QUIT
+14 ;
MH ;Monthly MH Extract, called from option PXRM EXTRACT VA-MH QUERI.
+1 DO AUTO("VA-MH QUERI","Y")
+2 QUIT
+3 ;
RUN(IEN,NEXT,MODE,PURGE) ;Process extract parameter
+1 ; IEN is ien of Extract Parameter
+2 ; NEXT is period to extract
+3 ; MODE = 0 is extract and transmission
+4 ; MODE = 1 is extract only
+5 ; MODE = 2 is manual extract and transmission (doesn't update 810.2)
+6 ; MODE = 3 is manual extract only (doesn't update 810.2)
+7 ;
+8 NEW CLASS,FDA,FDAIEN,MSG
+9 NEW PXRMIDOD,PXRMLIST,PXRMNODE,PXRMRULE,PXRMSTRT,PXRMXIEN,PATCREAT,XNAME
+10 NEW ITER
+11 ;Initialise
+12 KILL ^TMP("PXRMETX",$JOB),^TMP("PXRMETX1",$JOB)
+13 ;Workfile node for ^TMP
+14 SET PXRMNODE="PXRMRULE"
+15 ;Get details from parameter file
+16 NEW DATA,INDP,INTP,LIST,NAME,PARTYPE,PERIOD,SNAME,TEXT,YEAR
+17 ;Get class from extract parameter
+18 SET CLASS=$PIECE($GET(^PXRM(810.2,IEN,100)),U)
+19 ;Otherwise default to local
+20 IF $GET(CLASS)=""
SET CLASS="L"
+21 ;
+22 SET DATA=$GET(^PXRM(810.2,IEN,0))
+23 ;Determine Extract Name and period
+24 SET NAME=$PIECE(DATA,U)
SET PARTYPE=$PIECE(DATA,U,2)
+25 SET YEAR=$PIECE(NEXT,"/",2)
SET PERIOD=$PIECE(NEXT,"/")
+26 ;Calculate report period start and end dates
+27 DO CALC^PXRMEUT(NEXT,.PXRMSTRT,.PXRMSTOP)
+28 ;Determine output name for patient list and extract summary
+29 SET XNAME=NAME_" "_YEAR_" "_PERIOD
+30 SET NAME=$$GETNAME(XNAME)
+31 SET ITER=$PIECE(NAME,"/",2)
+32 ;Process (single) Denominator rule into patient list
+33 NEW SEQ,SUB
+34 SET SEQ=""
+35 FOR
SET SEQ=$ORDER(^PXRM(810.2,IEN,10,"B",SEQ))
IF 'SEQ
QUIT
Begin DoDot:1
+36 SET SUB=$ORDER(^PXRM(810.2,IEN,10,"B",SEQ,""))
IF 'SUB
QUIT
+37 SET DATA=$GET(^PXRM(810.2,IEN,10,SUB,0))
IF DATA=""
QUIT
+38 SET PXRMRULE=$PIECE(DATA,U,2)
IF 'PXRMRULE
QUIT
+39 SET LIST=$PIECE(DATA,U,3)
IF LIST=""
QUIT
+40 IF LIST["yyyy"
SET LIST=$PIECE(LIST,"yyyy")_YEAR_$PIECE(LIST,"yyyy",2)
+41 IF LIST["nn"
SET LIST=$PIECE(LIST,"nn")_$EXTRACT(PERIOD,2,10)_$PIECE(LIST,"nn",2)
+42 SET INDP=+$PIECE(DATA,U,4)
+43 SET INTP=+$PIECE(DATA,U,5)
+44 ;Create new patient list
+45 IF ITER'=""
SET LIST=LIST_"/"_ITER
+46 SET PATCREAT="Y"
SET PXRMLIST=$$CRLST^PXRMRUL1(LIST,CLASS)
IF 'PXRMLIST
QUIT
+47 ;
+48 DO START^PXRMRULE(PXRMRULE,PXRMLIST,PXRMNODE,PXRMSTRT,PXRMSTOP,IEN,YEAR,PERIOD,INDP,INTP,ITER)
+49 ;Clear ^TMP lists created for rule
+50 DO CLEAR^PXRMRULE(PXRMRULE,PXRMNODE)
+51 ;Process reminders and finding rules
+52 ;If include deceased patients is true then set the flag so reminders
+53 ;will be evaluated for deceased patients.
+54 SET PXRMIDOD=$SELECT(INDP:1,1:0)
+55 DO REM^PXRMETXR(SUB,PXRMLIST,PXRMSTRT,PXRMSTOP,PARTYPE)
End DoDot:1
+56 ;
+57 ;Get the name
+58 ;S NAME=$$GETNAME(XNAME)
+59 ;Create extract summary entry
+60 SET FDA(810.3,"+1,",.01)=NAME
+61 SET FDA(810.3,"+1,",.02)=PXRMSTRT
+62 SET FDA(810.3,"+1,",.03)=PXRMSTOP
+63 SET FDA(810.3,"+1,",.06)=$$NOW^XLFDT
+64 SET FDA(810.3,"+1,",1)=IEN
+65 SET FDA(810.3,"+1,",2)=PARTYPE
+66 SET FDA(810.3,"+1,",3)=$EXTRACT(PERIOD,2,99)
+67 SET FDA(810.3,"+1,",4)=YEAR
+68 SET FDA(810.3,"+1,",5)=$SELECT(MODE<2:"A",1:"M")
+69 SET FDA(810.3,"+1,",7)=$EXTRACT(PERIOD)
+70 IF PURGE="Y"
SET FDA(810.3,"+1,",50)=1
+71 SET FDA(810.3,"+1,",100)=CLASS
+72 DO UPDATE^DIE("","FDA","FDAIEN","MSG")
+73 IF $DATA(MSG)
DO AWRITE^PXRMUTIL("MSG")
GOTO EXIT
+74 ;
+75 ;Update extract summary from ^TMP
+76 DO UPDEX(FDAIEN(1))
+77 ;
+78 ;Transmit results
+79 IF (MODE=0)!(MODE=2)
DO TRANS(FDAIEN(1))
+80 ;
+81 ;Update extract parameters
+82 IF MODE<2
DO UPDPAR
+83 ;
+84 ;Mail message that extract completed
+85 DO MAIL(NAME,NEXT,MODE)
+86 ;
EXIT ;Clear workfile
+1 KILL ^TMP("PXRMETX",$JOB),^TMP("PXRMETX1",$JOB)
+2 QUIT
+3 ;
TRANS(PXRMXIEN) ;Transmit HL7 messages
+1 NEW HL7ID,NAME,NEXT
+2 SET HL7ID=""
+3 DO HL7^PXRM7API(PXRMXIEN,1,.HL7ID)
+4 HANG 2
+5 ;Lock extract summary
+6 DO LOCK(PXRMXIEN)
IF $DATA(DUOUT)
QUIT
+7 ;Update run information
+8 SET NAME=$PIECE($GET(^PXRMXT(810.3,PXRMXIEN,0)),U)
+9 SET NEXT=$PIECE($GET(^PXRMXT(810.3,PXRMXIEN,4)),U,3)
+10 SET FDA(810.3,"?1,",.01)=NAME
+11 SET FDA(810.36,"?+2,?1,",.01)=HL7ID
+12 SET FDA(810.36,"?+2,?1,",.02)=$$NOW^XLFDT
+13 DO UPDATE^DIE("","FDA","","MSG")
+14 ;Unlock extract summary
+15 DO UNLOCK(PXRMXIEN)
+16 QUIT
+17 ;
UPDEX(IEN) ;Update extract summary
+1 NEW DUOUT
+2 ;Lock extract summary
+3 DO LOCK(IEN)
IF $DATA(DUOUT)
QUIT
+4 ;
+5 ;Update totals section
+6 NEW APPL,CNT,DFN,DUE,DATA,ETYP,EVAL
+7 NEW FAPPL,FCNT,FDATA,FDUE,FEVAL,FGNAM,FGSTA,FIND,FNAPPL,FNDUE,FSEQ
+8 NEW GDATA,GSEQ,INST,NAPPL,NDUE,PCNT,PXRMLIST,RCNT,RIEN,RSEQ,SEQ,TEMP
+9 SET SEQ=""
SET CNT=1
SET RSEQ=0
+10 FOR
SET SEQ=$ORDER(^TMP("PXRMETX",$JOB,SEQ))
IF SEQ=""
QUIT
Begin DoDot:1
+11 SET INST=0
+12 FOR
SET INST=$ORDER(^TMP("PXRMETX",$JOB,SEQ,INST))
IF 'INST
QUIT
Begin DoDot:2
+13 SET RCNT=""
+14 FOR
SET RCNT=$ORDER(^TMP("PXRMETX",$JOB,SEQ,INST,RCNT))
IF RCNT=""
QUIT
Begin DoDot:3
+15 SET DATA=$GET(^TMP("PXRMETX",$JOB,SEQ,INST,RCNT))
IF 'DATA
QUIT
+16 SET RIEN=$PIECE(DATA,U,1)
SET EVAL=$PIECE(DATA,U,2)
SET APPL=$PIECE(DATA,U,3)
+17 SET NAPPL=$PIECE(DATA,U,4)
SET DUE=$PIECE(DATA,U,5)
SET NDUE=$PIECE(DATA,U,6)
+18 SET PXRMLIST=$PIECE(DATA,U,7)
+19 SET CNT=CNT+1
SET RSEQ=RSEQ+1
+20 SET TEMP=$$RJ^XLFSTR(RSEQ,3,0)_U_RIEN_U_INST_U_PXRMLIST_U_EVAL_U_APPL_U_NAPPL_U_DUE_U_NDUE
+21 SET ^PXRMXT(810.3,IEN,3,RSEQ,0)=TEMP
+22 SET ^PXRMXT(810.3,IEN,3,"B",$PIECE(TEMP,U,1),RSEQ)=""
+23 ;For each count type
+24 SET GSEQ=""
SET FCNT=0
+25 FOR
SET GSEQ=$ORDER(^TMP("PXRMETX1",$JOB,SEQ,RCNT,GSEQ))
IF GSEQ=""
QUIT
Begin DoDot:4
+26 SET GDATA=$GET(^TMP("PXRMETX1",$JOB,SEQ,RCNT,GSEQ))
+27 SET FGNAM=$PIECE(GDATA,U)
SET ETYP=$PIECE(GDATA,U,2)
SET FGSTA=$PIECE(GDATA,U,3)
+28 ;For each term
+29 SET FSEQ=0
+30 FOR
SET FSEQ=$ORDER(^TMP("PXRMETX1",$JOB,SEQ,RCNT,GSEQ,FSEQ))
IF FSEQ=""
QUIT
Begin DoDot:5
+31 ;Get the term ien
+32 SET FIND=$PIECE($GET(^TMP("PXRMETX1",$JOB,SEQ,RCNT,GSEQ,FSEQ)),U)
SET FCNT=FCNT+1
+33 ;Update finding totals
+34 SET FDATA=$GET(^TMP("PXRMETX",$JOB,SEQ,INST,RCNT,GSEQ,FSEQ))
+35 SET FEVAL=$PIECE(FDATA,U,2)
SET FAPPL=$PIECE(FDATA,U,3)
SET FNAPPL=$PIECE(FDATA,U,4)
+36 SET FDUE=$PIECE(FDATA,U,5)
SET FNDUE=$PIECE(FDATA,U,6)
+37 SET TEMP=FSEQ_U_$PIECE(FIND,";")_U_ETYP_U_FEVAL_U_FAPPL_U_FNAPPL_U_FDUE_U_FNDUE_U_FGNAM_U_FGSTA
+38 SET ^PXRMXT(810.3,IEN,3,RSEQ,1,FCNT,0)=TEMP
+39 ;
+40 ;AGP REMOVE UNTIL A DECISION CAN BE MADE
+41 ;S DFN=0,PCNT=0
+42 ;F S DFN=$O(^TMP("PXRMETX",$J,SEQ,INST,RCNT,GSEQ,FSEQ,DFN)) Q:DFN'>0 D
+43 ;.S PCNT=PCNT+1,^PXRMXT(810.3,IEN,3,RSEQ,1,FCNT,1,PCNT,0)=DFN
+44 ;I PCNT>0 S ^PXRMXT(810.3,IEN,3,RSEQ,1,FCNT,1,0)="^810.3316PA"_U_PCNT_U_PCNT
End DoDot:5
+45 IF FCNT>0
SET ^PXRMXT(810.3,IEN,3,RSEQ,1,0)="^810.331I"_U_FCNT_U_FCNT
End DoDot:4
End DoDot:3
End DoDot:2
+46 IF RSEQ>0
SET ^PXRMXT(810.3,IEN,3,0)="^810.33I"_U_RSEQ_U_RSEQ
End DoDot:1
+47 ;Unlock extract summary
+48 DO UNLOCK(IEN)
+49 QUIT
+50 ;
+51 ;File locking
LOCK(PXRMXIEN) LOCK +^PXRMXT(810.3,PXRMXIEN):DILOCKTM
+1 IF '$TEST
WRITE !!?5,"Another user is using this extract summary"
SET DUOUT=1
+2 QUIT
+3 ;
UNLOCK(PXRMXIEN) LOCK -^PXRMXT(810.3,PXRMXIEN)
QUIT
+1 ;
UPDPAR ;Update parameters when run complete
+1 NEW DATA,LAST,NEXT,PERIOD,TYPE,YEAR
+2 SET DATA=$GET(^PXRM(810.2,IEN,0))
SET NEXT=$PIECE(DATA,U,6)
SET TYPE=$PIECE(DATA,U,3)
+3 ;Last run updated
+4 SET LAST=NEXT
+5 ;Calculate next run
+6 IF TYPE="Y"
SET NEXT=NEXT+1
+7 IF "QM"[TYPE
Begin DoDot:1
+8 NEW NUM
+9 SET PERIOD=$PIECE(NEXT,"/",1)
SET YEAR=$PIECE(NEXT,"/",2)
+10 SET NUM=$PIECE(PERIOD,TYPE,2)+1
+11 IF TYPE="Q"
IF NUM>4
SET NUM=1
SET YEAR=YEAR+1
+12 IF TYPE="M"
IF NUM>12
SET NUM=1
SET YEAR=YEAR+1
+13 SET NEXT=TYPE_NUM_"/"_YEAR
End DoDot:1
+14 ;Update last and next run fields
+15 SET $PIECE(^PXRM(810.2,IEN,0),U,4,6)=LAST_U_$$NOW^XLFDT_U_NEXT
+16 QUIT
+17 ;