DGPTAPSL ;MTC/ALB - PTF Archive and Purge Selection Routines; 9/11/92
;;5.3;Registration;**31,1015**;Aug 13, 1993;Build 21
;
SEL() ;-- the routine will get the date range for the a/p process
N SDATE,EDATE,Y
S (SDATE,EDATE)=""
;-- get oldest record on file
S Y=$O(^DGPT("AF",0)) D DD^%DT W !,"The oldest PTF record on file is from ",Y,"."
S DIR(0)="D^:"_$$MAXDT(),DIR("A")="Please enter the date to begin search"
D ^DIR
G:$D(DIRUT) SELQ S SDATE=Y
S DIR(0)="D^"_Y_":"_$$MAXDT(),DIR("A")="Please enter the date to end search"
D ^DIR
G:$D(DIRUT) SELQ S EDATE=Y
SELQ Q SDATE_"^"_EDATE
;
MAXDT() ;-- This function will return the lastest date allowable for
;purge. The date is based on the current FY - X; where X is
;number of years determined by VACO.
; OUTPUT - date in FM format
N DATE,YEARS
S YEARS=3,DATE=""
D NOW^%DTC
;-- get current FY
I %I(1)>9,%I(1)<13 S DATE=%I(3)+1
I %I(1)>0,%I(1)<10 S DATE=%I(3)
;-- adjust max date by YEARS
S DATE=(DATE-YEARS)_"0930"
K %I,X
Q DATE
;
SRCH(GLB,DRANGE) ;-- search PTF file by adm date
; INPUT: GLB - Global to load entries ex. "^TMP("MATT",$J,"
; DRANGE - start date ^ end date in FM format
;
; OUTPUT: Total # of entires loaded into GLB
N SDATE,EDATE,PDATE,NREC,PTF
S NREC=0,SDATE=$P(DRANGE,U),EDATE=$P(DRANGE,U,2)
S PDATE=SDATE-.0000001 F S PDATE=$O(^DGPT("AF",PDATE)) Q:'PDATE!(PDATE>EDATE) S PTF=0 F S PTF=$O(^DGPT("AF",PDATE,PTF)) Q:'PTF I $$SHUDADD(PTF,DRANGE) S @(GLB_PTF_")")="",NREC=NREC+1
Q NREC
;
SHUDADD(PTF,DRANGE) ;-- routine to determin if the PTF records should be added to purge
; INPUT : PTF - record to check
; DRANGE - start and end date of search
; OUTPUT: 1=OK, 0=Don't Purge
N RESULT,X,DFN
S RESULT=1
;-- if PTF record does not exist... exit
I '$D(^DGPT(PTF,0)) S RESULT=0 G SHUDEND
S DFN=$P($G(^DGPT(PTF,0)),U)
;-- check if current inpatient
S X=$O(^DGPM("APTF",PTF,0)) I '$P($G(^DGPT(PTF,70)),U),X,X=$G(^DPT(DFN,.105)) S RESULT=0 G SHUDEND
;-- check if discharge date is after end date
I $P($G(^DGPT(PTF,70)),U)>$P(DRANGE,U,2) S RESULT=0 G SHUDEND
;-- check for entry in bill claims file
I $D(^DGCR(399,"APTF",PTF)) S RESULT=0 G SHUDEND
;
SHUDEND Q RESULT
;
CRTEMP ;-- This function will create a sort template containing the
; items from the PTF File (#45) that should be Archived/Purged. The
; name of the template will be derive from the date range selected.
; Lastly, if items are selected, then an entry will be made in the
; PTF Archive/Purge History File (#45.62).
;
; Sample File name DGPTAP89011391110201 = Archive PTF Sort Template
; created for the date range:
;
; Jan 13, 1989 - Nov 2, 1991 - #1 created for that date range.
; Note: if more then 1 entry is made for a date range then the last
; 2 characters will be incremented. Max for date range = 99
;
;-- get date range, build file name, get next sequence number
N FNAME,OLFN,SEQNUM,DRANGE,TEMP,NUMREC
;-- get date range
S DRANGE=$$SEL() G:DRANGE=U!($P(DRANGE,U)="")!($P(DRANGE,U,2)="") CRQ
;-- build template name
S FNAME="DGPTAP"_$E(DRANGE,2,7)_$E($P(DRANGE,U,2),2,7)
;-- determine correct sequence number
S SEQNUM=1,OLFN=FNAME F S OLFN=$O(^DIBT("B",OLFN)) Q:OLFN=""!(FNAME<$E(OLFN,1,18)) I FNAME=$E(OLFN,1,18) S SEQNUM=SEQNUM+1
S FNAME=FNAME_$S(SEQNUM<10:"0"_SEQNUM,1:SEQNUM)
;-- add entry to sort template file
S DIC="^DIBT(",DIC(0)="LZ",X=FNAME,DIC("DR")="2///NOW;4///45;7///NOW"
K DD,DO D FILE^DICN S TEMP=+Y I 'Y W !,*7,">>> Error creating Sort Template ... Try again later." G CRQ
;-- search File (#45), for the date range, if no entries del template
S NUMREC=$$SRCH("^DIBT("_TEMP_",1,",DRANGE)
I NUMREC=0 D G CRQ
. W !,*7,">>> No entries selected for "
. S Y=$P(DRANGE,U) X ^DD("DD") W Y," to "
. S Y=$P(DRANGE,U,2) X ^DD("DD") W Y,"."
. W !,*7,">>> Deleting Sort Template."
. S DIK="^DIBT(",DA=TEMP D ^DIK K DIK,DA
;-- create historical entry in file #45.62
D CRHIS(FNAME,NUMREC,DRANGE)
CRQ K DIC,DD,DO
Q
;
CRHIS(FNAME,NUMREC,DRANGE) ;-- This function will create an entry in the
; PTF Archive/Purge History File (#45.62).
;
; INPUT : FNAME - Name of entry (same as search template)
; NUMREC - Total number of records to process
;
W !,">>> Creating PTF Archive/Purge History entry."
S DIC="^DGP(45.62,",DIC(0)="LZ",X=FNAME,DIC("DR")=".08///"_FNAME_";.09///^S X=NUMREC;.1///"_$P(DRANGE,U)_";.11///"_$P(DRANGE,U,2)
K DD,DO D FILE^DICN S TEMP=+Y
K DIC
Q
;
DELENTRY(FNAME) ;-- This function will delete the entry in the
; the PTF Archive/Purge History file and the search
; template.
; INPUT : FNAME - History File to delete.
;
N RECNUM
W *7,!,">>> Deleting PTF Archive/Purge History entry."
S RECNUM=$O(^DGP(45.62,"B",FNAME,0)) I 'RECNUM G DELENQ
S DA=$P(^DGP(45.62,RECNUM,0),U,8) I DA S DIK="^DIBT(" D ^DIK K DIK,DA
S DIK="^DGP(45.62,",DA=RECNUM D ^DIK K DIK,DA
DELENQ Q
;
DGPTAPSL ;MTC/ALB - PTF Archive and Purge Selection Routines; 9/11/92
+1 ;;5.3;Registration;**31,1015**;Aug 13, 1993;Build 21
+2 ;
SEL() ;-- the routine will get the date range for the a/p process
+1 NEW SDATE,EDATE,Y
+2 SET (SDATE,EDATE)=""
+3 ;-- get oldest record on file
+4 SET Y=$ORDER(^DGPT("AF",0))
DO DD^%DT
WRITE !,"The oldest PTF record on file is from ",Y,"."
+5 SET DIR(0)="D^:"_$$MAXDT()
SET DIR("A")="Please enter the date to begin search"
+6 DO ^DIR
+7 IF $DATA(DIRUT)
GOTO SELQ
SET SDATE=Y
+8 SET DIR(0)="D^"_Y_":"_$$MAXDT()
SET DIR("A")="Please enter the date to end search"
+9 DO ^DIR
+10 IF $DATA(DIRUT)
GOTO SELQ
SET EDATE=Y
SELQ QUIT SDATE_"^"_EDATE
+1 ;
MAXDT() ;-- This function will return the lastest date allowable for
+1 ;purge. The date is based on the current FY - X; where X is
+2 ;number of years determined by VACO.
+3 ; OUTPUT - date in FM format
+4 NEW DATE,YEARS
+5 SET YEARS=3
SET DATE=""
+6 DO NOW^%DTC
+7 ;-- get current FY
+8 IF %I(1)>9
IF %I(1)<13
SET DATE=%I(3)+1
+9 IF %I(1)>0
IF %I(1)<10
SET DATE=%I(3)
+10 ;-- adjust max date by YEARS
+11 SET DATE=(DATE-YEARS)_"0930"
+12 KILL %I,X
+13 QUIT DATE
+14 ;
SRCH(GLB,DRANGE) ;-- search PTF file by adm date
+1 ; INPUT: GLB - Global to load entries ex. "^TMP("MATT",$J,"
+2 ; DRANGE - start date ^ end date in FM format
+3 ;
+4 ; OUTPUT: Total # of entires loaded into GLB
+5 NEW SDATE,EDATE,PDATE,NREC,PTF
+6 SET NREC=0
SET SDATE=$PIECE(DRANGE,U)
SET EDATE=$PIECE(DRANGE,U,2)
+7 SET PDATE=SDATE-.0000001
FOR
SET PDATE=$ORDER(^DGPT("AF",PDATE))
IF 'PDATE!(PDATE>EDATE)
QUIT
SET PTF=0
FOR
SET PTF=$ORDER(^DGPT("AF",PDATE,PTF))
IF 'PTF
QUIT
IF $$SHUDADD(PTF,DRANGE)
SET @(GLB_PTF_")")=""
SET NREC=NREC+1
+8 QUIT NREC
+9 ;
SHUDADD(PTF,DRANGE) ;-- routine to determin if the PTF records should be added to purge
+1 ; INPUT : PTF - record to check
+2 ; DRANGE - start and end date of search
+3 ; OUTPUT: 1=OK, 0=Don't Purge
+4 NEW RESULT,X,DFN
+5 SET RESULT=1
+6 ;-- if PTF record does not exist... exit
+7 IF '$DATA(^DGPT(PTF,0))
SET RESULT=0
GOTO SHUDEND
+8 SET DFN=$PIECE($GET(^DGPT(PTF,0)),U)
+9 ;-- check if current inpatient
+10 SET X=$ORDER(^DGPM("APTF",PTF,0))
IF '$PIECE($GET(^DGPT(PTF,70)),U)
IF X
IF X=$GET(^DPT(DFN,.105))
SET RESULT=0
GOTO SHUDEND
+11 ;-- check if discharge date is after end date
+12 IF $PIECE($GET(^DGPT(PTF,70)),U)>$PIECE(DRANGE,U,2)
SET RESULT=0
GOTO SHUDEND
+13 ;-- check for entry in bill claims file
+14 IF $DATA(^DGCR(399,"APTF",PTF))
SET RESULT=0
GOTO SHUDEND
+15 ;
SHUDEND QUIT RESULT
+1 ;
CRTEMP ;-- This function will create a sort template containing the
+1 ; items from the PTF File (#45) that should be Archived/Purged. The
+2 ; name of the template will be derive from the date range selected.
+3 ; Lastly, if items are selected, then an entry will be made in the
+4 ; PTF Archive/Purge History File (#45.62).
+5 ;
+6 ; Sample File name DGPTAP89011391110201 = Archive PTF Sort Template
+7 ; created for the date range:
+8 ;
+9 ; Jan 13, 1989 - Nov 2, 1991 - #1 created for that date range.
+10 ; Note: if more then 1 entry is made for a date range then the last
+11 ; 2 characters will be incremented. Max for date range = 99
+12 ;
+13 ;-- get date range, build file name, get next sequence number
+14 NEW FNAME,OLFN,SEQNUM,DRANGE,TEMP,NUMREC
+15 ;-- get date range
+16 SET DRANGE=$$SEL()
IF DRANGE=U!($PIECE(DRANGE,U)="")!($PIECE(DRANGE,U,2)="")
GOTO CRQ
+17 ;-- build template name
+18 SET FNAME="DGPTAP"_$EXTRACT(DRANGE,2,7)_$EXTRACT($PIECE(DRANGE,U,2),2,7)
+19 ;-- determine correct sequence number
+20 SET SEQNUM=1
SET OLFN=FNAME
FOR
SET OLFN=$ORDER(^DIBT("B",OLFN))
IF OLFN=""!(FNAME<$EXTRACT(OLFN,1,18))
QUIT
IF FNAME=$EXTRACT(OLFN,1,18)
SET SEQNUM=SEQNUM+1
+21 SET FNAME=FNAME_$SELECT(SEQNUM<10:"0"_SEQNUM,1:SEQNUM)
+22 ;-- add entry to sort template file
+23 SET DIC="^DIBT("
SET DIC(0)="LZ"
SET X=FNAME
SET DIC("DR")="2///NOW;4///45;7///NOW"
+24 KILL DD,DO
DO FILE^DICN
SET TEMP=+Y
IF 'Y
WRITE !,*7,">>> Error creating Sort Template ... Try again later."
GOTO CRQ
+25 ;-- search File (#45), for the date range, if no entries del template
+26 SET NUMREC=$$SRCH("^DIBT("_TEMP_",1,",DRANGE)
+27 IF NUMREC=0
Begin DoDot:1
+28 WRITE !,*7,">>> No entries selected for "
+29 SET Y=$PIECE(DRANGE,U)
XECUTE ^DD("DD")
WRITE Y," to "
+30 SET Y=$PIECE(DRANGE,U,2)
XECUTE ^DD("DD")
WRITE Y,"."
+31 WRITE !,*7,">>> Deleting Sort Template."
+32 SET DIK="^DIBT("
SET DA=TEMP
DO ^DIK
KILL DIK,DA
End DoDot:1
GOTO CRQ
+33 ;-- create historical entry in file #45.62
+34 DO CRHIS(FNAME,NUMREC,DRANGE)
CRQ KILL DIC,DD,DO
+1 QUIT
+2 ;
CRHIS(FNAME,NUMREC,DRANGE) ;-- This function will create an entry in the
+1 ; PTF Archive/Purge History File (#45.62).
+2 ;
+3 ; INPUT : FNAME - Name of entry (same as search template)
+4 ; NUMREC - Total number of records to process
+5 ;
+6 WRITE !,">>> Creating PTF Archive/Purge History entry."
+7 SET DIC="^DGP(45.62,"
SET DIC(0)="LZ"
SET X=FNAME
SET DIC("DR")=".08///"_FNAME_";.09///^S X=NUMREC;.1///"_$PIECE(DRANGE,U)_";.11///"_$PIECE(DRANGE,U,2)
+8 KILL DD,DO
DO FILE^DICN
SET TEMP=+Y
+9 KILL DIC
+10 QUIT
+11 ;
DELENTRY(FNAME) ;-- This function will delete the entry in the
+1 ; the PTF Archive/Purge History file and the search
+2 ; template.
+3 ; INPUT : FNAME - History File to delete.
+4 ;
+5 NEW RECNUM
+6 WRITE *7,!,">>> Deleting PTF Archive/Purge History entry."
+7 SET RECNUM=$ORDER(^DGP(45.62,"B",FNAME,0))
IF 'RECNUM
GOTO DELENQ
+8 SET DA=$PIECE(^DGP(45.62,RECNUM,0),U,8)
IF DA
SET DIK="^DIBT("
DO ^DIK
KILL DIK,DA
+9 SET DIK="^DGP(45.62,"
SET DA=RECNUM
DO ^DIK
KILL DIK,DA
DELENQ QUIT
+1 ;