Перейти к основному содержимому

Заявки на отпуск

Заявки на отпуск являются основой рабочего процесса управления отпусками. Сотрудники подают запросы на отгулы, которые затем проходят процесс утверждения. Система отслеживает полный жизненный цикл от подачи до утверждения или отклонения, с автоматическим обновлением баланса на каждом этапе.


Подача заявки на отпуск

Как сотрудник (Портал)

  1. Перейдите в Заявки на отпуск в боковой панели.
  2. Нажмите Создать.
  3. Выберите Тип отпуска.
  4. Введите Дату начала и Дату окончания.
  5. Введите количество Дней (поддерживаются полудни, например, 0.5, 1.5).
  6. При желании добавьте Причину.
  7. Нажмите Сохранить.

Поле «Сотрудник» автоматически устанавливается на текущего авторизованного сотрудника — оно не отображается в форме.

Как администратор

Администраторы видят ту же форму, но с дополнительным полем Сотрудник для выбора, для какого сотрудника предназначена заявка. Они также могут заполнить поле Заметки администратора (скрыто от сотрудников).

Из детальной страницы сотрудника

Администраторы могут создавать заявки на отпуск непосредственно со страницы сотрудника, используя действие Создать заявку на отпуск. Сотрудник заполняется автоматически, а дополнительный переключатель Полдня доступен для удобства.


Правила валидации

Система применяет несколько правил валидации при подаче или редактировании заявки на отпуск:

Валидация дней

Количество дней должно соответствовать диапазону дат:

  • Полные дни: Дни должны равняться end_date - start_date + 1
  • Полудни: Дни должны равняться (end_date - start_date + 1) * 0.5

Любое другое значение отклоняется с сообщением об ошибке.

Обнаружение пересечений

Система проверяет пересекающиеся заявки на отпуск для одного и того же сотрудника. Заявка блокируется, если её диапазон дат пересекается с любой существующей утверждённой или ожидающей заявкой.

Два диапазона дат пересекаются, если: start_date_1 <= end_date_2 AND start_date_2 <= end_date_1

При редактировании существующей заявки проверка пересечений исключает текущую запись.


Статусы заявок

СтатусМеткаОписание
ОжиданиеЖёлтаяОжидает утверждения. Баланс зарезервирован в pending_days.
УтвержденаЗелёнаяУтверждена руководителем. Дни перемещены из pending_days в used_days.
ОтклоненаКраснаяОтклонена руководителем. Дни удалены из pending_days.
ОтмененаСераяОтменена сотрудником или администратором. Дни восстановлены.

Рабочий процесс утверждения

Стандартный поток

Сотрудник подаёт заявку
|
Статус: Ожидание
(pending_days увеличено)
|
Руководитель рассматривает заявку
|
+--- Утвердить ---> Статус: Утверждена
| (pending_days -> used_days)
| Сотрудник уведомлён
|
+--- Отклонить ---> Статус: Отклонена
| (pending_days удалено)
| Причина отклонения записана
| Сотрудник уведомлён
|
+--- (Сотрудник) Отменить --> Статус: Отменена
(pending_days удалено)

Поток автоматического утверждения

Для типов отпуска, настроенных на автоматическое утверждение (в Настройки > Управление отпусками):

Сотрудник подаёт заявку
|
Наблюдатель обнаруживает настройку автоутверждения
|
Статус: Утверждена немедленно
(used_days увеличено)
Уведомление руководителю не отправляется

Настройки рабочего процесса утверждения

Перейдите в Настройки > Конфигурация HRM > Управление отпусками для настройки рабочего процесса:

НастройкаВариантыПо умолчанию
Рабочий процесс утвержденияОдноуровневый / Многоуровневый / Автоматическое утверждениеОдноуровневый
Типы отпуска с автоутверждениемВыбрать конкретные типы отпускаНет

Утверждение заявки на отпуск

Требуется разрешение approve leave requests.

  1. Перейдите в Заявки на отпуск или откройте из карточки панели ожидающих заявок.
  2. Выберите одну или несколько ожидающих заявок.
  3. Нажмите действие Утвердить.
  4. При желании добавьте Заметки администратора.
  5. Подтвердите.

