Compare commits

..

55 Commits

Author SHA1 Message Date
b55d9f32ec Add further missing types
All checks were successful
Generate and Release Protos / release (push) Successful in 47s
2026-04-24 19:23:21 +01:00
79c900e320 Ensure fields for rdelay and operator are present in schedule schema
All checks were successful
Generate and Release Protos / release (push) Successful in 47s
2026-04-24 19:13:52 +01:00
0e87c510b3 Increase max size of allowed 'seq' value in schedule
All checks were successful
Generate and Release Protos / release (push) Successful in 49s
2026-04-24 15:49:44 +01:00
2552204da2 Add schema for TS message
All checks were successful
Generate and Release Protos / release (push) Successful in 49s
2026-04-22 20:14:05 +01:00
5eb6f623be Schemata...
All checks were successful
Generate and Release Protos / release (push) Successful in 48s
2026-04-21 13:56:26 +01:00
d8acf84b44 Add schema for OW Data 2026-04-21 13:55:57 +01:00
e574358ea9 Make networkRailCorpus.json an object not an array.
All checks were successful
Generate and Release Protos / release (push) Successful in 40s
Object/Array support can be handled on the processor side to support either
2026-04-08 23:12:28 +01:00
698248487a Add networkRailCorpus schema
All checks were successful
Generate and Release Protos / release (push) Successful in 44s
2026-04-08 22:54:06 +01:00
b8eaad4bbd Adjust DarwinReasonCode and remove unused PushPort types
All checks were successful
Generate and Release Protos / release (push) Successful in 41s
2026-04-07 19:18:32 +01:00
a1aeb7e79f Association times are now just plain strings, as the date cannot be determined from the association data alone - as querying by time is not required, the expected type will be a string.
All checks were successful
Generate and Release Protos / release (push) Successful in 41s
2026-04-06 19:23:11 +01:00
a734dea17a Add darwin association data type
All checks were successful
Generate and Release Protos / release (push) Successful in 44s
2026-04-05 20:13:14 +01:00
e7f307f243 Fix a non-boolean default value in DarwinSchedule type
All checks were successful
Generate and Release Protos / release (push) Successful in 42s
2026-04-01 23:27:26 +01:00
727641f49f Update Darwin Scheudle schema
All checks were successful
Generate and Release Protos / release (push) Successful in 40s
2026-03-31 21:27:56 +01:00
b17efa3e5d Add 'darwin-schedule' schema
All checks were successful
Generate and Release Protos / release (push) Successful in 42s
2026-03-31 20:41:44 +01:00
56aae55f16 Update enum values for MessageEnvelope to allow kb-stations
All checks were successful
Generate and Release Protos / release (push) Successful in 38s
2026-03-29 19:32:02 +01:00
91abe29b62 Adjust KB_Stations data type schema
All checks were successful
Generate and Release Protos / release (push) Successful in 39s
2026-03-29 19:08:15 +01:00
c22f3c7230 Adjust required fields
All checks were successful
Generate and Release Protos / release (push) Successful in 39s
2026-03-28 22:36:42 +00:00
311ff3798f Fix knowledgebase stations schema
All checks were successful
Generate and Release Protos / release (push) Successful in 39s
2026-03-28 22:29:46 +00:00
a869935241 Add Knowledgebase Stations schema
All checks were successful
Generate and Release Protos / release (push) Successful in 43s
2026-03-28 22:20:53 +00:00
6cf6ea8aef Update schedule object to handle canellation location 2026-03-27 22:44:03 +00:00
50824255f8 Extend TOC info type to handle URL
All checks were successful
Generate and Release Protos / release (push) Successful in 32s
2026-03-25 13:24:20 +00:00
e1950c0ef3 Fix TIPLOC in darwin-tiplocs to be a simple string, rather than an array
All checks were successful
Generate and Release Protos / release (push) Successful in 36s
2026-03-22 19:26:37 +00:00
1a9b68ce41 Add schemas for Darwin Reference data
All checks were successful
Generate and Release Protos / release (push) Successful in 41s
2026-03-21 21:00:27 +00:00
817baa7d66 Remove hashes from PIS data type
All checks were successful
Generate and Release Protos / release (push) Successful in 37s
2026-03-19 06:22:13 +00:00
072902be59 Fix incorrect data type
All checks were successful
Generate and Release Protos / release (push) Successful in 32s
2026-03-02 22:47:25 +00:00
2452e17faa Fix onocorrect data-type 2026-03-02 22:47:08 +00:00
f2a9b7ffdc Ensure types correct
All checks were successful
Generate and Release Protos / release (push) Successful in 35s
2026-03-02 22:25:02 +00:00
4ab05ba738 Adjust declarations and remove uses of the allOf function to assist with type generation
All checks were successful
Generate and Release Protos / release (push) Successful in 38s
2026-02-27 20:18:57 +00:00
06e6bceb59 Final Draft of 16schedule.json
All checks were successful
Generate and Release Protos / release (push) Successful in 36s
2026-02-25 16:21:40 +00:00
315be1af57 Lost in schema translation! 2026-02-24 21:23:16 +00:00
c9f328bb58 Ensure that data_kind it not optinal
All checks were successful
Generate and Release Protos / release (push) Successful in 30s
2026-02-24 11:56:53 +00:00
355494fc97 Add payload key to MessageEnvelope
All checks were successful
Generate and Release Protos / release (push) Successful in 30s
2026-02-24 11:50:00 +00:00
76281bacfb Wrap schedule message into envelope
All checks were successful
Generate and Release Protos / release (push) Successful in 33s
2026-02-24 11:36:51 +00:00
aff523a038 Add bool for 'pass'
All checks were successful
Generate and Release Protos / release (push) Successful in 30s
2026-02-23 20:42:52 +00:00
e0a7c5f56e Add boolean for passesAnotherTrain
All checks were successful
Generate and Release Protos / release (push) Successful in 32s
2026-02-23 20:30:05 +00:00
9a9fc59e22 Add booleans to describe service activities and whether the service is supressed 2026-02-23 20:29:10 +00:00
d103314350 Rename problematic files
All checks were successful
Generate and Release Protos / release (push) Successful in 29s
2026-02-23 19:20:29 +00:00
5c16b17aea Try passing '$id' as ref
Some checks failed
Generate and Release Protos / release (push) Failing after 23s
2026-02-23 19:17:39 +00:00
71e04b93d5 Try relpath from repo root!
Some checks failed
Generate and Release Protos / release (push) Failing after 26s
2026-02-23 19:14:54 +00:00
423bb9fc34 Try path from repo root
Some checks failed
Generate and Release Protos / release (push) Failing after 25s
2026-02-23 19:13:33 +00:00
eb7c3a18d8 Try rel path
Some checks failed
Generate and Release Protos / release (push) Failing after 23s
2026-02-23 19:11:53 +00:00
fe68c038de Fix ref to schema file
Some checks failed
Generate and Release Protos / release (push) Failing after 23s
2026-02-23 19:09:37 +00:00
776263c068 Add Schedule type for Darwin PushPort
Some checks failed
Generate and Release Protos / release (push) Failing after 25s
2026-02-23 19:07:31 +00:00
87ed1d01d5 Add late & canel reason keys 2026-02-22 01:48:26 +00:00
057f5ed777 Add 'atRemoved' field to TSTime definition 2026-02-22 01:32:03 +00:00
93df742c7d Add schemas for PushPort TS Message type 2026-02-22 01:29:50 +00:00
f20f2f83ec Update readme to exlpain installing the package with Go. 2026-01-14 19:16:51 +00:00
770ee003e7 Add message-envelope type
All checks were successful
Generate and Release Protos / release (push) Successful in 27s
2026-01-14 18:51:14 +00:00
a5675b1442 Add 'service_id' field. Used to include the message senders hostname
All checks were successful
Generate and Release Protos / release (push) Successful in 26s
2026-01-13 18:54:10 +00:00
a927ccc732 Add additional file types ready for declaration
All checks were successful
Generate and Release Protos / release (push) Successful in 30s
2026-01-13 18:40:16 +00:00
817c338745 Update data_type and data_kind fields 2026-01-13 18:38:14 +00:00
af3c82518c Change go package name
All checks were successful
Generate and Release Protos / release (push) Successful in 26s
2026-01-08 23:30:56 +00:00
9511db8ee9 Set correct package name for Go package generation
All checks were successful
Generate and Release Protos / release (push) Successful in 26s
2026-01-08 23:15:48 +00:00
fc92331238 Try and fix AGAIN
All checks were successful
Generate and Release Protos / release (push) Successful in 26s
2026-01-08 23:06:45 +00:00
a4e6386fd1 Attempt to fix internal ZIP structure again?
All checks were successful
Generate and Release Protos / release (push) Successful in 26s
2026-01-08 22:55:15 +00:00
19 changed files with 1199 additions and 233 deletions

