Odoo ERP

Adapting the Thai Chart of Accounts Odoo Setup for Real Use

The default Thai chart of accounts in Odoo is a starting point, not a finished setup. Here is what we change before the first journal entry.

Ravi Shanker SinghFounder & Odoo ConsultantPublished 6 min read
Share
Adapting the Thai Chart of Accounts Odoo Setup for Real Use
Image: Internet Archive Book Images · Openverse · CC0
On this page

Every Thai Odoo implementation we have run starts the same way. Someone installs the Thai localization module, looks at the chart of accounts it generates, and asks whether it is ready to use. It is not, not exactly. The Thai chart of accounts Odoo ships with is a reasonable skeleton. It follows the structure the Revenue Department and most Thai auditors expect. But it is generic by design, built to work for a trading company, a service firm, and a small manufacturer all at once. Your business is none of those in isolation. The accounts, groups, and analytic structure need adjustment before anyone posts a real entry against them.

We have done this setup enough times to have a standing checklist. Below is what we actually walk through with a client in the first two weeks of an Odoo implementation, before go-live, not after.

What the Default Thai Chart of Accounts Odoo Setup Gives You

Installing the Thai localization package (l10n_th) creates a chart of accounts numbered broadly in line with Thai accounting convention. Assets sit in the 1xxx range, liabilities in 2xxx, equity in 3xxx, revenue in 4xxx, and expenses in 5xxx and above. It also sets up the account types Odoo needs internally. These decide how each account behaves on the balance sheet or profit and loss statement. It links to Thai tax rates for VAT at 7 percent.

That is a solid base. What it does not do is reflect your company's own cost centers, product lines, branches, or the level of detail management actually wants on a monthly P&L. A trading company importing goods needs cost of goods sold broken out by product category. A professional services firm needs expense accounts split by project or department. A manufacturer needs raw material, work-in-progress, and finished goods valuation accounts that map cleanly to its costing method. None of that is in the box.

Thai Chart of Accounts Odoo Account Groups: Organize Before You Add Detail

Before touching individual accounts, we set up account groups. These are the folders that let you collapse "all bank accounts" or "all trade payables" into one line on a report, then expand when needed. Skipping this step is the single most common mistake we see in self-managed Thai setups. Accountants add accounts as they need them, in no particular order. Six months later the trial balance is unreadable without exporting it to Excel first.

A practical grouping for a mid-size Thai company usually looks like this:

  • Current assets: cash, bank, PromptPay clearing, accounts receivable, input VAT, withholding tax receivable
  • Non-current assets: fixed assets, accumulated depreciation, intangibles
  • Current liabilities: accounts payable, output VAT, withholding tax payable, accrued expenses
  • Equity: share capital, retained earnings, current year earnings
  • Revenue: by product line or by sales channel if you sell through Shopee, Lazada, or TikTok Shop alongside your own storefront
  • Cost of sales and expenses: by department or by nature, depending on how management wants to read the P&L

Get the groups right first. Adding or renaming accounts later is easy. Reorganizing groups after a year of postings means restating comparative reports, which nobody enjoys.

Accounts to Add Before Go-Live, Not After

A few accounts rarely exist in the default chart. They come up in almost every Thai business we onboard:

  • A clearing account for PromptPay settlements, separate from your main bank account, so daily reconciliation does not get mixed up with wire transfers
  • Separate withholding tax receivable accounts for PND 3 (juristic persons withholding on services) and PND 53 (withholding on services paid to other juristic persons), rather than one blended account
  • A suspense or clearing account for e-Tax invoice batches awaiting submission, useful if your invoicing volume is high enough that batches do not clear same day
  • Marketplace fee expense accounts, one per channel if you sell on more than one, so you can see Shopee's commission structure against Lazada's without digging into subledgers

None of these are exotic. They are just not in the default chart. Odoo cannot know in advance which marketplaces you sell on or how granular you want your tax receivables split.

Analytic Accounts: Answering Management's Real Questions

The chart of accounts answers "what kind of transaction is this." Analytic accounts answer "which project, branch, or cost center does it belong to." Thai businesses that skip analytic accounting tend to end up requesting a custom report every time the owner wants to know profitability by branch or by job. With analytic accounts set up correctly from day one, that report already exists.

We typically recommend one analytic plan per dimension that actually changes your decisions. A company with three branches in Bangkok, Chonburi, and Chiang Mai wants an analytic account per branch. A project-based business wants one per client engagement. A manufacturer often wants both a cost center plan and a project plan running in parallel. Recent versions of Odoo support this through multiple analytic plans.

