DVBAUDOAS ;ALB/CP - Summarize Audit Records ; 5/30/18 9:40am
;;2.7;AMIE;**256**;;Build 19
; Per VHA Directive 6402 this routine should not be modified
; $$FIND1^DIC ; # 2051
; YN^DICN ; #10009
; FILE^DIE ; # 1282
; $$GET1^DIQ ; # 2056
; $$FMADD^XLFDT ; #10103
; $$NOW^XLFDT ; #10103
; $$GET^XPAR ; # 2263
; EN^XPAR ; # 2263
;
;
Q ; Quit documentation
;
AUTOTASK ; Scheduled taskMan entry point
;
N DVBIENEVENT,DVBMAXHIST,DVBQUIT
; ZEXCEPT: DVBCNT ; Output to PACK entry point, no. of recs. summarized
; ZEXCEPT: DVBPACK ; Set to 1 in PACK, indicates manual summarization
;
S DVBPACK=$G(DVBPACK,0) ; Set to 1 when manually summarized (in PACK)
I DVBPACK=0 N DVBCNT
;
S DVBCNT=0 ; Number of AMIE OPTION AUDIT EVENT records processed
S DVBQUIT=0 ; Initialize quit flag to NO
;
S DVBMAXHIST=$$GET^XPAR("PKG.DVBAB OPTION AUDIT","DVBAB MAX OCCURRENCES HISTORY",)
I 'DVBMAXHIST D ; If no PARAMETERS entry found, then set value to 100
. D EN^XPAR("PKG","DVBAB MAX OCCURRENCES HISTORY",,100)
;
S DVBIENEVENT=0 ; AMIE OPTION AUDIT EVENT record IEN
F S DVBIENEVENT=$O(^DVB(396.999,DVBIENEVENT)) Q:'DVBIENEVENT!DVBQUIT D S DVBQUIT=0 ;
. N DVBEVENT
. ; ZEXCEPT: IOST
. D EVENT^DVBAUDDIQ(DVBIENEVENT) Q:DVBQUIT ; Get EVENT file data fields
. Q:DVBEVENT("PURGFLG")="YES" ;........... Bypass, already summarized
. ;
. I DVBEVENT("OPTNAME")=""!(DVBEVENT("USERNAME")="") D Q ;
. . D SETPFLAG^DVBAUDDIE(DVBIENEVENT) Q ; Set E-PURGE FLAG? = 'YES'
. ;
. Q:$$TASKED ; Quit if the tasked event is still running
. ;
. D SUMOPT^DVBAUDDIE(.DVBEVENT,DVBMAXHIST)
. Q:DVBQUIT ;................. Database server error experienced
. ;
. D SUMUSER^DVBAUDDIE(.DVBEVENT) ; Edit AMIE AUDIT SUMMARY BY USER
. Q:DVBQUIT ;................. Database server error experienced
. ;
. D SETPFLAG^DVBAUDDIE(DVBIENEVENT) ; Set the E-PURGE FLAG? = 'YES'
. Q:DVBQUIT ;................. Database server error experienced
. S DVBCNT=DVBCNT+1
;
Q:DVBQUIT
;
D PURGEVNT ; Purge AMIE OPTION AUDIT EVENT records w/PURGE FLAG="Y"
;
N DVBIEN19
S DVBIEN19=0
F S DVBIEN19=$O(^DIC(19,DVBIEN19)) Q:'DVBIEN19 D ;
. Q:'$D(^DIC(19,DVBIEN19,0))
. N DIERR,DVBOPT,DVBERRMSG
. Q:$$GET1^DIQ(19,DVBIEN19,20)'["AUDIT^DVBAUDOA" ; Not audited
. D EXITACT(DVBIEN19) ; "**1** ; New subroutine for patch #1
. Q:$D(^DVB(396.9991,"B",DVBIEN19,DVBIEN19)) ; Record already exists, not needed
. D SUMSTUB^DVBAUDDIE(DVBIEN19) ; Create a SUMMARY stub rec.
Q:DVBQUIT
;
D PURGEOPT ; Purge AMIE AUDIT SUMMARY BY OPTION records w/OPTION=""
;
D PURGEUSR ; Purge AMIE AUDIT SUMMARY BY USER records w/USER=""
;
K DVBPACK ; Manual summarization flag
;
Q ; Quit AUTOTASK
;
EXITACT(DVBIEN19) ; Update the EXIT ACTION of an audited OPTION that is an
;
N DVBEXACTION,DVBIENOSF,DVBOPTSCH,DVBOPTNAME
; ZEXCEPT: DVBQUIT
;
S DVBQUIT=0 ; Indicates a successful database update
S DVBOPTNAME=$$GET1^DIQ(19,+DVBIEN19,.01) Q:DVBOPTNAME="" ; Quit if no NAME
S DVBIENOSF=$$FIND1^DIC(19.2,"","BO",DVBOPTNAME) Q:'DVBIENOSF ;Quit if no IEN
S DVBEXACTION("BEF")=$$GET1^DIQ(19,DVBIEN19,15)
Q:DVBEXACTION("BEF")["PTIME^DVBAUDOA" ; PTIME already exists, quit
;
D OPTSCH^DVBAUDDIQ(DVBIENOSF) ; Place #19.2 data in DVBOPTSCH(array)
Q:'$$OPTSCHOK^DVBAUDU1($T(+0),.DVBOPTSCH) ; Option is screened
;
S DVBEXACTION("AFT")="D PTIME^DVBAUDOA" I DVBEXACTION("BEF")'="" D ;
. S DVBEXACTION("AFT")="D PTIME^DVBAUDOA "_DVBEXACTION("BEF")
;
N DIERR,DVBERRMSG,DVBFDA,DVBFILE,DVBIENS
N %,DIC ; Variables left behind during testing
N DG,DICR,DIW ; Covers editing of audited fields
;
S DVBIENS=DVBIEN19_",",DVBFILE=19
S DVBFDA(DVBFILE,DVBIENS,15)=DVBEXACTION("AFT") ; Option EXIT ACTION
;
D FILE^DIE("E","DVBFDA","DVBERRMSG") ; ICR #1282
D DIERR^DVBAUDDILG1(60,5,"DVBERRMSG","ENTRYACT^"_$T(+0)) Q:DVBQUIT
;
Q ; Quit EXITACT
;
PACK ; Summarize individual audit EVENT records from file #396.999
;
N DVBCNT,DVBBEG,DVBOPTION,DVBPACK,DVBQUIT
; ZEXCEPT: IOF,IOST
;
S DVBOPTION="Summarize Audit Records"
W @IOF,!?1,"*** ",DVBOPTION," ***",! S DVBQUIT=0
S DVBPACK=1 ; Indicates summarization is performed manually
;
D PACKMSG ; Display message on what is about to happen
D PACKOK G:DVBQUIT PACKX ; Prompt: Ok to continue?
;
S DVBBEG=$$NOW^XLFDT()
S DVBCNT=0 ; Number of AMIE OPTION AUDIT EVENT records processed
;
D AUTOTASK
;
I IOST["C-" D ;
. W !!,"Process completed...",!
. I DVBCNT D ;
. . W ?1,DVBCNT," Audit DETAIL Record",$S(DVBCNT>1:"s",1:"")
. . W " Summarized!"
. D PROCTIME^DVBAUDPRT1(DVBBEG) ; Display proceccing time
. D CONTINUE^DVBAUDPRT1 ;....... Press <Enter> to continue
;
PACKX ; Exit PACK (for GO TO statement above)
Q ; Quit PACK
;
PACKMSG ; Display a message concerning the summary process to the user.
; ZEXCEPT: IOF,DVBOPTION
;
W !,"This option will loop thru the AMIE OPTION AUDIT EVENT file"
W !,"(#396.999). Each audited event record will be summarized into"
W !,"two separate files:"
W !
W !," 1. AMIE AUDIT SUMMARY BY OPTION file #396.9991, and"
W !," 2. AMIE AUDIT SUMMARY BY USER file #396.9992"
W !
W !,"After all audited event records are summarized, the summary"
W !,"information will be reflected in the various output reports"
W !,"associated with the package. Any AMIE OPTION AUDIT EVENT"
W !,"record which is summarized will automatically be purged."
W !
W !," Note: As new audit events are collected throughout a"
W !," workday, these events will NOT be reflected in the"
W !," output reports until after the next audit"
W !," summarization has completed."
;
D CONTINUE^DVBAUDPRT1(2,"R") W @IOF,!?1,"*** ",DVBOPTION," ***"
;
W !
W !,"Running this option is the best way to ensure that all the"
W !,"latest audit events are included as part of the output reports."
W !
W !,"This package also includes a 'Summarize Audit Records (Auto"
W !,"Tasked)' option, designed to run in the background as a scheduled"
W !,"task on a regularly recurring basis. Please refer to the package"
W !,"documentation for an example of how this might be implemented at"
W !,"your site."
W !
W !,"Caution: If you plan to audit options which are regularly"
W !," scheduled tasks, it is recommended that you avoid"
W !," setting up audits for scheduled tasks that run"
W !," multiple times within a single work day. For"
W !," example, if a regularly scheduled option has a"
W !," 'RESCHEDULING FREQUENCY: 120S' (every two minutes"
W !," (or 120 seconds)), do not audit this task to avoid"
W !," too much data collection in the AMIE AUDIT OPTION"
W !," EVENT file (#396.999)."
W !
D CONTINUE^DVBAUDPRT1(2,"R")
W @IOF,!?1,"*** ",DVBOPTION," ***",!
;
Q ; Quit PACKMSG
;
PACKOK ; Prompt user with 'OK to continue? NO// '
;
N @($$DICN^DVBAUDNEW1())
; ZEXCEPT: %,IOF,IOM,DVBOPTION,DVBQUIT
PACKOK1 ; Return here after user enters a question mark
W !
W " Ok to continue"
S %=2 D YN^DICN ; Set default response to NO and prompt user
;
; Output of variable % from YN^DICN:
; %.......-1 User entered ^
; 0 User entered ?
; 1 User entered YES
; 2 User entered NO
;
; User entered a '?'
I %=0 D G PACKOK1
. D CENTER^DVBAUDPRT1("You must respond by entering YES or NO",2,IOM,1)
. D CONTINUE^DVBAUDPRT1(2,"R") ; Press <Enter> to continue
. W @IOF,!?1,"*** ",DVBOPTION," ***",! S DVBQUIT=0
;
; User entered an '^' or 'NO' response, set quit flag & quit
I %=-1!(%=2) S DVBQUIT=1 Q
;
; User entered a 'YES' response
S DVBQUIT=0 ; Response was YES, do not quit.
;
Q ; Quit PACKOK & PACKOK1
;
PURGEVNT ; 3. Purge AMIE OPTION AUDIT EVENT recs w/E-PURGE FLAG?="YES" could not be determined.
N DVBIENEVENT
;
S DVBIENEVENT=0
F S DVBIENEVENT=$O(^DVB(396.999,"APURGE",1,DVBIENEVENT)) Q:'DVBIENEVENT D ;
. D DELEVENT^DVBAUDDIK(DVBIENEVENT) ; Delete the DETAIL record
;
Q ; Quit PURGEVNT
;
PURGEOPT ;
;
N DVBIEN19
;
;
S DVBIEN19="" ; DVBIEN19 = IEN pointer to the OPTION file #19
F S DVBIEN19=$O(^DVB(396.9991,"B",DVBIEN19)) Q:DVBIEN19="" D ;
. N DIERR,DVBOPTNAME,DVBOPTTYPEI,DVBERRMSG
. ;
. S DVBOPTNAME=$$GET1^DIQ(19,+DVBIEN19,.01,"E") ; Option NAME
. S DVBOPTTYPEI=$$GET1^DIQ(19,+DVBIEN19,4,"I") ;Option TYPE internal format
. ;
. I DVBOPTTYPEI]"","AEIMPRXSC"[DVBOPTTYPEI,DVBOPTNAME'="" Q ; Do not purge
. ;
. D USEROPT^DVBAUDDIK(DVBIEN19) ; AMIE AUDIT SUMMARY BY USER
. D OPTSUM^DVBAUDDIK(DVBIEN19) ;. AMIE AUDIT SUMMARY BY OPTION
;
Q ; Quit PURGEOPT
;
PURGEUSR ;
;
N DVBIEN200
;
S DVBIEN200=0
F S DVBIEN200=$O(^DVB(396.9992,DVBIEN200)) Q:'DVBIEN200 D ;
. N DIERR,DVBERRMSG,DVBUSERNAME
. S DVBUSERNAME=$$GET1^DIQ(200,DVBIEN200,.01,"E")
. Q:DVBUSERNAME'="" ;........... Quit, USER NAME identified
. D USERSUM^DVBAUDDIK(DVBIEN200) ; Delete AMIE AUDIT SUMMARY BY USER rec
;
Q ; Quit PURGEUSR
;
TASKED() ; Extrinsic function, Output VALUE (0 or 1)
N DVBMAXLIMIT
; ZEXCEPT: DVBEVENT
;
I DVBEVENT("TASKEDI")'=1!DVBEVENT("DTENDEDI") Q 0
;
S DVBMAXLIMIT=$$FMADD^XLFDT($$NOW^XLFDT(),-2) ; 2 days ago (48 hours)
;
; IF the tasked EVENT has been running for 2 days, allow it to summarize
I DVBEVENT("TASKEDI")=1,DVBEVENT("DTEVENTI")<DVBMAXLIMIT Q 0
;
Q 1 ; Quit TASKED extrinsic function
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDVBAUDOAS 9650 printed Sep 17, 2026@20:27:26 Page 2
DVBAUDOAS ;ALB/CP - Summarize Audit Records ; 5/30/18 9:40am
+1 ;;2.7;AMIE;**256**;;Build 19
+2 ; Per VHA Directive 6402 this routine should not be modified
+3 ; $$FIND1^DIC ; # 2051
+4 ; YN^DICN ; #10009
+5 ; FILE^DIE ; # 1282
+6 ; $$GET1^DIQ ; # 2056
+7 ; $$FMADD^XLFDT ; #10103
+8 ; $$NOW^XLFDT ; #10103
+9 ; $$GET^XPAR ; # 2263
+10 ; EN^XPAR ; # 2263
+11 ;
+12 ;
+13 ; Quit documentation
QUIT
+14 ;
AUTOTASK ; Scheduled taskMan entry point
+1 ;
+2 NEW DVBIENEVENT,DVBMAXHIST,DVBQUIT
+3 ; ZEXCEPT: DVBCNT ; Output to PACK entry point, no. of recs. summarized
+4 ; ZEXCEPT: DVBPACK ; Set to 1 in PACK, indicates manual summarization
+5 ;
+6 ; Set to 1 when manually summarized (in PACK)
SET DVBPACK=$GET(DVBPACK,0)
+7 IF DVBPACK=0
NEW DVBCNT
+8 ;
+9 ; Number of AMIE OPTION AUDIT EVENT records processed
SET DVBCNT=0
+10 ; Initialize quit flag to NO
SET DVBQUIT=0
+11 ;
+12 SET DVBMAXHIST=$$GET^XPAR("PKG.DVBAB OPTION AUDIT","DVBAB MAX OCCURRENCES HISTORY",)
+13 ; If no PARAMETERS entry found, then set value to 100
IF 'DVBMAXHIST
Begin DoDot:1
+14 DO EN^XPAR("PKG","DVBAB MAX OCCURRENCES HISTORY",,100)
End DoDot:1
+15 ;
+16 ; AMIE OPTION AUDIT EVENT record IEN
SET DVBIENEVENT=0
+17 ;
FOR
SET DVBIENEVENT=$ORDER(^DVB(396.999,DVBIENEVENT))
if 'DVBIENEVENT!DVBQUIT
QUIT
Begin DoDot:1
+18 NEW DVBEVENT
+19 ; ZEXCEPT: IOST
+20 ; Get EVENT file data fields
DO EVENT^DVBAUDDIQ(DVBIENEVENT)
if DVBQUIT
QUIT
+21 ;........... Bypass, already summarized
if DVBEVENT("PURGFLG")="YES"
QUIT
+22 ;
+23 ;
IF DVBEVENT("OPTNAME")=""!(DVBEVENT("USERNAME")="")
Begin DoDot:2
+24 ; Set E-PURGE FLAG? = 'YES'
DO SETPFLAG^DVBAUDDIE(DVBIENEVENT)
QUIT
End DoDot:2
QUIT
+25 ;
+26 ; Quit if the tasked event is still running
if $$TASKED
QUIT
+27 ;
+28 DO SUMOPT^DVBAUDDIE(.DVBEVENT,DVBMAXHIST)
+29 ;................. Database server error experienced
if DVBQUIT
QUIT
+30 ;
+31 ; Edit AMIE AUDIT SUMMARY BY USER
DO SUMUSER^DVBAUDDIE(.DVBEVENT)
+32 ;................. Database server error experienced
if DVBQUIT
QUIT
+33 ;
+34 ; Set the E-PURGE FLAG? = 'YES'
DO SETPFLAG^DVBAUDDIE(DVBIENEVENT)
+35 ;................. Database server error experienced
if DVBQUIT
QUIT
+36 SET DVBCNT=DVBCNT+1
End DoDot:1
SET DVBQUIT=0
+37 ;
+38 if DVBQUIT
QUIT
+39 ;
+40 ; Purge AMIE OPTION AUDIT EVENT records w/PURGE FLAG="Y"
DO PURGEVNT
+41 ;
+42 NEW DVBIEN19
+43 SET DVBIEN19=0
+44 ;
FOR
SET DVBIEN19=$ORDER(^DIC(19,DVBIEN19))
if 'DVBIEN19
QUIT
Begin DoDot:1
+45 if '$DATA(^DIC(19,DVBIEN19,0))
QUIT
+46 NEW DIERR,DVBOPT,DVBERRMSG
+47 ; Not audited
if $$GET1^DIQ(19,DVBIEN19,20)'["AUDIT^DVBAUDOA"
QUIT
+48 ; "**1** ; New subroutine for patch #1
DO EXITACT(DVBIEN19)
+49 ; Record already exists, not needed
if $DATA(^DVB(396.9991,"B",DVBIEN19,DVBIEN19))
QUIT
+50 ; Create a SUMMARY stub rec.
DO SUMSTUB^DVBAUDDIE(DVBIEN19)
End DoDot:1
+51 if DVBQUIT
QUIT
+52 ;
+53 ; Purge AMIE AUDIT SUMMARY BY OPTION records w/OPTION=""
DO PURGEOPT
+54 ;
+55 ; Purge AMIE AUDIT SUMMARY BY USER records w/USER=""
DO PURGEUSR
+56 ;
+57 ; Manual summarization flag
KILL DVBPACK
+58 ;
+59 ; Quit AUTOTASK
QUIT
+60 ;
EXITACT(DVBIEN19) ; Update the EXIT ACTION of an audited OPTION that is an
+1 ;
+2 NEW DVBEXACTION,DVBIENOSF,DVBOPTSCH,DVBOPTNAME
+3 ; ZEXCEPT: DVBQUIT
+4 ;
+5 ; Indicates a successful database update
SET DVBQUIT=0
+6 ; Quit if no NAME
SET DVBOPTNAME=$$GET1^DIQ(19,+DVBIEN19,.01)
if DVBOPTNAME=""
QUIT
+7 ;Quit if no IEN
SET DVBIENOSF=$$FIND1^DIC(19.2,"","BO",DVBOPTNAME)
if 'DVBIENOSF
QUIT
+8 SET DVBEXACTION("BEF")=$$GET1^DIQ(19,DVBIEN19,15)
+9 ; PTIME already exists, quit
if DVBEXACTION("BEF")["PTIME^DVBAUDOA"
QUIT
+10 ;
+11 ; Place #19.2 data in DVBOPTSCH(array)
DO OPTSCH^DVBAUDDIQ(DVBIENOSF)
+12 ; Option is screened
if '$$OPTSCHOK^DVBAUDU1($TEXT(+0),.DVBOPTSCH)
QUIT
+13 ;
+14 ;
SET DVBEXACTION("AFT")="D PTIME^DVBAUDOA"
IF DVBEXACTION("BEF")'=""
Begin DoDot:1
+15 SET DVBEXACTION("AFT")="D PTIME^DVBAUDOA "_DVBEXACTION("BEF")
End DoDot:1
+16 ;
+17 NEW DIERR,DVBERRMSG,DVBFDA,DVBFILE,DVBIENS
+18 ; Variables left behind during testing
NEW %,DIC
+19 ; Covers editing of audited fields
NEW DG,DICR,DIW
+20 ;
+21 SET DVBIENS=DVBIEN19_","
SET DVBFILE=19
+22 ; Option EXIT ACTION
SET DVBFDA(DVBFILE,DVBIENS,15)=DVBEXACTION("AFT")
+23 ;
+24 ; ICR #1282
DO FILE^DIE("E","DVBFDA","DVBERRMSG")
+25 DO DIERR^DVBAUDDILG1(60,5,"DVBERRMSG","ENTRYACT^"_$TEXT(+0))
if DVBQUIT
QUIT
+26 ;
+27 ; Quit EXITACT
QUIT
+28 ;
PACK ; Summarize individual audit EVENT records from file #396.999
+1 ;
+2 NEW DVBCNT,DVBBEG,DVBOPTION,DVBPACK,DVBQUIT
+3 ; ZEXCEPT: IOF,IOST
+4 ;
+5 SET DVBOPTION="Summarize Audit Records"
+6 WRITE @IOF,!?1,"*** ",DVBOPTION," ***",!
SET DVBQUIT=0
+7 ; Indicates summarization is performed manually
SET DVBPACK=1
+8 ;
+9 ; Display message on what is about to happen
DO PACKMSG
+10 ; Prompt: Ok to continue?
DO PACKOK
if DVBQUIT
GOTO PACKX
+11 ;
+12 SET DVBBEG=$$NOW^XLFDT()
+13 ; Number of AMIE OPTION AUDIT EVENT records processed
SET DVBCNT=0
+14 ;
+15 DO AUTOTASK
+16 ;
+17 ;
IF IOST["C-"
Begin DoDot:1
+18 WRITE !!,"Process completed...",!
+19 ;
IF DVBCNT
Begin DoDot:2
+20 WRITE ?1,DVBCNT," Audit DETAIL Record",$SELECT(DVBCNT>1:"s",1:"")
+21 WRITE " Summarized!"
End DoDot:2
+22 ; Display proceccing time
DO PROCTIME^DVBAUDPRT1(DVBBEG)
+23 ;....... Press <Enter> to continue
DO CONTINUE^DVBAUDPRT1
End DoDot:1
+24 ;
PACKX ; Exit PACK (for GO TO statement above)
+1 ; Quit PACK
QUIT
+2 ;
PACKMSG ; Display a message concerning the summary process to the user.
+1 ; ZEXCEPT: IOF,DVBOPTION
+2 ;
+3 WRITE !,"This option will loop thru the AMIE OPTION AUDIT EVENT file"
+4 WRITE !,"(#396.999). Each audited event record will be summarized into"
+5 WRITE !,"two separate files:"
+6 WRITE !
+7 WRITE !," 1. AMIE AUDIT SUMMARY BY OPTION file #396.9991, and"
+8 WRITE !," 2. AMIE AUDIT SUMMARY BY USER file #396.9992"
+9 WRITE !
+10 WRITE !,"After all audited event records are summarized, the summary"
+11 WRITE !,"information will be reflected in the various output reports"
+12 WRITE !,"associated with the package. Any AMIE OPTION AUDIT EVENT"
+13 WRITE !,"record which is summarized will automatically be purged."
+14 WRITE !
+15 WRITE !," Note: As new audit events are collected throughout a"
+16 WRITE !," workday, these events will NOT be reflected in the"
+17 WRITE !," output reports until after the next audit"
+18 WRITE !," summarization has completed."
+19 ;
+20 DO CONTINUE^DVBAUDPRT1(2,"R")
WRITE @IOF,!?1,"*** ",DVBOPTION," ***"
+21 ;
+22 WRITE !
+23 WRITE !,"Running this option is the best way to ensure that all the"
+24 WRITE !,"latest audit events are included as part of the output reports."
+25 WRITE !
+26 WRITE !,"This package also includes a 'Summarize Audit Records (Auto"
+27 WRITE !,"Tasked)' option, designed to run in the background as a scheduled"
+28 WRITE !,"task on a regularly recurring basis. Please refer to the package"
+29 WRITE !,"documentation for an example of how this might be implemented at"
+30 WRITE !,"your site."
+31 WRITE !
+32 WRITE !,"Caution: If you plan to audit options which are regularly"
+33 WRITE !," scheduled tasks, it is recommended that you avoid"
+34 WRITE !," setting up audits for scheduled tasks that run"
+35 WRITE !," multiple times within a single work day. For"
+36 WRITE !," example, if a regularly scheduled option has a"
+37 WRITE !," 'RESCHEDULING FREQUENCY: 120S' (every two minutes"
+38 WRITE !," (or 120 seconds)), do not audit this task to avoid"
+39 WRITE !," too much data collection in the AMIE AUDIT OPTION"
+40 WRITE !," EVENT file (#396.999)."
+41 WRITE !
+42 DO CONTINUE^DVBAUDPRT1(2,"R")
+43 WRITE @IOF,!?1,"*** ",DVBOPTION," ***",!
+44 ;
+45 ; Quit PACKMSG
QUIT
+46 ;
PACKOK ; Prompt user with 'OK to continue? NO// '
+1 ;
+2 NEW @($$DICN^DVBAUDNEW1())
+3 ; ZEXCEPT: %,IOF,IOM,DVBOPTION,DVBQUIT
PACKOK1 ; Return here after user enters a question mark
+1 WRITE !
+2 WRITE " Ok to continue"
+3 ; Set default response to NO and prompt user
SET %=2
DO YN^DICN
+4 ;
+5 ; Output of variable % from YN^DICN:
+6 ; %.......-1 User entered ^
+7 ; 0 User entered ?
+8 ; 1 User entered YES
+9 ; 2 User entered NO
+10 ;
+11 ; User entered a '?'
+12 IF %=0
Begin DoDot:1
+13 DO CENTER^DVBAUDPRT1("You must respond by entering YES or NO",2,IOM,1)
+14 ; Press <Enter> to continue
DO CONTINUE^DVBAUDPRT1(2,"R")
+15 WRITE @IOF,!?1,"*** ",DVBOPTION," ***",!
SET DVBQUIT=0
End DoDot:1
GOTO PACKOK1
+16 ;
+17 ; User entered an '^' or 'NO' response, set quit flag & quit
+18 IF %=-1!(%=2)
SET DVBQUIT=1
QUIT
+19 ;
+20 ; User entered a 'YES' response
+21 ; Response was YES, do not quit.
SET DVBQUIT=0
+22 ;
+23 ; Quit PACKOK & PACKOK1
QUIT
+24 ;
PURGEVNT ; 3. Purge AMIE OPTION AUDIT EVENT recs w/E-PURGE FLAG?="YES" could not be determined.
+1 NEW DVBIENEVENT
+2 ;
+3 SET DVBIENEVENT=0
+4 ;
FOR
SET DVBIENEVENT=$ORDER(^DVB(396.999,"APURGE",1,DVBIENEVENT))
if 'DVBIENEVENT
QUIT
Begin DoDot:1
+5 ; Delete the DETAIL record
DO DELEVENT^DVBAUDDIK(DVBIENEVENT)
End DoDot:1
+6 ;
+7 ; Quit PURGEVNT
QUIT
+8 ;
PURGEOPT ;
+1 ;
+2 NEW DVBIEN19
+3 ;
+4 ;
+5 ; DVBIEN19 = IEN pointer to the OPTION file #19
SET DVBIEN19=""
+6 ;
FOR
SET DVBIEN19=$ORDER(^DVB(396.9991,"B",DVBIEN19))
if DVBIEN19=""
QUIT
Begin DoDot:1
+7 NEW DIERR,DVBOPTNAME,DVBOPTTYPEI,DVBERRMSG
+8 ;
+9 ; Option NAME
SET DVBOPTNAME=$$GET1^DIQ(19,+DVBIEN19,.01,"E")
+10 ;Option TYPE internal format
SET DVBOPTTYPEI=$$GET1^DIQ(19,+DVBIEN19,4,"I")
+11 ;
+12 ; Do not purge
IF DVBOPTTYPEI]""
IF "AEIMPRXSC"[DVBOPTTYPEI
IF DVBOPTNAME'=""
QUIT
+13 ;
+14 ; AMIE AUDIT SUMMARY BY USER
DO USEROPT^DVBAUDDIK(DVBIEN19)
+15 ;. AMIE AUDIT SUMMARY BY OPTION
DO OPTSUM^DVBAUDDIK(DVBIEN19)
End DoDot:1
+16 ;
+17 ; Quit PURGEOPT
QUIT
+18 ;
PURGEUSR ;
+1 ;
+2 NEW DVBIEN200
+3 ;
+4 SET DVBIEN200=0
+5 ;
FOR
SET DVBIEN200=$ORDER(^DVB(396.9992,DVBIEN200))
if 'DVBIEN200
QUIT
Begin DoDot:1
+6 NEW DIERR,DVBERRMSG,DVBUSERNAME
+7 SET DVBUSERNAME=$$GET1^DIQ(200,DVBIEN200,.01,"E")
+8 ;........... Quit, USER NAME identified
if DVBUSERNAME'=""
QUIT
+9 ; Delete AMIE AUDIT SUMMARY BY USER rec
DO USERSUM^DVBAUDDIK(DVBIEN200)
End DoDot:1
+10 ;
+11 ; Quit PURGEUSR
QUIT
+12 ;
TASKED() ; Extrinsic function, Output VALUE (0 or 1)
+1 NEW DVBMAXLIMIT
+2 ; ZEXCEPT: DVBEVENT
+3 ;
+4 IF DVBEVENT("TASKEDI")'=1!DVBEVENT("DTENDEDI")
QUIT 0
+5 ;
+6 ; 2 days ago (48 hours)
SET DVBMAXLIMIT=$$FMADD^XLFDT($$NOW^XLFDT(),-2)
+7 ;
+8 ; IF the tasked EVENT has been running for 2 days, allow it to summarize
+9 IF DVBEVENT("TASKEDI")=1
IF DVBEVENT("DTEVENTI")<DVBMAXLIMIT
QUIT 0
+10 ;
+11 ; Quit TASKED extrinsic function
QUIT 1