Перейти к содержимому

Признание выручки

Эта страница объясняет, как именно система считает выручку за период и почему эта цифра может отличаться от суммы денег, которые реально легли на счёт за этот же период. Понимание этой разницы критично для любого, кто читает финансовые отчёты: владельца, бухгалтера, управляющего.

Система использует метод начисления по ночам проживания (accrual по ночам) — международный стандарт USALI для гостиничного бизнеса. Выручка бронирования распределяется пропорционально ночам, когда гость реально проживал в номере, а не по дате создания брони и не по дате оплаты.

Это значит:

  • Бронь на 10 ночей с 25 января по 4 февраля → в январе признаётся выручка за 7 ночей, в феврале — за 3.
  • Момент, когда деньги легли на счёт, на эту цифру не влияет.
  • Правило ночи. Прошедшая ночь входит в выручку, только если бронь заселена или выехала (CHECKED_IN, CHECKED_OUT): пока гость не заселился, в номере никто не ночевал. Ночь с сегодняшней и дальше входит и у подтверждённой брони (CONFIRMED, «На проверке у ресепшена») — это «забронировано вперёд». Правило одно для цены ночей, скидок и доплат, доплат за время и услуг брони.
  • Отменённые брони и неявки в выручку не входят. Удержание при отмене или незаезде есть только в P&L.

Три способа считать выручку — и почему мы выбрали именно этот

Заголовок раздела «Три способа считать выручку — и почему мы выбрали именно этот»

В мировой практике есть три разных метода признания выручки, и они дают разные цифры за один и тот же период.

Выручка признаётся в момент, когда бронь была создана. Проблема: это не выручка, это объём продаж. Забронированное в январе проживание в мае может быть отменено, и тогда «январская выручка» окажется фикцией.

Выручка признаётся в момент, когда деньги пришли на счёт. Плюс: совпадает с банковской выпиской. Проблема: если гость внёс предоплату в декабре, а жил в марте, декабрь будет искусственно богатым, а март — бедным. Расходы на обслуживание гостя (уборка, коммуналка, зарплаты) всё равно пойдут в марте. В результате декабрь выглядит прибыльным без причины, март — убыточным без причины.

Выручка признаётся пропорционально ночам, когда гость реально жил в номере. Плюс: выручка и расходы всегда относятся к одному и тому же периоду. GOP (прибыль до аренды и налогов) отражает реальную эффективность гостиницы за конкретный месяц. Минус: цифра выручки не совпадает один в один с движением денег по счёту.

Это и есть стандарт USALI — Uniform System of Accounts for the Lodging Industry, по которому отчитываются все международные гостиничные сети. Мы используем его, потому что это единственный метод, при котором P&L-отчёт даёт правду о том, заработала гостиница или потеряла за конкретный месяц.

Бронь на 100 000 ₸, 10 ночей с 15 января по 25 января. Гость оплатил всё сразу при заезде 15 января. За январь расходы на эту бронь: 75 000 ₸ (зарплаты, коммуналка, продукты).

МетодЯнварь: выручкаЯнварь: GOP
По дате брони (as-booked)зависит от даты созданияслучайная цифра
По дате оплаты (cash)100 000+25 000
По ночам (наш)100 000+25 000

Пока оплата и проживание в одном месяце — все методы сходятся.

А теперь тот же гость, но предоплатил в декабре:

МетодДекабрь выручкаДекабрь GOPЯнварь выручкаЯнварь GOP
По дате брони100 000 (при бронировании в декабре)+100 0000−75 000
По дате оплаты (cash)100 000+100 0000−75 000
По ночам (наш)00100 000+25 000

Видно, что первые два метода создают ложно-прибыльный декабрь и ложно-убыточный январь. Метод по ночам даёт правду: декабрь ничего не заработал, январь принёс 25 000 ₸ прибыли.

