Professional Documents
Culture Documents
INTRODUCTION .......................................................................................... 2
FUNCTIONALITY ......................................................................................... 2
NEW TABLES AND VIEWS INTRODUCED:....................................... 4
SETUP ................................................................................................................ 5
BAI2................................................................................................................ 5
SWIFT 940................................................................................................... 12
OTHERS ..................................................................................................... 13
ERRORS AND TROUBLESHOOTING ................................................. 13
ERROR NAMES AND TEXT: .............................................................. 14
COMMON ERRORS ENCOUNTERED:........................................... 16
FREQUENTLY ASKED QUESTIONS: ............................................. 17
Bank Statement Loader Program
INTRODUCTION
Oracle Cash Management provides an open interface for loading electronic bank statement files into the bank
statement tables. The Bank Statement Open Interface consists of two interface tables and an import
program. The tables contain information about the bank statement header and bank statement lines and the
Bank Statement Import program transfers information from the open interface tables to the bank statement
tables.
In earlier releases, a custom program had to be developed to populate the Bank Statement Open Interface
tables from the bank statement file. The program would map the structure of the bank statement file to the
open interface tables, which would need a separate program for each unique file structure. In addition, a
complex file structure could not be handled by SQL*Loader. As a result, custom development involved a lot
of effort and was time consuming.
To simplify the implementation of Oracle Cash Management, the Bank Statement Open Interface has been
enhanced to offer a complete solution for loading bank statement information from an external file. Using
the new Bank Statement Loader feature, data can be quickly and easily loaded from BAI2 and SWIFT940
bank statement files into the Bank Statement Open Interface tables without any programming. The Bank
Statement Loader also supports user-defined formats like French EDIFACT. Once data is populated into
the open interface tables, the Bank Statement Import program is used to transfer the data to the base bank
statement tables.
FUNCTIONALITY
The Bank Statement Loader program runs in two stages. In the first stage, the Bank Statement Loader
program uses a SQL*Loader script to insert data from the bank statement data file into the intermediate
table. Different SQL*Loader files are created per different bank formats. Users define bank statement
mapping rules to link between the bank formats and the SQL*Loader script. When submitting the Bank
Statement Loader program, the user specifies which mapping rule to use and the concurrent program
executes the proper SQL*Loader file tied to the mapping rule. The SQL*Loader file itself does not have the
intelligence to distinguish between different bank formats. The intermediate table is simply a representation
of the bank statement file in the database, where a row corresponds to a record in the file and a column
corresponds to a field in the record.
In the second stage, the Bank Statement Loader program uses a set of mapping rules to transfer data from the
intermediate table to the Bank Statement Open Interface tables. These rules map the structure of the bank
statement file to the open interface tables. These rules can also perform simple pattern searches and data
transformations. After the Bank Statement Loader program completes, the Bank Statement Loader
Execution Report displays any exceptions encountered by the program.
The Bank Statement Loader program can be executed in one of these three modes:
1. Load
2. Load and Import
3. Load, Import and Auto Reconciliation
Option 1 is only to run the loader program. In option 2, the Bank Statement Import program starts after the
Bank Statement Loader completes successfully. In option 3, both the Bank Statement Import program and
the Auto Reconciliation program are launched after successful completion of the Bank Statement Loader
program. In either case, if the Bank Statement Loader program completes with errors or warnings, the
concurrent request terminates and no further process is started.
The loading of BAI2 and SWIFT940 file formats is mostly automated. Since Oracle Cash Management
provides the SQL*Loader scripts and mapping templates for these two formats, you can run the Bank
Statement Loader program with minimal setup. In case a bank has made any variations to the standard
formats, the default mapping information should be modified to match these variations.
In general, the Bank Statement Loader program supports these three types of modifications:
• Map data from a field in the bank statement file to one or more columns in Bank Statement
Open Interface tables:
For example, if the bank sends the same information for bank statement number and bank statement
date in one field that field can be mapped to the Bank Statement Number column and the Bank
Statement Date column in the Bank Statement Headers Interface table.
• Map data from part of a field in the bank statement file to one or more columns in the Bank
Statement Open Interface tables:
For example, if the transaction number is included along with other information in the description
field, it must follow a pre-determined format so it can be easily recognized. This format is entered in
the mapping rules for the Transaction Number column, so the Bank Statement Loader program can
correctly extract the number and transfer it to the Bank Statement Open Interface tables.
• Change the precision on the amounts:
Some banks send amounts as integers. For example, USD 100.00 is represented as 10000. The
precision is implied to be 2. The Bank Statement Loader program is capable of handling any
number of floating points, if the correct precision is set in the mapping rules. The BAI2 format uses
a precision of 2, since all amounts are in USD. The SWIFT940 format does not use precision,
because amounts are already decimal numbers.
In addition to BAI2 and SWIFT940, the Bank Statement Loader program can load user-defined formats.
However, two customizations have to be created:
• A SQL*Loader script to read the bank statement file and copy the data to the intermediate table
• A mapping template to map the records and fields in the bank statement file to the columns in
the Bank Statement Open Interface tables
A bank statement file may contain bank statements for multiple bank accounts. The Bank Statement
Loader program can be run to load the entire file, or data specific to a particular bank branch or bank
account number.
Some bank statement files contain information other than bank statements. The SQL*Loader scripts for
BAI2 and SWIFT940 exclude records that do not have the appropriate identifiers as defined by the
specifications of these two standards. If any bank uses a different format, this logic must be
implemented in the SQL*Loader script.
SETUP
BAI2
The Bank Statement Loader program uses a predefined SQL*Loader script to load BAI2 bank statement files.
However, since each bank adopts the BAI2 standard slightly differently, map the BAI2 format to the Bank
Statement Open Interface tables. The mapping information can be created from the BAI2 mapping template.
The BAI2 SQL*Loader script is located in $CE_TOP/bin/BAI2.ctl
• Bank Account Setup
Create bank and bank account in Accounts Payable responsibility.
Navigation - Setup->Payment -> Banks. Enter the required information. Note the bank account number
and branch name. In this example, we will use the following:
Bank: ABC_BANK
Branch: ABC_BRANCH
Account number: 3340561
• Bank Transaction Codes
Set up the Bank Transaction Codes in Cash Management.
Navigation - Setup -> Bank Transaction Codes.
Query the bank account number , in this example 3340561 and enter the transaction codes as provided
by the bank. These differ from bank to bank, and thus are bank specific. In this example, we will use the
following:
Type Code Description Transaction Source
Payment 100 Regular Payment AP Payments
Payment 130 EFT/Wire Payment AP Payments
Note: If Accounts Receivable is used, Receipt Type Bank Transaction Codes are defined in the same
way.
This step is extremely important because the code numbers defined are used for importing bank
statements. The successful import of bank statement files largely depend on the correctness of these
transaction codes.
01,121345678,7777777,011031,1431,1431,80,1,2/
02,7777777,121345678,1,011022,0000,USD,/
03,0007895624,USD,010,500000,015,52741100,045,100000,072,79694140,074,2160995,100,707755472/
88,102,013,400,655514372,402,011,954,486385540/16,100,76995,V,011020,,
Bank Reference Text,26446,Office Supplies/
16,100,812213,V,011015,,323532,A39599,Travel expenses/
16,100,242500,V,011017,,5434634N,46400-333,Rent expense/
16,100,21375,V,011019,,264,83832,Team Building Event/
49,2306166,6/
98,2306166,1/
99,2306166,1,10/
The above data file will be provided by banks that are under the purview of BAI, in a plain text format.
To import this statement file into Oracle Cash Management, there are some set up steps required to be
followed. These are described below with an example:
• Record 03 - Mandatory
This should be the third record in the file. The format should be as follows:
03,<bank account number>,<currency code>,<type code>,<sign><amount>, <item count>,<funds
type>/
With the last 5 fields being repeated as many times as needed for each type code. Note that there is no
delimiter between the sign and the amount fields.
In this example, the file will use the following values:
03,0007895624,USD,010,500000,015,52741100,045,100000,072,79694140,074,2160995,100,707755472/
88,102,013,400,655514372,402,011,954,486385540/16,100,76995,V,011020,,
In the above example 88 is the continuation of record 03.
010 , 400,100 and 015 represent control_begin_balance, control_total_cr,control_total_dr and
control_end_balance respectively. These codes are not required to be mapped in the mapping template.
When the bank statement loader program runs , it automatically picks up data depending upon the codes
mentioned in the data file. It is recommended to have repeating sequence (<type
code>,<sign><amount>,<item count>,<funds type> in one line.
• Record 49 - Mandatory
This record should follow the last 16 record for the given bank account. The format should be as
follows:
49,<account control total>,<number of records for account>/
The account control total sums all the amounts in records 03, 16 and 88 and includes an amount sign.
The record count field is the total number of records including 03, 16, 88 and 49 only.
In this example, the file will use the following values :
49,2306166,6/
• Record 98 - Mandatory
This record follows the last 49 record. The format should be as follows :
98,<group control total>,<number of accounts>,<number of records in group>/
Group control total is the sum of all control totals in 49 records for this group. The number of accounts
will be the same as the number of 03 records in the file.
For our example, the record would look like:
98,2306166,1/
• Record 99 - Mandatory
This will be the last record in your file. The format should be as follows:
99,<file control total>,<number of groups>,<number of records>/
File control total is the sum of all group control totals in 98 records.
The number of groups should match the number of 02 records.
For our example, the record would look like: 99,2306166,1,10/
Concurrent programs to Run :
The Bank Statement Loader program can be executed in one of these three modes:
Load
Load and Import
Load, Import and Auto Reconciliation
The concurrent programs can be run in a variety of ways. When testing, it is recommended to run each
program one at a time to be able to identify the problematic process in case of errors. Once the setup is
completed, all of the programs can be run in one step.
1.Bank Statement Loader :
The required parameters are :-
• Process Option - Choose "Load".
• Mapping Name - Pick the one created in the Bank Statement Mapping section, or any of the
standard ones.
• Data File Name - This is the name of the data file. Typical convention is to use the .dat extension.
Example: TEST.dat
• Directory Path - If the data file is placed in the $CE_TOP/bin directory, leave this parameter blank.
Otherwise, enter the entire path of the directory where the data file is located. Do NOT use any
environment variables in the pathname.
Bad example: $CE_TOP/out/TEST.dat
Good example: /amer/oracle/crmus01/crmus01appl/ce/11.5.0/out/ TEST.dat
• Display Debug - Defaults to "N", but it is recommended to set it to “Y" to aid in debugging issues.
3.AutoReconciliation
a. Enter the bank branch name and the bank account number that needs to be loaded from the bank
statement file. If nothing is entered, the entire file is loaded. Otherwise, only statements belonging
to the bank branch or the bank account are loaded.
b. If either the option of Load and Import or Load, Import and AutoReconciliation is selected, then
a GL Date needs to be entered.
c. If the option of Load, Import and AutoReconciliation is selected , then the Receivables Activity
and NSF Handling needs to be entered. If a bank account number is specified then enter the
Payment Method.
Note: If multiple files have been loaded, but only one is to be imported, use the Statement Date or
Statement Number range parameters to limit the import job.
On successful completion , this program will reconcile the imported bank statement lines to
outstanding AP and AR transactions. If unsuccessful, it will mark the bank statement line with an
error and allow manual reconciliation of the transaction.
This concurrent program launches one other concurrent program:
G Auto Reconciliation Execution Report – Now the same report shows exceptions in matching up the
imported bank statement transactions with the existing AP, AR,GL,Payroll and Miscellaneous
transactions in the system. It gives descriptive reasons why the line was not able to be reconciled
automatically.
SWIFT 940
SWIFT940 is a common format used by many banks to provide institutional Customers, electronic bank
statements. If the bank provides this type of statement, Bank Statement Open Interface can be used to load
bank statement information into Oracle Cash Management.
The Bank Statement Loader program uses a predefined SQL*Loader script to load SWIFT940 bank
statement files. However, since each bank adopts the SWIFT940 standard slightly differently, SWIFT940
format has to be mapped to the Bank Statement Open Interface tables. The mapping information can be
created from the SWIFT940 mapping template.
The SWIFT940 SQL*Loader script is located in $CE_TOP/bin/SWIFT940.ctl.
After the SWIFT940 bank statement files are loaded into the open interface tables, new bank transaction
codes have to be defined in Cash Management. SWIFT940 transaction codes represent the type of
transaction. For example, TRF represents transfers. SWIFT940 transaction codes do not, however, contain
information about the debit or credit nature of the transaction. Instead, the Debit/Credit Mark field is used
to differentiate debit and credit entries, where D means debit and C means credit. When the Bank Statement
Loader program populates the TRX_CODE column in the Bank Statement Lines Interface table, it appends
the Debit/Credit Mark to the transaction code to form a new code. For example, debit transfers are
identified as TRFD and credit transfers as TRFC. Set up these new transaction codes before importing the
bank statement information.
Use the Bank Statement Mappings window to map the structure of the bank statement file to the Bank
Statement Open Interface tables. Mapping has to be defined for each unique file structure.
The default mapping templates for BAI2, SWIFT940, and French EDIFACT are provided by Cash
Management and cannot be changed. New mapping templates can be created by copying the existing
templates.
• Open the Bank Statement Mappings window.
• To review a mapping template, choose one from the list of values. Otherwise, cancel the list of values.
• Create a new record for the new mapping template.
• In the Name field, enter the name of the new mapping template
• In the Description field, enter the description for the new mapping template.
• In the Control File Name field, enter the SQL*Loader script that should be used with this new mapping
template. Choose an existing script from the list of values or enter a new script that is created. If the bank
uses the BAI2 format, SWIFT940 format or French EDIFACT format , choose BAI2.ctl, SWIFT940.ctl
or EDIFACT.ctl respectively. If the bank uses a user-defined format, enter the SQL*Loader script that is
created.
• In the Date Format field, enter the date format that is used in the bank statement file. The default format
for BAI2 and SWIFT940 is YYMMDD. The default format for French EDIFACT is DDMMYY.
• In the Precision field, enter a precision for the amounts if they are expressed as integers and have the
same precision within the bank statement file. The Bank Statement Loader program uses the precision to
convert integer amounts into decimal numbers. For example, an amount expressed as 10000 with a
precision of 2 is interpreted and loaded as 100.00. Leave the precision blank if amounts are already
decimal numbers or if they have different precisions. In BAI2, the default precision is 2. In SWIFT940,
precision is not used because amounts are already decimal numbers. In French EDIFACT, precision is
specified for each amount on the header and line records.
• In the Bank File Format Type field, enter the format type of the bank statement file. Enter a new format
or choose from a list of previously defined formats. If a new format was not defined, the seeded choices
are BAI2, SWIFT940, and EDIFACT-France. Once a mapping template for a new format is created, that
format is available in the list of values. Choose BAI2, SWIFT940 format or the French EDIFACT
format, depending on what the bank uses. If the bank uses a user-defined format, enter that format.
• Choose the Populate button. If an existing format is chosen as the Bank File Format Type, the rules
defined in the mapping template for that format are automatically entered in the Header and Lines
tabbed regions. If multiple mapping templates are defined for that format, then one has to be selected
from the list of values. However, if a newly defined format is used, only the column names are entered in
the Header and Lines tabbed regions.
• The Headers tabbed region lists all the columns in the Bank Statement Headers Interface table. Define
the mapping for the columns according to the file format used by the bank. The mandatory columns in
the table are:
STATEMENT_NUMBER
BANK_ACCOUNT_NUM
STATEMENT_DATE
ORG_ID.
OTHERS
If the bank uses a format other than BAI2 or SWIFT940, a SQL*Loader script has to be developed and a
new mapping template created for that format.
To load user-defined formats, the following customizations are required:
• A SQL*Loader script to read the bank statement file and copy the data to the intermediate table
• A mapping template to map the records and fields in the bank statement file to the columns in
the Bank Statement Open Interface tables.
On the other hand, the program completes but warnings are raised in the following scenarios:
• when the number of records does not match the record count specified in a BAI2 bank statement
file.
• when the same bank account number is used by multiple banks and the bank and bank branch
information is not present in the open interface tables.These details have to be entered manually.
• when dates do not match the expected format.
• If data from a bank statement file already exists in the Bank Statement Open Interface tables, the
tables will be purged and the file will be reloaded.
• when data cannot be parsed.
• Name: CE_ERROR_EXIST
Text: Import/Auto Reconciliation program cannot be submitted since the error was
generated during the loading process.
Fix the error before running Import/Auto Reconciliation program.
• Name: CE_LOOKUP_FAIL
Text: The loading program was not able to locate &FIELD information in the bank statement file.
• Name: CE_SQLLDR_MISS_REQ_FIELD
Text: The loading program was not able to locate &FIELD information which is required in the Bank
Statement Interface.
• Name: CE_SQLLDR_MISSING_RECORD
Text: Counted number of records (&COUNTED) do not match the number of records specified
(&GIVEN) in the bank statement file.
• Name: CE_BANK_ACCNT_NOT_DEFINED
Text: Bank account &BANK_ACCNT is not defined. Set up the bank account first.
• Name: CE_TOO_MANY_BANK_ACCNT
Text: There is more than one bank with the same account number &BANK_ACCNT.
You may need to choose the bank and bank branch in Bank Statement Interface window manually.
• Name: CE_RECORD_FAIL
Text: Error &ERR was generated during the loading process.
• Name: CE_INVALID_BAI2
Text: The bank statement file format is not BAI2.
• Name: CE_EXIST_HDR_DELETED
Text: The bank statement header information which is being loaded already exists in the Bank Statement
Interface table. The &CNT existing bank statement header(s) is (are) deleted.
• Name: CE_INVALID_DATA_FILE
Text: The entered data file is not valid. The SQL*Loader program failed to load the data from
&DATA_FILE.
• Name: CE_SQLLOADER_FAIL
Text: The submission for the SQL*Loader program did not complete successfully.
Check the SQL*Loader script.
• Name: CE_FORMAT_NOT_CORRECT
Text: The format entered is incorrect. See: Oracle Cash Management User Guide for formatting
standards.
• Name: CE_MISSING_MAPPING_INFO
Text: Enter a Rec ID and Position.
• Name: CE_MAPPING_NAME_EXIST
Text: This name already exists. Please, enter unique name.
• Statement loads successfully, but Import fails with an error of "Check the opening and closing
balances in the control totals."
Solution
‘88’ records followed by ‘03’ has to start with a Type Code.(Opening Balance. etc)
• BAI2 Bank file successfully Loaded and Imported. When try to Auto reconcile, the system cannot.
In the REFERENCE TAB (Bank Statements Window), you notice that in the fields titled: AGENT
and INVOICE, the incorrect data exists.
Solution
The seeded mapping rule for BAI2 is created based on standard BAI2 specifications. However, the
actual BAI2 data files sent from bank may have some variations.
In this case, create a new mapping rule based on the seeded BAI2 mapping rule. Remove the
mapping definition for invoice number and agent field in the mapping form so that the loader
doesn't populate the incorrect data. As long as the Check Number is captured auto reconciliation of
the check payment can be done.
However, BAI2 doesn't have a specific field for transaction numbers (check number). Banks
normally populate check numbers in the description field. Hence the mapping rule can be setup in
such a way that the loader can capture the transaction number from the description field.
• Why is data not populating the CE interface tables when it was correctly imported into the
temporary table CE_STMT_INT_TMP ?
When Bank Statement Loader is run it spawns two programs:
G Run SQL*Loader:
This program picks data from the data file and loads it into the CE_STMT_INT_TMP table. This is the
first phase when the Bank Statement Loader uses a SQL*Loader script to insert data from the bank
statement file into the intermediate table. The SQL*Loader script understands the format of the file and
parses the data accordingly. The intermediate table is simply a representation of the bank statement file in
the database, where a row corresponds to a record in the file and a column corresponds to a field in the
record.
G Load Bank Statement Data:
This program takes the data from the CE_STMT_INT_TMP table and loads it into the
CE_STATEMENT_HEADERS_INTERFACE and CE_STATEMENT_LINES_INTERFACE tables.
In this second phase, the Bank Statement Loader uses a set of mapping rules to transfer data from the
intermediate table to the Bank Statement Open Interface tables. These rules map the structure of the
bank statement file to the open interface tables. These rules may also perform simple pattern searches
and data transformations. Hence the validation of the format occurs at this stage. If the actual statement
file does not correspond to the mapping rules, it is rejected.
Hence the bank statement file should be designed to suit the BAI2 mapping rules. Using the mapping
rules. Cash Management validates and populates the bank statement file into the interface tables.
• Why can a sign be attached to the control amount but not to the line amounts ?
The default format fixed for BAI2 file for record 03 is:
03,<bank account number>,<currency code>,<type code>,<sign& gt;<amount>,<item count>,<funds
type>/Type codes are the ones you define in Bank transaction codes window.
But the default format for record 16 (statement lines) is:
16,<transaction code>,<amount>,<funds type>,<bank ref #> ,<customer ref #>,<text>/
Note there is no "sign" here.
However this can be modified according to requirement, But a loader script has to be created to map the
custom format.
• How to define the record Id & Position for the columns - CONTROL_BEGIN_BALANCE,
CONTROL_END_BALANCE, CONTROL_TOTAL_DR and CONTROL_TOTAL_CR?
This can be done in the mapping form by creating a new mapping rule and attaching the control file.
Then press the ‘populate’ button to populate all the fields, attach the record id and position for the
above fields and finally save. In BAI2 and SWIFT940, the user does not have to provide mapping logic
for these control fields since the program takes care of it automatically.
REFERENCES
Note 136123.1, Note 155046.1, Note 201359.1, Note 161872.1
Bank Statement Loader-Feature Design Document
Bank Statement Loader Program
2002
Authors: Avijit Bhattacharyay
Shome Mukherjee
Contributing Authors:
Oracle Corporation
World Headquarters
500 Oracle Parkway
Redwood Shores, CA 94065
U.S.A.
Worldwide Inquiries:
Phone: +1.650.506.7000
Fax: +1.650.506.7200
www.oracle.com