Connecting Sarbanes to Oxley Faye Windhorst Landauer Inc

  • Slides: 36
Download presentation
Connecting Sarbanes to Oxley Faye Windhorst Landauer, Inc. 14 th NATURAL Conference October, 2006

Connecting Sarbanes to Oxley Faye Windhorst Landauer, Inc. 14 th NATURAL Conference October, 2006

Background 2006 1970 ADABAS VSAM

Background 2006 1970 ADABAS VSAM

Background 14: 02: 41 User FAYE Cmd Name --- ACCT*____ __ ACCTDTFX __ ACCTFIX

Background 14: 02: 41 User FAYE Cmd Name --- ACCT*____ __ ACCTDTFX __ ACCTFIX __ ACCTFXDT __ ACCTJKS __ ACCTMAST __ ACCTSEL 1 __ ACCTSEL 2 __ ACCTSEL 3 __ ACCTSERV __ ACCTTEST ***** NATURAL LIST COMMAND ***** 2006 -08 -02 - LIST Objects in a Library FIXLIB Type *_____ Program Program Program S/C *__ S/C S/C S/C SM Version User ID * *________ S 4. 1. 03 BENT R 3. 1. 04 TOMC S 4. 1. 03 FAYE R 2. 2. 08 JKIE S 2. 2. 08 FAYE S 3. 1. 04 FAYE S 2. 2. 08 FAYE S 2. 1. 07 BENT Date Time *_____ *____ 2005 -05 -19 09: 48: 56 2002 -10 -30 15: 20: 31 2005 -08 -17 12: 59: 26 1997 -12 -31 16: 02: 30 1998 -01 -29 16: 12 2002 -05 -21 14: 30: 53 2002 -05 -21 10: 32: 17 2002 -05 -24 07: 55: 13 1998 -01 -09 08: 37: 34 1992 -05 -14 11: 37: 23 10 Objects found Top of List. Command ===> Enter-PF 1 ---PF 2 ---PF 3 ---PF 4 ---PF 5 ---PF 6 ---PF 7 ---PF 8 ---PF 9 ---PF 10 --PF 11 --PF 12 --Help Print Exit Sort -- - + ++ > Canc

Background 07/30/06 14: 16 ***** Landauer, Inc. ***** - File Maintenance Menu 1 Code

Background 07/30/06 14: 16 ***** Landauer, Inc. ***** - File Maintenance Menu 1 Code ISMNTP 1 ISMNTM 1 System/Function/Explanation A B C D E F H I J K L Account Master (80) Account Master Control Record (80) Dosimeter (72) Dosimeter Component (73) Participant Master (81) Process Menu Report Master (99) N 144 Etching Tray (78) N 144 Cross Reference (79) Credit Dosimeter Return (45) Ship Date Table (101) Enter code: __ Enter-PF 1 ---PF 2 ---PF 3 ---PF 4 ---PF 5 ---PF 6 ---PF 7 ---PF 8 ---PF 9 ---PF 10 --PF 11 --PF 12 --help retrn main quit Nxt. Mn flip

Background

Background

Background

Background

Problem

Problem

The Solution Existing CON-STRUCT program ? ADABAS Audit table

The Solution Existing CON-STRUCT program ? ADABAS Audit table

The Solution 14: 33: 42 User FAYE ***** NATURAL LIST COMMAND ***** - List

The Solution 14: 33: 42 User FAYE ***** NATURAL LIST COMMAND ***** - List DDM ACCOUNT-MASTER-ALL - DDM DBID 0 DDM FNR 80 VSAM Name T L DB Name - - -- ----------------1 AA ACCT-NBR 1 AB ACCT-SER-CODE 1 AC REC-DEL-IND 1 AD TERR-CODE 1 AE STATE-CODE 1 AF ACCT-NAME 1 AG ACCT-LICENSEE-NAME 1 AH ACCT-LICENSEE-NBR 1 AI ACCT-REG-NBR 1 AJ ACCT-EXPOS-RPT-CPY 1 AK ACCT-EXPOS-RPT-DUP-DEST 1 AL ACCT-MREM-OVEXP-DEEP Top of List. F Leng - ---P 6. 0 A 3 A 1 A 23 A 16 A 15 A 7 A 2 A 1 A 5 2006 -08 -02 Library FIXLIB Default Sequence Page 1 S D Remark - - ------------Account number Account series code Record deleted indicator N Account sales territory N State code. N Account name N Account licensee number N Account registration number N Account exposure report copy N Account duplicate exposure report dest N Account over exposure MREM

