syntax = "proto3"; package rail.v1; option go_package = "git.fjla.uk/owlboard/generated/go/rail/v1"; enum SchedulePayloadType { VSTP_MESSAGE_TYPE_UNSPECIFIED = 0; Create = 1; Delete = 2; } message RunsOnDays { bool sunday = 1; bool monday = 2; bool tuesday = 3; bool wednesday = 4; bool thursday = 5; bool friday = 6; bool saturday = 7; bool bank_holidays = 8; } enum TrainStatus { TRAIN_STATUS_UNSPECIFIED = 0; PERMANENT_BUS = 1; PERMANENT_FREIGHT = 2; PERMANENT_PASSENGER_OR_PARCELS = 3; PERMANENT_SHIP = 4; PERMANENT_TRIP = 5; STP_PASSENGER_ORPARCELS = 6; STP_FREIGHT = 7; STP_TRIP = 8; STP_SHIP = 9; STP_BUS = 10; } enum TrainCategory { TRAIN_CATEGORY_UNSPECIFIED = 0; METRO_SERVICE = 1; UNADVERTISED_PASSENGER_TRAIN = 2; ORDINARY_PASSENGER_TRAIN = 3; STAFF_TRAIN = 4; MIXED_TRAIN = 5; CHANNEL_TUNNEL_TRAIN = 6; EUROPEAN_SLEEPER_TRAIN = 7; INTERNATIONAL_PASSENGER_TRAIN = 8; MOTORAIL_SERVICE = 9; UNADVERTISED_EXPRESS_TRAIN = 10; EXPRESS_PASSENGER_TRAIN = 11; SLEEPER_SERVICE = 12; REPLACEMENT_BUS_SERVICE = 13; BUS_SERVICE = 14; SHIP = 15; EMPTY_COACHING_STOCK = 16; EMPTY_METRO_SERVICE = 17; METRO_STAFF_SERVICE = 18; POSTAL_TRAIN = 19; POST_OFFICE_PARCELS_TRAIN = 20; EMPTY_NON_PASSENGER_STOCK = 21; DEPARTMENTAL_TRAIN = 22; CIVIL_ENGINEER_TRAIN = 23; MECHANICAL_AND_ELECTRICAL_ENGINEER_TRAIN = 24; STORES_TRAIN = 25; TEST_TRAIN = 26; SIGNAL_AND_TELECOMMUNICATIONS_ENGINEER_TRAIN = 27; LOCOMOTIVE_AND_BRAKE_VAN = 28; LIGHT_LOCOMOTIVE = 29; AUTOMOTIVE_COMPONENTS_TRAIN = 30; AUTOMOTIVE_VEHICLE_TRAIN = 31; EDIBLE_PRODUCTS_TRAIN = 32; INDUSTRIAL_MINERALS_TRAIN = 33; CHEMICAL_TRAIN = 34; BUILDING_MATERIALS_TRAIN = 35; GENERAL_MERCHANDISE_TRAIN = 36; EUROPEAN_RAILFREIGHT = 37; FREIGHTLINER_CONTRACTS = 38; FREIGHTLINER_OTHER = 39; COAL_TRAIN = 40; COAL_POWER_STATION_TRAIN = 41; COAL_OR_NUCLEAR_TRAIN = 42; METALS_TRAIN = 43; AGGREGATES_TRAIN = 44; DOMESTIC_AND_INDUSTRIAL_WASTE_TRAIN = 45; TRAINLOAD_BUILDING_MATERIALS_TRAIN = 46; PETROLEUM_PRODUCTS_TRAIN = 47; MIXED_FREIGHT_CHANNEL_TUNNEL_TRAIN = 48; INTERMODAL_CHANNEL_TUNNEL_TRAIN = 49; AUTOMOTIVE_FREIGHT_CHANNEL_TUNNEL_TRAIN = 50; CONTRACT_FREIGHT_CHANNEL_TUNNEL_TRAIN = 51; HAULMARK_FREIGHT_CHANNEL_TUNNEL_TRAIN = 52; JOINT_VENTURE_CHANNEL_TUNNEL_FREIGHT_TRAIN = 53; } enum PowerType { POWER_TYPE_UNSPECIFIED = 0; DIESEL = 1; DIESEL_MULTIPLE_UNIT = 2; DISEL_MECHANICAL_MULTIPLE_UNIT = 3; ELECTRIC = 4; ELECTRO_DIESEL = 5; EMU_PLUS_LOCOMOTIVE = 6; ELECTRIC_MULTIPLE_UNIT = 7; HIGH_SPEED_TRAIN = 8; } message OperatingCharacteristics { bool vacuum_braked = 1; // B bool timed_at_100mph = 2; // C bool driver_only_operated = 3; // D bool conveys_mk4_coaches = 4; // E bool guard_required = 5; // G bool timed_at_110mph = 6; // M bool push_pull_train = 7; // P bool runs_as_required = 8; // Q bool air_conditioned_with_pa = 9;//R bool steam_heated = 10; bool runs_to_terminals_as_required = 11; // Y bool may_convey_sb1c_gauge = 12; // Z } enum SleepingAccommodation { NO_SLEEPING_ACCOMMODATION = 0; FIRST_AND_STANDARD = 1; FIRST_ONLY = 2; STANDARD_ONLY = 3; } message Reservations { bool reservations_available = 1; bool reservations_compulsory = 2; bool bike_reservations_essential = 3; bool reservations_from_any_station = 4; } message Catering { bool buffet_service = 1; bool first_class_restaurant = 2; bool hot_food_available = 3; bool first_class_meal_included = 4; bool restaurant_available = 5; bool trolley_service = 6; } enum STPIndicator { STP_INDICATOR_NOT_SPECIFIED = 0; C = 1; N = 2; O = 3; P = 4; } enum RecordIdentity { RECORD_IDENTITY_NOT_SPECIFIED = 0; ORIGIN = 1; INTERMEDIATE = 2; TERMINATING = 3; } message ScheduleLocation { RecordIdentity record_identity = 1; string tiploc = 2; int32 tiploc_instance = 3; int32 arrival_offset_seconds = 4; // Seconds after midnight int32 departure_offset_seconds = 5; int32 pass_offset_seconds = 6; int32 public_arrival_offset_seconds = 7; int32 public_departure_offset_seconds = 8; string platform = 9; string line = 10; string path = 11; int32 engineering_allowance_seconds = 12; int32 performance_allowance_seconds = 13; } message SchedulePayload { string train_uid = 1; SchedulePayloadType transaction_type = 2; int32 schedule_start_date = 3; // Literal int of date: eg. 20251216 int32 schedule_end_date = 4; RunsOnDays runs_on_day_of_week = 5; TrainStatus train_status = 6; TrainCategory train_category = 7; string headcode = 8; // signalling_id string nrs_code = 9; // CIF_headcode string train_service_code = 10; string portion_id = 11; // CIF_business_sector PowerType power_type = 12; string timing_load = 13; // Pretty String in Ingress Service OperatingCharacteristics operating_characteristics = 14; bool first_class_available = 15; SleepingAccommodation sleeping_accommodation = 16; Reservations reservations = 17; Catering catering_code = 18; bool is_eurostar = 19; STPIndicator stp_indicator = 20; string uic_code = 21; string toc_code = 22; // Maybe ENUM but subject to frequent-ish change repeated ScheduleLocation schedule_location = 23; }