View File

@@ -78,17 +78,24 @@ jobs:
ZIP_ROOT="/tmp/go_upload"
FULL_PATH="$ZIP_ROOT/$MOD_NAME@$VERSION"
# 1. Prepare
cd gen/go
go mod init $MOD_NAME
go mod tidy
# 2. Initialize the module
go mod init "$MOD_NAME"
# 3. Create the structure
mkdir -p "$FULL_PATH"
cp -r . "$FULL_PATH/"
pushd "$ZIP_ROOT"
zip -r "$GITHUB_WORKSPACE/module.zip" .
popd
# 4. Copy the CONTENTS of models to the root of the module
# This flattens the structure so the .go files are next to go.mod
cp -r models/* "$FULL_PATH/"
cp go.mod "$FULL_PATH/"
# 5. Zip and Upload
cd "$ZIP_ROOT"
zip -r -D "$GITHUB_WORKSPACE/module.zip" .
curl -f --user "owlbot:${{ secrets.PACKAGE_PUSH }}" \
--upload-file "$GITHUB_WORKSPACE/module.zip" \
"${{ github.server_url }}/api/packages/owlboard/go/upload?version=$VERSION"

View File

@@ -1,6 +1,6 @@
# backend-data-contracts
This repository is the single source of truth for all schema definitions used across the Owlboard backend communication and storage services. Language specific types are generated here and published to the Gitea package repository linked to the repo.
This repository is the single source of truth for all schemata definitions used across the Owlboard backend communication and storage services. Language specific types are generated here and published to the Gitea package repository linked to the repo.
## Directory Structure
@@ -20,7 +20,21 @@ Since the package is hosted in the Gitea Package Registry, you must configure yo
**Setup:**
```bash
export GOPROXY=[https://git.fjla.uk/api/packages/owlboard/go,https://proxy.golang.org,direct](https://git.fjla.uk/api/packages/owlboard/go,https://proxy.golang.org,direct)
# Set the proxy to check our Gitea instance first
go env -w GOPROXY="https://git.fjla.uk/api/packages/OwlBoard/go,https://proxy.golang.org,direct"
# Trust our internal domain and skip the public Google checksum database
go env -w GONOSUMDB="git.fjla.uk"
```
The, you can simply run go get, as usual.
#### Container Usage
```bash
ARG GOPROXY=https://git.fjla.uk/api/packages/OwlBoard/go,https://proxy.golang.org,direct
ARG GONOSUMDB=git.fjla.uk
ENV GOPROXY=$GOPROXY
ENV GONOSUMDB=$GONOSUMDB
```
### 2. Typescript Services

View File

@@ -1,198 +0,0 @@
syntax = "proto3";
package rail_backend.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;
}

View File

@@ -0,0 +1,190 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/TS.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinTSData",
"type": "object",
"required": [
"rid",
"ssd",
"locs",
"rf"
],
"additionalProperties": false,
"properties": {
"rid": {
"type": "string",
"name": "RID",
"description": "The RID of the service that the data applies to"
},
"uid": {
"type": "string",
"name": "UID",
"description": "The UID of the timetable entry for this service"
},
"ssd": {
"type": "string",
"format": "date",
"name": "Service Start Date",
"description": "The date on which the service commences"
},
"rf": {
"type": "boolean",
"name": "isReverseFormation",
"description": "Whether the service is running in reverse formation"
},
"lr": {
"type": "object",
"name": "Late Reason",
"description": "Late Reason Object",
"additionalProperties": false,
"required": [
"c"
],
"properties": {
"c": {
"type": "integer",
"name": "Reason code",
"description": "The reason code for the delay"
},
"t": {
"type": "string",
"name": "TIPLOC",
"description": "The TIPLOC where the delay occurred"
},
"n": {
"type": "boolean",
"name": "Near",
"description": "Whether the delay occurred NEAR the TIPLOC, otherwise at the TIPLOC"
}
}
},
"locs" : {
"type": "array",
"items": {"$ref": "#/definitions/location"}
}
},
"definitions": {
"location": {
"type": "object",
"required": ["t"],
"properties": {
"t": {
"type": "string",
"name": "TIPLOC",
"description": "The TIPLOC of the location"
},
"wta": {
"type": "string",
"name": "Working Time of Arrival",
"description": "The scheduled arrival time from the working timetable"
},
"wtd": {
"type": "string",
"name": "Working Time of Departure",
"description": "The scheduled departure time from the working timetable"
},
"pta": {
"type": "string",
"name": "Public Time of Arrival",
"description": "The scheduled arrival time from the public timetable"
},
"ptd": {
"type": "string",
"name": "Public time of departure",
"description": "The scheduled departure time from the public timetable"
},
"wtp": {
"type": "string",
"name": "Working pass time",
"description": "The scheduled pass time from the working timetable"
},
"d": {
"name": "Departure data",
"$ref": "#/definitions/forecastTime"
},
"a": {
"name": "Arrival data",
"$ref": "#/definitions/forecastTime"
},
"p": {
"name": "Pass data",
"$ref": "#/definitions/forecastTime"
},
"plt": {
"name": "Platform data",
"$ref": "#/definitions/platformStatus"
}
}
},
"forecastTime": {
"type": "object",
"name": "Forecast/Actual Time",
"properties": {
"et": {
"type": "string",
"name": "Estimated Time",
"description": "The estimated time of this event"
},
"at": {
"type": "string",
"name": "Actual Time",
"description": "The actual time of this event"
},
"wet": {
"type": "string",
"name": "Working Estimated Time",
"description": "The estimated 'working' time"
},
"atRem": {
"type": "boolean",
"name": "AT Removal",
"description": "If true, previous AT given was not valid, delete it"
},
"del": {
"type": "boolean",
"name": "Delayed",
"description": "If this train is delayed (Display delayed if no ET/AT)"
},
"src": {
"type": "string",
"name": "Data source",
"description": "The source of this data (Darwin/Trust/CIS etc)"
}
}
},
"platformStatus": {
"type": "object",
"name": "PlatformData",
"required": [
"sup"
],
"properties": {
"sup": {
"type": "boolean",
"name": "Suppressed",
"description": "Whether the platform is suppressed (hidden to public)"
},
"n": {
"type": "string",
"name": "Platform Number",
"description": "The platform at which this event will occur"
},
"src": {
"type": "string",
"name": "Data source",
"description": "The name of the source of the platform data"
},
"c": {
"type": "boolean",
"name": "Platform Confirmed",
"description": "Whether the platform has been confirmed by local CIS"
},
"cisSup": {
"type": "boolean",
"name": "CIS suppressed",
"description": "Whether the local CIS has suppressed the platform (not needed to determine whether to suppress or not)"
}
}
}
}
}

View File

@@ -0,0 +1,118 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/association.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinAssocData",
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "Name of the service submitting the update"
},
"service_id": {
"type": "string",
"description": "ID of the service sending the message - usually a hostname"
},
"data_type": {
"type": "string",
"const": "raw",
"description": "The type of data contained in this message object"
},
"sent_timestamp": {
"type": "integer",
"description": "Unix timestamp representing the time the message was sent"
},
"data_kind": {
"type": "string",
"const": "darwin-association",
"description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
},
"payload": {
"type": "array",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"mr",
"ar",
"t",
"c",
"s",
"mt",
"at"
],
"properties": {
"mr": {
"type": "string",
"name": "Main RID",
"description": "The main RID of this association object"
},
"ar": {
"type": "string",
"name": "Associated RID",
"description": "The associated RID of this association object"
},
"t": {
"type": "string",
"name": "TIPLOC",
"description": "The location at which this association applies"
},
"c": {
"enum": ["JJ", "VV", "LK", "NP"],
"name": "Category",
"description": "The type of association"
},
"s": {
"type": "string",
"format": "date",
"name": "SSD",
"description": "SSD Generated from the Main RID"
},
"mt": {
"name": "Main Times",
"description": "Timings that apply to the main RID",
"type": "object",
"properties": {
"wta": { "type": "string" },
"wtd": { "type": "string" },
"wtp": { "type": "string" },
"pta": { "type": "string" },
"ptd": { "type": "string" }
}
},
"at": {
"name": "Associated Times",
"description": "Timings that apply to the associated RID",
"type": "object",
"properties": {
"wta": { "type": "string" },
"wtd": { "type": "string" },
"wtp": { "type": "string" },
"pta": { "type": "string" },
"ptd": { "type": "string" }
}
},
"can": {
"name": "Cancelled",
"type": "boolean",
"description": "Whether this association is cancelled"
},
"del": {
"name": "Deleted",
"type": "boolean",
"description": "Whether this association is deleted"
}
}
}
}
},
"required": [
"service_name",
"service_id",
"data_type",
"data_kind",
"sent_timestamp",
"payload"
],
"additionalProperties": false
}

View File

@@ -0,0 +1,66 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/OW.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinOwData",
"type": "object",
"required": [
"i",
"d"
],
"additionalProperties": false,
"properties": {
"i": {
"type": "string",
"name": "ID",
"description": "Unique ID of the incident message"
},
"c": {
"type": "string",
"name": "Category",
"description": "Category of the incident message"
},
"s": {
"type": "integer",
"name": "Severity",
"description": "The severity of the incident"
},
"l": {
"type": "array",
"name": "locations",
"description": "CRS Locations at which the message applies",
"additionalItems": false,
"items": {
"type": "string",
"name": "CRS",
"description": "CRS Location where this message applies"
}
},
"d": {
"type": "boolean",
"name": "Delete",
"description": "If true, the message is to be deleted"
},
"m": {
"type": "object",
"name": "Message",
"description": "The message properties",
"properties": {
"l": {
"type": "string",
"name": "href",
"description": "URL where further information can be found"
},
"lt": {
"type": "string",
"name": "href-text",
"description": "Text that should be displayed as part of the href"
},
"m": {
"type": "string",
"name": "Message text",
"description": "The text to be displayed"
}
}
}
}
}

View File

@@ -0,0 +1,229 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/schedule.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinScheduleData",
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "Name of the service submitting the update"
},
"service_id": {
"type": "string",
"description": "ID of the service sending the message - usually a hostname"
},
"data_type": {
"type": "string",
"const": "raw",
"description": "The type of data contained in this message object"
},
"sent_timestamp": {
"type": "integer",
"description": "Unix timestamp representing the time the message was sent"
},
"data_kind": {
"type": "string",
"const": "darwin-schedule",
"description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
},
"payload": {
"type": "array",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"rid",
"uid",
"ssd",
"tid",
"toc",
"isp",
"isc",
"l"
],
"properties": {
"rid": {
"type": "string",
"description": "Service RID",
"maxLength": 16
},
"uid": {
"type": "string",
"description": "Service UID",
"maxLength": 10
},
"ssd": {
"type": "string",
"format": "date",
"description": "Date on which the service commences"
},
"tid": {
"name": "train_id",
"type": "string",
"minLength": 4,
"maxLength": 4,
"description": "The signalling headcode of the service"
},
"toc": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "The two character code for the operating TOC"
},
"sts": {
"type": "string",
"maxLength": 1,
"name": "status",
"description": "The 'status' of the service"
},
"qt": {
"name": "qtrain",
"description": "qtrain?",
"type": "boolean",
"default": false
},
"d": {
"name": "deleted",
"description": "Whether the schedule is deleted",
"type": "boolean",
"default": false
},
"isp": {
"name": "is_passenger",
"type": "boolean",
"description": "Whether the service is a passenger service"
},
"isc": {
"name": "is_charter",
"type": "boolean",
"description": "Whether the service is a charter service"
},
"sid": {
"name": "rsid",
"type": ["string", "null"],
"maxLength": 10
},
"q": {
"name": "qtrain",
"description": "True if the service is scheduled but not activated (if not activated, presumed not running)",
"type": "boolean",
"default": false
},
"tc": {
"name": "trainCat",
"description": "Train Category",
"type": "string"
},
"cr": {
"name": "cancel_reason",
"type": ["integer", "null"],
"description": "The reason code for the services cancellation"
},
"cl": {
"name": "cancel_location",
"type": "string",
"description": "The location at which the service was cancelled"
},
"cn": {
"name": "cancel_near",
"description": "Whether the incident happened 'near' cancel_location, or AT cancel_location (default, false, at location)"
},
"l": {
"type": "array",
"minItems": 2,
"items": {
"type": "object",
"required": ["tpl", "lr", "s"],
"properties": {
"tpl": {
"type": "string",
"description": "The locations TIPLOC",
"maxLength": 7,
"minLength": 4
},
"rd": {
"name": "rdelay",
"description": "Route Delay",
"type": "integer"
},
"p": {
"name": "platform",
"description": "Scheduled platform",
"type": "string",
"maxLength": 4
},
"lr": {
"name": "loc_role",
"description": "The role of the location (Orig, Call, Pass, Dest)",
"enum": ["ORIG", "CALL", "PASS", "DEST"]
},
"s": {
"name": "seq",
"description": "The sequence in the service at which this location occours",
"type": "integer",
"minimum": 1,
"maximum": 2147483647
},
"pta": {
"description": "Public timetable arrival",
"type": "string",
"format": "date-time"
},
"ptd": {
"description": "Public timetable departure",
"type": "string",
"format": "date-time"
},
"wta": {
"description": "Working timetable arrival",
"type": "string",
"format": "date-time"
},
"wtd": {
"description": "Working timetable arrival",
"type": "string",
"format": "date-time"
},
"wtp": {
"description": "Working timetable pass",
"type": "string",
"format": "date-time"
},
"c": {
"name": "can",
"description": "Whether the service is cancelled at this location",
"default": false,
"type": "boolean"
},
"a": {
"name": "activities",
"type": "string",
"maxLength": 12
},
"fid": {
"description": "Unique formation indentifier (Maps to formation feed)",
"type": "string"
},
"al": {
"name": "avg_loading",
"description": "Average loading at this location",
"type": "integer"
}
}
}
}
}
}
}
},
"required": [
"service_name",
"service_id",
"data_type",
"data_kind",
"sent_timestamp",
"payload"
],
"additionalProperties": false
}

View File

@@ -0,0 +1,50 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/ref/stations.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinStationsNames",
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "Name of the service submitting the update"
},
"service_id": {
"type": "string",
"description": "ID of the service sending the message - usually a hostname"
},
"data_type": {
"type": "string",
"const": "raw",
"description": "The type of data contained in this message object"
},
"sent_timestamp": {
"type": "integer",
"description": "Unix timestamp representing the time the message was sent"
},
"data_kind": {
"type": "string",
"const": "ref-darwin-station-names",
"description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
},
"payload": {
"type": "array",
"additionalItems": false,
"items": {
"type": "object",
"required": ["c", "n"],
"properties": {
"c": {
"type": "string",
"description": "CRS of the location"
},
"n": {
"type": "string",
"description": "The display name of this location"
}
}
}
}
},
"required": ["service_name", "service_id", "data_type", "data_kind", "sent_timestamp"],
"additionalProperties": false
}

View File

@@ -0,0 +1,58 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/ref/tiplocs.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinTiplocData",
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "Name of the service submitting the update"
},
"service_id": {
"type": "string",
"description": "ID of the service sending the message - usually a hostname"
},
"data_type": {
"type": "string",
"const": "raw",
"description": "The type of data contained in this message object"
},
"sent_timestamp": {
"type": "integer",
"description": "Unix timestamp representing the time the message was sent"
},
"data_kind": {
"type": "string",
"const": "ref-darwin-tiplocs",
"description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
},
"payload": {
"type": "array",
"additionalItems": false,
"items": {
"type": "object",
"required": ["t", "n"],
"properties": {
"c": {
"type": "string",
"description": "CRS of the location"
},
"t": {
"type": "string",
"description": "TIPLOC assigned to the location"
},
"n": {
"type": "string",
"description": "The display name of this location"
},
"l": {
"type": "string",
"description": "The NLC of this location"
}
}
}
}
},
"required": ["service_name", "service_id", "data_type", "data_kind", "sent_timestamp"],
"additionalProperties": false
}

View File

@@ -0,0 +1,67 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/ref/via-text.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinViaText",
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "Name of the service submitting the update"
},
"service_id": {
"type": "string",
"description": "ID of the service sending the message - usually a hostname"
},
"data_type": {
"type": "string",
"const": "raw",
"description": "The type of data contained in this message object"
},
"sent_timestamp": {
"type": "integer",
"description": "Unix timestamp representing the time the message was sent"
},
"data_kind": {
"type": "string",
"const": "ref-darwin-via-text",
"description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
},
"payload": {
"type": "array",
"additionalItems": false,
"items": {
"type": "object",
"required": ["a", "d", "l1", "v"],
"properties": {
"a": {
"name": "at",
"type": "string",
"description": "The CRS defining where the text should be displayed"
},
"d": {
"name": "destination",
"type": "string",
"description": "The text should apply to trains to this destination"
},
"l1": {
"name": "location-one",
"type": "string",
"description": "Message triggered if loc1 & loc2 (if present) are listed as stops"
},
"l2": {
"name": "location-two",
"type": "string",
"description": "Message triggered if loc1 & loc2 (if present) are listed as stops"
},
"v": {
"name": "viaText",
"description": "The text that should be displayed",
"type": "string"
}
}
}
}
},
"required": ["service_name", "service_id", "data_type", "data_kind", "sent_timestamp"],
"additionalProperties": false
}

View File

@@ -0,0 +1,77 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/ref/loading-category.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinLoadingCatData",
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "Name of the service submitting the update"
},
"service_id": {
"type": "string",
"description": "ID of the service sending the message - usually a hostname"
},
"data_type": {
"type": "string",
"const": "raw",
"description": "The type of data contained in this message object"
},
"sent_timestamp": {
"type": "integer",
"description": "Unix timestamp representing the time the message was sent"
},
"data_kind": {
"type": "string",
"const": "ref-darwin-loading-category",
"description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
},
"payload": {
"type": "array",
"additionalItems": false,
"items": {
"type": "object",
"required": ["c", "n"],
"properties": {
"c": {
"name": "code",
"type": "string",
"description": "The 'code' for the 'category'"
},
"t": {
"name": "typicalDescription",
"type": "string",
"description": "The 'typicalDescription' of the category"
},
"e": {
"name": "expectedDescription",
"type": "string",
"description": "The 'expectedDescription' of the category"
},
"d": {
"name": "definition",
"description": "The 'definition' of the category",
"type": "string"
},
"n": {
"name": "name",
"description": "The 'name' of the category",
"type": "string"
},
"i": {
"name": "image",
"description": "The 'image' for the category",
"type": "string"
},
"o": {
"name": "TOC",
"description": "The 'toc' for the category",
"type": "string"
}
}
}
}
},
"required": ["service_name", "service_id", "data_type", "data_kind", "sent_timestamp"],
"additionalProperties": false
}

View File

@@ -0,0 +1,57 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/ref/reasons.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinReasonCodeData",
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "Name of the service submitting the update"
},
"service_id": {
"type": "string",
"description": "ID of the service sending the message - usually a hostname"
},
"data_type": {
"type": "string",
"const": "raw",
"description": "The type of data contained in this message object"
},
"sent_timestamp": {
"type": "integer",
"description": "Unix timestamp representing the time the message was sent"
},
"data_kind": {
"type": "string",
"const": "ref-darwin-reason-code",
"description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
},
"payload": {
"type": "array",
"additionalItems": false,
"items": {
"type": "object",
"required": ["c"],
"properties": {
"c": {
"type": "integer",
"name": "code",
"description": "The 'code' that the late/cancel reason maps to"
},
"lr": {
"type": "string",
"name": "Late Reason",
"description": "The lateReason string for the item"
},
"cr": {
"type": "string",
"name": "Cancellation Reason",
"description": "The cancelReason string for the item"
}
}
}
}
},
"required": ["service_name", "service_id", "data_type", "data_kind", "sent_timestamp"],
"additionalProperties": false
}

View File

@@ -0,0 +1,57 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/ref/tocs.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinTocData",
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "Name of the service submitting the update"
},
"service_id": {
"type": "string",
"description": "ID of the service sending the message - usually a hostname"
},
"data_type": {
"type": "string",
"const": "raw",
"description": "The type of data contained in this message object"
},
"sent_timestamp": {
"type": "integer",
"description": "Unix timestamp representing the time the message was sent"
},
"data_kind": {
"type": "string",
"const": "ref-darwin-toc",
"description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
},
"payload": {
"type": "array",
"additionalItems": false,
"items": {
"type": "object",
"required": ["c", "n"],
"properties": {
"c": {
"name": "ATOC Code",
"type": "string",
"description": "The ATOC 'code' for the TOC"
},
"n": {
"name": "TOC Name",
"type": "string",
"description": "The name of the TOC"
},
"u": {
"name": "URL",
"type": "string",
"description": "URL for TOC Information"
}
}
}
}
},
"required": ["service_name", "service_id", "data_type", "data_kind", "sent_timestamp"],
"additionalProperties": false
}

View File

@@ -0,0 +1,119 @@
{
"$id": "https://schema.owlboard.info/data-ingress/knowledgebase/stations.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "KnowledgebaseStations",
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "Name of the service submitting the update"
},
"service_id": {
"type": "string",
"description": "ID of the service sending the message - usually a hostname"
},
"data_type": {
"type": "string",
"const": "raw",
"description": "The type of data contained in this message object"
},
"sent_timestamp": {
"type": "integer",
"description": "Unix timestamp representing the time the message was sent"
},
"data_kind": {
"type": "string",
"const": "kb-stations"
},
"payload": {
"type": "array",
"additionalItems": false,
"items": {
"type": "object",
"required": [
"c",
"mc",
"l",
"o",
"p",
"a",
"r",
"d"
],
"properties": {
"c": {
"type": "string",
"name": "CRS Code",
"description": "Station CRS (Primary Key)"
},
"n": {
"type": "string",
"name": "NLC Code",
"description": "Station NLC Code"
},
"mc": {
"type": "number",
"name": "Minimum Connection Time",
"description": "The minimum connection time at this station"
},
"a": {
"type": "string",
"name": "Address",
"description": "The address of the station"
},
"p": {
"type": "string",
"name": "Postcode",
"description": "The public postcode of the station"
},
"l": {
"type": "object",
"name": "Location",
"description": "LatLon of the station",
"required": ["lt", "ln"],
"properties": {
"lt": {
"type": "number",
"name": "Latitude",
"description": "Stations Latitude"
},
"ln": {
"type": "number",
"name": "Longitude",
"description": "Stations Longitude"
}
}
},
"o": {
"type": "string",
"name": "Operator",
"description": "The two character code denoting the stations operator"
},
"m": {
"type": "string",
"name": "Map URL"
},
"r": {
"name": "Request",
"type": "boolean",
"description": "Denotes whether station is Request Stop"
},
"d": {
"name": "Defibrillator",
"type": "boolean",
"description": "Denotes whether defibrillator is available"
}
}
}
}
},
"required": [
"service_name",
"service_id",
"data_type",
"data_kind",
"sent_timestamp",
"payload"
],
"additionalProperties": false
}

View File

@@ -0,0 +1,33 @@
{
"$id": "https://schema.owlboard.info/data-ingress/message-envelope.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "MessageEnvelope",
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "Name of the service submitting the update"
},
"service_id": {
"type": "string",
"description": "ID of the service sending the message - usually a hostname"
},
"data_type": {
"type": "string",
"enum": ["file", "raw"],
"description": "The type of data contained in this message object"
},
"sent_timestamp": {
"type": "integer",
"description": "Unix timestamp representing the time the message was sent"
},
"data_kind": {
"type": "string",
"enum": ["pis", "timetable", "kb-stations", "PushPort16Schedule", "darwin_ts", "darwin_ref"],
"description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
},
"payload": {}
},
"required": ["service_name", "service_id", "data_type", "data_kind", "sent_timestamp"],
"additionalProperties": false
}

View File

@@ -8,23 +8,27 @@
"type": "string",
"description": "Name of the service submitting the update"
},
"update_type": {
"service_id": {
"type": "string",
"description": "ID of the service sending the message - usually a hostname"
},
"data_type": {
"type": "string",
"enum": ["file"],
"description": "The method of update application"
"description": "The type of data contained in this message object"
},
"sent_timestamp": {
"type": "integer",
"description": "Unix timestamp representing the time the message was sent"
},
"data_kind": {
"type": "string",
"enum": ["pis", "timetable", "knowledgebase"],
"description": "The data type contained in the file. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
},
"payload": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": ["pis"],
"description": "The type of data provided in the update"
},
"version": {
"type": "string",
"description": "The version string from the package source"
@@ -34,9 +38,10 @@
"description": "The full path to the file, including protocol (eg. s3://) where appropriate"
}
},
"required": ["kind", "version", "filepath"]
"required": ["version", "filepath"],
"additionalProperties": false
}
},
"required": ["service_name", "update_type", "payload"],
"required": ["service_name", "service_id", "data_type", "sent_timestamp", "data_kind", "payload"],
"additionalProperties": false
}

View File

@@ -0,0 +1,30 @@
{
"$id": "https://schema.owlboard.info/data-ingress/network-rail/networkRailCorpus.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "networkRailCorpus",
"type": "object",
"required": [
"t",
"n"
],
"additionalProperties": false,
"properties": {
"t": {
"type": "string",
"name": "TIPLOC",
"description": "The TIPLOC Code of the location"
},
"n": {
"type": "string",
"name": "Name",
"description": "The human readable name of the location"
},
"nc": {
"type": "integer",
"name": "NLC",
"description": "The national location code of the location",
"minimum": 0,
"maximum": 999999
}
}
}

View File

@@ -25,13 +25,6 @@
},
"description": "List of 3ALPHA/CRS Codes"
},
"crsHash": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[0-9]+$",
"description": "Stringified 64-bit hash"
},
"tiplocStops": {
"type": "array",
"items": {
@@ -41,14 +34,8 @@
"pattern": "^[a-zA-Z0-9]+$"
},
"description": "List of TIPLOC Codes"
},
"tiplocHash": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[0-9]+$"
}
},
"required": ["code", "toc", "crsStops", "crsHash", "tiplocStops", "tiplocHash"],
"required": ["code", "toc", "crsStops", "tiplocStops"],
"additionalProperties": false
}

View File

@@ -18,7 +18,7 @@ for file in $FILES; do
npx --yes json-schema-to-typescript "$file" > "gen/ts/${clean_name}.ts"
# Generate Go
go-jsonschema -p models "$file" > "gen/go/models/${clean_name}.go"
go-jsonschema -p contracts "$file" > "gen/go/models/${clean_name}.go"
done
echo "✅ Generated single TS package in gen/ts"