Odoo ERP

Odoo Accounting Thailand: A Monthly Compliance Calendar

A practical month-by-month filing calendar for Thai SMEs on Odoo, with exact reports and screens behind every VAT, WHT and annual number.

Ravi Shanker SinghFounder & Odoo ConsultantPublished 6 min read
Share
Odoo Accounting Thailand: A Monthly Compliance Calendar
Image: Openverse · CC0
On this page

Most Thai SME owners do not lose sleep over whether Odoo can calculate VAT correctly. It can. What keeps finance managers up at night is the calendar: which report is due on which day, and whether the number the Revenue Department expects actually matches what Odoo shows on screen. Odoo accounting Thailand setups can get this right. But only when the tax configuration and the closing routine are treated as part of the same job. We have sat through enough month-end closes with Thai clients to know the gap between "the system is configured correctly" and "the filing is submitted on time" is almost always a process gap, not a software gap.

This post lays out a working compliance calendar for Odoo accounting Thailand setups, phase by phase, with the exact screens and reports behind each number. It assumes VAT and withholding tax are already configured. If you are still setting that up, start with Odoo implementation services built for Thai filing requirements rather than a generic install.

Why Odoo accounting Thailand setups live or die on the monthly rhythm

Two filings repeat every month for almost every Thai company, regardless of size: VAT (Por Por 30) and withholding tax (PND 3 and PND 53). The deadlines are not the same. VAT is due by the 15th of the following month on paper, or the 23rd through the e-filing portal. Withholding tax is due earlier: the 7th on paper, or the 15th through e-filing. Mixing these two up is one of the most common scheduling mistakes we see.

In Odoo, the VAT number comes from the Tax Report under Accounting > Reporting. This report reads directly from the tax grids attached to each invoice line. That is why we insist on correct tax mapping during setup, rather than after the first filing goes wrong. If a vendor bill was posted with the wrong tax tag, the Tax Report will be wrong, and no amount of manual Excel reconciliation fixes that at the source.

Withholding tax numbers come from a different place: the Withholding Tax Report. It pulls from the WHT entries generated when you post a vendor bill or customer invoice with a WHT tax applied. We have seen companies compute WHT using a spreadsheet pulled from bank statements, and that almost always diverges from what Odoo actually posted, because the spreadsheet remembers payments while Odoo remembers invoices and the tax lines attached to them. Reconcile against the system, not against memory.

Where each monthly number actually lives

FilingDue date (paper / e-filing)Odoo reportSource data
VAT (Por Por 30)15th / 23rd of next monthAccounting > Reporting > Tax ReportTax grids on invoice/bill lines
WHT PND 3 (individuals)7th / 15th of next monthAccounting > Reporting > Withholding Tax ReportWHT tax on vendor bills to individuals
WHT PND 53 (companies)7th / 15th of next monthSame report, filtered by WHT typeWHT tax on vendor bills to juristic entities
PromptPay reconciliationDaily, closed monthlyAccounting > Bank > ReconciliationBank statement import matched to invoices
e-Tax Invoice submissionPer invoice, reviewed monthlyAccounting > Customer Invoices, e-Tax status fieldInvoices flagged for e-Tax/e-Receipt

A practical note on e-Tax Invoice and e-Receipt: Odoo does not submit directly to the Revenue Department's system by itself. Depending on how your e-Tax invoice workflow is configured, invoices are exported in the format your certified service provider requires, or pushed through an API connector. Either way, the monthly review is the same. Confirm every invoice that needed an e-Tax document actually has one, before the filing deadline, not after.

Half-year check: PND 51 and the drift it catches

Thai corporate income tax includes a half-year estimate, PND 51, filed within two months of the close of the first six months of the fiscal year. This is where Odoo accounting Thailand setups either pay off or expose a problem that has been accumulating quietly.

PND 51 needs an estimate of annual net profit. That means the management accounts for the first six months need to be genuinely closed, not just roughly entered. We walk clients through three checks before the half-year filing:

  • Every bank account is reconciled through the period end, not just the obvious ones.
  • Inventory valuation is current, especially for companies using landed costs or lot-based costing, since unposted stock moves understate cost of goods sold.
  • Fixed asset depreciation has run for the period, so profit is not overstated by missing entries.

The Profit and Loss report (Accounting > Reporting > Profit and Loss) is the source for the estimate. If this report has not been reviewed monthly, the half-year estimate becomes a guess dressed up as a filing. Guessed numbers tend to create either an underpayment penalty or an overpayment that ties up cash until year-end.

Annual filings: PND 50 and the audited statements

The annual corporate income tax return, PND 50, is due within 150 days of the fiscal year end, alongside audited financial statements for most juristic companies. This is the heaviest filing of the year, and it is also the one most exposed to small errors made earlier.

