Schedules
Schedules define the flight routes available for pilots to book. Each schedule links a departure airport to an arrival airport under a specific airline, with a flight number, date range, and optional aircraft restrictions. Schedules are the core building block of the route network.
Backoffice path: backoffice/schedules
Required roles: System Administrator, Administrator
Schedule List
The schedule list view displays all schedules in the network. The table contains the following columns:
| Column | Description |
|---|---|
| Flight Number | The commercial flight number assigned to the route. |
| Callsign | The ATC callsign for the flight. |
| Departure | The departure airport (ICAO code and name). |
| Arrival | The arrival airport (ICAO code and name). |
| Status | The computed schedule status (see Status below). |
The list is sortable by any column and supports free-text search across all visible columns. Results are paginated at 15 records per page.
Creating a Schedule
To create a new schedule, click the Add button on the schedule list page.
Schedule Fields
| Field | Format | Description |
|---|---|---|
| Airline | Selection (required) | The airline that operates this route. Defaults to the first airline in the system. |
| Departure Airport | ICAO code | The origin airport. |
| Final Destination | ICAO code | The final destination airport. For multi-leg routes, this is the last airport in the chain. |
| Distance | Nautical miles | The route distance. Auto-calculated using great-circle distance between the two airports. Can be manually overridden if the actual route distance differs from the direct path. |
| Commercial Flight Number | Text | The flight number shown to pilots and in schedules (e.g. BA117). |
| ATC Flight Number | Text | The flight number used in ATC communications, if different from the commercial number. |
| Start Date | Date | The date from which the schedule becomes valid. |
| Expiration Date | Date | The date after which the schedule is no longer valid. |
| Active | Toggle | Whether the schedule is administratively enabled. |
Distance Auto-Calculation
When you set the departure and arrival airports, the system automatically computes the great-circle distance between the two airport reference points and populates the distance field. You can override this value if the expected route distance differs from the direct path (e.g., due to airways, restricted airspace, or standard instrument departures/arrivals).
Schedule Status
The schedule status is computed automatically based on the active toggle and the start/expiration date range. It cannot be set manually.
| Status | Color | Condition |
|---|---|---|
| ACTIVE | Green | The active toggle is on and today's date falls within the start-to-expiration date range. |
| INACTIVE | Red | The active toggle is off, regardless of dates. |
| FUTURE | Yellow | The active toggle is on, but today's date is before the start date. |
| EXPIRED | Red | The active toggle is on, but today's date is past the expiration date. |
A schedule is bookable by pilots only when its computed status is ACTIVE -- that is, the active toggle must be on and the current date must fall within the start and expiration date range.
Aircraft Allowlist
The aircraft allowlist restricts which aircraft are permitted to fly a specific schedule. This is configured on the schedule edit page.
How It Works
- Empty allowlist -- All aircraft in the network are permitted to fly the route. No restrictions apply.
- Populated allowlist -- Only aircraft matching the allowlist entries may be used for bookings on this route.
Allowlist Hierarchy
Allowlist entries can be defined at three levels. The system evaluates them in the following order of specificity:
| Level | Description |
|---|---|
| Aircraft | A specific individual aircraft (by registration or ID). This is the most specific level and is checked first. |
| Subfleet | A subfleet group (e.g. A320-200 CFM). Checked if no aircraft-level match is found. |
| Fleet | An entire fleet type (e.g. A320). Checked if no subfleet-level match is found. |
When a pilot attempts to book a schedule, the system checks whether their selected aircraft matches any entry in the allowlist. It checks the aircraft level first, then the subfleet level, then the fleet level. If a match is found at any level, the booking is permitted.
Managing Allowlist Entries
On the schedule edit page, add entries by selecting the level (fleet, subfleet, or aircraft) and the specific entity. Remove entries by deleting them from the list.
Batch Allowlist Tool
The batch allowlist tool enables administrators to update aircraft allowlists across multiple schedules at once. This is useful when onboarding a new fleet type, retiring aircraft, or restructuring route permissions.
Accessing the Tool
The batch allowlist tool is available from the schedules list page.
Workflow
-
Filter schedules -- Narrow down the target schedules using the available filters:
- Airline -- Filter by operating airline.
- Departure Airport -- Filter by origin airport.
- Arrival Airport -- Filter by destination airport.
- Active -- Filter by active/inactive status.
-
Select operation mode -- Choose how the allowlist entries should be applied:
- Merge -- Adds the specified entries to the existing allowlist on each matching schedule. Existing entries are preserved.
- Replace -- Removes all existing allowlist entries on each matching schedule and replaces them with the specified entries.
-
Define allowlist entries -- Specify the fleet, subfleet, or aircraft entries to apply.
-
Execute -- Submit the batch operation. The update is processed as a queued background job, meaning it runs asynchronously. Large batch operations will not block the interface. You will be notified when the job completes.
The Replace mode will remove all existing allowlist entries before applying the new ones. Use this mode with care, especially on schedules that have been individually configured.
Multi-Leg Sequences
Schedules can be linked together to form multi-leg sequences -- a series of flights that are logically connected (e.g., A → B → C). This is useful for through-routes, island-hopping patterns, or any scenario where a crew operates multiple consecutive sectors.
How It Works
Each schedule can reference a Next Schedule, forming a linked chain:
- Sequence head -- The first leg in the chain (has no predecessor pointing to it).
- Intermediate legs -- Legs in the middle of the chain (both a predecessor and a
next_schedule_id). - Sequence tail -- The final leg (has no
next_schedule_id).
When creating or editing a schedule, you can add additional legs directly on the form. The system automatically manages the chain links between legs.
Creating a Multi-Leg Schedule
- Navigate to the schedule create page.
- Set the Departure Airport and the Final Destination (the last airport in the route).
- Click Add Stop to insert intermediate stops between the departure and final destination.
- For each stop, select the intermediate airport and optionally adjust the flight numbers and distance.
- Distances are auto-calculated for each segment when airports change. You can override them manually.
- Save to create all legs and link them together.
Independent Booking
By default, individual legs within a sequence cannot be booked independently -- pilots must book the entire sequence. To allow independent booking of individual legs, enable the Allow Independent Booking toggle on each leg.
Booking Behavior
When a pilot books a multi-leg sequence:
- All legs are booked together as a group, sharing a common booking group identifier.
- The same aircraft is used for all legs in the sequence.
- On the booking page, sequences are displayed with the final destination as the primary destination, with intermediate stops shown as "Via X, Y".
Editing Multi-Leg Schedules
The edit page for the first leg in a sequence shows the departure, final destination, and all intermediate stops. From this page you can:
- Edit any stop's airport, distance, or flight numbers.
- Add new stops to insert additional intermediate airports.
- Remove stops from the sequence.
Removing a leg from the middle of a sequence will re-link the surrounding legs to maintain chain integrity.
Editing a Schedule
Click any row in the schedule list to open the edit form. All fields described above can be modified, and the aircraft allowlist can be managed from the same page.
Activity Log
The schedule edit page includes a paginated activity log that records every change to the schedule's attributes (flight number, airports, dates, active status, etc.) with timestamps and the staff member who made the change.
Import / Export
The Import / Export page allows administrators to bulk-manage schedules through CSV files.
Backoffice path: backoffice/schedules/import-export
Required roles: System Administrator, Administrator
Exporting Schedules
Click Export CSV to download a file containing all schedules in the network. Multi-leg sequences are grouped together so that consecutive legs appear in order. The CSV contains the following columns:
| Column | Description |
|---|---|
| id | The schedule's unique identifier. |
| airline_icao | The operating airline's ICAO code. |
| departure_icao | The departure airport ICAO code. |
| arrival_icao | The arrival airport ICAO code. |
| flight_number | The commercial flight number. |
| callsign | The ATC callsign. |
| distance | Route distance in nautical miles. |
| starts_at | Schedule validity start date. |
| expires_at | Schedule validity expiration date. |
| active | Whether the schedule is active (1 or 0). |
Importing Schedules
Upload a CSV file to create or update schedules in bulk. The import runs as a background job with live progress displayed on screen.
Required columns: airline_icao, departure_icao, arrival_icao, flight_number
Optional columns: id, callsign, distance, starts_at, expires_at, active
Create vs. Update
- If a row includes an id column with a value, the system updates the existing schedule with that ID.
- If the id column is empty or not present, a new schedule is created.
Validation
The import uses strict validation -- every row is validated before any data is written. If any row has an error, the entire import is rejected and no schedules are created or modified. Validation checks include:
- All airline ICAO codes must match existing airlines.
- All airport ICAO codes must match existing airports.
- Flight number must not be empty.
- If an ID is provided, the schedule must already exist.
- If the
activefield is provided, it must be0,1,true, orfalse.
All validation errors are collected and displayed together so you can fix them in one pass.
Automatic Behaviors
- Distance auto-calculation -- If the
distancecolumn is empty or zero, the system computes the great-circle distance between the departure and arrival airports. - Callsign default -- If the
callsigncolumn is empty, the flight number is used as the callsign. - Active default -- If the
activecolumn is empty, the schedule defaults to active. - Multi-leg linking -- After import, schedules with the same flight number are automatically linked into multi-leg sequences when the arrival airport of one row matches the departure airport of the next row (in CSV order).
To update existing schedules, export the CSV first, modify the rows you need, and re-import. The id column ensures existing schedules are updated rather than duplicated.