10 · Cancellation chain — customer → seat → airline → ledger
What must happen, in order, when a customer who already holds flight seats, tickets or a visa is cancelled. This file ties together LC-020 (cancellation flow), PAX-031 (refund by own price), INV-010 (allocation states), AIR §16–§20 (release and airline cancellation) and FIN-030 (posting rules).
Findings that triggered this file (2026-09-17)
- Cancelling a passenger returns the seat to the block/FIT count, but nothing records which passenger released it, and the block manifest drops them.
- The airline cancellation form takes only a seat count — it cannot be tied to passengers, tickets or PNRs.
- Seats cancelled with the airline stay sellable in the system.
- For groups priced from a rate sheet, cancelling a passenger posts nothing to the customer ledger and the group invoice keeps billing them.
- Tickets stay "Issued" after cancellation; visa cases and fees are untouched.
- FIT inventory has no airline cancellation or refund process.
- An airline refund kept as credit against our payable cannot be recorded.
- Group P&L still charges airline cost for cancelled passengers and never shows the penalty.
The chain at a glance
1 CUSTOMER CANCELS 2 SEAT RELEASED 3 CANCELLED WITH AIRLINE 4 AIRLINE SETTLES
Cancellation approved ──► Seat returns to its block/FIT ──► Ops picks released seats ──► Refund by bank, or credit
Customer refund/charge "Released — not yet filed" actual refund + penalty against our payable
Ticket → cancel pending tagged with passenger, booking, Seats leave sellable stock Shortfall → penalty expense
Visa case closed ticket, PNR Ticket → refund pending Ticket → refunded
Invoice credit note Ledger: receivable + penalty
− stock
Alternative at step 2: the released seat is re-used for another passenger (no airline cancellation needed) — CXL-021.
Step 1 · Customer cancellation
CXL-001 · One approved action cancels everything the passenger holds
Status: PROPOSED · Owner: Operations When a passenger cancellation is approved, in one all-or-nothing step: the passenger is marked cancelled; every flight seat, hotel room, meal and transport allocation is released (CXL-010); their ticket moves per CXL-040; their visa case is closed per CXL-050; the customer-side finance entries are posted per CXL-002; group capacity is updated. If any part fails, nothing changes.
CXL-002 · Customer-side entries for every pricing model
Status: PROPOSED · Owner: Finance The refund is that passenger's own price minus the cancellation charge (PAX-031, PRC-020). Entries are posted whether the booking is individually priced or priced from a group rate sheet: - the passenger's sale is reversed except the retained cancellation charge (revenue and GST adjusted; customer balance credited); - if the passenger is on an issued group invoice, a credit note for that passenger is issued against it (FIN-012) and the invoice stops counting them.
Enforced by (P0, 20260922110200; supabase/tests/posting_failures.sql): an individually priced booking had neither half on the operational side — cancelling a pilgrim left the invoice and the receivable untouched, still billing ₹2,08,500. Booking."totalAmount" is deliberately never reduced (it records what was sold), and Booking."balanceAmount" is computed by the database precisely so the browser cannot set it — so the correction is in the database too: fin_booking_paid_guard now subtracts fin_booking_cancellation_credit(), the refund side of every approved passenger cancellation, and a trigger on BookingPassenger refreshes it the moment the cancellation is stamped. ensureBookingInvoice carries the same figure onto the booking's Invoice row, leaving the issued amountDue untouched (FIN-012) and moving only what is still owed. A cancellation still awaiting approval changes nothing (ACC-020).
Where the reversal voucher or the credit note cannot be posted, the cancellation still stands — the release has already committed — and the missing entry is recorded as an open PostingFailure for finance to post (FIN-030). It is never dropped.
CXL-003 · Refund payout is separate
Status: DECIDED (existing) · Owner: Finance Paying the refund to the customer is a separate, recorded payment against a bank/cash account, and can never exceed what the customer paid net of earlier refunds (PRC-030).
Step 2 · Seat release
CXL-010 · Every released seat is recorded
Status: PROPOSED · Owner: Ticketing Releasing a passenger's flight seat records: passenger, booking, group, source (airline block or FIT), flight/leg, PNR, ticket number, released at, released by, and reason. The seat's airline status becomes Released — pending airline action.
CXL-011 · Seat returns to where it came from
Status: DECIDED (owner, 2026-09-17) · Owner: Ticketing A released seat returns to the exact airline block or FIT record it was allocated from and becomes available again.
CXL-012 · Released-seat register
Status: PROPOSED · Owner: Ticketing Each block and FIT record shows a Released seats list: every seat released by a cancellation, which passenger released it, and its airline status (pending action / re-used / filed with airline / refunded). A block or FIT cannot be closed while any released seat is still pending action.
Step 3 · Cancellation with the airline
CXL-020 · File against specific seats
Status: PROPOSED · Owner: Ticketing Ops records an airline cancellation by selecting the released seats it covers (not by typing a number). For each seat: expected refund and airline penalty. FOC / free release is a per-filing option. Unallocated block seats can also be released (AIR §16) and are recorded as block seats without a passenger.
CXL-021 · A re-used seat is not filed
Status: PROPOSED · Owner: Ticketing If a released seat is allocated to another passenger before it is filed with the airline, its status becomes Re-used and it drops off the pending list. A seat already filed with the airline cannot be re-used unless the airline confirms reinstatement (AIR §32 rule 4).
CXL-022 · Filed seats leave sellable stock
Status: PROPOSED · Owner: Ticketing Once a cancellation is filed with the airline, those seats are removed from available inventory immediately — they can no longer be sold or allocated. Rejecting the filing puts them back.
CXL-023 · Filing entries (supplier side)
Status: PROPOSED · Owner: Finance Filing posts, per filing, tagged with the block/FIT, PNR and passenger names:
| Debit | Credit | |
|---|---|---|
| Paid cancellation | Airline Refund Receivable (expected refund) · Cancellation Charges expense (penalty) | Stock-in-Hand — Air (seat cost) |
| Free / FOC release | Airline Refund Receivable (full seat cost) | Stock-in-Hand — Air |
Input GST on the cancelled seats is reversed where GST was claimed on purchase.
CXL-024 · The same process for FIT
Status: PROPOSED · Owner: Ticketing FIT inventory uses the identical filing, approval and ledger process. Editing seat numbers or prices by hand is not a cancellation.
Step 4 · Airline settlement
CXL-030 · Two ways the airline can settle
Status: PROPOSED · Owner: Finance
| Settlement | Debit | Credit |
|---|---|---|
| Refund to our bank | Bank (actual refund) | Airline Refund Receivable |
| Credit against what we owe the supplier | Supplier Payable (actual refund) | Airline Refund Receivable |
| Refund less than expected | Cancellation Charges expense (shortfall) | Airline Refund Receivable |
| Refund more than expected | Airline Refund Receivable | Cancellation Charges expense (excess) |
The actual refund and actual penalty are stored against each seat in the filing.
CXL-031 · Maker-checker
Status: PROPOSED · Owner: Finance Filing is done by ticketing; approval of the settlement is done by a finance user with airline-cancellation approval permission who is not the person who filed it (ACC-020).
Tickets and visa
CXL-040 · Ticket status follows the seat
Status: PROPOSED · Owner: Ticketing | Passenger cancelled when ticket is… | Ticket becomes | Then | |---|---|---| | Not yet issued | Void | — | | Issued | Cancellation pending | Filed with airline → Refund pending → settled → Refunded. Seat re-used → Void. |
CXL-050 · Visa on cancellation
Status: PROPOSED · Owner: Visa The passenger's visa case is marked Cancelled (kept with its documents and history). If the visa fee was already paid to the embassy/supplier it is non-refundable by default (PRC-023, VISA-050); the customer credit note (CXL-002) follows the cancellation policy.
Visibility
CXL-060 · Show who was cancelled, everywhere it matters
Status: PROPOSED · Owner: Operations Cancelled passengers stay visible — struck through with date, reason and approver — on: the booking, the group passenger list, the block/FIT released-seat register, the airline cancellation record, the ticket, and the visa case. Manifests sent to the airline exclude them.
CXL-061 · Reports use active passengers and real penalties
Status: PROPOSED · Owner: Finance Group P&L and inventory P&L cost only seats used by active passengers, and include actual airline penalties charged against that group's seats. The cancellation report lists each cancelled passenger with customer charge, customer refund, airline penalty and airline refund.