Формулы зарплаты
CRUD формул расчёта зарплаты для ролей. Каждая формула определяет как вычисляется сумма в платёжной ведомости.
Файл
erp-admin/web/src/pages/payroll/SalaryFormulasPage.tsx
Роут
/payroll/formulas — видимость по permission payroll.read (редактирование — payroll.edit).
Доступ
| Роль | Доступ |
|---|---|
| Franchise | CRUD всех формул франшизы |
| Franchisee | Read-only своих ТТ |
| Manager | 403 |
| Cashier | 403 |
Layout
Таблица формул:
| Колонка | Содержимое |
|---|---|
| Название | name (напр. «Бариста — ставка») |
| Тип | fixed / hourly / percent / combined |
| Параметры | Краткая сводка (например «500 ₽/час + 3% от выручки») |
| Применяется к | Роли (список) |
| Привязка к ТТ | Все ТТ / выбранные ТТ |
| Действия | Редактировать / Удалить |
Фильтры:
- ТТ (мультивыбор по scope)
- Поиск по названию
Кнопки шапки:
- «+ Добавить формулу»
Модалки
Create / Edit Formula
Форма:
- Название (required)
- Тип (radio): Фиксированная / Почасовая / Процент от выручки / Комбинированная
- Поля зависят от типа:
- Fixed:
base_amount(decimal) - Hourly:
hourly_rate - Percent:
percent_rate(% от выручки смены) - Combined: любая комбинация из трёх выше
- Fixed:
- Роли, к которым применяется (multiselect)
- Привязка к ТТ (All / выбранные)
Delete Formula
Модалка подтверждения. Блокируется если формула используется в текущих (unposted) ведомостях.
Источник данных
User Service: GET/POST/PATCH/DELETE /api/v1/salary-formulas
Сущности: salary_formulas, formula_applies_to_roles, formula_applies_to_stores.
Связь с Платёжными ведомостями
При расчёте ведомости (POST /api/v1/payroll/calculate) формулы применяются по правилу:
- Выбирается активная формула, привязанная к роли сотрудника в его ТТ.
- Если несколько формул подходят — берётся наиболее специфичная (привязанная к конкретной ТТ, а не «All»).
- Snapshot формулы сохраняется в
payroll_records.formula_snapshot(JSONB) для историчности.
Что НЕ реализовано
- Версионирование формул (при изменении формула пересохраняется целиком, старые ведомости используют snapshot).
- Тест-расчёт для конкретного сотрудника.
- Импорт формул из Excel.