Restaurant DX InsightsPublished: September 14, 2026
By Rezabo Editorial Team

Thai Restaurant Tax Compliance (VAT 7% / WHT 3%): Reservation-Linked Full Tax Invoices and PP.30 Automation

Thai Restaurant Tax Compliance (VAT 7% / WHT 3%): Reservation-Linked Full Tax Invoices and PP.30 Automation

BLUF: Capture the Tax ID before the guest sits, not while the queue forms

A Bangkok corporate table fails tax compliance at the cashier, not in the kitchen. The Revenue Department denies the buyer’s 7% input VAT if the full tax invoice is missing a field, carries a mistyped 13-digit TIN, or names the wrong branch (00000 head office versus 00001). The paying company then withholds 3% on the service-charge line, remits PND.53, and expects a matching gross invoice plus a later 50 ทวิ certificate trail. Cash still hits the till net of withholding, while output VAT on PP.30 is computed on the full VAT base. Manual TIN typing at Friday 22:00 produces re-issues, denied credits, and month-end reconstruction. The working stack captures TIN, registered Thai name, branch, and billing email on the reservation, validates the Modulo-11 checksum before confirm, hands a tax profile to POS or issues the invoice from the payment event, and exports a PP.30 sales listing that already agrees with PromptPay deposits and credit notes.

1. The rate is not the hard part. Document quality and cash timing are.

Statutory VAT is 10%. The reduced 7% rate remains in force after the Cabinet’s 27 July 2026 extension and the Revenue Department notice of 2 August 2026, currently through 30 September 2027 unless a later decree changes it. Almost every Sukhumvit tasting-menu room already prices as “++”: menu, plus 10% service charge, plus 7% VAT on the combined base. Hosts can recite that arithmetic. What they cannot do, at pace, is produce a Section 86 full tax invoice that a Japanese or Thai corporate AP team will accept for input credit.

Four facts sit under every corporate check.

  1. Only a full tax invoice supports input VAT. An abbreviated retail slip, a PromptPay screenshot, or a LINE PDF that omits the buyer TIN is not evidence. The buyer absorbs 7% as cost. On a 50,000 THB private-room check that is 3,500 THB the guest company cannot recover, and they will not book the room again.
  2. Withholding is a prepaid credit, not the tax itself. A Thai company paying another Thai company generally does not withhold on a sale of goods. It does withhold 3% on many service fees (PND.53). Hotel and restaurant service charges are routinely treated as that service line. Food is usually left outside the 3% net. Some AP teams still withhold on the whole entertainment check. That is a classification dispute. It is not a rounding bug for the cashier to invent at closing.
  3. Output VAT follows the VAT base, not the cash in the drawer. If the guest withholds 30 THB on a 1,000 THB service charge, you still remit 7% on food plus service. The 30 THB becomes a corporate income tax credit when the withholding certificate arrives. If your POS prints net as if it were the taxable sale, PP.30 and the bank will never meet.
  4. Deposits create a second VAT event unless you code them. A non-refundable PromptPay deposit is often consideration received. VAT may be due at receipt. Applying the same cash again on the final invoice without a credit note double-counts output tax. A refundable security hold is a different object. Mixing the two in one “deposit” column is how August filings blow up in September.

The VAT registration threshold is still 1.8 million THB of revenue in a trailing twelve-month window. Crossing it without registering, then printing “VAT 7%” on guest bills, is the pattern Thai tax accounts keep posting about: back tax, a 1x to 2x penalty, and 1.5% per month surcharge. Collecting VAT you are not registered to collect is worse than leaving VAT off the menu.

Rezabo is a reservation and CRM ledger at 1,900 THB per month, not a POS. It does not replace Wongnai POS or Ocha. What it does is stop the tax identity from being born at the terminal. TIN, branch, legal name, and billing email are reservation fields. The POS, or an invoice job bound to the payment webhook, consumes that profile. Month-end is an export, not a reconstruction.

2. Floor notes, Reddit, and X already name the same four failures