Что происходит:

  • Статус меняется на Утверждена
  • approved_by устанавливается на текущего пользователя
  • approved_at устанавливается на текущую метку времени
  • Баланс отпуска: pending_days уменьшается, used_days увеличивается
  • Сотрудник получает уведомление

Отклонение заявки на отпуск

Требуется разрешение approve leave requests.

  1. Выберите одну или несколько ожидающих заявок.
  2. Нажмите действие Отклонить.
  3. Введите Причину отклонения (обязательно).
  4. При желании добавьте Заметки администратора.
  5. Подтвердите.

Что происходит:

  • Статус меняется на Отклонена
  • rejection_reason записывается и видна сотруднику
  • Баланс отпуска: pending_days уменьшается
  • Сотрудник получает уведомление

Отмена заявки на отпуск

Требуется разрешение cancel leave requests. И сотрудники, и администраторы могут отменять заявки.

  1. Выберите ожидающую или утверждённую заявку.
  2. Нажмите действие Отменить.
  3. Подтвердите.

Что происходит:

  • Статус меняется на Отменена
  • Если заявка была ожидающей: pending_days уменьшается
  • Если заявка была утверждённой: used_days уменьшается (дни возвращаются)
к сведению

Только ожидающие и утверждённые заявки могут быть отменены. Отклонённые и уже отменённые заявки не могут быть отменены.


Табличные представления

Список заявок на отпуск включает четыре предварительно настроенных представления:

ПредставлениеФильтр
Все заявки на отпускБез фильтра
Ожидающие заявкиСтатус = Ожидание
Утверждённые заявкиСтатус = Утверждена
Отклонённые заявкиСтатус = Отклонена

Доступные фильтры

  • Статус — Ожидание, Утверждена, Отклонена, Отменена
  • Дата начала — диапазон дат
  • Дата окончания — диапазон дат
  • Дни — числовой диапазон

Уведомления

Система отправляет уведомления по электронной почте в ключевых точках жизненного цикла заявки на отпуск:

При подаче заявки

Уведомление отправляется всем пользователям, имеющим разрешение approve leave requests. Письмо содержит:

  • Имя и email сотрудника
  • Тип отпуска, даты начала/окончания, общее количество дней
  • Причину (если указана)
  • Ссылку для просмотра заявки

При изменении статуса заявки

Сотрудник получает уведомление, когда его заявка утверждена, отклонена или отменена. Письмо содержит:

  • Тип отпуска, даты и общее количество дней
  • Новый статус
  • Причину отклонения (если отклонена)
  • Имя утвердившего
  • Ссылку для просмотра заявки

Шаблоны писем можно настроить в Настройки > Учётные записи электронной почты > Шаблоны.


Карточки панели управления

Система управления отпусками предоставляет три карточки для панели управления:

КарточкаТипОписание
Заявки на отпуск по статусуКруговая диаграммаРаспределение заявок по статусам
Заявки на отпуск по типуСтолбчатая диаграммаКоличество заявок, сгруппированных по типу отпуска
Ожидающие заявки на отпускТаблица15 последних ожидающих заявок, требующих действия

Рабочий процесс утверждения и отклонения

Рабочий процесс утверждения отпусков контролирует, как заявки на отпуск переходят от подачи к разрешению. Модуль HRM поддерживает три режима рабочего процесса, настраиваемых на странице настроек.


Режимы рабочего процесса

Настройте режим рабочего процесса в Настройки > Конфигурация HRM > Управление отпусками.

Одноуровневый (По умолчанию)

Простейший рабочий процесс. Один уполномоченный пользователь рассматривает и утверждает или отклоняет заявку.

Сотрудник -> Подать -> Руководитель/HR утверждает или отклоняет -> Готово

Любой пользователь с разрешением approve leave requests может утверждать или отклонять заявки.

Многоуровневый

Заявки проходят несколько этапов утверждения. Подходит для организаций, которым требуется подпись как непосредственного руководителя, так и HR.

