In this volume · VOLUME 05
Accounting
Chart of Accounts Journals & Ledger Billing & Invoicing Payments & Receipts Payment Reconciliation Multi-Currency Deferred Revenue Commission Accounting Tax (VAT/GST) Period Close

Chapter 5.9 — Tax, VAT & GST

1. Purpose

This chapter defines how travoBooks models, computes, captures, and reports indirect taxes (VAT, GST, sales tax, service tax, hotel tax, departure tax, carrier-imposed surcharges) and direct withholding taxes. It distinguishes between pass-through taxes (collected from customer on behalf of an authority and remitted unchanged), agent-taxable supply (tax on the partner's own service fee / commission), and principal-taxable supply (full VAT on principal sales).

2. Why it matters in modern travel accounting

Tax in travel is among the most jurisdiction-specific areas of accounting: - A USD 600 air ticket from Dhaka to Dubai includes BD departure tax, UAE arrival tax, YQ/YR carrier surcharges, and a 15% Bangladesh VAT on the service fee — all in a single transaction. - Hotel bookings carry local lodging taxes, sometimes night-rate, sometimes percentage. - Cross-border services trigger reverse-charge VAT in many EU jurisdictions. - Tour packages bundle taxable + non-taxable elements; allocation matters.

Mis-handling tax produces: - Customer disputes (invoice doesn't show what tax authority requires) - Tax authority penalties (under-collection / late filing) - VAT recoverability loss (input VAT not properly captured)

3. Industry relevance

The platform supports tax configurations per partner per jurisdiction, with rule precedence: - Carrier-imposed (YQ, YR) — pass-through, not VAT - Government departure / arrival taxes — pass-through - VAT/GST on partner's service fee — agent-taxable supply - VAT on principal sales (own tours) — full VAT on gross - Withholding tax — on commission to non-resident suppliers, deducted at payout

4. Compliance considerations

  • Local VAT/GST regulations (Bangladesh VAT Act 2012, India GST Act, EU VAT Directive 2006/112/EC, UK VAT, Singapore GST, etc.) — partner-specific configuration.
  • IATA fare construction rules — taxes encoded as XT line codes; must preserve in ticket data.
  • Reverse charge / TOMS (Tour Operators Margin Scheme in EU) — special VAT regime for tour operators where applicable.
  • Tax invoice format requirements — buyer/seller tax IDs, invoice numbering, prescribed wording per jurisdiction.

5. Business logic

5.1 Tax taxonomy

Type Code Pass-through? Booked to
Carrier-imposed surcharge (YQ, YR) CARRIER_SURCHARGE Yes 2011 BSP Payable
Government departure tax GOV_DEPARTURE_TAX Yes 2011 BSP Payable / direct gov payable
Government arrival tax GOV_ARRIVAL_TAX Yes 2011 BSP Payable / direct gov payable
VAT on service fee (agent supply) VAT_SERVICE_FEE No (output tax) 2061 VAT Output Payable
VAT on commission (agent supply) VAT_COMMISSION No (output tax) 2061 VAT Output Payable
VAT on principal sale (full gross) VAT_PRINCIPAL No (output tax) 2061 VAT Output Payable
Input VAT (suppliers, expenses) VAT_INPUT No (input tax) 1161 VAT Input Receivable
Local hotel tax HOTEL_LEVY Variable — pass-through if customer-paid at property 2069 Local Tax Payable
Withholding tax on supplier payment WHT_SUPPLIER No (we owe to gov) 2071 WHT Payable
TOMS margin (EU) TOMS_VAT No (specialised) 2065 TOMS Output VAT

5.2 Tax rules table

tax_rules table defines per-partner, per-jurisdiction, per-tax-type:

Field Notes
tax_rule_id PK
partner_id Tenant
tax_code e.g., BD_VAT_15
tax_type From taxonomy
jurisdiction_code ISO-3166
applies_to service_fee, commission, gross, markup, cancellation_fee
rate_percent DECIMAL(8,4)
flat_amount DECIMAL(18,2) NULL
is_inclusive If TRUE, rate is included in quoted price
valid_from, valid_to Effective period
posting_account_code Override default mapping
customer_type_filter NULL or specific types
product_type_filter NULL or specific products
priority Tie-break for overlap

Rules are evaluated at booking pricing and at invoice generation.

5.3 Tax invoice composition

A customer invoice (Chapter 5.3) shows tax lines per jurisdictional requirement. Example BDT invoice with BD VAT 15% on service fee:

Line Description Amount BDT
1 Air ticket EK DAC-DXB (pass-through) 65,400
2 Service Fee 1,000
3 VAT 15% on Service Fee 150
Total 66,550

JE at issuance + invoice:

Debit  1101 AR — Beta Corp                  66,550
Credit 2011 BSP Payable (or via above)       (pass-through)
Credit 4031 Service Fee Revenue              1,000
Credit 2061 VAT Output Payable               150

5.4 Input VAT capture

When the partner pays a supplier whose invoice includes VAT (e.g., a travoBooks vendor charging local VAT), the input VAT is captured separately:

Debit  5022 Operating Expense                X
Debit  1161 VAT Input Receivable             X * rate
Credit 1001/1013 Bank / 2001 AP              X * (1 + rate)

At VAT-return time, input VAT offsets output VAT; net payable to authority.

5.5 VAT return cycle

Per partner, per jurisdiction, on a configurable schedule (monthly, quarterly):

  1. Open VAT-return period.
  2. Sum 2061 VAT Output Payable for transactions in period.
  3. Sum 1161 VAT Input Receivable for transactions in period.
  4. Net = output − input → liability (or refund-eligible).
  5. Generate VAT return file in jurisdiction-required format.
  6. Operator files with authority; logs filing reference.
  7. On payment to authority:
Debit  2061 VAT Output Payable               Σ
Credit 1161 VAT Input Receivable             Σ
Credit 1013 Bank                             Net
(Or debit Bank if refund)
  1. Period locked.

5.6 TOMS (EU Tour Operators)

For EU partners operating under TOMS, instead of standard VAT on the full sale price: - VAT is calculated only on the margin (gross sale − direct costs of bought-in services). - Input VAT on bought-in services is not recoverable (recovered indirectly through margin reduction). - Configured via partner.toms_enabled = TRUE.

The platform isolates TOMS bookings; the JE pattern differs from standard:

Debit  AR Customer                           gross
Credit Revenue (margin portion)              margin
Credit 2065 TOMS Output VAT                  margin * rate
Credit AP Supplier                           bought-in cost

5.7 Withholding tax on supplier payment

For payouts to non-resident suppliers in jurisdictions with WHT: - Partner deducts WHT at statutory rate. - Records liability to local tax authority. - Supplier receives net of WHT. - Periodic remittance to authority.

Debit  AP — Foreign Supplier                 X (gross)
Credit Bank                                  X - WHT
Credit 2071 WHT Payable                      WHT

5.8 Tax on refunds

Refunds reverse the tax components proportionally: - Pass-through taxes refunded if supplier refunds them. - Output VAT on service fee reversed only if service fee was refunded (typically retained → VAT retained). - Tax-invoice reversal generates a tax credit note with jurisdictional disclosure.

6. Inputs → processing → outputs

Compute tax at booking pricing

Input: {partner_id, customer_id, product_type, service_fee, commission, gross, supplier_jurisdiction, customer_jurisdiction, ...}

Processing: 1. Resolve applicable tax_rules for (partner, jurisdictions, applies_to, valid). 2. For each rule, compute tax amount (rate * base or flat). 3. Aggregate by tax_code. 4. Return tax breakdown for booking + invoice.

Output: Array of {tax_code, base_amount, rate, tax_amount, posting_account}.

Generate VAT return

Input: {partner_id, jurisdiction, period_start, period_end}

Processing: 1. Sum output VAT by tax_code for period. 2. Sum input VAT by tax_code for period. 3. Compute net. 4. Generate return file in jurisdiction format (XBRL, CSV, XML). 5. Save to documents.

Output: Return file + summary.

7. Module dependencies

Direction Module
Depends on Customer, Supplier, Booking, JE Engine, Partner Config
Depended on by Invoicing, Refunds, Reporting, Period-Close

8. Security & permissions

Permission Allows
tax.rules.read.partner View tax rules
tax.rules.update.partner Edit rules (maker-checker required)
tax.return.generate.partner Generate return
tax.return.file.partner Mark as filed
tax.payment.record.partner Record payment to authority

Tax rule changes are sensitive; every change is fully audited with before/after diff.

9. Validation rules

Code Condition
TAX_RULE_OVERLAP Two rules of same priority match
TAX_RATE_INVALID Rate < 0 or > 100%
TAX_JURISDICTION_NOT_SUPPORTED Jurisdiction not configured for partner
TAX_CALCULATION_INCONSISTENT Sum of components ≠ stated total in supplier file
TAX_RETURN_PERIOD_OVERLAP Period already filed
TAX_INVOICE_FORMAT_INVALID Generated invoice doesn't meet jurisdiction format
TAX_RECLAIM_INPUT_MISSING_RECEIPT Input VAT claim without supporting receipt document

10. Error handling

Tax rule evaluation errors are surfaced at booking time, not at invoice time, to avoid customer-facing discrepancies. If no applicable rule is found for a required tax (e.g., service-fee VAT in a jurisdiction where it's mandatory), booking is blocked with TAX_RULE_MISSING.

11. Real-world examples

A — Bangladesh: VAT on service fee only

Partner in BD; agent-model EK ticket; BD VAT 15% on service fee. - Service fee BDT 1,000. - VAT = 150. - Customer pays 1,150 service-fee-side + 65,400 pass-through ticket. - Output VAT booked.

B — UAE: Zero-rated international transport

Partner in UAE; UAE VAT 5% generally, but international transport is zero-rated. - Ticket itself: zero-rated VAT — no output tax. - Service fee for domestic-route booking by UAE-resident customer: 5% VAT. - Service fee for international-route booking: zero-rated.

C — India: GST on commission + IGST cross-border

Partner in India; commission revenue is taxable supply at 18% GST. - Commission accrued BDT 5,000 → output GST 900. - If supplier is foreign (cross-border): IGST applies under reverse charge depending on classification.

D — Hotel tax pay-at-property

Customer pays USD 200 + USD 25 local hotel tax at the property. travoBooks invoices customer for USD 200 only (commission-only model); USD 25 not on travoBooks' books — passes between customer and hotel directly. The hotel tax is shown in the voucher as an informational line.

12. Step-by-step workflow

flowchart TD A[Booking Pricing] --> B[Resolve Tax Rules] B --> C[Compute Tax Lines] C --> D[Show in Quote] D --> E[Issuance JE Includes Tax Lines] E --> F[Invoice Generated → Tax Invoice with Statutory Format] F --> G[Period Accumulates Output + Input VAT] G --> H{Period End?} H -->|No| F H -->|Yes| I[Generate VAT Return] I --> J[Operator Files with Authority] J --> K[Pay Net VAT or Receive Refund] K --> L[JE: Clear Output/Input Buckets] L --> M[Period Locked]

13. Database tables touched

Table Role
tax_rules Configuration
tax_rule_history Audit of rate changes
booking_tax_lines Per-booking tax breakdown
invoice_tax_lines Per-invoice tax breakdown
tax_returns Period-level returns
tax_return_payments Payments to authorities
journal_entries / _lines Postings

14. Future scalability

  • Jurisdiction packs — pre-configured tax rule sets for new markets, vetted by tax counsel.
  • Auto-filing integration — direct submission to authority portals (HMRC MTD, GST India, etc.).
  • Tax engine partner integration — Vertex/Avalara for global VAT complexity.
  • OSS/IOSS support for EU partners selling to consumers cross-border.

15. Common pitfalls

  • ⚠️ Mixing pass-through tax with output VAT. They live in different accounts; conflating them causes VAT-return errors.
  • ⚠️ Stale tax rates. Rates change annually in many jurisdictions; always have valid_to and review cycle.
  • ⚠️ Missing tax invoice fields. Buyer tax ID, seller tax ID, and "Tax Invoice" wording are statutory in most jurisdictions.
  • ⚠️ Recovering input VAT without receipts. Audit rejection guaranteed; require document attachment.
  • 🔒 Tax rate changes are sensitive — maker-checker is non-negotiable.
  • ⚠️ TOMS partners must not mix with standard VAT bookings in the same return. Use separate VAT registration paths.