- The 19.03 update to the Corporate Travel Services is focused on improved error handling, squashing bugs, and delivering enhancements.
- Better categorization and additional information has been added for the following error situations: * `Routing session has been terminated` when another booking was completed on the same identifier. Now this scenario returns error `type` = "CATALOG_EXPIRED" under `category` "EXPIRED_DATA" with `description` "Catalog has expired. Please create new one.".
- * `E_CANT_VERIFY_MCT` when unable to verify minimum connection time. This now returns `type` = "UNABLE_TO_BOOK" under `category` "INTERNAL_SERVER_ERROR" with `description` "Unable to verify Minimum Connection Time".
- * Air Connect (Travelfusion) flights with insufficient connection time. Instead of `500 INTERNAL SERVER ERROR` these situations now return an error with `type` = "INSUFFICIENT_CONNECTING_TIME" under `category` "INVALID_DATA" with `description` "Insufficient connecting time between journeys".
- * Added error for Air Connect (TravelFusion) when a flight is no longer available. This now returns `type` = "FLIGHT_NOT_AVAILABLE" under `category` "EXPIRED_DATA" with `description` "Flight is no longer available".
- * Passport expiration date is missing from profile. This situation used to return an exception from a `GET /travelers` request with `500 INTERNAL SERVER ERROR`. Now the passport expiration date is ignored and a `GET /travelers` response is returned without any `expirationDate` element under `passport`.
- Enhancements and General Improvements
- Other updates have been made to improve various Corporate Travel Services: * A new `mightBeExpired` indicator as been added to the `GET /carts` response under `acceptableKnownPaymentOptions`. When true this indicates the currrent date is beyond the expiration date for the associated payment card. And the `POST /bookings` request has been updated to allow the stored expiration date of a payment card to be overwritten. A replacement date (only used for that booking) can be provided in the `expirationDate` element within `pciData` (part of the `paymentCard` object).
- * A change has been made to the POST /catalogs request so the `fareType` is ignored when shopping on Amadeus and `classOfService` = "FIRST". This eliminates the requirement to send a `null` or empty `fareType` in this situation - revising the limitation described at the end of the [19.02 Release Notes](http://corporatetravel.developer.sabre.com/blog/1902-release-notes#section-enhancements-and-general-improvements), under "Special considerations with Amadeus".
- * The `quotedPrice` of the fare in the PCC currency is now properly passed through the services so a booking will be made using the correct price. Previously it was possible for that price to be converted to another currency, leading to unwanted behavior such as purchasing a more expensive flight or not completing the booking. This resolves a problem that required a workaround by updating the site's currency in Site Administration to match the currency setting for the PCC.
- * `supplementaryDataQuestions` using a `constrainedResponse` are now handled by `GET /carts` (and `POST /bookings`) when `preDefinedAnswers` has an `answer` without any `answerId`. The common example of this situation is when “Please select” or similar text appears at the top of a `preDefinedAnswers` list. The “Please select” choice has an `answer` for display to the traveler, but no `answerId` for the booking. This case was resulting in an error response of `500 INTERNAL SERVER ERROR` from `GET /carts`. Now the response is returned, including those options without an `answerId`. In addition, `POST /bookings` has been updated so requests are handled properly when they involve `supplementaryData` and a `constrainedResponse` where a `null` or empty `answerId` is possible.
- Note: Options from `GET /carts` without an `answerId` should be treated as *placeholders* or *headings* for the actual, valid choices. The traveler should be prompted to select an option with an `answerId`, so that information can be included in the `POST /bookings` request when the `supplementaryDataQuestionId` is required to complete the booking (i.e., `answerRequired` = "true").
- * Total cost information has been added to the `GET /bookings` response. Objects for `totalFlightCost`, `totalCarCost`, `totalHotelCost`, and `totalTripCost` are now included. These "total cost" items will always provide a tally of `localizedPrice`, and will also summarize the `quotedPrice` when all parts of that component are in the same quoted currency. The `isCancelable` indicator is also now present in the `GET /bookings` response. (Note that `totalFlightCost`, `totalTripCost`, and `isCancelable` were already defined in the schema for `GET /bookings` but were not populated with data.)
- Note: Important ... the `totalTripCost` object is changing its name to `totalBookingCost` in the next release.
Service Action Code: ExchangeShoppingRQ
- Exchange Shopping now allows users to target specific resulting fares using a Brand ID Code. The request can include a unique Brand ID or multiple Brand IDs that can be applied to the entire itinerary or per leg.