From 06e6bceb59e26018a53d3462329aeb5c254321c8 Mon Sep 17 00:00:00 2001 From: Fred Boniface Date: Wed, 25 Feb 2026 16:21:40 +0000 Subject: [PATCH] Final Draft of 16schedule.json --- schemas/data-ingress/pushport/16schedule.json | 405 +++++++++--------- schemas/data-ingress/pushport/helper | 87 ---- 2 files changed, 208 insertions(+), 284 deletions(-) diff --git a/schemas/data-ingress/pushport/16schedule.json b/schemas/data-ingress/pushport/16schedule.json index 02481f9..5148055 100644 --- a/schemas/data-ingress/pushport/16schedule.json +++ b/schemas/data-ingress/pushport/16schedule.json @@ -2,20 +2,183 @@ "$id": "https://schema.owlboard.info/data-ingress/pushport16-schedule.schema.json", "$schema": "https://json-schema.org/draft-07/schema#", "title": "PushPortSchedule", + "description": "Consolidated object definition for Darwin Schedule messages", "definitions": { - "SchedLocAttr": { + "SchedLocAttributes": { "type": "object", "description": "Attributes common to all schedule locations", - "required": ["tpl"], + "required": [ + "tpl" + ], "properties": { - "tpl": {"type": "string", "description": "TIPLOC"}, - "act": {"type": "string", "description": "Activities at this location"}, - "planAct": {"type": "string", "description": "Planned activities at this location"}, - "can": {"type": "boolean", "description": "Train cancelled flag"}, - "fid": {"type": "boolean", "description": "Unique identifier of the trains formation"} + "tpl": { + "type": "string", + "description": "TIPLOC" + }, + "act": { + "type": "string", + "default": " ", + "description": "Current Activity Codes" + }, + "planAct": { + "type": "string", + "description": "Planned Activity Codes" + }, + "can": { + "type": "boolean", + "default": false, + "description": "Cancelled flag" + }, + "fid": { + "type": "string", + "description": "Unique identifier of the formation data (v3) " + } } + }, + "CallPtAttributes": { + "type": "object", + "description": "Attributes for Calling Points (Optional for Operational variants)", + "properties": { + "pta": { + "type": "string", + "description": "Public Scheduled Time of Arrival" + }, + "ptd": { + "type": "string", + "description": "Public Scheduled Time of Departure" + }, + "avgLoading": { + "type": "string", + "description": "Average Loading value based on long-term averages (v3) " + } + } + }, + "originPoint": { + "description": "Merged Origin (OR / OPOR). The starting point of the journey.", + "required": [ + "wtd" + ], + "allOf": [ + { + "$ref": "#/definitions/SchedLocAttributes" + }, + { + "$ref": "#/definitions/CallPtAttributes" + }, + { + "type": "object", + "properties": { + "wta": { + "type": "string", + "description": "Working Scheduled Time of Arrival (Optional)" + }, + "wtd": { + "type": "string", + "description": "Working Scheduled Time of Departure (Required)" + }, + "fd": { + "type": "string", + "description": "False Destination TIPLOC (Passenger only)" + } + } + } + ] + }, + "callingPoint": { + "description": "Merged Intermediate Point (IP / OPIP). An intermediate stop requiring dwell time.", + "required": [ + "wta", + "wtd" + ], + "allOf": [ + { + "$ref": "#/definitions/SchedLocAttributes" + }, + { + "$ref": "#/definitions/CallPtAttributes" + }, + { + "type": "object", + "properties": { + "wta": { + "type": "string", + "description": "Working Scheduled Time of Arrival (Required)" + }, + "wtd": { + "type": "string", + "description": "Working Scheduled Time of Departure (Required)" + }, + "rdelay": { + "type": "integer", + "default": 0, + "description": "Route delay value" + }, + "fd": { + "type": "string", + "description": "False Destination (Passenger only)" + } + } + } + ] + }, + "passPoint": { + "description": "Intermediate Passing Point (PP). Purely operational.", + "required": [ + "wtp" + ], + "allOf": [ + { + "$ref": "#/definitions/SchedLocAttributes" + }, + { + "type": "object", + "properties": { + "wtp": { + "type": "string", + "description": "Working Scheduled Time of Passing (Required)" + }, + "rdelay": { + "type": "integer", + "default": 0, + "description": "Route delay value" + } + }, + "additionalProperties": false + } + ] + }, + "destinationPoint": { + "description": "Merged Destination (DT / OPDT). The termination point of the journey.", + "required": [ + "wta" + ], + "allOf": [ + { + "$ref": "#/definitions/SchedLocAttributes" + }, + { + "$ref": "#/definitions/CallPtAttributes" + }, + { + "type": "object", + "properties": { + "wta": { + "type": "string", + "description": "Working Scheduled Time of Arrival (Required)" + }, + "wtd": { + "type": "string", + "description": "Working Scheduled Time of Departure (Optional)" + }, + "rdelay": { + "type": "integer", + "default": 0, + "description": "Route delay value" + } + } + } + ] } - // Call Point Attributes. }, "type": "object", "properties": { @@ -38,14 +201,7 @@ }, "data_kind": { "type": "string", - "enum": [ - "pis", - "timetable", - "knowledgebase", - "darwin_schedule", - "darwin_ts", - "darwin_ref" - ], + "const": "PushPort16Schedule", "description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data" }, "payload": { @@ -59,187 +215,42 @@ "locations" ], "properties": { - "rid": { - "type": "string", - "description": "Unique service ID" - }, - "uid": { - "type": "string", - "description": "Unique schedule ID - maps to NR CIF" - }, - "trainId": { - "type": "string", - "description": "Train Headcode" - }, - "ssd": { - "type": "string", - "format": "date", - "description": "Schedule Start Date (When the service commences)" - }, - "toc": { - "type": "string", - "minLength": 2, - "maxLength": 2, - "description": "TOC Code" - }, - "isPassenger": { - "type": "boolean", - "description": "If service is for passengers", - "default": true - }, - "isCharter": { - "type": "boolean", - "description": "If train is charter service", - "default": false - }, - "status": { - "type": "string", - "enum": [ - "train", - "bus", - "ship" - ], - "default": "train" - }, - "isDelayedDelivery": { - "type": "boolean", - "description": "If message is sent as part of Darwin service recovery" - }, - "cancelReason": { - "type": [ - "string", - "null" - ], - "description": "Reason code for cancellation" - }, - "isDeleted": { - "type": "boolean", - "description": "Whether schedule should be deleted", - "default": false - }, + "rid": {"type": "string", "description": "Rail Identifier - Unique value for the service"}, + "uid": {"type": "string", "description": "Unique ID - Unique value for the timetable entry - maps to Network Rail CIF schedules"}, + "ssd": {"type": "string", "format": "date", "description": "Service Start Date - The date the service commences"}, + "trainId": {"type": "string", "description": "Headcode"}, + "toc": {"type": "string", "minLength": 2, "maxLength": 2, "description": "Train Operator (ATOC Code)"}, + "rsid": {"type": "string", "description": "Retail Service ID"}, + "status": {"type": "string", "default": "P", "description": "P = Permanent, L = Long Term, S = Short Term"}, + "trainCat": {"type": "string", "default": "OO", "description": "Train Category"}, + "isPassenger": {"type": "boolean", "default": true, "description": "Declares the service as a passenger service"}, + "isActive": {"type": "boolean", "default": false, "description": "UNKNOWN"}, + "isCharter": {"type": "boolean", "default": false, "description": "Declares the service as a charter service"}, + "cancelReason": {"type": "integer", "description": "Cancellation Reason code"}, + "locations": { - "type": "array", - "items": { - "type": "object", - "required": [ - "tpl", - "seq" - ], - "properties": { - "tpl": { - "type": "string", - "description": "TIPLOC of location" - }, - "seq": { - "type": "integer", - "description": "The order of the stop for sorting and handling repeated TIPLOCs" - }, - "wta": { - "type": [ - "string", - "null" - ] - }, - "wtd": { - "type": [ - "string", - "null" - ] - }, - "wtp": { - "type": [ - "string", - "null" - ] - }, - "pta": { - "type": [ - "string", - "null" - ] - }, - "ptd": { - "type": [ - "string", - "null" - ] - }, - "plat": { - "type": [ - "string", - "null" - ] - }, - "isCancelled": { - "type": "boolean", - "default": false - }, - "isSupressed": { - "type": "boolean", - "default": false, - "description": "Defines whether the service should be hidden to the public" - }, - "activities": { - "type": "object", - "properties": { - "pass": { - "type": "boolean", - "description": "Indicates that the train does not stop, it only passes this location" - }, - "pickUpDropOff": { - "type": "boolean", - "description": "Indicates the train stops for passengers to board and alight" - }, - "requestStop": { - "type": "boolean", - "description": "Indicates if the train stops only when required" - }, - "pickUpOnly": { - "type": "boolean", - "description": "Indicated the service picks up passengers only" - }, - "dropOffOnly": { - "type": "boolean", - "description": "Indicates the service drops off passengers only" - }, - "tokenExchange": { - "type": "boolean", - "description": "Indicates if the train stops for exhanging a token/staff or similar" - }, - "vehiclesAttached": { - "type": "boolean", - "description": "Indicates if vehicles are attached at this location" - }, - "vehiclesDetached": { - "type": "boolean", - "description": "Indicates if vehicles are detached at this location" - }, - "trainCrewChange": { - "type": "boolean", - "description": "Indicates if train stops to exchange crew at this location" - }, - "changeLocomotive": { - "type": "boolean", - "description": "Indicates if train stops to exchange locomotive at this location" - }, - "changeEnds": { - "type": "boolean", - "description": "Indicates if the train reverses or driver changes ends at this location" - }, - "staffStop": { - "type": "boolean", - "description": "Indicates that the train stops for staff use only" - }, - "unadvertised": { - "type": "boolean", - "description": "Indicates that the stop is not advertised to the public" - }, - "passesAnotherTrain": { - "type": "boolean", - "description": "Indicates if the train stops to pass another train on a single line crossing point" - } - } - } + "type": "object", + "description": "Merged and flattened location objects", + "properties": { + "OR": { + "type": "array", + "description": "OR/OPOR Values - Trains Origin", + "items": {"$ref": "#/definitions/originPoint"} + }, + "IP": { + "type": "array", + "description": "IP/OPIP Values - Intermediate Points", + "items": {"$ref": "#/definitions/callingPoint"} + }, + "PP": { + "type": "array", + "description": "Passing Points (Non-stop)", + "items": {"$ref": "#/definitions/passPoint"} + }, + "DT": { + "type": "array", + "description": "DT/OPDT Values - Trains Destination", + "items": {"$ref": "#/definitions/destinationPoint"} } } } @@ -252,5 +263,5 @@ "data_type", "sent_timestamp" ], - "additionalProperties": true + "additionalProperties": false } \ No newline at end of file diff --git a/schemas/data-ingress/pushport/helper b/schemas/data-ingress/pushport/helper index 5088e47..e69de29 100644 --- a/schemas/data-ingress/pushport/helper +++ b/schemas/data-ingress/pushport/helper @@ -1,87 +0,0 @@ -"definitions": { - "SchedLocAttributes": { - "type": "object", - "description": "Attributes common to all schedule locations", - "required": ["tpl"], - "properties": { - "tpl": { "type": "string", "description": "TIPLOC" }, - "act": { "type": "string", "default": " ", "description": "Current Activity Codes" }, - "planAct": { "type": "string", "description": "Planned Activity Codes" }, - "can": { "type": "boolean", "default": false, "description": "Cancelled flag" }, - "fid": { "type": "string", "description": "Unique identifier of the formation data (v3) " } - } - }, - "CallPtAttributes": { - "type": "object", - "description": "Attributes for Calling Points (Optional for Operational variants)", - "properties": { - "pta": { "type": "string", "description": "Public Scheduled Time of Arrival" }, - "ptd": { "type": "string", "description": "Public Scheduled Time of Departure" }, - "avgLoading": { "type": "string", "description": "Average Loading value based on long-term averages (v3) " } - } - }, - "originPoint": { - "description": "Merged Origin (OR / OPOR). The starting point of the journey.", - "required": ["wtd"], - "allOf": [ - { "$ref": "#/definitions/SchedLocAttributes" }, - { "$ref": "#/definitions/CallPtAttributes" }, - { - "type": "object", - "properties": { - "wta": { "type": "string", "description": "Working Scheduled Time of Arrival (Optional)" }, - "wtd": { "type": "string", "description": "Working Scheduled Time of Departure (Required)" }, - "fd": { "type": "string", "description": "False Destination TIPLOC (Passenger only)" } - } - } - ] - }, - "callingPoint": { - "description": "Merged Intermediate Point (IP / OPIP). An intermediate stop requiring dwell time.", - "required": ["wta", "wtd"], - "allOf": [ - { "$ref": "#/definitions/SchedLocAttributes" }, - { "$ref": "#/definitions/CallPtAttributes" }, - { - "type": "object", - "properties": { - "wta": { "type": "string", "description": "Working Scheduled Time of Arrival (Required)" }, - "wtd": { "type": "string", "description": "Working Scheduled Time of Departure (Required)" }, - "rdelay": { "type": "integer", "default": 0, "description": "Route delay value" }, - "fd": { "type": "string", "description": "False Destination (Passenger only)" } - } - } - ] - }, - "passPoint": { - "description": "Intermediate Passing Point (PP). Purely operational.", - "required": ["wtp"], - "allOf": [ - { "$ref": "#/definitions/SchedLocAttributes" }, - { - "type": "object", - "properties": { - "wtp": { "type": "string", "description": "Working Scheduled Time of Passing (Required)" }, - "rdelay": { "type": "integer", "default": 0, "description": "Route delay value" } - }, - "additionalProperties": false - } - ] - }, - "destinationPoint": { - "description": "Merged Destination (DT / OPDT). The termination point of the journey.", - "required": ["wta"], - "allOf": [ - { "$ref": "#/definitions/SchedLocAttributes" }, - { "$ref": "#/definitions/CallPtAttributes" }, - { - "type": "object", - "properties": { - "wta": { "type": "string", "description": "Working Scheduled Time of Arrival (Required)" }, - "wtd": { "type": "string", "description": "Working Scheduled Time of Departure (Optional)" }, - "rdelay": { "type": "integer", "default": 0, "description": "Route delay value" } - } - } - ] - } -} \ No newline at end of file