Thai law charges VAT on the subtotal plus the service charge. Software written for somewhere else charges it on the subtotal alone — and the bill still looks perfectly normal. That is what makes it expensive.
The order of operations
Subtotal, then service charge on the subtotal, then VAT on both of those together, then the total. Take a ฿1,000 bill at a 10% service charge and 7% VAT:
Correct — VAT on subtotal + service
Each component is rounded on its own and the rounded parts are summed, so the printed lines genuinely add up to the printed total. A total computed separately from its own lines is a total that disagrees with them by a satang, on some bills, forever.
What an imported system does
฿7 short on every ฿1,000 — every bill, all year, until someone checks. The bill looks right, the guest pays it, and the shortfall is yours to settle.
Both rates are settings on your venue, not constants in our code. If you charge no service charge, or a different one, the arithmetic follows what you set.
Numbering
An invoice number is allocated one at a time inside the database, per series, per venue. Two cashiers closing bills in the same second cannot produce a duplicate and cannot skip a number — not because they are unlikely to, but because the allocation is a transaction and only one of them can hold it.
Nothing is ever deleted. A mistaken bill is voided: the row and its number survive, so the series stays unbroken, and every money report leaves it out. A correction or a refund is a credit note that references the original rather than a quiet edit to it. The database itself refuses to delete a tax document — that refusal is a rule inside Postgres, not a check in the application, so it holds even against a mistake made by us.
Consumption reports still count a voided sale, deliberately. The stock did leave the shelf, whatever the books say about the money.

The rest of it
Under the ฿1.8m annual threshold the same bill prints as a plain receipt with no VAT line at all. You switch it on the day the Revenue Department says you switch, and nothing needs rebuilding.
Every amount is stored as a whole number of satang. No floating-point arithmetic touches a price, a discount or a total — which is how a bill that looks right stays right when you add it up a thousand times.
Every invoice is stored as both a structured record and a rendered PDF, retained for the period the law requires, in an archive you can search rather than a folder someone has to remember to back up.
A guest who needs a full tax invoice with their company name and tax ID gets one; everyone else gets the abbreviated form. Same sale, same number, same series.
Each trading night closes into a numbered Z-report at 6am, so the day’s official total cannot be quietly changed afterwards. A business day runs 6am to 6am — a night that runs past midnight stays in one report.
Your registered name, address and tax ID are set before your first sale, because an issued invoice is append-only and a placeholder cannot be corrected afterwards. We check this with you at provisioning rather than leaving a default in place.
Honest limits
We are not filing your tax return. Sabai POS produces correct, compliant, retained documents and the reports your accountant asks for. It is not an accountant, and it does not submit anything to the Revenue Department on your behalf.
We have not joined the RD e-Tax Invoice & e-Receipt system. That programme is voluntary. Compliant printed and emailed invoices with five-year retention satisfy an audit, and that is what we do today. We have deliberately left the seam for “e-Tax by Email” open for when it is worth doing rather than announcing it before it is.
This page is not tax advice. It is a description of how the software calculates and stores documents. If your situation is unusual — a service charge you do not charge, a mixed VAT and non-VAT operation, a group of companies — talk to your accountant, and bring them to the walkthrough.
Keep reading
Not a demo account full of invented data — a live venue on a Friday night, taking real orders. Bring your menu and we’ll have it on screen before you leave.
Tell us a little about your venue and we’ll arrange a time to show you the system running during real service.
We generally reply within 24 hours.
Anything at all — pricing, migrating off your current till, whether we fit a venue like yours. A real person answers.
We generally reply within 24 hours.