Ценообразование#
Типы для работы с ценами в операциях с отелями.
Money#
Денежная сумма с указанием валюты.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
amount | decimal | Да | Сумма |
currency | string | Да | Код валюты (ISO 4217, например RUB, USD, EUR) |
Примеры#
1{
2 "amount": 15000.00,
3 "currency": "RUB"
4}Prices#
Структура цен предложения.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
vat | VatInfo | Нет | Информация о НДС |
cancellationRules | CancellationRules | Нет | Правила отмены |
totalPrice | TotalPrice | Да | Итоговая цена с разбивкой |
meals | Meal[] | Нет | Информация о питании |
earlyCheckin | CheckinCheckoutOption[] | Нет | Опции раннего заезда |
lateCheckout | CheckinCheckoutOption[] | Нет | Опции позднего выезда |
taxData | TaxData | Нет | Данные о налогах по предложению |
Расчёт цены и комиссий#
Логика ниже общая для всех структур с расчётом цены — 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#
Разбивка итоговой цены.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
total | Money | Да | Итоговая сумма к оплате. Расчёт см. в Расчёт цены и комиссий |
discount | Money | Нет | Скидка, см. Расчёт цены и комиссий |
markup | Money | Нет | Наценка, см. Расчёт цены и комиссий |
serviceFee | Money | Нет | Сервисный сбор, см. Расчёт цены и комиссий |
supplier | SupplierPrices | Нет | Цены поставщика, см. Расчёт цены и комиссий |
commission | PriceCommission | Нет | Комиссия, см. Расчёт цены и комиссий |
Примеры#
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#
Цена дополнительной услуги (питание, ранний заезд и т.д.).
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
total | Money | Да | Итоговая стоимость услуги. Расчёт см. в Расчёт цены и комиссий |
discount | Money | Нет | Скидка, см. Расчёт цены и комиссий |
markup | Money | Нет | Наценка, см. Расчёт цены и комиссий |
serviceFee | Money | Нет | Не заполняется — сервисный сбор применяется только к TotalPrice |
supplier | Money | Нет | (устарело) Цена поставщика. Используйте supplierBreakdown |
supplierBreakdown | SupplierPrices | Нет | Детализация цены поставщика, см. Расчёт цены и комиссий |
commission | PriceCommission | Нет | Комиссия, см. Расчёт цены и комиссий |
vat | VatInfo | Нет | Информация о НДС |
PenaltyPrice#
Штраф при отмене бронирования.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
total | Money | Да | Итоговая сумма штрафа. Расчёт см. в Расчёт цены и комиссий |
discount | Money | Нет | Скидка, см. Расчёт цены и комиссий |
markup | Money | Нет | Наценка, см. Расчёт цены и комиссий |
serviceFee | Money | Нет | Не заполняется — сервисный сбор применяется только к TotalPrice |
supplier | Money | Нет | (устарело) Цена поставщика. Используйте supplierBreakdown |
supplierBreakdown | SupplierPrices | Нет | Детализация цены поставщика, см. Расчёт цены и комиссий |
SupplierPrices#
Цены поставщика.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
bar | Money | Нет | BAR-цена (Best Available Rate) |
gross | Money | Нет | Брутто-цена |
netto | Money | Нет | Нетто-цена |
rack | Money | Нет | Rack-цена (стойка) |
PriceCommission#
Комиссия.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
margin | string | Нет | Маржа. Расчёт см. в Расчёт цены и комиссий |
marginCurrency | string | Нет | Валюта маржи (ISO 4217, например RUB) |
subagent | Money | Нет | Комиссия субагента, см. Расчёт цены и комиссий |
supplier | Money | Нет | Комиссия поставщика, см. Расчёт цены и комиссий |
VatInfo#
Информация о НДС.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
isVatFree | boolean | Нет | Освобождение от НДС |
included | boolean | Нет | НДС включен в стоимость |
value | Money | Нет | Сумма НДС |
percent | string | Нет | Ставка НДС (%) |
Примеры#
1{
2 "isVatFree": false,
3 "included": true,
4 "value": {
5 "amount": 2500.00,
6 "currency": "RUB"
7 },
8 "percent": "20"
9}TaxData#
Данные о налогах по предложению. Прокидывается из Hotel Service без изменений.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
taxes | Tax[] | Нет | Список налогов по предложению. null или пустой массив, если поставщик не предоставляет данные |
Примеры#
1{
2 "taxes": [
3 {
4 "name": "city_tax",
5 "isIncluded": false,
6 "amount": "15.00",
7 "currencyCode": "EUR"
8 }
9 ]
10}Tax#
Отдельный налог по предложению.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
name | string | Да | Код или название налога, переданный поставщиком (например: city_tax) |
isIncluded | boolean | Да | true — налог уже включён в итоговую стоимость поставщиком; false — взимается дополнительно при заселении |
amount | string | Да | Сумма налога в виде строки (например: "15.00") |
currencyCode | string | Да | Валюта суммы, ISO 4217 (например: "EUR") |