Public threads and closing-shift notes use different nouns for one pipeline break.

Guests on Reddit read “++” as a surprise, corporates read it as a document. Threads on r/ThailandTourism and r/Thailand repeat the same bill shock: menu 1,000 THB becomes about 1,177 after 10% service and 7% VAT, and nobody told them at order. Locals answer with the Bangkok convention: a trailing “+” means VAT, “++” means VAT and service. That is a guest-communication problem. The tax problem starts when the same check must become a full tax invoice and the host is typing a 13-digit TIN while four parties wait. r/Thailand also records shops that add 7% on the receipt without being VAT-registered. Guests cannot see the registration. Corporate AP can, on the Revenue Department VAT search.

X is harsher on the WHT misunderstanding. A mid-August 2026 Thai-language thread that circulated past 100,000 views walked through a factory catering group: the factory withheld 3%, the operators treated that as “tax paid in full,” annual receipts sat near 5 million THB, they never registered for VAT past 1.8 million, cash purchases had no invoices, and a 700,000-plus THB assessment arrived at a home address. The post’s three errors are the restaurant version of the same file: WHT 3% is an advance, not a closing payment; VAT registration is a threshold event; undocumented COGS cannot be deducted at actual. Separate posts flag cash bills that charge “VAT 13%” with no seller TIN. Statutory reduced VAT is 7%. A 13% line on a slip with no tax ID is not a tax invoice. It is a complaint to hotline 1161.

Corporate entertainment buyers care about the TIN and the branch, not the plating. Japanese regional HQs in Asoke and Japanese-Thai joint ventures will reject an invoice that uses the English trade name (“Nami Thonglor”) instead of the juristic name on the DBD affidavit, or that prints branch 00000 when the cost center is branch 00003. One wrong digit in thirteen fails the Modulo-11 check and also fails the buyer’s AP match. Re-issue is not a PDF reprint. It is a credit note against the original serial plus a new invoice. If the original already went into the guest’s month, you are now inside their closing calendar.

Hosts describe the Friday 22:00 typing tax. The guest produces a phone photo of a TIN, sometimes a personal ID, sometimes a head-office card for a branch dinner. The cashier copies thirteen digits, a Thai address with no postal code, and an email that bounces. Two days later accounting is asked for a “full tax” because the abbreviated slip cannot be used for input credit. The reservation already had a company name in English. It never had a tax profile.

The guest-facing complaint is price opacity. The operator-facing complaint is document identity arriving too late. Those are the same booking form.

3. Feature comparison: five ways shops “do tax invoices”

“We can issue a full tax invoice” is a slogan. The implementation decides re-issue volume, PP.30 hours, and whether corporate bookers stay.

Dimension Abbreviated slip only Cashier types TIN at POS Accounting SaaS after the fact (FlowAccount / PEAK class) In-house e-Tax XML Rezabo tax profile on the reservation
When identity is captured Never. Retail slip has no buyer TIN After dessert, in the queue Days later from LINE photos and Excel At invoice job time, if master data exists At booking, before the seat is confirmed
Document the buyer can use for input VAT No. Abbreviated invoices cannot support the credit Only if every Section 86 field is correct Yes, if the late invoice still matches the payment date story Yes, if XML, cert, and RD channel stay live Yes, if the POS or invoice job consumes the profile
TIN validation None Human eyes. Transpositions survive Batch, often after the error has shipped Custom. Easy to skip checksum Modulo-11 on submit; reject before confirm
WHT 3% on service charge Not modelled. Net cash is treated as the sale Optional POS flag, often a store-level toggle Manual journal You own the split Profile flag: goods vs service-charge vs guest-policy override
Deposit vs final invoice Two unlinked papers Two POS tickets if anyone remembers Accountant reconstructs You own credit-note logic Deposit receipt and final invoice share reservation_id
PP.30 pack Paper tape + memory POS sales export, rarely credit-note clean Strong on books, weak on floor identity Custom ETL 1-click sales listing keyed by invoice serial and reservation
e-Tax path None Vendor-dependent add-on Often email PDF, not ETDA XML XML + CAdES, you run the cert PDF / CSV now; XML handoff where the shop is RD-approved
Monthly shape Zero software. High re-issue and lost corporates POS fee + cashier minutes Per-document or seat licence, plus accountant hours Cert + engineer + RD ops 1,900 THB flat ledger, unlimited reservations

