Overview
The FlightControl type tracks individual flight operations in SIGEAC. It records flight details, accumulates aircraft flight hours and cycles, and provides essential data for maintenance planning and aircraft utilization monitoring.
Type Definition
export type FlightControl = {
id : number ;
flight_number : string ;
aircraft_operator : string ;
origin : string ;
destination : string ;
flight_date : string ;
flight_hours : number ;
flight_cycles : number ;
aircraft : MaintenanceAircraft ;
};
Fields
Unique identifier for the flight control record
Flight number or identifier (e.g., “AA123”, “FERRY-001”, “TEST-FLIGHT-01”)
Name of the aircraft operator conducting the flight. May differ from aircraft owner.
Departure airport (typically ICAO or IATA code, e.g., “SVMI”, “CCS”)
Arrival airport (typically ICAO or IATA code, e.g., “SVMC”, “MAR”)
Date of flight in ISO 8601 format (e.g., “2024-03-15T14:30:00Z”)
Duration of flight in hours (decimal format, e.g., 2.5 for 2 hours 30 minutes).
This value is added to the aircraft’s total flight hours.
Number of flight cycles (takeoff/landing pairs) for this flight. Typically 1 for a standard flight,
but may be higher for flights with multiple takeoffs and landings (e.g., training flights, touch-and-go operations).
aircraft
MaintenanceAircraft
required
Aircraft that performed this flight. See Aircraft documentation for complete structure. Show Key aircraft properties
Aircraft unique identifier
Aircraft registration (e.g., “YV-1234”)
Aircraft model (e.g., “737-800”)
Total accumulated flight hours (updated after each flight)
Total accumulated cycles (updated after each flight)
Flight Cycle Tracking
Flight cycles are critical for maintenance scheduling as many components have cycle-limited lifespans:
Standard Flight : 1 cycle (one takeoff, one landing)
Training Flight : Multiple cycles (multiple takeoffs and landings)
Touch-and-Go : Each touch-and-go counts as 1 cycle
Rejected Takeoff : May count as 0.5 cycle depending on operator policy
Flight hours and cycles are automatically accumulated to the aircraft and its time-tracked components when a flight control record is created.
Flight History Integration
Flight control data feeds into the flight history system for component tracking:
export type FlightHistory = {
id : number ;
flight_number : string ;
aircraft_part_id : string | number ;
aircraft_part ?: MaintenanceAircraftPart ;
flight ?: FlightControl ;
time_since_new : number | string ;
time_since_overhaul : number | string ;
cycles_since_new : number | string ;
cycles_since_overhaul : number | string ;
flight_cycles : number | string ;
flight_hours : number | string ;
created_at : string ;
updated_at : string ;
};
Each flight control record can generate multiple flight history entries—one for each tracked component on the aircraft.
Example Usage
Standard Commercial Flight
const commercialFlight : FlightControl = {
id: 1001 ,
flight_number: "VE-125" ,
aircraft_operator: "Venezuelan Airlines" ,
origin: "SVMI" ,
destination: "SVMC" ,
flight_date: "2024-03-15T08:30:00Z" ,
flight_hours: 1.2 ,
flight_cycles: 1 ,
aircraft: {
id: 1 ,
serial: "MSN-12345" ,
model: "737-800" ,
acronym: "YV-1234" ,
flight_hours: "24,567.50" ,
flight_cycles: "18,234.00" ,
fabricant_date: "2015-06-15T00:00:00Z" ,
client: {
id: 1 ,
name: "Venezuelan Airlines" ,
email: "[email protected] " ,
phone_number: "+58-212-555-0100" ,
address: "Caracas, Venezuela" ,
authorizing: "PROPIETARIO"
},
manufacturer: {
id: 1 ,
name: "Boeing" ,
type: "AIRCRAFT" ,
description: "Boeing Commercial Airplanes"
},
location: {
id: 1 ,
name: "Main Base" ,
address: "Maiquetía" ,
type: "AIRPORT" ,
cod_iata: "CCS" ,
isMainBase: true ,
companies: []
},
aircraft_parts: [],
comments: ""
}
};
Maintenance Test Flight
const testFlight : FlightControl = {
id: 1002 ,
flight_number: "TEST-FLIGHT-001" ,
aircraft_operator: "Maintenance Department" ,
origin: "SVMI" ,
destination: "SVMI" ,
flight_date: "2024-03-15T10:00:00Z" ,
flight_hours: 0.8 ,
flight_cycles: 1 ,
aircraft: {
id: 1 ,
serial: "MSN-12345" ,
model: "737-800" ,
acronym: "YV-1234" ,
// ... aircraft details
}
};
Training Flight with Multiple Cycles
const trainingFlight : FlightControl = {
id: 1003 ,
flight_number: "TRAINING-045" ,
aircraft_operator: "Flight School Division" ,
origin: "SVVA" ,
destination: "SVVA" ,
flight_date: "2024-03-15T14:00:00Z" ,
flight_hours: 2.5 ,
flight_cycles: 8 , // Multiple touch-and-go landings
aircraft: {
id: 2 ,
serial: "MSN-67890" ,
model: "Cessna 172" ,
acronym: "YV-5678" ,
// ... aircraft details
}
};
Maintenance Planning Integration
Flight control data is essential for maintenance planning:
Time-Based Maintenance
// Calculate hours until next A-Check (every 800 hours)
const calculateNextACheck = ( aircraft : MaintenanceAircraft ) : number => {
const currentHours = parseFloat ( aircraft . flight_hours . toString (). replace ( /,/ g , '' ));
const nextCheckDue = Math . ceil ( currentHours / 800 ) * 800 ;
return nextCheckDue - currentHours ;
};
Cycle-Based Maintenance
// Calculate cycles until landing gear overhaul (every 20,000 cycles)
const calculateLandingGearOverhaulDue = ( aircraft : MaintenanceAircraft ) : number => {
const currentCycles = parseFloat ( aircraft . flight_cycles . toString (). replace ( /,/ g , '' ));
const overhaul_interval = 20000 ;
return overhaul_interval - ( currentCycles % overhaul_interval );
};
Component Tracking
// Update component hours and cycles after flight
const updateComponentTracking = (
flightControl : FlightControl ,
component : MaintenanceAircraftPart
) : MaintenanceAircraftPart => {
return {
... component ,
time_since_new: parseFloat ( component . time_since_new || "0" ) + flightControl . flight_hours ,
time_since_overhaul: parseFloat ( component . time_since_overhaul || "0" ) + flightControl . flight_hours ,
cycles_since_new: parseFloat ( component . cycles_since_new || "0" ) + flightControl . flight_cycles ,
cycles_since_overhaul: parseFloat ( component . cycles_since_overhaul || "0" ) + flightControl . flight_cycles
};
};
Utilization Reports
Flight control data enables comprehensive utilization reporting:
interface UtilizationReport {
period : string ;
total_flights : number ;
total_hours : number ;
total_cycles : number ;
average_flight_duration : number ;
utilization_rate : number ; // hours per day
}
const generateUtilizationReport = (
flights : FlightControl [],
startDate : Date ,
endDate : Date
) : UtilizationReport => {
const periodFlights = flights . filter (
f => new Date ( f . flight_date ) >= startDate && new Date ( f . flight_date ) <= endDate
);
const total_hours = periodFlights . reduce (( sum , f ) => sum + f . flight_hours , 0 );
const total_cycles = periodFlights . reduce (( sum , f ) => sum + f . flight_cycles , 0 );
const days = ( endDate . getTime () - startDate . getTime ()) / ( 1000 * 60 * 60 * 24 );
return {
period: ` ${ startDate . toISOString () } to ${ endDate . toISOString () } ` ,
total_flights: periodFlights . length ,
total_hours ,
total_cycles ,
average_flight_duration: periodFlights . length > 0 ? total_hours / periodFlights . length : 0 ,
utilization_rate: days > 0 ? total_hours / days : 0
};
};
Best Practices
Accurate Recording : Ensure flight hours are recorded to at least 0.1 hour precision
Cycle Counting : Properly count all takeoff/landing pairs, including touch-and-go operations
Timely Entry : Enter flight data promptly after flight completion
Validation : Validate that accumulated hours/cycles match aircraft tech log
Ferry Flights : Don’t forget to record maintenance ferry flights and test flights
Component Updates : Ensure component tracking is updated after each flight
Regulatory Compliance
Accurate flight hour and cycle tracking is required for:
Compliance with maintenance program requirements
Component life-limit tracking
Airworthiness directive compliance
Regulatory inspections and audits
Data Validation
const validateFlightControl = ( flight : FlightControl ) : string [] => {
const errors : string [] = [];
if ( flight . flight_hours <= 0 ) {
errors . push ( "Flight hours must be greater than 0" );
}
if ( flight . flight_cycles < 1 ) {
errors . push ( "Flight cycles must be at least 1" );
}
if ( flight . flight_hours > 24 ) {
errors . push ( "Flight hours exceed maximum daily limit" );
}
if ( ! flight . origin || ! flight . destination ) {
errors . push ( "Origin and destination are required" );
}
return errors ;
};