Отчёт / экранМетодПочему именно так
Главная, плитка «Выручка»По ночам: выручка проживания и услуги брони по ночам периода, допродажи — по дате создания, если оплаченыТо же число, что итог «Выручки по категориям» за тот же период
Главная, карточка «Выручка проживания» и отчёт «Разбор выручки проживания»По ночам, целыми днями по вчераЦена ночей со скидками и доплатами, доплаты за время, минус возвраты брони за эти ночи
P&L отчёт (/reports/pnl) и «Прибыль за период» на главнойAccrual по USALIСвоё определение: удержания при отмене и незаезде, возвраты по дате проведения; доступ по праву financial_kpi.view
GOP, GOPPAR, EBITDA, прибыль до налоговAccrual по USALIОдна функция P&L: главная показывает те же числа, что отчёт
Night AuditЗа сменуБрони и корректировки, заведённые за сутки; деньги смены сверяются с кассой отдельной строкой
Касса и платежи (/reports/payment-ledger)По дате платежаГлавный отчёт для сверки с банком — показывает реально поступившие деньги
Главная: «Касса за период», «Касса за сегодня», «Касса за день» объектов отдыхаПо дате платежаЭто касса, а не выручка: предоплата за будущие ночи попадает сюда в день платежа
Балансы броней (/reports/aging)Остатки по бронямКто сколько должен (и где переплаты)

Для каждой брони, чьи ночи пересекаются с запрашиваемым периодом:

perNight = (totalAmount + adjustmentsSum − refundsSum) / totalNights
countedNights = ночи пересечения с периодом, засчитанные правилом ночи
stayRevenue += perNight × countedNights
stayRevenue += доплаты за время с датой услуги в периоде

Где:

  • totalAmount — стоимость проживания брони, без услуг брони
  • adjustmentsSum — сумма активных скидок и доплат оператора брони, кроме доплат за ранний заезд и поздний выезд
  • refundsSum — возвраты по этой брони, дата возврата не важна
  • totalNights — количество ночей брони целиком (checkOut − checkIn)
  • доплата за ранний заезд идёт датой заезда, за поздний выезд — датой выезда, целиком

Если бронь полностью вне периода → выручка 0. Если totalNights = 0 (некорректная бронь) → выручка 0.

Так считается выручка проживания. Выручка — она же плюс услуги брони, разделённые по ночам тем же правилом, и допродажи, созданные и оплаченные в периоде. Удержания при отмене и незаезде в них не входят — они есть только в P&L.

Скидка/доплата — это пост-факт изменение цены брони (SURCHARGE — доплата, DISCOUNT — скидка), которая применяется оператором уже после создания брони (например: «доплата за дополнительного гостя», «VIP-скидка 10%», «компенсация за поломку кондиционера»).

Скидки/доплаты распределяются по тем же ночам проживания, что и сама бронь — это нужно чтобы реальная цена сделки (totalAmount + сумма скидок/доплат) корректно отражалась в accrual-выручке за период проживания.

Пример: бронь на 10 ночей с 25 января по 4 февраля, базовая цена 100 000 ₸, оператор 13 февраля добавил скидку −20 000 ₸ за лояльность. Скидка распределится по 2 000 ₸ на каждую ночь:

МетодЯнварь выручкаФевраль выручка
По дате createdAt скидки/доплаты70 000 (100к × 7/10)30 000 − 20 000 = 10 000
По ночам проживания (наш)70 000 − 14 000 = 56 00030 000 − 6 000 = 24 000

Метод по ночам — единственный корректный для accrual: скидка относится к услуге (10 ночам проживания), а не к моменту, когда оператор её внёс в систему.

Выручка объекта складывается из трёх частей:

  1. Проживание — цена ночей по броням, без услуг брони и допродаж.
  2. Услуги брони — услуги, добавленные в бронь: завтрак, трансфер, поздний выезд. Оплачиваются вместе с бронью, общим платежом. В P&L, «Каналах», «Выручке по категориям» и выручке сети распределяются по ночам проживания, как и сама бронь.
  3. Допродажи — продажи на стойке с бронью и без неё: напитки, прокат, мангал. У допродажи своя оплата, поэтому в P&L она признаётся по дню оплаты; отменённые не входят.

Обе части сверх проживания входят в P&L, в плитку «Выручка» главной, в «Выручку по категориям», «Каналы», «Гости» и в отчёты сети. Каждый отчёт показывает их двумя отдельными строками. На главной услуги брони, как и в отчётах, делятся по ночам; допродажи — созданные и оплаченные в периоде.

Что остаётся только на проживании:

  • ADR, RevPAR и выручка проживания (карточка главной и «Разбор выручки проживания») — это цена номера, услуги брони и допродажи их не меняют. TRevPAR — выручка номеров с услугами брони и допродажами при бронях номеров.
  • Комиссия канала — площадка берёт процент с проживания; так считают и «Каналы», и P&L.
  • Темп бронирования, «Продано на 6 месяцев», прогноз и «Заезды после периода» — это не выручка, а «Сумма броней»: стоимость проживания брони целиком, со скидками и доплатами, без возвратов.

