Thai Localization - Account Tax Invoice
This module address the undue tax requirement for Thailand
In Odoo, cash basis feature is being used to cover case of undue tax (due on payment). This can answer the issue about undue tax in Thailand partially. For customer invoice/payment, Odoo's cash basis alone is enough.
But for supplier invoice/payment and expense, where tax invoice number and tax date is given from vendor. This module will provide ways for user to do so on vendor bill (for normal tax) and in supplier payment (for undue tax which is due on payment).
auto_awesome What this module does
AI-generated from the code · Odoo 14.0Manage Thai tax invoice numbers and dates on vendor bills, customer invoices and payments. A new Tax Invoices list keeps the tax invoice number, date and reporting period for each tax line.
This module adds Thai tax invoice information to accounting documents. On each tax line of a journal entry, the system creates a Tax Invoice record that stores the tax invoice number, tax invoice date, tax base and tax amount.
- On customer invoices and refunds, the tax invoice number is filled automatically when the document is posted: it uses the sequence configured on the tax, or the document number if no sequence is set.
- On vendor bills and other purchase entries, you must enter the vendor's tax invoice number and date before posting; otherwise Odoo blocks the posting with a message asking you to fill them in.
- On payments, a Tax Invoice tab appears when tax is due on payment. You can enter the tax invoice number and date there, then use the Clear Tax button to post the related tax journal entries.
- A Report Late field (0 to 6 months) computes a report date from the tax invoice date, useful for Thai tax reporting deadlines.
- A Tax Invoices menu under Accounting > Miscellaneous lets you search and group all tax invoice records by date or partner.
- The last tax invoice line of a document cannot be deleted, and the tax amount entered must match the tax line amount.
The module touches account.tax, account.move, account.move.line, account.payment and account.partial.reconcile.
Depends on
Required by other modules
Menus it adds
Models and fields (6)
- account.tax · extends an existing modeltaxinv_sequence_id (Tax Invoice Sequence), sequence_number_next (Next Number)
- account.move · extends an existing modeltax_invoice_ids
- account.payment · extends an existing modelto_clear_tax, tax_invoice_ids, tax_invoice_move_id (Tax Invoice's Journal Entry)
- account.move.line · extends an existing modeltax_invoice_ids, manual_tax_invoice
- account.move.tax.invoice · new modelbalance (Tax Amount), move_id, account_id, company_id, move_state, partner_id (Partner), payment_id, report_date (Report Date), reversed_id, tax_line_id, move_line_id, reversing_id, to_clear_tax, report_late_mo (Report Late), tax_base_amount (Tax Base), tax_invoice_date (Tax Invoice Date), tax_invoice_number (Tax Invoice Number), company_currency_id
- account.partial.reconcile · extends an existing model
Text generated by AI (DeepSeek) from reading the Odoo 14.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 2 confirmed, 7 with no information of 9 versions.
Sources · Odoo 14.0
Confirmed on 2026-11-03 in branch 14.0 of OCA/l10n-thailand.
terminal Installation and usage
OCA documentation · Odoo 14.0Configuration
Source · Odoo 14.0For Sales Taxes (tax scope = Sales), there is option to run Tax Invoice number by sequence model. If set properly, Tax Invoice Number will be using this sequence instead of customer invoice number / payment number
- Goto Accounting > Configuration > Invoicing > Taxes
- For sales tax, choose 'Tax Invoice Sequence' (or create new one)
- Make sure you also set the same sequence for the same tax on payment too. I.e., Output VAT7% and Undue Output VAT7% must select the same sequence, both both of them will result in same Tax Report
Note: this option is not avaiable for purchase tax, because the Tax Invoice Number is from vendor, and are filled manually.
Usage
Source · Odoo 14.0With this, 2 new tax related fields will be introduced in account.move.tax.invoice
- tax_invoice_number : Tax Invoice Number
- tax_invoice_date : Tax Invoice Date
In customer invoice, both field will be defaulted by Odoo's document number and date. But in supplier invoice, both field must be filled by user with tax invoice number and date from vendor.
Note: The new table account.move.tax.invoice is the main source of Thai VAT Report
Preparing Undue Tax
- Use Developer Mode
- In Chart of Account, add new account for Undue Tax, if not already exists.
- As admin, add access rights
Show Full Accounting Features - Go to Invoicing > Configuration > Settings and select
Cash Basis, this will open cash basis options in Tax master data - Go to Invoicing > Configuration > Accounting > Taxes, create new undue tax for both sales and purchase
Case Customer Invoice and Payment
- Create new customer invoice and choose to use sales' VAT or Undue VAT
- Process invoice and payment as per normal, Odoo document number and date should be used as Tax Invoice Number/Date
Case Supplier Invoice/Payment
1) Case Input VAT
- Create new vendor bill and choose Input VAT
- At vendor bill's tax invoice tab, fill in 2 new fields,
Tax InvoiceandTax Dategiven by your vendor - Validate this vendor bill, the given Tax Invoice Number and Tax Date are set in account.move.tax.invoice
2) Case Undue Input VAT
- Create new vendor bill and choose Undue Input VAT
- Validate vendor bill, journal entry will be created with Undue VAT
- Register payment as per normal, this will create new payment document as per normal
- From this process, the journal entry (cash basis) for clear undue is created, but it will be in state Draft
- Go to payment document, in tax invoice tab, fill in Tax Invoice Number and Tax Date
- Click on Clear VAT button, the journal entry (cash basis) for clear undue will now be Posted
No verified information in OCA: Installation.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.