KIU_AirBookV2RS - Extension de ancillaries
Objetivo:
Soportar en la respuesta vía este método los items cotizados como Ancillaries:
Origen de datos:
Para soportar la información proveniente de la respuesta del comando WW - Se extendió el JSON agregando el Nodo, "AncillariesQuotations"
Dentro de este nodo se va a encontrar la clave: "AncillariesQuotation1" - Con la correspondiente descripción de los items que componen el mismo. Cada "AncillariesQuotation1" corresponde a un grupo de items x pasajero. La respuesta puede contener mas de un "AncillariesQuotation1" dependiendo si el/los pasajeros consumen ítems de distintos grupos.
Ejemplo de Respuesta en JSON:
{ "Data": { "Resultado": "OK", "Command": "WS+AE", "Quoted": { "AgenteID": "KIUHELPGN", "DateTime": "2017-08-28 13:08" }, "Quotations": { "Quotation1": { "QuoteMode": "Automatic", "PaxType": "A", "Quantity": "3", "QuotationType": "D", "FareConstruction": "BUE XX PTY 1000.00NUC1000.00END ROE1.000000", "Amounts": { "BaseFare": { "Currency": "USD", "Amount": "1000.00" }, "EquivalentPaid": { "Currency": "ARS", "Amount": "17400.00" }, "TotalAmount": { "Currency": "ARS", "Amount": "20190.96" }, "Taxes": { "AR": { "Amount": "1242.36" }, "QO": { "Amount": "174.00" }, "TQ": { "Amount": "174.00" }, "XR": { "Amount": "852.60" }, "YQ": { "Amount": "348.00" } } }, "Segments": { "1": { "MarketingCarrier": "XX", "OperatingCarrier": "", "FlightNumber": "453", "Origin": "EZE", "Destination": "PTY", "BookingCode": "B", "FlightDate": "080917", "ReservationStatus": "", "FareBasis": "BOW", "NotValidBefore": "", "NotValidAfter": "", "BagaggeAllow": { "Quantity": "23", "Unit": "" }, "FlightRemark": "" } } } }, "AncillariesQuotations": { "AncillariesQuoted": { "AgenteID": "KIUHELPGN", "DateTime": "2017-08-28 13:08" }, "AncillariesQuotation1": { "QuoteMode": "Automatic", "EMD_Type": "A", "PTC": "ADT", "PaxQuantity": "1", "PassengerUPID": "1", "FareConstruction": "", "Amounts": { "BaseFare": { "Currency": "USD", "Amount": "100.00" }, "EquivalentPaid": { "Currency": "ARS", "Amount": "1740.00" }, "TotalAmount": { "Currency": "ARS", "Amount": "1740.00" } }, "Coupons": { "1": { "RFIC": "A", "RFISC": "0B5", "RFISC_Description": "SEAT ASSIGNMENT", "FareCurrency": "USD", "FareAmount": "100.00", "Remark": "", "PresentAt_CityOfService": "EZE", "PresentAt_CityOfServiceName": "EZEIZA", "PresentTo_AirlineOfService": "XX", "PresentTo_AirlineOfServiceName": "LINEAS AEREAS XX", "ServiceID": "LINEAS AER", "ServiceItemType": "SEA", "ServiceQuantity": "1", "Exchangeable": "false", "Refundable": "true", "ConsumedAtIssuance": "false", "RequireTicketAssociated": "true", "FeeOwnerAirlineDesignator": "XX", "ServiceCode": "SEAT", "ServiceAditionalInfo": { "MarketingCarrier": "XX", "OperatingCarrier": "", "FlightNumber": "453", "DateOfService": "080917", "BookingCode": "B", "CityOfService": "EZE", "CityToOfService": "PTY", "Bagagge": { "ExcessBaggageTotalNumber": "0", "ExcessBaggageUnitOfMeasure": "K", "ExcessBaggageCurrency": "", "ExcessBaggageRatePerUnit": "0.00" }, "SegmentUPID": "1" } } } }, "AncillariesQuotation2": { "QuoteMode": "Automatic", "EMD_Type": "A", "PTC": "ADT", "PaxQuantity": "1", "PassengerUPID": "1", "FareConstruction": "", "Amounts": { "BaseFare": { "Currency": "USD", "Amount": "0.00" }, "EquivalentPaid": { "Currency": "ARS", "Amount": "0.00" }, "TotalAmount": { "Currency": "ARS", "Amount": "0.00" } }, "Coupons": { "1": { "RFIC": "C", "RFISC": "0CC", "RFISC_Description": "1ST ADDITIONAL BAG", "FareCurrency": "USD", "FareAmount": "0.00", "Remark": "", "PresentAt_CityOfService": "EZE", "PresentAt_CityOfServiceName": "EZEIZA", "PresentTo_AirlineOfService": "XX", "PresentTo_AirlineOfServiceName": "LINEAS AEREAS XX", "ServiceID": "LINEAS AER", "ServiceItemType": "SSR", "ServiceQuantity": "1", "Exchangeable": "false", "Refundable": "false", "ConsumedAtIssuance": "false", "RequireTicketAssociated": "true", "FeeOwnerAirlineDesignator": "XX", "ServiceCode": "PBGF", "ServiceAditionalInfo": { "MarketingCarrier": "XX", "OperatingCarrier": "", "FlightNumber": "453", "DateOfService": "080917", "BookingCode": "B", "CityOfService": "EZE", "CityToOfService": "PTY", "Bagagge": { "ExcessBaggageTotalNumber": "0", "ExcessBaggageUnitOfMeasure": "K", "ExcessBaggageCurrency": "", "ExcessBaggageRatePerUnit": "0.00" }, "SegmentUPID": "1" } } } }, "AncillariesQuotation3": { "QuoteMode": "Automatic", "EMD_Type": "A", "PTC": "ADT", "PaxQuantity": "1", "PassengerUPID": "1", "FareConstruction": "", "Amounts": { "BaseFare": { "Currency": "USD", "Amount": "0.00" }, "EquivalentPaid": { "Currency": "ARS", "Amount": "0.00" }, "TotalAmount": { "Currency": "ARS", "Amount": "0.00" } }, "Coupons": { "1": { "RFIC": "G", "RFISC": "0B1", "RFISC_Description": "IN FLIGHT ENTERTAINMENT", "FareCurrency": "USD", "FareAmount": "0.00", "Remark": "", "PresentAt_CityOfService": "EZE", "PresentAt_CityOfServiceName": "EZEIZA", "PresentTo_AirlineOfService": "XX", "PresentTo_AirlineOfServiceName": "LINEAS AEREAS XX", "ServiceID": "LINEAS AER", "ServiceItemType": "SSR", "ServiceQuantity": "1", "Exchangeable": "false", "Refundable": "true", "ConsumedAtIssuance": "false", "RequireTicketAssociated": "false", "FeeOwnerAirlineDesignator": "XX", "ServiceCode": "PDIE", "ServiceAditionalInfo": { "MarketingCarrier": "XX", "OperatingCarrier": "", "FlightNumber": "453", "DateOfService": "080917", "BookingCode": "B", "CityOfService": "EZE", "CityToOfService": "PTY", "Bagagge": { "ExcessBaggageTotalNumber": "0", "ExcessBaggageUnitOfMeasure": "K", "ExcessBaggageCurrency": "", "ExcessBaggageRatePerUnit": "0.00" }, "SegmentUPID": "1" } } } }, "AncillariesQuotation4": { "QuoteMode": "Automatic", "EMD_Type": "A", "PTC": "ADT", "PaxQuantity": "1", "PassengerUPID": "2", "FareConstruction": "", "Amounts": { "BaseFare": { "Currency": "USD", "Amount": "100.00" }, "EquivalentPaid": { "Currency": "ARS", "Amount": "1740.00" }, "TotalAmount": { "Currency": "ARS", "Amount": "1740.00" } }, "Coupons": { "1": { "RFIC": "A", "RFISC": "0B5", "RFISC_Description": "SEAT ASSIGNMENT", "FareCurrency": "USD", "FareAmount": "100.00", "Remark": "", "PresentAt_CityOfService": "EZE", "PresentAt_CityOfServiceName": "EZEIZA", "PresentTo_AirlineOfService": "XX", "PresentTo_AirlineOfServiceName": "LINEAS AEREAS XX", "ServiceID": "LINEAS AER", "ServiceItemType": "SEA", "ServiceQuantity": "1", "Exchangeable": "false", "Refundable": "true", "ConsumedAtIssuance": "false", "RequireTicketAssociated": "true", "FeeOwnerAirlineDesignator": "XX", "ServiceCode": "SEAT", "ServiceAditionalInfo": { "MarketingCarrier": "XX", "OperatingCarrier": "", "FlightNumber": "453", "DateOfService": "080917", "BookingCode": "B", "CityOfService": "EZE", "CityToOfService": "PTY", "Bagagge": { "ExcessBaggageTotalNumber": "0", "ExcessBaggageUnitOfMeasure": "K", "ExcessBaggageCurrency": "", "ExcessBaggageRatePerUnit": "0.00" }, "SegmentUPID": "1" } } } }, "AncillariesQuotation5": { "QuoteMode": "Automatic", "EMD_Type": "A", "PTC": "ADT", "PaxQuantity": "1", "PassengerUPID": "2", "FareConstruction": "", "Amounts": { "BaseFare": { "Currency": "USD", "Amount": "0.00" }, "EquivalentPaid": { "Currency": "ARS", "Amount": "0.00" }, "TotalAmount": { "Currency": "ARS", "Amount": "0.00" } }, "Coupons": { "1": { "RFIC": "G", "RFISC": "0B1", "RFISC_Description": "IN FLIGHT ENTERTAINMENT", "FareCurrency": "USD", "FareAmount": "0.00", "Remark": "", "PresentAt_CityOfService": "EZE", "PresentAt_CityOfServiceName": "EZEIZA", "PresentTo_AirlineOfService": "XX", "PresentTo_AirlineOfServiceName": "LINEAS AEREAS XX", "ServiceID": "LINEAS AER", "ServiceItemType": "SSR", "ServiceQuantity": "1", "Exchangeable": "false", "Refundable": "true", "ConsumedAtIssuance": "false", "RequireTicketAssociated": "false", "FeeOwnerAirlineDesignator": "XX", "ServiceCode": "PDIE", "ServiceAditionalInfo": { "MarketingCarrier": "XX", "OperatingCarrier": "", "FlightNumber": "453", "DateOfService": "080917", "BookingCode": "B", "CityOfService": "EZE", "CityToOfService": "PTY", "Bagagge": { "ExcessBaggageTotalNumber": "0", "ExcessBaggageUnitOfMeasure": "K", "ExcessBaggageCurrency": "", "ExcessBaggageRatePerUnit": "0.00" }, "SegmentUPID": "1" } } } }, "AncillariesQuotation6": { "QuoteMode": "Automatic", "EMD_Type": "A", "PTC": "ADT", "PaxQuantity": "1", "PassengerUPID": "3", "FareConstruction": "", "Amounts": { "BaseFare": { "Currency": "USD", "Amount": "100.00" }, "EquivalentPaid": { "Currency": "ARS", "Amount": "1740.00" }, "TotalAmount": { "Currency": "ARS", "Amount": "1740.00" } }, "Coupons": { "1": { "RFIC": "A", "RFISC": "0B5", "RFISC_Description": "SEAT ASSIGNMENT", "FareCurrency": "USD", "FareAmount": "100.00", "Remark": "", "PresentAt_CityOfService": "EZE", "PresentAt_CityOfServiceName": "EZEIZA", "PresentTo_AirlineOfService": "XX", "PresentTo_AirlineOfServiceName": "LINEAS AEREAS XX", "ServiceID": "LINEAS AER", "ServiceItemType": "SEA", "ServiceQuantity": "1", "Exchangeable": "false", "Refundable": "true", "ConsumedAtIssuance": "false", "RequireTicketAssociated": "true", "FeeOwnerAirlineDesignator": "XX", "ServiceCode": "SEAT", "ServiceAditionalInfo": { "MarketingCarrier": "XX", "OperatingCarrier": "", "FlightNumber": "453", "DateOfService": "080917", "BookingCode": "B", "CityOfService": "EZE", "CityToOfService": "PTY", "Bagagge": { "ExcessBaggageTotalNumber": "0", "ExcessBaggageUnitOfMeasure": "K", "ExcessBaggageCurrency": "", "ExcessBaggageRatePerUnit": "0.00" }, "SegmentUPID": "1" } } } }, "AncillariesQuotation7": { "QuoteMode": "Automatic", "EMD_Type": "A", "PTC": "ADT", "PaxQuantity": "1", "PassengerUPID": "3", "FareConstruction": "", "Amounts": { "BaseFare": { "Currency": "USD", "Amount": "0.00" }, "EquivalentPaid": { "Currency": "ARS", "Amount": "0.00" }, "TotalAmount": { "Currency": "ARS", "Amount": "0.00" } }, "Coupons": { "1": { "RFIC": "G", "RFISC": "0B1", "RFISC_Description": "IN FLIGHT ENTERTAINMENT", "FareCurrency": "USD", "FareAmount": "0.00", "Remark": "", "PresentAt_CityOfService": "EZE", "PresentAt_CityOfServiceName": "EZEIZA", "PresentTo_AirlineOfService": "XX", "PresentTo_AirlineOfServiceName": "LINEAS AEREAS XX", "ServiceID": "LINEAS AER", "ServiceItemType": "SSR", "ServiceQuantity": "1", "Exchangeable": "false", "Refundable": "true", "ConsumedAtIssuance": "false", "RequireTicketAssociated": "false", "FeeOwnerAirlineDesignator": "XX", "ServiceCode": "PDIE", "ServiceAditionalInfo": { "MarketingCarrier": "XX", "OperatingCarrier": "", "FlightNumber": "453", "DateOfService": "080917", "BookingCode": "B", "CityOfService": "EZE", "CityToOfService": "PTY", "Bagagge": { "ExcessBaggageTotalNumber": "0", "ExcessBaggageUnitOfMeasure": "K", "ExcessBaggageCurrency": "", "ExcessBaggageRatePerUnit": "0.00" }, "SegmentUPID": "1" } } } } } } }
Matcheo de la respuesta a KIU_AirBookV2RS
En base a JSOn se estructura la siguiente respuesta con su correspondiente valor asignado a cada campo. Teniendo en cuenta la actual funcionalidad, solamente se indican los campos a agregar.
<?xml version="1.0" encoding="UTF-8"?> <KIU_AirBookV2RS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" TimeStamp="" EchoToken="" Target="Production" Version="0"> <Success /> <!-- ATENCION: Todos los componentes se deben englobar dentro de AirReservation --> <AirReservation> <AirItinerary> <OriginDestinationOptions> <OriginDestinationOption> <FlightSegment /> </OriginDestinationOption> </OriginDestinationOptions> </AirItinerary> <PriceInfo> <!-- AirReservation Stored Fare: WW AIR--> </PriceInfo> <TravelerInfo> <AirTraveler /> <SpecialReqDetails /> </TravelerInfo> <!-- AirOffer and Merchandise non-air: El nodo Offer se agrega para soportar la respuesta de Quotation WW de AE si la respuesta JSON del WW tiene el siguiente valor: "Command": "WS+AE" significa que debe haber <Offer>--> <Offer> <!-- Priced: Lista de items asociados x segmento donde se describe que servicios de cada grupo estan reservados --> <Priced SegmentRPH="[SegementUPID:]"> <!-- ServiceFamily: Repetitivo por cada "AncillariesQuotation" que exista en la respuesta JSON --> <ServiceFamily Group="[RFIC:]" Type="[EMDType:]" PTC="[PTC:]" Quantity="1"> <!-- Coupon1 Item asociado x cada pasajero.--> <ItemOffer Code="[RFISC:]" Description="[RFISC_Description:]" TravelerRefRRPH="[PassengerUPID:]"> <!-- IssueInfo: Condiciones de emisión de cada cupon --> <IssueInfo> <Exchangeble>["Exchangeable":]</Exchangeble> <Refundable>["Refundable":]</Refundable> <ConsumeAtIssuance>["ConsumedAtIssuance":]</ConsumeAtIssuance> <RequiredTicket>"RequireTicketAssociated":</RequiredTicket> </IssueInfo> <ItemPriced> <Amount> <!-- JSON "Amounts": --> <!-- "BaseFare": { "Currency": "USD", "Amount": "0.00" }, --> <BaseFare CurrencyCode="USD">200.00</BaseFare> <!-- "EquivalentPaid": { "Currency": "ARS", "Amount": "0.00" }, --> <EquivalentPaid CurrencyCode="ARS">1745.00</EquivalentPaid> <!-- "TotalAmount": { "Currency": "ARS", "Amount": "0.00" } --> <TotalPriced CurrencyCode="" /> </Amount> <!-- Taxes: Es opcional. Si no hay info no se muestra - --> <!-- "Taxes": { TaxCode=> "AA": { TaxAmount=> "Amount": "125.54" }, "BB": { "Amount": "5.00" } }, --> <Taxes> <Tax> <TaxCode>QN</TaxCode> <TaxAmount>10.00</TaxAmount> </Tax> </Taxes> <!-- Se aplica unicamente a aquellos códigos asociados a ExcessBagagge, FamilyService code="C" RFIC = "C" --> <TPA_Extension> <BaggageInfo UnitOfMeasure="[BaggageUnitOfMeasure:]" CurrencyCode="[ExcessBaggageCurrency:]" RatePerUnit="[ExcessBaggageRatePerUnit:]"> <ExcessBaggageTotalNbr>["ExcessBaggageTotalNumber"]</ExcessBaggageTotalNbr> </BaggageInfo> </TPA_Extension> </ItemPriced> </ItemOffer> <!-- Coupon2 --> <ItemOffer Code="[RFISC]" Description="[RFISC_Description]" SegmentRPH="[segmentUpid]"> <ItemPriced TravelerRefRRPH="1"> <Amount> <BaseFare CurrencyCode="USD">200.00</BaseFare> <EquivalentPaid CurrencyCode="ARS">1745.00</EquivalentPaid> <TotalPriced CurrencyCode="" /> </Amount> <!-- Taxes: Es opcional. Si no hay info no se muestra - TBD en JSON --> <Taxes> <Tax> <TaxCode>QN</TaxCode> <TaxAmount>10.00</TaxAmount> </Tax> </Taxes> </ItemPriced> </ItemOffer> </ServiceFamily> <!-- AncillaryQuotation2 genera una segunda instancia de ServiceFamily que va a incluir los Coupons como ItemOffer--> <ServiceFamily Group="[RFIC:]" Type="[EMDType:]" PTC="[PTC:]" Quantity="1"> <ItemOffer Code="[RFISC]" Description="[RFISC_Description]" SegmentRPH="[segmentUpid]"> <ItemPriced TravelerRefRRPH="1"> <Amount> <BaseFare CurrencyCode="USD">200.00</BaseFare> <EquivalentPaid CurrencyCode="ARS">1745.00</EquivalentPaid> <TotalPriced CurrencyCode="" /> </Amount> <!-- Taxes: Es opcional. Si no hay info no se muestra - TBD en JSON --> <Taxes> <Tax> <TaxCode>QN</TaxCode> <TaxAmount>10.00</TaxAmount> </Tax> </Taxes> </ItemPriced> </ItemOffer> </ServiceFamily> </Priced> </Offer> <BookingReferenceID Type="" ID="" /> </AirReservation> </KIU_AirBookV2RS>
En el ambiente de Developmente esta sincronizado, pero el circuito de Ancillaries no esta soportando los RFIC y RFISC. Por lo tanto el testing si o si hay que hacerlo en Stage.
Elementos del mensaje a agregar.
- Offer: Elemento que contiene la información de la cotización de ancillaries en una reserva.
- Priced: Elemento que contiene la descripción de cada grupo cotizado para la lista de ofertas
- ServiceFamily: Elemento que contiene la información de los ítems cotizados en cada familia que corresponde a cada grupo de Servicios Reservados.
- Group: Alfabético. (1). Código RFIC del grupo.
- Type: Alfabético. (1). Tipo de documento a emitir. [A; EMD-A, S; EMD-S].
- PTC: Alfabético (3). Tipo de pasajero de la cotización. (ADT=Adulto/CNN=Menor/INF=Infante).
- Quantity: Entero. Positivo. Cantidad de servicio.
- ItemOffer: Elemento que contiene la información individual del servicio que corresponde al grupo/Familia de referencia.
- Code: Alfanumérico (3). Código RFISC: Codigo del servicio.
- Description: Alfanumérico (25). Descripción marketing del código RFISC.
- ItemPriced: Elemento que contiene la información de valores y asociación al pasajero en la reserva.
- TravelerRefRPH: Entero Positivo. Referencia interna a un pasajero de la lista que componen la reserva.
- Amount: Elemento que describe el precio del ítem.
- BaseFare: Decimal. Entero positivo. 2 Decimales: Valor del Ítem expresado en su moneda de publicación.
- CurrencyCode: ISO Currency. Moneda de publicación del servicio.
- EquivalentPaid: Entero Positivo. 2 Decimales. Valor del Ítem convertido a la moneda requerida.
- CurrencyCode: ISO Currency. Moneda de despliegue.
- TotalPriced: Entero Positivo. 2 Decimales. Valor total del servicio
- CurrencyCode: ISO Currency. Moneda de emisión del servicio. Total a pagar de acuerdo al equivalente.
- Taxes: Elemento que agrupa la lista de impuestos/tasas aplicables al servicio.
- Tax: Elemento que describe cada impuesto singular.
- TaxCode: Alfanumérico (3). Código de impuesto/Tasa.
- TaxAmount: Entero Positivo. 2 decimales. Monto de la tasa/Impuesto imputado.
- Tax: Elemento que describe cada impuesto singular.
- BaseFare: Decimal. Entero positivo. 2 Decimales: Valor del Ítem expresado en su moneda de publicación.
- Amount: Elemento que describe el precio del ítem.
- TravelerRefRPH: Entero Positivo. Referencia interna a un pasajero de la lista que componen la reserva.
- ServiceFamily: Elemento que contiene la información de los ítems cotizados en cada familia que corresponde a cada grupo de Servicios Reservados.
- Priced: Elemento que contiene la descripción de cada grupo cotizado para la lista de ofertas