Odoo ERP

Odoo Financial Statements Thailand: Balance Sheet to Audit

How we structure Odoo financial statements for Thailand so the balance sheet, P&L, and closing checklist hold up to an auditor's questions.

Ravi Shanker SinghFounder & Odoo ConsultantPublished 5 min read
Share
Odoo Financial Statements Thailand: Balance Sheet to Audit
Image: David Jenkin; Frank Carpay; Crown Lynn Potteries Ltd · Openverse · CC BY 4.0
On this page

Every Thai company registered with the Department of Business Development must file a balance sheet and profit and loss statement that an auditor signs off on. The structure has to match what the Revenue Department and DBD both recognize. Getting Odoo financial statements Thailand-ready is not just about turning on an accounting module. It means mapping accounts to the Thai chart of accounts format, keeping the backup trail an auditor will ask for, and closing the books on a schedule that does not fall apart in month eleven.

We have set this up for enough companies now to know where it usually goes wrong. Generic chart of accounts templates do not match Thai statutory groupings. Withholding tax certificates go missing at close. Inventory valuation sits unreconciled before the trial balance goes to the auditor. None of this is exotic. It just needs to be built in order, once, correctly.

Why Odoo financial statements Thailand reports need local mapping

Odoo ships with a Balance Sheet and Profit and Loss report out of the box. Both are driven by account tags and account groups, not hardcoded line items. That helps Thailand. We do not need custom code to get a statutory-style layout. We re-map the account tags so assets, liabilities, and equity fall into the groupings a Thai auditor expects. Cash and bank, trade receivables, VAT input, inventory, fixed assets, trade payables, withholding tax payable, and VAT output each get their own line. Nothing gets buried in a generic "other" bucket.

The P&L side needs similar care. Thai statements typically separate cost of sales from selling and administrative expenses. They also show other income and finance costs as distinct lines. Odoo's default P&L groups by account type unless you tell it otherwise. Untouched installs often lump freight, bank charges, and staff welfare into one undifferentiated expense block. We rebuild the account groups during setup, before a single transaction is posted. Remapping six months of history later is slow. Nobody enjoys it either.

Structuring the Thai balance sheet correctly

A few mapping decisions matter more than the rest:

  • VAT input and output should sit as separate asset and liability lines, not netted together. This keeps the monthly PP.30 reconciliation traceable straight from the trial balance.
  • Withholding tax receivable and payable need their own accounts per rate bucket (3%, 5%, 1%, and so on). PND 3 and PND 53 filings then tie out without a side spreadsheet.
  • Inventory valuation should reflect the actual costing method configured on each product category. Odoo's stock valuation reports and the balance sheet inventory line will disagree if the categories are inconsistent.
  • Fixed assets benefit from Odoo's asset module posting depreciation automatically each month. That beats a manual journal someone remembers at year-end.

If you are coming from a system where the chart of accounts was never aligned to Thai groupings, this is the point to fix it. We cover related setup work in our Odoo ERP support services and in broader Odoo consultancy services for companies still choosing their approach.

Getting the P&L audit-ready

An auditor reviewing a Thai P&L wants more than the number at the bottom. They want to trace revenue recognition against invoices. They want to match cost of goods sold against stock moves. They also want to see that withholding tax deducted by customers reconciles against certificates received. Three things make this smooth in Odoo:

  1. Keep sales and purchase journals separate from manual journal entries. Auditors can then sample transactional postings without wading through adjusting entries.
  2. Attach the original document to the journal entry rather than relying on a separate filing cabinet. PDF invoice, e-Tax invoice, or delivery order, Odoo supports attachments directly on the journal entry record.
  3. Reconcile the withholding tax certificate register against the withholding tax payable account every month, not just at year-end. Gaps compound fast once PND 53 filings pile up.

None of this requires custom modules. It requires discipline in how the chart of accounts, tax rules, and document attachments are configured from day one.

A realistic month-end closing checklist for Odoo financial statements Thailand

We run roughly the same sequence for every Thai close, adjusted for company size:

StepWhat we check
1All vendor bills and customer invoices for the month are posted, none sitting in draft
2Bank and PromptPay reconciliation is complete to zero unreconciled lines
3VAT input/output accounts tie to the PP.30 working paper
4Withholding tax payable ties to PND 3 / PND 53 certificates issued
5Inventory valuation report matches the balance sheet inventory line
6Depreciation entries for the month have posted
7Accruals and prepayments reviewed, not just carried forward blindly
8Trial balance reviewed against prior month for unexplained swings

Step 5 is the one most teams skip. It is also the one that causes the most pain at audit time. If a product category's costing method changed mid-year, remember that the change is prospective in Odoo. Stock already on hand keeps its old recorded value. Only later moves use the new method. That is correct accounting behavior. But your valuation report and your balance sheet can diverge for a while if nobody flags the change to whoever reviews the numbers.

Where Odoo financial statements Thailand setups break down in practice

Here is the honest trade-off. None of this eliminates the need for a human reviewer. Odoo will happily produce a balance sheet and P&L from whatever has been posted, correct or not. Automated reports give you structure and traceability, not judgment. We have seen clean-looking statements that were wrong because someone posted a customer payment straight to revenue. Or because a vendor bill landed in the wrong tax bucket. The checklist above catches most of that. But someone who understands Thai accounting still needs to run it every month, not just at year-end when the auditor is already asking questions.

When migration or support makes sense

If your financial statements are already a mess, most companies at this point are weighing whether to rebuild the chart of accounts in place or start fresh with a phased re-implementation. We generally favor fixing the mapping in place when the underlying ledger is sound. A deeper rebuild makes sense only when the chart of accounts itself is unworkable. Teams coming from an older version sometimes combine this cleanup with an Odoo migration and upgrade project. Remapping accounts is easier right after a version jump than in the middle of a busy fiscal year.

Either way, this is ongoing work, not a one-time setup. Tax rates change. New product lines need new account groups. Auditors ask for new detail each year. That recurring work falls under our Odoo ERP support services, with the same consultant who did the original close review staying on the account rather than rotating through a ticket queue. For companies setting up accounting alongside a broader implementation, our Odoo implementation services cover the chart of accounts work described above as part of the standard phase plan.

If you are evaluating Odoo for the first time with Thai statutory reporting as a requirement, test the Balance Sheet and P&L reports against a sample chart of accounts before committing to go-live. That is far easier than discovering the gaps during your first real close.

Share

Frequently asked questions

Can Odoo produce financial statements in the exact DBD format for Thailand?

Odoo's Balance Sheet and P&L reports are flexible enough to mirror Thai statutory groupings once account tags and account groups are mapped correctly during setup. It does not come preconfigured that way, so this mapping work has to happen before you rely on the reports for filing.

Does Odoo handle withholding tax certificates automatically?

Odoo can generate the underlying withholding tax entries when rules are configured per vendor and tax rate, but matching certificates against the payable account each month is still a manual reconciliation step we build into the closing checklist.

How often should we reconcile inventory valuation against the balance sheet?

Monthly, not just at year-end. If costing methods or product categories change mid-year, the balance sheet inventory line and the stock valuation report can diverge, and catching that early is far easier than untangling it during an audit.

Is a custom Odoo module needed to get audit-ready statements?

In most cases no. The work is configuration: account tags, tax rules, document attachments on journal entries, and a disciplined closing routine. We avoid custom code here because it adds maintenance burden without solving a mapping problem.

What is the biggest mistake companies make with Odoo financial statements in Thailand?

Leaving the default chart of accounts and account groups untouched, then trying to remap months of posted transactions later. It is far cheaper to set the Thai groupings correctly before go-live than to restate history afterward.

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.