18 KiB
REQ-001: Универсальный расчёт заработной платы
- Статус: утверждено владельцем 2026-09-23, реализуется
- Контур: управленческий учёт. Официальный расчёт (НДФЛ, страховые взносы, МРОТ, кадровые документы) — следующий этап, схема данных готовится под него заранее
- Проверочный пример: таблица владельца «Доходы и расходы 2026 год», листы «График» и «Расчет ЗП с доп. поваром»
1. Задача
Модуль считает переменную часть зарплаты для любой организации, а не для одного кафе. Главный сценарий — переход с Excel: основная масса малого бизнеса ведёт расчёт в таблицах со своими формулами, и продукт обязан принять эти формулы, а не навязать свои.
Отсюда три обязательных свойства:
- Формулу задаёт клиент. Правило оплаты — не код, а настройка: собирается в визуальном конструкторе из блоков, хранится как структура, показывается человеку словами.
- Переход без потерь. Историю из таблицы можно загрузить, сверить с расчётом модуля и убедиться, что суммы совпадают, прежде чем отказываться от Excel.
- Формулы меняются со временем. Изменение ставки или правила создаёт новую версию; прошлые ведомости пересчёту не подлежат и воспроизводятся в точности.
Остальное — учёт смен (факт из терминала плюс подтверждение управляющего), ведомость, выплаты, остатки, мониторинг и кабинет сотрудника в мобильном приложении.
2. Словарь
| Термин | Значение |
|---|---|
Подразделение (OrganizationUnit) |
Точка, цех, магазин, участок. К нему привязаны показатели дня и смены |
| Показатель дня | Числовая величина подразделения за день: выручка, число чеков, объём производства. Состав определяет клиент |
| Позиция | Оплачиваемая строка дня сотрудника: заказ, доставка, услуга, партия. Имеет атрибуты: сумма, дальность, тип клиента |
Смена (WorkSession) |
Факт работы сотрудника в подразделении за операционный день |
Правило оплаты (PayRule) |
Дерево блоков, по которому считается начисление. Версионируется |
| Параметр сотрудника | Значение, которое правило подставляет для конкретного человека: ставка, процент, надбавка, гарантия, план |
| Фонд дня | Сумма, которую участники смены делят между собой. Задаётся правилом подразделения |
Ведомость (PayrollRun) |
Расчёт за период со строками по сотруднику и дню |
| Остаток | Начислено минус выплачено нарастающим итогом. Плюс — долг перед сотрудником |
3. Конструктор правил
Правило собирается из блоков. Набор покрывает схемы, которые встречаются на практике:
| Блок | Назначение |
|---|---|
| Показатель, параметр, часы, число участников | Источники значений |
| Сложение, вычитание, умножение, деление | Арифметика |
| Процент от значения | Процент от выручки, от продаж, от суммы заказов |
| Доля из фонда | Командная схема: фонд делится между участниками смены |
| Сумма и количество позиций с фильтром | Сдельщина: «сумма заказов дешевле 5000», «количество доставок» |
| За каждую позицию | Оплата за единицу, в том числе по шкале от атрибута позиции |
| Шкала по ступеням | Ставка выбирается по достигнутому уровню и применяется ко всей сумме |
| Прогрессивная шкала | Каждая ступень применяется к своему слою: 3% до 100 тыс, 5% дальше |
| Условие | Премия при выполнении условий: выручка выше порога и на смене не меньше трёх человек |
| Наибольшее, наименьшее | Гарантированный минимум и потолок выплаты |
| Округление | Шаг округления строки начисления |
| Ночные, сверхурочные, праздничные часы | Доплаты, обязательные по ТК РФ: 20% за ночные, 1,5 и 2 за переработку, двойная за праздник |
| Окно агрегации | Показатель или позиции берутся за смену, день, неделю, декаду или месяц: фонд считается на дне, а прогрессивная шкала обычно на месяце |
Полный разбор отраслевых схем — в справочнике схем; ограничения, которые нельзя нарушать, — в правовых ограничениях.
Примеры правил, которые из этого собираются:
Повар в команде: доля из фонда + ставка × часы + надбавка
Администратор: наибольшее(процент от выручки + ставка × часы; гарантия смены)
Продавец: оплата смены + прогрессивный процент от личных продаж
Курьер: ставка × часы
+ процент от суммы заказов дешевле 5000 ₽
+ за каждый заказ дороже 5000 ₽: по шкале дальности (250 или 500 ₽)
Мастер услуг: наибольшее(50% своих клиентов + 35% клиентов салона; гарантия смены)
Премия за выручку: если выручка ≥ порога и участников ≥ 3, добавить премию
Каждое правило движок умеет пересказать словами — этот же текст показывается сотруднику в расшифровке суммы.
3.1 Фонд и неполная смена
Фонд подразделения за день задаётся отдельным правилом (например, 11% от выручки). Он распределяется по времени присутствия: в каждый отрезок смены фонд делится между теми, кто в этот момент работал. Если участник ушёл раньше, он получает долю только за свои часы, а остальные забирают оставшуюся часть. При равных сменах это в точности «фонд ÷ число участников». Вес участника настраивается: полный участник, половина (например, дополнительный сотрудник) или без участия.
3.2 Округление и хранение
Каждая строка начисления округляется с настраиваемым шагом, по умолчанию до рубля. Остаток от округления остаётся в фонде и не приписывается сотруднику. Суммы хранятся в копейках (BIGINT), валюта — ISO 4217.
3.3 Версии правил
Правило и его параметры не редактируются на месте: правка создаёт следующую версию с датой начала действия. Ведомость хранит ссылку на версию и полный след расчёта (входные показатели, фонд, доля, параметры, текст правила), поэтому любую сумму можно объяснить и воспроизвести спустя год.
4. Периоды, ведомость, выплаты
- Период настраивается: неделя (в том числе начиная с четверга, как в таблице владельца), две недели, месяц.
- Статусы ведомости:
draft → calculated → approved → paid. Послеapprovedстроки не пересчитываются; исправление — отдельной корректировкой. - Выплаты вводятся фактической суммой; разница с начисленным автоматически становится остатком и переносится дальше.
- Реестр начислений и выплат — только на добавление, на уровне прав базы данных.
5. Учёт часов
- Источник — события терминала (
check_in/check_out) с идемпотентным ключом. - Смена попадает в расчёт только после подтверждения управляющим.
- Корректировка часов не меняет исходные события: правка хранится отдельно с причиной.
- Незакрытая смена помечается аномалией после нормы плюс два часа.
6. Переход с Excel
- Загрузка таблицы. Клиент загружает свой файл; мастер определяет листы и колонки: сотрудник, дата, подразделение, часы, сумма, показатели дня.
- Подбор формулы. Система предлагает пресет отрасли и подбирает параметры сотрудников по истории, после чего показывает, на скольких днях расчёт совпал с таблицей и где разошёлся.
- Разбор расхождений. По каждому расхождению видно, из чего сложилась сумма модуля и какая сумма стоит в таблице. Обычно расхождения — это ручные правки в Excel или изменение ставки, не отражённое в формуле.
- Параллельный период. Клиент неделю ведёт расчёт и в таблице, и в модуле, сверяет итоги и после совпадения отключает таблицу.
Проверка метода на реальной таблице владельца: правило «фонд 11% ÷ участники + 100 ₽/ч + личная надбавка» воспроизводит суммы поваров точно; администраторы считаются как «процент от выручки + почасовая, но не ниже 3000 ₽». Расхождения объясняются изменением ставок в течение года и ручными правками — что и подтверждает необходимость версий и режима сверки.
7. Мониторинг
Ежедневный экран по подразделению: показатели дня, кто на смене, фонд, начислено, доля фонда оплаты в выручке, неподтверждённые и незакрытые смены, дни без введённых показателей. Недельный и месячный итог — по ведомости.
8. Доступ
| Роль | Права |
|---|---|
| Владелец | всё, включая утверждение ведомостей, правил и мониторинг по всем подразделениям |
| Управляющий | показатели, подтверждение смен, расчёт и выплаты по своему подразделению |
| Сотрудник | только свои смены, начисления, выплаты, остаток и расшифровка сумм |
Сотрудник получает доступ по record-level правам платформы (scope: own). Данные других сотрудников недоступны ни в API, ни в приложении.
9. Границы этапа
Входит: подразделения, сотрудники, показатели и позиции, конструктор правил с версиями, пресеты отраслей, приём отметок терминала, смены и подтверждение, расчёт, ведомость, выплаты, остатки, импорт из Excel и сверка, API для мобильного приложения, мониторинг.
Не входит: НДФЛ и страховые взносы, кадровые документы, отпуска и больничные, планирование графиков, выгрузка в 1С, официальный табель Т-13, автоматическая интеграция с кассой (предусмотрена точка расширения — показатель с источником «модуль»).
10. Вопросы, которые остаются к владельцу по его пресету
- Дополнительный сотрудник и стажёр считаются в делителе фонда как половина участника? В таблице встречаются оба варианта.
- Гарантия администратора (3000 ₽) — за смену любой длительности или пропорционально часам?
- Премия за выручку: при каком пороге и какая сумма, и зависит ли она от числа участников смены?
- Перенос остатка: бессрочно или закрывается в конце месяца?
- Выплаты: только наличные или бывают переводы, и нужно ли фиксировать, кто выдал деньги?