Odoo ERP

Odoo Withholding Tax Thailand: PND 3 and PND 53 Setup Guide

A practical walkthrough of configuring Odoo withholding tax for Thailand, covering PND 3 and PND 53 tax records, vendor WHT certificates, and monthly filing prep.

Ravi Shanker SinghFounder & Odoo ConsultantPublished 6 min read
Share
On this page

Every Thai company that pays a vendor for services, rent, or professional fees has to withhold tax at source. That tax gets reported to the Revenue Department the following month. Get the Odoo withholding tax Thailand setup wrong and you end up reconciling by hand every close. You chase missing certificates. You re-key numbers into the PND 3 or PND 53 forms. We have rebuilt this configuration for enough Thai entities now that we treat it as a fixed sequence: tax records first, certificate layout second, filing report last.

This post walks through how we configure Odoo withholding tax Thailand setups on real projects. We cover what PND 3 and PND 53 actually require from the system. We also cover where teams usually get tripped up during their first month-end close.

PND 3 vs PND 53 in Odoo withholding tax Thailand setups

PND 3 covers withholding on payments to individuals: freelancers, landlords who are natural persons, independent consultants. PND 53 covers payments to juristic entities, meaning companies and partnerships. The rate table overlaps for many service categories. But the form, the recipient classification, and sometimes the rate itself differ.

In Odoo this distinction lives on the vendor record, not on the tax itself. We set the partner's company type, individual or company, correctly during data migration. That single field decides whether a withholding entry flows to PND 3 or PND 53 reporting later. Get this wrong on fifty vendors during go-live and you spend the first filing cycle correcting it.

Setting up the withholding tax records

We create a dedicated set of withholding tax records in Accounting, separate from VAT. Each one ties to a specific income type under Thai Revenue Department categories: rental, service fees, transportation, advertising, professional fees, and so on. Each record needs:

  • A tax name that matches how your accountant refers to it (for example "WHT 3% Service")
  • The correct percentage, since rates vary from 1% to 5% depending on income type
  • A dedicated tax grid or tag so amounts land in the right box on the filing report
  • The scope set to purchases, since withholding tax transactions always originate on vendor bills, not customer invoices

We avoid stacking the withholding tax directly as a negative line hidden inside the main VAT tax group. It needs its own identity. That way it can be isolated later in the certificate and in the monthly summary. Your chart of taxes will have more entries than a non-Thai instance of Odoo. That surprises some finance teams until they see the filing report run cleanly off it.

Mapping taxes to accounts

Each withholding tax record points to a dedicated payable account, typically something like "Withholding Tax Payable - PND 3" or "- PND 53". These accounts should never mix with the general VAT payable account. We have inherited instances where someone merged them to save a line in the chart of accounts. Untangling a year of transactions to split PND 3 from PND 53 amounts cost those clients real reconciliation time. Keep them separate from day one.

Vendor withholding tax certificates

The vendor expects a WHT certificate (หนังสือรับรองการหักภาษี ณ ที่จ่าย) for every payment where tax was withheld. It must show the gross amount, the rate, the tax withheld, and the income type code. This is not optional paperwork. Vendors need it to claim the credit against their own tax liability.

In Odoo, once the withholding tax line exists on the vendor bill and payment, we generate the certificate from a dedicated report template built around the standard Thai format. The fields that matter most on this template:

  • Company tax ID and vendor tax ID, both validated at entry, not left to the printed document to reveal a typo
  • Payment date versus invoice date, since the certificate is based on the date tax was actually withheld, which is the payment date, not the bill date
  • Income type code matched exactly against the Revenue Department's published list

A real limitation here: Odoo does not ship a Thai WHT certificate template out of the box the way it does for some neighboring markets. This report is something we build or customize per client, typically as a QWeb template tied to the payment record. If your current implementation skipped this, you are probably still exporting certificates to Word and filling them manually. That approach does not scale past a handful of vendors a month. It is one reason we fold this work into our Odoo ERP customization services rather than treat it as a one-off report request.

Preparing the PND 3 / PND 53 monthly filing