Read the table as a ranking of when identity exists. Accounting SaaS is excellent at journals and weak at Friday night. POS tax modules print well and still start from a blank TIN field. In-house XML is the right long-term RD shape and a poor first project if master data is still born at the cashier. Rezabo’s job is the master data and the event log. The POS remains the fiscal printer in most Bangkok rooms.

4. Rate limits, filing clocks, and API constraints that belong in the contract

Sales decks say “e-tax ready” and “auto PP.30.” Published clocks and channel limits disagree. Put these rows in due diligence before you promise next-day corporate billing.

Constraint Revenue Department / law Typical Thai POS tax module FlowAccount / PEAK class In-house XML e-Tax Reservation ledger (Rezabo)
VAT rate in force Statutory 10%, reduced 7% through 30 Sep 2027 (Cabinet 27 Jul 2026; RD 2 Aug 2026) Hard-coded 7% until someone remembers to edit Tax-code table Config. Do not bury 0.07 in three services Tax-code per line; rate dated, not global
PP.30 due 15th following month paper; 23rd e-file (8-day relief through 31 Jan 2027) Sales CSV, you file Return pack You file Pre-reconciled sales CSV; accountant still signs
PND.53 (shop as withholder) Monthly. Paper 7th; e-file 15th. E-file is the live path Weak. POS is not AP Strong if AP lives there Custom Vendor bills (SaaS, photo, cleaning) are a separate AP feed
e-WHT incentive Eligible e-WHT payments can drop 3%–5% to 1%. 2023–2025 window; Cabinet 16 Jun 2026 approved extension to 31 Dec 2027 (decree pending) Rarely wired Depends on the plan You must actually use the e-WHT channel Does not replace e-WHT. Flag vendor invoices that qualify
e-Tax obligation Voluntary in 2026. Two tracks: ETDA XML 3-2560 + digital signature, or e-Tax by Email with timestamp Add-on, often email PDF Email PDF common XML + cert + RD upload Do not claim mandatory e-Tax. Offer the data the approved channel needs
TIN lookup Free portal at eservice.rd.go.th with CAPTCHA No live lookup Occasional copy-paste Scraping the CAPTCHA portal will fail Checksum locally; portal match is a back-office step, not a request storm
Invoice serial Sequential, by shop or by RD-approved range Local counter. Multi-terminal races duplicate Cloud counter You own uniqueness shop_id + fy + seq in one allocator
Retention Books and invoices: 5 years typical RD exam window Vendor storage TOS Vendor TOS. Export before you churn Your object store Shop-controlled export. Do not treat chat history as the archive
Webhook / job limits RD upload windows are office-hour shaped POS online sync, undocumented burst Public APIs vary; expect 429s on bulk PDF RD and CA OCSP can stall sign jobs Idempotent invoice jobs on reservation_id + charge_id

Three traps sit inside that matrix.

CAPTCHA is a product constraint. The VAT registrant search is the right place to confirm legal name, status, and branch. It is not an API. Do not poll it per booking during a Friday open. Validate Modulo-11 at submit. Queue human or batched portal checks for new TINs.

e-Tax incentives are not a default. The 1% e-WHT rate and the 200% CIT deduction on e-Tax investment apply only if you actually issue through the approved electronic channel. A signed marketing PDF emailed from Gmail is not that channel. Shops that tell AP “we are e-tax” and then send a LINE image create the same rejected credit as a handwritten slip.

PP.30 on the 23rd is not slack for reconstruction. The extra eight days are for e-file mechanics. If deposits, no-show forfeits, and credit notes are still being typed in week three, you will file a number that the bank statement contradicts.