Допродажа без брони в «Каналы» не входит: у неё нет канала. Её видно в «Выручке по категориям» строкой «Продажи вне броней».

Если гость платит за накопленные допродажи при выезде, вся сумма попадает в день выезда, а не распределяется по дням проживания. Для гостиницы это редко меняет картину.

В P&L-отчёте accrual-выручка дополнительно разносится по направлениям (операционным департаментам USALI): размещение, питание, прочие направления и прочие доходы. Привязка идёт через категорию выручки (SaleCategory.department):

  • Проживание (комната + скидки/доплаты − возвраты) → всегда Размещение.
  • Услуги брони и допродажи → в своё направление по категории; услуга без категории и свободная позиция идут в Размещение. Товар с полки — в отдел «Розница», если его категория там стоит (см. Категории выручки); себестоимость проданного идёт в тот же отдел и тот же день, что выручка.
  • Категория «Доход вне операций» (субаренда, проценты) → в выручку не входит ни у услуг брони, ни у допродаж — ни в P&L, ни на дашборде; в P&L это строка «Доход» внеоперационной секции ниже GOP.
  • Удержание при отмене → «Прочие доходы», удержание за незаезд → «Размещение»; оба — по дате отмены.
  • Бронь с отметкой «Бесплатное размещение» даёт в P&L занятую ночь, но не проданную: в ADR по USALI и проданные ночи P&L не входит. ADR главной и отчётов считает такую ночь проданной с нулём.

По каждому направлению P&L показывает не только выручку, но и прибыль направления (выручка минус его зарплаты и прочие расходы). Это позволяет увидеть, какое направление зарабатывает, а какое — съедает маржу. Сама модель расчёта по ночам при этом не меняется: разбивка по направлениям — это «надстройка» над той же accrual-выручкой.

В P&L, кассе, ночном аудите и сигнале «возвраты» сети возвраты вычитаются по дате проведения (PaymentRefund.settledAt). Это бухгалтерский стандарт: возврат — это поправка текущего периода, а не ретроактивное изменение прошлого закрытого месяца.

Последствие для P&L: если гость жил в январе, а возврат ему оформили в марте, то:

  • Январь показывает полную выручку (100 000 ₸)
  • Март вычитает возврат из своей выручки
  • Сумма помесячных чисел за январь-март не равна сумме выручки за квартал, если возврат был частичным и затронул оба месяца. Для квартального периода возврат будет учтён один раз.

Если для вас это проблема (например, нужна чистая квартальная выручка без таких артефактов) — запрашивайте P&L за квартал целиком, а не складывайте три месячных отчёта вручную.

Выручка проживания и выручка — главная (плитка «Выручка», карточка «Выручка проживания»), Разбор выручки проживания, Каналы продаж, Выручка по категориям, Год к году и выручка сети — считают возврат иначе. Он вычитается из выручки своей брони и делится её ночами, как сама выручка, а дата возврата не важна. Гость жил 28 августа – 2 сентября, ему вернули 10 000 ₸: сентябрь с одной ночью из пяти вычтет 2 000 ₸, август — 8 000 ₸.

Самый частый источник путаницы. Управляющий смотрит на P&L за апрель и видит «Итого выручка: 593 270 ₸». Потом открывает банковскую выписку и кассу и понимает, что за размещение (за ночи гостей) за этот месяц фактически не пришло ни тенге — только 20 270 ₸ за услуги на ресепшене. Возникает закономерный вопрос: что это за 593 270 ₸ и где они?

Это две разные метрики про два разных события, и обе верные — просто про разное.

  • 593 270 ₸ (P&L, «Выручка по USALI» на главной) — это начисленная выручка за апрель по USALI: столько гостиница заработала услугами, оказанными в апреле. Часть гостей оплачивала эти ночи в марте, часть оплатит в мае — но услуги оказаны в апреле, поэтому выручка признана в апреле.
  • 20 270 ₸ (касса) — это сколько реальных денег поступило в апреле. За проживание в этом месяце большая часть уже была оплачена заранее (в марте или раньше), поэтому в кассе апреля только допродажи.

