Академический Документы
Профессиональный Документы
Культура Документы
THIRD EDITION
No part of this publication may be reproduced in any form by any means, electronic or
mechanical including photocopying and recording, information storage, retrieval or
transmission without permission in writing from the publisher, except by a reviewer who may
quote brief passages in a review.
All product names, trademarks or registered trademarks are the property of their respective
companies, including:
ISBN 1-894497-08
Written, printed and bound in Canada
Chapters 1-3
The 101 ACL applications are intuitive and easy to understand. They propel you immediately into
an orbit of higher efficiency and professionalism. With these predefined ACL applications you
can access and use most of the data available to you, and do so in minutes or hours. Of course,
ACL still provides powerful interactivity and supports the important intellectual spontaneity so
valuable today. You don't waste time setting yourself up, but apply a proven pattern and are free
to develop these applications over time into your own bank of personal or organizational
'information generators'.
This book assumes the technical knowledge of 'intermediate ACL users'. This means that basic
knowledge of a few key concepts is taken for granted: e.g., view, report, application, batch,
document and notes. They will be briefly explained immediately below the next section, but it
would be ideal if you have had a basic introduction to ACL or some prior experience with it.
The book is also intended to help experienced ACL users to both customize these application
templates for their own data and reporting needs and to develop new ones. Evidently, this book
cannot contain a complete listing of all the reports you may want to produce with ACL. It is
therefore my hope that, over time, these applications will provide the basis for your own audit
programs and management reports-and more importantly, that they will 'tickle' your
imagination. No meaningful and relevant report can be created without imagination. I would be
pleased to hear from you if you want to share the results of your newfound freedom.
Not surprisingly, the AICPA Committee concluded, "whether a Fortune 500 CEO,
an investment professional or a financial manager, individuals make important
investment decisions every day or rely on others to make decisions for them based
on the information in financial reporting...In times of rapid change, the risk
increases that business reporting will fall behind the pace of change, failing to
provide what users need to know."
With ACL, business reporting can keep pace with the changing times by equipping
any auditor and manager with the means to generate and test the information
necessary for frequently rapid decision-making and (re)action. This sounds almost
too good to be true, but these applications will convince you that it is true even for
you!
ACL software is a powerful data analysis and interrogation tool that supports the
integration of accounting, controllership and auditing with a common technology.
ACL was designed for auditors and management alike, giving them universal data
access and powerful processing capabilities. It is hard to believe that one software
system can have so many different applications. ACL's adhoc query language
ACL saves time and money: there is no need to learn multiple data analysis and
report writing methods for the various accounting and financial modules in today's
organization. Rather than wasting time with technology, all users can generate
solutions and tests to their hearts' content; follow their own intuition; use their
imagination freely and creatively; and simultaneously organize their thoughts into
standard applications of the kind you see illustrated in this book.
1 View: In order to see the contents of data files users depend on a ‘View’
which represents those data fields defined and arranged by them for
display on the screen. The data fields become columns in a View and the
user can arrange many different Views, include virtual (COMPUTED)
fields for various purposes and filter the records in various ways. A
View can be printed as a 'Report' at any time the user clicks on the
printer button.
6 Notes: With ACL you can document all your work in great detail. For
example, you can attach 'Notes' to Batches, Documents, files and fields.
For additional information pertaining to basic ACL concepts, review the ACL User
Guide and Reference Manual. It is suggested that you also complete the entire ACL
If you still can't find the solution to your problem and you are a supported user, in
North America contact ACL Technical Support at 1-604-669-4225 (fax: 1-604-669-
3225). If you have a modem, you can obtain helpful tips and suggestions from the
ACL BBS by calling 1-604-669-3277. Overseas, you should call your local authorized
distributor and/or support center. Alternatively, if you have access to the Internet,
you can get online help by pointing your favorite browser at www.acl.com, or by
sending email to support@acl.com.
■ The serial number of ACL (Select "Help" from the menu bar and choose
About ACL)
■ The type of hardware you are using, and whether it is connected to a Local
Area Network (LAN). A description of what happened and what you were
doing when the problem occurred
■ The error message, if any, displayed by ACL.
Chapter 1: Read This First - This chapter summarizes the practical motivation of the
book and highlights the Seven Steps to Power Applications which are meant to get
the user up and running ACL applications as soon as possible.
Chapter 3: Adjusting Your Data and Batches - Steps will be provided to adjust the data
definitions provided with the Toolkit to your own data.
Chapter 6: Payroll
Chapter 8: Inventory
All chapters begin with a general overview and a listing of the objectives relevant to
the area. The overview and objectives are followed by references to the numbered
applications which will assist in achieving those objectives.
7) helpful hints.
Through use of the following table, the reader should gain a better appreciation for
the range of applications and reports presented in the Toolkit. Essentially there are
101 reports in six audit areas with a bonus chapter for electronic data processing
which provides an additional five reports.
Payable Management
Receivable Management
This may be taking things a little too far but haven’t we all, at some time in our data
reporting careers, been faced with a similar situation? Wouldn't it have been helpful
from a productivity and self-confidence standpoint to own a book that would:
Now you have all these things. My objective in writing is to apply Computer Assisted
Audit Techniques (“CAATs”) to situations you face as an auditor everyday. The book
can be used as a starting point in your journey or as an aid along the way. When used
effectively, it will help you break through the “information barrier”.
Please note: This book is not meant to be read cover to cover in one sitting, but
is expected to yield positive results one step at a time. (I am sure Confucius would
say this more eloquently!). Use the Seven Steps to Power Applications to ensure that
you attain quick and effective results. Most importantly, have fun!
2 Select the application that best meets the selected objective - In the
beginning, try to work with one application at a time. As you get
comfortable, it may be more efficient to combine application processing,
especially when preparing to extract the required data from the system.
Please note: In the Batch section of each application, the key icon indicates
notations which are critical to the proper functioning of the batch.
4 Run the batch on the sample data provided - Insert the disk enclosed with
the textbook into your floppy drive and copy its contents to a directory on
your harddrive. Then after starting ACL for Windows, open the document
TOOLKIT.ACL. To execute the batch, select “Tools” from the menu bar,
choose “Do Batch” and double click on the appropriate batch for
execution.
If the answers to the above questions were “Yes”, “No” and “Yes”, move on
to step 5. Otherwise, analyze your situation and make the necessary changes
to the batch so that you can execute it properly within your own scenario.
5 Review the necessary data file, “Required” data fields and, if you desire,
also review the “Useful” fields as presented in each application’s Data
Fields and Validity Tests section.
7 Run the batch on your data and perform the audit steps provided - At
this point, the hard work is done. Now all you need to do is:
■ Choose “Do Batch” from the Tools menu and select the batch to execute
So, what is an auditor to do? Learn numerous reporting packages for the various
accounting systems? I wouldn’t suggest it. What would be more efficient is to learn to
use just one system, one that allows you to continuously monitor all of the
accounting results from other packages. That software is ACL for Windows.
Over time, constant monitoring could ultimately replace periodic audit tests. For
example, an application highlighting possible duplicate payments (Applications 15,
16 and 17 in Chapter 5) could be a “built in” exception report, to be reviewed prior
to each check run, rather than being left for possible detection in an annual audit.
1 How to reformat data definitions and ACL batches to fit your own data
3 Helpful hints
1 How to reformat data definitions and ACL batches to fit your own data
For applications like these, intended partly as study exercises, a predefined data set is
essential. In order to process actual data using the batches in this book, you must
first define that data, and in most cases adjust the batches themselves as well. Data
definitions are called ‘input file definitions’ or IFDs in ACL for Windows. This
section shows how easy creating an IFD or making a batch adjustment is. By this
point you will typically have completed Steps 1-4 in the Seven Steps to Power
Applications, that is, you will have set your audit objective, picked a suitable
application, read the documentation, and run the application using the sample data
provided. All you need to do at this point is to take your chosen “app” into the real
world.
1 When reformatting, you must decide what data to obtain, and what fields in
the data file are needed by the application. You will typically have to request
the data from your Information Systems department. Pay special attention
to the “Required” and “Useful” data fields in the application's Data Fields
Data Structure
44 Records using GENLED.FIL as the data file.
Field Explanations
The following fields in the GENERAL_LEDGER file are required to execute the
GENLED_6 batch:
2 Once you receive the data, go into ACL and open your Overview window
(Choose “Open Overview” from the Window menu item). Highlight
the Input File Definition title, then click on the “New” button as identified in
the screen print below:
If you check off the correct properties, you will be presented with this screen:
Deselect lines by clicking on them, to create the revised field layout shown below:
Then click on the Numeric field and type Trans_Amount in the Name field. Finally,
type 2 in the Decimal box. Both required fields have now been defined.
Click Next, Finish, and OK in succession to arrive at the defined file's Default View:
4 Your new file is now defined and is ready for processing with the existing
batch. All that is required is to replace in the application batch (GENLED_6)
the file name “GENERAL_LEDGER” with “GENETEST”.
If fewer fields are defined, the batch will not process properly, because it expects to find
fields that have not been included in the file.
For example, if you wished to use the file re-defined above as GENETEST in another
batch that calls for an extraction of the Journal_Entry, Trans_Amount and
GL_Account fields, the batch would fail because it would not find the
GL_Account field.
Since the “Required and Useful” fields listed in each application’s Data Fields and
Validity Tests section are the only fields listed in the batch, you will need to edit the
batch to add any additional fields. This can be accomplished by selecting “Edit” >
“Batches” from the menu bar and selecting the appropriate batch to edit.
For more information on using data files and defining data fields see Chapters 1
(Quick Start), 3 (Key Concepts) and 4 (Defining Files and Fields) of the ACL User
Guide.
Each verification uses two batches. The first “triggers” the second, which executes
the various commands or, if there is invalid data or certain file requirements not met,
prompts the user with a message indicating the batch has terminated. The use of a
“trigger” batch is an effective method to implement error prevention routines as part
of application processing in ACL.
For an example, the AP_VERIFY batch (see Chapter 5) will continue processing
with the AP_VERIFY1 batch if all fields are verified using ACL’s VERIFY
command (see fourth line of the AP_VERIFY batch). If not, the message “BATCH
TERMINATED” - The data used has an INVALID field/fields. Please review the Last
Result window to determine INVALID field/fields” will present itself to the user.
Along with the many suggestions in the Helpful Hints section of each application
(see Chapters 4 through 10), the following general hints may prove useful:
Time Adjustment
Depending on the audit's scope, beginning and ending file time points may need to
be adjusted. For example, network access log files may be processed more effectively
in weekly batches yet the data file is extracted from the system in annual form.
Using the ACCEPT command, the batch will prompt you for the date upon which
data extraction should begin, the number of days in the audit period, and the field to
extract. If using the sample data use 12/31/95 in YYMMDD format (i.e. 961231).
2 The file named NEW can be renamed to the file name to be used in your
next batch.
Make sure you use reverse quotes for dates - Whenever a date is referenced as in
the command “EXTRACT IF Date_1<>‘000101’”, reverse quotes - not
regular quotes - are surrounding the 000101.
Use Join - It is not expected that the data files used in the Toolkit will exactly match
those used at your organization. An attempt was made though to include
uncomplicated file structures to facilitate comparability. Comparability can be
increased further through the use of the Join command to link or extend the scope
of files. See the ACL for Windows Reference Manual for additional details.
Use the VAL() and STRING() expressions - Such expressions will convert ASCII
data formats to a numeric value and vice versa. This may be of assistance if the fields,
in their “raw form” do not match the format used in the Toolkit. See the ACL for
Windows User Guide for additional details.
Export to your favorite spreadsheet - Although the Print Preview utility provided
with ACL saves a few trees, you can save a forest by exporting the report to a
spreadsheet application rather than printing. Not only is the data more flexible than
in hardcopy form, it is also processed faster.
Make batches interactive - Whenever possible, replace field names and/or batch
requirements with dialog boxes. See Chapter 11 (Dialog Builders) for a discussion
on using dialog boxes in batches.
Watch batches run - By opening the Command Log Window (Select “Window”
from the menu bar and choose “Open Command Log”) prior to executing any
batch, the commands being executed, along with their associated results, can be
viewed as the batch progresses.
Save your log files - ACL produces a log file for each document which can be viewed
in the Command Log Window. Save these log files in your workpaper
documentation to support testwork performed with ACL. These files are saved in an
ASCII format and can therefore be viewed in any word processing software.
Report numbers: 1, 2, 3, 4, 6, 7
Report numbers: 1, 2, 3, 4, 6, 7, 8
Report numbers: 1, 2, 3, 4, 6, 7
1 Stratify general ledger activity for unusual trends and exceptions. (3)
Novice
3 Summarize debit and credit activity for unusual trends and exceptions. (2)
Novice
6 List all journal entries that do not net to zero. (1) Novice
8 Review the sequence of journal entry numbers for gaps. (1) Novice
(GENERAL_LEDGER) - This file consists of all journals posted to the general ledger
for a one year period (1/1/96 to 12/22/96). All eight General Ledger applications use
it. The data structure for GENERAL_LEDGER is followed by a field explanation list:
1 Execute the Verify command on each data field - Review the “Command
Log” after batch processing to ensure that the command yielded the
response “0 data validity errors detected”.
Please note: The batch will terminate processing at this point, with an
appropriate user dialog box, if the data has any invalid fields.
3 Classify information by journal entry number - From the file JE, select a
judgmental sample of journal entry debit amount accumulations and agree
to the supporting journals. The purpose of this test is to ensure, on a modest
level, that the basic dollar amounts used are accurate and complete.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the GL_VERIFY batch, and then clicking “Run” in the
resulting Message box.
When running this batch you will be prompted to enter the aging date. This
parameter is required to allow the AGE() function, as used to stratify on the
JE_Date, to function properly. If using the sample data provided with the Toolkit,
enter the date 12/22/96 in YYMMDD format (i.e. 961222).
The batch will terminate if there are any invalid fields detected using the VERIFY
command. If the data is valid, processing will continue with GL_VERIFY1 which is
listed below.
DO GL_VERIFY1 IF WRITE1=0
PAUSE ‘BATCH TERMINATED - The data used has an INVALID
field/fields. Please review the Last Result window to
determine INVALID field/fields’ IF WRITE1>0
GL_VERIFY1
The following field will be used in the associated stratifications and classification
below:
Overview
Look at the multitude of activities in a general ledger and ask yourself, “How can I
survey this data in an extremely quick manner while efficiently planning my audit”?
This batch should provide the answer (also look at Applications 2 through 4 in this
chapter) along with a means to assess the administrative burden from maintaining
low dollar activity.
The following fields, currently in the file GENERAL_LEDGER as included with this
Toolkit, are required to execute the GENLED_1 batch:
Required
<JE_Date>
<Trans_Amount>
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the GENLED_1 batch, and then clicking “Run” in the
resulting Message box.
When running this batch you will be prompted to enter the aging date. This
parameter is required to allow the AGE command, as used to age on the JE_Date.
If using the sample data provided with the Toolkit, enter the date 12/22/96 in
YYYYMMDD format (i.e. 19961222).
To stratify on debit activity (see the Audit Steps section below for procedures to
perform using the resulting report):
To stratify on JE_Date - Considering a journal entry will normally net to zero (any
that do not will be tested in GENLED_6), the “if Trans_Amount>0”
expression is added to report balances in the stratification (see the Audit Steps
section below for procedures to perform using the resulting report):
Audit Steps
■ To focus audit efforts more precisely, use the time adjustment batch, as
explained in Helpful Hints section of Chapter 3, to select the appropriate
period for review.
■ For continuous auditing purposes or as a managerial tool, the selection of
each month’s data prior to posting may detect potential errors or
irregularities.
■ Use the stratification percentages as a guide to accurately communicate the
coverages obtained in audit tests. For example, “22% of transactions greater
than $500,000, representing 82% of the total dollar activity during 1995,
were found to be properly recorded”.
Overview
Organizations tend to repeat many transactions throughout an audit period, so, why
not review identical transactions once and focus the remainder of your time on the
unique, material activity? The old saying in audit programs, “Scan the General
Ledger for any unusual activity” takes on new meaning with this complete and
searchable report.
The following fields, currently in the file GENERAL_LEDGER as included with this
Toolkit, are required and/or useful to execute the GENLED_2 batch:
Required Useful
<Journal_Entry> <JE_Date>
<Trans_Amount>
<GL_Account>
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the GENLED_2 batch, and then clicking “Run” in the
resulting Message box.
The next four DEFINE FIELD commands will create separate debit and credit
columns for both the amounts (Trans_Amount_Dr and Trans_Amount_Cr)
and the accounts (GL_Account_Dr and GL_Account_Cr) depending on
whether the value in the field is positive or negative.
The batch requires the activity to be separated into two files, one for debits and the
other for credits, which are then “flattened” and joined to make one file.
The maximum number of debit and credit entries to be processed will be five each.
If you wish to have more than five debits or credits in each entry, complete the
following:
The GL_Account_Dr and Journal_Entry fields are both five bytes each. If
your data has different field lengths, make sure the number of spaces and question
marks in the quotes below agrees with those field lengths. This would only be the
case for ASCII fields considering all numeric fields such as Trans_Amount would
be equal to zero.
ASSIGN Pr_Journal_Entry=‘?????’
ASSIGN GL_AccountDr1=‘ ’
ASSIGN GL_AccountDr2=‘ ’
ASSIGN GL_AccountDr3=‘ ’
ASSIGN GL_AccountDr4=‘ ’
ASSIGN GL_AccountDr5=‘ ’
ASSIGN Trans_Amount_Dr1=0.00
ASSIGN CTR=1
ASSIGN GL_AccountDr2=‘ ’
ASSIGN GL_AccountDr3=‘ ’
ASSIGN GL_AccountDr4=‘ ’
Above this note, ACL created FLJDR which is a flat file for all of the debit accounts
in each journal entry. Below, the same will be completed for the credit transactions
which will be aptly named FLJCR. These two files will be joined later in the batch to
create one record for each journal entry (in an input file named FLAT_JOURNALS)
OPEN CREDITS
ASSIGN CTR=1
The GL_Account_Cr and Journal_Entry fields are both five bytes each. If
your data has different field lengths, make sure the number of spaces and question
marks in the quotes below agrees with those field lengths. This would only be the
case for ASCII fields considering all numeric fields such as Trans_Amount would
be equal to zero.
ASSIGN Pr_Journal_Entry=‘?????’
ASSIGN GL_AccountCr1=‘ ’
ASSIGN GL_AccountCr2=‘ ’
ASSIGN GL_AccountCr3=‘ ’
ASSIGN GL_AccountCr4=‘ ’
GROUP IF Journal_Entry=Pr_Journal_Entry
ASSIGN CTR=CTR+1
ASSIGN GL_AccountCr2=GL_Account_Cr IF CTR=2
ASSIGN Trans_Amount_Cr2=Trans_Amount_Cr IF CTR=2
ASSIGN GL_AccountCr3=GL_Account_Cr IF CTR=3
ASSIGN Trans_Amount_Cr3=Trans_Amount_Cr IF CTR=3
ASSIGN GL_AccountCr4=GL_Account_Cr IF CTR=4
ASSIGN Trans_Amount_Cr4=Trans_Amount_Cr IF CTR=4
ASSIGN GL_AccountCr5=GL_Account_Cr IF CTR=5
ASSIGN Trans_Amount_Cr5=Trans_Amount_Cr IF CTR=5
ASSIGN Pr_Journal_Entry=Journal_Entry
ELSE IF RECNO()>1
EXTRACT Pr_Journal_Entry AS ‘Journal_Entry’ JE_Date
GL_AccountCr1 GL_AccountCr2 GL_AccountCr3
GL_AccountCr4 GL_AccountCr5 Trans_Amount_Cr1
Trans_Amount_Cr2 Trans_Amount_Cr3 Trans_Amount_Cr4
Trans_Amount_Cr5 TO FLJCR EOF
ASSIGN Pr_Journal_Entry=Journal_Entry
ASSIGN GL_AccountCr1=GL_Account_Cr
ASSIGN Trans_Amount_Cr1=Trans_Amount_Cr
ELSE IF RECNO()=1
ASSIGN Pr_Journal_Entry=Journal_Entry
ASSIGN GL_AccountCr1=GL_Account_Cr
ASSIGN Trans_Amount_Cr1=Trans_Amount_Cr
ASSIGN CTR=1
END
DELETE ALL OK
OPEN FLJDR
OPEN FLJCR SECONDARY
The next command will join the debit and credit transactions into one file named
FLAT_JOURNALS (see the Audit Steps section below for procedures to perform
using the resulting file):
The final commands of the batch will create two files named
REPETITIVE_JOURNALS which are all journal entries that are duplicated at least
once and UNIQUE_JOURNALS which are all files which only occur once in the data
examined (see the Audit Steps section below for procedures to perform using the
resulting files):
Audit Steps
The initial file to review is the FLAT_JOURNALS file, which, as explained above,
reports each journal entry in one record. Review high dollar activity by creating an
expression totaling all of your debit or credit fields (aptly named
Trans_Amt_Tot_Dr and Trans_Amt_Tot_Cr, respectively) and sort this in
descending order.
After your analysis of both the REPETITIVE and UNIQUE_JOURNALS files, total
all debit or credit fields and divide this total by the dollar value of transactions
reviewed, in effect calculating the audit coverage obtained.
Helpful Hints
Although the objective of this application is to make one record for each journal
entry so that summarization may take place, it may be easier to review using ACL’s
Multiline View capabilities.
Overview
Unlike the first two applications in this chapter which dealt mainly with high level or
journal entry analysis, this batch will allow the auditor to observe the general ledger
on an account level basis. Examination of specific accounts could be performed
based on prior experience or relative size in the current audit period.
The following fields, currently in the file GENERAL_LEDGER as included with this
Toolkit, are required and/or useful to execute the GENLED_3 batch:
Required
<Trans_Amount>
<GL_Account>
To test the validity of the data used in this application, execute the GL_VERIFY
batch.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the GENLED_3 batch, and then clicking “Run” in the
resulting Message box.
The next two DEFINE FIELD commands will create debit and credit columns
depending on whether the value in the field is positive or negative.
To create the summarized file of credit and debit activity on account number for use
in the two Sort commands at the end of this batch:
Once the debit and credit activity is summarized on account number, the following
sorts will highlight the material activity (descending sorts on debits and credits) for
the period (see the Audit Steps section below for procedures to perform using the
resulting files):
Audit Steps
Usually, much of the large activity in the general ledger is due to an interface with
other accounting modules such as accounts payable or payroll. Although these are
important, it is usually more interesting to review large transactions that occur less
frequently. These are also displayed in the DEBSORT and CREDSORT files. They are
denoted as having a high balance (Trans_Amount or Cr) and a low number of
transactions (Count). Obtain the account number (GL_Account) from either of
the two created files and extract, using the FLAT_JOURNALS file, all posted
journal entries to that account. These can then be matched to the proper supporting
documentation and discussed with management.
Certain accounts deserve more attention because they are difficult to calculate or
they occur infrequently. Based on a simple extraction (EXTRACT IF
GL_Account=‘123’) or use of the Search command in the Analyze menu, the
auditor could quickly conclude whether audit resources are required in these specific
areas. Once this is determined, an extraction from the FLAT_JOURNALS file (as
created in Application 2) would provide all posted journal entries to that account.
These can then be matched to the proper supporting documentation and discussed
with management.
Overview
Have you ever tried to find a needle in a haystack? Have you ever attempted to locate
transactions in a general ledger without defined coding techniques? It would be
impossible to expect every item to be coded, but why not those entries which
warrant an upper management analysis or which require year-end review by the
auditors? If not already implemented, such a system could be suggested to
management as an effective identification tool.
The following discussion explains the elements in coding a general ledger entry.
There is no batch supplied. After implementing the needed coding field, you can
proceed directly to stratify, classify, or extract the data you are interested in.
There are no specific data fields from the GENERAL_LEDGER file which are
required or useful to execute this process. One field is added to the file, for entry of
To test the validity of the data used in this application, execute the GL_VERIFY
batch.
Report Recommendations
In order to code activity, there must be an empty field which can either be entered by
the user or automatically updated at posting through the use of program logic
(consult your software vendor or in-house development team). It is also possible to
employ unused bytes in an existing field. For example, the journal entry number
field may have two extra bytes which could be coded with the following suffixes
depending on the type of activity: Payroll - PR, Accounts Payable - AP, Fixed Assets
- FA, etc. After opening this data file in ACL, the journal entry field could be parsed
where the two bytes occur and defined as JE_TYPE.
■ an extraction (see the Extract command in the ACL for Windows User
Guide) would be the most likely first command, followed by
■ a stratification (see the Stratify command in the ACL for Windows User
Guide) on JE_TYPE to determine where to focus audit efforts and
■ classifications (see the Classify command in ACL’s User Guide) on such
fields as GL_Account, Journal_Entry and AGE(JE_Date) to
further solidify testwork planning.
Overview
The general ledger can take on a face of anonymity mainly through the use of
summarized posting mechanisms in its programming logic. Hundreds of accounts
payable expenses may be summed into one account posting. Or, a detailed posting
may be made with an uninformative reference such as an accounts payable voucher
number requiring subsequent manual review in that particular module.
This problem can be solved by merging the data from the various modules into a
more complete file, thereby creating an informative and readily available
information source.
There are no specific objectives referenced considering this batch only provides a
more detailed method to review the general ledger and not a direct means of
achieving an audit objective.
For the purposes of this book, the payroll module will be merged into the general
ledger due to the large volume normally posted from this package. The following
fields, currently in the PAYROLL_FILE as included with this Toolkit, are required
and/or useful to execute the GENLED_5 batch:
Required Useful
<Check_Number> <Check_Date>
<Employee_Number> <Department_Code>
<Employee_Name>
<Weekly_Grs_Pay>
<Weekly_Net_Pay>
The following fields, currently in the GENERAL_LEDGER file as included with this
Toolkit, are also required:
Required
<Trans_Amount>
<GL_Account>
<Misc_Field> (which maintains the Check_Number as
referenced from the payroll accounting package)
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the GENLED_5 batch, and then clicking “Run” in the
resulting Message box.
The commands will render a simple join of all data fields listed above. Please note the
Misc_Field and Check_Number fields both hold the check number, are equal
in length (8 bytes) and are the same in type (ASCII). These fields will be used as the
key field between the two files.
The Join command requires that both files to be joined be sorted on the key field, as
completed below:
OPEN PAYROLL_FILE
SORT ON Check_Number to SORTED
OPEN GENERAL_LEDGER
OPEN SORTED SECONDARY
To join the GENERAL_LEDGER and PAYROLL_FILE files. See the Helpful Hints
section below for steps to complete using the resulting file:
Helpful Hints
Using this newly sorted file, the auditor may detect unusual classifications for the
same employee warranting further examination of supporting documentation and
discussion with management.
Overview
This is an accounting “no no” and is easy to test, assuming that the required data
fields are present.
The following fields, currently in the GENERAL_LEDGER file as included with this
Toolkit, are required to execute the GENLED_6 batch:
Required
<Journal_Entry>
<Trans_Amount>
To test the validity of the data used in this application, execute the GL_VERIFY
batch.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the GENLED_6 batch, and then clicking “Run” in the
resulting Message box.
To classify on journal entry number the net amount of the entry (which should net
to zero).
To extract all entries not netting to zero (see the Audit Steps section below for
procedures to perform using the resulting file):
Audit Steps
Review the materiality of journal entries that do not net to zero (see
JE_NO_ZERO). If determined to be material, an extraction of those journal entries
based on the JE_Number field would be warranted. This could lead to an inquiry
by management and/or a recalculation of the entry based on supporting
documentation.
Overview
Although it is possible to select a random sample from the entire general ledger file
(see the first selection in the batch below), it may be more effective to make
selections based on the approval limits associated with each entry (which can also be
accomplished using this batch). Classifying samples in this way leads to a more
focused audit analysis and clearer recommendations to management.
The following files and fields are required depending on whether approval limits are
used as a selection criteria:
Required
<Journal_Entry>
<Trans_Amt_Tot_Dr> (This field is created by following the
instructions in the Audit Steps section of
Application_2 for the General Ledger.)
Required
<Journal_Entry>
<Trans_Amount>
To test the validity of the data used in this application, execute the GL_VERIFY
batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the GENLED_7 batch, and then clicking “Run” in the
resulting Message box.
Please note, samples based on approval limits will not process without establishing
the field Trans_Amt_Tot_Dr in the file FLAT_JOURNALS as explained in the
Audit Steps section of Application 2 in this chapter.
The above statements will prompt you to enter the number of sample items you wish
to select and answer some questions regarding the approval limits. Based on the
entries, the following “DO BATCH” commands will be executed. Also, certain
“PAUSE” statements have been added if (1) no items meet your criteria, (2) you do
not select any items to sample or (3) you select more sample items than there are
items meeting the criteria in the file. For example, if there are 0 over limit items in a
file or you wish to sample 25 over limit items when there are only 15 in the file, the
particular batch will not execute and the PAUSE statement will appear notifying you
of such occurrence. Select “OK” to continue batch processing.
OPEN GENERAL_LEDGER
CLASSIFY ON Journal_Entry ACCUMULATE Trans_Amount TO
CLASSIFIED
OPEN CLASSIFIED
To select a simple random sample of journal entries (see the GL_SAMPLE batch
below for further processing):
COUNT
DO GL_SAMPLE IF VALUE(ITEMS,0)>0 AND
COUNT1>=VALUE(ITEMS,0)
PAUSE ‘The basic random sample did not process since
either there are no records in the file or the number
sampled>number of records in the file.’ IF COUNT1=0 OR
COUNT1<VALUE(ITEMS,0)
To select a sample of journal entries over the user defined approval (see the
OVR_GLSAMP batch below for further processing):
OPEN FLAT_JOURNALS
COUNT IF Trans_Amt_Tot_Dr>VALUE(LIMIT,0)
DO OVR_GLSAMP IF VALUE(ITEMSOVR,0)>0 AND COUNT1>
=VALUE(ITEMSOVR,0)
PAUSE ‘The sample for over limit items did not process
since either there are no over limits or the number over
limits sampled>number in the file.’ IF COUNT1=0 OR
COUNT1<VALUE(ITEMSOVR,0)
PAUSE ‘The sample for over limit items sample did not
process since there were no selected items.’ IF
VALUE(ITEMSOVR,0)=0
To select a sample of journal entries under the user defined approval (see the
UND_GLSAMP batch below for further processing):
COUNT IF Trans_Amt_Tot_Dr<VALUE(LIMIT,0)
DO UND_GLSAMP IF VALUE(ITEMSUND,0)>0 AND COUNT1>
=VALUE(ITEMSUND,0)
PAUSE ‘The sample for under limit items did not process
since either there are no under limits or the number
under limits sampled>number in the file.’ IF COUNT1=0
OR COUNT1<VALUE(ITEMSUND,0)
PAUSE ‘The sample for under limit items sample did not
process since there were no selected items.’ IF
VALUE(ITEMSUND,0)=0
DELETE ALL OK
SET SAFETY ON
The actual sample batches are as follows. These batches were “triggered” by the “DO
BATCH” command for each type of sample selected. Samples are random which is
GL_SAMPLE
To select a random sample (see the Audit Steps section below for procedures to
perform using the resulting file):
OVR_GLSAMP
To select a sample of journal entries with values over the approval limit (see the Audit
Steps section below for procedures to perform using the resulting file):
UND_GLSAMP
To select a sample of journal entries falling under the approval limit (see the Audit
Steps section below for procedures to perform using the resulting file):
Audit Steps
For the sample selected, observe the actual journal entries to:
Please note: When auditing with this approach, the accuracy of the general
ledger is tested more so than the completeness. That is, data already in the system is
traced back to the appropriate support. To further test completeness, judgmentally
select a sample of journal entries from the appropriate files and perform all related
testwork described in the bullets above. This information will be traced to rather
than from the general ledger.
Required
<Journal Entry>
To test the validity of the data used in this application, execute the GL_VERIFY
batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the GENLED_8 batch, and then clicking “Run” in the
resulting Message box.
To sequence the gaps in the journal entry numbers (see the Audit Steps section below
for procedures to perform using the resulting report):
The objective of this chapter is not only to provide the financial auditor with the
tools to test the proper and complete recording of liabilities, but also to assess the
effectiveness of the procurement system. The data analysis that follows will provide
the auditor with quantitative evidence that, used properly, will lead to increased
value to the organization.
Report number: 6, 9
Below are 21 applications which contain 30 reports. The number of reports per
application is shown after each application, along with the difficulty level.
2 List vendors with post office boxes for identification of possible fictitious
vendors. (1) Intermediate
4 Calculate the annualized unit price changes in purchase orders for the same
product in the same year. (1) Intermediate
5 Calculate the variance between the approved purchase order and the invoice
cost. (1) Intermediate
7 Review the sequence of invoices, purchase orders and check numbers for
gaps. (3) Novice
11 Calculate weighted days payable outstanding and interest lost for not paying
in 30, 45 and 60 days. (1) Advanced
12 Detect vendors with no discounts taken when discounts have been taken in
the past. (1) Intermediate
13 Calculate interest lost for paying invoices prior to their due dates.
(1) Intermediate
16 List possible duplicate payments based on invoice date, vendor name and
the absolute value of the check amount. (1) Novice
17 List possible duplicate payments based on invoice date, invoice number and
the absolute value of the check amount. (1) Novice
20 Summarize debit memos on vendor, issuer, and type for exceptions and
unusual trends. (3) Novice
(PAID_FILE) - This file consists of one year of invoices (1/1/96 to 12/31/96) and
their associated payments used to process most accounts payable applications. Each
record is uniquely defined by an invoice number. Please note the Check_Amount
field is the invoice amount which, when paid, has a Check_Date that is not equal
to zero (“000101”). Below is the data structure which is followed by a field
explanation list:
Data Structure
729 Records using PAIDFILE.FIL as the data file with
activity from 1/1/96 to 12/31/96
Data Structure
354 Records using PO_FILE.FIL as the data file.
3 Stratify all paid invoice activity for the period on invoice amount and
check date - These reports could be reviewed with management for their
reasonableness. Care should be taken with regard to large negative or
positive transactions that may need specific identification and review.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the AP_VERIFY batch, and then clicking “Run” in the
resulting Message box.
When running this batch you will be prompted to enter the aging date. This
parameter is required to allow the AGE command to stratify on the Check_Date.
Please note: The Check_Date field has not been verified considering it has
dates of “19000101”. These dates are properly not considered valid by ACL although
they do serve a purpose, designating those invoices not paid as of the date of the file.
The batch will terminate if there are any invalid fields detected using the Verify
command. If the data is valid, processing will continue with AP_VERIFY which is
listed below.
DO AP_VERIFY1 IF WRITE1=0
PAUSE ‘BATCH TERMINATED - The data used has an INVALID
field/fields. Please review the Last Result window to
determine INVALID field/fields’ IF WRITE1>0
DELETE ALL OK
SET SAFETY ON
AP_VERIFY1
PURCHASE_VERIFY
Overview
Then look no further than the following batch. With it, audit tests can be tailored to
single large payments, accumulated payments to vendors, varying approvals or
check timing. Percentage coverage was never so easy to calculate. Further, payment
patterns can be scrutinized to assess any potential administrative burden.
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required to execute the following batch. Since the PAID_FILE is made of invoice
records, the Check_Amount field is actually the amount paid for that particular
invoice when the Check_Date is not equal to zero or “000101”. If equal to zero,
the Check_Amount field represents an open invoice amount.
Required
<Check_Amount>
<Check_Number>
<Check_Date>
<PO_Number>
<Vendor_Name>
To test the validity of the data used in this application, execute the AP_VERIFY
batch. Please note the second stratification in this batch (on check amount) provides
such a wide-angle focus of the activity; it was used in the AP_VERIFY batch as
further explained in Chapter 3.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_1 batch, and then clicking “Run” in the
resulting Message box.
When running this batch you will be prompted to enter the aging date (i.e. the date
of the last payment in the file). This parameter is required to allow the AGE
command to age on Check_Date. If using the sample data provided with the
Toolkit, enter the date 12/31/96 in YYYYMMDD format (i.e. 19961231).
To stratify on accumulated vendor payments (see the Audit Steps section below for
procedures to perform using the resulting report):
OPEN PAID_FILE
CLASSIFY ON Vendor_Name ACCUMULATE Check_Amount TO VENDORS
IF Check_Date<>‘19000101’
OPEN VENDORS
STRATIFY ON Check_Amount ACCUMULATE Check_Amount TO SCREEN
free 0,100, 1000, 5000, 10000, 50000, 100000, 500000,
1000000 header=‘Stratify on Vendor_Balance’
To stratify on check payments (see the Audit Steps section below for procedures to
perform using the resulting report):
OPEN PAID_FILE
CLASSIFY ON Check_Number ACCUMULATE Check_Amount TO CHECKS
IF Check_Date<>‘19000101’
OPEN CHECKS
STRATIFY ON Check_Amount ACCUMULATE Check_Amount TO SCREEN
free 0,100, 1000, 5000, 10000, 50000, 100000, 500000,
1000000 header=‘Stratify on Check Balance’
To stratify on invoice payment (see the Audit Steps section below for procedures to
perform using the resulting report):
OPEN PAID_FILE
STRATIFY ON Check_Amount ACCUMULATE Check_Amount TO SCREEN
free 0,100, 1000, 5000, 10000, 50000, 100000, 500000,
1000000 header=‘Stratify on Invoice Amount’ IF
Check_Date<>‘19000101’
To stratify on purchase order payments (see the Audit Steps section below for
procedures to perform using the resulting report):
OPEN PAID_FILE
CLASSIFY ON PO_Number ACCUMULATE Check_Amount TO PO IF
Check_Date<>‘19000101’
OPEN PO
STRATIFY ON Check_Amount ACCUMULATE Check_Amount TO SCREEN
free 0,100, 1000, 5000, 10000, 50000, 100000, 500000,
1000000 header=’Stratify on Purchase Order Amount’
To stratify on approval limits (see the Audit Steps section below for procedures to
perform using the resulting report):
OPEN Paid_File
Stratify ON Check_Amount ACCUMULATE Check_Amount TO SCREEN
free 0, X,5000000 header=’Stratify on Approval Limit’
IF Check_Date<>‘19000101’
To stratify on check date (see the Audit Steps section below for procedures to
perform using the resulting report):
Audit Steps
■ assessing whether such limits are effective. If the majority of payments fall
below established approval limits, a judgment should be made as to whether
the limit should be lowered in response. Such activity may also signal a
bypass of controls (i.e. - management intentionally requests invoices below
the limit that relinquishes the need for approval)
■ planning for compliance sampling on such limits as performed in
Application 6 in this chapter.
■ To focus audit efforts more precisely, use the time adjustment batch, as
explained in Helpful Hints section of Chapter 3, to select an appropriate
period for review.
■ For continuous auditing purposes or as a managerial tool, the stratification
of each check run’s data prior to payment may detect potential errors or
irregularities.
■ Use the stratification percentages as a guide to accurately communicate the
coverages obtained in audit tests. For example, “95% of invoices greater
than $50,000, representing 62% of the total dollar expenditures during
1995, were found to be properly approved”.
Overview
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required to execute the following batch:
Required
<Check_Amount>
<Vendor_Name>
<Vendor_Address>
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_2 batch, and then clicking “Run” in the
resulting Message box.
In the command shown below, note that use of the FIND() function with “BOX”
will return a match regardless of the case since this function is not case sensitive. It is
possible that the use of “BOX” will extract more items than necessary (i.e. - The
Boxer Association), but it is best to be less rather than more specific in these searches
to ensure the completeness of processing.
To create a summarized file on the vendor name (see the Audit Steps section below
for procedures to perform using the resulting file):
Using POBOX or PO_VENDORS, review the vendor files to ensure that all payments
were made for properly approved and valid expenses of the organization. The
preferred filing system with this test is a sort by vendor name. If this is not the case,
open POBOX and sort on whichever field is most appropriate to the filing system
encountered (i.e. - by invoice batch, invoice number, etc.)
Since this exercise may detect fraud, it may be beneficial to locate the invoices or
vendor files independent of the accounts payable department to prevent any
forewarning of the ensuing testwork.
Overview
There is no more classic fraud detection technique than the matching of the vendor
file to the payroll masterfile. The match may detect a fraud scheme to update the
vendor masterfile with the name of an employee and process unapproved payments
through the improper account
PAID_FILE
Required Useful
<Check_Amount> <Check_Date>
<Vendor_Name> <Invoice_Number>
<Invoice_Batch>
To test the validity of the data used in this application, execute the AP_VERIFY and
PAYROLL_VERIFY batches.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_3 batch, and then clicking “Run” in the
resulting Message box.
The following “LIST” command will create a text copy of the line shown below with
the Employee_Last_Name field replaced with the actual employee names. A
new text line will be created for each employee in the PAYROLL_FILE. See the
subsequent note below for how to complete batch processing with these lines of text.
Also, be sure, at a minimum, to type the SET SAFETY OFF, USE PAID_FILE
and SET SAFETY ON commands prior to execution. To execute this new batch,
select “Tools” from the menu bar, choose “Do Batch” and double click on
“ACCPAY_3_RESULTS”.
OPEN ACCPAY3
Audit Steps
Using ACCPAY3.LOG, review the vendor files to ensure that all payments were
made for properly approved and valid expenses of the organization.
Since this exercise may detect fraud, it may be beneficial to locate the invoices or
vendor files independent of the accounts payable department to prevent any
forewarning regarding the ensuing testwork.
Helpful Hints
Understanding the nature and extent of price increases during the year can be of
interest to purchasing managers and auditors alike. Although in dollar terms a price
change within the year may go unnoticed, such a change, when viewed in annualized
percentage terms, could demand increased attention.
Not only are price changes an issue for review but they can lead to processing
inefficiencies within the purchasing function. In line with the saying, “Do it right the
first time,” purchase orders should guide the payment process. For example, in
many accounts payable systems, material dollar changes between the purchase order
and invoice price must be approved by a party independent of the accounts payable
function (usually the purchasing manager) prior to payment. Thus, in this
purchasing environment:
■ saved time through the approval of purchase terms once, assumedly by the
purchasing manager, when the purchase order is created
■ payment based on the lower of the purchase order or invoice price
■ less administrative burden of invoice reconciliation which is appropriately
placed on the vendor.
Required Useful
<Inventory_Number> <Vendor_Name>or<Vendor_Number>
<PO_Date_1>
<PO_Price_1>
<PO_Number_1>
<PO_Date_2>
<PO_Price_2>
<PO_Number_2>
To test the validity of the data used in this application, execute the
INVENTORY_VERIFY batch.
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required and/or useful to execute the ACCPAY_5 batch:
Required Useful
<Check_Amount> <Check_Date>
<Invoice_Number>
<Vendor_Number>or<Vendor_Name>
<Inv_Batch>
<Inv_Date>
<PO_Date>
Required
<PO_Total_Amount>
<PO_Number>
To test the validity of the data used in this application, execute the AP_VERIFY and
PO_VERIFY batches.
Batch - Application 4
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_4 batch, and then clicking “Run” in the
resulting Message box. When running the batch you will be prompted to enter the
aging date (i.e. date of the last payment in the file). This parameter is required to
allow the AGE() function to work properly. If using the sample data provided with
the Toolkit, enter the date 12/31/96 in YYMMDD format (i.e. 961231).
ASSIGN AGEDATE=CTOD(AGE_DATE)
SET FILTER TO AGE(PO_1,AGEDATE)<365 AND
AGE(PO_Date_1,AGEDATE)>=0 AND
AGE(PO_Date_2,AGEDATE)<365 AND
AGE(PO_Date_2,AGEDATE)>=0
The above filter assumes there will be no more than one year reviewed. The analysis
could be reviewed for multiple years by changing the number of days above from 365
to the desired time period. Remember if this is completed to also change the number
365 in the “DEFINE FIELD” commands shown below to an equivalent number of
days.
To sort the price changes in a descending fashion (see the Audit Steps section below
for procedures to perform using the resulting file):
Batch - Application 5
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_5 batch, and then clicking “Run” in the
resulting Message box.
To join the purchase order original amount to that paid under the purchase order
(see the Audit Steps section below for procedures to perform using the resulting file):
These files (POPRICE_DESCEND and POINV) can be used for two purposes:
Assuming an estimate in both time and routing costs for each over $10.00 approval
made, the total of these estimates could be used to support the empowerment of the
accounts payable accountant.
2 Test the established approval process: Using the stratifications explained above
will identify the variances’ size which can then be applied by either sorting the
differences in a descending fashion or simply extracting those variances deemed
appropriate. If there is no empowerment of the accounts payable function as
explained in Overview above, proper approval should be noted on each purchase
order/invoice showing a variance considered material by management. A useful
summarization on Vendor Name or Vendor Number can highlight those vendors
with a habit of changing prices.
The accuracy of purchase order prices can also be tested using the above reports by
reviewing unreasonable variances. It is common for prices to be entered incorrectly
in purchase orders. It is also common for a lower price to be entered in the approved
purchase order when the invoice price is much higher. This may detect inadequate
planning or an attempt to circumvent established controls. You may find it beneficial
Overview
Although it is possible to select a random sample from the entire paid file (see first
selection in batch), it may be more effective to make selections based on the
transaction type. For example, in a compliance sample of expenditures with
purchase orders, invoices would not have to be reviewed for their proper approval, as
the purchase order has eliminated the need. Classifying samples in this way leads to
a more focused audit analysis and clearer recommendations to management.
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required and/or useful to execute the ACCPAY_6 batch. Please note it is assumed
that the check number and invoice number are the references used by the accounting
system to locate the invoice package. It may be necessary to include or substitute
additional fields such as the voucher number, invoice batch, etc., depending on the
payment references used by the accounting system:
Required Useful
<Check_Amount> <Check_Date>
<Check_Number> <Invoice_Date>
<Invoice_Number> <Invoice_Batch>
<PO_Number> <Vendor_Number>
<Manual_Chk_Ind> <Vendor_Name>
To test the validity of the data used in this application, execute the AP_VERIFY
batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_6 batch, and then clicking “Run” in the
resulting Message box.
The above statements prompt you to enter the number of sample items you wish to
select. The first ACCEPT statement requests the number of items if a random sample
of the entire population, regardless of expenditure type, is being executed. If you do
not wish to select any sample items from a particular category (i.e. - manual checks,
Non PO items, etc.), enter 0 at the appropriate ACCEPT command. Based on the
entries, the below “DO BATCH” commands will be executed. Also, certain
“PAUSE” statements have been added if (1) no items meet your criteria (2) you enter
0 at any of the ACCEPT commands above or (3) you select more sample items than
there are items meeting the criteria in the file. For example, if there are 0 purchase
orders in a file or you wish to sample 25 purchase orders when there are only 15 in
the file, the particular batch will not execute and the PAUSE statement will appear
notifying you of such occurrence. In each of these instance, Select “OK” to further
commence batch processing.
OPEN PAID_FILE
To select a simple random sample (see AP_SAMPLE batch for further processing):
COUNT
DO AP_SAMPLE IF VALUE(ITEMS,0)>0 AND COUNT1>VALUE(ITEMS,0)
PAUSE ‘The basic random sample did not process since
either there are no records in the file or the number
sampled>number of records in the file.’ IF COUNT1=0 OR
COUNT1<VALUE(ITEMS,0)
PAUSE ‘The basic random sample did not process since there
were no selected items.’ IF VALUE(ITEMS,0)=0
To select a sample of purchase order invoices (see PO_SAMPLE batch for further
processing):
COUNT IF PO_Number<>‘ ’
DO PO_SAMPLE IF VALUE(ITEMSPO,0)>0 AND
COUNT1>VALUE(ITEMSPO,0)
PAUSE ‘The sample for purchase orders did not process
since either there are no POs or the number POs
sampled>number in the file.’ IF COUNT1=0 OR
COUNT1<VALUE(ITEMSPO,0)
PAUSE ‘The sample for purchase orders did not process
since there were no selected items.’ IF
VALUE(ITEMSPO,0)=0
COUNT IF PO_Number=’ ‘
DO NOPO_SAMPLE IF VALUE(ITEMSNOPO,0)>0 AND
COUNT1>VALUE(ITEMSNOPO,0)
To select a sample of invoices paid by manual checks (see MAN_SAMPLE batch for
further processing):
COUNT IF UPPER(Man_Chk_Ind)=‘Y’
DO MAN_SAMPLE IF VALUE(ITEMSMAN,0)>0 AND
COUNT1>VALUE(ITEMSMAN,0)
PAUSE ‘The sample for manual checks did not process since
either there are no manual checks or the number of
manuals sampled>number in the file.’ IF COUNT1=0 OR
COUNT1<VALUE(ITEMSMAN,0)
PAUSE ‘The sample for manual checks did not process since
there were no selected items.’ IF VALUE(ITEMSMAN,0)=0
To select a sample of invoices over the user defined approval limit (see
OVR_SAMPLE batch for further processing):
COUNT IF Check_Amount>VALUE(LIMIT,0)
DO OVR_SAMPLE IF VALUE(ITEMSOVR,0)>0 AND
COUNT1>VALUE(ITEMSOVR,0)
PAUSE ‘The sample for over limit checks did not process
since either there are no over limits or the number of
over limits sampled>number in the file.’ IF COUNT1=0 OR
COUNT1<VALUE(ITEMSOVR,0)
PAUSE ‘The sample for over limit checks did not process
since there were no selected items.’ IF
VALUE(ITEMSOVR,0)=0
To select a sample of invoices under the user defined approval limit (see
UND_SAMPLE batch for further processing):
The actual sample batches are as follows. These batches were “triggered” by the “DO
BATCH” command for each type of sample selected. Samples are random, meaning
that each record has an equal opportunity to be selected. This is preferred when
doing compliance testwork. The first command will select a random seed (initial
value for the random number generator) for the sample; the random seed is followed
by the actual sample command.
AP_SAMPLE
To select a simple random sample (see the Audit Steps section below for procedures
to perform using the resulting file):
PO_SAMPLE
To select a sample of purchase order invoices (see the Audit Steps section below for
procedures to perform using the resulting file):
NOPO_SAMPLE
To select a sample of non purchase order invoices (see the Audit Steps section below
for procedures to perform using the resulting file):
MAN_SAMPLE
To select a sample of invoices paid by manual checks (see the Audit Steps section
below for procedures to perform using the resulting file):
To select a sample of invoices over the user defined approval limit (see the Audit Steps
section below for procedures to perform using the resulting file):
UND_SAMPLE
To select a sample of invoices under the user defined approval limit (see the Audit
Steps section below for procedures to perform using the resulting file):
Audit Steps
The following tests could be performed, depending on the nature of the sample
selected, to assist the auditor in determining whether reasonable assurance has been
achieved with regard to the associated audit objectives:
Helpful Hints
Overview
Gaps may signal incomplete data processing or, in the situation of checks, possible
misappropriated assets. Usually, a method of documenting these occurrences, along
with a review by an independent party, is sufficient to ensure the completeness and
accuracy of processing.
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required to execute the ACCPAY_7 batch:
Required
<Check_Number>
<Check_Amount>
<Invoice_Batch>
<PO_Number>
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_7 batch, and then clicking “Run” in the
resulting Message box.
To sequence gaps on invoice batches (see the Audit Steps section below for
procedures to perform using the resulting report):
To sequence gaps on purchase order numbers (see the Audit Steps section below for
procedures to perform using the resulting report):
To sequence gaps on check numbers (see the Audit Steps section below for
procedures to perform using the resulting report):
Audit Steps
Then identify unique gaps (i.e. - 249 gaps in the invoice batch sequence) for inquiry
with management and review of established procedures.
■ What procedures are in place to document and approve all gaps in the
respective sequences?
■ How are gaps communicated to management?
■ Are voided checks properly documented with the signature area removed to
prevent re-use?
Overview
Many purchase order packages maintain the user IDs for each issuance and approval
of a purchase order. The ability to issue or approve a purchase order should be
limited to only those individuals empowered to initiate purchases within the
organization (i.e., purchasing manager, controller, etc.).
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required and/or useful to execute the ACCPAY_8 batch:
Required
<PO_Approver>
<PO_Issuer>
<Check_Amount>
To test the validity of the data used in this application, execute the AP_VERIFY
batch.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_8 batch, and then clicking “Run” in the
resulting Message box.
To classify amounts paid on purchase order approver (see the Audit Steps section
below for procedures to perform using the resulting file):
To classify amounts paid on purchase order issuer (see the Audit Steps section below
for procedures to perform using the resulting file):
Audit Steps
Review these files with the appropriate level of management, paying special
attention to any unauthorized or inappropriate user access. Considering the data
encompasses the entire audit period, any attempts to update user access listings
immediately prior to the audit would be detected (see further testwork in Chapter 10
- Electronic Data Processing).
1 Periodic review of the changes made to the purchase order user masterfile.
Overview
Materiality is the name of the game, especially when audit resources are limited.
With that in mind, extractions of significant items for detailed or other compliance
testwork is an effective means to gain audit coverage while lowering the extent of
additional sampling. Intercompany transactions are excluded from this exercise as
they would be eliminated from consolidated statements.
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required to execute the ACCPAY_9 batch:
To test the validity of the data used in this application, execute the AP_VERIFY
batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_9 batch, and then clicking “Run” in the
resulting Message box.
3 If using the sample data provided, use “OUR” as the intercompany name to
exclude.
Prior to setting the above variable, it is suggested that the stratification command
related to invoice payment size in ACCPAY_1 be issued. This will enable the auditor
to understand the number of transactions over a significant level along with the
respective audit coverage obtained.
See the Audit Steps section below for procedures to perform using the resulting
KEY_FILE file:
OPEN KEY_FILE
DEFINE REPORT DEFAULT_VIEW
SET SAFETY ON
Audit Steps
Any number of audit tests could be performed on the resulting purchases. For
guidance, review the compliance sample testwork as explained in the Audit Steps
section of Application 6 in this chapter.
Overview
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required to execute the ACCPAY_10 batch:
Required
<Check_Amount>
<Check_Date>
To test the validity of the data used in this application, execute the AP_VERIFY
batch.
Batch
The sample that follows uses invoices as the sampling units. In other words,
individual invoices are sampled rather than entire vendor balances, providing the
same level of statistical audit coverage over the period end balance. This can be
achieved through a Monetary Unit, Fixed Interval sample. For a more detailed
explanation of the Sampling features, consult the ACL for Windows Reference
Manual which accompanies the software.
■ Reconcile the balance per the entity’s records to the file used prior to
processing. To calculate the total open payables per the PAID_FILE file,
type the command “TOTAL Check_Amount IF
Check_Date=‘19000101’” at the command and log prompt.
■ Select “Sampling” from the menu bar, choose “Size” and calculate the
sample size. Remember that only open invoices (those with a
Check_Date of ‘19000101’) which are not intercompany will be
selected for sampling. Therefore, if using the sample data provided, the
“Population” would be calculated by the following command (assuming
‘OUR’ is the intercompany name):
“Total Check_Amount IF Check_Date=‘19000101’ and NOT
FIND(‘OUR’, Vendor_Name)
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_10 batch, and then clicking “Run” in the
resulting Message box.
To select the MUS sample (see the Audit Steps section below for procedures to
perform using the resulting file):
To export the information into a Microsoft Word mail merge format, the following
command is issued. This format allows the merging of vendor data, as created by
ACL, with a blank confirmation form in the Microsoft Word application. ACL for
Windows currently supports mail merge with Word and WordPerfect.
The following command is executed to create a log, in Excel format, which acts as a
documented monitoring tool for those confirmations received or still outstanding.
Audit Steps
Mail and log confirmations upon receipt. Investigate any confirmations not
returned or returned undelivered. Second requests should be mailed for these. If
responses are not expected to be received by period end, additional procedures
should be considered such as invoice or (after period end) check payment
observation.
A quick way to observe check payments is to join the SAMPLE_AP along with an
after period end PAID_FILE as follows:
Overview
The answers to the above questions are available in one searchable report, as
described below.
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required to execute the ACCPAY_11 batch:
Required
<Check_Amount>
<Discount>
To test the validity of the data used in this application, execute the AP_VERIFY
batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_11 batch, and then clicking “Run” in the
resulting Message box.
The following fields will calculate interest lost for not paying invoices at 30, 45, and
60 days assuming a 7% rate of interest. If the rate of interest you wish to use is
different than this percentage, update the three field definitions below (see .07 in the
beginning of each of the definitions). Also please note that the division of certain
fields is multiplied by 1.000 in the field definition below. This is completed to avoid
any calculation inaccuracies due to the rounding of minuscule percentages.
The field below will become the total payments made to the vendor after various
sorting and summarizations which follow.
Prior to sorting, the batch requires that only paid invoices with valid invoice dates
and amounts be processed. Otherwise, inaccurate DPO calculations or division by
zero may occur. The batch also does not process any invoices with a financial
discount which would artificially lower the DPO. These amounts can be tested
further in Application 12 in this chapter.
The previous commands have essentially created a file with a record for each check
amount along with the total payments to the vendor (Sum_of_Checks). Using
these amounts, a weighting of the DPO will be computed. Review this example to
understand how the Vendor_DPO field is defined. Then review the
Vendor_Sum_DPO file, completed later in the batch, for the final results:
Weighted DPO 22
DELETE Vendor_DPO OK
DELETE ALL OK
OPEN PAID_FILE
DELETE Interest_Lost_30 OK
DELETE Interest_Lost_45 OK
DELETE Interest_Lost_60 OK
DELETE DPO OK
DELETE Sum_of_checks OK
OPEN Vendor_Sum_DPO
It may be helpful to set the printer to “Landscape” prior to batch execution so that
the four fields accumulated below will appear on the final printed report.
To stratify on the weighted days payable outstanding (see the Audit Steps section
below for procedures to perform using the resulting report):
Audit Steps
The printed stratification brings into clearer focus where we are with relation to
vendor payments and interest lost as opposed to where we want to be. After
reviewing this report, try extracting the “100 worst offenders” (defined as those with
the lowest DPO) by sorting on the Vendor_DPO field in ascending fashion and
extracting if RECNO()<101. If practicable, and with the permission of purchasing
management, these “offenders” could be contacted to request new terms, either
through an offer of a financial discount for early payment or the allowance of
extended payment terms.The average weighted DPO for the organization can be
calculated by executing the following commands, preferably in a batch form.
(Review the total of the Total_DPO field in the Last Result window after
execution.)
Helpful Hints
Payment timing cannot be analyzed in a vacuum. It must take into consideration any
financial discounts taken for early payment (which this batch does not due to the
artificially low DPO it would create), improved pricing in the marketplace or better
service due to early payment terms. Although the last two benefits cannot be
reviewed effectively using ACL for Windows, the first can through the execution of
Application 12. (Application 12 summarizes by vendor the total expenditure amount
upon which discounts were taken and the total amount upon which no discounts
were taken).
Overview
The objective of this batch is to match all vendor activity when a financial discount
was taken, to an activity when a discount was not taken. Quantifying these detects
weaknesses in the negotiated payment terms with vendors or in the invoice approval
process. To better understand the potential for loss in these instances, a 2% discount
for payment within 10 days equates to a 36.7% annualized return on investment,
after subtracting the lost interest due to early payment. Such returns are difficult to
attain, even when the stock market is running at its peak. Further, this return is
attained with little or no risk which is stark in comparison to the risk of investing in
equities.
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required to execute the ACCPAY_12 batch:
Required
<Check_Amount>
To test the validity of the data used in this application, execute the AP_VERIFY
batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_12 batch, and then clicking “Run” in the
resulting Message box.
The following classifications will create one file of all vendors not paid a discount
and another of all vendors with whom a discount was taken. Later in the batch, these
two files will be merged and sequenced for duplicates to create one file of vendors
with discounts taken/not taken.
A sample of the resulting report is presented below (see the Audit Steps section below
for procedures to perform using the resulting file):
Audit Steps
OPEN PAID_FILE
EXTRACT RECORD IF MATCH(Vendor_Name,‘Coffee
Service’,‘Equipment Maintenance’,‘Health Care
Service’,‘Raw Materials Corp’,‘Skys the Limit
Publishing’) AND Discount=0 TO DISD
OPEN DISD
Use of this detailed report will assist the inspection of vendor files.
It could also be recommended that all invoices initially be recorded in the accounts
payable system net of available discounts. When the invoice is paid, any discount not
taken could be recorded in a “Lost Discount” account. Such a process eliminates the
need for the audit testwork outlined in this application. The only report necessary
would be one that summarizes, on vendor name, the “Lost Discount” account.
Helpful Hints
It must be noted that this report only detects discounts not taken when a discount
has been taken at other times in the audit period. Discounts not taken at all from
a particular vendor cannot be reviewed in this report. To retrieve a complete list of
available discounts not taken, it is best to code such activity. A miscellaneous data
field could be used to place a ‘Y’ for a discountable invoice or to record the actual
discount available. ACL could then be used to define these fields and extract
accordingly.
Overview
Most accounts payable systems automatically pay invoices based on a check date that
is either user-defined upon invoice entry or calculated by adding user-defined
payment terms to the entered invoice date. Assuming check processing occurs each
Friday, invoices expected to be paid from that day through the following Thursday
will be processed. Therefore, invoices paid within a seven-day window could
conceivably be acceptable early payments while any processing prior to this window
could be extracted and reviewed.
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required to execute the ACCPAY_13 batch:
Required Useful
<Check_Date> <Check_Number>
<Check_Amount> <Invoice_Batch>
<Discount> <Invoice_Number>
To test the validity of the data used in this application, execute the AP_VERIFY
batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_13 batch, and then clicking “Run” in the
resulting Message box.
Using the example in Overview above, an entry of 7 for the following ACCEPT
command would detect any payments made one week prior to the expected pay date
in the system:
To calculate the days before or after the established pay date that an invoice is paid:
To calculate the difference in payment terms established and the actual time to pay:
To calculate interest lost for not paying invoices at the expected pay date assuming a
7% rate of interest (If the rate of interest you wish to use is different than this
percentage, update the field definition):
To ensure accurate processing, the batch requires that only paid invoices with valid
dates and amounts be extracted. This is accomplished by the numerous statements
below.
To sort and classify the early paid invoices by vendor (see the Audit Steps section
below for procedures to perform using the resulting file):
4 Assess the reasons for early payment per inquiry of purchasing and
accounts payable management.
Overview
Large numbers of checks to any one vendor can signal inefficiencies in the payment
processing function. One such solution is to pay on a monthly basis. This could be
initiated either by requesting a monthly invoice from the vendor or by negotiating
for proxy terms. These terms specify that all invoices received in the current month
would be paid a certain number of days after month end (usually thirty). Such terms
would need to be analyzed for their associated costs and benefits coupled with the
increased efficiencies in the payment process.
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required to execute the ACCPAY_14 batch:
Required
<Check_Amount>
<Check_Number>
<Vendor_Name>
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_14 batch, and then clicking “Run” in the
resulting Message box.
The batch will assume that only one check could be written a month to each vendor
(even though this cannot always be possible) with the number of months set by the
below “ACCEPT” command. If using the sample data, Enter “12”.
To first summarize the data by check number and then summarize the checks by
vendor name. The resulting file CHK_SUMM_VEN, will be used in a subsequent
Extract command below:
To extract vendors with more than one check written in a given month (see the Audit
Steps section below for procedures to perform using the resulting file):
Audit Steps
A simple sort in descending order of the Count field in the OVER_X_CHECKS file
will lead the auditor to the most frequently paid vendors. These could be targeted for
requests for monthly billings or improved payment terms.
Discuss with management whether changes to the payment system are feasible. One
obstacle to monthly processing may be that the vendor is not able to continue as a
going concern without more frequent payments to meet current costs. Uncovering
this fact may raise another issue as to why the organization is doing business with
such “fly by night” operations.
Overview
The below applications provide a sample, but not a conclusive, approach to test for
such duplication. Some free advice, “Don’t pay an accounts payable consultant for
what ACL and some research can do for you”.
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required to execute the ACCPAY_15_16_17 batch:
Required Useful
<Check_Amount> <Check_Number>
<Check_Date> <Invoice_Batch>
To test the validity of the data used in this application, execute the AP_VERIFY
batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_15_16_17 batch, and then clicking
“Run” in the resulting Message box.
To sequence on matching invoice number, vendor name and the absolute value of
the check amount (see the Audit Steps section below for procedures to perform using
the resulting file):
To sequence on matching invoice date, vendor name and the absolute value of the
check amount (see the Audit Steps section below for procedures to perform using the
resulting file):
Audit Steps
To ease review, summarize this file on Invoice_Date (use the DATE() function
to create a character field for summarization) and Vendor_Name and accumulate
the Check_Amount (not absolute). Return to the DUP_DATE_VEN_NET file. For
all vendors with an accumulation greater than zero, review the invoice number field
to determine whether a duplicate has occurred. Much of the activity reviewed
should represent numerous invoices from a given vendor sent on the same date (i.e.
- Invoice numbers 10123 and 10124 from the same vendor, both sent on 12/21/95).
For any invoices that appear to be keypunch errors, as in the example in the previous
paragraph, observe the original invoices and discuss them with management to
conclude whether a duplicate payment has occurred.
Once again, the first step is to summarize the file on Invoice_Date (use the
DATE() function to create a character field for summarization) and
Invoice_Number and accumulate the Check_Amount (not absolute). As in
the previous report, return to the DUP_VEN_NET_DATE file. For all vendors with
an accumulation greater than zero, review the vendor name field to determine
whether a duplicate has occurred. Much of the activity reviewed should represent
different vendors who coincidentally sent invoices with the same number, date and
amount.
For any in question, observe the original invoices and discuss them with
management to conclude whether a duplicate payment has occurred.
■ Execute the above reports prior to each pay run during final processing.
■ Review a more detailed and timely analysis of budget to actual costs with
management.
Helpful Hints
Certain accounting packages allow the issuance of partial payments, which therefore
allows a payment to the same vendor with the same invoice number, date and
possibly the same amount. Usually, this transaction requires an additional coding
(i.e. - entering a “P” in a field that may be named Transaction Type to designate
partial payment of an invoice) which could be extracted and reviewed as part of the
testwork explained above.
Overview
The classic unrecorded liability test is to extract material check payments occurring
after period end, review invoice packages, and determine whether the item should
have been expensed prior to period. This test should be performed through the last
date of fieldwork, immediately prior to issuing an opinion relative to the financial
statements.
It is futile to extract those items entered prior to period end and paid after such date
since accounts payable packages that accrue such amounts automatically. However,
ACL could extract items similar to those just explained which were entered after
period end and appear to relate to a prior time. This results in a report that, similar
to the classic example stated above, also puts into question the completeness of the
ending liability reported in the financial statements.
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required to execute the ACCPAY_18 batch:
To test the validity of the data used in this application, execute the AP_VERIFY
batch.
Batches
ACCPAY_18_1
There are two batches listed below that you will use to complete the unrecorded
liability analysis.
The first batch is designed to test the system control which should accrue all open
liabilities at period end. It requires a file to be downloaded at period end. This batch
is executed by opening the Overview window, expanding the list of batches, double-
clicking on the ACCPAY_18_1 batch, and then clicking “Run” in the resulting
Message box.
The following ACCEPT command requires a user-entered date in the same format as
that which is defined for the Check_Date field. For purposes of this batch, the
Check_Date field is defined as YYYYMMDD. If using the data supplied with the
Toolkit, type 19961231.
ACCPAY_18_2
The second batch will complete the extractions explained in Overview above. It
requires a file to be downloaded on the last day of fieldwork. This batch is executed
by opening the Overview window, expanding the list of batches, double-clicking on
the ACCPAY_18_2 batch, and then clicking “Run” in the resulting Message box.
Materiality can be judged by many methods, but regardless of method, the coverage
obtained should be the deciding factor in the established limit. Such coverage can be
assessed through the review of the various stratifications completed in Application 1
in this chapter (most notably, stratification on invoice amounts).
To extract large payments entered after period end (see the Audit Steps section below
for procedures to perform using the resulting file):
Audit Steps
ACCPAY_18_1
The total of the Check_Amount field can be obtained by reviewing either the
Last Result or Command Log windows. This amount should be accrued in
the general ledger at period end for accounts payable invoices. Completion of this
testwork will not only attest to the validity of the data file obtained but also the
system control to accrue such amounts. Further analysis, if necessary, could be
performed using the EXTRACT command.
ACCPAY_18_2
For lack of a better date, the SUSPICIOUS_LIAB file extracts all transactions with
an invoice date prior to period end which were entered after such date. The better
date, under which liability attaches, would be either a service completion date or
receipt date (which are both assumed to not be readily available in the accounts
payable file) depending on whether services or goods were received, respectively.
Using this report, the auditor should perform the associated testwork as explained in
UNRECORD_EXTR to further conclude whether the ending liability is complete.
Overview
Volume discounts: it is amazing how such an elementary concept could be lost sight
of when applied in practice. Lately, organizations tend to make decisions in a
decentralized fashion, most likely due to the surge of employee empowerment. This
apparent lack of coordination leads to dysfunctional purchasing; the focus is on the
individual’s needs, not the organization’s. Through the merging of information from
various locations, the auditor can begin to coordinate such activity with the
objective of improved pricing and payment terms.
This application does not require a batch. Fewer than a dozen lines of code are
needed, and details will vary with your intended use of the application.
There are no specific data fields from the PAID_FILE file which are required or
useful in this reporting technique.
Application Recommendations
Assume that there are two locations which will be merged. Although it is not
necessary, it is preferred that the locations’ files are created with the same software
package. This will ensure the proper functioning of the Merge command which
requires that both files being merged have identical record structures (which
includes number of fields, field lengths and field definitions). If this is not the case,
the data files will need to be defined in that manner prior to processing.
Further, ACL prefers the files to be sorted in ascending order on a key field. One
approach would be to classify on the vendor’s name accumulating the check
amounts paid and financial discounts taken for the period (CLASSIFY ON
Vendor_Name ACCUMULATE Check_Amount Discount TO
PAID_FILE_LOC_1). Each file could then be extracted to two new files with a
location code attached and merged as follows:
OPEN PAID_FILE_LOC_1
The resulting file will be a vendor listing, sorted on vendor name, with each
corresponding location code attached. Through a quick review, it should be readily
determinable whether coordination of vendor purchases is financially viable. The
Discount field should also be reviewed to ascertain whether any financial discounts
taken with a vendor by one location are not taken by other locations. It may be
helpful to extract from the SORTED file all vendors who provide a discount; this list
could be forwarded to each purchasing manager. Managers could then be instructed
to review this document prior to ordering, to ensure that vendors providing
financial discounts to one location provide equivalent discounts to the remaining
locations in the organization.
Helpful Hints
Overview
Vendor credit memos occur for various events (i.e. - price adjustments) after
payment. Most of these credits call into question the controls surrounding the
review process. Many of the underlying events should have been detected prior to
payment. Summarization of such activity by the entering party, vendor and type of
memo can point to trends which may require the strengthening of related controls.
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required to execute the ACCPAY_20 batch. The following codes, which are not all-
inclusive, are presented in the field <Debit_Memo_Code>:
■ BE - billing errors
To test the validity of the data used in this application, execute the AP_VERIFY
batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_20 batch, and then clicking “Run” in the
resulting Message box.
To classify debit memos on vendor name (see the Audit Steps section below for
procedures to perform using the resulting file):
To classify debit memos on the established codes (see the Audit Steps section below
for procedures to perform using the resulting file):
To classify debit memos on the entering party’s initials (see the Audit Steps section
below for procedures to perform using the resulting file):
To summarize first on the vendor and then on the debit codes recorded, for
additional analysis of the types of codes by vendor:
SET SAFETY ON
The following audit tests should be performed for the various types of credit memos
received from vendors:
Overview
Although it is possible for vendors to provide a credit after the organization has paid
their balance in full, it should be the exception rather than the norm. Such credits
could be for price adjustments, billing errors, duplicate payments or product returns
after payment. All of these listed items call into question the controls surrounding
the review process since most of these credits should have been detected prior to
payment.
The following fields, currently in the PAID_FILE as included with this Toolkit, are
required to execute the ACCPAY_21 batch:
Required
To test the validity of the data used in this application, execute the AP_VERIFY
batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the ACCPAY_21 batch, and then clicking “Run” in the
resulting Message box.
To detect all vendor balances less than zero (see the Audit Steps section below for
procedures to perform using the resulting file):
Audit Steps
Report numbers: 1, 2, 3, 4, 5
Report numbers: 2, 3, 5, 6
Report numbers: 1, 2, 3, 4, 5
Report numbers: 1, 2, 4, 5, 7, 8, 9
1 Stratify payment amounts, hours worked, hourly rates and check dates for
unusual trends and exceptions. (4) Novice
2 Reconcile salaried employee gross pay from one pay period to the next.
(1) Intermediate
4 List all hourly employees working more than the total hours available in a
week. (1) Novice
6 Compare payroll data files to human resource data files to detect additional/
missing employees and differing salary rates. (1) Advanced
7 List possible duplicate payments based on the same day and employee.
(1) Novice
8 List possible duplicate payments based on the check date and the absolute
value of the check amount. (1) Novice
Data Structure
123 Records using PAYRLLFL.FIL as the data file.
Weekly_Net_Pay The net pay for the week which would have been
reported on the employee’s pay check. Represents the
weekly gross pay less any taxes and deductions.
Weekly_OT_15 The overtime pay at 1.5 times the normal salary rate
for the week.
Weekly_OT_20 The overtime pay at 2.0 times the normal salary rate
for the week.
Hours_OT_15 The hours at 1.5 times the normal salary rate for the
week.
Hours_OT_20 The hours at 2.0 times the normal salary rate for the
week.
Data Structure
15 Records using HR_FILE.FIL as the data file.
1 Execute the Verify command on each data field - Review the “Command
and Log” in ACL after batch processing to ensure that the command yielded
the response “0 data validity errors detected”. Please note the batch will
terminate processing at this point, with an appropriate user dialog box, if
the data has any invalid fields.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the HR_VERIFY batch, and then clicking “Run” in the
resulting Message box.
COUNT
DO HR_VERIFY1 IF WRITE1=0 AND COUNT1>=3
PAUSE ‘BATCH TERMINATED - The data used has an INVALID
field/fields. Please review the Last Result window to
determine INVALID field/fields’ IF WRITE1>0
PAUSE ‘BATCH TERMINATED - There are either no records or
less than three records in the file for sampling
purposes ‘IF COUNT1=0 OR COUNT1<3
DELETE ALL OK
SET SAFETY ON
HR_VERIFY1
X=RAND(COUNT1)
SAMPLE ON RECORD RANDOM X NUMBER 3 RECORD TO “HR_SAMP”
OPEN HR_SAMP
DEFINE REPORT DEFAULT_VIEW
PAYROLL_VERIFY
1 Execute the Verify command on each data field - Review the “Command
and Log” after batch processing to ensure that the command yielded the
response “0 data validity errors detected”. Please note the batch will
terminate processing at this point, with an appropriate user dialog box, if
the data has any invalid fields.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PAYROLL_VERIFY batch, and then clicking
“Run” in the resulting Message box.
Prior to opening ACL, it is necessary to change the computer’s system date to the last
payment date in the PAYROLL_FILE file. This will allow the age command, as
used to stratify on the Check_Date, to function properly (if using the sample data
provided with the Toolkit, use 11/22/96).
The batch will terminate if there are any invalid fields detected using the Verify
command or if there are fewer than three records in the file for sampling. If the data
is valid, processing will continue with PAYROLL_VERIFY1 which is listed below.
COUNT
DO PAYROLL_VERIFY1 IF WRITE1=0 AND COUNT1>=3
PAYROLL_VERIFY1
X=RAND(COUNT1)
SAMPLE ON RECORD RANDOM X NUMBER 3 RECORD TO
“PAY_VER_SAMP”
OPEN PAY_VER_SAMP
DEFINE REPORT DEFAULT_VIEW
Overview
The analysis of the range and timing of pay across an organization is an intriguing
way to begin a review of payroll. These preliminary reports will go a long way to
improve the focus and effect of the upcoming audit.
Required
<Check_Date>
<Hours_OT_15>
<Hours_OT_20>
To test the validity of the data used in this application, execute the
PAYROLL_VERIFY batch. The stratification on net pay provides a wide-angle
focus of the activity; it was used in the PAYROLL_VERIFY batch as further
explained in Chapter 3.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PAYROLL_1 batch, and then clicking “Run” in the
resulting Message box.
When running this batch you will be prompted to enter the aging date (i.e. the date
of the last payment in the file). This parameter is required to allow the AGE()
function, as used to stratify on the Check_Date, to function properly. If using the
sample data provided with the Toolkit, enter the date 11/22/96 in YYMMDD format
(i.e. 961122).
Using the Statistics command prior to the stratification will allow for an automatic
calculation of the minimum and maximum occurrences in the selected field. Using
these occurrences, ACL will stratify the field’s data into ten intervals for analysis.
STATISTICS ON %STRFIELD%
To stratify on either gross pay, net pay or the three types of overtime based on a user
defined selection (see the Audit Steps section below for procedures to perform using
the resulting report):
To stratify on check date (see the Audit Steps section below for procedures to
perform using the resulting report):
The batch will print each of the stratifications. If you prefer to view this information
in your favorite spreadsheet or word processing application, open it as a text file in
the preferred application.
DELETE ALL OK
SET SAFETY ON
Audit Steps
■ To focus audit efforts more precisely, use the time adjustment batch (as
explained in the Helpful Hints section of Chapter 3), to select the appropriate
period for review.
■ For continuous auditing purposes or as a managerial tool, the stratification
of each check run’s data prior to payment may detect potential errors or
irregularities.
■ Use the stratification percentages as a guide to accurately communicating
the coverages obtained in audit tests. For example, “22% of weekly
payments greater than $5,000, representing 54% of the total dollar payroll
during 1995, were found to be properly approved.”
Overview
When testing for changes in the current period’s salaried payroll, payroll
accountants commonly reconcile the gross pay from the current to the previous pay
run. Any increases in salary, added employees or additional income will
immediately become apparent since salaried employees should be paid the same
amount each period. The auditor, using ACL, could perform this test for any given
pay date, or for all pay periods throughout the year.
Required
<Check_Date>
<Department_Code>
<Weekly_Grs_Pay>
To test the validity of the data used in this application, execute the
PAYROLL_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PAYROLL_2 batch, and then clicking “Run” in the
resulting Message box.
To classify the amount of each weekly gross pay on check date (see the Audit Steps
section below for procedures to perform using the resulting report):
Even though the Department_Code field is 3 bytes long, the field is in an ASCII
format and therefore, the “IF” statement will search only the first byte of the field for
all salaried employees (Department_Code=’S’).
A B Current to
Prior Period
Check_Date Gross_Pay Difference
7/5/96 142,000.00
7/12/96 142,000.00 (B2-B1) 0.00
7/19/96 144,000.00 (B3-B2) 2,000.00
7/26/96 144,000.00 (B4-B3) 0.00
Overview
Analyticals on gross pay, net pay or other numeric values tend to provide little
comfort when all they show are overall totals. This application allows the user to
pinpoint those employees or departments who contributed to the change within a
given time frame.
Required Useful
<Check_Date> <Employee_Last_Name>
<Department_Code>
<Employee_Number>
To test the validity of the data used in this application, execute the
PAYROLL_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PAYROLL_3 batch, and then clicking “Run” in the
resulting Message box.
For an example using the two ACCEPT commands above, assume you wish to
review the month ended 10/22/96 data with relation to the month ended 11/22/96
(as consistent with the data supplied in the file). In this case, enter 31 (for those days
in November) at the first prompt and 31 (for those days in October) at the second
prompt. The first extraction below will be for the data relating to November while
the second would relate to October.
To extract the second window (October in the sample data example used above) to
be merged later in the batch with the second window of time:
ASSIGN WINDOW3=(VALUE(Window1,0)+VALUE(Window2,0))
EXTRACT TO EXTRACTED FIELDS IF AGE(Check_Date)<=WINDOW3
and AGE(Check_Date)>=0 and
AGE(Check_Date)>VALUE(WINDOW1,0)
%AVGFIELD% Employee_Number Employee_Last_Name
Department_Code Check_Date “FILE2” as “Extraction”
OPEN EXTRACTED
SUMMARIZE ON Employee Number ACCUMULATE %AVGFIELD% OTHER
Department_Code Employee_Last_Name Extraction TO
SUMMARIZE1 PRESORT
OPEN SUMMARIZED
OPEN SUMMARIZE1 SECONDARY
To merge the two period files into one file based on the employee number for use in
the Sequence command appearing later in the batch:
To summarize the employee data created above into a departmental file (see the
Audit Steps section below for procedures to perform using the resulting file):
DELETE ALL OK
DEFINE REPORT DEFAULT_VIEW
Audit Steps
Such analysis may prove useful not only to auditors but also payroll accountants who
generate these reports prior to the final processing of each pay run. This would
confirm changes in the payroll from the prior period due to:
■ salary increases/decreases
■ bonuses
■ increased/decreased overtime
■ addition/termination of employees
■ unusual payments (i.e. - relocation costs)
■ changes in deductions
Overview
This simple yet effective test can point to control weaknesses within the payroll
accounting software which should have established system checks for such
unreasonable data entry.
Required Useful
<Total_Hours> <Weekly_Net_Pay>
<Check_Date>
<Employee_Last_Name>
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PAYROLL_4 batch, and then clicking “Run” in the
resulting Message box. The batch assumes that pay periods are weekly.
If your organization processes for a different period, modify the number of hours in
the EXTRACT command below to equate to the maximum hours in the pay period.
To extract employees who worked more than 168 hours in one week (see the Audit
Steps section below for procedures to perform using the resulting file):
Audit Steps
Determine through review of payroll registers, time cards, canceled checks and/or
inquiry of management whether the unusual payments took place during the audit
period. Execution of this application prior to each pay run and/or the establishment
of a system control disallowing payment to any employee who reported over 168
hours worked should prevent these occurrences in the future.
It may be beneficial to execute this batch not only for hours reported over 168 but
also for excessive hours. For example, all employees working 126 hours or 18 hour
days for 7 days could be extracted for analysis.
Overview
Required Required
To test the validity of the data used in this application, execute the
PAYROLL_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PAYROLL_5 batch, and then clicking “Run” in the
resulting Message box.
The above statement will prompt you to enter the number of sample items you wish
to select. Based on the entry, the following “DO BATCH” command will be
executed. Also, certain “PAUSE” statements have been added if (1) no items meet
your criteria, (2) you do not select any items to sample or (3) you select more sample
items than there are items meeting the criteria in the file. Select “OK” to continue
batch processing.
OPEN PAYROLL_FILE
The actual sample batch follows. This batch was “triggered” by the “DO
BATCH” command above. Samples are random which is preferred for compliance
testwork because each record has an equal opportunity to be selected. The first
command will select a random seed (initial value for the random number generator)
for the sample. This is followed by the actual sample command.
PAY_SAMPLE
To select the sample (see the Audit Steps section below for procedures to perform
using the resulting file):
The following tests could be performed, depending on the nature of the sample
selected, to assist the auditor in determining whether reasonable assurance has been
achieved with regard to the associated audit objectives:
4 Ensure that only original time cards were processed for payment.
Helpful Hints
Overview
The following testwork assumes the payroll file used for processing is not updated by
the human resource file prior to each pay run. It is common for human resource and
payroll systems to operate independent of each other. This framework leads to “out
of the box” controls such as a reconciliation of the two files prior to each pay run
(sometimes completed once by each department, a massive time waster). Manual
controls open the door for human error or fraud which, in the case of payroll
processing, can lead to unauthorized payments.
To test the validity of the data used in this application, execute the
PAYROLL_VERIFY and HR_VERIFY batches.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PAYROLL_6 batch, and then clicking “Run” in the
resulting Message box.
Through the Join command, ACL has the ability to trace each primary file record to
the secondary file, listing all primary file records that are not in the secondary. With
this in mind, there are four combinations of joined files below, each testing a
different aspect of the payroll/human resource file agreement.
To test for employees in the payroll file and not in the human resource file (see the
Audit Steps section below for procedures to perform using the resulting file):
OPEN HR_FILE
SORT ON Employee_Number TO SORTED1
OPEN PAYROLL_FILE
OPEN SORTED1 SECONDARY
JOIN PKEY Employee_Number FIELDS Employee_Number
Employee_Last_Name Salary_Rate Check_Date Check_Number
Weekly_Net_Pay SKEY Employee_Number UNMATCHED TO
“ADDTL_PAY_EMPLOYEES” PRESORT
To test for employees in the human resource file and not in the payroll file (see the
Audit Steps section below for procedures to perform using the resulting file):
OPEN PAYROLL_FILE
SORT ON Employee_Number TO SORTED1
OPEN HR_FILE
OPEN SORTED1 SECONDARY
JOIN PKEY Employee_Number FIELDS Employee_Number
Employee_Last_Name Salary_Rate SKEY Employee_Number
UNMATCHED TO “ADDTL_HR_EMPLOYEES” PRESORT
CLOSE SECONDARY
To test for employees with payroll rates in the payroll file which are different in the
human resource file (see the Audit Steps section below for procedures to perform
using the resulting file):
Remember, the resulting report will list only the primary records that do not match
the secondary. Therefore, it will be necessary to open the HR_FILE and manually
observe the differences in rates.
OPEN HR_FILE
SORT ON Employee_Number STRING(Salary_Rate,5) TO SORTED1
OPEN PAYROLL_FILE
OPEN SORTED1 SECONDARY
To test for employees with payroll rates in the human resource file that are different
in the payroll file (see the Audit Steps section below for procedures to perform using
the resulting file):
Remember, the resulting report will list only the primary records that do not match
the secondary. Therefore, it will be necessary to open the PAYROLL_FILE and
manually observe the differences in rates.
OPEN PAYROLL_FILE
SORT ON Employee_Number STRING(Salary_Rate,5) TO SORTED1
OPEN HR_FILE
OPEN SORTED1 SECONDARY
JOIN PKEY Employee_Number STRING(Salary_Rate,5) FIELDS
Employee_Number Employee_Last_Name Salary_Rate SKEY
Employee_Number STRING(Salary_Rate,5) UNMATCHED TO
“DIFF_HR_RATES” PRESORT
CLOSE SECONDARY
SET SAFETY ON
Audit Steps
From a risk point of view, Reports 1 and 3 from the PAYROLL_6 batch should be
reviewed closely considering they represent rates that were paid different from the
human resource records or employees not appearing in the human resource records.
Further note that considering the HR_FILE is as of the last day in the pay period,
any pay rate changes since the inception of the PAYROLL_FILE file would be
reported in Report 3.
To test, examine the above reports, review the respective payroll registers and
inquire of management to determine whether:
Helpful Hints
Overview
Required Useful
To test the validity of the data used in this application, execute the
PAYROLL_VERIFY batch.
Batches
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PAYROLL_7_8 batch, and then clicking “Run” in
the resulting Message box.
Sequence duplicate payments based on the employee number and check date (see
the Audit Steps section below for procedures to perform using the resulting file):
Sequence duplicate payments based on the employee address and check date (see the
Audit Steps section below for procedures to perform using the resulting file):
Audit Steps
To determine the accuracy of this finding, trace this file’s information to the payroll
register and canceled check and inquire of management.
(The absolute value is used because the system should allow an employee payment to
be entered, voided and reentered. Otherwise, when using the Sort command, the
positive valued entry and subsequent re-entry of a payment would improperly be
considered a duplicate with no consideration for the void.)
■ Execute the above reports prior to the final processing of each pay run.
■ Personal delivery of checks to employees by a party independent of the
payroll function on a constant or periodic basis.
■ Complete a more detailed and timely analysis of payroll budget to actual
costs.
■ Review a payroll entry edit report (a report of all transactions entered) after
each input session.
■ Complete a salaried employee reconciliation for each pay run, as further
discussed in Application 2 in this chapter.
The following field, currently in the PAYROLL_FILE as included with this Toolkit,
is required to execute the PAYROLL_9 batch:
Required
<Check_Number>
To test the validity of the data used in this application, execute the
PAYROLL_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PAYROLL_9 batch, and then clicking “Run” in the
resulting Message box.
OPEN PAYROLL_FILE
To sequence gaps in the check numbers (see the Audit Steps section below for
procedures to perform using the resulting report):
Report numbers: 3, 4, 9, 10
2 Stratify cash receipts for unusual trends and exceptions. (4) Novice
4 Review the sequence of invoices, sales orders and shipping documents for
gaps. (3) Novice
5 Calculate interest lost for shipments not billed to date. (1) Intermediate
6 Calculate interest lost for the time lag between the shipment being made and
the billing being processed. (1) Intermediate
8 Report customers with old and large account balances. (1) Intermediate
10 Identify customers who have exceeded their credit limit. (1) Novice
Data Structure
240 Records using REVFILE.FIL as the data file.
Credit_Memo_Code The code designating the reason for the credit memo.
Data Structure
50 Records using SHPMNTFL.FIL as the data file and
represents shipments from 9/3/96 to 12/15/96.
1 Execute the Verify command on each data field - Review the “Command
and Log” in ACL after batch processing to ensure that the command yielded
the response “0 data validity errors detected”. Please note
the batch will terminate processing at this point, with an appropriate user
dialog box, if the data has any invalid fields.
2 Total the open invoice amount - Agree the amount in the “Last Result”
window to the organization’s open invoice register (this amount is reported
after the command in the “Last Result” window).
3 Stratify all open invoice amounts for the period on invoice amount and
invoice date - These reports could be reviewed with management for their
reasonableness. Care should be taken with regard to large negative or
positive transactions which may need specific identification and review.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the REVENUE_VERIFY batch, and then clicking
“Run” in the resulting Message box.
When running this batch you will be prompted to enter the aging date (i.e. the date
of the last invoice of the file). This parameter is required to correctly apply the AGE
command to the Invoice_Date. If using the sample data provided with the
Toolkit, enter the date 12/31/96 in YYYYMMDD format (i.e. 19961231).
Please note: The Paid_Date field has not been verified considering it has
dates of ‘19000101’. These dates are properly not considered valid by ACL
although they do serve a purpose, designating those invoices not paid as of the date
of the file.
The batch will terminate if there are any invalid fields detected using the Verify
command or if there are less than five records in the file for sampling. If the data is
valid, processing will continue with REVENUE_VERIFY1 which is listed below.
COUNT IF Paid_Date=‘19000101’
DO REVENUE_VERIFY1 IF WRITE1=0 AND COUNT1>=5
PAUSE ‘BATCH TERMINATED - The data used has an INVALID
field/fields. Please review the Last Result window to
determine INVALID field/fields’ IF WRITE1>0
PAUSE ‘BATCH TERMINATED - There are either no open invoice
items or less than five open invoice items in the file
for sampling purposes’ IF COUNT1<5
DELETE ALL OK
SET SAFETY ON
REVENUE_VERIFY1
To total the open invoice amount balance for agreement to the entity’s open accounts
receivable report:
X=RAND(COUNT1)
SAMPLE ON RECORD RANDOM X NUMBER 5 POPULATION COUNT1
RECORD TO “REVENUE_SAMP” IF Paid_Date=‘19000101’
OPEN REVENUE_SAMP
DEFINE REPORT DEFAULT_VIEW
SHIPMENT_VERIFY
1 Execute the Verify command on each data field - Review the “Command
and Log” in ACL after batch processing to ensure that the command yielded
the response “0 data validity errors detected”. Please note
the batch will terminate processing at this point, with an appropriate user
dialog box, if the data has any invalid fields.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the SHIPMENT_VERIFY batch, and then clicking
“Run” in the resulting Message box.
When running this batch you will be prompted to enter the aging date (i.e. the date
of the last invoice of the file). This parameter is required to allow the AGE()
function, as used to stratify on the Ship_Date, to function properly. If using the
sample data provided with the Toolkit, enter the date 12/31/96 in YYMMDD format
(i.e. 961231).
Please note: The Billing_Date field has not been verified considering it
has dates of `000101`. These dates are properly not considered valid by ACL
although they do serve a purpose, designating those shipments not billed as of the
date of the file.
The batch will terminate if there are any invalid fields detected using the Verify
command or if there are fewer than five records in the file for sampling. If the data is
valid, processing will continue with SHIPMENT_VERIFY1 which is listed below.
COUNT
DO SHIPMENT_VERIFY1 IF WRITE1=0 AND COUNT1>=5
SHIPMENT_VERIFY1
X=RAND(COUNT1)
SAMPLE ON RECORD RANDOM X NUMBER 5 RECORD TO “SHIP_SAMP”
OPEN SHIP_SAMP
DEFINE REPORT DEFAULT_VIEW
Overview
A first step in determining whether reported revenue and accounts receivable are
accurate and complete is to review their characteristics.
These are a few of the questions that can be answered by analyzing the following
stratifications.
Required
<Customer_Name>
<Invoice_Amount>
<Invoice_Date>
<Paid_Date>
<Product_Code>
To test the validity of the data used in this application, execute the
REVENUE_VERIFY batch. Two stratifications in this batch (on invoice amount and
date) provide such a wide-angle focus of the activity that they are used in the
REVENUE_VERIFY batch as further explained in Chapter 3.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the REVENUE_1 batch, and then clicking “Run” in the
resulting Message box.
When running this batch you will be prompted to enter the aging date (i.e. the date
of the last invoice in the file). This parameter is required to correctly apply the AGE
command to the Invoice_Date. If using the sample data provided with the
Toolkit, enter the date 12/28/96 in YYYYMMDD format (i.e.19961228).
GROUP
CLASSIFY ON Customer_Name ACCUMULATE Invoice_Amount TO
CUSTOMERS IF Paid_Date=‘19000101’
CLASSIFY ON Product_Code ACCUMULATE Invoice_Amount TO
PRODUCTS IF Paid_Date=‘19000101’
END
To stratify on accumulated customer invoice amounts (see the Audit Steps section
below for procedures to perform using the resulting report):
OPEN CUSTOMERS
STRATIFY ON Invoice_Amount ACCUMULATE Invoice_Amount TO
SCREEN FREE 0,100, 1000, 5000, 10000, 50000, 100000,
500000, 1000000 HEADER=’Stratification on open customer
balance’
The batch will print each of the stratifications. If you prefer to view this information
in your favorite spreadsheet or word processing application, open it as a text file in
the preferred application.
OPEN REVENUE_FILE
AGE ON Invoice_Date CUTOFF AGE_DATE INTERVAL 0, 7, 14, 21,
30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360
ACCUMULATE Invoice_Amount TO SCREEN HEADER=‘Aging of
open invoice amounts on Invoice_Date’ IF
Paid_Date=‘19000101’
To stratify accumulated invoices on product type (see the Audit Steps section below
for procedures to perform using the resulting report):
OPEN PRODUCTS
STRATIFY ON Invoice_Amount ACCUMULATE Invoice_Amount TO
SCREEN FREE 0,100, 1000, 5000, 10000, 50000, 100000,
500000, 1000000 HEADER=‘Stratification on open invoices
by product code’
To stratify on invoice amount (see the Audit Steps section below for procedures to
perform using the resulting report):
OPEN REVENUE_FILE
STRATIFY ON Invoice_Amount ACCUMULATE Invoice_Amount TO
SCREEN FREE 0,100, 1000, 5000, 10000, 50000, 100000,
500000, 1000000 IF Paid_Date=‘19000101’
HEADER=’Stratification on open invoice amount’
SET SAFETY ON
Audit Steps
■ large accounts where activity could be extracted and further reviewed (i.e. -
top five customers). For customers that comprise a high percentage of the
Helpful Hints
■ To focus audit efforts more precisely, use the time adjustment batch, as
explained in the Helpful Hints section of Chapter 3, to select the appropriate
period for review.
■ For continuous auditing purposes or as a managerial tool, the stratification
of each invoice run’s data prior to processing may detect potential errors or
irregularities.
Overview
Cash is the water spring of the organization which, without adequate monitoring,
could dry up. Although there are better reports to understand customer payment
patterns (i.e. - Application 3 regarding days sales outstanding), the auditor should
perform an initial assessment based on the timing, size and business significance of
each receipt.
Required
<Customer_Name>
<Invoice_Amount_Paid>
<Paid_Date>
To test the validity of the data used in this application, execute the
REVENUE_VERIFY batch. The last stratification in this batch (on receipt size)
provides such a wide-angle focus of the activity, that it was used in the
REVENUE_VERIFY batch as further explained in Chapter 3.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the REVENUE_2 batch, and then clicking “Run” in the
resulting Message box.
When running this batch you will be prompted to enter the aging date (i.e. to the
date of the last invoice in the file). This parameter is required to correctly apply the
AGE command to the Paid_Date. If using the sample data provided with the
Toolkit, enter the date 12/28/96 in YYYYMMDD format (i.e. 19961228).
The following two classifications will be used in the stratifications that follow. Please
note the “IF Paid_Date=‘19000101’” is used to designate invoices not paid
to date.
GROUP
CLASSIFY ON Customer_Name ACCUMULATE Invoice_Amount_Paid
TO CUSTOMERS IF Paid_Date<>‘19000101’
CLASSIFY ON Product_Code ACCUMULATE Invoice_Amount_Paid TO
PRODUCTS IF Paid_Date<>‘19000101’
END
USE CUSTOMERS
STRATIFY ON Invoice_Amount_Paid ACCUMULATE
Invoice_Amount_Paid TO SCREEN FREE 0,100, 1000, 5000,
10000, 50000, 100000, 500000, 1000000
HEADER=’Stratification on Customer Balances Paid’
The batch will print each of the stratifications. If you prefer to view this information
in your favorite spreadsheet or word processing application, open it as a text file in
the preferred application.
To stratify on receipt date (see the Audit Steps section below for procedures to
perform using the resulting report):
OPEN REVENUE_FILE
AGE ON Paid_Date CUTOFF AGE_DATE INTERVAL 0, 7, 14, 21, 30,
60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360
ACCUMULATE Invoice_Amount_Paid TO SCREEN HEADER=’Aging
on Paid_Date’ IF Paid_Date <> ‘19000101’
To stratify accumulated receipts on product type (see the Audit Steps section below
for procedures to perform using the resulting report):
OPEN PRODUCTS
STRATIFY ON Invoice_Amount_Paid ACCUMULATE
Invoice_Amount_Paid TO SCREEN FREE 0,100, 1000, 5000,
10000, 50000, 100000, 500000, 1000000
HEADER=‘Stratification of paid invoice amounts on
product code’
To stratify on receipt amount (see the Audit Steps section below for procedures to
perform using the resulting report):
OPEN REVENUE_FILE
STRATIFY ON Invoice_Amount_Paid ACCUMULATE
Invoice_Amount_Paid TO SCREEN FREE 0, 100, 1000, 5000,
10000, 50000, 100000, 500000, 1000000
Audit Steps
■ large payments which could be extracted and further reviewed (i.e. - top five
paying customers).
■ material customers to assess the organization’s dependency on a limited
number of customers.
■ credit balances (see related testwork in Application 10 in this chapter).
■ To focus audit efforts more precisely, use the time adjustment batch, as
explained in the Helpful Hints section of Chapter 3, to select the appropriate
period for review.
■ For continuous auditing purposes or as a managerial tool, the stratification
of each invoice run’s data prior to processing may detect potential errors or
irregularities.
■ Use the stratification percentages as a guide to accurately communicating
the coverages obtained in audit tests. For example, “37% of receipts greater
than $100,000, representing 58% of the total dollar receipts during 1995,
were found to be accurately recorded”.
Overview
One quick way to identify slow paying customers is to review the over-60-days and
over-90-days categories in the accounts receivable aging report. The only problems
with this approach are that (a) it is not weighted towards higher dollar invoices,
requiring further manual analysis; and (b) it does not display paid invoices, but
rather those still outstanding. DSO calculations are normally performed using
various averaging techniques (i.e. 365 days / sales turnover) that, at times, can
distort the actual results. Only through weighting on payment amount can the truth
be found with regard to the timing of cash receipts.
Required
<Customer_Name>
<Discount>
<Invoice_Amount_Paid>
<Invoice_Date>
<Paid_Date>
<Salesperson_ID>
To test the validity of the data used in this application, execute the
REVENUE_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, and double-clicking on the appropriate batch. Click on “REVENUE_3_C”
for DSO calculation on customer and “REVENUE_3_S” for DSO calculation on
salesperson. Then click “Run” in the resulting Message box.
The following fields will calculate interest lost for customers not paying invoices at
30, 45, and 60 days assuming a 7% rate of interest. If the rate of interest you wish to
use is different than this percentage, update the three field definitions below (see
.07 in the beginning of each of the definitions). Also, please note that the division
The field below will become the total payments made by the customer after various
sorting and summarizations which follow.
Prior to sorting, the batch requires that only paid invoices with valid invoice dates
and amounts be processed. Otherwise, inaccurate DSO calculations or division by
zero may occur. The batch also does not process any invoices with a financial
discount which would artificially lower the DSO.
The previous commands have essentially created a file with a record for each receipt
amount along with the entire customer payments (Sum_of_Payments). Using
these amounts, a weighting of the DSO will be computed. Review this example to
understand how the Customer_DSO field is defined. Then review the
Customer_Sum_DSO file, completed later in the batch, for the final results:
Weighted DSO 20
The last two requirements of the previous command are essential to ensure that no
division by zero occurs in the weighted days sales outstanding calculation.
DELETE Customer_DSO
OPEN REVENUE_FILE
DELETE Interest_Lost_30 OK
DELETE Interest_Lost_45 OK
DELETE Interest_Lost_60 OK
DELETE DSO OK
DELETE Sum_of_payments OK
DELETE ALL OK
OPEN Customer_Sum_DSO
It may be helpful to set the printer to “Landscape” prior to batch execution so that
the four fields accumulated below will appear on the final printed report.
The remainder of the batch will calculate the weighted average DSO for the
organization. The final result is presented in the Last Result window as being
the total of the Total_DSO field.
TOTAL Invoice_Amount_Paid
DEFINE FIELD Total_DSO COMPUTED
(Customer_DSO*(1.00000*Invoice_Amount_Paid/TOTAL1)) IF
Invoice_Amount_Paid<>0
0.00000
TOTAL Total_DSO
DEFINE REPORT DEFAULT_VIEW
Audit Steps
In this section, the auditor is mainly concerned with the proper valuation of the
accounts receivable balance and with understanding organizational cash receipt
trends so as to provide improvements. Such recommendations could be made not
only to credit but also sales management, depending on the batch executed.
■ 25 worst offenders (defined as those with the lowest DSO) - Sort on the
Customer_DSO field in an ascending fashion and extract if
RECNO()<25. Remember that Customer_DSO can either be related to
the customer or the salesperson. Therefore, these reports will identify the
customers “taking the store” or those salespersons who are “holding the
door as they leave” depending on the batch that was executed
(REVENUE_3_C or REVENUE_3_S, respectively). This report can be
used to challenge credit management’s assumptions relative to the initial
approval of sales orders, as well as to pinpoint those customers requiring
added attention.
■ 25 aggregate customer/salesperson receipts - Sort on the
Invoice_Amount_Paid field in a descending fashion and extract if
RECNO()<25.
One last note is that payment timing cannot be analyzed in a vacuum. Depending on
the circumstances, large customers are generally provided additional room for
making payment to ensure a long term relationship. The organization should not
“bite off its nose to spite its face” by not paying attention to this special relationship.
Overview
Required
<Invoice_Number>
Required
<Bill_of_Lading>
<Sales_Order_Number>
<Ship_Quantity>
To test the validity of the data used in this application, execute the
REVENUE_VERIFY and SHIPMENT_VERIFY batches.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the REVENUE_4 batch, and then clicking “Run” in the
resulting Message box.
To sequence gaps on invoice numbers (see the Audit Steps section below for
procedures to perform using the resulting report):
OPEN REVENUE_FILE
GAPS ON Invoice_Number ERRORLIMIT 10 TO SCREEN PRESORT
To sequence gaps on sales order numbers (see the Audit Steps section below for
procedures to perform using the resulting report):
OPEN SHIPMENT_FILE
CLASSIFY ON Sales_Order_Number ACCUMULATE Ship_Quantity TO
CLASSIFIED
OPEN CLASSIFIED
GAPS ON Sales_Order_Number ERRORLIMIT 10 TO SCREEN PRESORT
OPEN SHIPMENT_FILE
GAPS ON Bill_of_Lading ERRORLIMIT 10 TO SCREEN PRESORT
SET SAFETY ON
Audit Steps
■ What procedures are in place to document and approve all gaps in the
respective sequences?
■ How are gaps communicated to management?
■ Are voided checks properly documented with the signature area removed to
prevent re-use?
■ What procedures are in place to document/approve all gaps in the
respective sequences?
■ How are gaps communicated to management?
■ Are voided documents properly recorded with the signature area removed
to prevent re-use?
List shipments already billed with interest lost due to the time lag between the date of
shipment and the date of invoicing.
Overview
As the old adage goes, the faster you invoice your customers, the quicker they are
likely to pay the bill. Although this is not always the case, depending on the terms
afforded to the customer or the existing relationship, it stands to reason that doing so
can only increase the organization’s chances that payment will be made in a swift
manner. Apart from the interest lost, shipments not billed are also a clear sign of
inefficiencies within the invoicing process. Left unattended, these inefficiencies
could lead to inferior customer service and inadequate cash flow.
Required
<Bill_of_Lading>
<Billing_Date>
<Customer_Name>
<Ship_Cost>
<Ship_Date>
<Ship_Price>
<Ship_Quantity>
To test the validity of the data used in this application, you should execute the
SHIPMENT_VERIFY batch described earlier in this chapter.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the REVENUE_5_6 batch, and then clicking “Run” in
the resulting Message box. To ensure the accuracy of this batch processing, be sure to
change the system date to the date of the last shipment in the file prior to opening
ACL. (If using the data supplied with the Toolkit, use 12/15/96).
When running this batch you will be prompted to enter the aging date (i.e. to the
date of the last shipment in the file). This parameter is required to correctly apply the
AGE command to the Ship_Date. If using the sample data provided with the
Toolkit, enter the date 12/15/96 in YYYYMMDD format (i.e. 19961215).
The first portion of this batch will complete Application 5. The batch assumes that all
shipments made have been priced, have a valid shipping date and have not been
billed which is verified using three “IF” requirements in the extraction below:
OPEN SHIPMENT_FILE
EXTRACT TO NOT_BILLED IF Billing_Date=‘19000101’ AND
Ship_Date<>‘000101’ and Ship_Cost<>0 FIELDS
Bill_of_Lading Billing_Date Customer_Name Ship_Date
Ship_Cost Ship_Unit_Price Ship_Quantity
OPEN NOT_BILLED
To calculate potential interest lost for not billing shipments from the date of
shipment, assume a 7% rate of interest. If the rate of interest you wish to use is higher
or lower than this percentage, update the computed field definition below.
To stratify on the shipment date for assessment of the interest lost for not billing
customers who have been shipped product:
This second portion of the batch will complete Application 6. The batch assumes that
all shipments made have been priced and have valid shipping and billing dates which
is verified using three “IF” requirements in the extraction below:
OPEN SHIPMENT_FILE
EXTRACT TO BILL_TIME IF Billing_Date<>‘19000101’ AND
Ship_Date<>‘19000101’ AND Ship_Cost<>0 FIELDS
Bill_of_Lading Billing_Date Customer_Name Ship_Date
Ship_Cost Ship_Unit_Price Ship_Quantity
OPEN BILL_TIME
To calculate a potential interest lost for not billing shipments from the date of
shipment, assuming a 7% rate of interest. If the rate of interest you wish to use is
higher or lower than this percentage, update the field definition.
Audit Steps
The costs to improve the process must be weighed against the expected benefits due
to the increased time value of money. Such costs could include employee training,
additional personnel to ensure a more timely billing, outsourcing of specified
functions and mechanisms to monitor the gaps in invoice sequence. The two
stratifications provide a high level time value analysis which can be later verified by
analyzing the two files NOT_BILLED (Application 5) and BILL_TIME
(Application 6).
Overview
Required
<Invoice_Date>
<Invoice_Amount>
<Paid_Date>
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the REVENUE_7 batch, and then clicking “Run” in the
resulting Message box.
When running this batch you will be prompted to enter the aging date (i.e. to the
date of the printed report). This parameter is required to correctly apply the AGE
command to the Invoice_Date. If using the sample data provided with the
Toolkit, enter the date 12/28/96 in YYYYMMDD format (i.e. 19961228).
Also, obtain a file with the same date as the printed report. This may entail using a
backup of the period end REVENUE_FILE or using a file as of today which can
then be matched to today’s report.
The “IF” Statement below (selecting all items without a Paid_Date) will ensure
that only open items are aged:
Agree the totals per the aging categories in the ACL printed report to the aging
categories in the organization’s printed report. To gain additional assurance, select a
small sample of invoices, recalculate the aging and match it to the appropriate
category in the printed report.
Overview
Required
<Customer_Name>
<Invoice_Date>
<Invoice_Amount>
<Paid_Date>
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the REVENUE_8 batch, and then clicking “Run” in the
resulting Message box.
To ensure the accuracy of this batch processing, obtain a REVENUE_FILE file with
a date at the end of the period you wish to review. (If using the sample data provided
with the Toolkit, use 12/28/96.)
For example, if it is 12/31/96 and you wish to extract all customers that have a
material balance (which will be established in the next acceptance) between 90 and
180 days old, enter 961001 at the first prompt and 960701 at the second prompt.
To filter customer and invoice information based on user date requirements (the
resulting file will be classified later in the batch for analysis purposes):
The classification command is used to finish off the batch providing the auditor with
the “Percentage of ” fields. Such additions allow for a speedy analysis of the relative
Audit Steps
Discuss the resulting report with credit management to determine whether such
balances are expected to be paid. Also review the CUSTOMERS file as created in
Application 2 (summarization of customer cash receipts) to gain an appreciation for
the levels of cash flow received from these customers, especially that which was
received recently.
Overview
Credit limits are set to prevent a disaster (the extension of products and services
without any remuneration). The problem is that the credit manager routinely uses
his/her internal compass in lieu of established credit limits. The auditor, upon
encountering this strategy, should assess this potential effects on the organization.
Required
<Credit_Limit>
<Customer_Name>
<Invoice_Amount>
<Paid_Date>
To test the validity of the data used in this application, execute the
REVENUE_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the REVENUE_9_10 batch, and then clicking “Run” in
the resulting Message box.
To sort and summarize open invoices on the customer name for use in the related
extractions and stratifications appearing later in the batch. For purposes of the
sample data supplied with the Toolkit, invoices are considered open if they do not
possess a paid date as required below:
To extract and stratify the invoice balance for all customer balances over the
established credit limit (see the Audit Steps section below for procedures to perform
using the resulting file):
1 Credit limits are rarely set or followed - At this point, the auditor should
decide whether or not to recommend that credit limits be set. Any over-
extension will be well presented in the two stratifications or, if detail is
required, in the NO_CREDIT or OVER_CREDIT files.
2 Credit limits are set for the majority of customers but there are
numerous occurrences of customers exceeding them - Assuming such
events are properly approved, preferably through written authorization,
there is little cause for alarm. If there is typically no authorization when
limits are exceeded, the situation is actually somewhat worse than in (1)
above, as the setting o f meaningless limits tends to create a false impression
of control. As with any review of credit limits, the customer payment
patterns should be closely monitored. These can be summarized through
the CUSTOMERS.FIL file (created in Application 2 -summarization of
customer cash receipts).
Overview
Customer credit memos are written for various events (i.e. - price adjustments) after
payment. Most of these memos call into question the effectiveness of credit
controlsm as many of the underlying events should have been detected prior to
payment. Summarization of such activity by the credit manager, customer and type
of memo can point to trends which may require the strengthening of these controls.
■ BE - billing errors
■ DP - duplicate payments
■ FR - freight adjustment
■ NA - no credit memo code applicable
■ PA - price adjustments
■ PR - product returns
■ TX - tax adjustment
Required
<Invoice_Amount>
<Credit Memo Code>
<Customer_Name>
<Credit_Manager>
To test the validity of the data used in this application, execute the
REVENUE_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the REVENUE_11 batch, and then clicking “Run” in
the resulting Message box.
To classify credit memos on customer name (see the Audit Steps section below for
procedures to perform using the resulting file):
To classify credit memos on the established codes (see the Audit Steps section below
for procedures to perform using the resulting file):
To classify credit memos on the credit manager (see the Audit Steps section below for
procedures to perform using the resulting file):
To summarize first on the customer and then on the credit codes recorded for
additional analysis of the types of codes by customer (see the Audit Steps section
below for procedures to perform using the resulting file):
The following audit tests should be performed for the various types of credit memos
received from customers:
Overview
Although it is possible to provide customers with a credit after they have paid their
balance in full, it should be the exception rather than the norm. Such credits could be
for price adjustments, billing errors, duplicate payments, product returns after
payment, freight and tax adjustments. All of these listed items call into question the
controls surrounding the review process considering most of these credits should
have been detected prior to payment.
Required
<Customer_Name>
<Invoice_Amount>
To test the validity of the data used in this application, execute the
REVENUE_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the REVENUE_12 batch, and then clicking “Run” in
the resulting Message box.
To detect all customer balances less than zero (see the Audit Steps section below for
procedures to perform using the resulting file):
Overview
Required
<Customer_Address>
<Customer_City>
<Customer_Name>
To test the validity of the data used in this application, execute the
REVENUE_VERIFY batch.
Since this application is testing the existence and accuracy of the receivable balance
as of a given date, this balance, per the entity’s records, should agree with the file
used prior to processing. To calculate the total open receivables per the file, type the
command “TOTAL Invoice_Amount IF Paid_Date<>‘19000101’” at
the command and log prompt.
Batch
The sample that follows uses invoices as the sampling units. In other words,
individual invoices are sampled on a monetary-unit, fixed-interval basis rather than
entire customer balances. This provides the same level of statistical audit coverage
over the period end balance. For a more detailed explanation of the sampling
features in ACL for Windows, consult the Reference Manual which accompanies the
software.
■ Agree the balance per the entity’s records to the file used prior to processing.
To calculate the total open payables per the REVENUE_FILE.FIL file,
type the command “TOTAL Invoice_Amount IF Paid_Date=‘19000101’” at
the command and log prompt. This balance can also be used as the
Population variable in the Sampling command below.
■ Select “Sampling” from the menu bar, choose “Size” and calculate the
sample size. Remember that only open invoices (those with a Paid_Date
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the REVENUE_13 batch, and then clicking “Run” in
the resulting Message box.
To select the MUS sample (see the Audit Steps section below for procedures to
perform using the resulting file):
To export the information into a Microsoft Word mail merge format, the following
command is issued. This format allows the merging of vendor data, as created by
ACL, with a blank confirmation form in the Microsoft Word application. ACL for
Windows currently supports mail merge with Word and WordPerfect:
GROUP
The following command is executed to create a log, in Excel format, which acts as a
documented monitoring tool for those confirmations received or still outstanding:
Audit Steps
Mail and log confirmations upon receipt. Any confirmations not returned or
returned undelivered should be investigated. Second requests should be mailed as
needed. If responses are not expected to be received by period end, additional
procedures should be considered such as invoice or (after period end) check
payment observation.
Once the confirmations and additional testwork are complete, use the Evaluate
command in ACL (select “Sampling” from the menu bar and choose
“Evaluate”). This will calculate the “Most Likely Error” and “Upper Error Limit”
as further explained in the ACL for Windows User Guide, Reference Manual, or online
help.
Overview
Many companies believe that tracking of discounts taken by customers after the
discount due date is a costly, nonbeneficial task. Therefore, late discounted
payments are considered paid in full invoices by Collection Departments. On some
counts, an auditor may agree with this decision; however, a review of such activity
(even if only at a customer level) may prove tracking to be efficient and beneficial
after all.
Required
<Customer_Name>
<Discount>
<Invoice_Amount>
<Invoice_Date>
To test the validity of the data used in this application, execute the
REVENUE_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the REVENUE_14 batch, and then clicking “Run” in
the resulting Message box.
To summarize and stratify discounts taken after the due date by customer (see the
Audit Steps section below for procedures to perform using the resulting file and
report):
Audit Steps
■ Maintain the discount, expected to have been paid by the customer, in the
customer’s account and communicate this though periodic statements or
dunning notices.
■ Evaluate whether the company should offer discounted payment terms to
the customer in the future.
■ Assess whether the customer’s future prices should be raised to compensate
for the discounts taken.
■ Communicate to sales and credit management that they must judge
customers carefully when extending discounted terms.
The applications provided in this chapter will address these concerns and allow
management to monitor the performance of this particular function. With estimates
of total final product cost, on average, comprised of 50 percent purchased materials,
inventory should never be overlooked for cost savings.
Inventory Objectives
The following is a list of specific audit objectives for the inventory function along
with the applicable report numbers. The auditor should attempt to obtain
reasonable assurance that the following objectives have been achieved by the
organization:
Report numbers: 1, 2, 3, 4, 6, 7, 8, 9 10
Report number: 1, 5, 6, 7, 8, 9, 10
Report numbers: 1, 2, 3, 4, 6, 7
1 Stratify inventory costs for unusual trends and exceptions. (2) Novice
4 Compare unit costs to current sales prices for lower of cost or market
testing. (1) Advanced
7 List parts with an extended cost, unit cost or quantity less than zero.
(1) Novice
10 Stratify parts based on the last date they were counted. (1) Novice
Data Structure
50 Records using NVNTRYFL as the input file and
representing the inventory at 12/31/96.
PO_Price_2 The second most recent purchase order price per unit
of inventory.
Vendor_Number The vendor number from whom the last units of the
part were purchased.
1 Execute the Verify command on each data field - Review the “Command
and Log” in ACL after batch processing to ensure that the command yielded
the response “0 data validity errors detected”. Please note the batch will
terminate processing at this point, with an appropriate user dialog box, if
the data has any invalid fields.
2 Stratify the inventory file on unit cost and total cost (unit
cost*quantity) - These reports could be reviewed with management for
their reasonableness. Care should be taken with regard to large negative or
positive transactions which may need specific identification and review.
3 Total the inventory file - Agree the amount in the “Last Result” window to
the organization’s inventory listing report (amount is reported after the
command TOTAL Total_Cost in the “Last Result” window).
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the INVENTORY_VERIFY batch, and then clicking
“Run” in the resulting Message box.
The batch will terminate if there are any invalid fields detected using the Verify
command. If the data is valid, processing will continue with
INVENTORY_VERIFY1 which is listed below.
DO INVENTORY_VERIFY1 IF WRITE1=0
PAUSE ‘BATCH TERMINATED - The data used has an INVALID
field/fields. Please review the Last Result window to
determine INVALID field/fields’ IF WRITE1>0
DELETE ALL OK
SET SAFETY ON
TOTAL Total_Cost
COUNT
X=RAND(COUNT1)
SAMPLE ON RECORD RANDOM X NUMBER 3 POPULATION COUNT1
RECORD TO “INV_VER_SAMP”
OPEN INV_VER_SAMP
DEFINE REPORT DEFAULT_VIEW
Overview
On the other hand, unit cost stratification reports could be run to determine audit
coverage. More importantly, they could be gauged in conjunction with the priorities
established by management, thereby highlighting potential inefficiencies. For
example, inventory with low unit costs may be given lower priority for test counting,
or written off upon purchase to avoid inventory monitoring costs.
Required
<Total_Cost>
<Unit_Cost>
To test the validity of the data used in this application, execute the
INVENTORY_VERIFY batch. The second stratification in this batch (on
Total_Cost) provides such a wide-angle focus of the activity; it was used in the
INVENTORY_VERIFY batch as further explained in Chapter 3.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the INVENTORY_1 batch, and then clicking “Run” in
the resulting Message box.
To stratify on unit cost (see the Audit Steps section below for procedures to perform
using the resulting report):
OPEN INVENTORY_FILE
STRATIFY ON Unit_Cost ACCUMULATE Total_Cost TO SCREEN FREE
0, 1, 10, 50, 100, 500, 1000, 5000, 10000, 50000,
100000, 500000, 1000000 HEADER=’Stratification on unit
cost’
The batch will print each of the stratifications. If you prefer to view this information
in your favorite spreadsheet or word processing application, open it as a text file in
the preferred application.
SET SAFETY ON
Audit Steps
The answers may lead the auditor to determine that inventory management could be
made more efficient by focusing efforts towards higher dollar unit cost inventory.
■ for unreasonably large total costs, which could be extracted and further
reviewed.
■ to plan monetary unit sampling, as further discussed in Application 6 in this
chapter.
Helpful Hints
Overview
Not only do these practices lead to timely receipt of quality goods but they also allow
decreased handling charges. Such charges include:
Handling charges have been estimated to average between 15% and 28% of unit
value.
Required
<Adjust_Curr_Per>
<Inventory_Number>
<Lead_Time>
<Quantity_On_Hand>
<Receipt_Curr_Per>
<Total_Cost>
<Unit_Cost>
<Usage_Curr_Per>
To test the validity of the data used in this application, execute the
INVENTORY_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the INVENTORY_2 batch, and then clicking “Run” in
the resulting Message box.
To define the inventory at the beginning of the period (or the 1996 year as is the case
with the data supplied with the Toolkit), add back any usage while deducting both
the receipts and the adjustments for the year as follows:
Using the beginning inventory defined above, the period turnover is calculated
through the below definition. Please note, in order to avoid any division by zero
situations, the denominator and numerator of the turnover equations
((Begin_Quantity+Quantity_On_Hand)/2 and Usage_Curr_Per
respectively), if equal to zero, yield a zero Annual_Turnover result. If the usage
is greater than zero (numerator) and the denominator is not, the usage appropriately
becomes the turnover for the period. These three “IF” statements exist to ensure the
integrity of the resulting computed field.
Please note that the division of certain fields is multiplied by 1.000 in the below field
definition. This is completed to avoid any calculation inaccuracies due to the
rounding of minuscule percentages.
Audit Steps
■ Order parts with low lead times and low turnover when needed. To estimate
the reduction of inventory from this tactic, total those parts with turnover
less than one and a lead time less than three days through the use of the
following command:
“TOTAL Total_Cost IF Annual_Turnover<1 AND
Lead_Time<=3”
■ Organize parts in the storeroom based on turnover. Parts with a high
turnover could be placed in easily reached areas while those with low
Overview
The goal of these two reports is to identify those parts with limited usage so as to
evaluate their current valuation. The first report quickly isolates inventory with no
usage in the past three years. The second takes a more refined approach. Say, for
instance, that a part was received today, thereby possessing zero usage for the past
three years. The first report would improperly identify this as old while the second,
which tallies parts with no usage and having an on-hand total greater than the total
receipts over the past three years, properly would not.
Required
<Inventory_Number>
<Quantity_On_Hand>
To test the validity of the data used in this application, execute the
INVENTORY_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the INVENTORY_3 batch, and then clicking “Run” in
the resulting Message box.
The command below extracts parts with no usage in the three prior years which have
a quantity on hand greater than zero as of the date of the file - NO_3YR_USAGE (see
the Audit Steps section below for procedures to perform using the resulting file):
EXTRACT TO NO_3YR_USREC IF
Quantity_On_Hand>(Receipt_Curr_Per+Receipt_Pr1_Per+Rec
eipt_Pr2_Per) AND Usage_Curr_Per=0 AND Usage_Pr1_Per=0
AND Usage_Pr2_Per=0 AND Quantity_On_Hand>0 FIELDS
Inventory_Number Quantity_On_Hand Receipt_Curr_Per
Receipt_Pr1_Per Receipt_Pr2_Per Usage_Curr_Per
Usage_Pr1_Per Usage_Pr2_Per Total_Cost Unit_Cost
Audit Steps
Overview
“A departure from the cost basis of pricing the inventory is required when the utility
of the goods is no longer as great as its cost.” In line with this accounting principle,
this report will calculate the difference between the unit cost of the inventory
(presumably based on historical cost) and the most current selling price in the
shipment file.
INVENTORY_FILE
Required
<Inventory_Number>
<Quantity_On_Hand>
<Total_Cost>
To test the validity of the data used in this application, execute the
INVENTORY_VERIFY batch.
SHIPMENT_FILE
Required
<Inventory_Number>
<Ship_Unit_Price>
<Ship_Date>
To test the validity of the data used in this application, execute the
SHIPMENT_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the INVENTORY_4 batch, and then clicking “Run” in
the resulting Message box.
The “Join” command below will list all inventory records, regardless if there is a
current price in the SHIPMENT_FILE file. If you wish to include only those
records that have prices in the shipment file, remove the word “PRIMARY” from the
command.
To calculate the difference between the most current sales price and the cost of the
inventory (see the Audit Steps section below for procedures to perform using the
resulting file):
SET SAFETY ON
Overview
Required
<Inventory_Number>
<Quantity_On_Hand>
<Total_Cost>
<Unit_Cost>
To test the validity of the data used in this application, execute the
INVENTORY_VERIFY batch.
Batch
The sample that follows uses inventory parts as the sampling unit. For a more
detailed explanation of the Sampling features, consult the ACL for Windows
Reference Manual.
■ Agree the balance per the entity’s records to the file used prior to processing.
To calculate the inventory value per the INVENTORY_FILE file, type the
command “TOTAL Total_Cost” at the command and log prompt
which will serve as the Population in the sample selection explained below.
■ Select “Sampling” from the menu bar, choose “Size” and calculate the
sample size.
■ Once calculated, note the INTERVAL value that will be accepted by the
batch.
■ Generate a random number to act as the START value in the batch.
■ Determine whether significant transactions (identified in the batch by
entering a CUTOFF value) will be reviewed separately. Review Application 1
in this chapter for guidance in setting the value. (The stratification on
Total_Cost should provide you with the information necessary to
decide where the cutoff should originate.) Please note that if no value is set,
ACL will automatically select any balance greater than the INTERVAL
value, as consistent with Monetary Unit Sampling.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the INVENTORY_5 batch, and then clicking “Run” in
the resulting Message box.
To select the MUS sample (see the Audit Steps section below for procedures to
perform using the resulting file):
Audit Steps
Once the physical count testwork is complete, use the Evaluate command in ACL
(select “Sampling” from the menu bar and choose “Evaluate”) for any
differences between the book and the physical inventory. This command will
calculate the “Most Likely Error” and “Upper Error Limit” as further explained in
the ACL for Windows Reference Manual or online help.
Overview
A review of the net dollar and quantity adjustments for the year may lead an auditor
to believe that there are few issues in this area. Use of the absolute value function in
ACL leads to the conclusion that net dollar amounts are not always important; it is
the proper functioning of the system underlying the balance that counts.
Required
<Company_Code>
<Adjust_Curr_Per>
To test the validity of the data used in this application, execute the
INVENTORY_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the INVENTORY_6 batch, and then clicking “Run” in
the resulting Message box.
These commands serve to define the absolute value of all adjustments occurring in
the current and two prior years. (If fewer or more years of adjustments are expected
to be reviewed, change the two field definitions below prior to executing the batch).
These defined fields will be used in a Summarize command, appearing later in the
batch:
Because there is only one company code in the file supplied with the Toolkit
(Company_Code=”1”) there is no reason to sort the file prior to the
summarization below. The resulting file, ADJUSTMENTS_SUM.FIL, will report
the absolute value of adjustments for the period of the file (see the Audit Steps section
below for procedures to perform using the resulting file):
Audit Steps
1 Parts were taken without proper documentation and/or entry into the
system.
2 Parts were taken and returned without proper documentation or entry into
the system.
3 Parts were mistakenly entered into the system, either at receipt or through
subsequent physical counts.
Each reason centers on a different control issue which can be abated through the
following recommendations. The recommendations below relate to the adjustment
reasons stated above:
3 Suggest that batch totals (manual total of all receipts or adjustments entered
at a given time) be agreed to the input into the system.
Overview
Stranger occurrences have been known to happen than having fewer than no parts
on hand or receiving payment for the storage of parts. Any negative quantities
should be handled carefully—especially considering that, scientifically speaking,
they represent anti-matter.
Required
<Inventory_Number>
<Quantity_On_Hand>
<Total_Cost>
<Unit_Cost>
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the INVENTORY_7 batch, and then clicking “Run” in
the resulting Message box.
To extract parts with unit cost, extended cost, or quantity less than zero (see the
Audit Steps section below for procedures to perform using the resulting file):
Audit Steps
Review the inventory program logic. Such a review could reveal that the software
allows negative inventory quantities. This points to data integrity issues that go
beyond the scope of this application. Usually, the negative quantity is the result of
entering sales to a customer without the corresponding vendor receipt entry.
From the point of view of negative prices, discuss with management to identify
transactions where the organization was paid to store the on hand parts. If not, the
same review of program logic and data integrity should be completed.
Overview
Most inventory accounting systems require a date to be entered when parts were last
counted. Since parts should be counted on a regular basis to ensure their accuracy,
these reports quickly identify those parts that require immediate attention.
■ Application 8 goes straight to the point by selecting parts that should have
been counted within an acceptable time range.
■ Through use of the Last_Receipt_Date field, Application 9 bypasses a
common complaint by inventory managers that certain parts will not have a
last count date entered because they were just received.
■ Application 10 provides a “bird’s eye view” of exactly when, throughout the
year, the parts were counted. To no one’s surprise, parts seem to be counted
more diligently at the beginning of an audit than at any other time of the
year.
To test the validity of the data used in these applications, execute the
INVENTORY_VERIFY batch.
Batches
Application 8
When running this batch you will be prompted to enter the aging date (i.e. to the
date of the inventory file). This parameter is required to allow the AGE() function,
as used to stratify on the Last_Date_Counted, to function properly. If using the
sample data provided with the Toolkit, enter the date 12/31/96 in YYYYMMDD
format (i.e. 19961231).
For example, if parts are expected to be counted on an annual basis, enter 365 at the
above Accept command to extract parts counted more than one year ago.
OPEN INVENTORY_FILE
To extract counted parts which have last been counted outside the acceptable time
frame (see the Audit Steps section below for procedures to perform using the
resulting file):
Application 9
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the INVENTORY_9 batch, and then clicking “Run” in
the resulting Message box.
When running this batch you will be prompted to enter the aging date (i.e. to the
date of the inventory file). This parameter is required to correctly apply the AGE()
function to the Last_Receipt_Date. If using the sample data provided with
the Toolkit, enter the date 12/31/96 in YYYYMMDD format (i.e. 19961231).
For example, if parts are expected to be counted on an annual basis, enter 365 at the
above Accept command to extract parts that should have been counted within the
year.
OPEN INVENTORY_FILE
To extract parts not counted yet received outside of the acceptable time frame (see
the Audit Steps section below for procedures to perform using the resulting file):
Application 10
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the INVENTORY_10 batch, and then clicking “Run” in
the resulting Message box.
OPEN INVENTORY_FILE
DIALOG (DIALOG TITLE "User Dialog" WIDTH 482 HEIGHT 154 )
(BUTTONSET TITLE "&OK;&Cancel" AT 216,84 DEFAULT 1 )
(TEXT TITLE "Enter the aging date in YYYYMMDD order:"
AT 36,16 ) (EDIT TO "AGE_DATE" AT 36,48 WIDTH 151 )
To stratify on the date the part was last counted (see the Audit Steps section below for
procedures to perform using the resulting report):
SET SAFETY ON
Review each of the above reports with management to determine the reason why
these parts were not counted within the acceptable time frame. Time permitting,
select a sample of the parts from these reports for a physical count. It is more likely
that inaccuracies will develop in neglected parts than in parts that are counted on a
regular basis.
Fixed assets are expenditures for tangible property which will be used for a period of
more than one year. Therefore, their cost is deferred to future periods in compliance
with the matching principle.10 With regard to the approval, receiving and recording
controls for fixed assets, much auditor reliance can be placed in the proper
functioning of the purchasing function (see Chapter 5). This is not to say that once
recorded in the general ledger, these assets are classified, depreciated and monitored
correctly. Such objectives can only be achieved through the existence and proper
functioning of a fixed asset control system, tested with the applications present in
this chapter.
Property, Plant and Equipment Exist and Are Recorded Accurately and
Completely
Report number: 2, 3, 4, 5
Report number: 2, 3, 4, 5
Report numbers: 1, 4, 6, 7
4 Select a Monetary Unit Sample of fixed assets for vouching and physical
inspection. (1) Intermediate
6 List assets with high salvage values compared to asset values. (1) Novice
7 Report assets that have been depreciated beyond their cost. (1) Novice
Data Structure
50 Records using PRPRTTY.FIL as the data file.
Check_Num_Rec The number of the check received for the current year
disposal of the asset.
Net_Book_Value The net book value of the asset at the end of the year.
PROPERTY_VERIFY
1 Execute the Verify command on each data field - Review the “Command
Log” after batch processing to ensure that the command yielded the
response “0 data validity errors detected”. Please note the
batch will terminate processing at this point, with an appropriate user dialog
box, if the data has any invalid fields.
2 Stratify the fixed asset file on the ending cost value - These reports could
be reviewed with management for their reasonableness. Care should be
taken with regard to large negative or positive transactions which may need
specific identification and review.
3 Total the net book value (cost less accumulated depreciation) fixed
asset file - Agree the amount in the “Last Result” window to the
organization’s property, plant and equipment report (amount is reported
after the command TOTAL Net_Book_Value in the “Last Result”
window).
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PROPERTY_VERIFY batch, and then clicking
“Run” in the resulting Message box.
The batch will terminate if there are any invalid fields detected using the Verify
command. If the data is valid, processing will continue with
PROPERTY_VERIFY1 which is listed below.
DO PROPERTY_VERIFY1 IF WRITE1=0
PAUSE ‘BATCH TERMINATED - The data used has an INVALID
field/fields. Please review the Last Result window to
determine INVALID field/fields’ IF WRITE1>0
DELETE ALL OK
SET SAFETY ON
PROPERTY_VERIFY1
SET SAFETY OFF
To total the closing net book value for agreement to company records:
TOTAL Net_Book_Value
COUNT
X=RAND(COUNT1)
SAMPLE ON RECORD RANDOM X NUMBER 3 POPULATION COUNT1
RECORD TO “PROP_VER_SAMP”
OPEN PROP_VER_SAMP
DEFINE REPORT DEFAULT_VIEW
Overview
Required
<Current_Deprec>
<Depreciable_Life>
<End_Cost>
To test the validity of the data used in this application, execute the
PROPERTY_VERIFY batch.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PROPERTY_1 batch, and then clicking “Run” in
the resulting Message box.
To summarize the asset cost and current depreciation on the depreciable life for
analysis (see the Audit Steps section below for procedures to perform using the
resulting file):
The following two field definitions will support a current year depreciation
reasonableness calculation as further explained in the Audit Steps section below.
Audit Steps
■ unreasonably large or small balances in any one depreciable life. Review this
in conjunction with the nature of the organization’s business.
■ credit balances in any one depreciable life. Such balances should not exist. If
found, the auditor should raise potential system or data integrity concerns
(see Application 7 for further testwork).
■ assets with no service life. Ensure that these assets are land with no
requirements for depletion.
Overview
With the current year expense savings associated with capitalizing assets, it seems
that everyone would be catching the “capitalization craze”. Although this may be
true at times, it is also true that approval for capital projects is normally more
difficult to obtain, leading certain purchases to be wrongfully expensed rather than
capitalized. Take for example a project that runs over budget and requires the Board
of Director’s approval if expenditures exceed $50,000 over the originally approved
limit. Such restrictions may lead management to cut corners, in an effort to maintain
personal and professional dignity.
To combat such strategies, a substantive test can be performed that reviews the
repairs and maintenance account for expenses that appear more capital in nature
(i.e. - tangible property that will be used for a period of more than one year).
Although this is a solid approach, another would be to review all purchases from
vendors that had supplied some capital assets during the year, in an attempt to
ensure that these and all other capital assets are recorded.
Property, Plant and Equipment Exist and Are Recorded Accurately and
Completely
PROPERTY_FILE
Required
<Check_Number>
To test the validity of the data used in this application, execute the
PROPERTY_VERIFY batch.
PAID_FILE
The following fields, currently in the PAID_FILE as included with this Toolkit, are
also required and/or useful.
Required Useful
<Check_Amount> <Check_Date>
<Check_Number> <Invoice_Date>
<Invoice Number> <Invoice_Batch>
<Vendor_Name> <Vendor_Number>
To test the validity of the data used in this application, execute the AP_VERIFY
batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PROPERTY_2 batch, and then clicking “Run” in
the resulting Message box.
The commands will render a simple join of all data fields listed above.
This Join is completed to derive the vendor name for each capital asset addition
purchased during the year. Note that the check number is the common field between
both the PROPERTY_FILE and PAID_FILE.
To classify on vendor name all asset purchases for use in the following List
command:
The following “LIST” command will create a text copy of the below line with the
Vendor_Name field replaced with the actual vendor names. A new text line will be
created for each vendor in the PROPERTY_FILE file. See the subsequent note
below for how to complete batch processing with these lines of text.
Also, be sure, at a minimum, to type the SET SAFETY OFF, USE PAID_FILE
and SET SAFETY ON commands prior to execution.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PROPERTY_2_RESULTS batch, and then clicking
“Run” in the resulting Message box.
Using the file PROP2, review the actual invoices (making sure not to select those
with check numbers in the PROPERTY_FILE which have already been capitalized)
in an effort to determine whether the expenditure incurred was capital in nature.
It must be noted that this report only detects expenditures with vendors who have
provided capital assets at other times in the audit period. Therefore, all expenditures
that could potentially be capitalized cannot be reviewed using this report. To
achieve this aim, perform substantive tests using the PROP2 file and perform these
same tests on those invoices supporting expenditures incurred in the expense
accounts which have the potential to be capitalized (i.e. - repairs and maintenance
account).
Overview
Materiality is the name of the game, especially wherever audit resources are limited.
With that in mind, extractions of significant items for detailed or other compliance
testwork are an effective means to gain audit coverage while lowering the extent of
additional sampling. This batch has been set to allow the auditor to extract the ‘X’
largest additions, disposals or amounts in any of the other numeric fields in the
PROPERTY_FILE.
Property, Plant and Equipment Exist and Are Recorded Accurately and Completely
Property, Plant and Equipment Purchases and Retirements Are Properly Approved
Required Useful
<Asset_Number> <Depreciable_Life>
<Begin_Cost> <Current_Deprec>
<Addition_Cost> <Accum_Dep>
<Disposal_Cost> <Disposal_Accum_Dep>
To test the validity of the data used in this application, execute the
PROPERTY_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PROPERTY_3 batch, and then clicking “Run” in
the resulting Message box.
Using the following ACCEPT command, the auditor can select any numeric field for
extraction.
The next ACCEPT command requests the number of largest transactions for use by
the auditor:
Audit Steps
Any number of audit tests could be performed on the resulting extraction. For
guidance, review the compliance sample testwork as explained in the Audit Steps
section of Applications 4 and 5 in this chapter.
Overview
Fixed assets normally represent a material portion of any balance sheet. Such assets
should be either vouched or physically inspected to ensure their existence and
accuracy in the organization’s records.
Property, Plant and Equipment Exist and Are Recorded Accurately and Completely
Property, Plant and Equipment Purchases and Retirements Are Properly Approved
Required Useful
<Asset_Number> <Depreciable_Life>
<Addition_Cost> <Begin_Cost>
<End_Cost> <Current_Deprec>
To test the validity of the data used in this application, execute the
PROPERTY_VERIFY batch.
Batch
The sample that follows uses either current period additions or existing assets (as
defined by the user) as the sampling unit. For a more detailed explanation of the
Sampling features in ACL for Windows, consult the Reference Manual which
accompanies the software.
■ Agree the balance per the entity’s records (for either additions or ending
asset value, depending on which sample is being taken) to the file used prior
to processing. To calculate the addition or existing asset value per the
PROPERTY_FILE file, use the “Total” command.
■ Select “Sampling” from the menu bar, choose “Size” and calculate the
sample size.
■ Once calculated, note the INTERVAL value which will be accepted by the
batch.
■ Generate a random number to act as the START value in the batch.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PROPERTY_4 batch, and then clicking “Run” in
the resulting Message box.
To select a MUS sample (see the Audit Steps section below for procedures to perform
using the resulting file):
Perform the following tests, depending on the nature of the sample selected, to
determine whether reasonable assurance has been achieved with regards to the
associated audit objectives:
Once the testwork is complete, use the Evaluate command in ACL (select
“Sampling” from the menu bar and choose “Evaluate”) to identify any
differences between the reported numeric value selected and the actual value
vouched. This command will calculate the “Most Likely Error” and “Upper Error
Limit” as further explained in the ACL for Windows Reference Manual or on line
help.
Overview
Any transaction that has the potential of creating a gain or loss should be closely
reviewed to ensure that:
Through the use of the following stratifications and MUS samples (which focus
efforts on significant items) audit comfort should be achieved with regard to the
proper recording of disposals.
Property, Plant and Equipment Exist and Are Recorded Accurately and Completely
Property, Plant and Equipment Purchases and Retirements Are Properly Approved
Required
<Asset_Number>
To test the validity of the data used in this application, execute the
PROPERTY_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PROPERTY_5 batch, and then clicking “Run” in
the resulting Message box.
To stratify on the gain or loss on disposal for analysis as to their relative size (see the
Audit Steps section below for procedures to perform using the resulting report):
To calculate and stratify on the assets net book value at the time of disposal for
analysis as to its relative size (see the Audit Steps section below for procedures to
perform using the resulting report):
Using the above stratifications as a guide, select a MUS sample using the
PROPERTY_4 batch either on the Gain/Loss in Disposal or the Net Book Value at
the time of disposal. For a more detailed explanation of the Sampling features in ACL
for Windows, consult the Command Reference guide which accompanies the
software.
Audit Steps
Perform the following tests, depending on the nature of the sample selected, to
determine whether reasonable assurance has been achieved with regards to the
associated audit objectives:
Once the testwork is complete, use the Evaluate command in ACL (select
“Sampling” from the menu bar and choose “Evaluate”) to identify any
differences between the reported disposal entry value and the actual entry vouched.
This command will calculate the “Most Likely Error” and “Upper Error Limit” as
further explained in the command reference literature or on line help.
Testing for exceptions in the areas of accumulated depreciation and salvage value is
an effective means to determine whether fixed assets are properly valued at period
end. These two applications, which pinpoint potential exceptions, should assist in
achieving this objective.
Required
To test the validity of the data used in this application, execute the
PROPERTY_VERIFY batch.
Required
<Accum_Dep>
<Asset_Number>
<End_Cost>
<Salvage_Value>
To test the validity of the data used in this application, execute the
PROPERTY_VERIFY batch.
Batch - Application 6
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PROPERTY_6 batch, and then clicking “Run” in
the resulting Message box.
Please note, if you wish to execute this batch a second time, it is required that the
Salvage_Percent expression be deleted from the SORT_SALVAGE file.
Otherwise, the batch will fail since such an expression will already exist when the
batch attempts to create it a second time.
Batch - Application 7
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PROPERTY_7 batch, and then clicking “Run” in
the resulting Message box.
The following field definition and related extraction will detect those assets, not
disposed during the year, which have accumulated depreciation exceeding their
asset cost less salvage value (see the Audit Steps section below for procedures to
perform using the resulting file):
Audit Steps - The Audit Steps below are applicable to Applications 6 & 7
The objective of this chapter is to assist in minimizing the amount of time spent
reviewing the scores of network or operating system log files by consolidating
information and focusing the auditor’s view.
One word of caution - Keep these files secure. Username logins and related
information are highly sensitive and in the wrong hands, could lead to business loss.
It is okay to show hackers the door; it is not okay to then give them the key.
Although not thoroughly explored in this chapter, these ACL applications can be
used on telephone records. For example, Applications 4 and 5 search for unusual
times for login access. Employing these applications on a file of telephone usage
would detect weekend, after-hour, or all-day activity.
Report numbers: 1, 2, 3
Data Structure
18 Records using DPCCSSFL.FIL as the data file
Last_Login_Date The date the user last logged into the system.
Data Structure
58 Records using DPCTVTYF.FIL as the data file.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the EDP_ACC_VERIFY batch, and then clicking
“Run” in the resulting Message box.
The batch will terminate if there are any invalid fields detected using the VERIFY
command or if there are less than three records in the file for sampling. If the data is
valid, processing will continue with EDP_ACC_VERIFY1 which is listed below.
ASSIGN OUTPUTFILE=”EDP_ACC_SAMP”
EDP_ACC_VERIFY1
X=RAND(COUNT1)
SAMPLE ON RECORD RANDOM X NUMBER 3 RECORD TO %OUTPUTFILE%
OPEN %OUTPUTFILE%
DEFINE REPORT DEFAULT_VIEW
EDP_ACT_VERIFY
1 Execute the Verify command on each data field - Review the “Command
and Log” after batch processing to ensure that the command yielded the
response “0 data validity errors detected”. Please note the batch will
terminate processing at this point, with an appropriate user dialog box, if
the data has any invalid fields.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the EDP_ACT_VERIFY batch, and then clicking
“Run” in the resulting Message box.
The batch will terminate if there are any invalid fields detected using the VERIFY
command or if there are less than three records in the file for sampling. If the data is
valid, processing will continue with EDP_ACC_VERIFY1 which is listed above.
ASSIGN OUTPUTFILE=”EDP_ACT_SAMP”
COUNT
DO EDP_ACC_VERIFY1 IF WRITE1=0 AND COUNT1>=3
PAUSE ‘BATCH TERMINATED - The data used has an INVALID
field/fields. Please review the Last Result window to
determine INVALID field/fields’ IF WRITE1>0
PAUSE ‘BATCH TERMINATED - There are either no records or
less than three records in the file for sampling
purposes‘ IF COUNT1<3
DELETE ALL OK
SET SAFETY ON
Overview
Required
User_Name
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the EDP_1 batch, and then clicking “Run” in the
resulting Message box.
To classify on the username (see the Audit Steps section below for procedures to
perform using the resulting file):
Audit Steps
■ Review the USERS file for any ambiguous usernames such as DEFAULT,
TEST, SYSTEM, MANAGER and USER (to name a few). If detected,
recommend that the owner delete the username or change the default
password. In this step, it may be useful to review the software
documentation for those usernames (and passwords) used in the initial
installation. Also, verify that the system will not accept a blank password for
any of these usernames.
■ To ensure that all of these usernames are identified, utilize the MATCH()
function and Extract command as follows:
EXTRACT User_Name IF MATCH(User_Name, ‘TEST’, ‘SYSTEM‘,
‘MANAGER’, ‘USER’)>0 TO MATCHED
Overview
Raise your hand if you would like to review detailed access logs for users who have
not accessed the system in over thirty days. The objective of this application is to
identify those users who, considering they have not signed on within a acceptable
period, may not require access to the system.
Required
User_Name
Last_Login_Date
To test the validity of the data used in this application, execute the
EDP_ACC_VERIFY batch.
Required
User_Name
Signon_Date
To test the validity of the data used in this application, execute the
EDP_ACT_VERIFY batch.
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the EDP_2 batch, and then clicking “Run” in the
resulting Message box.
There are two distinct approaches to determine which users have not signed on in
the past thirty days. The first uses the EDP_ACCESS_FILE file to simply extract
based on the Last_Login_Date while the second uses the
EDP_ACTIVITY_FILE to extract those users who have not signed on during the
user defined time frame. The second approach is not as complete as the first
considering there may be users who have not signed on for periods longer than the
activity extracted in the EDP_ACTIVITY_FILE file. Thus, although the first
approach is the most complete, the EDP_ACCESS_FILE file at your location may
not always monitor the Last_Login_Date variable, thereby requiring the
second strategy to be executed.
If using the data supplied with the Toolkit, you will record the date of the files used
by entering 19960922 (9/22/96) in the dialog box date field. The third box of the
dialog command is where you will define the acceptable time frame of inactivity:
30 days is an appropriate response to the above Accept command if using the data
supplied with the Toolkit.
OPEN EDP_ACCESS_FILE
To extract users who have had no activity within the acceptable timeframe which
will be sorted in an ascending fashion (see the Audit Steps section below for
procedures to perform using the resulting file):
OPEN EDP_ACTIVITY_FILE
The following Sort and Summarize commands will create a file of users with the
last date of activity (This will be used in a later Extract command):
The above three commands essentially create a file that reports the username and
last date he/she logged into the system, similar to the Last_Login_Date field
used in the EDP_ACESS_FILE file.
OPEN SUMMARIZED
To extract users who have had no activity within the acceptable timeframe which
will be sorted in an ascending fashion (see the Audit Steps section below for
procedures to perform using the resulting file):
Audit Steps
Overview
Anyone can have access to a system. Complications arise when this access allows a
user to effectuate unauthorized activity. If the foundation is set, through proper
authorization procedures (preferably written), then the structure can be erected
without fear of it crashing down.
Required
User_Name
Activity
To test the validity of the data used in this application, execute the
EDP_ACC_VERIFY batch.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the EDP_3 batch, and then clicking “Run” in the
resulting Message box. It is possible to execute this application on the
EDP_ACTIVITY_FILE as included with this Toolkit, yet this analysis would only
detect activities utilized during the time frame extracted. If you wish to execute this
batch on the EDP_ACTIVITY FILE file, edit the below command to open it
rather than the EDP_ACCESS_FILE file in the beginning of the batch.
Audit Steps
Overview
A burglar finds it most easy to break in when no one is home. Similarly, the hacker or
other unauthorized individual prefer to process without a network manager
monitoring his/her activity. Aside from testing the relative time of access, this
application will also test the length of login times to assess whether users are logged
on for unreasonable amounts of time. This may signal unattended terminals (or
people who are chained to their desks for over 8 hours).
Required
User_Name
Signon_Date
Signon_Time
Duration_Min
Activity
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the EDP_4 batch, and then clicking “Run” in the
resulting Message box. The batch is meant to review one set of weekends at a time, as
well as, search for any processing outside of the normal working hours for the entire
file under review. If using the sample data provided with the Toolkit, enter 960921
and 960922 (for the weekend of 9/21/96 and 9/22/96) in the following two Accept
commands.
The next command will extract any user who signed on or off on a weekend date or
signed on or off after normal working hours (see the Audit Steps section below for
procedures to perform using the resulting file):
Audit Steps
Perform the following steps remembering that much of the reported activity should
relate to system intensive batch processing completed after hours when system
resources are at their highest capacity:
Overview
Required
User_Name
Signon_Date
Signon_Time
Activity
Batch
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the EDP_5 batch, and then clicking “Run” in the
resulting Message box.
If your system uses a different code for logfails than “LOGFAIL” substitute your
system code in the command below (be sure to enter the code in uppercase format as
in the below command).
To extract all logfails which will be sorted later in the batch on date and time (see the
Audit Steps section below for procedures to perform using the resulting file):
Audit Steps
■ Review the LOGFAILS file with special attention geared toward successive
logfails within a short time frame.
■ Any logfails which may signal an attempt to infiltrate the system should be
reviewed with the appropriate level of management.
These boxes control how the batch is run by prompting the user for input and
selections. While you previously used the ACCEPT command to accept user input,
the Dialog Builder is more powerful by providing you with a full range of control
types including radiobuttons and checkboxes.
When a user selects options or types text in a custom dialog box, ACL assigns all the
input to variables. You can use these variables later in the same batch or in different
batches. Parameters such as dates, file names, or any information you need from the
user at the time the batch is run. For more details on variables, see ACL for Windows
Reference Manual, page 2-14.
GENLED_7
ACCPAY_6
ACCPAY_9
ACCPAY_10
ACCPAY_13
ACCPAY_14
ACCPAY_18
PAYROLL_1
PAYROLL_3
PAYROLL_5
REVENUE_8
REVENUE_13
INVENTORY_5
INVENTORY_8
INVENTORY_9
PROPERTY_3
PROPERTY_4
EDP_4
The remainder of this chapter will demonstrate how a sample batch (PAYROLL_1)
can use this added functionality. For more information on the Dialog Builder, see
ACL for Windows Reference Manual, page .2-48.
Using Dialog Builder, these two ACCEPT commands are replaced with a dialog box
by completing the following:
3 In the Batch window, click on the Dialog command immediately below the
command “SET SAFETY OFF” and then click on the Dialog Builder
button to bring up the following screen:
4 To enter a Text box for the cutoff date, click on the Text button. When you
move your cursor into the definition area, your cursor changes to a box with
a plus at the top left corner. Click in the upper left corner of the definition
area and ACL displays the Text dialog box:
5 Type in the “Label” box “Enter the files’s aging date (YYYYMMDD)” as in
the above screen print and then OK.
8 To enter a Text box for the numeric field, click on the Text button. When you
move into the definition area, your cursor changes to a box with a plus at the
top left corner. Click under the editbox created in Step #6 and ACL displays
the Text dialog box:
10 To enter a Dropdown Item List box for the numeric field, click on the
Dropdown Item List button. When you move into the definition area, your
cursor changes to a box with a plus at the top left corner. Click underneath
the textbox created in Step #8 above and ACL displays the Dropdown Item
List dialog box:
13 Delete the two ACCEPT commands (since they have now been replaced by
the dialog box) by highlighting them and pressing the “Delete” key. Once
finished, close the batch, saving it as PAYROLL_1_NEW.
This batch is executed by opening the Overview window, expanding the list of
batches, double-clicking on the PAYROLL_1_DIALOG batch, and then clicking
“Run” in the resulting Message box.