Skip to content

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.