Ценообразование#

Типы для работы с ценами в операциях с отелями.


Money#

Денежная сумма с указанием валюты.

ПолеТипОбязательноОписание
amountdecimalДаСумма
currencystringДаКод валюты (ISO 4217, например RUB, USD, EUR)

Примеры#

1{
2  "amount": 15000.00,
3  "currency": "RUB"
4}

Prices#

Структура цен предложения.

ПолеТипОбязательноОписание
vatVatInfoНетИнформация о НДС
cancellationRulesCancellationRulesНетПравила отмены
totalPriceTotalPriceДаИтоговая цена с разбивкой
mealsMeal[]НетИнформация о питании
earlyCheckinCheckinCheckoutOption[]НетОпции раннего заезда
lateCheckoutCheckinCheckoutOption[]НетОпции позднего выезда
taxDataTaxDataНетДанные о налогах по предложению

Расчёт цены и комиссий#

Логика ниже общая для всех структур с расчётом цены — TotalPrice, ServicePrice, PenaltyPrice. Она применяется везде, где есть цена и её можно забронировать/оплатить: проживание, РЗПВ (ранний заезд / поздний выезд), питание, аннуляция.

В пресете прайсинга задаётся ровно одна исходная (базовая) цена поставщика — gross, netto или цена гостиницы (bar) — и ровно одно действие с ней: скидка, наценка или без изменений. Расчёт идёт в следующем порядке: 1) применяется скидка/наценка к базовой цене, 2) от полученной цены считается комиссия субагенту (если настроена), 3) при включённом округлении округляется только цена продажи — к комиссии субагенту округление не применяется, 4) к цене за проживание в последнюю очередь добавляется сервисный сбор.

  • total — цена после применения действия из пресета:

    • скидка: база − (база × % / 100)
    • наценка: база + (база × % / 100)
    • без изменений: передаётся исходная цена поставщика как есть

    Скидка/наценка применяется одинаково к цене за проживание (TotalPrice) и к ценам доп. услуг — питание, РЗПВ (ServicePrice). Если в пресете включено округление, цена округляется в бо́льшую сторону (например, округление до 100: 1106 → 1200). Сервисный сбор добавляется только к total за проживание, после всех остальных вычислений.

  • discount / markup — размер скидки/наценки в деньгах (разница между базовой ценой пресета и ценой после применения %). Заполняется только одно из двух полей — они взаимоисключающие.

  • serviceFee — сервисный сбор, применяется только к цене за проживание (TotalPrice), к доп. услугам не добавляется. Настраивается в пресете одним из двух способов: фиксированной суммой в рублях, либо процентом от total (после всех вычислений) — во втором случае результат ограничивается настроенными в пресете границами min/max.

  • commission.subagent — комиссия субагенту при перепродаже предложения. Считается вторым шагом, после применения скидки/наценки — от уже изменённой цены. Если скидка/наценка не были применены, комиссия считается от исходной цены поставщика.

  • commission.margin / marginCurrency — маржинальность продажи: комиссия поставщика (commission.supplier) + сумма наценки + сервисный сбор − сумма скидки − комиссия субагенту.

  • commission.supplier — комиссия поставщика, полученная по API. Не все поставщики её передают — в этом случае поле будет null.

  • supplier / supplierBreakdown — цены поставщика “как есть” (gross/netto/bar), без применения вашей коммерции. Если используется контракт партнёра (переиспользуемый контракт), эти цены уже могут включать чужую коммерцию.

null в полях коммерции (commission.*, discount, markup) означает, что коммерция не настроена на цены поставщика — не ошибку и не отсутствие данных.


TotalPrice#

Разбивка итоговой цены.

ПолеТипОбязательноОписание
totalMoneyДаИтоговая сумма к оплате. Расчёт см. в Расчёт цены и комиссий
discountMoneyНетСкидка, см. Расчёт цены и комиссий
markupMoneyНетНаценка, см. Расчёт цены и комиссий
serviceFeeMoneyНетСервисный сбор, см. Расчёт цены и комиссий
supplierSupplierPricesНетЦены поставщика, см. Расчёт цены и комиссий
commissionPriceCommissionНетКомиссия, см. Расчёт цены и комиссий

