"""Pydantic models for all operational data.""" from datetime import datetime from enum import Enum from pydantic import BaseModel class FlightStatus(str, Enum): ON_TIME = "ON_TIME" DELAYED = "DELAYED" CANCELLED = "CANCELLED" DIVERTED = "DIVERTED" class DelayCause(str, Enum): WEATHER = "WEATHER" MAINTENANCE = "MAINTENANCE" CREW = "CREW" ATC = "ATC" LATE_AIRCRAFT = "LATE_AIRCRAFT" class CrewRole(str, Enum): CAPTAIN = "CAPTAIN" FIRST_OFFICER = "FIRST_OFFICER" FA = "FA" class MPStatus(str, Enum): GLOBAL_SERVICES = "GLOBAL_SERVICES" K1 = "1K" PLATINUM = "PLATINUM" GOLD = "GOLD" SILVER = "SILVER" GENERAL = "GENERAL" class FlightData(BaseModel): flight_id: str origin: str destination: str scheduled_departure: datetime actual_departure: datetime | None = None scheduled_arrival: datetime actual_arrival: datetime | None = None status: FlightStatus delay_minutes: int = 0 delay_cause: DelayCause | None = None aircraft_tail: str gate: str inbound_flight: str | None = None crew_ids: list[str] = [] passenger_count: int = 0 class CrewMember(BaseModel): crew_id: str name: str role: CrewRole duty_hours_elapsed: float duty_hours_limit: float rest_hours_since_last: float next_scheduled_flight: str | None = None base_hub: str class Passenger(BaseModel): pax_id: str name: str mileage_plus_status: MPStatus flight_id: str destination: str connection_flight: str | None = None connection_deadline: datetime | None = None special_needs: list[str] = [] class MELItem(BaseModel): mel_id: str aircraft_tail: str system: str description: str restriction: str | None = None expires: datetime class RebookingCase(BaseModel): pax_id: str name: str original_flight: str mileage_plus_status: MPStatus destination: str next_available: str | None = None urgency: str # HIGH | MEDIUM | LOW class HubInfo(BaseModel): code: str name: str city: str timezone: str latitude: float longitude: float terminals: int gates: int runways: int # Hub reference data HUBS: dict[str, HubInfo] = { "ORD": HubInfo( code="ORD", name="O'Hare International", city="Chicago", timezone="America/Chicago", latitude=41.9742, longitude=-87.9073, terminals=4, gates=191, runways=8, ), "EWR": HubInfo( code="EWR", name="Newark Liberty International", city="Newark", timezone="America/New_York", latitude=40.6895, longitude=-74.1745, terminals=3, gates=120, runways=3, ), "IAH": HubInfo( code="IAH", name="George Bush Intercontinental", city="Houston", timezone="America/Chicago", latitude=29.9902, longitude=-95.3368, terminals=5, gates=130, runways=5, ), "SFO": HubInfo( code="SFO", name="San Francisco International", city="San Francisco", timezone="America/Los_Angeles", latitude=37.6213, longitude=-122.3790, terminals=4, gates=115, runways=4, ), "DEN": HubInfo( code="DEN", name="Denver International", city="Denver", timezone="America/Denver", latitude=39.8561, longitude=-104.6737, terminals=1, gates=95, runways=6, ), }