The Solution Existing CON-STRUCT program PLOG SPATs

The Solution Existing CON-STRUCT program PLOG SPATs

The Solution Existing CON-STRUCT program READ For UPDATE Apply changes to update view UPDATE

The Solution Existing CON-STRUCT program READ For UPDATE Apply changes to update view UPDATE Capture Before Image Capture After Image

The Solution User FAYE DDM DBID 0 TL - 1 1 1 1 M

The Solution User FAYE DDM DBID 0 TL - 1 1 1 1 M 1 - List DDM AUDIT-LOG DDM FNR 139 VSAM Name DB Name -- ----------------AA AUDIT-FUNC AB AUDIT-ACTIV AC AUDIT-AUTH-CODE AD AUDIT-DATE AE AUDIT-PROG AF AUDIT-TIME AG AUDIT-USER AH AUDIT-VIEW-NAME AJ AUDIT-IMAG AK AUDIT-IMAG-TWO F Leng -- ---A 1 A 20 N 8. 0 A 32 N 7. 0 A 32 A 250 Library FIXLIB Default Sequence Page 1 S D Remark - - ------------F Action or function against data F Activity effecting change N N N Image of record being audited (30 Occur) Secondary image of record being audited (30 Occur)

The Solution Code Frame. . CUFMC 22 SIZE 40000 Description. . . . FILE

