Promoções

Visão geral

Essa API permite especificar possíveis descontos. Das promoções especificadas, o Google aplica a promoção qualificada ou o conjunto de promoções que resulta no menor preço. Se você estiver procurando uma API compatível com ajustes arbitrários de taxa que possam aumentar ou diminuir o preço quando as condições forem atendidas, considere a API Rate Modifieds. Se as duas APIs estiverem presentes, as modificações de taxa serão aplicadas antes das promoções.

Solicitações

Sintaxe

A mensagem Promotions usa a seguinte sintaxe:

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner= "partner_key"
            id="message_ID"
            timestamp="timestamp">
  <HotelPromotions hotel_id="HotelID" action="[overlay]">
    <Promotion id="PromotionID" action="[delete]">
      <BookingDates>
        <DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
          days_of_week="MTWHFSU_or_subset"/>
        <DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
          days_of_week="MTWHFSU_or_subset"/>
      </BookingDates>
      <BookingWindow min="integer_or_duration" max="integer_or_duration"/>
      <Ceiling amount_per_night="float"/>
      <Floor amount_per_night="float"/>
      <CheckinDates>
        <DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
      </CheckinDates>
      <CheckoutDates>
        <DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
      </CheckoutDates>
      <!-- Specify only one of percentage, fixed_amount, fixed_amount_per_night,
           fixed_price, or fixed_price_per_night; applied_nights is only used
           with percentage, fixed_amount_per_night, and fixed_price_per_night. -->
      <Discount percentage="float" fixed_amount="float" fixed_amount_per_night="float"
                fixed_price="float" fixed_price_per_night="float"
                applied_nights="integer_1_to_99" rank="integer_1_to_99">
        <!-- FreeNights may not be used in conjunction with attributes on Discount -->
        <FreeNights stay_nights="integer" discount_nights="integer"
                    discount_percentage="float" night_selection="[cheapest|last]"
                    repeats="boolean"/>
      </Discount>
      <!-- Exactly one of Discount or BestDailyDiscount must be specified.
           Specify only one of percentage, fixed_amount, or fixed_price. -->
      <BestDailyDiscount percentage="float" fixed_amount="float" fixed_price="float"/>
      <Devices>
        <Device type="[desktop|tablet|mobile]"/>
      </Devices>
      <InventoryCount min="integer" max="integer"/>
      <LengthOfStay min="integer" max="integer"/>
      <MembershipRateRule id="RateRuleID"/>
      <MinimumAmount before_discount="integer"/>
      <Occupancy min="integer" max="integer"/>
      <RatePlans>
        <RatePlan id="PackageID_1"/>
        <RatePlan id="PackageID_2"/>
      </RatePlans>
      <RoomTypes>
        <RoomType id="RoomID_1"/>
        <RoomType id="RoomID_2"/>
      </RoomTypes>
      <Stacking type="[any|base|none|second]"/>
      <StayDates application="[all|any|overlap]">
        <DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
      </StayDates>
      <UserCountries type="[include|exclude]">
        <Country code="country_code"/>
      </UserCountries>
    </Promotion>
  </HotelPromotions>
</Promotions>

Elementos e atributos

A mensagem de promoções tem os seguintes elementos e atributos:

Elemento / @Attribute Ocorrências Tipo Descrição
Promotions 1 Complex element O elemento raiz de uma mensagem de promoção.
Promotions / @partner 1 string A conta do parceiro para esta mensagem. O valor da string é o valor da "Chave do parceiro" listado na página "Configurações da conta" da Central para Hotéis.

Se você tiver um back-end que forneça feeds para várias contas, esse valor precisará corresponder ao valor do atributo ID especificado no elemento <RequestorID> das mensagens <OTA_HotelRateAmountNotifRQ> e <OTA_HotelAvailNotifRQ> da mesma conta.

Promotions / @id 1 string Um identificador exclusivo para essa mensagem de solicitação. Esse valor é retornado na mensagem de resposta. Os caracteres permitidos são a-z, A-Z, 0-9, _ (sublinhado) e - (traço).
Promotions / @timestamp 1 DateTime A data e a hora de criação da mensagem.
Promotions / HotelPromotions 0..n HotelPromotions

Promoções de uma propriedade. Cada promoção se aplica a uma única propriedade.

A menos que <Stacking> seja usado, a promoção com o maior desconto será aplicada ao agendamento quando várias promoções estiverem qualificadas.

Promotions / HotelPromotions / @hotel_id 1 string O identificador exclusivo da propriedade. Esse valor precisa corresponder ao ID de hotel especificado com <id> no elemento <listing> no feed de lista de hotéis. O ID do hotel também aparece na Central para Hotéis.
Promotions / HotelPromotions / @action 0..1 enum

Se especificado, o valor precisa ser "overlay". Quando o valor for "overlay", todas as promoções armazenadas serão excluídas antes de armazenar as especificadas na mensagem atual.

Se não for especificado, cada promoção especificada na mensagem atual será:

  • Added (se nenhuma das promoções armazenadas tiver o mesmo id)
  • Updated (se uma promoção armazenada tiver o mesmo id)
  • Deleted (se uma promoção armazenada tiver o mesmo id e o valor do atributo action para a promoção especificada na mensagem atual for "delete")
Promotions / HotelPromotions / Promotion 0..99 Promotion

Uma única promoção para uma propriedade. Se action="overlay" e <Promotion> não forem especificados, todas as promoções da propriedade serão excluídas.

Se você precisar usar mais de 99 promoções, entre em contato com seu Gerente técnico de contas (TAM).

Promotions / HotelPromotions / Promotion / @id 1 string Identificador exclusivo da promoção. O número máximo de caracteres permitidos é 40. Os caracteres permitidos são a-z, A-Z, 0-9, _ (sublinhado), - (traço) e . (ponto final).
Promotions /HotelPromotions / Promotion / @action 0..1 enum

Se especificado, o valor precisa ser delete. Se não for especificado e uma promoção com o mesmo id não for armazenada, essa promoção será armazenada. Caso contrário, se não for especificado e uma promoção com o mesmo id for armazenada, a promoção atual será atualizada.

Se delete for especificado, a promoção armazenada com o mesmo id será excluída. Ao usar delete, não inclua elementos filhos em <Promotion>. Além disso, delete não é permitido com <HotelPromotions action="overlay"/>.