Сотрудник -> Подать -> Руководитель утверждает -> HR утверждает -> Готово

Автоматическое утверждение

Все заявки на отпуск автоматически утверждаются при подаче. Проверка человеком не требуется.

Сотрудник -> Подать -> Автоматически утверждена -> Готово

подсказка

Вы можете комбинировать режимы рабочего процесса с настройкой Типы отпуска с автоутверждением, чтобы автоматически утверждать определённые типы (например, Работа из дома), при этом требуя утверждения для других (например, Ежегодный отпуск).


Автоматическое утверждение для определённых типов отпуска

Вместо автоутверждения всех заявок, вы можете выбрать конкретные типы отпуска, которые обходят утверждение:

  1. Перейдите в Настройки > Конфигурация HRM > Управление отпусками.
  2. В разделе Типы отпуска с автоутверждением выберите типы (например, Работа из дома, Компенсационный отгул).
  3. Сохраните.

Когда сотрудник подаёт заявку на тип отпуска с автоутверждением:

  • Статус немедленно устанавливается на Утверждена.
  • Баланс отпуска обновляется (used_days увеличивается напрямую, без этапа pending_days).
  • Уведомление руководителям не отправляется.
  • Сотрудник не получает уведомление об утверждении (так как оно мгновенное).

Заявки на типы отпуска без автоутверждения следуют стандартному рабочему процессу утверждения, независимо от этой настройки.


Обновления баланса по действиям

ДействиеОжидающие дниИспользованные дниДоступные дни
Подать заявку+дниуменьшается
Утвердить заявку-дни+днибез изменений
Отклонить заявку-дниувеличивается
Отменить (была ожидающей)-дниувеличивается
Отменить (была утверждённой)-дниувеличивается

Кто может утверждать

Действия по утверждению контролируются разрешением approve leave requests. Это разрешение должно быть явно предоставлено роли — оно не включено в роль Сотрудника по умолчанию.

Типичные роли, которые должны иметь это разрешение:

  • HR-менеджер
  • Руководитель отдела
  • Тимлид
  • Любая роль администратора

Суперадминистраторы всегда могут утверждать заявки (обход через Gate::before).


Причины отклонения

При отклонении заявки на отпуск Причина отклонения обязательна. Эта причина:

  • Хранится в записи заявки на отпуск
  • Видна сотруднику в детальном просмотре его заявки
  • Включена в уведомление по email об изменении статуса

Администраторы также могут добавлять Заметки администратора при утверждении или отклонении. Заметки администратора видны только другим администраторам, никогда сотруднику.


Отмена заявки на отпуск

Сотрудники и администраторы могут отменять заявки на отпуск, которые находятся в статусе Ожидание или Утверждена. Отмена возвращает использованные или зарезервированные дни отпуска в баланс сотрудника.


Кто может отменять

Отмена требует разрешения cancel leave requests. По умолчанию сотрудники имеют это разрешение и могут отменять свои собственные заявки.

ПользовательМожет отменить своиМожет отменить чужие
СотрудникДа (с разрешением)Нет (ограничение данных не позволяет видеть чужие)
АдминистраторДаДа (при наличии разрешения)
СуперадминДаДа (обходит все проверки)

Как отменить

  1. Перейдите в Заявки на отпуск.
  2. Найдите заявку для отмены (должна быть в статусе Ожидание или Утверждена).
  3. Нажмите действие Отменить отпуск (отображается в строке в столбце действий).
  4. Подтвердите отмену.

Что происходит при отмене

Отмена ожидающей заявки

До: pending_days = 5, used_days = 10, available_days = 3 Отмена 2-дневной ожидающей заявки После: pending_days = 3, used_days = 10, available_days = 5

  • pending_days уменьшается на количество дней заявки
  • available_days увеличивается соответственно
  • Статус заявки меняется на Отменена

Отмена утверждённой заявки

До: pending_days = 3, used_days = 12, available_days = 3 Отмена 2-дневной утверждённой заявки После: pending_days = 3, used_days = 10, available_days = 5

  • used_days уменьшается на количество дней заявки
  • available_days увеличивается соответственно
  • Статус заявки меняется на Отменена