The filing itself is a summary. Every vendor paid during the month, grouped by income type, with gross amount, tax withheld, and vendor tax ID, gets submitted. That happens either via the Revenue Department's e-filing portal or through an accountant's software that accepts a structured import.

We build the Odoo side of this as a saved filter or a lightweight report on payments and journal items. It is filtered by the withholding tax tags set up earlier, grouped by tax type and income category. The goal is simple: by the first working day after month-end, someone in finance can pull this list without touching a spreadsheet macro.

Two things consistently catch new instances out:

  1. Payments made in a different month than the bill date get missed if the filter is built on invoice date instead of payment date. PND filing is strictly based on when the withholding happened, which is the payment event.
  2. Partial payments against a single bill each carry their own withholding tax portion, proportional to the amount paid. If the system calculates withholding only once at full invoice value, partial payment scenarios overstate the tax withheld on the first installment.

Once the report structure is right, reconciling it against the general ledger balance in the withholding payable accounts becomes a five-minute check rather than a half-day exercise.

Where Odoo withholding tax Thailand setups usually go wrong

Most of the problems we see are not Odoo limitations. They are configuration drift from going live without walking the full vendor and tax mapping exercise first. Generic tax templates imported from an international chart of accounts do not carry Thai withholding categories. Unless someone builds them deliberately, bills get recorded with VAT only. Withholding then gets bolted on as a manual journal entry after the fact. That manual journal entry is where certificates get missed and PND filings fall out of sync with the books.

We handle this as part of our broader Thai localization and accounting setup work. Withholding tax configuration rarely stands alone. It touches the chart of accounts, the vendor master data, e-Tax invoice workflows, and the month-end close checklist all at once. If you are migrating from another system, or inheriting an Odoo instance set up without Thai tax specifics in mind, consider an audit before your next filing deadline. That beats an audit triggered by a penalty notice.

Automating certificates at volume

For companies running multiple entities, or handling both PND 3 and PND 53 at volume, we also look at whether the existing chart of accounts can absorb automated certificate generation. The trigger point is the payment confirmation itself, rather than a manual export step each month. This often ties into our Odoo implementation services when a client is rebuilding the finance workflow from the ground up. It is a small change. It removes one recurring task from the finance team's calendar.

One trade-off worth naming plainly: none of this replaces a conversation with your accountant about which income type code applies to a borderline payment. Odoo will calculate and report exactly what the tax record says. But the classification judgment still sits with a human: whether this is a service fee or a rental, whether this vendor is an individual or a juristic entity for this specific contract. Getting that call wrong propagates through every certificate and filing until someone catches it.

Share

Frequently asked questions

Does Odoo support Thai withholding tax out of the box?

Odoo's base accounting module supports generic withholding tax logic, but the specific PND 3 and PND 53 categories, rates, and certificate formats for Thailand need to be configured as dedicated tax records. We typically build this during localization rather than relying on a default template.

What is the difference between PND 3 and PND 53 in Odoo setup?

PND 3 applies to withholding on payments to individuals, while PND 53 applies to payments to juristic entities such as companies. In Odoo this is driven by the vendor partner's company type field, which must be set correctly for each vendor record.

Can Odoo generate the WHT certificate for vendors automatically?

Yes, but the Thai-format certificate is not a default report in most Odoo instances. We build it as a custom QWeb template linked to the payment record so it pulls gross amount, tax rate, income type, and both tax IDs automatically.

Why does our withholding tax filing not match the general ledger?

This usually happens when withholding entries are recorded on invoice date instead of payment date, or when partial payments are not calculating proportional withholding. Both issues come from tax record configuration rather than an Odoo limitation.

Should withholding tax and VAT use the same payable account in Odoo?

No. We always configure separate payable accounts for VAT and for each withholding tax category. Mixing them makes it difficult to isolate PND 3 and PND 53 amounts later and complicates reconciliation during month-end close.

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

Odoo e-Tax Invoice Setup for Thai Companies: A GuideOdoo ERP

Odoo e-Tax Invoice Setup for Thai Companies: A Guide

A practical walkthrough of setting up Odoo e-Tax invoice and e-Receipt for Thai companies, covering numbering, providers and the approval flow.

Ravi Shanker Singh5 min read

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.