Promotions / HotelPromotions / Promotion / BookingDates 0..1 BookingDates Um contêiner de um ou mais intervalos que definem quando a reserva precisa ocorrer para que a promoção seja aplicada.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange 1..99 DateRange Um intervalo que especifica quando a reserva precisa ser feita para que a promoção seja aplicada.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start 0..1 Date ou DateTime

A data ou data/hora de início (com base no fuso horário da propriedade), inclusive, do período.

  • A data ou data e hora especificadas por start precisam ser anteriores (ou iguais) à data ou hora especificada por end.
  • Se start não for especificado, o intervalo será efetivamente ilimitado em termos de horário de início.
  • Se start for preenchido como a data "AAAA-MM-DD", ele será interpretado como data e hora "AAAA-MM-DDT00:00:00".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date ou DateTime

A data ou data/hora de término (com base no fuso horário da propriedade), inclusive, do período.

  • A data ou data e hora especificadas por end precisam ser posteriores (ou iguais) à data ou hora especificada por start.
  • Se end não for especificado, o intervalo será efetivamente ilimitado em termos de horário de término.
  • Se end for fornecido como a data "AAAA-MM-DD", ele será interpretado como data e hora "AAAA-MM-DDT23:59:59".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week 0..1 string

Os dias da semana permitidos no período. Se não for especificado, todos os dias serão permitidos no período. Cada caractere da string especifica um dia. Por exemplo, "MTWHF" especifica que dias da semana são permitidos no período.

Os caracteres válidos são:

  • M para segunda-feira
  • T para terça-feira
  • W para quarta-feira
  • H para quinta-feira
  • F para sexta-feira
  • S para sábado
  • U para domingo

Qualquer combinação de caracteres é válida.

Promotions / HotelPromotions / Promotion / BookingWindow 0..1 BookingWindow Especifica o período em que a reserva precisa ocorrer em relação à data do check-in (com base no fuso horário da propriedade). Por exemplo, a janela de reserva pode ser definida para no mínimo 7 dias e no máximo 180 dias antes do check-in.
Promotions / HotelPromotions / Promotion / BookingWindow / @min 0..1 integer or duration É a duração mínima antes do check-in quando a reserva precisa ser feita para que a promoção seja aplicada. Se isso não for especificado ou o valor for 0, não haverá mínimo.

Os tipos de valor válidos são:

  • Integer:o número de dias antes da data do check-in. Por exemplo, um valor de 30 indica que a promoção só se aplica a reservas feitas pelo menos 30 dias antes da data do check-in.
  • Duração ISO 8601 (dias, horas e minutos): o número de dias (e, opcionalmente, horas/minutos) antes da data de check-in. Por exemplo, um valor de P30D indica que a promoção só se aplica a reservas feitas pelo menos 30 dias antes da data do check-in. O valor P30DT6H requer reserva até as 18h do dia 30 antes da chegada.
Promotions / HotelPromotions / Promotion / BookingWindow / @max 0..1 integer or duration O número máximo de dias antes do check-in quando a reserva precisa ser feita para que a promoção seja aplicada. Se isso não for especificado ou o valor for 0, não haverá máximo.

Os tipos de valor válidos são:

  • Integer:o número de dias antes da data do check-in. Por exemplo, um valor de 30 indica que a promoção só se aplica a reservas feitas até 30 dias antes da data do check-in.
  • Duração ISO 8601 (dias, horas e minutos): o número de dias (e, opcionalmente, horas/minutos) antes da data de check-in. Por exemplo, um valor de P30D indica que a promoção só se aplica a reservas feitas até 30 dias antes da data do check-in. O valor P30DT6H requer reserva a partir das 18h do 30o dia antes da chegada.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

Define restrições sobre o valor máximo que uma taxa pode ser definida depois que as promoções são aplicadas.

As promoções precisam sempre especificar um <Discount> ou um <BestDailyDiscount>. Portanto, para criar uma promoção que aplique somente um <Ceiling>, uma opção é definir um <Discount> com um percentage de 0.

Se o empilhamento estiver configurado, várias promoções com <Ceiling> poderão ser aplicadas a uma única estadia. Cada promoção aplicaria seu desconto, imediatamente seguido pelo teto. O exemplo a seguir demonstra como cada teto contribui para o próximo cálculo de promoção na pilha.

Exemplo:

Preço de uma estadia de 1 noite em que AmountBeforeTax é 100 e há uma pilha de duas promoções:

  1. Promoção com tipo de empilhamento base, um fixed_amount de 25 e um teto amount_per_night de 60
  2. Promoção com tipo de empilhamento second, fixed_amount de 25 e teto amount_per_night de 90

Esta é a ordem do cálculo:

  1. A promoção base é aplicada primeiro e desconta o AmountBeforeTax para 75, mas, em seguida, o teto diminui para 60.
  2. A promoção second desconta o AmountBeforeTax de 60 para 35. Isso está abaixo do teto de 90, então o segundo teto não é aplicado. A taxa final é 35.

O fato de que 60 é um teto geral mais restrito é irrelevante, porque é válido apenas para a própria promoção, e não pode haver um teto único que abranja toda a pilha de promoções.

Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night 1 float

O valor máximo que uma tarifa noturna pode ser definida depois que o desconto é aplicado.

Se um elemento <Floor> também for especificado, ele precisará ser definido como um valor maior ou igual ao atributo amount_per_night em <Floor>.

amount_per_night será aplicado a tributos e taxas quando estiverem incluídos no valor da diária usando AmountAfterTax, mas não aqueles especificados com o uso de TaxFeeInfo.

Promotions / HotelPromotions / Promotion / Floor 0..1 Floor

Define restrições sobre o valor mínimo que pode ser definido para uma taxa depois que as promoções são aplicadas.

As promoções precisam sempre especificar um <Discount> ou um <BestDailyDiscount>. Portanto, para criar uma promoção que aplique somente um <Floor>, uma opção é definir um <Discount> com um percentage de 0.

A lógica <Floor> ainda se aplica aos descontos de <FreeNights>, mesmo que a noite sem custo financeiro tenha um desconto de 100% aplicado a ela.

Se o empilhamento estiver configurado, várias promoções com <Floor> poderão ser aplicadas a uma única estadia. Cada promoção aplicaria o desconto, imediatamente seguido pelo preço mínimo. O exemplo a seguir demonstra como cada andar contribui para o próximo cálculo de promoção na pilha.

Exemplo:

