Cash Basis Tax in Odoo 18
By Braincuber Team
Published on December 28, 2025
Accountants using accrual basis paying taxes on uncollected revenue create cash crisis: invoice customer $10,000 with $1,000 sales tax in December, tax authority demands $1,000 payment in January, but customer hasn't paid invoice yet (Net 60 terms = payment March), accountant forced to pay $1,000 tax from company cash while waiting 2 months for customer payment—creating liquidity problems where business pays taxes on money not yet received contradicting actual cash flow reality.
Odoo 18 Cash Basis Tax aligns tax liability with cash flow by recognizing tax only when payment received not when invoice issued, using Cash Basis Transition Account temporarily holding tax until payment, automatic tax recognition upon payment reconciliation, tax report showing only collected taxes, configurable per-tax basis (some accrual, some cash), support for both sales and purchase taxes—eliminating cash flow mismatch where businesses pay tax authorities before collecting from customers improving liquidity 30-40% for businesses with extended payment terms.
Cash Basis Features: Payment-based recognition, Transition account, Automatic reconciliation, Tax report accuracy, Per-tax configuration, Sales/purchase support, Liquidity preservation
Cash Basis vs Accrual Accounting
| Aspect | Accrual Basis | Cash Basis |
|---|---|---|
| Tax Recognition | When invoice issued | When payment received |
| Best For | Large enterprises, inventory | Small businesses, services |
| Cash Flow | May not reflect actual | Matches actual cash flow |
| Tax Timing | Pay before collecting | Pay only after collecting |
Enabling Cash Basis Accounting
- Go to Accounting → Configuration → Settings
- Find Taxes section
- Enable Cash Basis option
- Save settings
Effect: System now supports cash basis tax configuration.
Creating Cash Basis Tax
- Go to Accounting → Configuration → Taxes
- Click New
- Configure tax fields (detailed below)
- Save
Tax Configuration Fields:
- Tax Name: Descriptive name (e.g., "Sales Tax 10% - Cash Basis")
- Tax Type: Sales, Purchases, or both
- Tax Computation:
- Percentage (most common)
- Fixed amount
- Percentage included in price
- Group of taxes
- Amount: Tax rate percentage (e.g., 10%)
- Tax Scope: Services, Goods, or both
- Active: Enable toggle
Advanced Options Tab:
Critical setting for cash basis:
- Open Advanced Options tab
- Find Tax Exigibility field
- Select Based on Payment (NOT "Based on Invoice")
- Set Cash Basis Transition Account: Account temporarily holding tax until payment
Important: "Based on Payment" = cash basis. "Based on Invoice" = accrual basis. You can have both types coexisting—some taxes cash basis, others accrual depending on requirements.
Applying Cash Basis Tax to Invoice
Step 1: Create Invoice
- Go to Invoicing → Customers → Invoices
- Click New
- Select customer
- Add product/service line
- In Tax column, select cash basis tax (Tax Exigibility = Based on Payment)
- Confirm invoice
Step 2: Verify Journal Entry
- Open invoice
- Click Journal Items tab
- Observe tax amount posted to Cash Basis Transition Account (not Tax Payable)
Example Journal Entry (Invoice Confirmed, Unpaid):
| Account | Debit | Credit |
| Accounts Receivable | $11,000 | - |
| Revenue | - | $10,000 |
| Cash Basis Transition | - | $1,000 |
Note: Tax NOT in Tax Payable yet—in transition account
Step 3: Check Tax Report
- Go to Accounting → Reporting → Tax Report
- Observe: Tax does NOT appear in report
- Reason: Invoice unpaid, tax not yet recognized under cash basis
Payment & Tax Recognition
Step 4: Register Payment
- Open invoice
- Click Register Payment
- Enter payment details
- Click Create Payment
Step 5: Automatic Tax Recognition
Upon payment reconciliation:
- Odoo creates automatic journal entry
- Moves tax from Cash Basis Transition → Tax Payable
- Tax appears in Tax Report
Journal Entry (After Payment):
| Account | Debit | Credit |
| Cash Basis Transition | $1,000 | - |
| Tax Payable | - | $1,000 |
Now tax appears in Tax Report—cash received, tax recognized
Best Practices
Don't Mix Cash/Accrual for Same Tax Type: Sales Tax 10%: pick cash OR accrual, not both. Having "Sales Tax 10% Accrual" AND "Sales Tax 10% Cash" confuses invoice creators. Instead: default one method, use other only in exceptional cases clearly labeled.
Reconcile Transition Account Monthly: Month-end: Cash Basis Transition Account should be zero. Non-zero balance = unpaid invoices with pending tax. Use this to track accounts receivable aging and forecast upcoming tax liabilities accurately.
Consider Hybrid Approach: Large customers (reliable) = accrual basis (recognize tax immediately). Small/risky customers = cash basis (wait for payment). Reduces tax prepayment on uncertain receivables while maintaining normal accounting for stable customers.
Conclusion
Odoo 18 Cash Basis Tax aligns tax liability with actual cash flow through payment-based recognition, transition account mechanics, and automatic reconciliation. Eliminate liquidity problems from paying taxes before collecting customer payments improving cash flow 30-40% for service businesses with extended payment terms.
