Accurate tax computation is a key factor in preserving clear and trustworthy financial reporting. For companies utilizing the cash basis accounting system, synchronizing tax calculation with actual cash flow, excluding invoices, is a necessity for maintaining a realistic picture of financial status. Odoo 18, with its robust and easy-to-use Accounting Module, provides complete support for configuring and utilizing cash-based tax calculations. This blog offers an elaborate step-by-step tutorial to facilitate and apply cash basis tax processing in your Odoo 18 Accounting configuration.
What is Cash Basis Accounting?
Revenues and expenses are only recorded on a cash basis accounting when money is paid or received, not when bills are entered or invoices are sent. It provides a better representation of actual cash flow and, hence, is best applied to small businesses or service companies.
Conversely, under accrual accounting, expenses and income are recorded when the transaction happens, irrespective of when the cash flows.
Calculating taxes and paying them only after receiving or creating the actual cash is made possible by using the cash basis in tax reporting. Especially in situations where payment is uncertain or delayed, this accounting system allows for the avoidance of paying taxes on outstanding invoices and maintains liquidity more effectively.
Odoo 18 makes it easy to manage cash-based tax processing through built-in settings that allow you to configure taxes based on real cash transactions.
Configuring Cash Basis Accounting in Odoo 18
Logging into your Odoo 18 instance and going to the main dashboard is the first step. As setting up accounting settings necessitates the correct access permissions, make sure you have administrative rights.
Enabling Cash Basis Accounting:
Navigate to the Accounting module and click on the Configuration menu. From there, go to Settings. Look for the Cash Basis accounting option in the Taxes section. To enable cash-based tax calculation in your system, turn on this option. After making the change, remember to save the settings.

Defining Tax Zones
Set up tax zones based on the regions where your business operates. These zones help categorize different tax jurisdictions that may have specific rules or rates depending on the location of your transactions.
Configuring Tax Rates
Establish the appropriate tax rates for each tax zone after they are established. To ensure that tax amounts are computed and reported correctly within your system, make sure the rates correspond with local tax laws and compliance requirements.
Creating Cash Basis Tax Rules in Odoo 18
Start by opening the Accounting module and accessing the Configuration menu. Then, click on Taxes to view the list of existing tax settings. This section displays various details, including the Tax Name, Tax Type, Tax Scope, Label on Invoices, the Company it belongs to, and whether the tax is currently active or inactive. This is where you can create and manage tax rules, including those set for cash basis accounting.

Here, selecting the "New" button allows you to configure rules for cash-based tax handling.

In Odoo 18, taxes are defined using the Taxes form, where key details such as the Tax Name. Depending on your company's needs, you can select one of the following options under the Tax Computation field: Group of taxes, Percentage, Fixed, or Percentage tax included. To activate the tax, make sure the Active toggle is enabled.
You can specify whether the tax applies to Sales, Purchases, or both using the Tax Type field. The Tax Scope allows you to define whether the tax is included in the price or added on top. Set the tax rate in the Amount field as a percentage. You can also designate a budgetary Position if the tax should only be applied in certain budgetary circumstances.
Definition Tab:
You may set up how taxes are allocated among accounts for both invoices and refunds using the Definition tab. You can use predetermined percentages to distribute the tax base and tax amount under the Distribution for Invoices and Distribution for Refunds sections. The taxable base of the invoice line or the determined tax amount serves as the basis for these disbursements.
These values can be linked to the relevant Tax Grids and assigned to particular Accounts. Because these tax grids automate the process of organising and summarising tax data for reporting reasons, they are very helpful for producing compliant tax reports in accordance with your nation's tax legislation.

Advanced Options Tab:
You can set up important tax behaviours for more precise financial reporting in Odoo 18's Advanced Options tab. Tax Exigibility, which establishes the tax due date, is one of the most crucial options here. You can choose between Based on Invoice (accrual basis) or Based on Payment (cash basis).
When Based on Payment is selected, the tax becomes payable only when the related invoice is paid. This is essential for companies following the cash basis accounting method. In these situations, Odoo automatically handles the tax amount transition by temporarily placing it into a Cash Basis Transition Account pending payment reconciliation.