Примеры#

 1{
 2  "total": {
 3    "amount": 15000.00,
 4    "currency": "RUB"
 5  },
 6  "discount": {
 7    "amount": 1500.00,
 8    "currency": "RUB"
 9  },
10  "serviceFee": {
11    "amount": 500.00,
12    "currency": "RUB"
13  }
14}

ServicePrice#

Цена дополнительной услуги (питание, ранний заезд и т.д.).

ПолеТипОбязательноОписание
totalMoneyДаИтоговая стоимость услуги. Расчёт см. в Расчёт цены и комиссий
discountMoneyНетСкидка, см. Расчёт цены и комиссий
markupMoneyНетНаценка, см. Расчёт цены и комиссий
serviceFeeMoneyНетНе заполняется — сервисный сбор применяется только к TotalPrice
supplierMoneyНет(устарело) Цена поставщика. Используйте supplierBreakdown
supplierBreakdownSupplierPricesНетДетализация цены поставщика, см. Расчёт цены и комиссий
commissionPriceCommissionНетКомиссия, см. Расчёт цены и комиссий
vatVatInfoНетИнформация о НДС

PenaltyPrice#

Штраф при отмене бронирования.

ПолеТипОбязательноОписание
totalMoneyДаИтоговая сумма штрафа. Расчёт см. в Расчёт цены и комиссий
discountMoneyНетСкидка, см. Расчёт цены и комиссий
markupMoneyНетНаценка, см. Расчёт цены и комиссий
serviceFeeMoneyНетНе заполняется — сервисный сбор применяется только к TotalPrice
supplierMoneyНет(устарело) Цена поставщика. Используйте supplierBreakdown
supplierBreakdownSupplierPricesНетДетализация цены поставщика, см. Расчёт цены и комиссий

SupplierPrices#

Цены поставщика.

ПолеТипОбязательноОписание
barMoneyНетBAR-цена (Best Available Rate)
grossMoneyНетБрутто-цена
nettoMoneyНетНетто-цена
rackMoneyНетRack-цена (стойка)

PriceCommission#

Комиссия.

ПолеТипОбязательноОписание
marginstringНетМаржа. Расчёт см. в Расчёт цены и комиссий
marginCurrencystringНетВалюта маржи (ISO 4217, например RUB)
subagentMoneyНетКомиссия субагента, см. Расчёт цены и комиссий
supplierMoneyНетКомиссия поставщика, см. Расчёт цены и комиссий

VatInfo#

Информация о НДС.

ПолеТипОбязательноОписание
isVatFreebooleanНетОсвобождение от НДС
includedbooleanНетНДС включен в стоимость
valueMoneyНетСумма НДС
percentstringНетСтавка НДС (%)

Примеры#

1{
2  "isVatFree": false,
3  "included": true,
4  "value": {
5    "amount": 2500.00,
6    "currency": "RUB"
7  },
8  "percent": "20"
9}

TaxData#

Данные о налогах по предложению. Прокидывается из Hotel Service без изменений.

ПолеТипОбязательноОписание
taxesTax[]НетСписок налогов по предложению. null или пустой массив, если поставщик не предоставляет данные

Примеры#

 1{
 2  "taxes": [
 3    {
 4      "name": "city_tax",
 5      "isIncluded": false,
 6      "amount": "15.00",
 7      "currencyCode": "EUR"
 8    }
 9  ]
10}

Tax#

Отдельный налог по предложению.

ПолеТипОбязательноОписание
namestringДаКод или название налога, переданный поставщиком (например: city_tax)
isIncludedbooleanДаtrue — налог уже включён в итоговую стоимость поставщиком; false — взимается дополнительно при заселении
amountstringДаСумма налога в виде строки (например: "15.00")
currencyCodestringДаВалюта суммы, ISO 4217 (например: "EUR")