Every Thai company we onboard onto Odoo asks the same first question. Will the 7 percent VAT just work out of the box. The rate is easy. The paperwork is not. Getting Odoo VAT Thailand configuration right means separating input VAT from output VAT correctly, knowing when a document must be a tax invoice instead of a plain receipt, and producing the reports your accountant expects at month-end close. We have set this up enough times, across Odoo 16 through 19, to know where companies trip.
This post walks through the setup we actually use on client databases, not a theoretical checklist. It assumes you are either implementing Odoo fresh, or cleaning up a Thai company configuration that was done in a hurry. If VAT is only part of a larger rollout, see our Odoo implementation services for the fuller picture.
Odoo VAT Thailand: Setting Up the 7% Rate Correctly
Odoo ships with generic tax templates. Thailand needs two mirrored taxes rather than one. A 7 percent sales tax covers output VAT. A 7 percent purchase tax covers input VAT. Each needs its own tax group and its own tag, so amounts land in the right boxes on your VAT return.
A few settings we check on every project:
- The tax computation method should be "Percentage of Price," with included-in-price left unchecked, unless you deliberately sell VAT-inclusive prices to walk-in retail customers.
- Each tax needs distinct Thai tax report tags, sales and purchase, linked to the standard Thai chart of accounts, not generic "Tax Paid" or "Tax Received" labels.
- Zero-rated VAT, for exports and certain services, and VAT-exempt transactions need their own tax codes, even at 0 percent. Otherwise they vanish from the PP.30 breakdown instead of appearing in their correct line.
The mistake we see most often is companies reusing a single 7 percent tax on both sales and purchase journals. It calculates the same number, so nobody notices at first. Trouble surfaces once the accountant tries to reconcile input against output, because the tax grids no longer match the Revenue Department template.
Input VAT and Output VAT in the Day-to-Day Flow
Output VAT is what you charge your customer on a sales invoice. Input VAT is what your suppliers charge you on a vendor bill. It is reclaimable against output VAT in the monthly filing, provided the supporting tax invoice is valid.
In practice this means:
- Every vendor bill in Odoo must carry the correct input VAT tax line, matched to a real supplier tax invoice, not just an informal receipt.
- Every customer invoice must carry output VAT, unless the sale is genuinely zero-rated or exempt.
- The difference between total output VAT and total input VAT for the period is what gets remitted, or carried forward as a credit, on the PP.30.
Where this goes wrong: cash expenses and small purchases paid without a proper tax invoice. If the bookkeeper records input VAT against a receipt that is not a valid tax invoice, the company cannot legally claim that credit. An auditor will flag it eventually. We encourage clients to tag these as a separate "non-creditable VAT" account from day one, rather than trying to untangle it at year-end.
Tax Invoice Versus Plain Receipt in Odoo VAT Thailand Setup
This distinction trips up almost every company moving from a manual or semi-digital system into Odoo. A plain receipt acknowledges payment. A tax invoice is a legal document under the Revenue Code that entitles the buyer to claim input VAT. They are not interchangeable, and Odoo needs to know which one each transaction produces.
| Document | Purpose | VAT claimable by buyer |
|---|---|---|
| Tax invoice (full form) | Legal VAT document with seller's tax ID, invoice number, VAT breakdown | Yes |
| Abbreviated tax invoice | Simplified version, typically retail POS | Sometimes, with conditions |
| Receipt only | Proof of payment, no VAT breakdown | No |
For companies issuing e-Tax Invoices, the document sequencing and the data fields, buyer tax ID, address, line-level VAT, need to match Revenue Department requirements exactly. That is a separate configuration layer on top of the base VAT setup. It deserves its own detailed walkthrough rather than a paragraph here. If you are planning that rollout alongside your core implementation, it is worth scoping the two together from the start.
The practical rule we give clients is simple. If a customer is a registered VAT business and wants to claim input VAT, they need a proper tax invoice from Odoo, not a POS receipt. Configure your point of sale and invoicing flows so staff are not choosing documents freely at the counter. Our team also handles this inside broader e-commerce development work, since Shopee, Lazada, and TikTok Shop orders flowing into Odoo need the same document discipline.
Odoo VAT Thailand Reports an Accountant Expects at Month End
Odoo's generic tax report is useful, but it is not the Thai PP.30 format. What accountants actually want at close is a reconciliation pack, and we build it the same way on every engagement:
- Tax report by tax grid – output VAT and input VAT split by tag, matching the PP.30 line structure.
- VAT ledger (sales and purchase) – a chronological list of every invoice and bill with its tax invoice number, counterpart tax ID, and VAT amount, which Thai auditors specifically ask for.
- Undue VAT report – for advance payments or deposits where VAT liability has not yet triggered, common in construction and project-based businesses.
- Reconciliation against the general ledger – the VAT payable or receivable account balance should tie exactly to the tax report total. If it does not, someone posted a manual journal entry with VAT attached, bypassing the proper tax line.
That last point catches more problems than anything else. Odoo allows manual journal entries to include a tax line. If a user does this instead of going through an invoice or bill, the number shows up in the general ledger. It may not flow correctly into the tax report, depending on configuration. We generally lock down manual VAT postings to accounting managers only. We also train the accounts team to run the reconciliation every month before closing, not just at year-end.
A Known Limitation Worth Planning For
Odoo's native Thai localization gives you the structure, but it will not catch every edge case your business creates on its own. Mixed VAT and non-VAT line items on the same invoice are one example. Partial credit notes that need to reverse only a portion of previously claimed input VAT are another. These situations need deliberate configuration and, occasionally, a small customization to the invoice line logic. Budget for that rather than assuming the out-of-the-box templates handle every scenario in retail, manufacturing, and services equally well. We scope this kind of work through our Odoo ERP customization services, so it has its own line item and its own sign-off, separate from the base VAT configuration.
Getting the Odoo VAT Thailand Setup Right From the Start
We walk through the existing VAT process with the client's accountant before touching the database. The Revenue Department filing habits of a ten-year-old company are rarely documented anywhere else. If you are setting up Odoo VAT Thailand configuration for the first time, or inheriting a database where the previous implementer merged input and output VAT into one tax code, it is worth a proper audit before your next filing deadline. Our team handles this as part of standard Odoo implementation work. We can review an existing configuration even if we did not build the original database, including the surrounding Odoo ERP support once the VAT setup is live and your accountant is reconciling against it monthly. For teams weighing a version jump at the same time, our Odoo migration and upgrade services page covers how we sequence that alongside localization work.



