Flight Schedules From SSIM
IATA SSIM (Standard Schedule Info Manual) to read Flight Schedules.
Background
As an engineer working with airline industry, I was privileged to work with SSIM files and write a parser tool to read these SSIM files. How I created a high performance parser is a discussion for another post, this post is about trying to understand SSIM file.
Introduction
Flight schedules are one of the most fundamental blocks for anyone working with airline industry. Airlines market itself heavily on their adherence to schedules, no one really likes delays!
But ever wonder how airline and your favorite booking applications or other travel agencies get the airline schedules? Well, there can be multiple ways, but one of the most basic way for bulk schedules is by a big flat file called as SSIM
. It is a standardized flat file by IATA and stands for Standard Schedule Info Manual
. IATA has published entire manual and is publicly available here.
Depending on the airline, at a time it can have several hundred to millions of records. Also, the time frame can vary from schedules to a couple of weeks to an entire year. So now you get the idea, for BULK flight schedules SSIM is commonly used in industry. There can be many third party agencies who convert these SSIM files into more understandable formats like json or csv.
Records
Chapter 7 of SSIM manual deals with flight schedules and record
form the building blocks for schedule. Records are essentially 200 bytes long and are of 5 types -
- Header Record -> 1
- Carrier Record -> 2
- Flight Leg Record -> 3
- Segment Record -> 4
- Trailer Record -> 5
The layout of these 200 bytes is slightly more invovled to mention here, refer the manual for details, but below are examples of how these raw records
and parsed records
look like.
1. Header Record
Raw Record -
1AIRLINE STANDARD SCHEDULE DATA SET 001000001
Parsed -
[
record_type: 1,
title_of_contents: "AIRLINE STANDARD SCHEDULE DATA SET",
data_set_serial_number: 1,
record_serial_number: 1
]
2. Carrier Record
Raw Record -
2UXX 0008 07DEC2103MAR2203DEC21Created by OCTLM Airlines PCreated by OCTLM Airlines EN2100000002
Parsed -
[
record_type: 2,
time_mode: "U",
airline_designator: "XX",
spare1: "0008",
validity_start_date: "2021-12-07",
validity_end_date: "2022-03-03",
creation_date: "2021-12-03",
title_of_data: "Created by OCTLM Airlines",
schedule_status: "P",
creator_reference: "Created by OCTLM Airlines",
etkt_info: "EN",
creation_time: "21:00:00",
record_serial_number: 2
]
3. Flight Leg Record
Raw Record -
3 XX 0450101J07DEC2402FEB251234567 ABC23502350+1000I XYZ06000600+0800I 7M8XX X J8Y174 000003
Parsed -
[
aircraft_configuration_version: "J8Y174",
aircraft_type: "7M8",
airline_designator: "XX",
arrival_station: "XYZ",
days_of_operation: [ 1, 2, 3, 4, 5, 6, 7 ],
departure_station: "ABC",
flight_number: "045",
itinerary_variation_identifier: 1,
leg_sequence_number: 1,
operating_airline_disclosure: "X",
operational_from: "2024-12-07",
operational_to: "2025-02-02",
passenger_reservations_booking_designator: "XX",
passenger_terminal_arrival: "I",
passenger_terminal_departure: "I",
record_serial_number: 3,
record_type: 3,
scheduled_time_aircraft_arrival: "06:00:00",
scheduled_time_aircraft_departure: "23:50:00",
scheduled_time_passenger_arrival: "06:00:00",
scheduled_time_passenger_departure: "23:50:00",
service_type: "J",
utc_local_time_variation_arrival: "+0800",
utc_local_time_variation_departure: "+1000",
]
4. Segment Record
Raw Record -
4 XX 0450101J AB106ABCXYZJCDZYBWHKLREONVPQTISFUMAGX 000004
Parsed -
[
record_type: 4,
airline_designator: "XX",
flight_number: "045",
itinerary_variation_identifier: 1,
leg_sequence_number: 1,
service_type: "J",
board_point_indicator: "A",
off_point_indicator: "B",
data_element_identifier: "106",
board_point: "ABC",
off_point: "XYZ",
data_associated_with_identifier: "JCDZYBWHKLREONVPQTISFUMAGX",
record_serial_number: 4
]
5. Trailer Record
Raw Record -
5 XX 03DEC21 000989E000990
Parsed -