-
Notifications
You must be signed in to change notification settings - Fork 26
Meeting Minutes 2023
- Presentation by Eurail on their plans/needs from OSDM.
Discussion:
- Eurail is interested in providing its offers using the OSDM standard.
- Use cases identified are:
- Sell Eurail/Interrail passes in a non-journey based flow.
- Upsell Eurail/Interrail passes as part of a journey based flow. If its the cheapest offer we are legal obliged to present it to the customer (Personal Rights Regulation).
- Activation of travel day and journeys for a given pass.
- Eurail/Interrail passes change prices once a year, except for promotions
- OSDM supports non-trip based searches, as well as the activation of days. OSDM has the notion of a travel account. The reservation can be distributed using OSDM.
- Swedish market - providing fulfillments in pre-booking state. Review of state model. https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/414
- Accounting Reference: https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/393 (Josef: It is already merged. Sorry, I was trigger-happy in the code review.)
- Review pull request by one participants.
- Improving error messages - finalize results
- Single train number (SBB, Bileto): https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/411
- Questions by DB
- Ancillaries
Mediatype: application/vnd.uic.osdm+json;version=3.0 parameter version is required.
I-6:
TODO:
- Investigate the mapping OSDM - TOMP for a Use Case: Retailer via OSDM to Distributor via TOMP to TO (selling the first/last mile)
- Check EU survey on MASS APIs
- ask EC for participants with interest in implementation
On Demand Services to be discussed next Friday OSDM/TOMP/BOB
-
multiple last names - agreed solution: https://github.com/UnionInternationalCheminsdeFer/OSDM/tree/adding-support-for-two-last-names
-
On Demand Service https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/372
- How to start?
- Separte Meeting?
- What can we learn from TOMP (TOMP is an API between MaaSProvider and Transport Operator, not Between a MaaSProvider and a Retailer)?
-
finalizing partialRefund
-
API versioning (recommended versioning approach, API to indicate version)
- Addition of STUDENT as a passenger type? https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/370
- Splitted reservations: https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/356
See discussion in the issue.
Should have multiple reservations with different covered sections, and tie them together in the provider system so they cannot be refunded separately. Price to be put on one (e.g. the first) of the reservations.
Linus will check whether this will fill the need.
Discussion was to add the new attributes (bookingPartIds, passengerIds) to the message in the origional refund offers endpoint, so we don't need a new endpoint.
- Second last name: https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/357
RENFE prefers Option 2 (Mandatory last name field with all words in the last names), and optional fields for two individual last names.
lastname1, lastname2: numbered field names are confusing - the API should be more self explanatory.
Option 3 (with additional condition: maxitems = 2) would be technically better.
No decision possible today.
- Overridden aftersales conditions: https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/362
This would be a breaking change, but the feature is not urgently needed. We will retain this until version 4, but provide a nonbreaking (but more cluttered) change in case the feature is needed before we're ready for the next major version.
-
Inconsistent attribute name: the warnings attribute is called warning (singluar) in the responses to POST trips-collection an GET trips-collection/{trips-collection-id}. Klaus will raise an issue to correct this, but this will be breaking and needs to be postponed to version 4.
-
Question about provisional/confirmed price in the booking. Can the price change when the booking is confirmed?
Provisional booking is created, provisional prices is 100€, the booking is confirmed without any changes --> assumption would be that the confirmed price is then always 100€, and cannot change due to the confirmation process.
- Question about "confirmableUntil" - this is not relevant in a confirmed booking. So semantically this should be made optional.
Stina will raise an issue. https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/369
-
Partial Refund (POST /bookings/{bookingId}/partial-refund-offers - documentation needed for 3.2 https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/354 --> new proposal for next week
-
Second last name in passengerDetails https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/357#issue-1946879952 RENFE to check Option 3 (optional itemized version of lastName which matches the full name(s) in the identity documents)
-
Indicator for overwritten after sales conditions https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/362 - not critical for SWE go-live Discussion to be continued with second option
-
Splitted reservations: https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/356
Discuss some issues with OSDM version 3.1
-
Split Booking - this needs the ID of the booking to be split and should be aligned to endpoint structure (POST /bookings-split becomes POST /bookings/{bookingId}/split)
-
Passenger/PassengerSpecification - contact detail is here twice (both at the top level of Passenger/PassengerSpecification and within PersonDetail. Remove "contact" from the Passenger object and from the PassengerSpecification object (as they were new in 3.1 - no need to deprecate)
-
Partial Refund (POST /bookings/{bookingId}/partial-refund-offers - nobody really understands how this works, so remove it from 3.1 (for now)
Everyone should do a review of 3.1 as it stands now.
Josef demonstrates GitHub features.
- Agreed to convert the issues/improvements from the pure wiki pages to GitHub issues
Nicolas asks what to use when a mobile app just needs the barcode from the fulfillment. Use type=ETICKET and mediaType=RETAILER_APP.
"Ticketless" is supported. Some operators still send SMS (text) messages with ticket information.
- PR #353 contains all missing changes in 3.0.3 to be included in 3.1.0. Additionally, it provides fix to support data patch of Purchaser seeking by Nicolas and PersonDetail.taxId seeking by Josef for Polish market.
- release 3.1 (offline 3.1 ready in production, will be used for the next data exchange) when will the generator be ready? or should we replace "nullable" feature in 3.1 (offerParts, places)? https://github.com/OpenAPITools/openapi-generator/issues/15640
This is a no longer valid. OpenAPI Generator 7.0.1 fixed the issue.
-
review of code list for product type
-
benerail/Sqills: requestedSection element needs some rework:
- are legIds relevant here ? the tripspecifications do not provide any id for the legs so not possible to refer them using ids. Might be usable in conjunction with providing a tripId but not sure anyone wants this => remove ?
- if multiple trips or tripspecifications are provided, no link can be indicated between the trip/tripspecification and the related requested section => we believe requestedSection should be either a subelement of tripspecifications or contain a reference to the tripspecification (externalref ?). Ifproviding tripIds remain, then the reference should aloso be possible on tripId
TODO add optional in Section externalTripRef referencing the externalRef of the Trip Object in 3.0.3 and 3.1
-
publish Releases 3.0.3 and 3.1
-
benerail: carrier as optional info ?
we atm provide operating carriers as offers attributes,not schedule attributes. Is there a reason for making this a mandatory element on schedule-only endpoints(trips and tripCollections)
benerail will check to solve this internally
- Second last name in passengerDetails
Proposal:
-
Adding an optional second last name to have multiple last names in separate fields
-
Most systems will send the names in one field (concatenated) - Is this a problem for systems using two fields?
-
Some systems will send two last names - would it be ok to print only one?
-
Option 1: one optional second last name
- a retailer is allowed to ignore the second optional name and not provide the name separately
- a distributor is allowed to ignore the second optional name and use only the first last name
Option 2: lastName hold all last names as today and is mandatory
- optional element firstLastName holds the first last name and can be ignored
- optional element secondLastName holds the second last name and can be ignored
TODO: discussion on use cases in 2 weeks
- SJ: Addition of a DELETE /bookings/{bookingId}/booked-offers/{bookedOfferId}/admissions/{admissionId} to be able to remove individual passengers for a npn-confirmed booking
remove an admission before the booking confirmation. It is up to the provider to change or remove dependent bookedOfferParts. A repricing might occure. This function is optional. Similat as for reservations and ancillaries. TODO in 3.1 and in 3.0.3 (Change: Clemens)
- Samtrafiken: Rename BookingRef in Booking to BookingCode in 3.0.3 to avoid confusion with BookingRef in Fulfillment
(TODO change by Josef) Booking:
- rename bookingRef to bookingCode in Booking and bookingPartRef in AbstractBookingPart to bookingPartCode BookingSearch:
- add bookingCode , bookingPartCode
- deprecate distributorBookingRef, retailerBookingRef
- add externalRef The unique booking reference in the distributor/retailer system. Usually refers to an order number or PNR.
-
Turnit: How to enter a new home address to a prurchaser? Currently a known addressId with URN is needed.
Temporary solution is to provide some id. (address is definedcompliant with OJP and unfortunately three an id is mandatory. We allow any kind of id).
-
Turnit: How to update a purchaser
- Always send in all information and replace with that. A PUT approach
- Only update given elements. How in that case can a companyDetail be removed?
Alignments is needed.
Only update the given elements TODO: (Change Joseph in 3.0.3 and 3.1)
- make Address nullable to be able to delete the address
- make CompanyDetails nullable
- make PersonDetails nullable
- TaxId for persons - Billing in Poland requires the printing of the personal taxId of a Purchaser TODO: add taxId as optional element in the PassengerDetails (Change Joseph in 3.1)
- Turnit: Add an indicator in the product what type of travel-account is used
for the product.
At later stage should be changed to Product.type when the enum items are agreed in the technical group - the improvements intents to gather proposals from different vendors and then provide a draft of the enum for OSDM. https://github.com/UnionInternationalCheminsdeFer/OSDM/wiki/I%E2%80%9093-Product-types
Code list for product type:
TRAVEL_ACCOUNT - travel account (not an admission using a travel account)
TRAVEL_PASS
CARD
POINT_TO_POINT
MULTI_TRIP
MERCHANDISE_ITEM
SERVICE_ITEM
....
- TODO prepare a proposal (branch) for next week (Joseph, Linus) (Done)
Proposal has been created for 3.0.x, just for the immediate needs of Sweden.
-
Cleanup of references in Booking and Booking Parts, according to last weeks minutes:
- bookingRef added, externalRef correctly described - deprecate retailerBookingRef and distributorBookingRef from BookingPart - add bookingPartRef to BookingPart
-
changes to BoookingPart to be reverted - this is just a patch version
-
in Fee, add productRef and deprecate productCode
-
in BookingParts, add "refundAmount" as new optional attribute
-
in CoachLayoutPlace, add "icon" attribute, which refers to the icon code in the Catalog of Code Lists (Graphical Item)
-
in Compartment, add "number" attribute
-
add breakdown on refund offers and exchange offers - refund/exhangeFee, refundAmout/exchangePrice, bookingParts
-
Revert changes to Structure Name (AddBookedOfferRequest --> BookedOfferRequest)
-
Revert changes in the structure: passengerRefs goes back to passengers
-
Rename new attribute additionalPassengers to additionaPassengerSpecifications
-
Instead of the new AddBookedOfferResponse, the BookedOfferRespose will be extended by the optional list of bookedOfferIds
-
new attribute "productType" in product (enum) with the two values "ADMISSION_PASS" and "ADMISSION_MULTI_RIDE" - change this to extensible enum.
TODO Josef: clean up according to this list, review by Ralf and Tim, then release 3.0.x
We will back port these changes to 3.1.0, but need to discuss with Clemens and Andreas on how to do this with the least work (e.g. go through UML generation for 3.1.0 - tbd)
Notes for further discussion:
- need to discuss availability status on Coaches and Compartments - discussion for another day.
- do we really need GET /bookings/{bookingId}/booked-offers/{booked-offer-id}
-
Clarification on booking/booking part references https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/341
in Booking: - externalRef: reference provided by the requestor and returned in booking
- bookingRef: reference of a booking which is used by human usable given by the provider of the booking. - id: unique id of a booking
in BookingPart: - bookingPartRef: reference of a booking part which is used by human usable given by the provider of the booking part. - id: unique id of a booking part
deprecate: - distributorBookingRef reference to the booking in the downstream distributor system - retailerBookingRef reference to the booking in the downstream distributor system
TODO: create a PATCH with the changes described above. - prepare a patch (Joseph, review by Ralf) for 9/22 create a table with all ids used including a coherent description. - to be discussed in October
-
TODO: sequence diagram to document adding a reservation and selecting a place
-
TODO review (Ralf)
-
Turnit: Add name and owner to the fee object. Alternatively refer to a product.
- change productCode to productRef including an id
- TODO (Joseph review by Ralf) Create a patch (3.0 and 3.1) to change the Fee
object:
- deprecated productCode
- add optional productRef as sring with comment: includes productId
-
OEBB: http errorcode 422 is missing (semantic problems in interpreting a request).
The recommended Zalando http error codes https://opensource.zalando.com/restful-api-guidelines/. They suggest using the 400 also for valid input failing due to business logic. I guess it's based on the updated HTTP semantics in https://www.rfc-editor.org/rfc/rfc7231
-
DB: when can "validUntil" be empty, and should it become mandatory?
travel account might have no end date
-
DB: we see that the sandbox environment uses the same product id for admissionOfferParts and reservationOfferParts, is this a valid case? Shouldn't there be different products for different types of offerParts?
this is the case for classic IRTs
-
DB: Enum values like "YES" and "NO" confuse some code generators. They create a binary element, even if there are three options (e.g. ExchangeableType has the options YES, NO, WITH_CONDITIONS). The solution is to have the values quoted, i.e. "YES", "NO", "WITH_CONDITIONS".
to be discussed with Andreas for the generator
-
DB: can trip based offers lack trip references completely? In our opinion this should not be allowed, i.e. if the OfferCollectionResponse contains the trips element, for each offer there must be either a tripCoverage element at the offer level, or within each offerPart.
TODO: add a comment that for offers requested for a trip the trip coverage must be provided.
- Samtrafiken: Introducing refundOfferParts and exchangeOfferParts to make it
possible to break down refundableAmount and exchangePrice to the customer
--> Solution: optional refundBookingBreakdown and exchangeRefundOfferBreakdown as optional elements including fee, refund amount and an array of BookingPartReferences in 3.1 and as patch in 3.0.
-
Turnit: POST /bookings/{bookingId}/booked-offers
-
Replace Passenger with PassengerSpecification in request (Same as in POST /offers).
-
Respond with a booking or an empty response. Current response (bookedOffer) is incomplete.
--> use optional additionalPassengers ( PassengerSpecifcation) and provide only the new passengers. existing passengers are already known and don't need to be send. Remove/deprecate passengers list. in 3.1 and as patch in 3.0 --> the response should return a list of the new bookedOfferIds only. Create a new return message in 3.1 and as patch in 3.0. --> TODO prepare patch Clemens until Thursday, Ralf to review it.
-
-
Samtrafiken: Clarify how to use refundAmount and refundFee in refundOffer --> TODO add clarification in RefundOffer. refundAmount = amount to be returned to the customer, refundFee = amount kept by carrier(s) and / or distributors
-
Turnit: Add icon to places in coach-layouts for version 3.0.3 --> TODO add the same fix as in 3.1 also in 3.0
-
Turnit: We would like to have the possibility to return a compartment number in GET /availabilities/place-map
-- TODO: Add an optional string "number" in the Compartment object. Compartment.number is an identifier for compartments which have their own identifier shown at the door. in 3.1 also in 3.0
-
Turnit: We need a possibility to break down refundableAmount and refundFee between nested fulfillments in a refundOffer to get settlement correct. We have the same problem with exchangeOffer
Options: - separate end point for settlement details Get settlementDetails (booked/refunded/exchanged OfferPartIds) - settlement details optional in refund offers? --> clear separation of settlement amounts and customer visible amounts
Solution: draft a settlementDetails end point --> TODO Linus
-
fees on place selection --> TODO: Add a new value "PLACE_SELECTION" on conditionType to indicate different fees for different types of place selection (as specific seat of only via preferences,..)
-
Product: TODO summary should be the name of the product. Better: additional name element in 3.1/0
- Discuss IRT modelling
- Discuss how to I-92 Harmonize the Booking of Ancillaries
- First Release Candidate for OSDM 3.1.0 is available including Change Log.
- Initial discussion on how to I-92 Harmonize the Booking of Ancillaries
- OSDM 2.0.7 released
- Change: back porting local date time to 2.0.*
- Linus:
- Unify error and warning handling. To make it easy to integrate with different providers. It would be probably be a part of the certification process as well.
Consensus
- problem type:
<host>/problems/<problem-code>
- warning type:
<host>/warnings/<warning-code>
- for standardized problems/errors the host:
osdm.io/problems
orosdm.io/warnings
, respectively.- for provider specific every party is allowed to have it's own host
- Problem should have an optional
code
in OSDM 3.1 and a mandatorycode
in OSDM 4.0- A customer facing party (i.e. retailer) is allowed to map codes to its own codes and translate them into the customer's languages.
- An error returns an HTTP status code 400-599 and a
Problem
structure detailing the cause of the error.- An warning returns an HTTP status code 200-299 and a
Warning
structure detailing the cause of the warning.
-
OSDM 2.0.6 released:
- Change: factor out
CompanyDetail
fromPassengerDetail
to allow passengers without name. - https://app.swaggerhub.com/apis/schlpbch/uic-90918_10_osdm/2.0.6
- Change: factor out
-
SBB:
-
SEAT
,COUCHETTE
,BERTH
are confusing to a newcomerRename
BERTH
toSLEEPER_BERTH
-
-
Sqills / BeNe:
- usage of a version in the response header
Consensus reached, Tim will document it for the group
- Turnit: New version 3.0.3
- Add Place icon in
CoachLayoutPlace
- Add Place icon in
Will be fixed with 3.0.3.
-
New end point to remove a passenger and her admissions from a preBooked offer -
DELETE /bookings/{bookingId}/booked-offers/{bookedOfferId}/passengers/{passengerId}
Semantic: Look up offer parts linked to this passengerId and remove them if valid from a tarif point of view.
I.e., only possible if offers are partitioned enough and no repricing is needed.
Will be part of 3.1.0
-
Finalize OSDM 3.1.0
- Split Booking
Accepted, will be part of version 3.1
- Split Booking
- OSDM v.2.0.6 is ready to be released
-
SBB:
-
We have a requirement, that it must be possible to travel anonymously. The change is needed for 2.*
-
Version 1:
Passenger: … detail: PersonDetail personDetail: PersonDetail contactDetail: ContactDetail …
PersonDetail: summary firstName* lastName* contactDetail: ContactDetail
ContactDetail: summary email phoneNumber address preferredLanguage
- Version 2. use `firstName` = "N/A" and `lastName` = "N/A" > Version 1 is cleaner, it's important to do it non-breaking
-
-
DB: Carrier on
DatedJourney
, why mandatory?
Some implementation require it to be mandatory, derive rics code from HAFAS administration code.
-
Amadeus: Update on Splitting
-
DB: Question: what is the fulfillment ID? Is it the ticket-ID according to UIC 918.9?
The fulfillment ID is not the ticket ID. The ticket ID is the
controlNumber
within thefulfillment
.
- OSDM 3.0.2 released
- Sqills:
- Sqills OSDM Demo environment to support OSDM 3.0
- Webhooks:
- Up to date?
- Any implementations or plans?
Some events are missing and are added, leading to a 3.0.1 version.
- Fullfilments and partial after sales (refund, exchanges, ...)
Model resource as described in I-80.
Refund and Exchange are triggered by fulfillment ids currently, partial refund will be triggered by booking parts. While there is potential for alignement this is not in scope of 3.1.
- Turnit:
- Questions on Coach Layout
Bug: icons are missing on coach layout and places. Add optional with default seat.
Description: Grid size: boundary rectangle size of the coach.
-
Blocker on 3.0.2
- Turnit:
ReleaseOffer.confirmedOn
must be optionalfix needed for 3.0.2
- Bileto: Code generation problems with
nullable: true
set some attributes to
nullable: false
so that openapi generator bugs are ommitted - Bileto: What is purpose of
Booking.ticketTimeLimit
? No documentation is provided in openapi.add
confirmationTimeLimit
with comment and deprecateticketTimeLimit
.
- Turnit:
-
Announcements
- Sqills will release a 3.0.1 version next Wednesday, May 31st.
- Billeto will release an updated sandbox version middle of June.
All:
- Feedback regarding OSDM 3.0.2 - pre 2
- https://app.swaggerhub.com/apis/schlpbch/uic-90918_10_osdm/3.0.2.pre-2023-05-05
- add status code EXCHANGED on fulfillment
Accepted - update the state model
Sqills:
- Address optional Properties in Patch operations
-
https://opensource.zalando.com/restful-api-guidelines/#123
Accepted - Meeting on Monday
-
https://opensource.zalando.com/restful-api-guidelines/#123
ResSys: -Semantic of offer request
- In the dimension
PassengerType
:- 4
Person
are requested but only 3 places are available: Do we return an "incomplete" offer or nothing?If reservation is optional, do return 3 places. If reservation is mandatory, do not return an offer.
- 1
Person
and 1Bike
are available but it's impossible to transport bikes: What do we return?If bike reservation is optional, do return offer. If bike reservation is mandatory, do not return an offer
- Dealing with up-selling: Do we return up-selling offer like bike or luggage
only if requested?
Upselling should not be modeled with "artificalPassengerType" but with
AncillaryOfferPart
- 4
- In the dimension trip: If not the complete trip can be priced how to behave?
Provide as much coverage as possible.
- Are there other relevant dimensions?
No. Open: How to communicate to customer if 3 out of 4 places would be available? Do we want to support a 'non-strict mode'?
öBB:
- in case of a first class offer for a connection with multiple legs it is possible to have "mixed" reservations of first and second class if first class reservations are not available on all legs.
- how to use
availablePlacePreferences
andplaceProperties
in the booking requestan entry in
reservationOfferPart/availablePlacePreferences[]/preferences
in an offer transforms into aplaceSelection[]/accommodations[]/placeProperties
entry in a booking request.
Improvements to address:
- I-79 OJP Support for parallel trains
- I-72 Fulfillment Type/Media override and named value list on Fulfillment Part
- I-67 Split a Booking per Passenger
-
Roland Klapwijk
- YAML seems to be untouched in that part, I guess it's yet to be done -- fixed
- The card does need the "type", without it there is implicit logic (if there is a code it is a reduction card, otherwise a travel account). What about loyalty cards or reduction cards which require validation by the system where the customer needs to enter the number? Tim has sent several emails on this topic.
- numberOfPrivateCompartments was indeed the suggested name -- fixed
- an address now contains a mandatory ID. Will anyone actually be checking the unique address ID of each country and provide that in the request? If so, and if every address in each country has a unique ID, would we then still need the address details? 😉 I guess it came as a side effect from the Place inheritance -- won't fix Breaks the fundamental concept of every place to be uniquely identified. If not present, an id can be generated using longitude and latitude instead.
-
Ralf Bayer
- The changelog says „remove relation from FareConnectionPointRef to FareConnectionPoint”. As far as I can see, the relevant part of the yaml looks exactly like in 3.0.1, and the connection (and circular reference) is still there. -- fixed
- For AppliedPassengerType: the attribute “appliedReductionCardTypes” is of type “ReductionCardType”. Wouldn’t “CardTypeReference” be sufficient for this context (it contains the issuer, the code for the card as well as the human readable name for the card type)? -- addressed
- Is the attribute name “numericAvailabilityPrivateCompartments” sensible? “numericAvailability”, at least for me, points to something like how much stock is remaining. However, I thought we were discussing a concept of “if you book this reservation offer, there will be n private compartments included. So shouldn’t this be named “numberOfPrivateCompartments” or even more simple “privateCompartments” (type is numeric)? -- fixed
-
Linus Turnit
- Is status EXCHANGED missing in fulfillment? For me the old fulfillment must be marked as not valid any more. fixed
- One more topic exists in I-77.
- Add space for through-ticket tag on BookingRequest level – needed for RESPLUS post poned various solution approaches have been discussed and will be evaluated by Swedish experts.
- Can we fix that and then close both I-76 and I-77 and make version 3.0.2 official?
- List of offerIds can be posted but only one offer in response for POST
/bookings/{bookingId}/booked-offers
-
Klaus K.
- I would suggest to take over the change from the IRS 918.1 graphical availability regarding the direction change into the place map. Is therefore an improvement needed? -- please shortly define
-
OSDM 3.0.2:
-
FareConnectionPointRef
:- remove relation to
FareConnectionPoint
- remove relation to
-
ServiceTime
- make
estimatedTime
andactualTime
optional
- make
-
FulfillmentDocumentType
:- add TRAVEL_ACCOUNT_REDUCTION, TRAVEL_ACCOUNT_PASS, TRAVEL_ACCOUNT_MULTI_RIDE
- add optional issuer
- make
BookingPartReference
optional
-
Add
AppliedPassenger
andActualPassengerType
-
Product
andFulfilmmentPart
: addTextElement
-
CardTypeReference
addSymbiology
-
add
name
toCardTypeReference
optional -
see: https://app.swaggerhub.com/apis/schlpbch/uic-90918_10_osdm/3.0.2-2023-04-27
-
-
CardType
andCardTypeReference
to be checked, there seems to be an error in 3.0.1 in the usage of the two objects -
Final decide on modelling of IRT offers
-
I-77 to be discussed
-
Nicolas
-
Asynchronous post fulfillments does not actually return ids (as mentioned in endpoint description). IMO it also shouldn't (point of the 202 is the resource is not created yet => it does not have an id yet). Consequence is that if a 202 is received, one acutall needs to reload the whole booking to get the fulfillment ids
Currently: If the fulfillments are created asynchronously the service starts the creation of the fulfillments. Only fulfillmentIds are returned. The fulfillments are in stage CONFIRMED.
Should be changed to: If the fulfillments are created asynchronously the service starts the creation of the fulfillments. No fulfillmentIds are returned. The fulfillments are in stage CONFIRMED. The booking needs to be retrieved later to obtain the fulfillments.
-
-
-
in fulfillment definition, fulfillment type seems to largely overlap with medium & type of document => confusing, risk for inconsistencies, needlessly complex to read. Can we not get rid of one of these ? TODO: more documentation is needed on the use of media, format and type
-
bookingParts is not always possible to set => can it be not mandatory ? Decision: the links to the bookingParts in fulfillment should be optional.
-
-
Tim (Sqills)
-
errors and warnings
-
generic codes given, more process specific codes will come in the next few weeks.
-
new codes:
- INVALID_INPUT_PARAMETER (invalid url parameters) http 40*
- INVALID_REQUEST (invalid json) http 40*
- NOT_IMPLEMENTED http 501
- UNKNOWN_ERROR http 500
- MISSING_PROVIDER_SPECIFIC_INFORMATION (violation of a bilaterally agreed usage) http 40*
TODO Tim: update documentation
-
-
Koffi (Amadeus)
- Documentation on how to use the seat maps
-
Josef:
- there is a bug in ServiceTime as estimated and actual time must not be mandatory.
-
Linus
-
Review of modelling suggestions for I-76: approved with renamings:
- passengerId --> passengerRef
- section --> tripCoverage
- to be included in common offer parts as well
-
see issue #332 in Git.
-
A walk through of nonTravelOffers sales flow (TravelPass and MultiRidePass). Where is the id returned for the travel-account?
-
-
Josef: Code generation and different return types for success and failure status.
createOffers
returnsOfferCollectionResponse
on success or warning butProblem
on invalid input. But at least Java can't define union return type.
![image](https://user-images.githubusercontent.com/146057/233565759-062957e7-5787-4ba5-80cb-7d1e9223ee81.png)
- changes on fulfillment:
- add new values in FulfillmentDocumentType
- TRAVEL_ACCOUNT_REDUCTION , TRAVEL_ACCOUNT_PASS, TRAVEL_ACCOUNT_MULTI_RIDE
- Fulfillment ControlNumber is the number of the travel account
- Fulfillment should provide an issuer explicitely (company reference)
- add new values in FulfillmentDocumentType
-
Bug in 3.0.1?
- A cyclic reference in FareConnectionPoint --> TODO delete FareConnectionPointReference
-
Final version of OSDM 3.0.1 has been released
-
Passenger
andPassengerSpecification
useCardReference
instead ofCardTypeReference
- added
validFrom
to different types of offers
-
-
Feedback on öBB's proposal on modelling IRT offers:
- Consensus is to use individual offers and not to use the reservation grouping for different accomodationtypes within one offer
-
Linus (Turnit)
-
I-76 Add more information for the Passenger
- --> change for product will be prepared: TODO Josef, Ralf, Linus
- --> change wth an additional priority element in the trip attributes will be prepared: TODO Josef, Ralf, Linus
- --> change for applied passenger types will be prepared: TODO Ralf
-
I-76 Add more information for the Passenger
-
short communication (Nicolas): after giving it second thought, I agree local time is needed in our messages regarding departure and arrival times :)
-
Linus Johansson (Turnit)
- number is missing in the CardTypeReference in booking response
-
resolution: Use
CardReference
instead ofCardTypeReference
which has anumber
field. (fix for 3.0.1)
- number is missing in the CardTypeReference in booking response
-
Description of a fee is missing
-
resolution: add a
description
to fee
-
resolution: add a
-
Stina (SJ)
- Modelling of issued vouchers during rebook or compensation. There is a way to model this within the standard, but I want to ensure we are in agreement this is the correct way to work.
-
discussion: we need a means to return a
voucher
in the booking -
resolution: add a list of
issuedVouchers
aVoucherInformation
toBooking
andRefundOffer
->
-
Koffi (Amadeus)
- Seat Map
- resolution: Process is sound however not properly supported.
-
The date-time issue has been resolved.
-
Klaus (ÖBB)
- I think the attributes[] list in the trips or offers response is redundant.
There is one under timedLeg{} and one within timedLeg{}/service{}
- Solution: removal of the attributes[]-list that is located directly under the timedLeg{}. The attributes[]-list within the timedLeg{}/service{} should remain, extended with fromStopSeqNumber and toStopSeqNumber. Affected: tripSpecification and trips[].
- number of private compartments in the offers[] response in the case that there are variants of private compartment offers (eg. offers for 3 passengers in an couchette private compartment: one offer with 1 private compartment for all passengers, a second one with two compartments...). See suggestion from Stina
- I think the attributes[] list in the trips or offers response is redundant.
There is one under timedLeg{} and one within timedLeg{}/service{}
-
unclear on how to use the get bookings/{bookingId} - Nicolas
- we do not have a get get bookings/{PNRRef} on the reason that it may be flawed GDPR-Wise. This in itself culd be challenged as the call is performed on a secured network by an authenticated user.
- furthermore, if the bookingId is fixed over time, then it is just a longer version of a PNR, which IMO is not really more secure
- if it is not fixed over time, it forces the consumre to go through the search booking feature, which is cumbersome, not more secure as you still could get to a booking with just one parameter and where it is not possible to give the PNR as search criteria atm, while it is the most common criteria to open up an existing booking
- I would propose to add a get bookings based on parameters where the consumer can retrieve a booking based on the PNR + one other information of the dossier if needed for GDPR Discussion
-
Consensus going towards a get
/bookings/{id}?idtype=[id|extRef]
. Default would be id so that is a non-breaking-change. => Nicolas to deliver a patch with the update and Andreas will do the modelling via UML tool. -
security/privacy rules are managed by the authentication of user and user access rights management in the backend
-
Update on date-format
- OpenAPI's
date-format
supports time offset - The example's in
ServiceTime
has been updated - We can thinking about enforcing
OffsetDateTime
by using a reg-exp.+[^Z]
- Hitrail is now aware of the time zone topic and will address that on the H2O converter
- OpenAPI's
-
Klaus (öBB):
- How to model IRT's? ÖBB-Reservation-Scenarios.xlsx
-
Let's be more professional in our work:
- Tim: Breaking changes early in the PI, only cosmetic changes towards the end.
- The next version must be non-breaking, thus let's model accordingly using
the
deprecated
keyword. - Please report issues using the github issues feature so that they can triaged and tracked:
-
OSDM 3.0 is released: https://osdm.io/osdm/update/2023/03/10/OSDM-V3.0-released/
-
Official logo is here: https://github.com/UnionInternationalCheminsdeFer/OSDM/blob/gh-pages/images/logo/OSDM-logo.png
-
OSDM 3.0.1 prepared
- Addresses issues found by Sqills, Turnit and DB.
-
Tim:
- Issue with local time on Alight/Board --> addressed in 3.0.1.
-
Linus Johansson
-
In POST /bookings-search the
companyName
is mandatory in the purchaser object, but a purchaser doesn't have to be a company. Actually the companySearchResuest is wrong, it should be purchaserSearchRequest or something, but that is a breaking change. Easiest is to make companyName optional. --> addressed in 3.0.1. -
Pagination on booking-search response is missing. Depending on the search criteria the response can probably be quite hugh. Link parameter is missing, page parameter is included, but should be the same mechanism as everywhere.
-
Check the local time format on departure and arrivaltimes all over the specification
-
-
Clemens
- the YML file contains a format error on
exclusiveMinimum
, format and interpretation has changed with openApi 3.0 --> addressed in 3.0.1
- the YML file contains a format error on
-
Gender is missing in anonymousPassengerSpecification and passengerSpecification (optional, extensible enum). This is required for specific offers (female compartments,..).
- should be in 3.0.1
-
Local Time in arrival and departure is not jet in 3.0.1
- proposal: have time zones in replys, no time zones in requests (local time)
- --> a mandatory time zone would make it more difficult to have conversion between OSDM and existing TAP-TSI specs
- --> solution: in requests: local time - add a mandatory time zone to the
place in the master data - allow local time in request and reply? - UTC
without time zone is not allowed. (indicated as comment, not via pattern) -
should be consistent wherever the date-time is linked to a place
- is it possible for converters to add the correct time zone? If yes the time zone can be made mandatory. - check with OJP - should be in 3.0.1
- Nicolas Selleslagh:
- there are still some places where we have attributes that are both mandatory and with a default value, which in my book does not make much sense and is confusing actually. Example: passenger type in anonymousPassengerSpecification
Keeping as is.
Discussion on later - is OSDM really stateless?
- externalRefs are mandatory and not nullable: why is this so ?
3.0 is breaking, will review those 70+ occurences
- Question to Sqills: is there a way we could get access to the OSDM validator ? What is the process herefore ?
There is only a PoC at the moment. When it is delivered, it will be shared with the group.
See OSTS Meeting Minutes.
- Ralf & Josef:
- First, on the specification of either a reduction card type or travel account when requesting an offer. My comment was actually a bit quick, we could also go with Josef’s suggestions, as long as we can either specify an anonymous card type (by card type id and optional card number) or an account (specified by number and issuer). I don’t care very much whether we have three optional attributes or two different structures, we should just make sure that it is clear what the intent is and that both users and implementors of the API can easily understand what we mean.
CardTypeReference will be used both for ReductionCards and TravelAccounts. Will have type (ReductionCardType link), issuer and number optional.
-
Regarding the MoneyAccountUnit:
- It shouldn’t have VAT. VAT comes into play when the money is spent, money itself doesn’t have it (haven’t seen a VAT statement on my EURO or CHF banknotes). The offer generated will have VAT, but this is independent of the way it is paid. Which means that the implementing system needs to know what id does taxwise. There are rules, but like everything in the tax world they are complex, and cannot sensibly be expressed at API level.
VAT is on product, not on balance. Scale retained, vat removed.
- But it should have the scale field, because a monetary amount is made up of the three attributes value (in cents or similar), currency, and scale. With the value present in the “total” and “remaining” fields of the account, we need the other two in the type, i.e. it must have currency and scale.
- Klaus Kovar
- AccommodationSuptypes Review (https://osdm.io/spec/catalog-of-code-lists/)
- "COMPLETE" should be a place_property
- there should be an accommodationsubtype like "SEATS_6"
- the following place properties should also be subtypes (WHEELCHAIR_AND_SEAT, WHEELCHAIR_NO_SEAT, CHILDREN_AREA, NEAR_WHEELCHAIR, OPEN_SPACE, FAMILY, NEAR_BICYCLE_AREA, EASY_ACCESS, COMPARTMENT?
- place location "middle" is missing for seat compartments
- AccommodationSuptypes Review (https://osdm.io/spec/catalog-of-code-lists/)
Clemenc will review and include to code list.
- offers[]/offerSummary{}/minimalUnit{} is mandatory now
- for each reservation reference in an admission it is possible to add a summary(admisstionOfferParts[]/reservations[]/reservationGroup{}/reservationRefs[]/summary), but under reservationOfferParts[] there ia also a summary reservationOfferParts[]/summary. Which one should be filled in which case - e.g. reservation only?
IRT is indicated only by required reservation flag. Price is reservation is used when there are multiple reservation options with diff. prices, otherwise price on admission is sufficient.
Documentation must be updated on different cases - IRT, compulsory reservation, etc.
- offers[]/products[]/code is some sort of tariff id that should not be changed over time?
Product.code doesn't change over time, Product.id may for the same product.
- offers[]/products[]/owner is the RICS code of the tariff owner
It is a CompanyRef of the company printed on the fulfillment.
- Product.condition[].description vs shortDescription
should be short to be displayable on small screens, shortDescription to be removed.
- is this the structure for an IRT offer?
-
which price element should be filled in case of an IRT offer? should the admission or the res.offerpart price element be 0? Which product-reference should be filled?
-
tripLegCoverage is missing in ReservationOfferParts/availablePlacePreferences?
-
Improvement "parallel trains in OJP"
-
Linus Johansson:
- We need the service attributes with the leg in the tripSpecification in
offerSearch, since all provides doesn't have the trip defined and can't
deliver them in the respons. For me the attributes are service related, so
the proposal is to add the attributes into the DatedJourney together with
the vehicle number, mode and other service related attributes. If we do like
this, the attributes can be expressed in both directions.
- We need the service attributes with the leg in the tripSpecification in
offerSearch, since all provides doesn't have the trip defined and can't
deliver them in the respons. For me the attributes are service related, so
the proposal is to add the attributes into the DatedJourney together with
the vehicle number, mode and other service related attributes. If we do like
this, the attributes can be expressed in both directions.
OJP allows attributes both on LegStructure and DatedJourney. Adding to DatedJourney.
- AppliedOverruleCode and refundFee in refundOffer is required, change to optional
Fixed
Patrick: There is an OSDM group at UIC LinkedIn page. (It's private and access must be validated and granted.) Good to share monthly progress of each stakeholder in the community.
https://www.linkedin.com/groups/12793224/
Turnit can unfortunately not participate in this meeting.
- Review OSDM v3 Pre 3 findings
- By Linus: The cardReference in anonymousPassengerSpecification will not
work. I think the old one describes the need.
- By Linus: The cardReference in anonymousPassengerSpecification will not
work. I think the old one describes the need.
Same as Josef, Ralf
- By Linus: Add TRAIN in ptMode enum-list
Add TRAIN to PTMode enum, it is contained in the code list on the osdm.io
- By Linus: What is the difference between offerParts and bookingParts in
fulfillment?
Removing offerParts as marked deprecated in 2.0.4
-
By öBB: There is an issue with names: They are defined on the general Place level and also in the Subtypes (StopPlace, PointOfInterest).
-
By Josef: For using a TravelAccount in POST Offer request, the CardTypeReference is not sufficient at the moment. Needed changes:
Same as Linus, Ralf
Separate CardReference object for request and response, and create two request objects - ReductionCardReference where type links ReductionCardType (required) and number (optional) identifies the instance; TravelAccountReference has issuers and number both required.
Alternative solution was have type, issuer and number all optional and validate in the implementation.
TravelAccount doesn't have an ID,
- By Ralf: The master data endpoints have different ways to express cache control instructions (4 have an "Expires" header: Coach Layouts, Coach Layout Reduction Card Types, Zone, 3 have a "CacheControl" header: Places, Products, Product). In addition, "Reduction Card Types", "Zones" has "deliveryDate" in the payload.
Expires (HTTP/1.0) can be expressed by Cache-Control (HTTP/1.1), not vica versa. Use Cache-Control everywhere and remove deliveryDate from the master data responses.
- By Ralf: in the travel account balance, the "remaining" amount is both in the Balance object and in the amount of the units. Possible solution: remove the "remaining" attribute from the Balance type and rename the current "unit" attribut (of type "AbstractConsumptionUnit) to "remaining".
Separate TravelAccountUnit and TravelAccountConsumption, also TravelAccountConsumption separate for indication in Offer, and history of TravelAccount.
- By Ralf: SupportingDocument.content should also be mandatory. Doesn't make sense to send a title and a format but no content
Provide download link and expire to have same functionality as for fulfillment documents
- By Ralf: Reimbursement&Complaint UpdatedStatus (Type "BackOfficeStatus") should have a value "UPDATED" to indicate that additional documents have been filed (endpoint PATCH /bookings/{bookingid}/reimbursements/{reimbursementid}
Add to BackOfficeStatus enum
- By Ralf: Almost all offer requests to change a booking or fulfillment are of the form POST /bookings/{bookingId}/xxxOffer (with xxx = exchange, release, cancelFulfillment), with the exception of exchange, which has a straight POST /exchange-offers. This should be changed to POST /bookings/{bookingId}/exchangeOffers (also removing one of the last few remaining dashes (-) in an endpoint URL)
Remove dash from API URLs
Change to POST /bookings/{bookingId}/exchangeOffers
Add Booking reference to Fulfillment
- By Ralf: (cosmetic) In the Passenger type, age should be next to dateOfBirth to make it more visible that these two are related
Yes
- By Ralf: BookingSearchResult should have no other attributes but id as mandatory. Reason: booking search can potentially return a many bookings, and if the mandatory results contain too many details, this can lead to large scale data extraction which is a security risk.
Keep it that way
- By Ralf: (cosmetic) change POST /trips-collection to POST /tripsCollection in order to have consistent use of camelCase throughout the API
Yes
- By Ralf: (in "OfferSearch") CardTypeReference.id should become "type" or "cardType"
As discussed above
- By Ralf: (in GET /availabilities/placeMap) Coach has layoutId, layoutIdUpperDeck and layoutIdLowerDeck, and the layoutId is manadatory. Which layout should be in the (mandatory) layoutId when this is a coach with upper and lower deck, or should layoutId become optional?
layoutId is combined plan for both floors avaiable in master data, layoutIdUpperDeck and layoutIdLowerDeck duplicate the plans for single floor only.
Additional Remarks on the call
OfferPart objects miss validFrom as it represents validity of the product (timeframe of travel/usage rights), Offer.validUntil should be renamed to bookableUntil
- Simplify fulfillment state diagram as we no longer need activation thanks to travel account
No, leave it in and check whether it's been used by anybody
-
fix
providerRef
/allocatorBookingRef
/bookingRef
/bookingProviderRef
- align with TAP-TSI
- Allocator --> Distributor
- Ticker Vendor / Distributor --> Retailer
- align with TAP-TSI
-
Discuss exchange refactoring --> two ways to book an
ExchangeOffer
Remove
exchangeOffer
from PATCH/bookings/{bookingId}
- Update error codes as well as warning codes
- The list of functional warning code is missing on https://osdm.io/spec/errors-warning/.
- Clarify: code or url (as requested by RFC 7807 (https://www.rfc-editor.org/rfc/rfc7807)
- Area: Code Title-Code ohne Prozess/Funktion
-
REFUND
:CONFIRMATION_REFUNDOFFER_ALREADY_CONFIRMED
RefundOffer already confirmed REFUNDOFFER_ALREADY_CONFIRMED -
REFUND
:CONFIRMATION_REFUNDOFFER_EXPIRED
RefundOffer is no longer valid (expired) (*) REFUNDOFFER_EXPIRED -
REFUND
:CONFIRMATION_REFUNDOFFER_NOT_FOUND
RefundOffer does not exist or was deleted REFUNDOFFER_NOT_FOUND -
BOOKING
:BOOKING_BOOKING_NOT_FOUND
Booking does not exist or was deleted BOOKING_NOT_FOUND
-
To be added
- Ralf: 4. POST
/bookings/{bookingId}/exchangeOperations/{exchangeOperationId}
is also still there. We agreed to a. Add a POST/bookings/{bookingId}/exchangeOperations
, which takes theexchangeOffer
as a parameter b. Remove theexchangeOffer
parameter from the PATCH/bookings/{bookingId}
c. If we still need to update an exchange Operation, we would have a PATCH (instead of POST)/bookings/{bookingId}/exchangeOperations/{exchangeOperationId}
To be addressed in OSDM v3 pre3
- Shopping Cart
- Need for a cart functionality from a distributor point of view.
- Release OSDM 3.0 within the next days as it otherwise blocks other parties.
- Start to work on a true cart functionality after the release on a dedicated resource.
- We probably have to increase the pace, so I imagine we build a small sub group to work on it. Koffi has already indicated to me that he is willing to support such an initiative.
- Focus should be on fully understanding the business requirements and business rules before diving into the API modelling.
- Have a discussion whether such a cart functionality is part of OSDM core or an extension to the OSDM standard for distributors.
- Short update from OSDM@PES.
- Finalize open points and the modeling
- Nicolas (looking at 2.1): On offer: As far as I can see, the removal of the get offer-collection (or get offers) killed the scrolling capability. Are we ok with this (I think it is quite a loss) ?
Scrolling on trips is supported, however no scrolling on offers. Thus if you want to scroll, do it based on trips which are nicely ordered by the way.
- Nicolas (looking at 2.1): Why do we still have an objectType in post offer ? I see no oneOf or other kind of structure requiring a discriminator ?
ExchangeOfferCollectionRequest
andExchangeOfferCollectionResponse
should not inherit as it produces strange OpenAPi code.
- Nicolas: same remark on stopPlaceRef in trips. Alos, if it s meant to indicate the kind of places, the discriminant should be in place not in the ref.
- Nicolas: the whole stopPlace construction is sketchy IMO: in trips they make sense, only I would call them PlaceRefs (optional), but in places we again have stopPlaceRef and that one is confusing. I would not know what to put in there: you are already in the place itself ??
- Ralf: Change
POST /bookings/{bookingId}/exchangeOperations/{exchangeOperationsId}
toPATCH /bookings/{bookingId}/exchangeOperations/{exchangeOperationsId}
to be more RESTful (for 3.0)
from Meeting 2022-12-09 the change got lost but needs to be in 3.0:
PATCH /bookings/{bookingId} -> POST /bookings/{bookingId}/exchangeOperations with exchangeOffer in body is missing
The change of the POST is already included:
POST /bookings/{bookingId}/exchangeOperations/{exchangeOperationsId} -> PATCH /bookings/{bookingId}/exchangeOperations/{exchangeOperationId}
- Josef: Finalize modelling of travel account in (for 3.0)
- Agree on business use cases to support:
- Initial creation of account by buying an offer
- Using the travel account to pay for/discount another offer/product
- Charging ("topping up") units to a travel account. Idea: Buy an offer and charge it to the account in the PATCH /booking/ step
- Dissolving a travel account (not in self service, only point-of-sale/back office)
- Clarify relationship between passenger and travel account
- Design: How to model the resources.
- Agree on business use cases to support:
needed changes:
- default for included objects is ALL
- anyOf on the different cards/passes should be a oneOff
- scale and vat is needed for MONEY --> use Price object
- add tripSummary in TravelAccountConsumption and bookingId only
Service attributes are at Board an not at the service. Is that OJP style? or can we improve that?
------------------ next version ------------------------------------------
-
Koffi: Split of bookings
One booking will be split into individual bookings per passenger before booking confirmation. Koffi will make a draft
-
Tim: Error codes and Warnings
there are more error and wrning codes than in: https://osdm.io/spec/errors-warnings/ Tim will provide a proposal for new codes
I-76:
additional texts in Product:
- product features
- display priority
- text (for web sites)
- short text (for mobile devices)
- category:
MANDATORY - mandatory to be displayed (e.g. for legal reasons)
...
additional texts in TripLeg: - display priority - text (for web sites) - short text (for mobile devices) - category:
additional structure in offerpart to include the applied passenger types
- Roland: Clarify time zones for destination
Decision: Use local time at the arrival or destination, respectively. Most be enforced by using a string with a pattern.
Datetime in the form '2017-02-17T13:35:08'. Interpreted as localtime. The seconds are mandatory.
pattern: '(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d)'
- Stina: Identifying the settlement
Every booking is finalized by creating fulfillment id(s). A fulfillment id most be unique, e.g. as a uuid or nanoid. The fulfillment id shall be used for settlement process.
A new settlement specification IRS-30301 will replace the existing 301.G4/G5 as the latter can not deal with online transfer. Planned for release by middle of 2023. (see https://github.com/UnionInternationalCheminsdeFer/UIC-Accounting-File-Viewer)
See github for more information.
- Josef/Ralf: Finalize account feature
Todo Ralf.
-
Koffi: Finalize history feature
-
Andreas: Hardening Product
- Patrick - OSDM Test Scenarios Team - Organisation and Kick-Off
- Josef from Bileto:
BookingRequest.externalRef
is required, butBooking.externalRef
inPOST /bookings
response is optional. Bileto question: optional or required?
- make externalRef optional in the bookingRequest
- change the comment in the booking as the externalRef is a reference from the requestor. The element has to be provided in the reply in case it was provided in the request.
- add a providerRef in the booking to include an optional provider reference
- Lookup for multi-ride ticket/account/pass balance API proposal: https://github.com/UnionInternationalCheminsdeFer/OSDM/issues/317
- Andreas from SBB: Hardening
Product
:
--> Example errors owith http reply codes should be improved to show valid reasons.
- Linus from Turnit: Passenger and trips are missing in response for POST
/bookings/{bookingId}/bookedOffers and GET /bookings/{bookingId}/bookedOffers
- Include the complete booking in the reply and a list of the new bookedOfferIds created by the Post request.
- Do the same for adding a reservation or ancillary
- Linus from Turnit: CarrierRef is currently represented as RICS-codes. For the
namespace UIC this is probably good, but we must introduce a x_swe name space
in Sweden since we have a lot of PTA's and Express bus carriers not members of
UIC in the system.
Suggested is to replace RICS to carrier. urn:x_swe:carrier:74
- Stina from SJ: Hopefully this can be handled within the standard, but we would like to reason about the sale of the full compartment (primarily for night trains) - where would the accomodationSubType be set for in the offer search to get the right response?
TODO : improve error message examples
NonTripSearchCriteria
has been added
Check
Decide on API Versioning
Decision Tree
Versioning of resource or suite?
How/where do we version (path, header,...)?`
Which kind of header versioning
- HTTP version (RFC 4229):
version: 2.0
- Media Type Profile (RFC 6906)
Accept: application/json; profile="https://osdm.io/2.0"
- Media Type Version
Accept: application/vnd.example+json;version=2.0
Backward compatibility and semantic versions
Many questions: Form a small group of experts
Decisions:
- We must adhere to semantic versioning
- OSDM 2.1 will be OSDM 3.0 as we have breaking changes
From Linus at Turnit
POST /bookings/{bookingId}/exchangeOperations/{exchangeOperationId}
The operation is meant to return the prebooked offers in the response:
- the trips are missing.
- Fulfillment for the new offer is not in scope since the offers are in PREBOOKED state.
- exchangeOffer shall have the same definition as a bookedOffer with the extension of exchangeFee and exchangePrice.
The booking on the distributor side will be updated with new bookedOffers in the same way as for a normal booking. Probably it would be good for the distributor to get the replaced offer as well to update e.g. offerPartStatus to EXCHANGE_ONGOING
The exchange offer should only reference the fulfillment(s) that the exchange offers are created for.
To do: rename to
exchangedFulfillmentIds
Status is missing in a Fee offer
Fee's state are linked to an offer, no change required.
Points raised by Sqills
- add flexibility to
Product
Agreed
- remove
Purchaser.id
Agreed
- add
MIXED
to accommodation sub type
Agreed
-
New: The modelling date is available in the API version's field.
-
Different types of non-trip tickets
-
Season Pass
Travel unlimited within a date range with a carrier
Example: SJ, Yearly card
Parameters needed:
- Start date
- Passenger category
Can need a seat-reservation on some services. Book a 100% discount ticket with the Season Pass as a REDUCTION_CARD.
-
Season ticket
Travel unlimited between two locations in both directions within a date range
Example:
- 30 days travel between Stockholm and Uppsala with Mälartåg.
- 30 days travel in Stockholm area.
Parameters needed:
- Start date
- StopPlace relation or an area
- Passenger category
-
Multi ride ticket
Travel n-times between two locations in both directions within a date range
Example: 10-trip between Stockholm and Uppsala with SJ
Parameters needed:
- Start date
- StopPlace relation or an area
- Passenger category
Need a call off functionality to register each travel. Book a 100% discount ticket with the multi ride ticket as a REDUCTION_CARD
-
Changes in OSDM
When searching for non-trip offers, parameters for start date and StopPlace relation is missing. Passenger category works as it is specified.
With a stopPlaceCoverage array it is possible to ask for products for one stopPlace and stopPlace-relations like Stockholm C to Uppsala C, or even more stopPlaces involved in the offer if that is needed.
It is also possible for the provider to return alternative valid stopplaces for a Multi-Ride ticket.
Example: You have a 10-trip multi ride ticket between A and C. Then it is possible to make a call-off between A and B since B is located between A and C. StopPlace coverage is then StopPlace A,B,C
Change suggestions:
-
Alternative change agreed in the meeting:
- add a "nonTripSearchCriteria" to the OfferCollectionRequest, with the understanding that exactly one of tripSpecification, tripSearchCriteria, tripIds or nonTripSearchCriteria will be specified
- define the NonTripSearchCriteria as follows:
NonTripSearchCriteria:
type: object
description: >-
This defines the requested validity when searching specifically for a non-trip Offer.
The geographical validity can either be specified by a list of nutsCodes, by a list
of places (i.e. stations) with the semantics that trips between either of any of
the listed stations are covered (e.g. Frankfurt (Main)Hbf, Friedberg(Hess)
and Hanau Hbf, which would imply that any travel between these stations is to
be covered), or a list of zones (e.g. with carrier urn:vdv:rmv, the zones with the
ids 50, 2501 and 3001 would cover the same area as the list of stations above)
additionalProperties: false
properties:
validFrom:
type: string
format: date
nutsCodes:
description: >-
Nomenclature des units territoriales statistiques COMMISSION REGULATION (EU) No 31/2011
type: array
items:
type: string
places:
type: array
items:
$ref: '#/components/schemas/PlaceRef'
zones:
type: array
items:
$ref: '#/components/schemas/ZoneDefinition'
- remove the nutsCode and place attributes from OfferSearchCriteria structure, making the OfferSearchCriteria a pure filter specification
-
GET /booking/{bookingId}
The response of a booked non-trip offer is not complete. Missing elements in the admissionPart are:
- ValidFrom (date-time)
- StopPlaceCoverage. What places are the admission valid for.
- Mult-ride ticket balance. Used 5 of 10.
-
API versioning (ASC)
We discussed the topic a while ago.
So far we have deliberately avoided versioning in the URL and have been thinking in the direction of content negotiation. From a migration point of view, versioning with content negotiation is charming (e.g.: https://apisyouwonthate.com/blog/api-versioning-has-no-right-way or https://opensource.zalando.com/restful-api-guidelines/#114)
If we decide to go that way, we would need to improve the Accept-Header and Content-Header. E.g.:
Accept: application/osdm-json, version=2
-
Address "Question 2" by turnit
-
Modeling of support for account based travel
-
Modeling of Support of On-Demand Services
- Hardening the modelling of Refund, too many attributes are optional (ASC).
validUntil
: time until the offer can be used, however its availability is not guaranteed
-
Fix BookingPart state model
-
Finalize history feature from Koffi
Offer createdOn AbstractOfferPart createdOn Booking createdOn confirmedOn AbstractBookingPart createdOn confirmedOn RefundOffer createdOn confirmedOn ExchangeOffer createdOn confirmedOn CancelFulfillmentsOffer createdOn confirmedOn OnholdOffer createdOn confirmedOn Fulfillment createdOn
-
1.4.2 contained
Offer.reservations[].optionality=INCLUDED
to express that putting the Offer into Bookings means automatically add the Reservation. This field is not present in 2.0/2.1. How to express an Offer with Reservation always included? (Direct Reservation Booking use case).
Reservation.optionality was intended to design IRT products, not to provide relation of optionality of Reservation within an Offer. If the Offer is reservation-only, system should indeed validate if Reservation was selected in the prebooking request.
-
Questions by Turnit
(1) Primarily we support three types of non-trip products.
- Carrier pass, where you can travel on all trains for the carrier during a certain period
- Season-passes (period cards), where you travel between two locations for free during a certain period. E.g. Stockholm C – Uppsala C, 30 days
- Multi ride passes where you travel between two locations 10-times during a
certain period.
- This product uses a call off functionality, where you book a normal ticket to 100% discount with a reference to the multiride ticket to reduce the remaining amount of trips.
Identified missing parts in OSDM
- In Offer search there is no possibility to specify the relation ( from and to places) when searching for non-trip offers
- Valid from date (Start date), is not possible to specify either
This should be already expressible by now: Either filter using
productTags
or usingnutsCodes
.We probably need to standardize on productTags slightly.
(2) GET /bookings/{bookingId}
The current balance of a multi ride ticket is not presented in
GET /bookings/{bookingId}
. Also, a call of history is good to have,
Can we add something like this to the admissionPart?
"multiRideUsage":
{
"used": "integer",
"total": "integer",
"callOffHistory": [
{
"fulfillmentid": "string",
"travelDateTime": "string"
}
]
}
We need more information on the use case, i.e., a better distinction between multi-ride and abo
OSDM Wiki