ACH Payment Setup
March 23, 2006
Copyright 2006, R. James Holton. All rights reserved.
FIRST THING: If you are contemplating paying reports via
ACH, you need to contact your bank and/or processor to get all the required
information and requirements from them.
Anything in this document may be superceded by them.
SECOND THING: The author and Adisoft, Inc. assume no
responsibility for any thing said, written or described in this document. The author and Adisoft, Inc. are not
responsible for any loses that may occur, directly or indirectly, by using the
information in this document or by use of the associated software.
THIRD THING: Before using ACH as a payment method, make sure
that you fully understand the process, and its risks, and that you have proper
controls and audit procedures in place to compensate and control the associated
risks.
This document describes how the Expense Submittal System
creates an ACH feed and how to set up the system so it produces the feed that
you need.
Here are some terms that will be used in this document:
- Account
number – An account number is assigned by a bank to either a checking or
savings account. It is unique
within the bank. Account numbers
are not standard and come in different lengths. The account number is found in the
microcode at the bottom of a check.
- ABA
Number – “ABA” stands for
“American Bankers’ Association.”
This group assigns each bank a unique number with is called an “ABA
Number.” An ABA Number is comprised
of 8 digits with the first two digits tied to a specific Federal Reserve
district.
- ACH –
Stands for “Automated Clearing House.”
A clearing house is a collection of banks that exchange
checks. This allows individuals to
write checks and have them cleared effectively. When ACH is used as an adjective for an
electronic file, it is used interchangeably with NACHA.
- NACHA
– Stands for “National Automated Clearing House Association,” which is the
body that makes the standards for various clearing houses.
- Prenote
– Prenote stands for “pre-notification.”
A prenote is a transaction that tests the validity of a routing
code, account and associated information.
Prenotes are sent in advance of payments to ensure that the payment
will be processed.
- Routing
Code – This is a bank’s ABA
number plus a check digit. The
Routing Code is 9 digits and is found in the microcode at the bottom of a
check.
Required end-of-day information
To run an ACH feed as part of your end-of-day process, you
need ensure that the endofday element
in the system.xml file is setup
correctly. To run the NACHA feed, review
the following sub-elements:
·
feed – ensure that a feed element exists with a
text value of “ess.NACHAFeed”
·
nacha_file_name – Name of the NACHA payment feed
file. The default is “NACHA.FIL.” You may include a $date$ macro in the name,
which will be expanded to be the current date in YYYYMMDD format.
·
prenote – Set to “No”
for now.
The NACHA.XML file
There are five record types in an ESS NACHA payment
file. They are:
·
File Header Record
·
Batch Header Record
·
Entry Detail Record
·
Batch Control Record
·
File Control Record
Each record is 94 bytes long.
The nacha.xml
file is used by ESS to write
out each record. It consists of five
elements that correspond to the five record types above. The text area of certain sub-elements is used
to provide site specific information.
These are noted below. The
sub-elements below that are noted as “ESS:” are often followed by further
explanations that indicate what the NACHA feed logic provides for these values. Elements where there is no notation are left
blank in the feed. Here are the nacha.xml elements.
- FileHeader
– File Header Record
- recordtypecontrol
– “1”
- prioritycode
- immediatedestination
– your bank’s/processor’s nine digit routing code
- immediateorigin
– Your company’s account number
- filecreationdate
– ESS: date from server feed process run
- filecreationtime
– ESS: time from server feed process run
- fileidmodifier
– “1”
- recordsize
– “094”
- blockingfactor
– “10”
- immediatedestinationname
– your bank’s/processor’s name
- immediateoriginname
– Your company name
- reference
- Batchheader
– Batch Header Record
- recordtypecontrol
– “5”
- serviceclasscode
– “220” (confirm with your bank, sometimes “200”)
- companyname
– Your company name
- companydescrtionarydate
- companyidentification
– Company’s ID with bank/processor
- standardentryclasscode
- “PPD”
- companyentrydescription
– “Expenses”
- companydescriptiondate
– ESS: feed date
- settlementdate
– ESS: feed date plus two business days
- originatorstatuscode
– “1”
- originatingfiidentification
– Your bank’s/processor’s routing code
- batchnumber
– ESS: usually “0000001”
- entrydetail
– Entry Detail Record
- recordtypecode
– “6”
- transactioncode
– ESS: either “22” or “32”
- receivingdfiindentificationnumber
– ESS: reporter’s bank routing code
- rdfiaccountnumber
– ESS: reporter’s account number with bank
- amount
– ESS: amount of payment
- identificationnumber
– ESS: reporter’s personnel number
- individualname
– ESS: reporter’s name
- dicretionarydata
- addendarecordindication
– “0”
- tracenumber1
– Company’s bank assigned ID
- tracenumber2
– ESS: sequence number
- batchcontrol
– Batch Control Record
- recordtypecode
– “8”
- serviceclasscode
– “220” (confirm with your bank, sometimes “200”)
- entrycount
– ESS: number of transactions
- entryhash
– ESS: generated check number
- totaldebitentrydollaramount
– ESS: zero
- totalcreditentrydollaramount
– ESS: total of payments
- companyidentification
- messageauthenticationcode
- reserved
- originatingdfiidentification-
Company’s ID with bank/processor
- batchnumber
– ESS: usually “0000001”
- filecontrol
– File Control Record
- recordtypecode
– “9”
- batchcount – ESS: number of batches, usually one.
- blockcount
– number of lines in file divided by 10
- entrycount
– number of payments in file
- entryhash
– generated check number
- totaldebitentrydollaramount
– zero
- totalcreditentrydollaramount
– total of all payments
- reserved
You should contact your bank and/or processor to verify the
above information. You should also do a
test run before going live.
Setting up the calendar.xml
file
This is an important file if you are using the NACHA feed. The NACHA feeds needs to be able to calculate
two business days from any feed date. It
can account for weekends with simple logic, but must be told when bank holidays
occur so it can compensate for those dates.
A bank holiday is any day, other than Saturday and Sunday, when banks
are closed. These are days like Memorial
Day or Christmas. ACH payments cannot be
made on dates that banks are closed. The
calendar.xml file contains the dates
for future bank holidays and needs to be accurately maintained if the NACHA
feed is used.
The location of the calendar.xml
file is specified in the system.xml
file under the xmlcalendar
sub-element in the configuration
element. Normally this is in the xmls folder, but can be specifed in
another location if it is convenient for maintenance purposes.
To specify at date for a bank holiday, add a date elements
to the bankholiday element in the file.
Dates are specified in the ‘YYYY-MM-DD’ format.
###