New Accounting Features in Odoo 10 - part 1: Main Changes and Dynamic Reports

Hieu Le

Odoo 9 had a revolution in Accounting module. I checked the Odoo Runbot - Enterprise version - Master branch on 04 Aug 2016, there is no big difference between version 9 and version 10 so far. In this post, I will talk about the main changes, especially the Chart of Accounts and Dynamic Reports.

Chart of Accounts (CoA)

Odoo removed the hierarchies in the CoA. It means there is no longer field Parent on the Account form (menu Accounting > Adviser > Chart of Accounts, model account.account) and replaced it by optional Tags (field tag_ids, many2many account.account.tag) which is used in the financial reports.

CoA with Hierarchy in Odoo 8 and older versions

CoA without Hierarchy in Odoo 9 and newer versions


Account Form View without Parent field


Financial Reports will have a hierarchy but it is defined by the reports (Balance Sheet, Profit and Loss...) at menu Accounting > Configuration > Financial Reports

Financial Reports


Balance Sheet Report have 3 sections: Assets, Liabilities, Equity


Section Assets has 3 Sub-sections: Current Assets, Plus Fixed Assets and Plus Non-current Assets


Each section can have many nested sub-sections. In that way, we create the hierarchy structure in the reports. The Formula allows us to calculate the Balance amount. After configuring it as you wanted, you can view the Dynamic Reports in HTML view and export them under Excel format (.xlsx).


Many people complained, even got angry because they did not understand why Odoo decided to remove the CoA hierarchy. They said that it was useful and really necessary for accounting processes. But some agreed with that. Fabien Pinckaers - Odoo Founder, explained it in this discussion Chart of Account structure and Financial year closing in Odoo 9, and other debates here. The main reasons are:

  • From an accounting point of view, a Trial Balance should be flat.

  • An accountant expect that a Trial Balance / Chart of Account is NOT a hierarchy.

  • The parent hierarchy implied a lot of problems / difficulties for accountants: complexity to import a chart of account, error prone at account configuration, leading to wrong legal statements, bad usability with strange tricks, like a 'View' account that is a concept which does not exist in accounting.

However, Odoo delegated the hierarchy computation to the report engine (Dynamic Reports). I will talk more about it later on this post. Fabien suggested that it would be better to manage the change with clients and train them on the new way of working with accounting reports.

To be honest, I have not had a client intensively using the new Accounting engine of Odoo 9 or 10, I cannot say it is good or not. But here I can share with you an experience I got when working with CoA hierarchy in an Odoo 7 project. It has multi companies, around hundreds. When I installed the CoA, because of the hierarchy, the system needs to calculate values for ‘parent_left’, and ‘parent_right’ fields in source code (a technique for managing hierarchical data, read more: Parent Left and Parent Right in openerp, Nested set model, Managing Hierarchical Data in MySQL). The more accounts are created, the more ‘parent_left’, and ‘parent_right’ fields need to be (re)-calculated, the more time it takes. I don’t remember exactly but in my case, around 500 nested companies, I had to wait 3 - 4 days or more to finish. So I think I am happy with the CoA without hierarchy.

Field Active →  field Deprecated

Now let’s go into details about the changes in CoA, Accounts, Taxes. On the Account form view, field Active was replaced by field Deprecated which has the same meaning: the account is still visible but not accessible in many2one linking to accounts, but the term ‘Deprecated’ sounds common for the Accountants.


Account Types

In previous Odoo version before 9, an Account has two types:

  • Internal Type (field type): used technically (views, aggregation, receivable, payable)

  • Account Type (field user_type): depends on the country, used for Financial Reports (P&L, BS)

Since Odoo 9, there has been only Type (field user_type_id) on the Account form view.

Account Type


The field Internal Type is now a field in the Type. with 4 values Regular, Receivable, Payable, Liquidity, the type 'View' and 'Closed' were removed. Look at the screenshot below, at the Domain field,  [('account_id.user_type_id.type', '=', 'receivable')] where ‘user_type_id’ is for the Account Type on the Account form view, and  ‘type' is for the Type inside the Account Type.

And it is weird that there is no way to edit the ‘Internal Type’ in the Enterprise version, but in the Community version, I have to go to the menu Accounting > Configuration > Financial Reports > Account Reports, edit a Report with Type 'Account Type', select an Account Type in the list inside tab Report

The ‘Internal Type’ in Odoo 10



