diff --git a/schemas/data-ingress/pushport/16schedule.json b/schemas/data-ingress/pushport/16schedule.json new file mode 100644 index 0000000..02481f9 --- /dev/null +++ b/schemas/data-ingress/pushport/16schedule.json @@ -0,0 +1,256 @@ +{ + "$id": "https://schema.owlboard.info/data-ingress/pushport16-schedule.schema.json", + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "PushPortSchedule", + "definitions": { + "SchedLocAttr": { + "type": "object", + "description": "Attributes common to all schedule locations", + "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"} + } + } + // Call Point Attributes. + }, + "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": "PushPort16Schedule", + "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", + "darwin_schedule", + "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": { + "type": "object", + "required": [ + "rid", + "uid", + "trainId", + "ssd", + "toc", + "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 + }, + "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" + } + } + } + } + } + } + } + } + }, + "required": [ + "service_name", + "service_id", + "data_type", + "sent_timestamp" + ], + "additionalProperties": true +} \ No newline at end of file diff --git a/schemas/data-ingress/pushport/helper b/schemas/data-ingress/pushport/helper new file mode 100644 index 0000000..5088e47 --- /dev/null +++ b/schemas/data-ingress/pushport/helper @@ -0,0 +1,87 @@ +"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