So this system prices people first. A table holds one buffet package, with adults and children counted separately, and with its own start time and end time. The bill is built from those numbers. Anything ordered adds to it only if the shop has said that item should. The guest's half of the same table — scanning the QR, watching the bill build, splitting it at the end — is on the restaurant page. It is free to use, with no monthly fee.
Packages: price per head, time, and last orders
A shop can run several packages at once and order them itself, cheapest first or however it likes. Each package carries a full set of its own values: the price per head, the minutes allowed per session, and the last order cutoff — how many minutes before the end the kitchen stops accepting orders. The database enforces that the cutoff falls inside the session, so a table can never open in a state where nothing can be ordered at all.
The "90 minutes" on the sign outside is a promise to the guest, so the timer belongs in the system where both sides can see the same number, not in a waiter's memory to be argued about at the till. The table stores its start, its end, its order cutoff and the minutes the shop has granted as an extension, each as a separate value — so extending a table's time is an auditable number rather than a recollection of that shift.
Child pricing is a ladder, not a single box
Buffets almost always price children differently, and in practice not at one rate but as a ladder: free below this, half above it, full price above that. So a package holds several child tiers, each a range that the database forbids from overlapping any other, and the shop chooses whether the ladder is measured by age or by height — one or the other for the whole package.
- Height tiers can be declared in centimetres or inches; the stored value is always millimetres, so changing the displayed unit never shifts a price.
- A tier's price is set either as an amount per child or as a percentage of that package's adult price.
- A tier can cap how many children get that rate, with a defined rule for what happens beyond the cap.
- The bill names every tier it applied, so a guest can see why two children were charged differently instead of seeing only a total.
Leftover charges in three units, on the bill
Charging for uneaten food is a normal condition of a Thai buffet. With nowhere to record it, shops type it into the notes field and the printed total stops matching the money collected. Here it belongs to the package and can be set in three units: once for the whole table, per person, or per 100 grams — so a shop that weighs leftovers at the counter enters the weight and lets the system price it.
There is no connection to a digital scale. The per-100-grams unit exists and prices correctly, but the weight is typed in by hand; nothing is read from the scale automatically. The full list of what this system answers no to is on which POS software is best.
Menu items have three states, not two
Most systems can only mark a dish as in the buffet or out of it. Real buffets need three. Each item here carries one of: included (order it, no charge) · surcharge (order it, add the amount set) · a la carte only (a buffet table cannot order it at all — the bottle of spirits, whose age rules are per country and re-checked on every order, or the celebration dessert set).
If a shop runs several packages that include different food, it can tick the items belonging to each package separately. Once ticked, anything not on that package's list cannot be ordered under it. A package that has never been ticked keeps using the item's own role, so a shop that does not want this level of detail does not have to do anything.
Self-service or ordered from a screen
Buffets come in three shapes: everything ordered from a screen, an entirely self-served line, and a mix where the line is self-served but drinks are still ordered. A package picks one of the three. The only rule the system actually enforces is that when the style is not screen-ordered, included items cannot be ordered — surcharge items still can. Every existing shop defaults to screen-ordered, so nothing moves until somebody chooses to change it.
Running a buffet does not stop at the till
Buffets lose money in the back of house, not at the counter. The console carries the tiles that follow on from the till: ingredient and goods stock · purchasing and payables · menu cost and margin · menu availability driven by ingredients, which closes a dish when its ingredients run out · shift checklists · rosters and hours · and table reservations — all in the same business console, not a second program. They are the same stock and purchasing tiles a grocery lives on.
And because eating in counts as a real transaction, only guests the database can prove ate there may review the restaurant. The star average is recomputed by a trigger from the real rows; it is not a number anyone types in.