Inhaltsverzeichnis

Auf der Seite suchen

Open Sales and Distribution Model Offline File Schweiz

OSDM wurde entwickelt, um Tarifinformationen auszutauschen und Buchungen zwischen den internationalen Bahnen zu ermöglichen. Die Datei zeigt auch, wie OSDM arbeitet. Bei Interesse an diesem Dataset kann es notwendig sein, mit uns Kontakt aufzunehmen: opendata@sbb.ch.

(URL slug: osdm-offline)

Fachliche Beschreibung

NOVA berechnet Tarife für den öV Schweiz. Für den Austausch mit den grossen Bahnen werden bestimmte Strecken vorberechnet (z.B. Spiez – Thun, Spiez – Bern, Spiez – Olten etc.). Diese Preise werden in der OSDM Offline-Datei ausgetauscht. In der Datei sind nur die Daten enthalten, die aus Sicht NOVA für den internationalen Ticket-Verkauf relevant sind. Nahverkehr ist daher nicht oder nur sehr begrenzt enthalten.

Da die Grösse der Datei mit dem Faktor  n^2 wächst mit der Anzahl Haltestellen, ist es auch nicht so einfach, die Datei zu vervollständigen.

Wichtig: Die vorhandenen Daten stellen keine hinreichende Bedingung für den Ticket-Verkauf durch Dritte dar.

Technische Aspekte

OSDM ist ein JSON-basierter Standard. Mit der Offline-Datei kratzen wir nur an der Oberfläche, was OSDM kann. OSDM ist ein Standard, der namentlich von der SBB mitentwickelt wird.

Als Beispiel ist Buchs-Zürich hier ausgeführt.