Here is the list of changes since Odoo 9:

  • Simplified the Tax form

  • Replace Tax Code by Tags: are used for custom reports.

  • New field Tax Group: defines where this tax is summed in the invoice footer. All the tax belonging to the same tax group will be grouped on the invoice footer.

  • In Odoo v8, the tax statement report is based on tax codes, there was a chart of tax code. No more Chart of Taxes in Odoo v9, those info will be shown and categorized in the Tax Reports by the field Tax Scope on Tax form. The Tax Report is only available in the Enterprise version.

Tax Form View


Tax Report


Read more: How to define new taxes?


Invoices and Payments

On the Invoice form view, there is no more Update button, the taxes are calculated automatically and the total amount is updated when a product is added. This is applicable for Sales Orders, Purchases Orders, Customer Invoices, Vendor Bills (Supplier Invoices).

Customer Invoice Form View


We have a new computed field on the Invoices ‘amount_total_signed’ which is the amount in the currency of the company and negative for refund invoices (or refund supplier invoices).

Negative Amount for the Refund


The Payment management has been simplified. Odoo merged the 'account_payment' module into the ‘account’ module. On the Invoice form, button ‘Register Payment’ open a popup technically using a new Payment model (‘account.payment’),  not ‘account.voucher’ anymore. In other words, Payment Order (model ‘payment.order’) and Journal Voucher (‘account.voucher’) were completely removed.

New object ‘account.payment’


Payments replaced Payment Orders and Account Vouchers


Fiscal Year and Period

The Fiscal Year has been replaced by a field on the Company form view telling what is the last day of every fiscal year, like December 31. It’s not a date field, it’s valid for all years. Once the accountant / bookkeeper has created the journal entry to allocate the Current Year Earnings, you should set the Lock Date to the last day of the fiscal year.

Fiscal Year Last Day


The Accounting Period was replaced by an ‘Accounting Valuation Date’, you can filter data on Dynamic Reports in any period you want. That is why we do not have the field Accounting Period on the Customer Invoice anymore.

Customer Invoice

On the Vendor Bill, the field Force Period was replaced by field Accounting Date.

Vendor Bill


Fields on the Fiscal Position form view were reordered for clearer info. This document tells us how to use Fiscal Position How to apply specific taxes by country, state or city?

Fiscal Position


When closing a fiscal year, there is no opening entry at the beginning of the next fiscal year. In Odoo there is no need to do a specific year end closing entry to close out income statement accounts. The reports are created in real-time, meaning that the Income statement corresponds directly with the year-end date you specify in Odoo. Therefore, any time you generate the Income Statement, the beginning date will correspond with the beginning of the Fiscal Year and the account balances will all be 0. Read more: How to do a year end in Odoo?


Dashboards and Dynamic Reports

With Dashboard, you will have an overview of various information in one page such as Customer Invoices, Vendor Bills, Bank, Cash with quick links to access your Invoices, Refund, Accounting Transactions ...

Accounting Dashboard


Dynamic Reports is a cool feature. Compared to the static reports under PDF format in previous Odoo versions, since Odoo 9 they have supported the Dynamic Reports which are only available for the Enterprise version. Reporting will be normal HTML views that open in the normal UI, you can filter the data on the report in real-time, then export then under PDF format (.pdf) or Excel format (.xlsx).

Dynamic Reports with Data Filter


You can compare the data between different periods.

You also can add foot notes (annotations) to your reports.

Foot Notes


Here is the list of main reports: Balance Sheet, Profit and Loss, Chart of Account, Executive Summary, General Ledger, Aged Payable, Aged Receivable, Cash Flow Statement, Tax Report, Bank Reconciliation. Some reports are available in the Enterprise version: Deferred Revenue Analysis, Cash Flow Statement, Tax Report, Executive Summary, Aged Receivable, Aged Payable.

There are other Accounting features mentioned in another blog post of mine: Which Odoo version should we choose? I am also writing

Part 2: Accounting Entries and Bank Interface. You can have a look later.


From my point of view, new Accounting features such as Dashboard, Dynamic Reports have enhanced the usability and the power of Odoo and made it a lot easier for the end users. However, I need more time, as well as more feedback from clients about the Odoo Accounting system, especially the CoA to see whether the removal of it is a good approach or not.


Read more

Odoo Accounting Roadmap


Odoo User Doc Accounting

The Accounting behind Odoo

Odoo vs OCA Comparison

Specs OCA Odoo 9: Financial Reports

WillowIT Blog Posts