কর প্রকার: CARRIER_SURCHARGE, GOV_DEPARTURE_TAX, VAT_SERVICE_FEE, VAT_PRINCIPAL, HOTEL_LEVY, WHT_SUPPLIER, TOMS_VAT। অ্যাকাউন্ট: 2061 VAT Output, 1161 VAT Input। মাসিক/ত্রৈমাসিক VAT রিটার্ন স্বয়ংক্রিয়।
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):
- Open VAT-return period.
- Sum
2061 VAT Output Payablefor transactions in period. - Sum
1161 VAT Input Receivablefor transactions in period. - Net = output − input → liability (or refund-eligible).
- Generate VAT return file in jurisdiction-required format.
- Operator files with authority; logs filing reference.
- On payment to authority:
Debit 2061 VAT Output Payable Σ
Credit 1161 VAT Input Receivable Σ
Credit 1013 Bank Net
(Or debit Bank if refund)
- 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
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_toand 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.