5. The arithmetic the POS must print, and the WHT the drawer will miss

Walk one corporate four-top. Menu subtotal 10,000 THB, service 10%, VAT 7%, guest company withholds 3% on service charge only.

  1. Food and beverage (ex tax): 10,000.00 THB
  2. Service charge 10%: 1,000.00 THB
  3. VAT base: 11,000.00 THB
  4. Output VAT 7%: 770.00 THB
  5. Gross invoice: 11,770.00 THB
  6. WHT 3% on service: 30.00 THB
  7. Cash / PromptPay / card collected: 11,740.00 THB

PP.30 output VAT is 770.00, not 7% of 11,740. The 30.00 is not a discount. It is a receivable: withholding certificate from the guest company, then a CIT credit. If you never collect the 50 ทวิ, you have donated 30 THB per check to silence at the door.

Amounts live in satang. Baht floats will drift one satang on a 20-line banquet, and AP will reject the invoice for a 0.01 mismatch.

const SATANG = 100;
const VAT_BPS = 700; // 7.00%
const SC_BPS = 1000; // 10.00%
const WHT_SC_BPS = 300; // 3.00% on service charge

export type TaxProfile = {
  tin: string; // 13 digits
  branch: string; // 00000 head office
  legalNameTh: string;
  addressTh: string;
  billingEmail: string;
  whtOnServiceCharge: boolean;
};

export function modulo11ThaiTin(tin: string): boolean {
  if (!/^\d{13}$/.test(tin)) return false;
  const d = tin.split("").map(Number);
  const sum = d.slice(0, 12).reduce((acc, n, i) => acc + n * (13 - i), 0);
  const check = (11 - (sum % 11)) % 10;
  return check === d[12];
}

export function invoiceFromSubtotal(subtotalSatang: number, profile: TaxProfile) {
  const service = Math.round((subtotalSatang * SC_BPS) / 10_000);
  const vatBase = subtotalSatang + service;
  const vat = Math.round((vatBase * VAT_BPS) / 10_000);
  const gross = vatBase + vat;
  const wht = profile.whtOnServiceCharge
    ? Math.round((service * WHT_SC_BPS) / 10_000)
    : 0;
  return { subtotalSatang, service, vatBase, vat, gross, wht, netCollect: gross - wht };
}

The booking webhook should carry the tax profile with the seat, not as a later patch.

{
  "id": "evt_tax_rsv_20260821_t12",
  "type": "reservation.confirmed",
  "data": {
    "reservation_id": "rsv_bkk_20260821_1930_t12",
    "party_size": 4,
    "start_at": "2026-08-21T19:30:00+07:00",
    "tax_profile": {
      "tin": "0105566099881",
      "branch": "00000",
      "legal_name_th": "บริษัท ตัวอย่าง จำกัด",
      "wht_on_service_charge": true,
      "billing_email": "[email protected]"
    },
    "deposit": {
      "charge_id": "chrg_test_5nxyzpromptpay01",
      "amount_satang": 400000,
      "vat_treatment": "unearned_until_service"
    }
  }
}

Persist the profile once. Invoice allocation is a SQL job, not a host macro.

/* One fiscal serial per shop per financial year. Never reuse after a credit note. */
CREATE TABLE tax_invoices (
  shop_id            TEXT NOT NULL,
  serial             TEXT PRIMARY KEY,
  reservation_id     TEXT NOT NULL,
  buyer_tin          CHAR(13) NOT NULL CHECK (buyer_tin ~ '^\d{13}$'),
  buyer_branch       CHAR(5)  NOT NULL DEFAULT '00000',
  subtotal_satang    BIGINT NOT NULL,
  service_satang     BIGINT NOT NULL,
  vat_satang         BIGINT NOT NULL,
  wht_satang         BIGINT NOT NULL DEFAULT 0,
  net_collect_satang BIGINT NOT NULL,
  status             TEXT NOT NULL CHECK (status IN ('issued', 'credited')),
  issued_at          TIMESTAMPTZ NOT NULL DEFAULT now()
);

