Расписание смен
Источник требований
BR 1.4.1, раздел 2
Референс
YUMA POS:
_reference/yumapos/schedule.md
Расписание — инструмент план/факт учёта рабочего времени. Менеджер или франчайзи заранее планирует, когда сотрудник должен работать. Система сравнивает план с фактом и автоматически присваивает статус.
Концепция план/факт
| Тип времени | Как вносится | Описание |
|---|---|---|
| Плановое | Вручную, заранее (через расписание в админке) | Когда сотрудник должен работать |
| Фактическое | Автоматически (POS) или вручную (админка) | Когда сотрудник реально работал |
Система автоматически сопоставляет план и факт, вычисляя статус каждой смены.
Экран расписания
Новая страница: Сотрудники → Расписание
Визуализация
Таблица-календарь:
- Строки = сотрудники (ФИО)
- Столбцы = дни выбранного периода
- Ячейки = плановые и фактические смены с цветовой кодировкой по статусу
- Правая колонка “Часы” = план / факт за период по каждому сотруднику
Текущий день выделен красным. Цифры над сменой через /: кол-во запланированных / кол-во отработанных.
Фильтры
| Фильтр | Обязательность | Описание |
|---|---|---|
| ТТ (магазин) | Обязательный | Расписание составляется для конкретной точки |
| Роль | Необязательный | Фильтр по роли сотрудника |
| Период | Обязательный | Неделя / Месяц |
| Месяц | Обязательный | Выбор месяца |
| Статус смены | Необязательный | Все / По расписанию / Не по расписанию / Пропущено / Вне плана |
Шаблоны смен
Заранее настроенные шаблоны для быстрого создания плановых смен.
Сущность шаблона
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| Название | string | Обязательно | Например: “Утренняя”, “Вечерняя”, “Полный день” |
| Время начала | time | Обязательно | Например: 08:00 |
| Продолжительность | integer (минуты) | Обязательно | Время окончания рассчитывается автоматически |
| Привязка к ТТ | uuid | Обязательно | Шаблон принадлежит конкретной ТТ |
Ограничения
- Максимум 4 шаблона на ТТ
- Шаблон можно создать, отредактировать, удалить
- При удалении шаблона уже созданные по нему плановые смены не удаляются
Создание и редактирование плановых смен
Создание
- В расписании выбрать ячейки (одну или несколько) → нажать “Редактировать выделенные”
- Выбрать шаблон из списка ИЛИ задать вручную (время начала + длительность)
- Время окончания рассчитывается автоматически
- Массовое создание: выделить несколько ячеек → применить шаблон ко всем
Альтернативный способ
Двойной клик по ячейке → открывается модалка “Рабочее расписание”:
- Дата (предзаполнена)
- Сотрудник (предзаполнен)
- ТТ (предзаполнена)
- Роль (предзаполнена)
- Шаблон (выпадающий список) или ручной ввод (время начала + длительность)
Ограничения
- Плановые смены можно создавать только на будущие дни (не текущий и не прошедший)
- Редактировать можно только будущие плановые смены
- Удалять можно только будущие плановые смены
- Прошедшие плановые смены — только просмотр
Четыре автоматических статуса смены
При наличии плановой и/или фактической смены система автоматически присваивает статус:
| Статус | Цвет | Условие |
|---|---|---|
| По расписанию | Зелёный | Факт начался за ≤30 мин до плана И закончился ≤30 мин после плана |
| Не по расписанию | Жёлтый | Факт есть, но отклонение от плана >30 мин (начало или конец) |
| Пропущено | Красный | Плановая смена существует, но фактическая запись отсутствует |
| Вне плана | Сиреневый | Плановой смены не было, но сотрудник отработал (фактическая запись есть) |
Правило 30 минут
Чтобы смена получила статус “По расписанию”, сотрудник должен:
- Отметиться не позже 30 мин до начала плановой смены
- Завершить не позже 30 мин после окончания плановой смены
Если сотрудник опаздывает или уходит раньше/позже — статус “Не по расписанию”.
Дополнительные правила
- Статус “Пропущено” присваивается только после того, как плановая смена прошла (по времени окончания)
- Если по графику плановой смены не было, но сотрудник работал — “Вне плана” (нормальная ситуация: подмена заболевшего)
Корректировка прошедших смен
Прошедшие смены нельзя удалить. Но можно скорректировать отработанные часы:
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| Тип | enum | Обязательно | Увеличение / Уменьшение |
| Величина | часы + минуты | Обязательно | На сколько скорректировать |
| Комментарий | string | Обязательно | Причина корректировки |
- Корректировку можно сбросить (удалить)
- Корректировать можно смены в любом статусе, кроме “Пропущено” (нечего корректировать)
- Для корректировки → двойной клик по прошедшей смене → модалка → кнопка “Корректировка”
Ролевая матрица
(Обновлено в BR 1.4.4 — колонки scope вместо enum, permission для обычных сотрудников)
| Действие | Владелец франшизы | Владелец партнёра | Обычный сотрудник (permission) |
|---|---|---|---|
| Просмотр расписания | Все ТТ | Свои ТТ | schedule.read в рамках своих ТТ |
| Составление расписания | Все ТТ | Свои ТТ | schedule.edit в рамках своих ТТ |
| Редактирование плановых смен | Все ТТ | Свои ТТ | schedule.edit + scope |
| Удаление плановых смен | Все ТТ | Свои ТТ | schedule.edit + scope |
| Корректировка прошедших смен | Все ТТ | Свои ТТ | schedule.edit + scope |
| Управление шаблонами | Все ТТ | Свои ТТ | schedule.edit + scope |
Связи с другими модулями
- Сотрудники — расписание привязано к сотрудникам
- Учёт рабочего времени — фактические данные для сопоставления с планом
- Зарплата — отработанные часы из расписания → расчёт зарплаты
- Дашборд — сводка по сменам за день