Bookings
Backoffice path: backoffice/bookings
Available to roles: System Administrator, Administrator
Overview
The Bookings page lists all active flight bookings across the airline. Pilots create bookings by selecting flights from published schedules, reserving a specific aircraft and route for a defined window of time. Administrators use this page to monitor booking activity, identify bottlenecks, and understand fleet utilization in real time.
How Bookings Work
When a pilot books a flight from the schedule, the system:
- Requires email verification -- pilots must verify their email address before they can access the booking page. Unverified pilots are redirected to a verification notice.
- Validates restrictions -- checks that the pilot meets all requirements (rank, license, and any other configured restrictions) before allowing the booking.
- Deducts Points cost (if configured) -- bookings can optionally cost Points, charged as either a fixed amount or a per-mile rate. This is configured at the schedule or airline level.
- Assigns departure and arrival stands -- if the departure and arrival airports have stands configured, the system automatically assigns parking stands based on fleet, subfleet, and airline restrictions. The departure stand is the aircraft's current stand; the arrival stand is selected using a tiered matching algorithm that prefers empty stands. For multi-leg bookings, each leg's departure stand chains from the previous leg's arrival stand.
- Generates MEL items -- on booking creation, the system performs a probability roll to auto-generate Minimum Equipment List (MEL) items for the assigned aircraft, simulating real-world maintenance scenarios.
- Starts the expiration timer -- the booking becomes active and will expire if not flown within the configured window.
Booking Expiration
Bookings expire automatically after a configurable period, controlled by the BOOKING_EXPIRATION_HOURS setting (default: 48 hours). An hourly purge job runs in the background to clean up expired bookings. When a booking expires:
- The booking record is removed.
- The pilot receives a notification informing them of the expiration.
- The aircraft becomes available for other pilots to book.
Cancellation
Pilots can cancel all of their active bookings at once using the Cancel All Bookings button on the booking page. Cancellation incurs a single fixed Points penalty (regardless of the number of bookings) deducted from the pilot's balance. Individual booking cancellation is not available — the pilot either cancels their entire booking chain or keeps all of it. This discourages frivolous booking and cancellation cycles.
Booking Uniqueness
The system supports configurable uniqueness constraints to prevent resource conflicts:
- Unique schedule -- a pilot cannot book the same schedule more than once simultaneously.
- Unique aircraft -- only one active booking can exist for a given aircraft at any time.
These settings can be combined or used individually depending on your operational preferences.
Restrictions
All configured restrictions are enforced at booking time. If a schedule, fleet, or aircraft has restrictions tied to a specific license or rank, the pilot must hold the required qualification before the system allows the booking. Pilots who do not meet the criteria will be blocked with an appropriate error message.
Aircraft Availability Filters
The aircraft selection list automatically excludes aircraft that are not available for booking:
| Condition | Behavior |
|---|---|
| Grounded aircraft | Aircraft marked as grounded (e.g., for maintenance) do not appear in the aircraft list and cannot be booked. |
| Aircraft being repositioned | Aircraft with an active (in-progress) repositioning bounty are hidden from the aircraft list — another pilot is already flying the aircraft to its base. |
These filters apply to both the schedule browser and the directed schedules interfaces. As a defense-in-depth measure, the same checks are also enforced server-side when the booking is submitted.
Bookings Table
The bookings list displays the following columns:
| Column | Description |
|---|---|
| Flight Number | The schedule's flight number for the booked route. |
| Pilot | The pilot who created the booking. |
| Aircraft | The assigned aircraft registration. |
| Departure | Departure airport ICAO code. |
| Arrival | Arrival airport ICAO code. |
| Status | Current booking status (active, expired, etc.). |
| Created Date | Timestamp of when the booking was created. |
The table is searchable and sortable, allowing administrators to quickly locate specific bookings by pilot name, flight number, or airport.
Directed Schedules
Pilots can generate customized random routes from their current airport using the Directed Schedules flyout. This replaces the previous separate "Random", "By Fleet", and "By Aircraft" booking methods with a single, unified interface.
Available Filters
All filters are optional. Each active filter adds to the Points cost:
| Filter | Description |
|---|---|
| Subfleet | Restrict route generation to aircraft from a specific subfleet. |
| Aircraft | Restrict to a specific aircraft (overrides subfleet cost). |
| Final Destination | Force the last leg to arrive at a chosen airport. |
| Min Distance per Leg | Exclude schedules shorter than the specified distance (in nautical miles). |
| Max Distance per Leg | Exclude schedules longer than the specified distance (in nautical miles). |
| New Legs Only | Only include routes the pilot has never flown before. |
| Leg Count | Number of legs to generate (1 to 5). |
The min and max distance filters each independently add to the Points cost. If both are active, the distance cost is charged twice.
The running Points cost is displayed in real time as filters are toggled on and off.
Route Preview
After configuring filters, pilots click Generate to produce a route preview. Points are deducted at generation time (not on accept). The preview displays each leg (departure, arrival, flight number, distance) and the total cost.
If the requested number of legs cannot be generated, the system automatically tries fewer legs (down to 1). When a lower count is found, the leg count selector is updated and the pilot is notified — no points are deducted. The pilot can then click Generate again with the reduced count.
From the preview, pilots can:
| Action | Behavior |
|---|---|
| Accept & Book | Confirms the route and creates the bookings (no additional Points charge — already paid on generate). |
| Re-roll | Discards the current route and generates a new one with the same filters. When DIRECTED_REROLL_COSTS_POINTS is enabled (default), each reroll deducts the same Points cost as the initial generation. |
| Cancel | Closes the flyout without creating any bookings. |
Route Variety (Flight History Bias)
The algorithm tracks how many times each pilot has flown each airport pair. Routes the pilot has already flown receive a higher weight penalty, making them less likely to be selected. Unflown routes are naturally favored, encouraging pilots to explore new destinations across the network.
When the New Legs Only filter is active, previously flown routes are excluded entirely rather than just penalized.
Multi-Leg Sequence Detection
If a multi-leg sequence starts at the pilot's current airport and fits within the requested number of legs, the sequence is booked as a group. If the sequence has fewer legs than requested, the remaining legs are generated randomly from the sequence's final airport. Sequence detection is skipped when directed filters are active, as the constraints may conflict with the sequence route.
Configuration Reference
| Setting | Description | Default |
|---|---|---|
BOOKING_EXPIRATION_HOURS | Hours before an unused booking expires and is purged. | 48 |
DIRECTED_DESTINATION_FILTER_COST | Points cost added when the pilot specifies a final destination in Directed Schedules. | 25 |
DIRECTED_DISTANCE_FILTER_COST | Points cost added for each distance filter (min or max) the pilot specifies. Charged independently per filter. | 15 |
DIRECTED_UNFLOWN_FILTER_COST | Points cost added when the pilot enables the "New Legs Only" filter. | 10 |
DIRECTED_REROLL_COSTS_POINTS | When enabled, each reroll of a directed schedule deducts the same Points cost as the initial generation. | On |
| Points cost mode | Whether booking costs are fixed or calculated per mile. | Configured per schedule |
| Uniqueness rules | Whether bookings enforce unique schedule, unique aircraft, or both. | Airline-level setting |
| Cancellation penalty | Points deducted when a pilot cancels a booking. | Airline-level setting |