travoBooks একটি ইউনিফাইড ট্রাভেল কমার্স ও অ্যাকাউন্টিং প্ল্যাটফর্ম, যা OTAs, ট্রাভেল ব্যবসা, ডেভেলপার এবং AI ট্রাভেল এজেন্টদের জন্য B2B ইনফ্রাস্ট্রাকচার প্রদান করে। এটি বুকিং অপারেশন এবং দ্বৈত-এন্ট্রি অ্যাকাউন্টিং একই প্ল্যাটফর্মে একত্রিত করে—প্রতিটি ব্যবসায়িক লেনদেন (টিকেট ইস্যু, রিফান্ড, কমিশন আদায়) স্বয়ংক্রিয়ভাবে একটি ব্যালেন্সড জার্নাল এন্ট্রি তৈরি করে।
মূল লক্ষ্য: ট্রাভেল এজেন্সিগুলোকে আলাদা অপারেশনস সিস্টেম এবং আলাদা অ্যাকাউন্টিং সফটওয়্যার মেলানোর কাজ থেকে মুক্তি দেওয়া।
Chapter 0.1 — Platform Overview
chapter: 00-introduction/01-platform-overview
version: 1.0.0
status: stable
last_reviewed: 2026-05-26
owners: [platform-engineering, product]
1. Purpose
This chapter explains what travoBooks is, who it is for, and what problem it solves. It is intentionally non-technical in the first two sections and progressively becomes more technical. Read this first if you are new to the platform.
2. The problem travoBooks solves
Travel businesses today operate against four disconnected systems:
- A GDS or supplier aggregator (Amadeus, Sabre, Travelport, or a NDC/direct-connect mix) for shopping and booking.
- A mid-office for queue management, fulfilment, and ticketing oversight.
- An accounting system (Tally, QuickBooks, Xero, SAP, Sage) for ledgers, payables and receivables.
- A partner / commission billing system, usually a spreadsheet.
These systems do not share a transactional definition. A booking exists in the GDS. A fare bucket exists in the mid-office. An invoice exists in the accounting system. A commission share exists in the spreadsheet. They are reconciled by humans, monthly, with predictable consequences:
- Revenue leaks. Commission on ancillaries and reissues is forgotten because nothing in the accounting system knew the reissue happened.
- Refund timing drift. A refund is processed in the GDS today but posted to the ledger weeks later, distorting the period.
- Currency restatement is manual. Multi-currency books are restated by exporting CSVs and re-keying them.
- ADM exposure. Airline debit memos arrive after settlement and nobody has the original booking context to dispute them.
- Audit cost. Auditors need to trace a payment back to an invoice back to a booking back to a ticket — across four systems with four different identifiers.
travoBooks collapses these four systems into one by treating every operational event as a financial event from the first moment. There is no nightly sync from operations to accounting because they share the same database and the same transaction.
3. Who travoBooks is for
| Segment | Primary use |
|---|---|
| B2B travel agencies & consolidators | IATA BSP settlements, supplier payables, agent receivables, commission distribution. |
| OTAs | Multi-supplier inventory + integrated accounting under one chart of accounts. |
| Travel-tech developers | API-first commerce backbone for flight/hotel/ancillary search and book. |
| Corporate travel managers | Policy enforcement, departmental cost allocation, post-trip reconciliation. |
| AI travel agents | A structured transactional layer beneath conversational shopping. |
| Franchise / multi-brand groups | Multi-partner architecture with consolidated reporting at the group level. |
4. The architectural pillars (and why they are non-negotiable)
4.1 Double-entry by default
Every operational event that has a financial consequence generates a balanced journal entry inside the same database transaction as the operational change. This is the single most important architectural decision in the system.
Consequence: You cannot create a booking that is not in the ledger. You cannot refund a ticket without a reversing entry. The "ops vs. finance" reconciliation that defines most travel back-offices does not exist as a job because it cannot drift.
4.2 Multi-tenant by partition
A single application instance serves many partner tenants. Isolation is enforced by partner_id on every domain row, with three reinforcing layers:
- Application layer: every query is built through a partner-scoped repository that injects the active
partner_id. - Database layer: every domain table has
partner_id NOT NULLwith an index and a foreign key topartners. - Connection layer: session variables (
@partner_id) gate row-level checks for sensitive tables.
See 01-foundations/01-multi-tenancy.md for the full mechanism.
4.3 Multi-currency at the line level
Every monetary value is stored as {amount, currency_code}. There is no "default currency" at the column level. The platform distinguishes three currencies on every transaction:
| Currency | Role |
|---|---|
| Transaction currency | The currency in which the original event happened (e.g. ticket sold in USD). |
| Functional currency | The currency the partner reports financials in (e.g. BDT for a Bangladesh-based agency). |
| Reporting currency | The currency a consumer of a report wants to see (e.g. USD for a group consolidation). |
The exchange rate used to convert transaction → functional is captured at the moment of posting and stored on the ledger row. Historical restatement is therefore deterministic. See 05-accounting/06-multi-currency.md.
4.4 Auditable by construction
The system distinguishes mutable operational state (e.g. a booking's status moves from quoted → confirmed → ticketed) from immutable financial state (a journal entry once posted is never altered).
- Operational tables carry
updated_atand a paired*_historytable. - Financial tables are append-only. Corrections happen via reversing journal entries.
- Every state-changing API call writes a row to
audit_logskeyed byactor_id,partner_id,entity_type,entity_id,before,after.
4.5 API-first
The UI is the first consumer of the public API, not a privileged one. This guarantees that any capability available to a human is also available to a system integrator.
5. What the platform does, in modules
The platform is internally organised as fourteen functional modules grouped into five layers. The full module map:
Each module is documented in its own chapter; see the Table of Contents.
6. Operating model in one paragraph
A partner is provisioned (Module 1). Users are created and assigned roles (Module 2). Master data is populated — customers, suppliers, chart of accounts, currencies, tax profiles (Modules 3–7). A booking is created against a supplier (Module 8) and is ticketed (Module 9), at which point the platform writes balanced journal entries (Module 12), creates a customer invoice (Module 13), records a supplier payable (Module 14), and accrues commission (Module 17) — all inside one database transaction. The customer pays (Module 15), the supplier is settled via BSP (Module 14 → 15), revenue is recognised at service date (Module 16), tax is computed at appropriate trigger points (Module 18). Throughout, audit logs (Module 20) are written and notifications (Module 19) are fired. The partner is billed for platform usage (Module 23). At month-end, financial reports are produced (Module 22) and the period is closed.
7. What travoBooks is not
To set expectations:
- Not a GDS. travoBooks integrates with GDSs; it does not replace them.
- Not a CRM. Customer master data lives here, but lead management, marketing automation, and customer-success tracking are out of scope.
- Not a corporate expense tool. travoBooks books and accounts for travel; it does not handle out-of-trip expense reimbursement.
- Not a tax filing engine. travoBooks computes and records tax; statutory filing remains with the partner's tax adviser.
8. Glossary spotlight (terms used heavily in this overview)
| Term | Definition |
|---|---|
| Partner | A tenant — the legal entity whose data is isolated. |
| Functional currency | The currency in which a partner produces its statutory financial statements. |
| BSP | IATA's Billing and Settlement Plan — the mechanism by which airlines settle with agencies. |
| PNR | Passenger Name Record — the supplier-side booking reference. |
| ADM | Agency Debit Memo — a post-issuance charge from an airline to an agency. |
Full glossary: 03-glossary.md.
Next: 02-system-architecture.md — how the moving parts physically fit together.