Skip to content

Flights

The Flights navigation group in Arkana covers everything to do with air travel: the cached fares that price offers, the routes that keep that cache warm, the actual flight bookings and their ticketing lifecycle, an observability log, and the settings that steer automated search and repricing.

Item Manages
Flights (Aerticket) Live Aerticket flight-search console (read-only)
Flight Bookings Air bookings and their ticketing lifecycle
Flights Logs Observability timeline for Aerticket bookings (nested under Flight Bookings)
Flight Cache Routes Configured routes the populator searches to fill the cache
Dynamic Flights Cache Cached fare snapshots that price offers
Re-Pricing Ticketing repricing tolerance settings (admin)
Search Filters Filters applied to automated cache searches (admin)

The Flights (Aerticket) item is a live search console — a Livewire page that queries Aerticket directly (one-way, round-trip or multi-city, up to 9 passengers) and lets an operator book a fare from the results. It is not database-backed; results are held for the session only.

Dynamic Flights Cache holds the fare snapshots that offers are priced from. Each entry belongs to a cache route, has per-leg segments, and can be bound to offers.

Cached prices are reference totals for a party of 2 adults, not per-person amounts — the populator always searches with DEFAULT_PAX_COUNT = 2, so base_price, tax and total_price are 2-adult totals (baggage upsell is quoted per passenger). Downstream consumers derive the per-person fare by dividing by the reference party size, then multiply by the actual party size — never by dividing a cached total by the real passenger count. The exact rule and consumer list are in Dynamic Flight Cache.

Cache entries carry a status (pending, searching, completed, failed, expired, timed out) and an expiry. The table is a rich operator comparison view — route, stops, arrival compliance, price, baggage, fare position — grouped by route. Bulk actions execute searches (re-caching completed entries) and delete unbound caches (keeping any entry bound to an offer, since those act as pricing history). A stats widget shows totals and the Look-to-Book ratio; see Look-to-Book (L2B) Tracking.

Flight Cache Routes are the configured origin/destination chains (with trip duration and domestic/multi-city flags) that the populator repeatedly searches to keep the cache warm.

A route is Active, Auto-Invalidated, or Inactive. Auto-invalidation is automatic and threshold-based: after a configured number of consecutive empty searches the route stops receiving search jobs. The per-record Reactivate action clears the invalidation and resumes searches; a View Caches action deep-links to that route’s cache entries. (There is no bulk-invalidate control in Arkana — invalidation happens in the background, and Reactivate is the manual reversal.) Route health and cache statistics are shown on the view page. See Dynamic Flight Cache.

Flight Bookings manages air bookings, whether created from the Aerticket API, from checkout, or entered manually. Each booking tracks a ticket status: pending, not_issued, pending_reprice_approval, ticketing, issued, voided or failed.

The ticketing lifecycle is driven by table/row actions that dispatch queued Aerticket jobs:

  • Issue Ticket / Fastlane Ticketing — promote a booking toward issued (fastlane requires at least 5 minutes since booking creation).
  • Approve Repricing / Reject Repricing — shown only at pending_reprice_approval, when a fare changed between booking and ticketing; approving continues issuance at the new price, rejecting resets to not_issued.
  • Retrieve Booking — pulls the latest PNR/segment status from Aerticket.
  • Cancel Booking / Void — with loud warnings when a ticket is already issued.
  • View Available Ancillaries — book baggage/meal ancillaries (only before issuance).

The ticketing → issued promotion itself happens asynchronously in the queued jobs, gated by FlightBooking::canIssueTicket(). Rebooking is only offered for bookings with an issued ticket. See AerTicket Integration for the API flows and Flight Search UI for the search interface.

Flights Logs is a read-only observability view over Aerticket-sourced flight bookings (manual bookings are excluded — they have no PNR/ticket lifecycle). It reuses the same model and permission as Flight Bookings and is nested under it in the navigation.

Each log exposes the PNR, a deep link to the parent booking, route, ticket/PNR/retrieve statuses, pricing (including any reprice difference and the Aerticket flow id to quote to Aerticket support), and an activity timeline that merges the audit log, retrieve history and a synthetic reprice event. The same audit data is shipped to Loki for centralized log search.

Both settings pages are admin-only.

Re-Pricing sets the tolerance (minimum and maximum EUR) for fare changes detected when issuing tickets for bookings created on a previous day. Within tolerance, the new price is auto-accepted; outside it, the booking enters pending_reprice_approval for manual approval.

Search Filters configures the filters sent to Aerticket for automated cache searches only (not manual admin searches or route validation): baggage policy, direct-flights-only, max stops, excluded airlines, cabin classes, airline alliances, fare sources, closed user groups, and a latest-arrival-time flag. The page also documents (read-only) the code-level ranking policy used to prune and sort results.

BookFlight is a manual flight-booking page reached only via URL — it is hidden from the navigation (shouldRegisterNavigation = false) and launched from the “Book Flight” action on the search console’s results. It loads the selected fare from a per-user session, lets the operator pick or create passengers (validating the exact adult/child/infant breakdown against the search), verifies the fare, and dispatches the Aerticket create-booking job.

It enforces two staging safeguards so real, non-refundable purchases can’t happen outside production (via EnvironmentGuard::isStagingOrUat(), which fails safe to “staging” unless explicitly production):

  • Flydubai (FZ) bookings are blocked in staging/UAT.
  • Instant-purchase fares are blocked in staging/UAT (checked after fare verification).