Odoo CMS - a big picture

New Accounting Features in Odoo 10 - part 2: Accounting Entries and Bank Interface

Hieu Le

Continue the topic New Accounting Features in Odoo 10, in part 1, I was talking about the Main Changes and Dynamic Reports. In this post, I will write about the Accounting Entries, and Bank Interface which is also a nice feature of the Odoo Enterprise version.

Basic Concepts

First of all, you need to know some basic concepts in Accounting and Banking.

  • A Bank Statement is a record issued by a bank, typically sent to the account holder every month, summarizing all the financial transactions in an account throughout the time from the previous statement to the current statement. The statement provides the following information for a bank account: The beginning cash balance in the account + The total amount of each deposited batch of checks and cash - Funds withdrawn from the account - Individual checks paid + Interest earned on the account - Service charges and penalties charged against the account = Ending cash balance in the account. Read more: Bank Statement Definition, What is a Bank Statement

  • A Journal is a record of financial transactions in order by date. A journal is often defined as the book of original entry. Read more: What is a Journal

  • A Journal Entry that is recorded in a company's general journal will consist of the following: the appropriate date, the amount(s) and account(s) that will be debited, the amount(s) and account(s) that will be credited, a short description/memo, a reference such as a check number. Read more: What is a Journal Entry, Journal Entry examples

  • Double Entry Accounting means that every financial transaction will involve at least two accounts or more. In other words, an amount of money always goes from one account to another account. Read more: Concept of Double Entry. For example, I pay 100 Euro for the electric bill, the accounting transaction should be something in pair like this:

DR (Debit) in Expense account (increase): 100 Euro

CR (Credit) in Cash account (decrease): 100 Euro

  • Reconciliation is an accounting process that uses two sets of records to ensure figures are accurate and in agreement. Reconciling an account often means proving or documenting that an account balance is correct. Read more: Reconciliation Definition. Bank Reconciliation is the process of matching bank statement lines (provided by your bank) with transactions recorded internally (payments to suppliers or from customers) to ensure that the company's records (check register, general ledger account, balance sheet, etc.) are correct and that the bank's records are also correct. Read more: Introduction to Bank Reconciliation

By the way, I found a informative Tutorial from GURU99 website. If you want to learn more about Accounting, here follows the link of their Free Accounting Tutorials.

Invoice, Payment and Accounting Entries in Odoo

There are several ways to make payment in Odoo: pay manually for individual invoices, use Batch Deposit, use Bank Statement. I am going to do the whole process from creating Sales Order, generating Customer Invoice in order to check the Accounting data generated at each step. It would be easier for you to follow and to understand what is running behind Odoo.


Please note that in the configuration of Receivable Accounts and Payable Accounts, the checkbox ‘Allow Reconciliation’ should be ticked.



Manual Payment Method

This is used to directly make payment for individual invoices.

Example 1: by cash

  • Step 1: Create and Confirm a Sales Order. Accounting Entries are not generated at this step because I did not create invoice.

  • Step 2: Create Invoice in Draft status. Accounting Entries are not generated at this step because the invoice is in state draft.


  • Step 3: Validate Invoice. It status changes to Open. An Accounting Entry is generated and posted as below.

Pay attention to 101200 Account Receivable. It is Debited 115 $ meaning that the amount of money in this account increased and be waiting for you to collect money from your customer.

  • Step 4: Register Payment for the Invoice. Use the Payment Journal Cash. Validate it to make full payment. Then the Invoice is Paid.


A Payment record is generated right after you Validate the Register Payment.


Together with the Payment record, a Journal Entry is also generated to Credit (decrease) the amount of money in 101200 Account Receivable and to Debit (increase) the amount of money in 101501 Cash. It means you collected money from your customer, then you have more cash.


Now I click on the button Reconciled Entries to check the reconciled Journal Items. The Journal Item generated in Step 3 (101200 Account Receivable - Journal Customer Invoice USD - Label / - Debit 115 $) is reconciled with the Journal Item generated in Step 4 (101200 Account Receivable - Journal Cash USD - Label Customer Payment: INV/2016/0004 - Credit 115 $). It means that:

  • You collected money from your customer.

  • No ‘receivable’ money needs to be received.

  • The 2 columns Debit and Credit get balanced.

  • So, the transaction is correct.


Example 2: by bank

Let’s take another example using Bank payment method which is similar to the previous example, the only difference is that I use Bank Journal instead of Cash Journal. To save time, I skip step 1, 2 and 3 for creating Sales Order and validating Invoice. I have this Journal Entry after the Invoice validation.

  • Step 4: Register Payment for the Invoice. Use the Payment Journal Bank. Validate it to make full payment. Then the Invoice is Paid.


A Payment record is generated right after you Validate the Register Payment.


Together with the Payment record, a Journal Entry is also generated.

And the Journal Items of 101200 Account Receivable are reconciled.


Bank Statement Reconciliation in Odoo

Now I am going to use Bank Statement to make payment. For each line in a bank statement, it can be:

  • (1) recorded as a new payment: the payment’s journal entry is created and reconciled with the related invoice when processing the bank statement

  • (2) matched with a previously recorded payment: a payment is registered when a check is received from a customer, then matched when checking the bank statement

  • (3) recorded as another transaction: bank transfer, direct charge, etc.