By year-end, the numbers behind PND 50 should already exist inside Odoo: the full-year Profit and Loss, the Balance Sheet, and the general ledger detail an auditor will ask for. If monthly closes were done properly, the annual close is mostly a formality. If they were not, year-end becomes an archaeology project. Someone ends up digging through twelve months of unreconciled entries under deadline pressure.

One honest caveat: Odoo does not file anything with the Revenue Department or the Department of Business Development on its own. It produces the numbers and the supporting detail. Submission still runs through your accountant, auditor, or the relevant e-filing portal. Treat Odoo as the source of truth for the figures, not as a filing agent.

Building the calendar inside Odoo

A compliance calendar only works if someone actually looks at it. We generally set up a recurring activity schedule in Odoo, tied to the responsible accountant, with reminders five business days before each due date. That buffer matters. Five days is usually enough to catch a missing vendor bill or an unreconciled bank line before it becomes a late filing.

For companies selling through Shopee, Lazada or TikTok Shop, add one more recurring check: marketplace settlement reconciliation. Orders and fees flow in through the marketplace connector, but settlement timing rarely lines up neatly with the calendar month. Give it its own line on the schedule instead of folding it into general bank reconciliation.

A realistic month-end checklist

Here is the sequence we actually use with clients before closing a period and trusting the numbers for VAT, WHT, or management reporting:

  1. Confirm all customer invoices for the period are posted, not left in draft.
  2. Confirm all vendor bills received are entered, including ones still pending approval.
  3. Run bank reconciliation to zero outstanding unmatched lines older than the period.
  4. Review the Tax Report and Withholding Tax Report for anomalies against the prior month.
  5. Confirm e-Tax Invoice status on all qualifying invoices.
  6. Lock the period (Accounting > Lock Dates) so nothing posts retroactively without a deliberate override.

That last step, locking the period, is the one companies skip most often. It is also the one that causes arguments three months later, when someone asks why a closed month's VAT number changed.

When the calendar breaks down

Filing calendars usually fail for one of two reasons. Either the chart of accounts and tax configuration were never quite right to begin with, or no single person is accountable for closing the books on schedule. Software does not fix either problem by itself. What it can do is make the correct number easy to find and the incorrect number hard to miss, provided the setup was done with Thai filing requirements in mind from day one.

If your current Odoo instance was configured generically, the calendar above will be harder to follow than it needs to be. That often means PND 3, PND 53, e-Tax Invoice, and VAT grids were never mapped specifically for Thai reporting. That is usually where we start when a client brings us an existing system rather than a fresh implementation. We review the tax configuration first, before touching the calendar or the closing process. Our ongoing support engagements typically begin exactly there.

Share

Frequently asked questions

Does Odoo file VAT and withholding tax directly with the Thai Revenue Department?

No. Odoo generates the Tax Report and Withholding Tax Report with the correct figures, but submission still goes through the Revenue Department's e-filing portal or your accountant, not directly from Odoo.

What is the deadline for monthly VAT and WHT filings in Thailand?

VAT (Por Por 30) is due by the 15th of the following month on paper, or the 23rd through e-filing. Withholding tax (PND 3 and PND 53) is due earlier, by the 7th on paper or the 15th through e-filing. Always confirm current deadlines with the Revenue Department.

Where does the half-year PND 51 estimate come from in Odoo?

It is based on the Profit and Loss report for the first six months of the fiscal year, so it depends on bank reconciliation, inventory valuation, and depreciation entries being current at the six-month mark.

Can Odoo handle e-Tax Invoice and e-Receipt for Thai companies?

Odoo can flag and export invoices in the format needed for e-Tax Invoice and e-Receipt submission through a certified service provider or API connector, but it does not submit to the Revenue Department on its own.

Why does our WHT report in Odoo not match our bank-based spreadsheet?

Odoo calculates withholding tax from the tax lines on posted invoices and bills, while a bank-based spreadsheet usually reflects payment timing. The two diverge whenever invoice and payment dates fall in different periods, so reconcile against posted entries, not bank transactions.

How often should we lock accounting periods in Odoo?

We recommend locking each period immediately after month-end close, once VAT, WHT, and bank reconciliation are confirmed, so closed figures cannot change without a deliberate, logged override.

Sources

About the author

Ravi Shanker Singh

Founder & Odoo Consultant

Founder of Tech After Me and Odoo consultant. Ravi implements, customises and supports Odoo ERP and builds web, mobile and data products for companies in Thailand, the USA and India, working from Bangkok, New York and Delhi NCR.

More from this author

Keep reading

Put what you read into practice

The team writing these guides is the same team that ships them. Tell us what you are working on.

Get new articles in your inbox

Get new articles in your inbox

Odoo guides and IT news that matter to your business. At most one email a week.