VAT on payment treatment with OpenERP


In some countries, under certain conditions, companies can apply the cash basis. The cash basis means businesses may account for VAT as payment comes in from their customers. It is easier to manage than the normal method, which forces businesses to account for VAT based on invoices issued, regardless of whether or not the money has come in.

The key advantage to accounting for VAT on a cash basis is the cashflow benefit to your business. The effect of the cash basis is that you only become liable for VAT when you have actually received payment, so you don’t have to fund the VAT on your debtors. This is particularly helpful in a startup situation and in the case of an expanding business.

The modules

Getting the idea from an OpenNet post, we developed two modules in order to manage VAT on payment with OpenERP:

You can also get the latest version from OCA repository.


You have to create new shadow charts of accounts and taxes, parallel to the standard ones, filling them with accounts and tax codes used by shadow operations. Let’s see which new tax codes and accounts are needed with an example. Take the following invoice:

Description Base VAT
product1 100 20%
product2 100 10%
Total 230

As no accounting entries should be registered by this operation, the OpenERP resulting journal entry is totally shadow:

Debtors (shadow) 100
Debtors (shadow) 130
Tax Received (shadow) 10
Tax Received (shadow) 20
Product Sales (shadow) 200

In this example, we have to create at least 4 additional shadow accounts:

For VAT and sales (both real) accounts you have to associate the shadow accounts to be used when issuing invoice and when paying it:

The same has to be done for tax codes:

In our example, tax codes to be modified are 4:

  • Tax Received Rate S (20%)
  • Taxable Sales Rated S (20%)
  • Tax Received Rate S (10%)
  • Taxable Sales Rated S (10%)

Note that shadow tax code can be the same for every real tax code. It depends on how you want to track shadow operations and whether you want to distinguish shadow journal items by tax code or not. In this example, you could just create 3 tax codes: ‘shadow root’ (without parent), ‘shadow taxable sales’ and ‘shadow tax received’.

Finally, payment journals have to be modified too:

If you want to enable the VAT on payment treatment for every new invoice, go to company settings and enable the VAT on payment treatment field.

If you want to enable the VAT on payment treatment for every (new) customer/supplier, go to configuration parameters

Settings » Configuration » Parameters » Configuration Parameters

and edit property_account_receivable and property_account_payable parameters, setting respectively Debtors (shadow) and Creditors (shadow). Otherwise, you can set the default receivable and payable accounts to single customers/suppliers.


When you issue the above invoice, after having set the Vat on payment check, you get the following journal items:

As you can see, your real charts are not involved:

Let’s see the real items generated when you pay the invoice:

At the same time, the module generates shadow items in order to close the invoice and other shadow accounts:

Let’s now see chart of taxes and chart of accounts:


This simple example helps to understand how to configure and use the account_vat_on_payment module.

Of course, real cases con be much more complex, indeed, we tested the module considering split payments, discounts, foreign currency invoices and foreign currency payments.

Moreover, this is just the first release of account_vat_on_payment and it will certainly evolve.

You can post any question or bug on our launchpad project.

Update 2013-04-13

As pointed out on, this how-to was addressed to Swiss customers mainly.

The module is configurable, so, if you want to post entries in the real CoA, it’s just matter of configuration. Indeed, the main value of our module is in the computation part, more than in the used accounts, as they are configurable.

Update 2016-02-08

About French accounting, please see Romain Ferraton comment

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Tumblr Posterous Email Snailmail

Written by on Monday, October 15th, 2012

Lorenzo Battistini
OpenERP addicted
GitHub profile:
Launchpad profile:
Linkedin profile:
Agile Business Group