/* Apply a PromptPay deposit without double-counting VAT on the final check. */
UPDATE tax_invoices i
SET net_collect_satang = i.net_collect_satang - d.amount_satang
FROM deposits d
WHERE d.reservation_id = i.reservation_id
  AND d.vat_treatment = 'unearned_until_service'
  AND i.status = 'issued';

Issue from the booking service when the check closes, or push the profile into Wongnai POS / Ocha so the terminal prints without typing.

mutation IssueFullTaxInvoice($input: IssueTaxInvoiceInput!) {
  issueFullTaxInvoice(input: $input) {
    serial
    reservationId
    vatSatang
    whtSatang
    pdfUrl
    creditNoteOf
  }
}

If you poll the RD portal instead of trusting checksum plus a nightly batch, cap the worker. CAPTCHA pages are not a rate-limit contract. They simply lock.

6. Operational traps that keep PP.30 in spreadsheet hell

Contract and floor landmines

  • TIN at the cashier. Thirteen digits plus a Thai juristic name during a 22:00 queue is a designed error rate. Move capture to the booking form with a corporate-billing toggle.
  • English trade name on a full tax invoice. AP matches the DBD / VAT-register name. “Nami” is branding. The invoice needs the registered Thai legal name and address.
  • Wrong branch code. 00000 is head office. A branch cost center with 00003 will reject a head-office invoice even when the TIN is perfect.
  • Abbreviated slip handed to a company. Retail format cannot support input VAT. Corporate Friday rooms must default to full tax once a TIN is on the reservation.
  • WHT treated as a discount. Net collect is not the VAT base. Print gross, VAT, WHT, net. Track the 50 ทวิ as a receivable.
  • WHT on the whole check “because accounting asked.” Food is generally a sale of goods between companies. Service charge is the usual 3% line. If a guest company insists on withholding on F&B, that is a written policy exception, not a night-by-night toggle.
  • Deposit VAT twice. Decide with the accountant: unearned until service, or VAT on receipt for non-refundable holds. Code credit notes. Do not issue two output-VAT documents for one baht.
  • No-show forfeiture without a credit note / receipt pair. The original deposit document still exists. Forfeit is income. Silence is a reconciling item in September.
  • Personal PromptPay QR for corporate dinners. Mixes shop sales into a personal account. PP.30 versus bank is then unexplainable. Receive on the juristic merchant QR.
  • GM’s Excel as the invoice register. Serial gaps and reused numbers are exam findings. One allocator per shop.
  • Collecting 7% before VAT registration. Threshold is 1.8 million THB. Charging VAT without a TIN on the slip is the X complaint that becomes a 1161 report.
  • e-Tax claimed, LINE image delivered. XML + cert, or RD email-timestamp track. Anything else is a PDF the buyer may still reject.
  • POS and ledger disagree on party size. A four-top billed as six, then credited by chat, will not match the reservation_id. Party-size change must rewrite the invoice, not the memory of the host.

Digital certificates expire. OCSP lookups fail on Saturday nights if you sign XML in the critical path of checkout. Sign asynchronously after the fiscal serial is allocated, or print RD-compliant PDF at close and queue XML. Do not block the guest on a CA.

7. Pricing-plan traps and first-year TCO

Assume a Thong Lo room that issues 350 full tax invoices a month (corporate entertainment, not tourist lunch), average gross 12,000 THB, 12 re-issues from TIN or branch errors, and 16 accountant hours to rebuild PP.30 from POS tape plus LINE.

