From ADempiere
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.

Table of Contents{{#if: Business Features| | Business Features }}{{#if: | | [[{{{3}}}]] }}{{#if: | | [[{{{4}}}]] }}{{#if: | | [[{{{5}}}]] }} | Banking{{#if: | | [[{{{next}}}]] }} ⇒

A key to verifying the accuracy of accounting information is the regular reconciliation of the accounting entries with bank statements. It is extremely important for auditing and accounting that the bank records match the accounting records. This section discusses this important aspect of the financial system.


In managing a bank account, we keep a record of all cheques that we write and monies that we deposit into the account. At any time we should know the balance of the account. However, with cheques, there is a delay between the time we write the cheque, send it, the receiver deposits it in another bank, it clears that bank, clears our bank and the bank account balance is adjusted. This process can take months but a few weeks would be typical. Electronic processing speeds the process but there are still delays in clearing that could last a few days. During this time, our bank balance and the accounting balance don't match. As business continues, the likelihood of the bank balance and the accounting balance ever matching becomes pretty small – there are too many outstanding items in transit at any one time.

In ADempiere, the bank reconciliation process is based on the premise that everything involving the bank is outstanding and in transit until reconciled. Any payment made or received and any transfer of monies is made to or from an “In Transit” account, not the actual account for the bank. Entries are only posted to the actual account for the bank when the bank account is reconciled.

When establishing default accounts for bank accounts, the “in-transit” account needs to be identified along with the actual bank account.


Bank information is identified in the System Admin{{#if: Organizational Rules |  » Organizational Rules }}{{#if: |  »  }}{{#if: |  »  }}{{#if: |  »  }} {{#if: |{{{2}}}|Bank }} Window. The {{#if: |{{{3}}}|Bank }} Tab is used to identify the bank and branch where the account information is held. This includes items such as the address, routing number and SWIFT code.

The {{#if: |{{{3}}}|Account }} Tab is used to identify information about the account including the currency and account type.

Subordinate to the Account tab are the following:

The definition includes the print format for the document. For cheques, this is the print format for the cheque.
The next number to use in the sequence can also be set here.

In defining the accounting, it is possible to use the same account for the asset and in-transit bank accounts. See the notes on tracker 1840016 Avoid usage of clearing accounts.


Where multiple accounts exists, moving money between bank accounts is possible with the Bank Transfer process. There are two types of transfer that can be used:

  • Immediate Bank Transfer where both accounts have the same currency and
  • Bank Transfer which allows for transfers of different currencies.

Both transfer processes are available in the Open Items{{#if: |  »  }}{{#if: |  »  }}{{#if: |  »  }}{{#if: |  »  }} portion of the menu tree.

Immediate Transfers

The Immediate Bank Transfer generates a Cash Journal entry with 2 lines with Cash Type set to Transfer as follows:

  • From Bank Account "A" to Cash Journal
  • From Cash Journal to Bank Account "B"

Both bank accounts must be different and have the same currency as the cashbook.

Complex Transfers

More complex transfer where there are currency differences can be processed by the Bank Transfer process. In this case, the software treats the transfer as two payments(one is a receipt and the other isn't) and uses a bridging Business Partner and a Charge to make the transfer. The currency of the transfer is used in both payments and can be different than the currency of either bank account. If the chosen currency is different than the system currency, the type of conversion can be selected.

Both bank accounts must be different.

When the process is run, the two payments are created and completed.

Bank Deposits

Note.gif Note:

This is a new feature proposed for 3.8.0+. See ADEMPIERE-302.

Bank deposits are getting rarer in the age of electronic transactions but they still exist. ADempiere provides a window to enter bank deposit information and keep track of the entries that were included in the deposit. The deposit header identifies the bank account that will receive the deposit and the deposit lines itemize the transactions that are included in the deposit. The items can be checks or cash payments or bank transfers from a cash journal.

Deposit items that are in a currency other than the bank account currency will be converted to the bank account currency on the date of deposit. This may create a realized gain or loss if the conversion rate changed from the time the payment was received and the date of deposit. Changes to the exchange rate can be made and the deposit slip re-posted if necessary.

Each deposit item can also have a charge applied.

The accounting artifacts created are limited to the change in source currency, realized gains and any charges applied. When the bank deposit is reconciled, as described below, it will appear as a single payment received on the date of the deposit.


Reconciliation is the process of matching a bank statement to accounting activity. At the end of the reconciliation process, you should be able to explain the difference between the bank balance and the balance in the equivalent accounting data in terms of outstanding cheques, payments, currency conversions and other charges.

The reconciliation, when completed and posted, will create accounting entries transferring the line amounts from the in-transit account to the bank account. The amount left in the in-transit account represents the outstanding cheques and deposits.

Automatic Reconciliation

ADempiere provides a number of mechanisms to automate the reconciliation process. These include loading an electronic copy of the bank statement and matching the statement with the accounting activity. In the end, the automatic processes will only help speed the process along but they will not be able to fully perform the reconciliation without user assistance. Some manual processing will be required, if only to check and verify the results. More information on the automatic reconciliation can be found below.

Manual Reconciliation

To start the process, open the Open Items{{#if: |  »  }}{{#if: |  »  }}{{#if: |  »  }}{{#if: |  »  }} {{#if: Bank Statement|Bank Statement|BankStatement }} Window. Create a new record, select the bank account, give the record a suitable name (it will default to the current date) and set the statement date to match the data of the statement from the bank. Save the record.

The Beginning Balance will default to the current balance of the selected bank account.

Click on the button Create Lines From to fill the bank statement based on activity in the accounts. The Create From Dialog will appear showing all unreconciled activity with the selected bank account before the statement date. Select all the lines that show on the bank statement. To select all, click the Select All icon button in the bottom left of the form. Click the green check mark when finished.

Back in the {{#if: Bank Statement|Bank Statement|BankStatement }} Window, open the {{#if: Statement Line|Statement Line|StatementLine }} Tab. In the multi-line view, all the activity selected above should show as lines in the statement. For activity that is not listed, you will have to manually add line items to the Bank Statement Line window.

In form view, each line contains the following:

  • Statement Line Date – as specified in the bank statement.
  • Account Date – the date the transaction should appear in the accounts. This may vary depending on the accounting rules used. For example, expenses that clear the bank early in the month may be applied to the accounts in the previous period.
  • Effective Date – the date funds will be available. Used for cheque clearing or wire transfers where the funds may appear but not be useable for a few days.

There are also a number of amounts:

  • Statement amount
  • Transaction amount
  • Charge amount
  • Interest amount

As you fill these in, a callout will attempt to “guess” the other amounts. The general calculation is as follows:

Statement Amount = Transaction Amount + Charge Amount + Interest Amount

If you fill the Statement Amount first, the callout will create an equivalent Charge Amount and the Charge selection box will appear.

If you fill the Transaction Amount first, the callout will wait until you have either identified a payment or filled in the Interest Amount or Charge Amount. The callout will assign a Charge Amount or Interest Amount respectively that balances the equation (keeps the Statement Amount at zero).

For these reasons, it is helpful to follow this process when creating lines.

  • Enter the Statement Amount first.
  • Select a payment that this applies to, if known. The transaction amount will be entered automatically and the Charge Amount changed to balance the equation.
  • Verify the Charge Amount if any and select the correct Charge.

Example: a visa payment is received for $450 dollars. In the statement this appears as $441. The difference is a 2% visa processing fee. To enter the statement line, enter the Statement Amount as $441. Select the payment of $450 which will put $450 in the Transaction Amount and set the Charge Amount to -$9. Change the Charge to Visa Processing Fee (or the equivalent.)

When all lines have been entered and checked, return to the {{#if: Bank Statement|Bank Statement|BankStatement }} Window and verify that the Ending Balance matches the statement from the bank. When you are satisfied that the statement is correct, click the Complete button and complete the document. Posting this document will create the accounting entries that update the bank account balance in ADempiere.

Note.gif Note:

After the document is posted, if you click on the Posted button, you will see the accounting transactions that took place.

Reconciliation Report

The Open Items{{#if: Unreconciled Payments |  » Unreconciled Payments }}{{#if: |  »  }}{{#if: |  »  }}{{#if: |  »  }} report will list all outstanding payments.

A reconciliation report which will show outstanding items at any point in time is available here.

Importing Bank Statements

Before you can import a bank statement, you have to define the import loader in the {{#if: |{{{3}}}|Statement Loader }} Tab.

The actual statement import is performed by the System Admin{{#if: Data |  » Data }}{{#if: Data Import |  » Data Import }}{{#if: Load Bank Statement |  » Load Bank Statement }}{{#if: |  »  }} process. The imported statement is temporarily loaded in the System Admin{{#if: Data |  » Data }}{{#if: Data Import |  » Data Import }}{{#if: |  »  }}{{#if: |  »  }} {{#if: Import Bank Statement|Import Bank Statement|ImportBankStatement }} Window. From there, the bank statement data can be used to create the accounting data, matched to the accounting data and imported.

Defining a Custom Statement Loader

Custom bank statement loader classes have to meet the interface requirements of the Bank Statement Loader Interface.

Bank statement loader classes that extend this interface can be loaded by the MBankStatementLoader controller class.

The usage patter looks like this:

  • init() is called in order to initialize the loader
  • validate() is called, allowing the loader to perform data validation if it provides this.
  • loadLines() is called, request the loader to start loading statement lines
  • for every statement line that the loader encounters, it calls the saveLine() method of the MBankStatement controller object it obtained as part of the call to init()

The MBankStatementLoader controller object can now obtain the data for the current bank statement line by using the corresponding get methods of the loader class.

Matching Bank Statements with Accounting Entries

In the System Admin{{#if: Organization Rules |  » Organization Rules }}{{#if: Bank Statement Matcher |  » Bank Statement Matcher }}{{#if: |  »  }}{{#if: |  »  }} you can define customer matcher classes that implement algorithms to match bank statement lines with the accounting data. These classes have to implement the BankStatementMatcherInterface.

For Developers

The Bank Statement Import software (that moves the data from the Import table to the main database) is located at

  • base/src

The software that loads the data into the Import table is located at

  • base/src

The software that matches lines in the bank statement to the accounting data is located in:

  • base/src

The software that creates the bank transfers is located at

  • base/src