diff --git a/FLIGHT_STATE_FLOWS.md b/FLIGHT_STATE_FLOWS.md new file mode 100644 index 0000000..7eeb7a7 --- /dev/null +++ b/FLIGHT_STATE_FLOWS.md @@ -0,0 +1,186 @@ +# 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 +/home/jamesp/docker/pprdev/FLIGHT_STATE_FLOWS.md \ No newline at end of file