36
onnecting Sarbanes to Oxle Faye Windhorst Landauer, Inc. 14 th NATURAL Conference October, 2006

Connecting Sarbanes to Oxley

  • Upload
    xerxes

  • View
    46

  • Download
    0

Embed Size (px)

DESCRIPTION

Connecting Sarbanes to Oxley. Faye Windhorst Landauer, Inc. 14 th NATURAL Conference October, 2006. Background. 2006. 1970. ADABAS. VSAM. Background. 14:02:41 ***** NATURAL LIST COMMAND ***** 2006-08-02 - PowerPoint PPT Presentation

Citation preview

Page 1: Connecting Sarbanes to Oxley

Connecting Sarbanes to Oxley

Faye WindhorstLandauer, Inc.14th NATURAL ConferenceOctober, 2006

Page 2: Connecting Sarbanes to Oxley
Page 3: Connecting Sarbanes to Oxley
Page 4: Connecting Sarbanes to Oxley

Background

1970

2006

VSAM

ADABAS

Page 5: Connecting Sarbanes to Oxley

Background 14:02:41 ***** NATURAL LIST COMMAND ***** 2006-08-02 User FAYE - LIST Objects in a Library - Library FIXLIB Cmd Name Type S/C SM Version User ID Date Time --- ACCT*____ *__________ *__ * *______ *________ *__________ *________ __ ACCTDTFX Program S/C S 4.1.03 BENT 2005-05-19 09:48:56 __ ACCTFIX Program S/C R 3.1.04 TOMC 2002-10-30 15:20:31 __ ACCTFXDT Program S/C S 4.1.03 FAYE 2005-08-17 12:59:26 __ ACCTJKS Program S R 2.2.08 JKIE 1997-12-31 16:02:30 __ ACCTMAST Program S S 2.2.08 FAYE 1998-01-29 16:12:12 __ ACCTSEL1 Program S/C S 3.1.04 FAYE 2002-05-21 14:30:53 __ ACCTSEL2 Program S/C S 3.1.04 FAYE 2002-05-21 10:32:17 __ ACCTSEL3 Program S/C S 3.1.04 FAYE 2002-05-24 07:55:13 __ ACCTSERV Program S S 2.2.08 FAYE 1998-01-09 08:37:34 __ ACCTTEST Program S/C S 2.1.07 BENT 1992-05-14 11:37:23 10 Objects found Top of List. Command ===> Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Print Exit Sort -- - + ++ > Canc

Page 6: Connecting Sarbanes to Oxley

Background

07/30/06 ***** Landauer, Inc. ***** ISMNTP1 14:16 - File Maintenance Menu 1 - ISMNTM1 Code System/Function/Explanation

A Account Master (80) B Account Master Control Record (80) C Dosimeter (72)

D Dosimeter Component (73) E Participant Master (81) F Process Menu H Report Master (99) I N144 Etching Tray (78) J N144 Cross Reference (79) K Credit Dosimeter Return (45) L Ship Date Table (101)

Enter code: __

Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- help retrn main quit NxtMn flip

Page 7: Connecting Sarbanes to Oxley

Background

Page 8: Connecting Sarbanes to Oxley

Background

Page 9: Connecting Sarbanes to Oxley

Problem

Page 10: Connecting Sarbanes to Oxley

The Solution

Existing CON-STRUCTprogram

ADABASAudit table

?

Page 11: Connecting Sarbanes to Oxley

The Solution

14:33:42 ***** NATURAL LIST COMMAND ***** 2006-08-02 User FAYE - List DDM ACCOUNT-MASTER-ALL - Library FIXLIB

DDM DBID 0 DDM FNR 80 VSAM Name Default Sequence Page 1 T L DB Name F Leng S D Remark - - -- -------------------------------- - ---- - - ------------------------

1 AA ACCT-NBR P 6.0 Account number 1 AB ACCT-SER-CODE A 3 Account series code 1 AC REC-DEL-IND A 1 Record deleted indicator 1 AD TERR-CODE A 1 N Account sales territory 1 AE STATE-CODE A 2 N State code. 1 AF ACCT-NAME A 23 N Account name 1 AG ACCT-LICENSEE-NAME A 16 N Account licensee name 1 AH ACCT-LICENSEE-NBR A 15 N Account licensee number 1 AI ACCT-REG-NBR A 7 N Account registration number 1 AJ ACCT-EXPOS-RPT-CPY A 2 N Account exposure report copy 1 AK ACCT-EXPOS-RPT-DUP-DEST A 1 N Account duplicate exposure report dest 1 AL ACCT-MREM-OVEXP-DEEP A 5 N Account over exposure MREM