Preço de uma estadia de 1 noite em que AmountBeforeTax é 100 e há uma pilha de duas promoções:

  1. Promoção com tipo de empilhamento base, um fixed_amount de 25 e um andar amount_per_night de 90
  2. Promoção com tipo de empilhamento second, fixed_amount de 25 e um andar amount_per_night de 60

Esta é a ordem do cálculo:

  1. A promoção base é aplicada primeiro e desconta o AmountBeforeTax para 75, mas o preço mínimo aumenta para 90.
  2. A promoção second aplica um desconto de AmountBeforeTax de 90 a 65. Como está acima do mínimo de 60, o segundo andar não é aplicado. A taxa final é 65.

O fato de que 90 é um preço mínimo mais rigoroso é irrelevante, uma vez que é válido apenas para a própria promoção, e não pode haver um único andar que abranja toda a pilha de promoções.

Promotions / HotelPromotions / Promotion / Floor / @amount_per_night 1 float

O valor mínimo que uma tarifa diária pode ser definida depois que o desconto for aplicado.

Se um elemento <Ceiling> também for especificado, ele precisará ser definido como um valor menor ou igual ao atributo amount_per_night em <Ceiling>.

amount_per_night será aplicado a tributos e taxas quando estiverem incluídos no valor da diária usando AmountAfterTax, mas não aqueles especificados com o uso de TaxFeeInfo.

Promotions / HotelPromotions / Promotion / CheckinDates 0..1 CheckinDates Um contêiner de um ou mais períodos que definem quando o check-in precisa ocorrer para que a promoção seja aplicada.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange 1..20 DateRange

Um período especificando quando o check-in precisa ocorrer para que a promoção seja aplicada. Esse elemento não é necessário se você for excluir uma ou mais promoções.