The trade-off is discipline. Analytic accounts only produce useful reports if every journal entry, vendor bill, and expense line is tagged correctly at the point of entry. We have seen clients set up a beautiful analytic structure and then abandon it within three months. Staff were not trained to tag transactions, and nobody enforced it. If you are not prepared to make analytic tagging mandatory on the relevant journals, do not bother setting up the plan. A half-used analytic structure is worse than none. It gives false confidence in reports that are actually incomplete.

Fiscal Position and Tax Mapping in the Thai Chart of Accounts Odoo Setup

Thai VAT and withholding tax rules interact with the chart of accounts through fiscal positions and tax groups. Before go-live, check that your default sales and purchase taxes point at the correct output and input VAT accounts. Confirm that withholding tax rates are mapped to the right receivable or payable account rather than a generic one. This matters most when you deal with vendors at different withholding rates, such as 3 percent for most services versus other rates for rentals or specific professional services. Getting this wrong does not usually break anything visibly. It just produces a PND form that does not reconcile to the general ledger at month-end. Chasing that down after the fact is painful.

A Short Pre-Go-Live Checklist

Before anyone posts the first real entry, we walk through this list with the client's finance team:

AreaCheck
Account groupsMatch how management wants to read the P&L and balance sheet
Chart detailAdded marketplace fees, PromptPay clearing, split withholding tax accounts
Analytic plansOne per dimension that drives a real decision, not more
Default taxesSales and purchase taxes mapped to correct VAT accounts
Withholding taxRates mapped to distinct receivable/payable accounts
Opening balancesLoaded against the new structure, not the generic default one

Running through this list takes a day or two of working sessions with whoever owns the books. It is far cheaper than discovering in March, during the annual audit, that half the expense accounts have no analytic tag and the auditor wants a branch-level breakdown. Reconstructing that manually at the last minute is no fun for anyone.

Where the Chart of Accounts Fits in a Wider Odoo Implementation

Chart of accounts and analytic structure are usually one slice of a broader go-live. That rollout also covers inventory, sales, and sometimes Thai VAT and e-Tax configuration and e-Tax invoice workflows. We treat the accounting setup as something to configure and sign off before any transactional data is loaded. Retrofitting account structure onto live journal entries is possible but messy. It always costs more than doing it right the first time.

If you are early in planning an Odoo rollout for a Thai entity, raise the chart of accounts conversation during the scoping phase of your Odoo ERP development project. Do not leave it for the accounting team to sort out after training. Our team also handles the surrounding integration work, such as marketplace connectors through Odoo API integration, so the chart of accounts lines up with how sales actually arrive in the system. For businesses running on Shopify alongside marketplaces, our own e-commerce development work often touches the same reconciliation questions.

One honest caveat: no chart of accounts, however well designed, replaces a competent accountant reviewing the trial balance monthly. Odoo can enforce structure and tagging rules. It cannot catch a miscoded entry that still balances. Build the structure right. Then keep the monthly review habit regardless.

Share

Frequently asked questions

Is the default Thai chart of accounts in Odoo ready to use as-is?

It is a working starting point with the correct numbering ranges and VAT links, but it rarely matches a specific company's reporting needs. Most businesses need to add accounts for marketplace fees, PromptPay clearing, and split withholding tax receivables before go-live.

What is the difference between account groups and analytic accounts?

Account groups organize the chart of accounts itself, letting you collapse or expand categories like assets or liabilities on a report. Analytic accounts tag individual transactions by project, branch, or cost center, answering a different question about where the cost or revenue belongs.

How many analytic plans should a Thai SME set up in Odoo?

Only as many as drive real decisions, typically one or two. A branch-based retailer might need one plan per branch, while a project-based firm needs one per client engagement. Adding more plans than staff can consistently tag at data entry produces incomplete reports.

Can we change the chart of accounts after we have already gone live?

Yes, accounts can be added or renamed at any time, but reorganizing account groups after a year of postings means restating comparative reports. It is far simpler to get the group structure right before the first entry is posted.

Why do we need separate accounts for PND 3 and PND 53 withholding tax?

PND 3 and PND 53 apply to different withholding scenarios and are reported separately to the Revenue Department. Keeping them in one blended receivable account makes the monthly reconciliation between your general ledger and your withholding tax forms much harder to verify.

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.