Cashier typing at 3.5 minutes per invoice is 1,225 minutes (20.4 hours). At 90 THB per hour loaded host cost that is about 1,840 THB of peak-time labor, which understates the queue cost. Re-issues at 40 minutes of accountant time each: 12 × 40 / 60 × 450 THB = 3,600 THB. Sixteen hours of month-end rebuild at 450 THB: 7,200 THB. Direct admin sits near 12,600 THB per month, 151,000 THB per year, before a single denied input-credit relationship walks away. Two lost monthly corporate rooms at 40,000 THB contribution is another 960,000 THB per year. That is the number owners feel and rarely put on the software comparison.

Annual cost item Abbreviated + Excel POS tax typing Accounting SaaS + late invoices In-house XML e-Tax Rezabo profile + POS print
Software 0 POS licence (often 1,500 to 4,000 THB/month) Seat or document fees; 2,000 to 8,000 THB/month common Engineer + CA cert (cert often several thousand THB/year) 3,500 × 12 = 42,000 THB
Host / cashier tax time Low at close, high on callbacks 20-plus hours/month at peak Low at close, high in AP email Low if master data exists Capture at booking; close is print
Re-issue labor Highest. Identity never stored 10 to 20 jobs/month typical Falls only after master data is clean Low after go-live Checksum rejects bad TINs before service
PP.30 hours 16 to 24 8 to 16 4 to 8 if imports are clean 2 to 4 once ETL is trusted Minutes for the sales listing; accountant still files
Denied-credit churn High Medium Medium until the first month’s backlog clears Low Low if branch and legal name are on the form
Year-1 TCO shape Cheap tools, expensive corporates POS fee + queue Duplicate systems (floor + books) Capex dominates 42,000 + POS licence you already pay

Three procurement mistakes repeat.

  1. Buying accounting SaaS to fix a booking-form problem. Journals will not grow a TIN that was never captured. You will pay for two systems and still type.
  2. Buying “e-Tax” as a PDF button. ETDA XML, a live cert, RD enrolment, and credit-note semantics are the product. A button that emails a scan is a cover charge for the same rejection.
  3. Per-document invoicing fees on a corporate-heavy room. 350 invoices × 12 × a few baht looks small until credit notes double the count. Flat ledger plus a POS you already run is the shape that does not punish a busy August.

Rezabo’s 1,900 THB is the reservation ledger, unlimited bookings, not the POS fee and not the PSP MDR. There is no per-cover tax-invoice surcharge on the ledger line. Against 151,000 THB of admin and a much larger churn risk, the ledger is not the decision. The decision is whether Friday’s corporate four-top leaves with a usable Section 86 document.

8. Roll out on corporate Friday-Saturday first, in three weeks

  • Week 1. Turn on the corporate-billing toggle for private rooms and parties of six or more. Required fields: 13-digit TIN, branch (default 00000), legal name in Thai, registered address, billing email. Reject on Modulo-11 failure. Put “++” math on the booking screen in Thai, English, and Japanese: service 10%, VAT 7%, WHT 3% on service if the guest company withholds.
  • Week 2. Push the tax profile into POS on seat, or issue the PDF from the close event. Stop abbreviated slips on TIN-present reservations. Wire deposit allocation so unearned cash does not print as a second VAT sale. Train hosts that they cannot override legal name to the Instagram handle.
  • Week 3. Export a dry-run PP.30 sales listing. Match invoice serials to PromptPay charge_ids and to credit notes for no-shows and party-size cuts. Start a 50 ทวิ receivable list. Only then offer e-Tax XML or RD email-timestamp to companies that demand it.

Do not start with tourist two-tops. They want a slip, not a TIN form. Blanket tax fields on every LINE booking will dump completion the same way blanket deposits do.

9. Questions owners ask before they show the TIN field

Q1. Do we withhold 3% on the guest’s food? No as a default. The guest company is the withholder. You are the seller. You record WHT they deduct, you do not deduct 3% from their dessert. Your PND.53 is for your suppliers: the photographer, the cleaning company, the Thai SaaS bill. Rezabo, as a Thai issuer, puts VAT 7% on its own tax invoice to you; your accountant then decides the 3% treatment on that service.

