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:

 

  1. 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.
  2. 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.
  3. 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.
  4. NACHA – Stands for “National Automated Clearing House Association,” which is the body that makes the standards for various clearing houses.
  5. 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.  
  6. 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.

 

  1. FileHeader – File Header Record
    1. recordtypecontrol – “1”
    2. prioritycode
    3. immediatedestination – your bank’s/processor’s nine digit routing code
    4. immediateorigin – Your company’s account number
    5. filecreationdate – ESS: date from server feed process run
    6. filecreationtime – ESS: time from server feed process run
    7. fileidmodifier – “1”
    8. recordsize – “094”
    9. blockingfactor – “10”
    10. immediatedestinationname – your bank’s/processor’s name
    11. immediateoriginname – Your company name
    12. reference
  2. Batchheader – Batch Header Record
    1. recordtypecontrol – “5”
    2. serviceclasscode – “220” (confirm with your bank, sometimes “200”)
    3. companyname – Your company name
    4. companydescrtionarydate
    5. companyidentification – Company’s ID with bank/processor
    6. standardentryclasscode -  “PPD”
    7. companyentrydescription – “Expenses”
    8. companydescriptiondate – ESS: feed date
    9. settlementdate – ESS: feed date plus two business days
    10. originatorstatuscode – “1”
    11. originatingfiidentification – Your bank’s/processor’s routing code
    12. batchnumber – ESS: usually “0000001”
  3. entrydetail – Entry Detail Record
    1. recordtypecode – “6”
    2. transactioncode – ESS: either “22” or “32”
    3. receivingdfiindentificationnumber – ESS: reporter’s bank routing code
    4. rdfiaccountnumber – ESS: reporter’s account number with bank
    5. amount – ESS: amount of payment
    6. identificationnumber – ESS: reporter’s personnel number
    7. individualname – ESS: reporter’s name
    8. dicretionarydata
    9. addendarecordindication – “0”
    10. tracenumber1 – Company’s bank assigned ID
    11. tracenumber2 – ESS: sequence number
  4. batchcontrol – Batch Control Record
    1. recordtypecode – “8”
    2. serviceclasscode – “220” (confirm with your bank, sometimes “200”)
    3. entrycount – ESS: number of transactions
    4. entryhash – ESS: generated check number
    5. totaldebitentrydollaramount – ESS: zero
    6. totalcreditentrydollaramount – ESS: total of payments
    7. companyidentification
    8. messageauthenticationcode
    9. reserved
    10. originatingdfiidentification- Company’s ID with bank/processor
    11. batchnumber – ESS: usually “0000001”
  5. filecontrol – File Control Record
    1. recordtypecode – “9”
    2. batchcount – ESS: number of batches, usually one.
    3. blockcount – number of lines in file divided by 10
    4. entrycount – number of payments in file
    5. entryhash – generated check number
    6. totaldebitentrydollaramount – zero
    7. totalcreditentrydollaramount – total of all payments
    8. 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.

 

###