Начисления и смены: журнал заработка, табель смен и отпускной баланс
Контур начислений AIERP — это управленческий учёт «сколько заработал каждый сотрудник», а не бухгалтерский расчёт зарплаты с НДФЛ, страховыми и банковским реестром. Журнал начислений ведётся построчно: дата, сумма (может быть отрицательной для удержаний), расшифровка свободным текстом и источник — за какой заказ или какую позицию начислено. Каждая запись знает причину. Табель смен фиксирует открытие и закрытие смены по логину сотрудника, секунды активности и кассу: сколько внёс сотрудник на открытии и закрытии и сколько фактически насчитала система из движений кассы. Расхождение видно сразу. Отпускной баланс ведётся по годам — положено, отгуляно, запланировано, перенесено с прошлого года, остаток. Доступен журнал начислений отпускных дней. Сервис начислений даёт 7 аналитических операций (сводка, ежедневная динамика, динамика выполнения плана, помесячная за период, наценка по заказам, эффективность смены, поиск конкретного заказа) и безопасный двухшаговый пересчёт: сначала предварительный просмотр изменений, затем фактическое применение. У карточки сотрудника — настройки видимости: сколько он сам может видеть и за какой период, лимит, выше которого требуется согласование.
Что получает бизнес от модуля
Журнал начислений с указанием источника
Каждое начисление — отдельная строка: сотрудник, дата, источник (за какой заказ, за какую позицию, за конкретную единицу товара или за правило бонуса), расшифровка свободным текстом, сумма (может быть отрицательной для удержаний и возвратов). Каждое начисление знает причину — заказ №4218, конкретный товар, премия по приказу. История сохраняется при удалении.
Табель смен
Смена сотрудника: время открытия и закрытия, секунды активности и без активности (по «пингам» от рабочего места), сумма наличных в кассе на открытии, сумма на закрытии (вводит сотрудник) и автоматическая сумма (рассчитывает система из движений кассы). Открытие и закрытие смены — отдельными операциями. Доступен кассовый отчёт за смену и список последних закрытых смен.
Отпускной баланс по годам
На каждый год — четыре числа: положено за год, использовано, запланировано (отпуск назначен, но ещё не начался), перенесено с прошлого года. Остаток рассчитывается автоматически: положено + перенос − использовано − запланировано. Параллельно ведётся журнал начислений отпускных дней с причиной и автором — полный аудит.
Безопасный предварительный просмотр пересчёта
Предварительный пересчёт идёт в памяти, данные не трогаются. На выходе — отчёт: какие записи изменятся (старая сумма и новая), какие останутся как есть, какие исключены как системные. Бухгалтер или менеджер видит результат до фактического применения и спокойно обсуждает его с командой.
Фактический пересчёт и сброс
Фактический пересчёт применяет ранее просмотренные изменения к данным: автоматические записи за период удаляются и создаются заново. Ручные записи (премии по приказам, разовые удержания) защищены — не трогаются. Сброс — удаляет за период только автоматические записи. Двухшаговая модель «посмотрел — применил» защищает от случайных ошибок.
7 аналитических операций
Сводка за период (с опциональным сравнением с прошлым периодом и планом), ежедневная динамика, динамика выполнения плана, помесячная динамика за N месяцев, разбивка заказов по диапазонам наценки, эффективность по сменам (выручка, чеки, средний чек, простои), быстрый поиск конкретного заказа в журнале начислений.
Ручные начисления и удержания
Разовая запись по заказу — с указанием сотрудника, заказа, опционально конкретной позиции, даты, суммы (может быть отрицательной для удержания), причины. Расшифровка собирается автоматически: «Ручное начисление по заказу №X / Sony WH-1000XM5: компенсация ошибки кассира». Такие записи отделены от автоматических — не пересоздаются при пересчёте.
Видимость своей зарплаты сотруднику
У карточки сотрудника три настройки: лимит, выше которого нужно согласование; может ли сам видеть свои начисления; за какой период доступна история (например, последние 30 дней). По умолчанию рядовой продавец не видит свою историю — нужно явное разрешение от руководителя. Директор магазина видит начисления по своей точке.
Связка с бонусами за действия в заказе
Для каждого заказа сервис бонусов считает причитающиеся суммы участникам (продавец, кассир, кладовщик) по настроенным правилам. При пересчёте система собирает заказы за период (включая те, по которым ещё нет начислений), исключает системные операции (например, пополнение склада) и считает свежие суммы.
Что входит в Начисления
- 01
Журнал начислений: 6 полей + 3 индекса
Сотрудник, дата, тип и идентификатор источника, расшифровка, сумма — с поддержкой мягкого удаления и сохранением записей по уволенным сотрудникам. Индексы по сотруднику, по дате и составной по источнику — поиск начислений по конкретному заказу за миллисекунды.
- 02
Полиморфный источник у каждой записи
Источником начисления может быть заказ, конкретная позиция заказа, правило бонусной акции или любая другая сущность системы. При автоматическом расчёте бонусов система ссылается на заказ. У ручных записей источник не указывается — это «не привязано к заказу, начислено руками».
- 03
Открытие и закрытие смены
Сотрудник открывает смену — фиксируется момент начала. На закрытии вводит фактический остаток наличных, система рассчитывает кассу по движениям за смену. Создать любое финансовое движение без открытой смены нельзя — система блокирует.
- 04
Поля смены
Дата и время открытия и закрытия, секунды активности по пингам (онлайн) и без активности (офлайн), наличные в кассе на открытие (вводит сотрудник), на закрытие (вводит сотрудник) и рассчитанные системой по движениям. Расхождение факта и расчёта — недостача или излишек.
- 05
Кассовый отчёт за смену
Поступления, расходы, инкассации, итоговая касса на закрытие. Сравнение «что ввёл кассир» с «что посчитала система» — недостача или излишек видны сразу. Идеально для разбора смены сразу после закрытия, а не через неделю.
- 06
Задачи на смену
Список задач, привязанных к рабочим дням сотрудника. Задачи выдаются на смену из модуля «Задачи и автоматизация», выполнение влияет на награды сотрудника. Видно прогресс смены: 5 задач из 8 выполнены, 2 просрочены.
- 07
Отпускной баланс
По каждому сотруднику и году — сколько положено за год (обычно 28 плюс дополнительные), сколько отгуляно, сколько запланировано (отпуск назначен, но ещё не начался), сколько перенесено с прошлого года. Остаток рассчитывается автоматически: положено + перенос − отгуляно − запланировано.
- 08
Журнал начисления отпускных дней
По каждому сотруднику и году хранится: количество дней (может быть отрицательным для коррекции), причина (свободный текст), кто начислил. «Дополнительный отпуск за вредность +3», «компенсация +2», «коррекция кадровика −1». Полный аудит.
- 09
Ручные начисления
Сотрудник, заказ, опционально позиция заказа, дата, сумма, причина. Система проверяет, что заказ существует и позиция принадлежит этому заказу. Автоматически собирает расшифровку «Ручное начисление по заказу №4218 / iPhone 15: компенсация ошибки кассира». Отделяется от автоматических.
- 10
Сводка по сотруднику с опц. сравнением
Параметры: сотрудник, период с/по, включать ли прибыль (для руководителей), сравнивать ли с прошлым периодом. За период считается общая сумма, число заказов, прибыль по заказам. При сравнении возвращается аналогичная картина за прошлый период такой же длины.
- 11
Ежедневная динамика
Аналитика начислений по дням за выбранный период. Возвращает точки «дата — сумма — число заказов» для линейного графика заработка сотрудника. Видны провалы (выходные? больничный?) и пиковые дни.
- 12
Тренд по плану и помесячный тренд
Сравнение факта с планом сотрудника: сколько по плану, сколько по факту, процент выполнения, прогноз. Помесячная динамика за N месяцев назад (по умолчанию 6) с агрегатами по сумме, числу заказов и опционально по прибыли.
- 13
Аналитика наценки заказов
Разбивка заказов сотрудника по диапазонам наценки (0-10%, 10-20%, 20-30%, 30%+), доля высокомаржинальных продаж. Помогает оценить «продаёт продавец дорого или со скидкой» — это влияет на бонус продавца через правила мотивации.
- 14
Эффективность по сменам
Для каждой смены сотрудника считает: выручка, количество чеков, средний чек, конверсия (если есть данные посетителей), время до первого чека, простой между чеками. Помогает находить «медленных» продавцов и проблемные смены.
- 15
Предпросмотр пересчёта
Главная операция. Собирает заказы сотрудника за период из существующих начислений и из всех заказов с его участием. Исключает системные заказы. Для каждого закрытого, отгруженного или в пути заказа пересчитывает бонусы, фильтрует по сотруднику. Возвращает разбивку «изменилось / не изменилось / системные исключены» и список заказов с текущей и новой суммой.
- 16
Применение пересчёта
Фактическое применение результата предпросмотра. Удаляет автоматические начисления за период, создаёт новые из расчёта бонусов. Ручные записи не трогаются. Сбрасывает кэш сводок и аналитики.
- 17
Очистка автоматических начислений
Удалить ВСЕ автоматические записи сотрудника за период. Ручные сохраняются. Используется перед регенерацией или при выводе сотрудника из системы. Возвращает количество удалённых.
- 18
Поиск заказов с участием
Внутренняя операция: ищет заказы с участием сотрудника (по позициям, по исполнителю заявки), даже если на момент проверки начислений по ним нет. Позволяет пересчёту находить «забытые» начисления — баг или ручная правка пропустили запись, повторный пересчёт её подберёт.
- 19
Лимит ЗП для согласования
Порог ЗП у сотрудника, выше которого требуется согласование (используется на сводке как порог подсветки). У руководителей можно поставить большую цифру, у линейных — обычную. Поле уже в карточке сотрудника, готово для построения правил согласования крупных премий.
- 20
Видимость собственной ЗП
Двухуровневый контроль доступа сотрудника к собственной ЗП. Флаг «может ли вообще видеть» и параметр «за какой период (в днях) доступна». По умолчанию выключено: рядовой продавец не видит сводку через свой кабинет, директор магазина видит по своей точке.
- 21
Кэширование сводок
Тяжёлые сводки и аналитика кэшируются по тегу. При любых изменениях (создание, обновление, удаление, очистка, пересчёт) кэш сбрасывается. Если хранилище кэша не поддерживает теги — сброс делается целиком.
Как это выглядит в системе
Частые вопросы
Это полноценный расчёт зарплаты с НДФЛ и взносами?
Нет. Это управленческий учёт «сколько заработал каждый сотрудник» с понятным журналом начислений. В коде нет расчёта НДФЛ, страховых взносов, удержаний по исполнительным листам, алиментов, формирования банковского реестра. Бухгалтерский расчёт зарплаты и выгрузка в банк остаются в 1С:ЗУП — AIERP идёт параллельно и даёт оперативный учёт начислений. Прямые интеграции с банками и 1С:ЗУП реализуемы как новый функционал поверх существующей модели.
Какие сущности в основе?
Журнал начислений «кто и за что получил» — сотрудник, дата, источник (заказ, позиция, правило акции — любой объект системы), расшифровка, сумма. Табель смен. Отпускной баланс и журнал начислений отпускных дней. Карточка сотрудника с лимитом ЗП для согласования и флагами видимости.
Откуда берутся начисления?
Главный источник — расчёт бонусов по правилам действий с заказами. При закрытии заказа система возвращает суммы для каждого сотрудника-участника (продавец, кассир, кладовщик). Эти суммы пишутся в журнал с привязкой к заказу. Параллельно есть ручные начисления и удержания по приказам.
Что такое предпросмотр пересчёта?
Пересчёт «начерно», без записи в базу. Система собирает заказы сотрудника за период (включая те, по которым начислений ещё нет), исключает системные, пересчитывает бонусы и фильтрует по сотруднику. Возвращает разбивку «изменилось / не изменилось / системные исключены» плюс список заказов с текущей и новой суммой.
Что делает применение пересчёта?
Применяет результат предпросмотра к базе. Удаляет существующие автоматические начисления за период, создаёт новые на основе пересчёта. Ручные записи не трогаются. Сбрасывает кэш сводок и аналитики. Безопасно: пересчёт прозрачен (сначала предпросмотр, потом применение).
Что делает очистка?
Удаляет все автоматические записи сотрудника за период. Ручные сохраняются. Используется перед регенерацией графика или при выводе сотрудника из системы. Возвращает количество удалённых.
Что в полиморфном источнике?
Тип источника указывает класс объекта (заказ, позиция заказа, правило бонусной акции), идентификатор — его номер. Сквозная связь: бонус, начисленный за продажу, ссылается на конкретный заказ; ручное начисление — источник пустой. История прозрачна, можно дойти от любой суммы до причины.
Как открыть и закрыть смену?
Сотрудник открывает смену — фиксируется момент начала, вводит наличные в кассе на момент открытия. На закрытии вводит фактический остаток наличных, система рассчитывает кассу по движениям за смену. Расхождение факта и расчёта — недостача или излишек.
Что показывает кассовый отчёт за смену?
Поступления, расходы, инкассации, итоговая касса на закрытие. Сравнивает «что ввёл кассир» с «что посчитала система». Расхождение видно сразу — недостача или излишек.
Что такое онлайн и офлайн у смены?
Онлайн (в секундах) — время активности сотрудника по пингам приложения (например, нажатия кнопок). Офлайн — без активности (но смена открыта). Их сумма не превышает длительности смены. Не «отметки времени из пропусков», а реальная активность в системе. Помогает оценить, действительно ли сотрудник работал или просто открыл смену.
Как устроен отпускной баланс?
По каждому сотруднику и году хранится: положено за год (обычно 28 плюс сверх по компании), отгуляно, запланировано на будущее (отпуск назначен, но не начался), перенесено с прошлого года. Остаток считается автоматически: положено + перенос − отгуляно − запланировано.
Откуда берутся отпускные дни?
Из журнала начислений отпускных. По каждому сотруднику и году хранится: количество дней (может быть отрицательным для коррекции), причина (текст), кто начислил. Например, «+3 дня за вредность», «+2 компенсация», «−1 коррекция по запросу». Все начисления видны в истории.
Где смотреть свои начисления сотруднику?
В личном кабинете, если у сотрудника включён доступ к собственной ЗП. Период ограничивается отдельным параметром (например, 30 дней — только за последний месяц). По умолчанию выключено: продавец не видит свою историю глубже разрешённого. Руководитель магазина с включённым доступом видит начисления своей точки.
Что такое лимит ЗП для согласования?
У сотрудника есть порог ЗП, выше которого требуется согласование. Пока используется на сводке как порог для подсветки в списках сотрудников. Поле уже в карточке, готово для построения правил согласования крупных премий и доплат.
Какие 7 аналитических операций?
Общая сводка с опц. сравнением прошлого периода и плана; ежедневная динамика; сравнение с планом сотрудника; помесячная динамика за N месяцев (опц. с прибылью); аналитика наценки заказов; эффективность по сменам; быстрый поиск заказов с начислениями.
Что показывает аналитика наценки заказов?
Аналитика наценки заказов сотрудника за период. Разбивка по диапазонам: 0-10%, 10-20%, 20-30%, 30%+. Помогает оценить, продаёт ли сотрудник с высокой маржой или со скидками. Это критично, потому что бонус продавца через правила мотивации зависит от диапазона наценки. Если много продаж с низкой наценкой — бонусов меньше.
Что в эффективности по сменам?
Эффективность по сменам сотрудника за период. Для каждой смены: выручка, количество чеков, средний чек, время до первого чека («как быстро раскачивался»), простои между чеками. Помогает найти проблемные смены — много простоев, низкая конверсия, поздно «втянулся».
Можно ли начислить разово?
Да. Указывают сотрудника, заказ (обязательно — привязка к заказу), опционально позицию заказа, дату, сумму (может быть отрицательной для удержания), причину (текст). Автоматически собирается расшифровка «Ручное начисление по заказу №X / Sony WH-1000XM5: компенсация ошибки кассира». Отделяется от автоматических.
Как сделать удержание?
Через ручное начисление с отрицательной суммой. Например, −500 ₽, причина «опоздание на 30 мин, приказ #18». Запись в журнале с минусом, отображается красным. Сумма к выплате уменьшается. Это управленческое удержание, не НДФЛ или соцвзнос — те остаются в 1С:ЗУП.
Что в аналитике наценки и поиске заказов?
Аналитика наценки — разбивка заказов сотрудника по диапазонам. Поиск заказов — быстрый поиск конкретного заказа в списке начислений с детализацией: сколько по нему заработал сотрудник, какие позиции были, какая наценка. Удобно при разборе спорных начислений «откуда у меня эти 1248 ₽».
Возвраты товаров корректно отражаются?
Да. При возврате расчёт бонусов возвращает отрицательные суммы для соответствующих участников. После пересчёта в журнале появляется запись с минусом — продавец, получивший +1248 ₽ за продажу, при возврате получает запись −480 ₽ (пропорционально возвращённой части). Журнал ведётся полно — никаких «забытых» удержаний.
А выгрузка в банк и в 1С:ЗУП?
В текущей реализации нет прямых интеграций с банками для зарплатного реестра и нет автоматической выгрузки в 1С:ЗУП. Журнал начислений можно экспортировать через готовую выгрузку отчётов, формат CSV/XLSX подключается под формат банка. Прямой коннектор к Сберу/Тинькоффу или к 1С:ЗУП — отдельная разработка по запросу, реализуема как новый функционал поверх существующей модели за 2-4 недели.
Что с НДФЛ и страховыми?
Расчёта НДФЛ и страховых нет — это бухгалтерский функционал, остающийся в 1С:ЗУП. Журнал показывает «брутто» — начислено сотруднику без вычитания налогов. Если нужна доплата «удержание налога» — её делают через ручное начисление с отрицательной суммой, но это управленческая запись, не официальная.
Как с расчётным листком?
Отдельного отчёта «расчётный листок» с разбивкой по статьям, НДФЛ и страховым нет. Есть журнал начислений, который выгружается в Excel. Сотрудник в личном кабинете видит свои начисления (если ему включён доступ). Формальные расчётные листки — в 1С:ЗУП.
Какие защиты от ошибок?
Полиморфный источник даёт сквозной аудит. Мягкое удаление журнала — удаление обратимо. Предпросмотр пересчёта показывает разбивку. Перед любым кассовым движением система проверяет наличие открытой смены. Очистка трогает только автоматические записи, ручные защищены. Лимит ЗП — задел под согласование крупных начислений.
Что меняется на реальной сети
- Было
- Бухгалтер раз в месяц пересчитывал бонусы продавцов вручную в Excel: брал отчёт по заказам, копировал в табличку, ручками умножал на проценты. На 320 сотрудников ушло 3–4 дня, ошибки находили постфактум, продавцы оспаривали суммы.
- Сделали
- Журнал начислений с полиморфным источником автоматически собирает начисления при закрытии каждого заказа через расчёт бонусов по правилам действий с заказом. Предпросмотр пересчёта за период показывает разбивку: какие 14 заказов изменили суммы (из-за корректировок цены), какие 218 не изменились. Бухгалтер видит результат и подтверждает применение.
- Стало
- Расчёт бонусов за месяц — 15 минут вместо 4 дней. Каждое начисление через полиморфный источник указывает на конкретный заказ. Сотрудник в кабинете видит — продал товар X, получил бонус Y. Споров нет — журнал прозрачный.
- Было
- Кассиры закрывали смену по памяти — вводили остаток наличных «на глаз», не сверяясь с реальной кассой. К утру следующего дня находились расхождения 2–5 тыс. ₽ на смену. Виноватого определить было нельзя — накладывалось 2–3 смены подряд.
- Сделали
- Расчёт кассы на закрытие выполняется системой по движениям смены. Кассовый отчёт сравнивает «что ввёл кассир» с «что посчитала система». Расхождение видно сразу после закрытия. Проверка открытой смены не даёт создавать кассовое движение, если у кассира нет открытой смены.
- Стало
- Расхождения ловятся в момент закрытия, а не наутро. Кассир видит цифру и не уходит с расхождением. Если ошибся — пересчёт за 5 минут. Накопления ошибок не происходит.
- Было
- HR вёл отпускные дни в общей Excel-таблице. Сложно было видеть, у кого сколько осталось, кто переносит дни на следующий год, кто превышает. Сотрудники запрашивали «сколько у меня осталось» через HR — почта, звонки, путаница.
- Сделали
- Отпускной баланс по каждому сотруднику и году с 4 полями: положено, отгуляно, запланировано, перенесено. Остаток считается автоматически: положено + перенос − отгуляно − запланировано. Журнал всех начислений с причиной и автором. Сотрудник видит свой баланс в кабинете.
- Стало
- Кадровик больше не отвечает на «сколько у меня осталось» — сотрудники видят сами. Перенос с прошлого года корректно работает при смене года. Запланированные дни отражают уже одобренный, но не отгулянный отпуск — не давая «дважды записать одни и те же дни».
- Было
- При тестовой смене мотивационной формулы бухгалтер боялся «потерять» правильные суммы. Если пересчитать — а вдруг новые цифры не то, что нужно? Возврат был сложным, требовал восстановления из Excel-бэкапа.
- Сделали
- Предпросмотр пересчёта выполняется в памяти. База не трогается. Возвращается разбивка: изменилось (14 заказов), не изменилось (218 без изменения), системные исключены (5), список с текущей и новой суммой. Бухгалтер видит результат, обсуждает с менеджером по KPI, и только тогда применяет.
- Стало
- Стало безопасно экспериментировать с правилами бонусов по действиям с заказом. Можно посмотреть, как изменится фонд мотивации после изменения формулы, и решать. Без страха «сломал». Доверие к системе у бухгалтерии и кадров выросло.
- Было
- Возвраты товаров не учитывались в начислениях продавцам. Продавец продал на 10k → бонус 500 ₽; клиент вернул товар → 500 ₽ оставались у продавца. Конец месяца — бухгалтер вручную проверял возвраты и корректировал, упуская мелкие.
- Сделали
- Расчёт бонусов по правилам действий с заказами корректно возвращает отрицательные суммы при возвратах. Пересчёт автоматически создаёт запись в журнале с отрицательной суммой, привязанную к заказу через полиморфный источник. В журнале сотрудника видны строки «+500 за продажу» и «−500 за возврат». Сумма к выплате корректная.
- Стало
- Возвраты автоматически сторнируют бонусы. Корректный полный учёт без «оставленных продавцу денег» при возврате. Сотрудник понимает связь — продал и вернул = 0 бонуса. Мотивация фокусируется на стабильных продажах.
- Было
- Когда сотрудника увольняли, оставались автоматические начисления за последние 30 дней — за периоды, которые мы уже не должны платить. Бухгалтер пытался очистить руками каждую запись, тратилось 30+ минут на одного сотрудника.
- Сделали
- Очистка по сотруднику и периоду за один вызов удаляет все автоматические записи. Ручные начисления — премии по приказам — сохраняются. Бухгалтер вызывает очистку, потом руками решает, что делать с ручными.
- Стало
- Очистка автоматических начислений за период — 5 секунд. Ручные сохраняются для разбора. Сотрудник, выведенный из системы, не «висит» с лишними записями. Финансовый итог честный.
Как модуль помогает розничной сети
Управленческий контур начислений — параллельно бухгалтерскому
Контур начислений AIERP — это не подмена бухгалтерского расчёта зарплаты с НДФЛ, страховыми взносами и банковским реестром. Эти задачи остаются в 1С:ЗУП и других специализированных системах. AIERP даёт оперативный управленческий учёт «сколько заработал каждый сотрудник» через журнал начислений с полиморфной связью к источнику, табель смен с автоматическим расчётом кассы на закрытие, отпускной баланс с 4 полями и аналитику начислений по 7 операциям. Это инструмент для руководителя сети и продавца, который хочет знать в моменте: «сколько я заработал сегодня и почему именно столько».
Журнал начислений с 6 полями и 3 индексами: сотрудник, дата, тип и идентификатор источника (заказ, позиция заказа, правило бонусной акции — любой объект системы), расшифровка (свободный текст — «Бонус по заказу №4218 / iPhone 15»), сумма (может быть отрицательной для удержаний). Мягкое удаление сохраняет историю при ошибках. Каждое начисление знает источник, журнал-style. Источник может быть пустым (для ручных записей).
Табель смен с автозакрытием кассы
Табель фиксирует каждую рабочую смену сотрудника. Поля: сотрудник, момент открытия, момент закрытия, секунды реальной активности по пингам приложения (онлайн), секунды без активности при открытой смене (офлайн). Кассовые поля: наличные на момент открытия (вводит сотрудник), на момент закрытия (вводит сотрудник), рассчитано системой из кассовых движений за смену. Расхождение факта и расчёта — недостача или излишек, видна сразу.
Сотрудник открывает смену — фиксируется момент начала и заполняются наличные на открытие. На закрытии вводит фактический остаток наличных, система рассчитывает кассу по движениям за смену. Кассовый отчёт за смену показывает поступления, расходы, инкассации (см. модуль «Финансы»), итоговую кассу. Параллельно работает проверка открытой смены, которая блокирует создание любого кассового движения, если у пользователя нет открытой смены — закрывает классический баг «провели приход в кассу до открытия смены».
Отпускной баланс и журнал начислений
Отпускной баланс хранится по уникальной паре сотрудник × год. Поля: положено за год (обычно 28 законных + сверх по политике компании), отгуляно, запланировано на будущее (отпуск назначен, но ещё не начался), перенесено с прошлого года (если законом или политикой разрешено). Остаток считается автоматически: положено + перенос − отгуляно − запланировано — это доступный остаток отпускных дней на сегодня.
Журнал начислений отпускных дней: сотрудник, год, количество дней (может быть отрицательным для коррекции ошибок), причина (свободный текст: «дополнительный отпуск за вредность 3 дня», «компенсация за задержку проекта», «коррекция по ошибке кадровика −2 дня»), кто начислил. Мягкое удаление сохраняет историю. На сводке в кабинете сотрудника видны и текущий баланс, и история всех изменений — каждое начисление с причиной и автором.
Источник начислений — бонусы по действиям с заказом и ручные
Главный поставщик автоматических начислений — расчёт бонусов по правилам действий с заказами. У каждого заказа есть набор правил «за такое действие в такой роли начислить столько». При закрытии заказа система собирает всех участников (продавец, кассир, кладовщик) и считает причитающиеся бонусы. Пересчёт применяет эти данные, создавая запись в журнале с привязкой к заказу. Каждый бонус привязан к конкретному заказу — спор о суммах разрешается за минуту через полиморфный источник.
Параллельно есть ручные разовые начисления и удержания. Указывают сотрудника, заказ (обязательно — заказ привязки), опционально позицию заказа, дату, сумму, причину. Автоматически собирается расшифровка «Ручное начисление по заказу №4218 / iPhone 15: компенсация ошибки кассира». Источник у таких записей не указан — это отделяет их от автоматических. Используется для премий по приказам, удержаний за опоздание (с отрицательной суммой), компенсаций. Ручные записи не трогаются ни при очистке, ни при пересчёте.
Безопасный пересчёт начерно и применение
Главная защита от ошибок — двухшаговый пересчёт: сначала «начерно», потом применение. Предпросмотр выполняет всё в памяти, база не трогается. Шаги: 1) собрать заказы сотрудника за период из существующих записей журнала, 2) дополнить заказами, в которых сотрудник участвовал (по позициям заказа, по исполнителю заявки), 3) исключить системные заказы (пополнение склада), 4) для каждого закрытого, отгруженного или в пути заказа пересчитать бонусы и отфильтровать по сотруднику, 5) собрать разбивку: изменилось (новая сумма не равна старой) / не изменилось / системные исключены — и список заказов с текущей и новой суммой.
Бухгалтер или менеджер по KPI смотрит результат, обсуждает с командой, и только тогда применяет изменения к базе. Применение удаляет существующие автоматические записи за период и создаёт новые из пересчёта. Ручные записи защищены. Отдельная очистка удаляет только автоматические записи (например, при выводе сотрудника из системы). Это безопасно: эксперименты с правилами бонусов не «ломают» прод, всегда есть шаг предпросмотра.
7 аналитических операций
Сводная аналитика даёт развёрнутую картину по сотруднику. Общая сводка за период — общая сумма, число заказов, опционально прибыль по заказам (для руководителей с соответствующим правом), опционально сравнение с прошлым периодом такой же длины и с планом. Ежедневная динамика — разбивка «дата — сумма — число заказов» для линейного графика. Тренд по плану — динамика выполнения плана. Помесячная динамика — за N месяцев назад (по умолчанию 6) с агрегатами по сумме и числу заказов.
Аналитика наценки заказов сотрудника. Разбивка по диапазонам наценки (0-10%, 10-20%, 20-30%, 30%+) показывает «продаёт продавец дорого или со скидками». Это критично для бонуса продавца через правила мотивации: размер бонуса зависит от диапазона наценки. Эффективность по сменам: для каждой смены сотрудника выручка, чеки, средний чек, время до первого чека, простои. Видны проблемные смены — много простоев, низкая конверсия. Поиск конкретного заказа с детализацией заработка сотрудника по нему. Используется при разборе спорных начислений «откуда у меня эти 1248 ₽».
Видимость, контроль доступа и кэширование
У сотрудника есть три поля контроля видимости ЗП. Лимит для согласования — выше него формально требуется одобрение (пока используется на сводке как порог подсветки). Флаг «может ли сам сотрудник видеть свои начисления в кабинете». Параметр «за какой период доступна» (например, 30 дней — только последний месяц). По умолчанию доступ выключен: рядовой продавец не видит ни свою историю, ни тем более чужие. Директор магазина с включённым доступом видит начисления сотрудников своего магазина, директор сети — всех.
Все сводки, аналитика и выборки кэшируются по тегу. Любая мутация (создание, ручное начисление, обновление, удаление, очистка, пересчёт) сбрасывает кэш. Если хранилище кэша не поддерживает теги — сбрасывается целиком. Личный кабинет сотрудника и руководительская сводка остаются быстрыми. Возможные будущие интеграции (зарплатный реестр в банк, выгрузка в 1С:ЗУП) реализуемы поверх существующей модели через готовую выгрузку отчётов или отдельный сервис.
Готовы автоматизировать?
Покажем модуль на ваших данных и подключим за 1–2 недели.