{
    "delivery": { 
        "fareProvider": "1185",
        "deliveryId": "1",
        "optionalDelivery": false,
        "version": "1.2",
        "acceptedVersion": "1.2"
    },
    "fareStructure": {
        "calendars": [
            {
                "id": "calendar-1",
                "fromDate": "2020-09-12 23:00:00 +0000",
                "untilDate": "2021-09-12 23:00:00 +0000",
                "utcOffset": 120
            }
        ],
        "serviceClassDefinitions": [
            {
                "id": "serviceClass-1",
                "textRef": "",
                "text": "Erste Klasse",
                "comfortClass": "FIRST"
            },
            {
                "id": "serviceClass-2",
                "textRef": "",
                "text": "Zweite Klasse",
                "comfortClass": "SECOND"
            }
        ],
        "serviceLevelDefinition": null,
        "texts": [
            {
                "id": "text-1",
                "textUTF8": "1. Klasse",
                "text": "1. Klasse",
                "shortTextUtf8": "1. Klasse",
                "shortText": "1. Klasse"
            },
            {
                "id": "text-2",
                "textUTF8": "2. Klasse",
                "text": "2. Klasse",
                "shortTextUtf8": "2. Klasse",
                "shortText": "2. Klasse"
            },
            {
                "id": "text-3",
                "textUtf8": "Halbtax 1. Klasse",
                "text": "Halbtax 1. Klasse",
                "shortTextUtf": "Halbtax 1. Klasse",
                "shortText": "Halbtax 1. Klasse"
            },
            {
                "id": "text-4",
                "textUtf8": "Halbtax 2. Klasse",
                "text": "Halbtax 2. Klasse",
                "shortTextUtf": "Halbtax 2. Klasse",
                "shortText": "Halbtax 2. Klasse"
            },
            {
                "id": "text-6",
                "textUtf8": "FIP",
                "text": "FIP",
                "shortTextUtf": "FIP",
                "shortText": "FIP"
            },           
            {
                "id": "text-6",
                "textUtf8": "FIP",
                "text": "FIP",
                "shortTextUtf": "FIP",
                "shortText": "FIP"
            },
            {
                "id": "text-10",
                "textUtf8": "Erwachsener",
                "text": "Erwachsener",
                "shortTextUtf": "Erwachsener",
                "shortText": "Erwachsener"
            },
            {
                "id": "text-11",
                "textUtf8": "Kind",
                "text": "Kind",
                "shortTextUtf": "Kind",
                "shortText": "Kind"
            },
            {
                "id": "text-20",
                "textUtf8": "Normalpreis",
                "text": "Kind",
                "shortTextUtf": "Kind",
                "shortText": "Kind"
            }
        ],
        "fareResourceLocation": {
            "carrierLocations": null,
            "trainLocations": null,
            "stationLocations": null
        },
        "prices": [
            {
                "id": "price-1",
                "price": [
                    {
                        "currency": "EUR",
                        "amount": 3140
                    }
                ]
            },
            {
                "id": "price-2",
                "price": [
                    {
                        "currency": "EUR",
                        "amount": 6280
                    }
                ]
            }
        ],
        "regionalConstraints": [
            {
                "id": "regionalConstraint-1",
                "entryConnectionPointId": "8509404",
                "exitConnectionPointId": "8503000",
                "regionalValidity": {
                    "seqNb": 1,
                    "viaStations": {
                        "carrier": "1185",
                        "route": [
                            {
                                "fareReferenceStationSet": {
                                    "carrier": "1185",
                                    "code": "8509411",
                                    "name": "Sargans"
                                }
                            }
                        ]
                    }
                },
                "distance": 113
            }
        ],
        "serviceConstraints": [
            {
                "id": "serviceConstraint-1",
                "includedServiceBrands": [
                    51
                ]
            }
        ],
        "carrierConstraints": [
            {
                "id": "carrierConstraint-1",
                "includedCarrier": [
                    "1185"
                ]
            }
        ],
        "passengerConstraints": [
            {
                "id": "passengerConstraint-1",
                "passengerType": "ADULT",
                "nameRef": "text-5",
                "lowerAgeLimit": "6",
                "upperAgeLimit": "15.99",
                "ageLimitToTravelAlone": 0,
                "ageLimitForReservation": 0,
                "combinationConstraint": [
                    {
                        "maxNumber": 10,
                        "minNumber": 0,
                        "passengerTypeRef": "DOG"
                    }
                ],
                "includedFreePassenger": [
                    {
                        "number": 4,
                        "passengerTypeRef": "FAMILY_CHILD"
                    },
                    {
                        "number": 10,
                        "passengerTypeRef": "YOUNG_CHILD"
                    },
                    {
                        "number": 1,
                        "passengerTypeRef": "ACCOMP_DOG"
                    },
                    {
                        "number": 1,
                        "passengerTypeRef": "ACCOMP_PRM"
                    }
                ],
                "passengerWeight": 1
            }
        ],
        "fareConstraintBundles": [
            {
                "id": "fareConstraintBundle-1",
                "combinationConstraintRef": "combinationConstraint-1",
                "salesAvailabilityConstraintRef": "salesAvailabilityConstraint-1",
                "travelValidityConstraintRef": "travelValidityConstraint-1",
                "fullfilmentConstraintRef": "fulfillmentConstraint-1",
                "passengerCombinationRef": "passengerCombinationConstraint-1"
            }
        ],
        "passengerCombinationConstraints": [
            {
                "id": "passengerCombinationConstraint-1",
                "maxWeightedPassengers": 5,
                "minWeightedPassengers": 1
            }
        ],
        "fares": [
            {
                "id": "00000-03914",
                "bundleRef": "fareConstraintBundle-1",
                "fareType": "ADMISSION",
                "nameRef": "text-20",
                "priceRef": "price-1",
                "regionalConstraintRef": "regionalConstraint-1",
                "carrierConstraintRef": "carrierConstraint-1",
                "regulatoryConditions": [
                    "CIV"
                ],
                "serviceClassRef": "serviceClass-1",
                "passengerConstraintRef": "passengerConstraint-1",
                "legacyAccountingIdentifier": {
                    "serialId": 1,
                    "addId": 1,
                    "tariffId": 0
                }
            },
            {
                "id": "00001-03914",
                "bundleRef": "fareConstraintBundle-1",
                "fareType": "ADMISSION",
                "nameRef": "text-20",
                "priceRef": "price-2",
                "regionalConstraintRef": "regionalConstraint-1",
                "carrierConstraintRef": "carrierConstraint-1",
                "regulatoryConditions": [
                    "CIV"
                ],
                "serviceClassRef": "serviceClass-2",
                "passengerConstraintRef": "passengerConstraint-1",
                "legacyAccountingIdentifier": {
                    "serialId": 1,
                    "addId": 1,
                    "tariffId": 0
                }
            },
            {
                "id": "00002-03914",
                "bundleRef": "fareConstraintBundle-1",
                "fareType": "ADMISSION",
                "nameRef": "text-20",
                "priceRef": "price-1",
                "regionalConstraintRef": "regionalConstraint-1",
                "carrierConstraintRef": "carrierConstraint-1",
                "regulatoryConditions": [
                    "CIV"
                ],
                "serviceClassRef": "serviceClass-1",
                "passengerConstraintRef": "passengerConstraint-2",
                "legacyAccountingIdentifier": {
                    "serialId": 1,
                    "addId": 1,
                    "tariffId": 0
                }
            },
            {
                "id": "00003-03914",
                "bundleRef": "fareConstraintBundle-1",
                "fareType": "ADMISSION",
                "nameRef": "text-20",
                "priceRef": "price-2",
                "regionalConstraintRef": "regionalConstraint-1",
                "carrierConstraintRef": "carrierConstraint-1",
                "regulatoryConditions": [
                    "CIV"
                ],
                "serviceClassRef": "serviceClass-2",
                "passengerConstraintRef": "passengerConstraint-2",
                "legacyAccountingIdentifier": {
                    "serialId": 1,
                    "addId": 1,
                    "tariffId": 0
                }
            }
        ],
        "afterSalesCondition": "todo",
        "salesAvailabilityConstraint": [
            {
                "id": "salesAvailabilityConstraint-1",
                "salesRestrictions": [
                    {
                        "salesDatesRef": "calendar-1"
                    }
                ]
            }
        ],
        "travelValidityConstraints": [
            {
                "id": "travelValidityConstraint-1",
                "validityRange": {
                    "timeUnit": "DAYS",
                    "value": 2,
                    "hoursAfterMidnight": 3
                },
                "numberOfTravelDays": 0
            }
        ],
        "combinationConstraints": [
            {
                "id": "combinationConstraint-1",
                "combinationModels": [
                    {
                        "model": "CLUSTERING",
                        "combinableCarrier": null,
                        "referenceCluster": "FULLFLEX",
                        "allowedClusters": [
                            "PROMO",
                            "NONFLEX",
                            "SEMIFLEX",
                            "FULLFLEX",
                            "BUSINESS"
                        ],
                        "allowedAllocators": null,
                        "allowedCommonContracts": null
                    }
                ]
            }
        ],
        "fullfillmentConstraints": [
            {
                "id": "fulfillmentConstraint-1",
                "acceptedControlSecurityTypes": [
                    "SID",
                    "SIP",
                    "SIS"
                ],
                "acceptedBarCodes": null,
                "requiredBarCodes": null,
                "requiredSiS": null,
                "individualTicketingPermitted": true
            }
        ],
        "reductionConstraints": [
            {
                "id": "reductionConstraint-1",
                "requiredCards": [
                    {
                        "cardValue": "reductionCard-2",
                        "cardName": "Halbtax 2. Klasse",
                        "issuer": "1185"
                    }
                ]
            }
        ],
        "reductionCards": [
            {
                "id": "reductionCard-1",
                "issuer": "1185",
                "nameRef": "Halbtax",
                "serviceClasses": [
                    "HIGH",
                    "BASIC"
                ]
            },
            {
                "id": "reductionCard-2",
                "issuer": "1185",
                "nameRef": "GA 2.Klasse",
                "serviceClasses": [
                    "BASIC"
                ]
            },
            {       
                "id": "reductionCard-3",
                "issuer": "1185",
                "nameRef": "GA 1.Klasse",
                "serviceClasses": [
                    "HIGH"
                ]
            },
            {
                "id": "reductionCard-4",
                "issuer": "1185",
                "nameRef": "FIP",
                "serviceClasses": [
                    "HIGH",
                    "BASIC"
                ]
            },
            {
                "id": "reductionCard-5",
                "issuer": "1185",
                "nameRef": "RailPlus",
                "serviceClasses": [
                    "HIGH",
                    "BASIC"
                ]
            }
        ],
        "personalDataConstraints": null,
        "reservationParameters": null,
        "connectionPoints": [
            {
                "id": "connectionPoint-1",
                "legacyBorderPointCode": "271",
                "stationSets": [
                    [
                        {
                            "code": "8509404",
                            "country": "CH"
                        }
                    ],
                    [
                        {
                            "code": "8101244",
                            "country": "DE"
                        }
                    ]
                ]
            }
        ],
        "stationNames": null,
        "fareReferenceStationSetDefinitions": null,
        "zoneDefinitions": null
    }
}

Tools und Beispiele stehen auf der Spezifikationsseite zur Verfügung: https://osdm.io/

Weiterführende Angaben