Q2. Must we issue e-Tax XML this year? No. E-Tax remains voluntary in 2026. Full paper or RD-compliant PDF full tax invoices still work. XML becomes worth the cert when a large account demands it, or when you want the e-WHT 1% incentive on your outbound service payments.

Q3. Head office or branch? Print the branch the buyer specifies. Default 00000. A Bangkok dinner charged to a Rayong factory code is a branch invoice, not a branding choice.

Q4. What if the TIN checksum passes and the name is still wrong? Checksum proves the number is well-formed, not that it belongs to this guest. New TINs get a back-office portal match against the VAT register before the first invoice, not during the queue.

Q5. PromptPay deposit and VAT: which date? Agree the treatment in writing. Unearned until service is the usual F&B pattern for refundable-until-cutoff deposits. Non-refundable forfeits recognize VAT when the forfeit becomes income. The reservation_id is the join key for both.

Q6. Will corporates stop booking if we ask for a TIN up front? They stop when the invoice fails in month-end. A required TIN on a private-room form is normal for hotel banqueting. Keep it off walk-in tourist tickets.

10. Metrics that prove the invoice file is actually clean

Metric Cashier-typed TIN Reservation tax profile Why it matters
Full tax invoice time at close 2 to 4 minutes typing Under 15 seconds to print / send Queue and error rate
TIN / branch re-issues per 100 corporate checks 4 to 8 0 to 1 (portal-name mismatches only) AP credit denials
PP.30 rebuild hours 12 to 24 Under 2 for the sales listing Filing clock
Deposit vs final VAT double-count Common in August 0 rows where charge_id maps twice Output VAT overstatement
50 ทวิ certificates unmatched after 45 days Untracked Open receivable list Silent 3% leakage
Corporate private-room repeat in 90 days Falls after the first rejected invoice Holds if serials and names match AP The real TCO
Corporate dining does not fail on the 7% rate. It fails when the identity needed for a full tax invoice is still being typed while the next four-top is standing at the pass.

Closing

Thai restaurant tax compliance is a data-timing problem. VAT is 7% until at least 30 September 2027. Service charge is 10% and usually the 3% WHT line when a Thai company pays. Full tax invoices need a validated 13-digit TIN, a branch code, a registered Thai name, a serial that never repeats, and a VAT amount that matches the base rather than the net drawer. PromptPay deposits and no-show forfeits must share a reservation_id with the final document or PP.30 becomes folklore.

Capture the tax profile on the booking. Validate Modulo-11 before confirm. Hand the profile to the POS you already run, or issue from the close event. Export the month. Do not buy a second accounting product to repair a TIN that never entered the ledger. Do not tell AP you are on e-Tax if you are still sending LINE photographs.

Ledger cost sits at 42,000 THB a year. Re-issue labor, PP.30 reconstruction, and two lost corporate rooms sit in a different order of magnitude. The spread is whether the Friday private room leaves with a document that survives the buyer’s AP.

To map TIN capture, service-charge WHT flags, deposit VAT treatment, and PP.30 export onto your mix of corporate rooms and tourist walk-ins, talk to the local team from the button below.

Free Download (PDF)Ver 2.6 Live

Bangkok Restaurant No-Show Prevention Checklist (15 Rules)

An operational field guide for dining venues in Thailand: sync kitchen prep strictly with dynamic PromptPay QR deposits and automated LINE reminders to eliminate food waste.

  • Strict synchronization of Friday 16:00 kitchen prep with paid bookings only
  • Dynamic QR verification replacing static slip matching and slip forgery
  • High-retention refund deadline rules and seamless tourist card routing
Download Free Checklist (Get via LINE / PDF)

Delivered instantly via LINE Official Account (Instant 3-sec access)

1-Month Free Trial Available

Restaurant Booking & CRM Made Simple & Smart.

Born from Bangkok dining floors, Rezabo enables new floor staff to allocate tables and share VIP notes in 5 seconds with zero double-booking.

Explore Rezabo Features & Pricing (Free Trial)
← Back to Knowledge Articles