The part imported systems get wrong.

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

Four steps, and the third one is where it goes wrong.

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

StepWorkingAmount Items—฿1,000.00 Service charge10% of ฿1,000.00฿100.00 VAT base฿1,000.00 + ฿100.00฿1,100.00 VAT7% of ฿1,100.00฿77.00 Total—฿1,177.00

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

VAT7% of ฿1,000.00฿70.00 Total—฿1,170.00

฿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

Sequential, gap-free, and impossible to duplicate.

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 invoice archive: a gap-free run of issued tax invoices, each with its date, table and total

The rest of it

Six more things worth checking against whatever you use today.

01Not VAT-registered? Fine.

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.

02Money is never a decimal

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.

03Kept for five years

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.

04Full and abbreviated

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.

05A Z-report that freezes

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.

06Your seller details, set once

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

What we do not claim.

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

Where the invoice comes from.

Come and see it running during real service.

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.