Top of List.

Page 12: Connecting Sarbanes to Oxley

The Solution

Existing CON-STRUCTprogram

PLOG

SPATs

Page 13: Connecting Sarbanes to Oxley

The Solution

Existing CON-STRUCTprogram

READ For UPDATE Capture Before Image

Apply changes to updateview

UPDATE

Capture After Image

Page 14: Connecting Sarbanes to Oxley

The Solution

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

Page 15: Connecting Sarbanes to Oxley

The SolutionCode Frame ......... CUFMC22 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 2

END-IF "

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 2

....+....1....+....2....+....3....+....4....+....5....+....6....+....7.. T

Page 16: Connecting Sarbanes to Oxley

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) := CHUNK1 (AUDIT-X)

END-FOR /* (0200)

AUDIT-IMAG (AUDIT-X) := CHUNK1X

END-IF

Page 17: Connecting Sarbanes to Oxley

The Solution

IF AUDIT-IMAG-TYPE = 'AFTER' THEN /* always do this on after images

AUDIT-Y := AUDIT-LOOP-LIMIT - 1 /* must stop on last full element

FOR AUDIT-X = 1 TO AUDIT-Y

AUDIT-IMAG-TWO (AUDIT-X) := CHUNK1 (AUDIT-X)

END-FOR

AUDIT-IMAG-TWO (AUDIT-X) := CHUNK1X

END-IF

IF AUDIT-IMAG-TYPE = 'AFTER' OR /* write audit if after image

AUDIT-IMAG-TYPE = 'BEFORE' AND /* or before image on a purge

AUDIT-FUNC = 'D' THEN

AUDIT-ACTIV := AUDIT-ACTIV-FRZ

STORE AUDIT-LOG

RESET AUDIT-LOG

AUDIT-X

AUDIT-Y

END-IF

END-SUBROUTINE /* audit-purge-modify-rtn

Page 18: Connecting Sarbanes to Oxley

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

Page 19: Connecting Sarbanes to Oxley

The Solution

* Primary file being maintained on the INPUT statement.

01 &PRIME-FILE VIEW OF &PRIME-DDM

PRIME1 U

NOT PRIME-FILE-IS-DB2 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

LDRAUDIT1 U

* View which gets held during updates.

01 UPDATE-VIEW VIEW OF &PRIME-DDM

PRIME2 U

LOGGING-UPDATES 1

* Landauer Sarbanes-oxley audit changes capture data

LDRAUDIT2 U

* "

* View used to store audit trail logs. "

01 &LOG-FILE VIEW OF &LOG-DDM "

Subprogram: CUFMGFIL Parameter: LOG N "

SECONDARY-FILE-USED 1

* "

* Secondary file view. "

Page 20: Connecting Sarbanes to Oxley

The Solution

CSMUSEX Natural Construct

Jul 30 Maintain User Exit 1 of 1

User exit name ......... LDRAUDIT2

Code frame name ........ CUFMDA2 Conditional N

User exit required ..... X

Generate as subroutine . _

Sample subprogram ...... ________ GUI sample subprogram .. ________

Default user exit code .

01 REDEFINE UPDATE-VIEW_______________________________________________

2 CHUNK1 (A250/1:21) /* most of record - resize as needed________

2 CHUNK1X (A250) /* 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 A250, plus A228___________

* ..................................................................____

________________________________________________________________________

________________________________________________________________________

Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF1

help retrn

Page 21: Connecting Sarbanes to Oxley

The Solution

• DEFINE EXIT LDRAUDIT1 • 2 CHUNK (A250/1:5) /* MOST OF RECORD - RESIZE AS NEEDED • 2 CHUNKX (A57) /* FINAL SEGMENT - RESIZE AS NEEDED • 1 AUDIT-LOOP-LIMIT (P5) 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 A187, plus A3. • * 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 (A2) INIT <'A '> /* Set this to the correct activity• END-EXIT

Page 22: Connecting Sarbanes to Oxley

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

Page 23: Connecting Sarbanes to Oxley

The Solution

Page 24: Connecting Sarbanes to Oxley

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.

Page 25: Connecting Sarbanes to Oxley

The Solution

Existing CON-STRUCTprogram

ADABASAudit table

Page 26: Connecting Sarbanes to Oxley

ADABASDetailAudit table

The Solution

ADABASHistoricalAudit table

Audit-Log Audit-History

Page 27: Connecting Sarbanes to Oxley

The Solution

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

Page 28: Connecting Sarbanes to Oxley

The Solution

Audit ConverterProgram

ViewHandler Subroutine

ViewHandler Subroutine

ViewHandler Subroutine

Page 29: Connecting Sarbanes to Oxley

The Solution

** Program: AXAUDTP0 ** 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 AXAUDTG0 LOCAL USING AXJCLA1 LOCAL 01 COUNTERS 02 #READ-CTR (N7) 02 #DELETE-CTR (N7) 01 INDICES 02 #MAX-AUTH-IX(N3) INIT <100> 02 #AX-IX (N3) 02 #IX (N3) END-DEFINE

(More...)

Page 30: Connecting Sarbanes to Oxley

The Solution

READAUDT.READ AUDIT-LOG BY ISNADD 1 TO #READ-CTR DECIDE FOR FIRST CONDITION WHEN AUDIT-LOG.AUDIT-VIEW-NAME = 'ACCOUNT-CONTRACT-INFO' PERFORM AXACONS0-ACCOUNT-CONTRACT-INFO WHEN AUDIT-LOG.AUDIT-VIEW-NAME = 'ACCOUNT-CONTRACT-PO-INFO' PERFORM AXACPOS0-ACCOUNT-CONTRACT-PO-INFO WHEN AUDIT-LOG.AUDIT-VIEW-NAME = 'ACCOUNT-MASTER-ALL' DECIDE ON FIRST AUDIT-LOG.AUDIT-PROG VALUES 'ISACCTP1', 'ISCNUPP1' PERFORM AXAMALS4-ACCOUNT-MASTER-ACCT* INCLUDES AXAMALS5, AXAMALS6 & AXAMALS7 VALUE 'ISADDRP1' PERFORM AXAMALS8-ACCOUNT-MASTER-ADDRESS NONE PERFORM AXAMALS0-ACCOUNT-MASTER-ALL* INCLUDES AXAMALS1, AXAMALS2 & AXAMALS3 END-DECIDE WHEN AUDIT-LOG.AUDIT-VIEW-NAME = 'ACCOUNT-MASTER-CTL' PERFORM AXAMCTS0-ACCOUNT-MASTER-CTL

(MORE…)

WHEN AUDIT-LOG.AUDIT-VIEW-NAME = 'STATE-CODE-TABLE' PERFORM AXCTSTS0-STATE-CODE-TABLE WHEN ANY IF AUDIT-ET-CTR > 0 ADD 1 TO #DELETE-CTR DELETE (READAUDT.) END TRANSACTION RESET AUDIT-ET-CTR*(MORE…)

Page 31: Connecting Sarbanes to Oxley

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 AXJCLA1.#AUDIT-AUTH-ARRAY(*) FOR AUDIT-LOG.AUDIT-AUTH-CODE GIVING INDEX #IX IF #IX = 0 #AX-IX := #AX-IX + 1 AXJCLA1.#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* END-IF WHEN NONE WRITE 'No audit subroutine for ' AUDIT-LOG.AUDIT-VIEW-NAME '.' END-DECIDE *END-READ *IF #AX-IX > 0 AXJCLA1.#NAT-LIBRARY := 'ISDL' AXJCLA1.#NAT-SOURCE-NAME := 'AXAHJCC1' AXJCLA1.#AUDIT-ARRAY-IX := #AX-IX CALLNAT 'AXJCLN1' AXJCLA1END-IF*WRITE 15T 'RECORDS READ ' #READ-CTR (EM=Z,ZZZ,ZZ9)/ 15T 'RECORDS DELETED' #DELETE-CTR (EM=Z,ZZZ,ZZ9)/// 15T ' *** END OF REPORT *** 'END

Page 32: Connecting Sarbanes to Oxley

The Solution** MODULE NAME: AXAMALS3** AUTHOR: FAYE WINDHORST** DATE WRITTEN: 12-27-04** DESCRIPTION: THIS SUBROUTINE IS PERFORMED AS PART OF AXAUDTP0 TO FORMAT ** ACCOUNT-MASTER-ALL AUDIT DATA FROM AUDIT-LOG INTO A USEABLE** FORMAT ON AUDIT-HISTORY**DEFINE DATAGLOBAL USING AXAUDTG0 /* AUDIT-LOGLOCAL USING FXSDELA0 /* SYSDIC-EL (PREDICT FIELD NAME DESCR)LOCAL USING FXAUDHA0 /* AUDIT-HISTORYLOCAL01 ACTMST-ALL-BEFORE 02 ACCT-NBR (P6) 02 ACCT-SER-CODE (A3) 02 REC-DEL-IND (A1) 02 TERR-CODE (A1) 02 STATE-CODE (A2) 02 ACCT-NAME (A23) (MORE...)01 REDEFINE ACTMST-ALL-BEFORE 02 BEFORE-CHUNK (A250/1:20) 02 BEFORE-CHUNKX (A228)*01 ACTMST-ALL-AFTER 02 ACCT-NBR (P6) 02 ACCT-SER-CODE (A3) 02 REC-DEL-IND (A1) 02 TERR-CODE (A1) 02 STATE-CODE (A2) 02 ACCT-NAME (A23) (MORE...)01 REDEFINE ACTMST-ALL-AFTER 02 AFTER-CHUNK (A250/1:20) 02 AFTER-CHUNKX (A228)END-DEFINE

Page 33: Connecting Sarbanes to Oxley

The SolutionDEFINE SUBROUTINE AXAMALS3-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 FXAUDHA0MOVE BY NAME AUDIT-LOG TO FXAUDHA0-RECORDFXAUDHA0.ACCT-NBR := ACTMST-ALL-BEFORE.ACCT-NBRFXAUDHA0.SER-CODE := ACTMST-ALL-BEFORE.ACCT-SER-CODEFXAUDHA0.CUST-NBR := ACTMST-ALL-BEFORE.CUST-NBRDECIDE FOR EVERY CONDITIONWHEN ACTMST-ALL-BEFORE.TERR-CODE NE ACTMST-ALL-AFTER.TERR-CODE MOVE 'TERR-CODE' TO FXAUDHA0.AUDIT-FIELD-NAME PERFORM LOOKUP-FIELD-DESCRIPTION MOVE ACTMST-ALL-BEFORE.TERR-CODE TO FXAUDHA0.BEFORE-IMAG (1) MOVE ACTMST-ALL-AFTER.TERR-CODE TO FXAUDHA0.AFTER-IMAG (1) PERFORM STORE-AUDIT-HISTORY-RECORDWHEN ACTMST-ALL-BEFORE.STATE-CODE NE ACTMST-ALL-AFTER.STATE-CODE MOVE 'STATE-CODE' TO FXAUDHA0.AUDIT-FIELD-NAME PERFORM LOOKUP-FIELD-DESCRIPTION MOVE ACTMST-ALL-BEFORE.STATE-CODE TO FXAUDHA0.BEFORE-IMAG (1) MOVE ACTMST-ALL-AFTER.STATE-CODE TO FXAUDHA0.AFTER-IMAG (1) PERFORM STORE-AUDIT-HISTORY-RECORDWHEN ACTMST-ALL-BEFORE.ACCT-NAME NE ACTMST-ALL-AFTER.ACCT-NAME MOVE 'ACCT-NAME' TO FXAUDHA0.AUDIT-FIELD-NAME PERFORM LOOKUP-FIELD-DESCRIPTION MOVE ACTMST-ALL-BEFORE.ACCT-NAME TO FXAUDHA0.BEFORE-IMAG (1) MOVE ACTMST-ALL-AFTER.ACCT-NAME TO FXAUDHA0.AFTER-IMAG (1) PERFORM STORE-AUDIT-HISTORY-RECORD (MORE...)WHEN NONE IGNOREEND-DECIDE

Page 34: Connecting Sarbanes to Oxley

And finally…

Page 35: Connecting Sarbanes to Oxley

And finally…

Page 36: Connecting Sarbanes to Oxley

Faye WindhorstLandauer, Inc.14th NATURAL ConferenceOctober, 2006

Questions???

Connecting Sarbanes to Oxley