Files
ppr-ng/FLIGHT_STATE_FLOWS.md
T
2026-03-24 04:48:06 -04:00

186 lines
6.0 KiB
Markdown

# Flight State Flow Documentation
This document describes the state flows for each flight type in the PPR system.
## Overview
The system manages different types of aircraft operations, each with their own state machines and status transitions. The main flight types are:
1. **Circuits** - Touch-and-go circuit training flights
2. **Local Flights** - General local operations
3. **Inbound/Arrivals** - Aircraft arriving at the airport
4. **Departures** - Aircraft departing to other airports
5. **PPR Records** - Prior permission required advance bookings
6. **Overflights** - Aircraft passing through airspace
## 1. Circuits
Circuits are a special type of local flight where aircraft perform touch-and-go operations. The circuit system tracks individual circuit completions.
### State Flow
```
BOOKED_OUT → DEPARTED → LANDED
↓ ↓ ↓
CANCELLED CANCELLED CANCELLED
```
### Status Descriptions
- **BOOKED_OUT**: Flight is booked out and ready for departure
- **DEPARTED**: Aircraft has departed the airport
- **LANDED**: Aircraft has landed and flight is complete
- **CANCELLED**: Flight was cancelled before completion
### Additional Features
- Individual circuit timestamps are recorded in the `circuits` table
- The `circuits` field on the local_flight record stores the total number of completed circuits
- Circuits are counted automatically when the flight status changes to LANDED
## 2. Local Flights
Local flights represent general aviation operations within the local area.
### State Flow
```
BOOKED_OUT → DEPARTED → LANDED
↓ ↓ ↓
CANCELLED CANCELLED CANCELLED
```
### Status Descriptions
- **BOOKED_OUT**: Flight is booked out and ready for departure
- **DEPARTED**: Aircraft has departed the airport
- **LANDED**: Aircraft has landed and flight is complete
- **CANCELLED**: Flight was cancelled before completion
### Flight Types
Local flights can be categorized by their `flight_type`:
- **LOCAL**: Standard local flight
- **CIRCUITS**: Circuit training flight (see Circuits section above)
- **DEPARTURE**: Flight departing to another airport (may transition to Departure records)
## 3. Inbound/Arrivals
Inbound flights are aircraft arriving at the airport, either through the PPR system or direct bookings.
### State Flow
```
BOOKED_IN → LANDED
↓ ↓
CANCELLED CANCELLED
```
### Status Descriptions
- **BOOKED_IN**: Aircraft is expected to arrive (booked in the system)
- **LANDED**: Aircraft has landed at the airport
- **CANCELLED**: Arrival was cancelled
### Notes
- Arrivals can originate from PPR records that have landed
- Direct arrival bookings are also supported
- Landing timestamp is recorded when status changes to LANDED
## 4. Departures
Departures are aircraft leaving the airport to fly to other destinations.
### State Flow
```
BOOKED_OUT → DEPARTED
↓ ↓
CANCELLED CANCELLED
```
### Status Descriptions
- **BOOKED_OUT**: Flight is booked out and ready for departure
- **DEPARTED**: Aircraft has departed to its destination
- **CANCELLED**: Departure was cancelled
### Notes
- Departures can originate from PPR records that are departing
- Local flights with `flight_type = DEPARTURE` may transition to departure records
- Departure timestamp is recorded when status changes to DEPARTED
## 5. PPR (Prior Permission Required) Records
PPR records represent advance permission requests for aircraft operations and have a more complex lifecycle.
### State Flow
```
NEW → CONFIRMED → LANDED → DEPARTED
↓ ↓ ↓ ↓
CANCELED CANCELED CANCELED (terminal)
DELETED
```
### Status Descriptions
- **NEW**: PPR has been submitted but not yet confirmed
- **CONFIRMED**: PPR has been confirmed by ATC
- **LANDED**: Aircraft has landed (for inbound operations)
- **DEPARTED**: Aircraft has departed (for outbound operations)
- **CANCELED**: PPR was cancelled
- **DELETED**: PPR was soft-deleted (marked as deleted)
### Notes
- PPRs can represent both arrivals and departures
- The system tracks both ETA (Estimated Time of Arrival) and ETD (Estimated Time of Departure)
- Timestamps are recorded for actual landing and departure times
- PPRs can transition between arrival and departure operations
## 6. Overflights
Overflights represent aircraft passing through the airspace without landing at the airport.
### State Flow
```
ACTIVE → INACTIVE
↓ ↓
CANCELLED CANCELLED
```
### Status Descriptions
- **ACTIVE**: Overflight is currently active/tracking
- **INACTIVE**: Overflight has completed or is no longer active
- **CANCELLED**: Overflight was cancelled
### Notes
- Overflights track aircraft that call in for frequency changes (QSY)
- Call time and QSY time are recorded
- Overflights are typically managed separately from landing operations
## Status Transition Rules
### Automatic Transitions
- Status changes automatically set appropriate timestamps:
- `DEPARTED`: Sets `departed_dt`
- `LANDED`: Sets `landed_dt`
- For circuits: Also counts completed circuits
### Manual Transitions
- Operators can manually update statuses through the admin interface
- Status changes are logged in the journal/audit trail
- WebSocket notifications are sent for real-time updates
### Validation Rules
- Cannot transition backwards in the flow (e.g., from LANDED to DEPARTED)
- CANCELLED/CANCELED are terminal states for most flight types
- DELETED is only used for PPR soft-deletion
- Status enum values: Most use "CANCELLED", PPR uses "CANCELED"
## Integration Points
### UI Integration
- Admin interface provides buttons for status updates
- Real-time updates via WebSocket
- Modal dialogs for status changes with timestamp confirmation
### API Integration
- REST endpoints for status updates: `PATCH /{id}/status`
- Status filtering available on list endpoints
- Journal logging for all status changes
### Database Integration
- Status enums ensure data integrity
- Foreign key relationships maintain consistency
- Audit trail tracks all changes</content>
<parameter name="filePath">/home/jamesp/docker/pprdev/FLIGHT_STATE_FLOWS.md