Ограничения

  • Отклонённые заявки не могут быть отменены (они уже разрешены).
  • Уже отменённые заявки не могут быть отменены повторно.
  • Кнопка действия «Отменить» отображается только для заявок в статусе Ожидание или Утверждена.

Валидация пересечений

Модуль HRM предотвращает подачу сотрудниками заявок на отпуск, которые пересекаются с их существующими утверждёнными или ожидающими заявками. Это обеспечивает точный учёт отпусков и предотвращает двойное бронирование.


Как это работает

При создании или обновлении заявки на отпуск система проверяет пересечение диапазонов дат:

  1. Запрашивает все заявки на отпуск для того же сотрудника.
  2. Фильтрует только утверждённые и ожидающие заявки (отклонённые и отменённые игнорируются).
  3. При редактировании исключает текущую заявку из проверки.
  4. Тестирует пересечение по формуле: existing_start <= new_end AND new_start <= existing_end.

Если пересечение найдено, заявка отклоняется с ошибкой валидации.


Примеры

Заблокировано (Пересечение)

Существующая заявкаНовая заявкаРезультат
10–12 янв (Утверждена)11–14 янвЗаблокировано — пересечение 11–12 янв
15–15 янв (Ожидание)15–15 янвЗаблокировано — точно та же дата
1–31 янв (Утверждена)10–10 янвЗаблокировано — содержится в существующем диапазоне

Разрешено (Без пересечения)

Существующая заявкаНовая заявкаРезультат
10–12 янв (Утверждена)13–15 янвРазрешено — смежные, но без пересечения
10–12 янв (Отклонена)10–12 янвРазрешено — отклонённые заявки игнорируются
10–12 янв (Отменена)10–12 янвРазрешено — отменённые заявки игнорируются

Пересечение между типами

Валидация пересечений применяется ко всем типам отпуска. Сотрудник не может иметь пересекающиеся заявки на ежегодный отпуск и больничный — даты не должны конфликтовать, независимо от типа отпуска.


Перенос отпуска

Перенос отпуска позволяет переносить неиспользованные дни отпуска с одного финансового года на следующий. Эта функция настраивается как на глобальном уровне (настройки), так и на уровне отдельного типа отпуска.


Как работает перенос

В конце каждого финансового года система обрабатывает перенос для всех сотрудников:

  1. Для баланса отпуска каждого сотрудника за завершающийся год:
    • Проверяет, включён ли Перенос для данного типа отпуска.
    • Рассчитывает неиспользованные дни: total_days - used_days - pending_days.
    • Применяет лимит переноса (меньшее из Макс. дней переноса типа отпуска и глобальной настройки Макс. дней переноса).
    • Создаёт или обновляет баланс отпуска следующего года с Перенесёнными днями.
  2. Перенесённые дни имеют срок действия на основе настройки Срок действия переноса.

Конфигурация

Глобальные настройки

Перейдите в Настройки > Конфигурация HRM > Управление отпусками:

НастройкаПо умолчаниюОписание
Перенос включёнДаГлавный переключатель функции переноса
Макс. дней переноса10Глобальный лимит перенесённых дней для всех типов отпуска
Срок действия переноса (месяцы)3Перенесённые дни истекают через столько месяцев после начала нового финансового года

Настройки для каждого типа отпуска

Каждый тип отпуска имеет собственную настройку переноса:

ПолеОписание
ПереносВключить/отключить перенос для этого конкретного типа отпуска
Макс. дней переносаМаксимальное количество дней, которые могут быть перенесены

Эффективный лимит переноса — это меньшее из лимита типа отпуска и глобального лимита.

Пример: Тип отпуска допускает перенос 10 дней, но глобальный максимум — 5. Будет перенесено только 5 дней.


Обработка переноса

Перенос обрабатывается автоматически с помощью запланированной команды, которая выполняется в первый день месяца начала финансового года:

php artisan hrm:process-leave-carryover

Срок действия переноса

Перенесённые дни не являются постоянными — они истекают после настраиваемого периода. После истечения они больше не учитываются в доступном балансе.