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
  • R T

    hi, are you updating this module for v7?

  • Togar Hutabarat

    Perfect just like what I need, guys.. Thank you..

    If there anybody who have tested these modules, and found anything wrong (bugs) with the modules, please let eLBati himself know.. And since I am also a developer, I’ll be happy to know the bugs too.

    Best regards.

    • Lorenzo Battistini

      Hello Togar, Thanks for the feedback!
      Are you using it on OpenERP 7 ?

      • Togar Hutabarat

        I have tested the module on both v6.1 and v7.0, and it works well.
        You’re welcome Lorenzo 🙂

        I mean it works well without any changes on v6.1. But for v7.0, we have to do some modification on XML file since OpenERP v7.0 have different XML structure.

  • Ian Going


    This is exactly what I’m looking for! Thank you. However, I seem to be having some problems (which I’m hoping are due to something missing in the set-up):

    Firstly, I am using the community edition of odoo 8, running on Ubuntu – and I have intstalled the latest account_vat_on_payment module. Now for the set-up (following your guide).

    I have created 4 shadow accounts SCoA, DS, PSS, TRS. SCoA is a view under the main Company View (I quickly found that it odoo couldn’t post journals with SCoA not nested). Is this correct?

    Your guide mentions setting the ‘real’ accounts for PSS & TRS, but not DS – is this deliberate?

    I then created the 3 tax codes: ‘shadow root’ (without parent), ‘shadow taxable sales’ and ‘shadow tax received’.

    I created the shadow payment Journal, and linked it to the Bank journal. The shadow journal now appears in the Payment list (when paying an invoice), is this expected? I think this is because the type is Banks and Checks – should this be changed?

    OK (and now for my issue). When I create an invoice with VAT on payment treatment, I get the shadow entries on the Journal, but when I register the payment, I only get a journal debiting DS and crediting Bank. There are no entries for the ‘real’ tax to be paid. There is also no ‘reversing’ journal to correct and balance the shadow accounts. What have I done wrong?

    Thanks for any help!

    Best Regards.

    • Lorenzo Battistini

      Hello Ian,
      could you provide some screenshots (or even a video) of the journal entries you get?

      • Ian Going

        Hi Lorenzo,

        I replied earlier that this issue was resolved – my issue was being caused by creating an invoice for zero amount. When I created an invoice for a positive amount, and received a payment, all entries are present.

        However, my payments are received by Bank Statement, not Customer Payments, so although I was able to generate the correct entries during testing with Customer Payments, I am not able to get the correct entries using the Bank Statement method. Is this correct? Or should I see the ‘reversing’ journal to correct and balance the shadow accounts?

        Thanks in advance


        • Lorenzo Battistini

          Bank statements support is under revision and tests at

          You can download the module at

          Feedbacks are obviously welcome

          • Ian Going

            Thank you Lorenzo.

            Forgive my ignorance, but is there a guide for downloading and installing the module from github?

          • Lorenzo Battistini

            You can download using git with

            git clone -b vat_on_payment

            or download zip file from

          • Ian Going

            Thank you!!

            Now I have downloaded,do I need to uninstall the existing module or can I upgrade directly?

            Should I copy the account-payment folder to the odoo add-ons folder?

            (Sorry for all the questions)

            Your help is much appreciated.

          • Lorenzo Battistini

            Just replace your account_vat_on_payment folder with the downloaded one (account_vat_on_payment only), restart odoo and upgrade the module

  • Romain Ferraton

    First a really strong bravo for this job ! Thanks a lot ! VAT on payment should be included in main branch of odoo in my opinion…

    I use odoo V8 (linux)
    I follow your guide but for a French accounting.

    I think that create views accounts up to a top root view account is very useful to clean charts accounts.

    A graph with shadow account mapping and parent/child account relationships for customer invoices scope is attached to my post, may that will help french users. The same needs to be done for supplier invoices scope…

    The list of my shadows accounts (for the moment) is also attached (French accounting / comptabilité française)

    I think i will write a more complete article on the subjet on my website : in a few days

    hope that helps !


    • Lorenzo Battistini

      Thank you Romain, just added an update to the post

      • Romain Ferraton

        Sure !

  • Pendouss

    Hii ,
    good job for this module! is there a version for odoo 9?

    • Lorenzo Battistini

      Hi, in odoo 9 this functionality is already handled by core module account_tax_cash_basis

      • Romain Ferraton

        Hello Lorenzo, is there a method, guide or tools when migrate from 8 with vat on payment module to v9 or v10 with cash bases taxes ?

        • Lorenzo Battistini

          AFAIK, no

  • Michele Pellegrini

    Buongiorno Lorenzo,
    sto cercando un modulo VAT sull’incassato/pagato ma per la versione 10 di odoo (per la Svizzera).
    Ho visto che avete creato il modulo ma le versioni precedenti. C’è già qualcosa per la versione 10 ?
    Ringrazio e buona giornata, saluti Michele

    • Lorenzo Battistini

      Buongiorno Michele,
      dalla versione 9, la gestione dell’IVA per cassa è inclusa in odoo standard: direttamente nelle imposte puoi trovare il campo ‘Use Cash Basis’

      • Michele Pellegrini

        Grazie Lorenzo, ma a livello di reportistica, come posso visualizzare il dettaglio del rendiconto che vado a fare ? In primo luogo dove posso recuperare i saldi da mettere nei rispettivi rendiconti, in secondo luogo dove posso vedere il dettaglio di questi saldi (in CH si chiamano riassuntivi IVA). Grazie in anticipo! Michele Pellegrini