Skip to content
SStaySynq
All posts
Hospitality Tech

Why Global Tax is the Hardest PMS Problem

GST, VAT, US sales tax, e-invoicing in Italy and Mexico. A look at the tax engine behind StaySynq folios.

TV
Tomás Vega · VP Sales
April 9, 2026 4 min read

Talk to any PMS engineering team about their hardest sub-system, and they'll say the same thing: tax. It looks like a percentage. It is not a percentage.

Five problems disguised as one

  • India GST: slab-based, with state-level CGST/SGST splits and reverse-charge edge cases
  • EU VAT: TOMS for tour operators, OSS for cross-border, reduced rates per country per service
  • US sales tax: county-level, with occupancy taxes layered on top, no central registry
  • UK: HMRC-compliant invoicing with mandatory line-item VAT breakdown
  • Italy and Mexico: real-time e-invoicing to a government endpoint, with cryptographic signing

What makes this list hard is not that there are five regimes. It is that they disagree about what a tax even is, structurally. India's GST splits a single rate into components that go to different authorities and depend on whether the guest's state matches the property's. US occupancy taxes stack on top of sales tax at a jurisdiction boundary that may not follow any administrative line you can look up. Italy's requirement is not a calculation at all — it is a real-time transmission with a signature, where the invoice is not valid until a government endpoint has acknowledged it.

A system designed around any one of these will encode assumptions that make the others impossible. Build for a single percentage and you cannot express India's split. Build for calculation only and you have nowhere to put Mexico's acknowledgement receipt. The architecture has to be general before it is correct anywhere.

Why a rule engine, not a flag

Most PMSes treat tax as a flag on a rate plan. That works in one country. It breaks the moment you operate across borders or sell packages with mixed components — a room is taxed one way, breakfast another, a spa treatment a third.

The package case is the one that exposes the flag approach fastest. A guest buys one product at one price. The tax authority sees three products at three rates. Somewhere between those two views, the system has to decompose the package price into components, apply a different rule to each, and reassemble an invoice that both totals to what the guest agreed to pay and breaks down the way the auditor expects. A flag on the rate plan has no vocabulary for any part of that.

Tax is not a rate. It's a function of jurisdiction, service, guest type, and date.

StaySynq's tax engine evaluates each folio line against a rule graph: jurisdiction, service category, guest residency, booking date, applicable exemptions. The result is an invoice that holds up to local audit and a paper trail your finance team will thank you for.

The date is the hard part

Of those inputs, the one that causes the most damage when it is handled badly is the date — because tax rules change, and a hotel's transactions span time in a way that most retail transactions do not.

Consider a booking made in March, for a stay in July, invoiced in July, amended in August after a rate change is applied retroactively, and refunded in part in September. If the applicable rate changed on the first of July, which rule governs each of those events? The answer varies by jurisdiction, and the only thing that is universally true is that a system storing a single current rate cannot answer the question at all.

This is why the engine has to be as-of dated rather than current-state. Every rule carries a validity period, every computation records which rule version it used, and a recomputation months later resolves against the rule that applied at the relevant moment rather than the rule in force today. Without that, your first retroactive rate change silently rewrites the tax on every historical invoice it touches, and the discrepancy is not discovered until an audit.

The corollary is that tax computations must be stored, not derived on demand. An invoice is a statement about what was true when it was issued. If your system recalculates the tax line every time someone opens the folio, you do not have an invoice — you have a rendering, and it will disagree with the copy the guest is holding.

What to ask a vendor

If you operate in more than one jurisdiction, or expect to, these are the questions that separate a real tax engine from a rate field with ambitions. None of them are unfair, and all of them have short answers if the architecture is sound.

  1. Can a single folio line carry more than one tax component, reported separately?
  2. How does the system decompose a package price across components with different rates?
  3. When a rate changes on a given date, what happens to an invoice issued before it and amended after it?
  4. Is the computed tax stored with the invoice, or recalculated on read?
  5. For e-invoicing jurisdictions, where is the government acknowledgement stored, and what happens to a stay when the endpoint is unreachable at the moment of checkout?

That last question is worth asking even if you have no plans to operate in Italy or Mexico, because the answer tells you how the vendor thinks about failure. A system that treats an unreachable government endpoint as a blocking error will stop your front desk from checking anyone out. One that queues, retries, and reconciles has thought about running a hotel rather than passing a compliance checklist.

Tax will never be the feature that sells a PMS. It is, reliably, the feature that ends a deployment eighteen months in, when a property expands across a border and discovers that the invoice it has been issuing all along cannot legally be issued there. Ask the questions early, when the answers are cheap.

Early access open · onboarding partners weekly

Ready to unify your operations?

Book a 30-minute demo. We'll walk through your specific property type, room count, and channel mix, then show you exactly what your data looks like on StaySynq.

Early access · founder-led onboarding · launch pricing locked through year one

Onboarding timeline
Days, not months
Charter pricing
Held through your first year
Founder-led support
Direct Slack access