Projects:International Bank Account Codes Formats/Specifications
Contents |
International Bank Account Codes Formats - Functional Specifications
Overview
There exists several structures to represent the code that identifies a bank account depending on the context. This representation is different for each country, and even in the same country, there can exist more than one valid format. For example, the structure used in USA is different from the one used in Canada, and those have nothing to do with the ones used in UK, or Australia.
In order to make easier to perform operations between bank accounts belonging to different countries, there exist one European initiative to define an standard codification: the IBAN, so it is very common that one bank account must be shown in both formats: the country specific one, and the international one. So, two different codes can be needed to represent the same bank account. There also exists one ISO standard of all the bank codes around the world: the BIC codes (also known as SWIFT codes, or ISO-9362 codes).
Even, when working with local formats, a sorter code's format can be used.
Purpose
The purpose of this project is to develop an easier way to manage bank account codes formats for any kind of bank account structure, with the possibility of supporting more than one format for the same bank account (for example international and local formats). Since 2.40 version this feature is actually supported by the application, and the purpose now is to make it easier for the user to manage this feature.
User will be able to specify bank account formats, so when entering a bank account, application will check if bank account follows the specified format. The allowed fields used to build a format will be:
- Bank
- Account
- Check Digits
- Branch
So, for example, the USA format could be defined as
Position from | Position to | Minimum Length | Digit type |
1 | 8 | 8 | Bank Code |
9 | 9 | 1 | Digit Check |
10 | 26 | 11 | Bank Account |
The check digit logic will also be implemented, so application will check them every time a bank account is filled in.
Scope
The scope of this project is to modify the existing bank and bank account definition windows, and the logic implemented to show those accounts in the rest of the application. Also new windows for specifying formats will be developed.
References
Some examples of banks, branches and bank accounts formats are:
- SWIFT Bank International Code (BIC)
- International Bank Account Number (IBAN)
- Routing Transit Number used in USA
- Transit Number used in Canada
- Branch codes used in Australia.
- Industry Sorting Code Directory used in UK
Design Considerations
Assumptions
We assume that all bank account codes world wide, are composed by a set of alphanumeric characters. This characters represents different pieces of data related to a bank account, such as the bank and it's branch (or office) that owns the account, the account type and number, or some check digits. The difference between two different formats is which of this elements composes it, and it's order and representation.
Dependencies
The compatibility backwards is a priority, so existing bank accounts must be supported in the new bank account codes format structure. Some adjustment must be implemented in the database existing bank accounts.
Functional Requirements
User roles & profiles
- Payable Managers & Financial Controller
When inserting new bank accounts in the system, application will provide more tools to enter in the application the bank accounts in an specific format, according to the local issues and formats.
- All users
The displaying of the bank accounts all over the application will be modified, so every employee that uses a window with a Bank Account field will see the bank account in the format they are used to.
Business process definition
When a new bank account is going to be entered into the system, the bank account format must be selected. According to this selection, the way of entering the bank account data, and the checks performed, will be different, due to the format definition, that is also configurable.
When a new bank is created, the bank code (BIC Code and/or local code) must be provided. Then, when creating a bank account belonging to this bank, the provided bank code will be copied into the bank account number text box (if specified like that in the format specification). Then the account number must be written down, following the bank code copied automatically, or deleting or modifying this code. As the bank account normally starts with the bank code, this feature will avoid errors copying the bank code into the bank account code.
User stories
User Story 1
- Oscar, the financial controller of a company located in USA and using Openbravo as ERP, decides to open a new bank account in the DAL bank.
- In the window of bank of the application, because no bank account exists in the system belonging to the DAL bank, a new record is created and the "USA" format selected.
- The data filled in for this new bank record is: name: "DAL Bank", and routing transit number: 012345672.
- A new bank account is created in the bank account tab. The field Account Number is filled in automatically with the routing transit number entered in the bank tab: 012345672. This code is completed manually by Oscar with the account number: 00000987654321, so the bank account number is: 01234567200000987654321.
- Now International Format is established for this account, and the Specific Format is selected in the Show combo box.
- Everywhere in the application showing this account, will be showed as DAL Bank. 0123 4567 2 - 00000987654321.
User story 2
- Oscar, the financial controller of an Spanish company that opens a new account in the Spanish bank called DAL Bank, already existing in the application, because there exists more accounts belonging to this bank.
- He goes to the Bank tab, and in the DAL Bank record, he goes to the Bank Account tab, and click on New.
- Bank Account Number text box is filled in with bank code of DAL Bank: 210352803, and completed manually with the rest of the account number, so the bank account number is finally 21035280380000015879. Oscar fills in also the international bank account number text box. In this case ES0021035280380000015879.
- He chooses the International option in the Show combo box. Everywhere in the application where this account is referenced, will show this label: ES00 2103 5280 38 0000015879.
Functional requirements based on business processes
Some changes and new windows and database tables are needed in order to implement this functionalities:
Num | Requirements | Importance | Status |
1 | New window called Bank Formats with two fields: textbox name and checkbox default. | Necessary | To be planned |
2 | Sub-tab called Structure in the window Bank Formats. Fields to be filled in in this tab are: Position From, Position To, Digit Type. | Necessary | To be planned |
3 | One of the digit types is Digit Control. This digit type establishes a checksum of other digits of the bank account. This checksum could be implemented in order to check, when inserting a bank or a bank account, if the checksum is valid. | Should Have | To be planned |
4 | In the existing Bank window, fields Code, Branch and Digit Control should disappear, and a script in database should update bank account code with this values when updating application. | Necessary | To be planned |
5 | In the existing Bank Account window, the Spanish bank account field should be removed. The Generic Bank text box should be renamed to Local Format, and the IBAN to International Format. A combo box with all the available formats should be shown with both text boxes.
The Show Spanish, Show Generic and Show IBAN checkbox should be transformed into a combo box. The Local Account text box fills in automatically when creating a new bank account, with the bank code. |
Necessary | To be planned |
Data Requirements
Two new tables should be created in database:
- C_BANKFORMAT
- C_BANKFORMATSTRUCTURE
Open Discussion Items
It is not decided if:
- Digit Check logic will be supported.
- This could be implemented as a Java method or procedure call to make it easier to implement various checks.
- SWIFT code is also needed for Business Partner bank account because the SEPA credit transfer needs it information for international transactions.
- Issue: 6208