Example (1) recorded as a new payment

Normally a Bank Statement has hundreds of lines to pay several Invoices at a time, but I take a simple example for only 1 Invoice.

  • Step 1: generate an Invoice from a Sales Order, validate it but not made payment yet. Its status is Open.


A Journal Entry is generated as usual and the Journal Item for 101200 Account Receivable is not reconciled.

Invoice in Open state has these Journal Entries

  • Step 2: create a Bank Statement manually.

Please note that the Amount can be either positive or negative.

  • Positive: if money goes into the bank account. This is my case. Because I sale the product and  collect money from my customer.

  • Negative: if money goes out the bank account. For example, I buy something and pay a Vendor Bill.

  • Step 3: reconcile it and close the statement.

Tip: instead of clicking but OK to reconcile the records one by one, you can hit Ctrl + Enter to do the multi reconciliation for several records at a time.


A Journal Entry is generated for it.


And the 2 Journal Items of 101200 Account Receivable (one from the Invoice, and one from the Bank Statement) are reconciled.


The ‘Reconcile Ref’ in previous Odoo versions is now the ‘Matching Number’. I open the 2 Journal Items’ form view, they should have the same number because they are reconciled to each other.


Example (2) matched with a previously recorded payment

In this example, I will use the feature Batch Deposit in Odoo. Read more: How to manage batch deposits of checks?

  • Step 1: create 2 Sales Order, generate 2 Customer Invoices and validate them.

  • Step 2: receive customer checks by manually creating a Payment and confirm it.


One important note here is that if I register payment on the Invoice with Payment Method Type ‘Batch Deposit’, the Journal Items will be auto reconciled immediately although Odoo said that payments can be registered from the menu Sales > Payments, or directly on the related invoice, using the Register Payment button. Maybe this is a bug. This is not what I am expecting that I will reconcile it later with Bank Statement. So, I will create a Payment manually. I created Issue 13216 in Github Odoo. If it is not a bug, ticket can be closed. But i think it is better to double check with the Odoo guys and community.

  • Step 3: prepare a Batch Deposit

From the Accounting application, go to the menu Sales > Batch Deposit, and create a new Batch Deposit.


I can print it out and send to the bank. Because the bank will ask for a deposit ticket (also referred to as deposit slip) to be filled-in with the details of the checks or cash to be included in the transactions. The bank statement will be sent back to reflect the total amount that was deposited and the reference to the deposit ticket, not the individual checks.


  • Step 4: reconcile the Deposit with the Bank Statement

I can import the Bank Statement file from the bank, but in this example I will create it manually for testing.


When reconciling, the Batch Deposit is suggested based on the Reference DEPOSIT/2016/0001 I put in the Bank Statement.


I select it and click Reconcile and close the statement.


The Journal Items should be reconciled. But it was strange that they were not, and the Journal Items that should have been generated for the Bank Statement were not there. Maybe because this is not the final release of Odoo 10, it is still buggy? I created Issue 13216 in Github Odoo. An Odoo guy explained that because I created the Payment manually, the system did not know which Invoice the Payment should be linked to. Instead, I should use Register Payment on the Invoice form to process it, see Example (3) below.


Example (3) Register Payment on the Invoice using Batch Deposit

This is similar to Example (2), but instead of creating Payment manually, I use button ‘Register Payment’ on the Invoice form to see if the Journal Items can be reconciled or not.

  • Step 1:  create Sales Order, confirm it, then generate Customer Invoice, validate it

A Journal Entry is generated

  • Step 2: Register Payment on the Invoice using Batch Deposit method, validate it.


A Payment is auto generated.

The Invoice is fully paid.


A Journal Entry is generated for the payment, and Account Receivable items are reconciled.


  • Step 3: create a Batch Deposit for the Payment above

  • Step 4: reconcile the Deposit with the Bank Statement


Finally, I have these Journal Items. Everything seems to be right.


And the Bank Statement is linked to the Journal Item.

Bank Statement Import and Synchronization

Instead of manually entering the Bank Statements as I did above, Odoo supports us to import them. You can find it on the Accounting Dashboard > Bank > Import Statement


Currently, Odoo Enterprise supports several file formats such as SEPA CAMT.053, .CSV, .OFX, .QIF.


Banks use different file formats. In one of the current projects at my company they use MT940 format for German banks, so they had to find third party modules to support it. Robert, a developer at my company used and extended the module account_bank_statement_import_mt940_base from OCA. There are some other ones, I search it on Odoo Apps page.


Odoo Enterprise also supports Bank Synchronization to automatically sync bank feeds every 4 hours.


To check if a bank is supported, I click on button Configure and search more.


There have been 160 banks on the list so far.

Then I need to configure the Online Account so that Odoo can connect to it. I did not check this feature because I do not have a running real Enterprise instance and a bank account to test. I cannot do it on Odoo Runbot as it is not safe for my privacy. So if anyone else tried this, your feedbacks are welcome. In the future, if I have a chance to use this feature, I will write another blog post about it.