Cash Basis Transition Account :
This field becomes active when Tax Eligibility is set to Based on Payment. The Cash Basis Transition Account is a temporary holding account where the tax amount is recorded until the customer payment is received.
After that, associate the cash basis tax rule with the relevant tax rates that you have already set up. In order for Odoo to manage tax recognition accurately at the time of payment rather than at the time of invoicing, this step makes sure that the cash-based treatment is applied to those particular tax rates.
Applying the Cash Basis Tax to an Invoice
Once you've configured your tax with cash basis eligibility, the next step is to apply this tax to a real transaction, specifically, to a customer invoice.
To do this, go to the Invoicing or Sales module and create a new invoice. Select the customer as usual, then add a product or service line to the invoice. In the Tax column of the invoice line, choose the tax that was set up with cash basis enabled (i.e., where Tax Eligibility is set to Based on Payment).

By doing this, you can be sure that the tax will only be recorded in your accounting records after the consumer has paid. Until then, Odoo will hold the tax amount in the Cash Basis Transition Account instead of reporting it in your tax liabilities.
By looking at the invoice's Journal Items page, you can see the Cash Basis Transition Account in operation. When the invoice is posted and remains unpaid, the tax amount will temporarily appear in this transition account.

Next, confirm the invoice. The related tax will not show up in the Tax Report under the Reporting tab at this time because the payment has not yet been completed. This behavior reflects the core principle of cash basis accounting, where tax is recognized only when actual payment is received.
Cash Basis Tax Entry in the Chart of Accounts.

To verify how the tax is temporarily held under the Cash Basis Transition Account, navigate to the Accounting module and open Configuration > Chart of Accounts. Locate and click on the account that was assigned as the transition account during tax configuration.

A smart button named Balance will show up at the top of the account when you first open it, providing instant access to relevant financial records.

Here, you can clearly see that the tax from the unpaid invoice is stored in this account, confirming that Odoo is correctly applying the cash basis method by deferring tax recognition until actual payment is received.
Paying the Invoice
Once the customer is ready to make the payment, go to the Invoicing or Accounting module and locate the invoice you previously created and confirmed. Open the invoice that needs to be paid and then click on the Pay button. This will open the payment registration form, where you can enter the payment details such as the amount, payment journal, and payment date. Click Create Payment to record the payment after completing the required fields.

Reconciling the Payment

To reconcile the payment, go to the Accounting module and open the Bank journal that was used for the transaction. Use the same customer, create a new bank statement, set the label to match the invoice, and enter the same amount as the invoice.

When you save and post the statement, Odoo will automatically match the payment with the open invoice and reconcile them.

Go back to the invoice in the Accounting module after the payment has been reconciled using the bank statement. The invoice status has been automatically changed to Paid, as you can see above.

Open the invoice once more after it has been marked as Paid. A new smart tab called Cash Basis Entries has been placed at the top. To view the relevant journal entry, select this option.

From the above list, select the appropriate entry to open and review the detailed accounting lines.
Here, you will be able to see the complete breakdown of how the tax amount is transferred within your accounting system. Specifically, the journal entry will show the debit being made to the Cash Basis Transition Account, where the tax was temporarily held when the invoice was created. Simultaneously, a credit is posted to the actual Tax Received account, signifying that the tax is now officially recognized as a liability in your books. The core of Odoo 18's cash basis tax mechanism, which makes sure that taxes are only recorded when actual cash is received, is shown in this movement.
Tracking Tax Recognition in the Tax Report
To confirm that the tax has been officially recorded after payment, navigate to the Reporting tab in the accounting module and select Tax Report from the available reporting options. This report provides a detailed overview of all tax amounts that have been recognized during the selected period.

Set the appropriate date range, which includes the date of invoice payment, once you are inside the Tax Report. You will now see the tax that was linked to your invoice displayed in the appropriate tax section, typically under Sales Tax or your configured tax group.
This confirms that Odoo has moved the tax amount from the transition account to the final tax account and is now including it in your tax liability reporting, fully in line with the cash basis accounting workflow.
By using cash basis tax computation in Odoo 18, companies may precisely match actual cash transactions with tax reporting. Organisations can easily implement a cash-based approach to accounting by following the procedures described in this article, guaranteeing compliance and enhanced financial clarity. Leveraging the latest features of Odoo 18 empowers finance teams to manage tax obligations more effectively and maintain accurate records based on actual cash movement.
To read more about how to setup cash basis tax computation in odoo 17 accounting, refer to our blog How to setup cash basis tax computation in odoo 17 accounting