Thailand — Retail & POS Localization
Two things define a Thai deployment: a VAT rate with an expiry date, and a script that breaks naive text layout. VAT sits at 7% against a statutory 10%, reduced one year at a time by royal decree. The decree in force expires on 30 September 2026; a further extension to 30 September 2027 was approved by cabinet in July 2026, but as of this update no gazetted decree enacting it has been confirmed here — see Tax. This is the nearest expiry of any rate in this repository. Separately, Thai is written without spaces between words and stacks vowel and tone marks above and below the base letter, which defeats both line-breaking and column alignment code written for European scripts. E-tax invoicing, by contrast, remains voluntary.
Verification status — partially verified, 2026-08
Checked against secondary sources. Confirm against the Revenue Department before relying on any of it.
Resolved this pass
- VAT 7% against a statutory 10%, enacted by Royal Decree No. 799 B.E. 2568, gazetted 14 September 2025, running to 30 September 2026. Nearest expiry in this repository — see below.
- A further one-year extension to 30 September 2027 was approved by cabinet on 27 July 2026 and confirmed by a Revenue Department notice dated 2 August 2026. Secondary sources only; the enacting decree is not confirmed gazetted as of 2026-08-14.
- E-Tax Invoice and e-Receipt is voluntary; no legislated B2B mandate reported for 2026 or 2027.
- Where used, the system works in XML with PDF/A-3, under RD STD 03-2566, secured by a qualified digital signature or an ETDA time stamp, with monthly transmission by the 15th of the following month.
- A tax invoice must carry the 13-digit TIN of both buyer and seller, the date, a description, and VAT as a separate line. Omitting any of these blocks the buyer's input VAT claim.
Still open —
TODO: verify
- Whether the decree extending 7% to 2026-10-01 → 2027-09-30 has been gazetted, and its number. Cabinet approval and a Revenue Department notice are not the operative instrument; the royal decree is. This is the most urgent item in this file. The two preceding decrees were gazetted on 20 September 2024 and 14 September 2025, so the answer should exist by roughly mid-September 2026.
- Whether displayed consumer prices are legally required to be tax-inclusive.
- Mandatory fields for a simple retail receipt as distinct from a full tax invoice.
- Whether the Buddhist Era calendar is required, permitted or merely customary on receipts.
- Thai code page support on the target printer.
- VAT registration threshold.
Currency
| Field | Value | Source type |
|---|---|---|
| ISO 4217 code | THB |
official-authority |
| Symbol | ฿ (U+0E3F) |
official-authority |
| Symbol position | Prefix — ฿1,250.00 |
unverified |
| Decimal places | 2 | official-authority |
| Thousands separator | ,; decimal separator . |
unverified |
| Typical price magnitude | Roughly 20 to 5,000 THB for everyday retail lines | unverified |
Tax
| Field | Value | Source type |
|---|---|---|
| VAT rate | 7%, a reduction from the statutory 10%, enacted by Royal Decree No. 799 B.E. 2568 (gazetted 2025-09-14) and running to 30 September 2026. | public-regulation |
| VAT rate from 2026-10-01 | Expected to remain 7% to 30 September 2027. Cabinet approved the extension on 2026-07-27; a Revenue Department notice of 2026-08-02 confirms it. The enacting royal decree is not confirmed gazetted — until it is, the operative fallback is the statutory 10%. | unverified |
| Tax-inclusive or exclusive display | Consumer prices quoted VAT-inclusive in ordinary practice. TODO: verify legal basis. |
unverified |
| Fiscal system name | Revenue Department. e-Tax Invoice & e-Receipt — voluntary, with tax incentives for adoption rather than a mandate. | official-authority |
The expiry is the point. A rate that has been extended repeatedly by cabinet decision is not a constant, and this one has the nearest horizon of anything in this repository. Any system deployed in Thailand needs VAT as a dated, editable record with effective-from and effective-to dates, and historical transactions must retain the rate that applied on their own date. If 7% is compiled in, the failure mode after 30 September 2026 is silently wrong tax on every sale.
How the renewal actually works, and why the date keeps moving. The 7% is not the rate in the statute. The statute says 10%, and permits a reduction by royal decree; each decree buys one year. Recent decrees:
| Decree | Gazetted | Reduced rate runs to |
|---|---|---|
| No. 790 B.E. 2567 | 2024-09-20 | 2025-09-30 |
| No. 799 B.E. 2568 | 2025-09-14 | 2026-09-30 |
| Not confirmed | — | 2027-09-30 (cabinet-approved 2026-07-27) |
The pattern is a gazette date in the second half of September, roughly two weeks before the old decree lapses. Cabinet approval is not the instrument. Press reporting of an approved extension is a reliable signal of intent and not a legal basis, so a deployment crossing 1 October 2026 should carry the extension as a scheduled, editable rate change that someone confirms against the Royal Gazette before it takes effect — not as a hardcoded assumption in either direction.
Tax invoice versus receipt. The 13-digit TIN of both parties is required on a
tax invoice. That means a business customer's TIN has to be capturable at the
counter, often after the sale has been rung up — decide whether that is a
mid-transaction edit or a separate issuance before designing the flow.
TODO: verify what a simple retail receipt must contain by contrast.
Receipt requirements
TODO: verify the mandatory field list for a retail receipt. For a full tax
invoice the confirmed elements are: seller TIN (13 digits), buyer TIN (13 digits),
date, description of goods or services, and VAT shown as a separate line.
Paper widths: 80 mm (48 or 42 characters at Font A) and 58 mm (32).
Calendar. Thailand commonly uses the Buddhist Era, 543 years ahead of the
Common Era — 2026 CE is 2569 BE. Dates on Thai commercial documents may be
expected in BE. TODO: verify whether this is required, permitted or customary.
Whatever the answer, store dates in a single canonical form and convert at render
time; storing BE dates guarantees an off-by-543 bug somewhere downstream.
Languages used in retail
Thai is the working language of retail, and it is the harder half of this file.
No spaces between words. Thai text runs continuously; word boundaries are
implicit. Line breaking therefore cannot be done by splitting on whitespace — a
naive wrap breaks mid-word, which in Thai produces something between unreadable
and wrong. Correct wrapping needs a dictionary-based or ICU-style line-break
algorithm. TODO: verify what the chosen rendering path provides.
Stacked marks. Thai places vowel signs above and below the consonant and adds tone marks above those, so a single displayed cluster can be three or four codepoints tall. Two consequences, both familiar from the Arabic file:
- Column alignment computed on string length is wrong. Combining marks occupy no horizontal column. Measure display width, not codepoint count.
- Line height must accommodate the stack. Tight leading clips the upper tone marks, which is legible enough to pass review by a non-reader and wrong to a Thai reader.
Encoding. Thai needs a dedicated code page — TIS-620 and its Windows variant
CP874 are the usual candidates. TODO: verify support and the ESC t value on the
target printer; as elsewhere, vendor numbering varies. Raster rendering avoids the
code page question and, given the line-breaking requirement above, is the
recommended default here.
Deployment pattern. Chinese-owned businesses commonly pair a Chinese back office with a Thai till and Thai receipts. Products need two names — a Thai one for the customer-facing output, an internal one the owner can read.
Payment methods
| Method | Notes |
|---|---|
| PromptPay | The national QR and account-proxy transfer rail; dominant for non-cash, including small amounts. Confirmation is visual at the counter. |
| Cash | Still substantial. |
| Cards | Widely accepted in urban retail through bank terminals. |
| E-wallets | Present alongside PromptPay. |
Notes for POS implementers
Put the rate expiry in the deployment checklist. 30 September 2026 is close enough that a system going live now will cross it. Check the Royal Gazette in mid-September 2026 for the decree covering 2026-10-01 onward, and configure the rate change ahead of time rather than on the morning it applies.
Test Thai rendering on hardware, with a Thai reader. Clipped tone marks and mid-word breaks are exactly the failures that survive a review by someone who does not read the script — the same trap documented in the Arabic file.
Time zone. UTC+7, no daylight saving.
Food service
Restaurants diverge from retail at the till, not just in the menu. Three things change: the tax treatment can depend on where the food is eaten, service charge and tips carry their own rules and their own tax questions, and the trading day routinely runs past midnight. Thailand's food-service questions sit on top of a VAT rate whose enacting decree expires on 30 September 2026 and a script that is hard to set on a kitchen ticket.
Tax treatment
| Question | Answer | Source type |
|---|---|---|
| Dine-in, takeaway and delivery taxed differently? | TODO: verify |
unverified |
| Reduced rate or registration threshold for small food businesses? | TODO: verify |
unverified |
| Alcoholic drinks taxed separately? | TODO: verify |
unverified |
Service charge and tips
| Question | Answer | Source type |
|---|---|---|
| Service charge customary? At what rate? Mandatory? | TODO: verify |
unverified |
| Is the service charge itself taxable? | TODO: verify |
unverified |
| Do tips go through the POS, and are they recorded? | TODO: verify |
unverified |
| Must the service charge be shown as its own receipt line? | TODO: verify |
unverified |
Receipt requirements specific to food service
| Question | Answer | Source type |
|---|---|---|
| Must dine-in and takeaway be distinguished on the document? | TODO: verify |
unverified |
| Must individual menu items be itemised? | TODO: verify |
unverified |
| Are table number and guest count mandatory fields? | TODO: verify |
unverified |
Operating conventions
Trading day and the midnight boundary. TODO: verify whether any rule governs the accounting date of a sale rung up after midnight. Regardless, make the business-day boundary configurable per site — a restaurant closing at 02:00 will otherwise split one night's trade across two reporting days.
Trading hours. TODO: verify typical local hours for the intended segment;
they drive shift handover, Z-report timing and staffing, and they differ sharply
between a bakery and a bar.
Kitchen ticket language. Chinese-owned restaurants commonly run a Chinese-reading kitchen, a local-language dining room and a Chinese back office. The kitchen ticket language must be settable independently of the till language and of the customer-facing document language — three settings, not one. TODO: verify nothing here; this is a deployment pattern, not a legal requirement.
Notes for POS implementers
Four capabilities separate a food-service till from a retail one. They are worth naming because a retail POS typically has none of them, and retrofitting them is expensive:
- Floor plan and table state — a sale is attached to a table, not opened and closed in one pass.
- Tab allocation — one table's bill split across several payers, or one payer covering several tables. Splitting by item and splitting evenly are different operations and both get asked for.
- Guest count — needed for per-head reporting, and in some markets it appears on the document. See the receipt table above.
- Tip adjustment — the tip is frequently added after the card is authorised, so the recorded amount must be adjustable post-authorisation without reopening the sale.
Kitchen tickets are where Thai rendering bites hardest. They are printed fast, on narrow paper, often on a cheaper printer than the front-of-house one, and read under time pressure. Everything in the retail section about word breaking and stacked tone marks applies with less margin for error. Test the kitchen printer separately; it is frequently a different model.
Order modifiers are not discounts. "No coriander", "extra spicy", "sauce on the side" attach to a line and must reach the kitchen ticket, sometimes with a price delta and sometimes without. Modelling them as discounts or as separate products both fail — the first corrupts the tax base, the second corrupts stock.
Void before and after firing are different events. Cancelling an item that has not reached the kitchen is an edit; cancelling one already cooked is a loss that has to be recorded as such, or waste and theft become indistinguishable.
Last updated: 2026-08
Maintained by the MISAll team. Last updated: 2026-08