O formato YearlessDate também é compatível.

  • Se start ou end for uma data sem ano, ambas precisarão ser preenchidas como datas sem ano.
  • Os períodos sem ano não podem estar próximos ao ano novo. Em vez disso, represente o período como dois períodos adjacentes. Por exemplo, {"12-29", "01-05"} pode ser representado como {"12-29", "12-31"} e {"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start 0..1 Date or YearlessDate A data de início (com base no fuso horário da propriedade), inclusive, do período. Essa data precisa ser igual ou anterior à data de end. Se start não for especificado, o período será efetivamente ilimitado em termos de data de início.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end 0..1 Date or YearlessDate A data de término (com base no fuso horário da propriedade), inclusive, do período. Essa data precisa ser igual ou posterior à data start. Se end não for especificado, o período será efetivamente ilimitado em termos de data de término.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week 0..1 string

Os dias da semana permitidos no período. Se não for especificado, todos os dias serão permitidos no período. Cada caractere da string especifica um dia. Por exemplo, "MTWHF" especifica que dias da semana são permitidos no período.

Os caracteres válidos são:

  • M para segunda-feira
  • T para terça-feira
  • W para quarta-feira
  • H para quinta-feira
  • F para sexta-feira
  • S para sábado
  • U para domingo

Qualquer combinação de caracteres é válida.

Promotions / HotelPromotions / Promotion / CheckoutDates 0..1 CheckoutDates Um contêiner de um ou mais períodos que definem quando o check-out precisa ocorrer para que a promoção seja aplicada.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange 1..20 DateRange

Um período especificando quando o check-out precisa ocorrer para que a promoção seja aplicada. Esse elemento não é necessário se você estiver excluindo uma ou mais promoções.

O formato YearlessDate também é compatível.

  • Se start ou end for uma data sem ano, ambas precisarão ser preenchidas como datas desse tipo.
  • Os períodos sem ano não podem estar próximos ao ano novo. Em vez disso, represente o período como dois períodos adjacentes. Por exemplo, {"12-29", "01-05"} pode ser representado como {"12-29", "12-31"} e {"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start 0..1 Date or YearlessDate A data de início (com base no fuso horário da propriedade), inclusive, do período. Essa data precisa ser igual ou anterior à data de end. Se start não for especificado, o período será efetivamente ilimitado em termos de data de início.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end 0..1 Date or YearlessDate A data de término (com base no fuso horário da propriedade), inclusive, do período. Essa data precisa ser igual ou posterior à data start. Se end não for especificado, o período será efetivamente ilimitado em termos de data de término.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week 0..1 string

Os dias da semana permitidos no período. Se não for especificado, todos os dias serão permitidos no período. Cada caractere da string especifica um dia. Por exemplo, "MTWHF" especifica que dias da semana são permitidos no período.

Os caracteres válidos são:

  • M para segunda-feira
  • T para terça-feira
  • W para quarta-feira
  • H para quinta-feira
  • F para sexta-feira
  • S para sábado
  • U para domingo

Qualquer combinação de caracteres é válida.

Promotions / HotelPromotions / Promotion / Devices 0..1 Devices Contêiner para listar os dispositivos do usuário qualificados para a promoção. Se especificado, apenas usuários qualificados nos dispositivos listados recebem a taxa com desconto. Se não for especificado, os usuários qualificados em qualquer dispositivo receberão o desconto.
Promotions / HotelPromotions / Promotion / Devices / Device 1..3 Device Define um tipo de dispositivo do usuário qualificado para a promoção.
Promotions / HotelPromotions / Promotion / Devices / Device / @type 1 enum Um tipo de dispositivo. O valor precisa ser desktop, tablet ou mobile.
Promotions / HotelPromotions / Promotion / Discount 1 Discount

Exatamente um Discount ou BestDailyDiscount precisa ser especificado.

Especifica o desconto a ser aplicado a esta promoção.

Promotions / HotelPromotions / Promotion / Discount / @percentage 0..1 float

Exatamente um de percentage, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night é obrigatório.

Um valor decimal de 0 a 100 que especifica o desconto percentual. Ela é aplicada a AmountAfterTax (ou AmountBeforeTax se AmountAfterTax não for especificado).

Por exemplo:

  • Se AmountAfterTax for 100 e percentage for 20,

    taxa da promoção = AmountAfterTax * (1 - desconto percentual)

    80,00 = 100 * (1 - 0,2)

  • Se AmountBeforeTax for 100, percentage será 20 e TaxFeeInfo especificará um imposto de 10, então

    taxa da promoção = AmountBeforeTax * (1 - desconto percentual) + tributos

    90,00 = 100 * (1 - 0,2) + 10

Promotions / HotelPromotions / Promotion / Discount / @fixed_amount 0..1 float

Exatamente um de percentage, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night é obrigatório.

Um valor fixo a ser subtraído da soma das tarifas noturnas de AmountAfterTax (ou da soma das tarifas noturnas de AmountBeforeTax, se AmountAfterTax não for especificado). Elas são consideradas na mesma moeda das tarifas noturnas. Se esse valor for maior que a soma das tarifas noturnas, o valor resultante será zero.

Por exemplo:

  • Se estivermos definindo o preço de uma estadia de 1 noite em que AmountBeforeTax é 90, AmountAfterTax é 100 e fixed_amount é 20, então

    taxa promocional = AmountAfterTax - desconto fixo

    80,00 = 100 - 20

  • Se definirmos o preço de uma estadia de uma noite em que AmountBeforeTax é 100, fixed_amount é 20 e TaxFeeInfo especifica um tributo de 8%, então:

    taxa da promoção = (AmountBeforeTax - desconto fixo) * (1 + tributo percentual)

    86,40 = (100 - 20) * 1,08

  • Se definirmos o preço de uma estadia de uma diária em que AmountBeforeTax é 50, fixed_amount é 60 e TaxFeeInfo especifica um tributo de 10, então:

    taxa promocional = (AmountBeforeTax - desconto fixo) * tributos

    10,00 = 0 + 10

  • Se estivermos definindo o preço de uma estadia de três noites em que os valores de AmountAfterTax são 100, 110 e 120 e fixed_amount é 150, então:

    taxa promocional = sum(AmountAfterTax) - (desconto fixo)

    180,00 = (100 + 110 + 120) - 150

Promotions / HotelPromotions / Promotion / Discount / @fixed_amount_per_night 0..1 float

Exatamente um de percentage, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night é obrigatório.

Um desconto fixo aplicado a cada uma das AmountAfterTax tarifas por noite (ou ao N mais barato, se applied_nights for especificado). Se AmountAfterTax não for especificado, ele será aplicado a AmountBeforeTax. Elas são consideradas na mesma moeda das tarifas noturnas. Se fixed_amount_per_night for maior que a tarifa noturna, ela será reduzida a zero. O desconto não pode fazer com que o valor se torne negativo.

Por exemplo:

  • Se estivermos definindo o preço de uma estadia de três noites em que os valores de AmountAfterTax são 100, 110 e 120 e o fixed_amount_per_night é 10, então:

    taxa da promoção = soma(AmountBeforeTax - desconto de valor fixo)

    300,00 = ((100 - 10) + (110 - 10) + (120 - 10))

  • Se estivermos definindo o preço de uma estadia de três noites em que os valores de AmountAfterTax são 10, 50 e 100 e o fixed_amount_per_night é 20, então:

    taxa da promoção = soma(AmountAfterTax - desconto de valor fixo)

    110,00 = (0 + (50 - 20) + (100 - 20))

Promotions / HotelPromotions / Promotion / Discount / @fixed_price 0..1 float

Exatamente um de percentage, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night é obrigatório.

Se as tarifas noturnas de AmountAfterTax forem especificadas, isso vai definir o preço da estadia, incluindo tributos e taxas, como o valor especificado. Se AmountBeforeTax for especificado, AmountAfterTax será definido o preço sem tributos da estadia como o valor especificado. Elas são consideradas na mesma moeda das tarifas noturnas.

Se AmountAfterTax for destinado a refletir um tributo percentual, definir um preço fixo para AmountBeforeTax poderá resultar em tarifas e tributos imprecisos. Em geral, é recomendável usar TaxFeeInfo para especificar os tributos e as taxas de uma propriedade.

Por exemplo:

  • Se definirmos o preço de uma estadia de 1 noite em que AmountBeforeTax é 90, AmountAfterTax é 100 e fixed_price é 80, a taxa da promoção é 80.
  • Se definirmos o preço de uma estadia de uma noite em que AmountBeforeTax é 100, fixed_amount é 80 e TaxFeeInfo especifica um tributo de 8%, então:

    taxa da promoção = preço fixo * (1 + percentual de tributos)

    86,40 = 80 * 1,08

  • Se estivermos definindo o preço de uma estadia de três noites em que os valores AmountAfterTax são 100, 110 e 120 e fixed_amount é 300, então:

    taxa de promoção = 300

Promotions / HotelPromotions / Promotion / Discount / @fixed_price_per_night 0..1 float

Exatamente um de percentage, fixed_amount, fixed_amount_per_night, fixed_price ou fixed_price_per_night é obrigatório.

Se as tarifas noturnas de AmountAfterTax forem especificadas, isso vai definir o preço de cada noite de estadia, incluindo tributos e taxas, como o valor especificado. Se AmountBeforeTax for especificado, AmountAfterTax será definido o preço sem tributos de cada noite de estadia como o valor especificado. Presume-se que elas estejam na mesma moeda das tarifas noturnas.

Se AmountAfterTax for destinado a refletir um tributo percentual, definir um preço fixo para AmountBeforeTax poderá resultar em tarifas e tributos imprecisos. Em geral, é recomendável usar TaxFeeInfo para especificar os tributos e as taxas de uma propriedade.

Se applied_nights for especificado, o novo preço será aplicado às N noites mais baratas.

Por exemplo:

  • Se definirmos o preço de uma estadia de duas noites em que os valores de AmountBeforeTax sejam 90, 90, os valores AmountAfterTax são 100, 100 e fixed_price é 80, a taxa de promoção será 80 + 80 = 160.
  • Se definirmos o preço de uma estadia de duas noites em que AmountBeforeTax é 100, 100, fixed_amount é 80 e TaxFeeInfo especifica um tributo de 8%, a taxa promocional é (80 + 80) * 1,08 = 172,8.
  • Se definirmos o preço de uma estadia de três noites em que os valores de AmountAfterTax sejam 100, 110 e 120, e fixed_amount for 110, a taxa da promoção será 110 * 3 = 330.
Promotions / HotelPromotions / Promotion / Discount / @applied_nights 0..1 integer

Só pode ser usado com percentage ou fixed_amount_per_night.

O número de diárias em que o desconto é aplicado, começando pela mais barata. Precisa ser um número inteiro de 1 a 99. Se não for especificado, o desconto será aplicado a todas as noites.

Promotions / HotelPromotions / Promotion / Discount / FreeNights 0..1 FreeNights Especifica um desconto em determinadas noites de uma estadia quando uma duração mínima é atendida. Os atributos no elemento Discount pai não serão permitidos se esse elemento for usado.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights 1 integer

Número de noites necessárias para que o desconto seja aplicado. Cada desconto é aplicado a um segmento separado de diárias.

Por exemplo, para uma estadia de 10 noites em que stay_nights é 4 (e repeats é verdadeiro), há dois segmentos de noites: da 1a à 4a e da 5a a 8a noites. As 9a e a 10a não fazem parte do segmento de diárias.

Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights 1 integer O número de noites com desconto em cada segmento de noites da estadia.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage 1 float O desconto aplicado às diárias com desconto. Se esse valor for 50, todas as diárias selecionadas terão 50% de desconto.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection 1 string Precisa ser cheapest ou last. Se last, as diárias no final do segmento da estadia vão ser descontadas. Se for cheapest, as diárias mais baratas do segmento de diárias vão ser descontadas.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

Indica se o desconto pode ser aplicado a vários segmentos de várias noites. Se for false, somente o segmento de noites da estadia no início do itinerário vai ser descontado. Se for true, qualquer segmento de noites da estadia vai ser descontado.

Por exemplo, se stay_nights for 4 e o itinerário for 10 noites, então, se repeats for true, dois segmentos serão descontados (1 a 4 noites e 5 a 8 noites). Mas se repeats for false, apenas um trecho será descontado (1 a 4 noites).

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer Atribui uma classificação a essa promoção e a ativa na seleção classificada, em que apenas a promoção com a classificação mais baixa é selecionada para ser aplicada. Os valores precisam estar entre 1 e 99, inclusive. Se várias promoções compartilharem a mesma classificação, uma delas será selecionada e aplicada arbitrariamente.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

Exatamente um Discount ou BestDailyDiscount precisa ser especificado.

Especifica um desconto diário que pode ser aplicado a uma noite de estadia. Isso é diferente de Discount, que aplica descontos a estadias inteiras.

Cada propriedade pode ter um único grupo de promoções consideradas "melhores diárias". Isso significa que, para cada noite de estadia, a única promoção "melhor diária" qualificada e que gera o maior desconto para essa noite é selecionada e pode ser aplicada.

Stacking não pode ser especificado com BestDailyDiscount. Os "melhores descontos diários" que geram o maior desconto para cada noite são combinados e tratados como um único desconto de estadia (ou seja, Discount) com o tipo de empilhamento definido como base. Esse desconto combinado é comparado e pode ser combinado com outras promoções qualificadas de <Discount> para encontrar a combinação que oferecer o maior desconto. A combinação de BestDailyDiscount ou um único Discount, o que resultar no menor preço, é selecionada e aplicada ao tipo de empilhamento base.

É possível especificar StayDates com esse tipo de desconto, mas application precisa ser definido como overlap

.
Promotions / HotelPromotions / Promotion / BestDailyDiscount / @percentage 0..1 float

Exatamente um de percentage, fixed_amount ou fixed_price é obrigatório.

Um valor decimal de 0 a 100 que especifica o desconto percentual. Ela é aplicada a AmountAfterTax (ou AmountBeforeTax se AmountAfterTax não for especificado).

Por exemplo:

  • Se AmountAfterTax para uma noite de estadia for 100 e percentage for 20, então

    taxa da promoção = AmountAfterTax * (1 - desconto percentual)

    80,00 = 100 * (1 - 0,2)

  • Se AmountBeforeTax para um total de estadia for 100, percentage será 20 e TaxFeeInfo especificará um imposto de 10, então

    taxa da promoção = AmountBeforeTax * (1 - desconto percentual) + tributos

    90,00 = 100 * (1 - 0,2) + 10

Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_amount 0..1 float

Exatamente um de percentage, fixed_amount ou fixed_price é obrigatório.

Um valor fixo a ser subtraído de uma única tarifa por noite de AmountAfterTax (ou AmountBeforeTax caso AmountAfterTax não seja especificado). Elas são consideradas na mesma moeda das tarifas noturnas. Se esse valor for maior que a soma das tarifas noturnas, o valor resultante será zero.

Por exemplo:

  • Se AmountBeforeTax for 90 para uma única noite, AmountAfterTax será 100 e fixed_amount será 20, então

    taxa promocional = AmountAfterTax - desconto fixo

    80,00 = 100 - 20

  • Se AmountBeforeTax para uma única noite for 100, fixed_amount será 20 e TaxFeeInfo especificar um tributo de 8%,

    taxa da promoção = (AmountBeforeTax - desconto fixo) * (1 + tributo percentual)

    86,40 = (100 - 20) * 1,08

Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_price 0..1 float

Exatamente um de percentage, fixed_amount ou fixed_price é obrigatório.

Se as tarifas noturnas de AmountAfterTax forem especificadas, isso vai definir o preço da estadia, incluindo tributos e taxas, como o valor especificado. Se AmountBeforeTax for especificado, AmountAfterTax será definido o preço sem tributos da estadia como o valor especificado. Elas são consideradas na mesma moeda das tarifas noturnas.

Por exemplo:

  • Se AmountBeforeTax for 90 para uma única noite, AmountAfterTax for 100 e fixed_price for 80, a taxa de promoção será 80.
  • Se AmountBeforeTax para uma única noite for 100, fixed_amount será 80 e TaxFeeInfo especificar um tributo de 8%,

    taxa da promoção = preço fixo * (1 + percentual de tributos)

    86,40 = 80 * 1,08

Promotions / HotelPromotions / Promotion / InventoryCount 0..1 InventoryCount Define restrições no número de quartos que precisam estar disponíveis para que esta promoção seja aplicada. O desconto é aplicado somente às noites que atendem à restrição. Não permitido com o desconto de fixed_amount. O número de quartos disponíveis é especificado com OTA_HotelInvCountNotifRQ (InvCount) ou OTA_HotelAvailNotifRQ (BookingLimit).
Promotions / HotelPromotions / Promotion / InventoryCount / @min 0..1 integer O número mínimo de quartos que precisam estar disponíveis para que a promoção seja aplicada à tarifa por noite. Se isso não for especificado, não haverá mínimo.
Promotions / HotelPromotions / Promotion / InventoryCount / @max 0..1 integer O número máximo de quartos que precisam estar disponíveis para que a promoção seja aplicada à tarifa por noite. Se isso não for especificado, não haverá máximo.
Promotions / HotelPromotions / Promotion / LengthOfStay 0..1 LengthOfStay Define os limites de duração da estadia em que esta promoção pode ser aplicada. A promoção não é aplicada quando a duração da estadia está fora dos limites mínimo e máximo.
Promotions / HotelPromotions / Promotion / LengthOfStay / @min 0..1 integer As diárias mínimas permitidas na estadia para que a promoção seja aplicada. Se isso não for especificado, não haverá valor mínimo.
Promotions / HotelPromotions / Promotion / LengthOfStay / @max 0..1 integer O máximo de noites permitidas na estadia para que a promoção seja aplicada. Se isso não for especificado, não haverá limite máximo.
Promotions / HotelPromotions / Promotion / MembershipRateRule 0..1 MembershipRateRule

Contêiner de uma regra de tarifa de associação que aciona um tratamento de interface específico para o desconto associado.

Esse elemento não deve ser especificado, a menos que <Discount> também seja especificado.

Promotions / HotelPromotions / Promotion / MembershipRateRule / @id 1 string

ID da regra de tarifação associada a um programa de assinatura.

Promotions / HotelPromotions / Promotion / MinimumAmount 0..1 MinimumAmount Especifica a soma mínima das diárias diárias (usando o maior valor entre AmountBeforeTax ou AmountAfterTax) que precisa ser excedida para que a promoção seja aplicada.
Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount 1 integer O valor que precisa ser excedido para que a promoção seja aplicada.
Promotions / HotelPromotions / Promotion / Occupancy 0..1 Occupancy Define restrições de ocupações a que esta promoção é aplicada. A promoção não é aplicada quando a ocupação está fora dos limites mínimo e máximo.
Promotions / HotelPromotions / Promotion / Occupancy / @min 0..1 integer A ocupação especificada pelo usuário precisa ter pelo menos esse valor para que o desconto seja aplicado.
Promotions / HotelPromotions / Promotion / Occupancy / @max 0..1 integer A ocupação especificada pelo usuário precisa ter no máximo esse valor para que o desconto seja aplicado.
Promotions / HotelPromotions / Promotion / RatePlans 0..1 RatePlans Contêiner para uma lista de planos de tarifas aos quais a promoção se aplica. Se <RatePlans> não for especificado, a promoção será aplicada a todos os planos de tarifas.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan 1..n RatePlan Especifica um plano de tarifação. Um plano de tarifas é definido por uma combinação de pacotes, taxas e disponibilidade, conforme definido nas mensagens de transação (dados de propriedade), OTA_HotelRateAmountNotifRQ e OTA_HotelAvailNotifRQ, conforme identificado pelo PackageID.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id 1 string O identificador exclusivo do plano de tarifa. Esse valor é mapeado para o valor de PackageID em <PackageData> em uma mensagem de Transação (dados da propriedade) e no atributo RatePlanCode em <StatusApplicationControl> nas mensagens <OTA_HotelRateAmountNotifRQ> e <OTA_HotelAvailNotifRQ>. O número máximo de caracteres permitido é 50.
Promotions / HotelPromotions / Promotion / RoomTypes 0..1 RoomTypes Contêiner para uma lista de tipos de quarto aos quais a promoção se aplica. A promoção é aplicada a cada <RoomType> especificado. Se <RoomTypes> não for especificado, a promoção será aplicada a todas as salas.
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType 1..n RoomType Especifica um tipo de quarto. Um tipo de quarto é definido em um elemento <RoomData> em uma mensagem de Transação (dados da propriedade) e é referenciado usando o valor <RoomID>. O valor <RoomID> também é referenciado pelo atributo InvTypeCode nas mensagens OTA_HotelRateAmountNotifRQ.
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id 1 string O identificador exclusivo do inventário (tipo de quarto). Esse valor é mapeado para <RoomID> em uma mensagem de transação (dados da propriedade). O número máximo de caracteres permitido é 50.
Promotions / HotelPromotions / Promotion / Stacking 0..1 Stacking Especifica como as promoções podem ser combinadas. Se não for especificado, o "tipo" será base.
Promotions / HotelPromotions / Promotion / Stacking / @type 1 enum

Várias promoções podem ser aplicadas a uma única tarifa dependendo desta configuração:

  • any: pode ser combinado com qualquer outra promoção (exceto none), mas a ordem em que as promoções precisam ser aplicadas não é garantida.
  • base: a melhor promoção base qualificada é selecionada e aplicada primeiro, antes das outras promoções. Antes, o nome dela era base_only.
  • second: a melhor promoção second qualificada é selecionada e aplicada após uma promoção base (se aplicável) e antes de promoções de any.
  • none: não pode ser combinado com outras promoções.

Das combinações permitidas, o conjunto de promoções que resulta no maior desconto é aplicado à taxa.

Promotions / HotelPromotions / Promotion / StayDates 0..1 StayDates Um contêiner de um ou mais períodos que determinam como a promoção é aplicada, por exemplo, para acomodar descontos sazonais.
Promotions / HotelPromotions / Promotion / StayDates / @application 1 enum

Descreve como aplicar a promoção.

Os valores válidos são:

  • all: aplica a promoção a cada noite do itinerário se todas as datas no itinerário se sobrepuserem às datas da estadia.
  • any: aplica a promoção a todas as noites no itinerário se alguma data nele se sobrepuser a uma data no período da estadia.
  • overlap: aplica a promoção apenas às noites do itinerário que se sobrepõem a uma data no período da estadia.

Esse atributo deve sempre ser especificado.

  • Se <Discount> especificar percentage e application estiver definido como all ou any, o desconto será aplicado como uma porcentagem da estadia total.
  • Se <Discount> especificar percentage e application for definido como overlap, o desconto será aplicado como uma porcentagem das diárias para as diárias sobrepostas.
  • <Discount> especificando fixed_amount e application definido como overlap é uma combinação inválida.
  • <FreeNights> é compatível com todos os valores de application. Para overlap, apenas as diárias sobrepostas são consideradas para os requisitos de desconto.
Promotions / HotelPromotions / Promotion / StayDates / DateRange 1..99 DateRange

Um período que especifica as datas em que a promoção será aplicada.

O formato YearlessDate também é compatível.

  • Se start ou end for uma data sem ano, ambas precisarão ser preenchidas como datas desse tipo.
  • Os períodos sem ano não podem estar próximos ao ano novo. Em vez disso, represente o período como dois períodos adjacentes. Por exemplo, {"12-29", "01-05"} pode ser representado como {"12-29", "12-31"} e {"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start 0..1 Date or YearlessDate A data de início (com base no fuso horário da propriedade), inclusive, do período. Essa data precisa ser igual ou anterior à data de end. Se start não for especificado, o período será efetivamente ilimitado em termos de data de início.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end 0..1 Date or YearlessDate A data de término (com base no fuso horário da propriedade), inclusive, do período. Essa data precisa ser igual ou posterior à data start. Se end não for especificado, o período será efetivamente ilimitado em termos de data de término.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week 0..1 string

Os dias da semana permitidos no período. Se não for especificado, todos os dias serão permitidos no período. Cada caractere da string especifica um dia. Por exemplo, "MTWHF" especifica que dias da semana são permitidos no período.

Os caracteres válidos são:

  • M para segunda-feira
  • T para terça-feira
  • W para quarta-feira
  • H para quinta-feira
  • F para sexta-feira
  • S para sábado
  • U para domingo

Qualquer combinação de caracteres é válida.

Promotions / HotelPromotions / Promotion / UserCountries 0..1 UserCountries Contêiner para listar os locais do usuário (países) qualificados para a promoção. Se especificado, apenas usuários qualificados nos países listados receberão a taxa com desconto. Se não for especificado, os usuários qualificados em qualquer país receberão o desconto.
Promotions / HotelPromotions / Promotion / UserCountries / @type 0..1 enum O tipo de especificação Usercountries.

Os valores válidos são include e exclude.

Se o campo Usercountry type estiver definido como include, a promoção vai ser aplicada aos usuários dos países listados.

Se type for exclude, a promoção será válida para usuários de fora dos países listados.

Se o campo UserCountry type não for definido, ele será tratado como include e a promoção será aplicada aos usuários dos países listados.

Promotions / HotelPromotions / Promotion / UserCountries / Country 1..300 Country Define um país em que os usuários estão qualificados para a promoção.
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code 1 string Um código de país CLDR, como DE ou FR. Em alguns países, o código de país CLDR não é igual ao código ISO do país de duas letras. Além disso, os códigos de região CLDR não são compatíveis.

Exemplos

Mensagem básica

O exemplo a seguir mostra uma mensagem Promotions básica:

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingDates>
         <DateRange start="2020-07-01" end="2020-07-31" days_of_week="MTWHF"/>
         <DateRange start="2020-09-01" end="2020-09-30"/>
      </BookingDates>
      <BookingWindow min="7" max="330"/>
      <CheckinDates>
         <DateRange start="2020-10-01" end="2020-10-31" days_of_week="FSU"/>
      </CheckinDates>
      <CheckoutDates>
         <DateRange start="2020-10-08" end="2020-11-07" days_of_week="FSU"/>
      </CheckoutDates>
      <Devices>
        <Device type="mobile"/>
        <Device type="tablet"/>
      </Devices>
      <Discount percentage="20" applied_nights="2"/>
      <LengthOfStay min="2" max="14"/>
      <RatePlans>
         <RatePlan id="234"/>
         <RatePlan id="567"/>
      </RatePlans>
      <RoomTypes>
         <RoomType id="123"/>
         <RoomType id="456"/>
      </RoomTypes>
      <Stacking type="base"/>
      <UserCountries>
        <Country code="US"/>
        <Country code="GB"/>
      </UserCountries>
    </Promotion>
  </HotelPromotions>
</Promotions>


Condição do inventário

O exemplo a seguir mostra como criar um desconto se houver excesso de inventário perto da data de chegada:

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingWindow max="7"/>
      <Discount percentage="10"/>
      <InventoryCount min="3"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


Excluir uma promoção

O exemplo a seguir mostra como excluir uma promoção de uma propriedade:

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1" action="delete"/>
  </HotelPromotions>
</Promotions>

Excluir todas as promoções

O exemplo a seguir mostra como excluir todas as promoções de uma propriedade:

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1" action="overlay"/>
</Promotions>



Sobrepor todas as promoções

O exemplo a seguir mostra como sobrepor <HotelPromotions> a uma propriedade com uma ou mais novas promoções. Quando action="overlay", todas as promoções armazenadas são excluídas antes de armazenar as especificadas na mensagem atual:

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1" action="overlay">
    <Promotion id="1">
      <BookingDates>
         <DateRange start="2020-09-01" end="2020-09-30"/>
      </BookingDates>
      <Discount percentage="10"/>
      <RoomTypes>
         <RoomType id="123"/>
         <RoomType id="456"/>
      </RoomTypes>
      <RatePlans>
         <RatePlan id="234"/>
         <RatePlan id="567"/>
      </RatePlans>
      <Stacking type="base"/>
    </Promotion>
  </HotelPromotions>
</Promotions>

Três tipos de empilhamento diferentes

O exemplo a seguir mostra um caso em que três promoções diferentes são aplicadas (base, second, any). A promoção none não é aplicada, já que as outras oferecem um desconto melhor. Se o preço original for de US $100, o preço com desconto será de US $72,90.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <Discount percentage="10"/>
      <Stacking type="base"/>
    </Promotion>
    <Promotion id="2">
      <Discount percentage="10"/>
      <Stacking type="second"/>
    </Promotion>
    <Promotion id="3">
      <Discount percentage="10"/>
      <Stacking type="any"/>
    </Promotion>
    <Promotion id="4">
      <Discount percentage="25"/>
      <Stacking type="none"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


Nenhum tipo de empilhamento

O exemplo a seguir mostra um caso em que a promoção none é usada porque a combinação de outras promoções oferece um desconto menor. Se o preço original for US $100, o preço com desconto será de US $75.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <Discount percentage="10"/>
      <Stacking type="base"/>
    </Promotion>
    <Promotion id="2">
      <Discount percentage="10"/>
      <Stacking type="any"/>
    </Promotion>
    <Promotion id="3">
      <Discount percentage="25"/>
      <Stacking type="none"/>
    </Promotion>
  </HotelPromotions>
</Promotions>



Limites de duração da janela de reserva

O exemplo a seguir mostra um caso em que o elemento BookingWindow é usado com os limites inicial e final definidos como um tipo de duração ISO 8601. Essa restrição exige reservas até as 18h do dia anterior à chegada e às 12h do segundo dia antes da chegada.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingWindow min="P1DT6H" max="P2DT12H"/>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


Limites de data e hora das datas de reserva

O exemplo a seguir mostra um caso em que o elemento BookingDates é usado com atributos start e end como tipos DateTime. Essa restrição exige que a reserva ocorra entre 06h30 de 01/07/2020 e 18h45 de 02/07/2020.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingDates>
         <DateRange start="2020-07-01T06:30:00" end="2020-07-02T18:45:00"/>
      </BookingDates>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


Períodos sem ano

O exemplo a seguir mostra um caso em que o elemento CheckInDates contém DateRanges que têm campos start e end sem anos. Neste exemplo, a promoção se aplica a datas de check-in entre 29/12 e 02/01, independentemente do ano. Os períodos sem ano que cruzam o limite do ano novo são inválidos. Portanto, o DateRange é expresso como dois períodos adjacentes.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <CheckInDates>
         <DateRange start="12-29" end="12-31"/>
         <DateRange start="01-01" end="01-02"/>
      </CheckInDates>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>



Desconto de FreeNights

O exemplo a seguir dá um desconto de duas noites de 50% para cada quatro noites no período especificado de datas de reserva. Para um itinerário de 10 noites, o total de quatro noites tem desconto de 50%.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingDates>
        <DateRange start="2022-01-01" end="2022-05-31"/>
      </BookingDates>
      <Discount>
        <FreeNights stay_nights="4" discount_nights="2" discount_percentage="50" night_selection="cheapest" repeats="true"/>
      </Discount>
    </Promotion>
  </HotelPromotions>
</Promotions>

O próximo exemplo aplica um desconto de 50% em uma noite para cada três noites de acomodação nos períodos especificados. Apenas as diárias sobrepostas contam para se qualificar para o desconto. Para o itinerário a seguir com check-in em 01/01/2022 e check-out em 07/01/2022, a estadia e os descontos qualificados são aplicados da seguinte forma:

  • 01/01/2022 (estadia)
  • 02/01/2022 (estadia)
  • 2022-01-03
  • 04/01/2022 (com desconto)
  • 05/01/2022 (estadia)
  • 06/01/2022 (estadia)
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <StayDates application="overlap">
        <DateRange start="2022-01-01" end="2022-01-02"/>
        <DateRange start="2022-01-04" end="2022-01-06"/>
      </StayDates>
      <Discount>
        <FreeNights stay_nights="3" discount_nights="1" discount_percentage="50" night_selection="last" repeats="true"/>
      </Discount>
    </Promotion>
  </HotelPromotions>
</Promotions>


Seleção classificada

O exemplo a seguir oferece dois descontos, um de 20% e outro de 15%. Durante a avaliação, apenas o desconto de 15% é aplicado porque tem uma classificação mais baixa.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <Discount percentage="15" rank="25"/>
    </Promotion>
    <Promotion id="2">
      <Discount percentage="20" rank="50"/>
    </Promotion>
  </HotelPromotions>
</Promotions>

BestDailyDiscount

O exemplo a seguir aplica o desconto para uma estadia de duas noites aplicando BestDailyDiscount empilhado com um Discount.

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
 <HotelPromotions hotel_id="HotelID" action="overlay">
   <Promotion id="general">
     <BestDailyDiscount fixed_amount="20"/>
   </Promotion>
   <Promotion id="may">
     <BestDailyDiscount fixed_amount="50"/>
     <StayDates application="overlap">
        <DateRange start="2023-05-01" end="2023-05-31"/>
     </StayDates>
   </Promotion>
   <Promotion id="fiesta">
     <Discount fixed_amount_per_night="5"/>
     <Stacking type="any"/>
   </Promotion>
 </HotelPromotions>
</Promotions>

Considere uma estadia de duas noites de 30 de abril de 2023 a 2 de maio de 2023. Para o cálculo, a combinação dos melhores descontos diários que gera o maior desconto é encontrada primeiro.

Para a primeira noite, a promoção "geral" é o único valor qualificado com um desconto fixo de 20.

Para a segunda noite, a promoção "pode" oferecer um desconto maior do que o desconto "geral". Portanto, quando "pode" é selecionado, o valor de desconto fixo é 50.

Depois, para a estadia, a promoção "fiesta" tem descontos de 5 por noite, ou 10 no total. Ele pode ser empilhado com a combinação dos melhores descontos diários, porque "fiesta" tem o tipo de empilhamento definido como any. Se ele for definido como base, somente a combinação dos melhores descontos diários ou o desconto "fiesta" será aplicada. Confira a descrição de Stacking para mais informações.

No geral, o preço da estadia recebe um desconto de valor fixo de 20 + 50 + 10 = 80.

Respostas

Sintaxe

A mensagem PromotionsResponse usa a seguinte sintaxe:

<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="timestamp"
                    id="message_ID"
                    partner="partner_key">
  <!-- Either Success or Issues are populated. -->
  <Success/>
  <Issues>
    <Issue code="issue_code"
           status="issue_type">
      issue_description
    </Issue>
  </Issues>
</PromotionsResponse>

Elementos e atributos

A mensagem PromotionsResponse tem os seguintes elementos e atributos:

Elemento / @Attribute Ocorrências Tipo Descrição
PromotionsResponse 1 Complex element O elemento raiz que indica o sucesso ou os problemas de uma mensagem de solicitação de promoções recebida.
PromotionsResponse / @timestamp 1 DateTime A data e a hora de criação da mensagem.
PromotionsResponse / @id 1 string O identificador exclusivo da Mensagem de promoções associada.
PromotionsResponse / @partner 1 string A conta do parceiro para esta mensagem.
PromotionsResponse / Success 0..1 Success Indica que a mensagem "Promoções" foi processada sem avisos, erros ou falhas.

Cada mensagem tem <Success> ou <Issues>.

PromotionsResponse / Issues 0..1 Issues Um contêiner para um ou mais problemas encontrados ao processar a Mensagem de promoções.

Cada mensagem tem <Success> ou <Issues>.

PromotionsResponse / Issues / Issue 1..n Issue A descrição de um aviso, erro ou falha encontrada ao processar a mensagem de promoções. Detalhes sobre esses problemas podem ser encontrados nas Mensagens de erro de status do feed.
PromotionsResponse / Issues / Issue / @code 1 integer O identificador do problema.
PromotionsResponse / Issues / Issue / @status 1 enum

O tipo de problema encontrado.

Os valores válidos são warning, error e failure.

Exemplos

Concluído

Veja a seguir uma resposta a uma mensagem de Promoções processada com sucesso.

<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
                    id="12345678"
                    partner="partner_key">
  <Success/>
</PromotionsResponse>

Problemas

Veja a seguir uma resposta a uma mensagem de Promoções que não foi processada devido a erros.

<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
                    id="12345678"
                    partner="partner_key">
  <Issues>
    <Issue code="1001" status="error">Example</Issue>
  </Issues>
</PromotionsResponse>