The Solution Code Frame. . CUFMC 22 SIZE 40000 Description. . . . FILE MAINTENANCE CODE - MISC. SUBROUTINES > FREE 88705 > + ABS X X-Y _ S 500 L 325 . . +. . 1. . +. . 2. . +. . 3. . +. . 4. . +. . 5. . +. . 6. . +. . 7. . T C IF UPDATE-VIEW. &PRIME-PREFIX&LOG-COUNTER NE " &PRIME-FILE. &PRIME-PREFIX&LOG-COUNTER THEN RESET #RECORD-DISPLAYED " " BACKOUT TRANSACTION " USE-MSG-NR 3 REINPUT *8010 ALARM /* Intervening change, please try again ELSE 3 REINPUT 'Intervening change, please try again' ALARM RETURN-TO-CONDITION END-IF " 2 " RETURN-TO-CONDITION 1 ASSIGN #UPDATE-PERFORMED = TRUE " * Landauer capturing before image AUDIT-FUNC : = #ACTION AUDIT-IMAG-TYPE : = 'BEFORE' PERFORM AUDIT-PURGE-MODIFY-RTN * PURGE-ACTION-SELECTED. . +. . 1. . +. . 2. . +. . 3. . +. . 4. . +. . 5. . +. . 6. . +. . 7. . T 2 "

The Solution ************************************ DEFINE SUBROUTINE AUDIT-PURGE-MODIFY-RTN ************************************ IF AUDIT-FUNC = 'M' THEN AUDIT-FUNC :

The Solution ************************************ DEFINE SUBROUTINE AUDIT-PURGE-MODIFY-RTN ************************************ IF AUDIT-FUNC = 'M' THEN AUDIT-FUNC : = 'C' END-IF IF AUDIT-FUNC = 'P' THEN AUDIT-FUNC : = 'D' END-IF IF AUDIT-IMAG-TYPE = 'BEFORE' THEN /* always do this on before images AUDIT-PROG : = *PROGRAM AUDIT-USER : = *USER AUDIT-DATE : = *DATN AUDIT-TIME : = *TIMN AUDIT-VIEW-NAME : = '&PRIME-FILE' AUDIT-Y : = AUDIT-LOOP-LIMIT - 1 /* must stop on last full element FOR AUDIT-X = 1 TO AUDIT-Y AUDIT-IMAG (AUDIT-X) : = CHUNK 1 (AUDIT-X) END-FOR /* (0200) AUDIT-IMAG (AUDIT-X) : = CHUNK 1 X END-IF

The Solution IF AUDIT-IMAG-TYPE = 'AFTER' THEN AUDIT-Y : = AUDIT-LOOP-LIMIT - 1 /*

The Solution IF AUDIT-IMAG-TYPE = 'AFTER' THEN AUDIT-Y : = AUDIT-LOOP-LIMIT - 1 /* always do this on after images /* must stop on last full element FOR AUDIT-X = 1 TO AUDIT-Y AUDIT-IMAG-TWO (AUDIT-X) : = CHUNK 1 (AUDIT-X) END-FOR AUDIT-IMAG-TWO (AUDIT-X) : = CHUNK 1 X END-IF IF AUDIT-IMAG-TYPE = 'AFTER' OR AUDIT-IMAG-TYPE = 'BEFORE' AND AUDIT-FUNC = 'D' /* write audit if after image /* or before image on a purge THEN AUDIT-ACTIV : = AUDIT-ACTIV-FRZ STORE AUDIT-LOG RESET AUDIT-LOG AUDIT-X AUDIT-Y END-IF END-SUBROUTINE /* audit-purge-modify-rtn

The Solution ************************************ DEFINE SUBROUTINE AUDIT-ADD-RTN ************************************ AUDIT-PROG : = *PROGRAM AUDIT-USER : =

The Solution ************************************ DEFINE SUBROUTINE AUDIT-ADD-RTN ************************************ AUDIT-PROG : = *PROGRAM AUDIT-USER : = *USER AUDIT-DATE : = *DATN AUDIT-TIME : = *TIMN AUDIT-FUNC : = 'A' AUDIT-VIEW-NAME : = '&PRIME-FILE' AUDIT-Y : = AUDIT-LOOP-LIMIT - 1 /* must stop on last full element FOR AUDIT-X = 1 TO AUDIT-Y AUDIT-IMAG-TWO (AUDIT-X) : = CHUNK (AUDIT-X) END-FOR AUDIT-IMAG-TWO (AUDIT-X) : = CHUNKX AUDIT-ACTIV : = AUDIT-ACTIV-FRZ STORE AUDIT-LOG RESET AUDIT-LOG AUDIT-X AUDIT-Y END-SUBROUTINE /* audit-add-rtn

The Solution * Primary file being maintained on the INPUT statement. 01 &PRIME-FILE VIEW

The Solution * Primary file being maintained on the INPUT statement. 01 &PRIME-FILE VIEW OF &PRIME-DDM PRIME 1 U NOT PRIME-FILE-IS-DB 2 OR NOT KEY-IS-A-SUPER 1 NEXT-ACTION-SELECTED OR ADD-ACTION-SELECTED 2 * Landauer Sarbanes-oxley audit changes capture data 01 REDEFINE &PRIME-FILE LDRAUDIT 1 U * View which gets held during updates. 01 UPDATE-VIEW OF &PRIME-DDM PRIME 2 U LOGGING-UPDATES 1 * Landauer Sarbanes-oxley audit changes capture data LDRAUDIT 2 * U " * View used to store audit trail logs. " 01 &LOG-FILE VIEW OF &LOG-DDM " Subprogram: CUFMGFIL Parameter: LOG N" SECONDARY-FILE-USED * * Secondary file view. 1 " "

The Solution CSMUSEX Jul 30 Natural Construct Maintain User Exit 1 of 1 User

The Solution CSMUSEX Jul 30 Natural Construct Maintain User Exit 1 of 1 User exit name. . LDRAUDIT 2 Code frame name. . . . CUFMDA 2 Conditional N User exit required. . . X Generate as subroutine. _ Sample subprogram. . . ____ GUI sample subprogram. . ____ Default user exit code. 01 REDEFINE UPDATE-VIEW________________________ 2 CHUNK 1 (A 250/1: 21) /* most of record - resize as needed____ 2 CHUNK 1 X (A 250) /* final segment - resize as needed_____ * Correct above values (field sizes only) to exactly match the_____ * update-view of your data. Use these sizes to adjust the audit______ * processor program when adding the routine for this view. ______ * Example: ACCOUNT-MASTER-ALL is 20 elements of A 250, plus A 228______ *. . . . ________________________________________________________________________ Enter-PF 1 ---PF 2 ---PF 3 ---PF 4 ---PF 5 ---PF 6 ---PF 7 ---PF 8 ---PF 9 ---PF 10 --PF 11 --PF 1 help retrn

The Solution • • • DEFINE EXIT LDRAUDIT 1 2 CHUNK (A 250/1: 5)

The Solution • • • DEFINE EXIT LDRAUDIT 1 2 CHUNK (A 250/1: 5) /* MOST OF RECORD - RESIZE AS NEEDED 2 CHUNKX (A 57) /* FINAL SEGMENT - RESIZE AS NEEDED 1 AUDIT-LOOP-LIMIT (P 5) INIT <6> /* SET TO MATCH CHUNK LIMIT+CHUNKX * Correct above values (field + array sizes) to exactly match the * prime-view of your data. Use these sizes to adjust the audit * processor program when adding the routine for thie view. * Example: ACCOUNT-SERVICES is 21 elements of A 187, plus A 3. * Be sure to set correct audit-loop-limit to match array size. * You may use a maximum of 30 occurrences as specified in the LDA. . 1 AUDIT-ACTIV-FRZ (A 2) INIT <'A '> /* Set this to the correct activity END-EXIT

The Solution MULTIPLE-WINDOWS * Landauer code to pop up a window to capture authorization

The Solution MULTIPLE-WINDOWS * Landauer code to pop up a window to capture authorization code FORMAT IP=OFF DEFINE WINDOW AUTHWIN SIZE 4 * 25 TITLE 'Authorization Code' FRAMED ON (CD=YE) /* Only pop the window up if the Y has been keyed and no /* authorization has been keyed yet. /* 03/09/05 change - glcae IF #CONFIRM-FLG = 'Y' AND AUDIT-AUTH-CODE = ' ' THEN SET KEY OFF SET WINDOW 'AUTHWIN' INPUT WINDOW='AUTHWIN' AUDIT-AUTH-CODE (AD=ULAE'_') SET WINDOW OFF SET KEY ON

The Solution

The Solution

The Solution Define data 1 view of actual data 1 view of clone of

The Solution Define data 1 view of actual data 1 view of clone of actual data 1 view of audit detail – contains raw before & after images READ for update copy actual data to clone call audit-capture routine - reformats clone data to fit copy screen changes to the actual data view copy actual data to clone again call audit-capture again - reformat changed clone data to fit write audit record.

The Solution Existing CON-STRUCT program ADABAS Audit table

The Solution Existing CON-STRUCT program ADABAS Audit table

The Solution ADABAS Detail Audit table ADABAS Historical Audit table Audit-Log Audit-History

The Solution ADABAS Detail Audit table ADABAS Historical Audit table Audit-Log Audit-History

The Solution 10: 45: 12 User FAYE ***** NATURAL LIST COMMAND ***** 2006 -08

The Solution 10: 45: 12 User FAYE ***** NATURAL LIST COMMAND ***** 2006 -08 -03 - List DDM AUDIT-HISTORY Library ISDL DDM DBID 0 DDM FNR 138 VSAM Name TL - 1 1 1 1 1 1 M 1 DB Name -- ----------------AA AUDIT-FUNC AB AUDIT-ACTIV AC CUST-NBR AD ACCT-NBR AE SER-CODE AF PART-NBR AG DOSI-SN AH DOSI-SN-SUFX AI GENERIC-SEARCH-DATA AJ AUDIT-DATE AK AUDIT-PROG AL AUDIT-TIME AM AUDIT-AUTH-CODE AN AUDIT-USER AO AUDIT-VIEW-NAME AP AUDIT-FIELD-NAME AT AUDIT-FIELD-OCCUR AU AUDIT-FIELD-OCCUR-MAX AV AUDIT-SUB-FIELD-OCCUR AW AUDIT-SUB-FIELD-OCCUR-MAX AQ AUDIT-FIELD-DESCRIPTION AR BEFORE-IMAG AS AFTER-IMAG Default Sequence Page 1 F Lg S D Remark - ---- - - ------------A 1 F Action or function a A 2 FD Activity effecting change N 6. 0 Customer Number P 6. 0 Account number A 3 Series Code A 5 Participant number. P 7. 0 N Dosimeter serial number A 1 N Dosimeter serial suffix A 64 N D N 8. 0 A 32 N N 7. 0 N A 64 N D A 32 N D A 64 N D N 7. 0 N A 64 N Business description A 128 N

The Solution Audit Converter Program View Handler Subroutine …

The Solution Audit Converter Program View Handler Subroutine …

The Solution ** Program: AXAUDTP 0 ** Author: Faye Windhorst ** Date Written: 12/22/04

The Solution ** Program: AXAUDTP 0 ** Author: Faye Windhorst ** Date Written: 12/22/04 ** Description: This program is the driver for moving records from the ** Audit-Log to the Audit-History file. ** Records on the Audit-Log are unformatted and contained in ** a "chunk of data". This program performs subroutines for ** each Adabas view to format the raw audit data into a ** useable format on the Audit-History file. As records are ** processed and written to Audit-History, they are ** physically deleted from Audit-Log. ** DEFINE DATA GLOBAL USING AXAUDTG 0 LOCAL USING AXJCLA 1 LOCAL 01 COUNTERS 02 #READ-CTR (N 7) 02 #DELETE-CTR (N 7) 01 INDICES 02 #MAX-AUTH-IX(N 3) INIT <100> 02 #AX-IX (N 3) 02 #IX (N 3) END-DEFINE (More. . . )

The Solution READAUDT. READ AUDIT-LOG BY ISN ADD 1 TO #READ-CTR DECIDE FOR FIRST

The Solution READAUDT. READ AUDIT-LOG BY ISN ADD 1 TO #READ-CTR DECIDE FOR FIRST CONDITION WHEN AUDIT-LOG. AUDIT-VIEW-NAME = 'ACCOUNT-CONTRACT-INFO' PERFORM AXACONS 0 -ACCOUNT-CONTRACT-INFO WHEN AUDIT-LOG. AUDIT-VIEW-NAME = 'ACCOUNT-CONTRACT-PO-INFO' PERFORM AXACPOS 0 -ACCOUNT-CONTRACT-PO-INFO WHEN AUDIT-LOG. AUDIT-VIEW-NAME = 'ACCOUNT-MASTER-ALL' DECIDE ON FIRST AUDIT-LOG. AUDIT-PROG VALUES 'ISACCTP 1', 'ISCNUPP 1' PERFORM AXAMALS 4 -ACCOUNT-MASTER-ACCT * INCLUDES AXAMALS 5, AXAMALS 6 & AXAMALS 7 VALUE 'ISADDRP 1' PERFORM AXAMALS 8 -ACCOUNT-MASTER-ADDRESS NONE PERFORM AXAMALS 0 -ACCOUNT-MASTER-ALL * INCLUDES AXAMALS 1, AXAMALS 2 & AXAMALS 3 END-DECIDE WHEN AUDIT-LOG. AUDIT-VIEW-NAME = 'ACCOUNT-MASTER-CTL' PERFORM AXAMCTS 0 -ACCOUNT-MASTER-CTL (MORE…) WHEN AUDIT-LOG. AUDIT-VIEW-NAME = 'STATE-CODE-TABLE' PERFORM AXCTSTS 0 -STATE-CODE-TABLE WHEN ANY IF AUDIT-ET-CTR > 0 ADD 1 TO #DELETE-CTR DELETE (READAUDT. ) END TRANSACTION RESET AUDIT-ET-CTR * (MORE…)

The Solution * IF AUDIT-LOG. AUDIT-AUTH-CODE = MASK (999999'-'999999) OR AUDIT-LOG. AUDIT-AUTH-CODE = MASK

The Solution * IF AUDIT-LOG. AUDIT-AUTH-CODE = MASK (999999'-'999999) OR AUDIT-LOG. AUDIT-AUTH-CODE = MASK ('F'999999'-'999999) OR AUDIT-LOG. AUDIT-AUTH-CODE = MASK ('S'999999'-'999999) OR AUDIT-LOG. AUDIT-AUTH-CODE = MASK ('UK OFFICE'. . . ) EXAMINE AXJCLA 1. #AUDIT-AUTH-ARRAY(*) FOR AUDIT-LOG. AUDIT-AUTH-CODE GIVING INDEX #IX IF #IX = 0 #AX-IX : = #AX-IX + 1 AXJCLA 1. #AUDIT-AUTH-ARRAY (#AX-IX) : = AUDIT-LOG. AUDIT-AUTH-CODE END-IF * * if the auth-code-array is full - stop processing and get the remaining audit-log records on the next pass IF #AX-IX = #MAX-AUTH-IX ESCAPE BOTTOM END-IF * END-IF WHEN NONE WRITE 'No audit subroutine for ' AUDIT-LOG. AUDIT-VIEW-NAME '. ' END-DECIDE * END-READ * IF #AX-IX > 0 AXJCLA 1. #NAT-LIBRARY : = 'ISDL' AXJCLA 1. #NAT-SOURCE-NAME : = 'AXAHJCC 1' AXJCLA 1. #AUDIT-ARRAY-IX : = #AX-IX CALLNAT 'AXJCLN 1' AXJCLA 1 END-IF * WRITE 15 T 'RECORDS READ ' #READ-CTR (EM=Z, ZZ 9) / 15 T 'RECORDS DELETED' #DELETE-CTR (EM=Z, ZZ 9) /// 15 T ' *** END OF REPORT *** ' END

The Solution ** MODULE NAME: ** AUTHOR: ** DATE WRITTEN: ** DESCRIPTION: ** **

The Solution ** MODULE NAME: ** AUTHOR: ** DATE WRITTEN: ** DESCRIPTION: ** ** ** DEFINE DATA GLOBAL USING AXAUDTG 0 LOCAL USING FXSDELA 0 LOCAL USING FXAUDHA 0 LOCAL 01 ACTMST-ALL-BEFORE 02 ACCT-NBR (P 6) 02 ACCT-SER-CODE (A 3) 02 REC-DEL-IND (A 1) 02 TERR-CODE (A 1) 02 STATE-CODE (A 2) 02 ACCT-NAME (A 23) AXAMALS 3 FAYE WINDHORST 12 -27 -04 THIS SUBROUTINE IS PERFORMED AS PART OF AXAUDTP 0 TO FORMAT ACCOUNT-MASTER-ALL AUDIT DATA FROM AUDIT-LOG INTO A USEABLE FORMAT ON AUDIT-HISTORY /* AUDIT-LOG /* SYSDIC-EL (PREDICT FIELD NAME DESCR) /* AUDIT-HISTORY (MORE. . . ) 01 REDEFINE ACTMST-ALL-BEFORE 02 BEFORE-CHUNK (A 250/1: 20) 02 BEFORE-CHUNKX (A 228) * 01 ACTMST-ALL-AFTER 02 ACCT-NBR (P 6) 02 ACCT-SER-CODE (A 3) 02 REC-DEL-IND (A 1) 02 TERR-CODE (A 1) 02 STATE-CODE (A 2) 02 ACCT-NAME (A 23) (MORE. . . ) 01 REDEFINE ACTMST-ALL-AFTER 02 AFTER-CHUNK (A 250/1: 20) 02 AFTER-CHUNKX (A 228) END-DEFINE

The Solution DEFINE SUBROUTINE AXAMALS 3 -ACCOUNT-MASTER-BEFORE-AFTER * ------------------------------------------------** AUDIT-IMAG = BEFORE IMAGE **

The Solution DEFINE SUBROUTINE AXAMALS 3 -ACCOUNT-MASTER-BEFORE-AFTER * ------------------------------------------------** AUDIT-IMAG = BEFORE IMAGE ** AUDIT-IMAG-TWO = AFTER IMAGE ** MOVE FROM AUDIT FILE INTO VIEW LAYOUTS ** BEFORE-CHUNK (1: 20) : = AUDIT-IMAG(1: 20) BEFORE-CHUNKX : = AUDIT-IMAG(21) AFTER-CHUNK (1: 20) : = AUDIT-IMAG-TWO(1: 20) AFTER-CHUNKX : = AUDIT-IMAG-TWO(21) RESET FXAUDHA 0 MOVE BY NAME AUDIT-LOG TO FXAUDHA 0 -RECORD FXAUDHA 0. ACCT-NBR : = ACTMST-ALL-BEFORE. ACCT-NBR FXAUDHA 0. SER-CODE : = ACTMST-ALL-BEFORE. ACCT-SER-CODE FXAUDHA 0. CUST-NBR : = ACTMST-ALL-BEFORE. CUST-NBR DECIDE FOR EVERY CONDITION WHEN ACTMST-ALL-BEFORE. TERR-CODE NE ACTMST-ALL-AFTER. TERR-CODE MOVE 'TERR-CODE' TO FXAUDHA 0. AUDIT-FIELD-NAME PERFORM LOOKUP-FIELD-DESCRIPTION MOVE ACTMST-ALL-BEFORE. TERR-CODE TO FXAUDHA 0. BEFORE-IMAG (1) MOVE ACTMST-ALL-AFTER. TERR-CODE TO FXAUDHA 0. AFTER-IMAG (1) PERFORM STORE-AUDIT-HISTORY-RECORD WHEN ACTMST-ALL-BEFORE. STATE-CODE NE ACTMST-ALL-AFTER. STATE-CODE MOVE 'STATE-CODE' TO FXAUDHA 0. AUDIT-FIELD-NAME PERFORM LOOKUP-FIELD-DESCRIPTION MOVE ACTMST-ALL-BEFORE. STATE-CODE TO FXAUDHA 0. BEFORE-IMAG (1) MOVE ACTMST-ALL-AFTER. STATE-CODE TO FXAUDHA 0. AFTER-IMAG (1) PERFORM STORE-AUDIT-HISTORY-RECORD WHEN ACTMST-ALL-BEFORE. ACCT-NAME NE ACTMST-ALL-AFTER. ACCT-NAME MOVE 'ACCT-NAME' TO FXAUDHA 0. AUDIT-FIELD-NAME PERFORM LOOKUP-FIELD-DESCRIPTION MOVE ACTMST-ALL-BEFORE. ACCT-NAME TO FXAUDHA 0. BEFORE-IMAG (1) MOVE ACTMST-ALL-AFTER. ACCT-NAME TO FXAUDHA 0. AFTER-IMAG (1) PERFORM STORE-AUDIT-HISTORY-RECORD (MORE. . . ) WHEN NONE IGNORE END-DECIDE

And finally…

And finally…

And finally…

And finally…

Connecting Sarbanes to Oxley Questions? ? ? Faye Windhorst Landauer, Inc. 14 th NATURAL

Connecting Sarbanes to Oxley Questions? ? ? Faye Windhorst Landauer, Inc. 14 th NATURAL Conference October, 2006