Обе цифры корректны. Они отвечают на разные вопросы:

  • P&L отвечает «сколько гостиница заработала апрелем»
  • Касса отвечает «сколько денег поступило в апреле»

Владелец смотрит на P&L за март и видит «GOP: 2 000 000 ₸». Потом смотрит выписку за март — «пришло 3 500 000 ₸». Разница в другую сторону.

  • GOP 2 000 000 — столько гостиница заработала за услуги, оказанные в марте (прибыль до платы управляющей компании, аренды, налогов и процентов).
  • 3 500 000 на счёте — это разные деньги: часть за март, часть предоплат за апрель-май, минус частичные возвраты за февральские брони.

Эти цифры никогда не обязаны совпадать. Совпадают они только в учебном примере, когда все гости заехали, прожили и расплатились в одном и том же месяце, а возвратов не было.

Как посмотреть реальные деньги — пошагово

Заголовок раздела «Как посмотреть реальные деньги — пошагово»

Если нужно ответить на вопрос «сколько денег реально пришло за этот период», зайти нужно в Касса и платежи.

  1. В левом меню откройте раздел «Отчёты» → «Касса и платежи» (значок кошелька).
  2. Вверху — три KPI-карточки:
    • Поступления — сколько пришло всего за период (и количество транзакций).
    • Возвраты — сколько вернули гостям (если были возвраты).
    • Чистая касса — итог: поступления минус возвраты. Это число для сверки с банком.
  3. Ниже — блок «По источнику»: отдельно брони и отдельно сервис (допродажи на стойке: бар, прачечная, прокат). Видно, откуда пришли деньги.
  4. График «Поступления по дням» — столбчатая диаграмма. Зелёные столбцы — поступления, красные — возвраты. Сразу видно пиковые дни.
  5. Таблица «По способам оплаты» — отдельно наличные, Kaspi, банк. перевод и т.д. Эта разбивка обычно нужна бухгалтеру.
  6. Внизу — детальная таблица транзакций: каждая запись со ссылкой на бронирование и гостя.
  7. Справа сверху — кнопки Excel и CSV. Обычно бухгалтеру отправляется Excel за месяц.

Фильтр периода — стандартный: сегодня / вчера / этот месяц / прошлый месяц / квартал / произвольный диапазон. Всё на странице — KPI, график, разбивки и таблица — пересчитывается в связке.

ЗадачаОтчёт
Сколько денег пришло за день/неделю/месяцКасса и платежи
Сверка кассы с банковской выпискойКасса и платежи → Excel
Сколько пришло наличными / Kaspi / переводомКасса и платежи → «По способам оплаты»
Что заработала гостиница в марте (прибыльность)P&L
Какая маржа (GOP, EBITDA, GOPPAR)P&L
Сравнение этого месяца с прошлым годом по прибылиГод к году
Что произошло за смену на ресепшене (заезды/выезды/оплаты одной даты)Ночной аудит
Кто из гостей должен денег (и где переплаты)Балансы броней
  • Модуль: apps/api/src/modules/revenue-lines/ — выручку брони собирает только он
  • BookingRevenueService.stayRevenue / revenue — выборка «Выручки проживания» и «Выручки» фонда за период
  • stayRevenue.ts — деление по ночам и сложение: stayRevenueTotals, revenueTotals, разбивка по дням и месяцам stayRevenueByBucket
  • nightRule.ts — правило ночи, одно на все части
  • P&L собирает своё определение «по USALI» из тех же частей в reports.service.ts
  • Night Audit остаётся «за смену»: начисления по дате создания брони и корректировок — это его естественная семантика.
ОтчётМетод учёта скидок/доплат
Главная → «Выручка» (/analytics/kpi) и «Выручка проживания» (/analytics/revenue)По ночам, в составе выручки проживания
P&L (reports.profitAndLoss)Отдельная строка revenue.adjustments, входит в revenue.total
Revenue by GroupСвёрнуты в totalRevenue группы (без отдельной строки)
Channel PerformanceСвёрнуты в totalRevenue канала (без отдельной строки)
Год к годуСвёрнуты в выручку проживания месяца, ADR и RevPAR — по ночам брони, как в Channel Performance
Cancellation ReportВключены в «Отменено на» (summary.amount) отменённой брони целиком, вместе с доплатами за время
Night AuditОтдельная строка revenue.adjustments: скидки и доплаты — по createdAt, доплаты за время — по дате услуги