Расходы
Модуль расходов позволяет учитывать всё, что вы тратите на работу отеля — от электричества и тапочек до зарплат, аренды и ремонта кровли — и автоматически считать валовую операционную прибыль (GOP), эффективность на номер (GOPPAR), EBITDA и прибыль до налогов.
Зачем нужен модуль
Заголовок раздела «Зачем нужен модуль»До появления этого модуля система знала только доходную часть: бронирования, платежи, продажи услуг. Без расходов вы видели «сделали 12 млн ₸» и не могли ответить на главный вопрос — заработали или ушли в минус. Теперь финансовая картина полная.
Категории по USALI
Заголовок раздела «Категории по USALI»Система использует международную стандартную классификацию расходов гостиничного бизнеса USALI (Uniform System of Accounts for the Lodging Industry). При создании нового объекта автоматически создаются 41 системная категория в 12 группах. Группа определяет, в какую строку P&L попадёт расход:
| Группа | Примеры категорий | Где в P&L |
|---|---|---|
| Расходы номеров (Rooms) | Расходники для номеров, аменитис, прачечная, униформа, зарплата администраторов и горничных | Расходы направления «Размещение» |
| Питание (F&B) | Продукты для завтраков, напитки и бар, посуда, зарплата кухни | Расходы направления «Питание» |
| Коммуналка (Utilities) | Электричество, вода, газ, отопление | Накладные |
| Обслуживание (Maintenance) | Текущий ремонт, сантехника, электрика, мебель, уборка территории, капитальные затраты | Накладные (капитальные — под чертой) |
| Административные (A&G) | Канцелярия, банковские комиссии, бухгалтерия, юристы, прочие расходы | Накладные |
| Системы и связь (I&TS) | Интернет и связь, программное обеспечение и подписки, компьютеры и оборудование | Накладные |
| Маркетинг | Реклама онлайн, фото/видео, печать | Накладные |
| Зарплаты без направления | Налоги на ФОТ, зарплата персонала без направления | Разносится по направлениям или строка «ФОТ, направление не указано» |
| Управляющая компания | Плата управляющей компании | Между GOP и EBITDA |
| Аренда | Помещения, оборудование | Внеоперационные |
| Налоги и страховка | Налог на имущество, страхование | Внеоперационные |
| Финансы | Проценты по кредитам | Ниже EBITDA |
Группы «Прочее» больше нет: её категории переехали в «Административные», а новой категории эту группу не назначить. Системные категории нельзя удалить — только архивировать или переименовать. Можно добавлять свои категории в любую группу.
Направление у категории
Заголовок раздела «Направление у категории»У категории можно указать направление — размещение, питание или одно из прочих направлений. С направлением расход ложится в расходы этого направления, без направления — в накладные своей группы. У зарплатных категорий направление особенно важно: по USALI зарплата стоит внутри направления, где работает человек. Зарплатная категория без направления в отчёте становится строкой «ФОТ, направление не указано», а в справочнике у неё появляется подсказка «Указать направление» и полоса-сводка над списком. Если при вводе расхода выбрана такая категория, форма попросит направление и запишет его на категорию — следующие расходы по ней пойдут туда сами.
Отдельная отметка «Распределять пропорционально зарплатам» — для налогов и взносов с зарплат: сумма разойдётся по направлениям в той же пропорции, что зарплаты периода.
Капитальные затраты
Заголовок раздела «Капитальные затраты»Ремонт и покупки, которые служат дольше года — замена кровли, новая котельная, мебель на весь корпус. По USALI такие расходы в операционную прибыль не входят: в P&L они стоят строкой «Капитальные затраты» под «Прибылью до налогов», с «Итогом после капитальных» ниже, и не попадают в график расходов. Касса и движение денег их видят как обычные оплаты.
Признак задаётся в двух местах: отметка «Капитальные затраты» у категории (в сиде она стоит у одноимённой категории группы «Обслуживание») делает капитальными все записи по умолчанию, а отметка на самой записи переопределяет его в обе стороны — можно записать капитальный ремонт в обычную категорию или обычную покупку в капитальную. Запланированные записи входят в строку по тому же правилу, что и в операционные ступени.
Имена категорий мультиязычные: каждое название хранится сразу на нескольких языках (ru / en / kz / de), а интерфейс показывает его на языке пользователя. Поэтому в любой локали категория выглядит одинаково осмысленно.
Страница «Категории расходов»
Заголовок раздела «Страница «Категории расходов»»Отдельная страница Финансы → Расходы → Категории — это «атлас» всех статей. Слева список 12 USALI-групп со счётчиками, справа — категории выбранной группы.
Что здесь видно и можно делать:
- Сводка по группе — сколько всего категорий, сколько ваших, сколько системных, сколько зарплатных
- Поиск — по любому из языков названия сразу по всем группам
- Переключатель «Только зарплатные» — собирает зарплатные категории сквозь все группы
- Цвет и иконка — у каждой категории свой значок; для своих категорий можно выбрать цвет из готовых или задать свой; по умолчанию стоит «Авто» — цвет группы
- Бейджи — «Зарплата» у зарплатных категорий, «Капитальные» у капитальных, подпись «разносится пропорционально зарплатам» у налогов с зарплат
- Создание / редактирование своих категорий, переименование системных
- Удаление — только для своих категорий; системные защищены замком
Права доступа
Заголовок раздела «Права доступа»Модуль использует гранулярные права, а не только роли:
| Право | Что даёт |
|---|---|
expenses.view | Видеть список расходов и агрегаты (без зарплат) |
expenses.manage | Создавать/редактировать/отменять любые расходы (кроме зарплатных) и управлять категориями |
expenses.manage_own | Видеть все non-payroll расходы проекта; редактировать и отменять — только свои, младше 24 часов |
expenses.payroll.view | Видеть зарплатные категории и суммы |
expenses.payroll.manage | Создавать и редактировать зарплатные расходы |
financial_kpi.view | Видеть GOP, GOPPAR, EBITDA, прибыль до налогов, ADR, RevPAR |
Готовые пресеты в диалоге изменения прав участника проекта:
- Владелец / Управляющий / Бухгалтер — полный доступ к финансам, включая зарплаты
- Ресепшн — только
expenses.manage_own(свои операционные расходы за смену) - Только чтение — просмотр без редактирования
Список расходов
Заголовок раздела «Список расходов»На странице Финансы → Расходы → Все расходы — таблица со всеми расходами проекта.
Сверху — карточки-итоги за выбранный период: Всего, Оплачено, Запланировано. Если у вас нет права видеть зарплаты, появляется четвёртая карточка-предупреждение «Payroll скрыт» — она напоминает, что суммы в итогах посчитаны без фонда оплаты труда.
Что здесь можно делать:
- Строка над таблицей — поиск по названию поставщика, период (с готовыми пресетами: сегодня, вчера, 7 дней, месяц, прошлый месяц, с начала года) и кнопка «Фильтр»; справа — число расходов, настройка колонок и плотность таблицы
- Окно «Фильтр» — USALI-группа, статус (Оплачен / Запланирован) и вид (капитальные / операционные). Число на кнопке показывает, сколько условий выбрано, «Сбросить всё» внизу окна снимает их разом
- Переходы из P&L по статье, направлению и капитальным открывают список уже отфильтрованным
- Активные фильтры показываются «пилюлями» — каждую можно снять одним кликом
- Клик по строке — открывает детальную страницу расхода
- Новый расход — кнопка в шапке открывает форму создания
- Колонка «Кто создал» — видно, кто внёс расход (важно для контроля в сменах ресепшена)
- НДС — если у расхода указан НДС, он показывается под суммой отдельной подписью
- Пагинация — выбор размера страницы и переключение по номерам
При проваливании из портфельного P&L (?projectId=…) страница автоматически переключается на нужный отель — карточки и таблица показывают данные именно того объекта, в который вы перешли.
Создание расхода
Заголовок раздела «Создание расхода»- Откройте Финансы → Расходы → Все расходы
- Нажмите «Новый расход» — справа откроется форма
- Заполните форму:
- Сумма — обязательное поле, в тенге (в кадре выше — 45 000 ₸ за замену смесителя)
- Статус — Оплачен или Запланирован
- Категория — выбирается из дерева USALI с поиском по всем языкам (в кадре — «Сантехника» из группы «Обслуживание»; зарплатные видят только владельцы). Если выбрана зарплатная категория без направления, ниже появится обязательный выбор направления — оно запишется на категорию. У категорий питания и розницы форма напоминает: «Товар для продажи проводите приходом на склад»
- Дата расхода — когда возникло обязательство (для P&L)
- Дата оплаты — когда деньги реально ушли (для cash flow). Поле появляется только для статуса «Оплачен» и может отличаться от даты расхода
- Способ оплаты — Наличные / Банк / Карта / Kaspi / Другое
- Поставщик, номер счёта, описание — опционально
- Капитальные затраты — отметка внизу формы; по умолчанию как у категории, для этой записи можно снять или поставить
- Нажмите «Сохранить» — расход встанет первой строкой списка, а карточки-итоги пересчитаются
Расход сохраняется в статусе Оплачен (если поставили дату оплаты) или Запланирован.
Детальная страница расхода
Заголовок раздела «Детальная страница расхода»Клик по строке в списке открывает детальную страницу — аналог страницы платежа.
На странице отображаются:
- Сводка — крупная сумма, отдельной строкой НДС (если задан), категория, способ оплаты, поставщик, номер счёта, описание
- Две даты с пояснением — дата расхода (попадает в P&L за этот месяц) и дата оплаты (попадает в движение денежных средств за этот день). Раскрывающаяся подпись объясняет, зачем нужны обе. Под датой расхода видно, был ли он проставлен задним числом; под датой оплаты — разрыв между начислением и оплатой (отсрочка поставщика или предоплата)
- Категория — отдельным блоком, с группой USALI, направлением и бейджами «Зарплата» и «Капитальные»
- Признак ночного аудита — попадает ли расход в сменный отчёт
- Источник — если расход создан автоматически из повторяющегося правила, есть ссылка на него
- Карточка автора — кто создал расход и когда
- Хронология — таймлайн событий: создан → понесён → оплачен → отменён
- История изменений (аудит) — сворачиваемый блок; раскрыт по умолчанию для аномалий (отменённые или внесённые задним числом расходы)
Если расход внесён задним числом (создан намного позже даты, которую вы указали), в шапке появляется предупреждающий бейдж — такая запись меняет P&L уже закрытого месяца.
Редактирование
Заголовок раздела «Редактирование»Кнопка «Изменить» открывает форму со всеми полями расхода. Часть полей — дата расхода, дата оплаты, способ оплаты — можно менять прямо на странице, не открывая форму. Категорию изменить нельзя — это ограничение сделано специально, чтобы не ломать исторические агрегаты по группам USALI. Если категория выбрана неверно, отмените расход и создайте новый.
Отмена расхода
Заголовок раздела «Отмена расхода»Кнопка «Отменить» открывает диалог с необязательным полем причины. Отменённые расходы не удаляются из базы, а переводятся в статус Отменён — их видно в списке с фильтром, и они исключены из всех финансовых расчётов (P&L, GOP, ночной аудит).
Ресепшн может отменять только свои расходы, созданные меньше 24 часов назад. Владелец, управляющий и бухгалтер могут отменить любой non-payroll расход (зарплатные — при наличии expenses.payroll.manage).
Повторяющиеся расходы
Заголовок раздела «Повторяющиеся расходы»Для регулярных платежей — аренда, коммуналка, подписки — создайте правило в Финансы → Расходы → Повторяющиеся. Система сама сгенерирует запись в статусе «Запланирован» по расписанию. Правила показаны таблицей: категория с группой и описанием, частота, сумма, поставщик и дата следующего расхода; кнопка «Остановить» в строке отключает правило.
Форма повторяющегося расхода запрашивает категорию, сумму, частоту (ежемесячно, ежеквартально, ежегодно), день начала и, при желании, день окончания. Признак «Капитальные затраты» подставляется из категории, и его можно переопределить — он перейдёт на каждую порождённую запись. Каждую ночь система проверяет правила и создаёт по ним записи: новый расход появляется в статусе «Запланирован» без даты оплаты и со способом оплаты «Банк» — бухгалтер видит появившуюся строку и отдельно подтверждает фактическую оплату (или владелец правит сумму, если счёт отличается от правила).
Повторяющиеся расходы по умолчанию не попадают в ночной аудит — администратор видит их в общем списке расходов, но они не спамят сменный отчёт.
Что видит ресепшн (оператор)
Заголовок раздела «Что видит ресепшн (оператор)»Оператор с правом expenses.manage_own:
- Видит все non-payroll расходы проекта (чтобы понимать общую картину по смене и не создавать дубли)
- Создаёт расходы от своего имени
- Не видит зарплатные категории вообще
- Может редактировать и отменять только свои расходы, и только если они созданы меньше 24 часов назад
- Не может спрятать свой расход от ночного аудита — его записи всегда попадают в сменный отчёт
- Не видит GOP, ADR, RevPAR, GOPPAR, прибыль до налогов — только кассу
Это сделано специально, чтобы:
- Ресепшн отвечал за свои операционные закупки (тапочки за смену, батарейки в замки) — и они попадали в ночной аудит
- Финансовые KPI видели только те, кому они нужны для управления — владелец и управляющий
Расходы в ночном аудите
Заголовок раздела «Расходы в ночном аудите»На странице Отчёты → Ночной аудит есть секция «Расходы за смену» — показываются non-payroll расходы, отмеченные для ночного аудита и возникшие в день аудита. Секция не видна пользователям без expenses.view.
Финансовые метрики
Заголовок раздела «Финансовые метрики»На основе расходов автоматически считаются ключевые гостиничные KPI:
| Метрика | Формула | Что показывает |
|---|---|---|
| Прибыль направлений | Выручка − расходы направлений (с зарплатами) | Эффективность самой гостиничной деятельности |
| GOP | Прибыль направлений − накладные | Валовая операционная прибыль |
| GOP Margin | GOP / Выручка × 100% | Маржа |
| GOPPAR | GOP / доступные ночи по USALI | Главная метрика эффективности собственника |
| EBITDA | GOP − плата управляющей компании − внеоперационные статьи | Прибыль до процентов, налогов и амортизации |
| Прибыль до налогов | EBITDA − проценты по кредитам | Последняя ступень операционного отчёта |
| Итог после капитальных | Прибыль до налогов − капитальные затраты | Что осталось с учётом ремонта и покупок надолго |
Эти метрики требуют права financial_kpi.view. Если у пользователя нет expenses.payroll.view, зарплата не учитывается в расчёте, ступени помечаются «без зарплат» — цифра завышена на сумму скрытого фонда оплаты труда.
GOP, прибыль до налогов и итог после капитальных отображаются на дашборде и в P&L отчёте. Подробнее о том, как считается выручка для этих метрик — см. Признание выручки.
Технические детали
Заголовок раздела «Технические детали»- Модели:
ExpenseCategory,Expense,RecurringExpense(см.apps/api/prisma/schema.prisma) - Имена категорий — мультиязычный JSON
{ ru, en, kz, de, … }; группа (group), направление (department), признакиisPayroll,isCapital,allocateByLabor— отдельные поля; у записи свойisCapital - У расхода есть опциональная привязка к зоне/корпусу и юниту (
zoneId,unitId), поле НДС (vatAmount), валюта и вложения-чеки (attachments) - Сид системных категорий:
apps/api/src/modules/expense-category/expenseCategorySeeds.ts - Ежедневный cron:
RecurringExpenseCronService(03:00 серверного времени) - Мягкое удаление через
isActive=false+status=CANCELLED - Все операции пишутся в
AuditLog
Ограничения текущей версии
Заголовок раздела «Ограничения текущей версии»- Только KZT. Валюта хранится в каждой записи, но полноценная мультивалютность в TODO как критичная отложенная задача
- PDF-экспорт ночного аудита не рендерит секцию расходов (только UI отображает)
- Доступ к бронированиям по-прежнему определяется проектной ролью, не permissions. Поэтому пресет «Бухгалтер» даёт финансовые права, но бронирования и данные гостей всё ещё видны через роль OPERATOR/VIEWER. Изоляция бухгалтера от гостевых данных — в TODO как «RBAC Phase 2»