EAS155P1 ;;ALB/SCK - MT LETTERS BAD POINTERS CLEAN UP ;07/22/2004
;;1.0;ENROLLMENT APPLICATION SYSTEM;**55**;MAR 15,2001
;
; This routine was initally run as the post-install for patch EAS*1*55
; Running this routine from programmer mode will initiate another
; reporting cycle. You should not run this routine unless advised
; by customer support.
Q
;
EN ; Entry point from programmer mode
N MSG,XCNT,DIR,X,Y,DIRUT
;
F XCNT=1:1 S LINE=$P($T(TEXT+XCNT),";;",2) Q:LINE="$$END" S MSG(XCNT)=LINE
W @IOF
S XCNT=0 F S XCNT=$O(MSG(XCNT)) Q:'XCNT W !?3,MSG(XCNT)
W !
I '$$CHKPREV Q
;
S DIR(0)="Y",DIR("B")="YES",DIR("A")="Continue with scan"
S DIR("?")="Press ENTER to continue, enter ""NO"" to exit."
D ^DIR K DIR
I Y D QUE Q
W !?3,"Exiting scan..."
Q
;
QUE ;
K ZTRTN,ZTDESC,ZTSAVE
S ZTRTN="BLD^EAS155P1"
S ZTDESC="EAS MT LTR BAD PTR SCAN"
S ZTSAVE("DUZ")=""
S ZTIO=""
D ^%ZTLOAD
I $D(ZTSK)[0 D
. W:'$G(EASQ) !!?3,"Scan canceled"
E D
. I $G(EASQ) D BMES^XPDUTL("Scan Queued: "_ZTSK)
. E W !!?3,"Scan Queued: "_ZTSK
Q
;
BLD ; Entry point scan and cleanup. Do not call directly, call from the EN entry point.
D SCAN,CLNUP,ALERT
S ^XTMP("EASBADPTRS",0,"END")=$H
Q
;
POST ; Post Install entry point. This entry point is intended to be called from the KIDS build.
N MSG,XCNT,EASQ
;
F XCNT=1:1 S LINE=$P($T(TEXT+XCNT),";;",2) Q:LINE="$$END" D
. S MSG(XCNT)=LINE
D MES^XPDUTL(.MSG)
S EASQ=1 D QUE
Q
;
SCAN ; Begin scanning for any bad pointers in the MT Letter Files
N EAIEN
;
K ^XTMP("EASBADPTRS")
S ^XTMP("EASBADPTRS",0)=$$FMADD^XLFDT($$DT^XLFDT,30)_U_$$DT^XLFDT_U_"EAS MT LETTERS BAD POINTERS SCAN"
S ^XTMP("EASBADPTRS",0,"START")=$H,^XTMP("EASBADPTRS",0,"DUZ")=DUZ
S EAIEN=0
F S EAIEN=$O(^EAS(713.2,"AC",0,EAIEN)) Q:'EAIEN D
. I $$GET1^DIQ(713.2,EAIEN,2)']"" S ^XTMP("EASBADPTRS",EAIEN)=""
S ^XTMP("EASBADPTRS",0,"SCAN COMPLETE")=$H
Q
;
CLNUP ; Disable letters in MT Letter Status file with suspicious pointers
; Do not delete, but flag as "bad"
N EAIEN,EAFDA,ERR,DIE,DA,DR
;
S EAIEN=0
F S EAIEN=$O(^XTMP("EASBADPTRS",EAIEN)) Q:'EAIEN D
. S DIE="^EAS(713.2,",DA=EAIEN
. S DR="4///YES;5///TODAY;6////.5;7///LETTER DISABLED, BAD POINTERS?;9///NO;12///NO;18///NO"
. D ^DIE K DIE,DR,DA
;
S ^XTMP("EASBADPTRS",0,"CLEANUP COMPLETE")=$H
Q
;
ALERT ; Send an alert to user that the scan has completed.
K XQA,XQAMSG,XQAOPT,XQAROU,XQAID,XQDATA,XQAFLAG
;
S XQA(DUZ)="",XQAID="EAS",XQAROU="REPORT^EAS155P1"
S XQAMSG="EAS MT LTRs Bad Pointers Scan Complete, Print Report"
D SETUP^XQALERT
Q
;
REPORT ; Print Bad Pointers Report setup
K ZTSAVE S ZTSAVE("DUZ")=""
D EN^XUTMDEVQ("P^EAS155P1","Print EAS Bad Pointers Report",.ZTSAVE)
Q
;
P ; Print report
N LINE,EAIEN,PAGE,EAX,DFN
;
S (PAGE,EAIEN)=0
D HDR
F S EAIEN=$O(^XTMP("EASBADPTRS",EAIEN)) Q:'EAIEN D Q:$G(EASABRT)
. S LINE=""
. S LINE=$$SETSTR^VALM1(EAIEN,"",20,15)
. S EAX=$$GET1^DIQ(713.2,EAIEN,2,"I")
. S LINE=$$SETSTR^VALM1(EAX,LINE,40,15)
. S DFN=$$GET1^DIQ(713.1,EAX,.01,"I")
. S LINE=$$SETSTR^VALM1(DFN,LINE,60,15)
. W !,LINE
. I $Y+5>IOSL D Q:$G(EASABRT)
. . I $E(IOST,1,2)="C-" D Q:$G(EASABRT)
. . . S DIR(0)="E" D ^DIR K DIR
. . . I 'Y S EASABRT=1 Q
. . D HDR
Q
;
HDR ; PRINT REPORT HEADER
N LINE,DDASH,TEXT,TEXT1
;
S PAGE=PAGE+1
W:$E(IOST,1,2)="C-" @IOF
W "Results of Possible Bad Pointers Report for EAS MT Letters"
S TEXT="Date Scan Run: "_$$HTE^XLFDT(^XTMP("EASBADPTRS",0,"END"))
S TEXT1="Run by: "_$$GET1^DIQ(200,^XTMP("EASBADPTRS",0,"DUZ"),.01)
S SPACE=(IOM-($L(TEXT)+$L(TEXT1)))
S $P(LINE," ",SPACE-2)=""
W !,TEXT,LINE,TEXT1
;
S TEXT="Print Date: "_$$FMTE^XLFDT($$NOW^XLFDT)
S TEXT1="Page: "_PAGE
S SPACE=(IOM-($L(TEXT)+$L(TEXT1)))
S $P(LINE," ",SPACE-2)=""
W !,TEXT,LINE,TEXT1,!
;
S $P(DDASH,"=",IOM-10)=""
S LINE=$$SETSTR^VALM1("File IEN's","",5,12)
S LINE=$$SETSTR^VALM1("713.2",LINE,20,5)
S LINE=$$SETSTR^VALM1("713.1",LINE,40,5)
S LINE=$$SETSTR^VALM1("DFN",LINE,60,5)
W !,LINE
W !?5,DDASH
Q
;
CHKPREV() ; Check for a previous scan in XTMP
N RSLT,EASDUZ
;
S RSLT=1
I $D(^XTMP("EASBADPTRS")) D
. I '$D(^XTMP("EASBADPTRS",0,"END")) D
. . W !?3,$CHAR(7),"The EAS MT LTRs Bad Pointer scan is currently running."
. . S EASDUZ=$G(^XTMP("EASBADPTRS",0,"DUZ"))
. . I EASDUZ>0 W !?3,"started by ",$$GET1^DIQ(200,EASDUZ,.01)
. . I $D(^XTMP("EASBADPTRS",0,"START")) W " on ",$$HTE^XLFDT(^XTMP("EASBADPTRS",0,"START"))
. . S RSLT=0
. E D
. . W !?3,"Data from a previous scan exists. "
. . I $D(^XTMP("EASBADPTRS",0,"END")) W "Last Run: ",$$HTE^XLFDT(^XTMP("EASBADPTRS",0,"END"))
. . W !?3,"Answering ""YES"" will cause this data to be erased and a new"
. . W !?3,"scan started!",!
Q $G(RSLT)
;
TEXT ;
;;Running this routine will scan the EAS MT PATIENT STATUS File (#713.1)
;;and the EAS MT LETTER STATUS File (#713.2) for any bad pointers
;;linking to the PATIENT File (#2). This routine WILL NOT clean up
;;these pointers, but will flag the appropriate MT Letter entry as
;;'MT RETURNED' and enter a comment of 'Bad Pointer'. Your local
;;IRM may take additional cleanup actions.
;;
;;Data from this scan will be retained in the ^XTMP("EASBADPTRS")
;;global for 30 days. You may run REPORT^EAS155P1 at a programmer
;;prompt to re-print a formatted report. You will be alerted when the
;;scan is complete.
;;$$END
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HEAS155P1 5512 printed Nov 22, 2024@17:03:37 Page 2
EAS155P1 ;;ALB/SCK - MT LETTERS BAD POINTERS CLEAN UP ;07/22/2004
+1 ;;1.0;ENROLLMENT APPLICATION SYSTEM;**55**;MAR 15,2001
+2 ;
+3 ; This routine was initally run as the post-install for patch EAS*1*55
+4 ; Running this routine from programmer mode will initiate another
+5 ; reporting cycle. You should not run this routine unless advised
+6 ; by customer support.
+7 QUIT
+8 ;
EN ; Entry point from programmer mode
+1 NEW MSG,XCNT,DIR,X,Y,DIRUT
+2 ;
+3 FOR XCNT=1:1
SET LINE=$PIECE($TEXT(TEXT+XCNT),";;",2)
if LINE="$$END"
QUIT
SET MSG(XCNT)=LINE
+4 WRITE @IOF
+5 SET XCNT=0
FOR
SET XCNT=$ORDER(MSG(XCNT))
if 'XCNT
QUIT
WRITE !?3,MSG(XCNT)
+6 WRITE !
+7 IF '$$CHKPREV
QUIT
+8 ;
+9 SET DIR(0)="Y"
SET DIR("B")="YES"
SET DIR("A")="Continue with scan"
+10 SET DIR("?")="Press ENTER to continue, enter ""NO"" to exit."
+11 DO ^DIR
KILL DIR
+12 IF Y
DO QUE
QUIT
+13 WRITE !?3,"Exiting scan..."
+14 QUIT
+15 ;
QUE ;
+1 KILL ZTRTN,ZTDESC,ZTSAVE
+2 SET ZTRTN="BLD^EAS155P1"
+3 SET ZTDESC="EAS MT LTR BAD PTR SCAN"
+4 SET ZTSAVE("DUZ")=""
+5 SET ZTIO=""
+6 DO ^%ZTLOAD
+7 IF $DATA(ZTSK)[0
Begin DoDot:1
+8 if '$GET(EASQ)
WRITE !!?3,"Scan canceled"
End DoDot:1
+9 IF '$TEST
Begin DoDot:1
+10 IF $GET(EASQ)
DO BMES^XPDUTL("Scan Queued: "_ZTSK)
+11 IF '$TEST
WRITE !!?3,"Scan Queued: "_ZTSK
End DoDot:1
+12 QUIT
+13 ;
BLD ; Entry point scan and cleanup. Do not call directly, call from the EN entry point.
+1 DO SCAN
DO CLNUP
DO ALERT
+2 SET ^XTMP("EASBADPTRS",0,"END")=$HOROLOG
+3 QUIT
+4 ;
POST ; Post Install entry point. This entry point is intended to be called from the KIDS build.
+1 NEW MSG,XCNT,EASQ
+2 ;
+3 FOR XCNT=1:1
SET LINE=$PIECE($TEXT(TEXT+XCNT),";;",2)
if LINE="$$END"
QUIT
Begin DoDot:1
+4 SET MSG(XCNT)=LINE
End DoDot:1
+5 DO MES^XPDUTL(.MSG)
+6 SET EASQ=1
DO QUE
+7 QUIT
+8 ;
SCAN ; Begin scanning for any bad pointers in the MT Letter Files
+1 NEW EAIEN
+2 ;
+3 KILL ^XTMP("EASBADPTRS")
+4 SET ^XTMP("EASBADPTRS",0)=$$FMADD^XLFDT($$DT^XLFDT,30)_U_$$DT^XLFDT_U_"EAS MT LETTERS BAD POINTERS SCAN"
+5 SET ^XTMP("EASBADPTRS",0,"START")=$HOROLOG
SET ^XTMP("EASBADPTRS",0,"DUZ")=DUZ
+6 SET EAIEN=0
+7 FOR
SET EAIEN=$ORDER(^EAS(713.2,"AC",0,EAIEN))
if 'EAIEN
QUIT
Begin DoDot:1
+8 IF $$GET1^DIQ(713.2,EAIEN,2)']""
SET ^XTMP("EASBADPTRS",EAIEN)=""
End DoDot:1
+9 SET ^XTMP("EASBADPTRS",0,"SCAN COMPLETE")=$HOROLOG
+10 QUIT
+11 ;
CLNUP ; Disable letters in MT Letter Status file with suspicious pointers
+1 ; Do not delete, but flag as "bad"
+2 NEW EAIEN,EAFDA,ERR,DIE,DA,DR
+3 ;
+4 SET EAIEN=0
+5 FOR
SET EAIEN=$ORDER(^XTMP("EASBADPTRS",EAIEN))
if 'EAIEN
QUIT
Begin DoDot:1
+6 SET DIE="^EAS(713.2,"
SET DA=EAIEN
+7 SET DR="4///YES;5///TODAY;6////.5;7///LETTER DISABLED, BAD POINTERS?;9///NO;12///NO;18///NO"
+8 DO ^DIE
KILL DIE,DR,DA
End DoDot:1
+9 ;
+10 SET ^XTMP("EASBADPTRS",0,"CLEANUP COMPLETE")=$HOROLOG
+11 QUIT
+12 ;
ALERT ; Send an alert to user that the scan has completed.
+1 KILL XQA,XQAMSG,XQAOPT,XQAROU,XQAID,XQDATA,XQAFLAG
+2 ;
+3 SET XQA(DUZ)=""
SET XQAID="EAS"
SET XQAROU="REPORT^EAS155P1"
+4 SET XQAMSG="EAS MT LTRs Bad Pointers Scan Complete, Print Report"
+5 DO SETUP^XQALERT
+6 QUIT
+7 ;
REPORT ; Print Bad Pointers Report setup
+1 KILL ZTSAVE
SET ZTSAVE("DUZ")=""
+2 DO EN^XUTMDEVQ("P^EAS155P1","Print EAS Bad Pointers Report",.ZTSAVE)
+3 QUIT
+4 ;
P ; Print report
+1 NEW LINE,EAIEN,PAGE,EAX,DFN
+2 ;
+3 SET (PAGE,EAIEN)=0
+4 DO HDR
+5 FOR
SET EAIEN=$ORDER(^XTMP("EASBADPTRS",EAIEN))
if 'EAIEN
QUIT
Begin DoDot:1
+6 SET LINE=""
+7 SET LINE=$$SETSTR^VALM1(EAIEN,"",20,15)
+8 SET EAX=$$GET1^DIQ(713.2,EAIEN,2,"I")
+9 SET LINE=$$SETSTR^VALM1(EAX,LINE,40,15)
+10 SET DFN=$$GET1^DIQ(713.1,EAX,.01,"I")
+11 SET LINE=$$SETSTR^VALM1(DFN,LINE,60,15)
+12 WRITE !,LINE
+13 IF $Y+5>IOSL
Begin DoDot:2
+14 IF $EXTRACT(IOST,1,2)="C-"
Begin DoDot:3
+15 SET DIR(0)="E"
DO ^DIR
KILL DIR
+16 IF 'Y
SET EASABRT=1
QUIT
End DoDot:3
if $GET(EASABRT)
QUIT
+17 DO HDR
End DoDot:2
if $GET(EASABRT)
QUIT
End DoDot:1
if $GET(EASABRT)
QUIT
+18 QUIT
+19 ;
HDR ; PRINT REPORT HEADER
+1 NEW LINE,DDASH,TEXT,TEXT1
+2 ;
+3 SET PAGE=PAGE+1
+4 if $EXTRACT(IOST,1,2)="C-"
WRITE @IOF
+5 WRITE "Results of Possible Bad Pointers Report for EAS MT Letters"
+6 SET TEXT="Date Scan Run: "_$$HTE^XLFDT(^XTMP("EASBADPTRS",0,"END"))
+7 SET TEXT1="Run by: "_$$GET1^DIQ(200,^XTMP("EASBADPTRS",0,"DUZ"),.01)
+8 SET SPACE=(IOM-($LENGTH(TEXT)+$LENGTH(TEXT1)))
+9 SET $PIECE(LINE," ",SPACE-2)=""
+10 WRITE !,TEXT,LINE,TEXT1
+11 ;
+12 SET TEXT="Print Date: "_$$FMTE^XLFDT($$NOW^XLFDT)
+13 SET TEXT1="Page: "_PAGE
+14 SET SPACE=(IOM-($LENGTH(TEXT)+$LENGTH(TEXT1)))
+15 SET $PIECE(LINE," ",SPACE-2)=""
+16 WRITE !,TEXT,LINE,TEXT1,!
+17 ;
+18 SET $PIECE(DDASH,"=",IOM-10)=""
+19 SET LINE=$$SETSTR^VALM1("File IEN's","",5,12)
+20 SET LINE=$$SETSTR^VALM1("713.2",LINE,20,5)
+21 SET LINE=$$SETSTR^VALM1("713.1",LINE,40,5)
+22 SET LINE=$$SETSTR^VALM1("DFN",LINE,60,5)
+23 WRITE !,LINE
+24 WRITE !?5,DDASH
+25 QUIT
+26 ;
CHKPREV() ; Check for a previous scan in XTMP
+1 NEW RSLT,EASDUZ
+2 ;
+3 SET RSLT=1
+4 IF $DATA(^XTMP("EASBADPTRS"))
Begin DoDot:1
+5 IF '$DATA(^XTMP("EASBADPTRS",0,"END"))
Begin DoDot:2
+6 WRITE !?3,$CHAR(7),"The EAS MT LTRs Bad Pointer scan is currently running."
+7 SET EASDUZ=$GET(^XTMP("EASBADPTRS",0,"DUZ"))
+8 IF EASDUZ>0
WRITE !?3,"started by ",$$GET1^DIQ(200,EASDUZ,.01)
+9 IF $DATA(^XTMP("EASBADPTRS",0,"START"))
WRITE " on ",$$HTE^XLFDT(^XTMP("EASBADPTRS",0,"START"))
+10 SET RSLT=0
End DoDot:2
+11 IF '$TEST
Begin DoDot:2
+12 WRITE !?3,"Data from a previous scan exists. "
+13 IF $DATA(^XTMP("EASBADPTRS",0,"END"))
WRITE "Last Run: ",$$HTE^XLFDT(^XTMP("EASBADPTRS",0,"END"))
+14 WRITE !?3,"Answering ""YES"" will cause this data to be erased and a new"
+15 WRITE !?3,"scan started!",!
End DoDot:2
End DoDot:1
+16 QUIT $GET(RSLT)
+17 ;
TEXT ;
+1 ;;Running this routine will scan the EAS MT PATIENT STATUS File (#713.1)
+2 ;;and the EAS MT LETTER STATUS File (#713.2) for any bad pointers
+3 ;;linking to the PATIENT File (#2). This routine WILL NOT clean up
+4 ;;these pointers, but will flag the appropriate MT Letter entry as
+5 ;;'MT RETURNED' and enter a comment of 'Bad Pointer'. Your local
+6 ;;IRM may take additional cleanup actions.
+7 ;;
+8 ;;Data from this scan will be retained in the ^XTMP("EASBADPTRS")
+9 ;;global for 30 days. You may run REPORT^EAS155P1 at a programmer
+10 ;;prompt to re-print a formatted report. You will be alerted when the
+11 ;;scan is complete.
+12 ;;$$END
+13 QUIT