﻿---
title: Согласование оффера кандидату
description: "Сервис на Laravel + Filament: маршрут согласования оффера по грейду и условиям, сроки шагов, исключения по компенсации и журнал решений."
---

## Что это за сервис

Внутренний маршрут согласования предложения о работе: рекрутер оформляет условия, система сама определяет, кто должен их утвердить, и показывает, на чьём шаге оффер сейчас находится.

Без него оффер проходит три-четыре согласования — нанимающий руководитель, специалист по компенсациям, финансы — и никто не знает, у кого он застрял. Рекрутер тратит полчаса на каждый оффер, выясняя статус в мессенджере и почте. Условия выше вилки требуют подписи директора, но понятного пути эскалации нет, и оффер лежит днями. Кандидат уходит к конкуренту, который ответил за два дня, а на вопрос проверяющего «кто и когда это утвердил» ответ приходится собирать по переписке.

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

## Что он делает

- **Строит маршрут по правилам.** Число и порядок согласующих зависят от грейда, подразделения, локации и того, укладываются ли условия в вилку.
- **Показывает статус без вопросов.** Очередь офферов с текущим согласующим и временем ожидания видна рекрутеру в одном окне.
- **Держит сроки шагов.** У каждого шага есть срок, например сутки; при его нарушении согласующий получает напоминание, а затем вопрос переходит к его руководителю.
- **Обрабатывает исключения.** Оффер вне вилки автоматически получает дополнительный шаг и требует обоснования, чтобы согласующему не пришлось переспрашивать.
- **Ведёт журнал решений.** Каждое действие сохраняется с автором, временем и комментарием.

## Нюансы и особенности

- **Правила маршрута записывают до запуска.** Кто согласует оффер для какого грейда и условий — решение HR и финансов, а не знание, которое живёт в головах. Правила хранятся как настройки, а не зашиваются в код.
- **Отсутствие согласующего — штатная ситуация.** Для каждого согласующего задаётся замещающий, на которого шаг переходит после заданного времени или на время отпуска.
- **Обоснование обязательно для исключений.** Условия вне вилки без причины и сравнения с рынком не должны отправляться на согласование.
- **Условия оффера — конфиденциальные данные.** Суммы видят только участники маршрута и HR; нанимающий руководитель соседнего отдела их не видит. Ограничение действует в таблицах, уведомлениях и выгрузке. Данные кандидата храните по правилам 152-ФЗ, принятым в компании.
- **Интеграция с ATS и учётом.** Кандидат и вакансия приходят из Huntflow, Потока или другой ATS, а после принятия оффера данные передаются в 1С:ЗУП. Если ATS уже умеет согласовывать офферы по нужным правилам, отдельное приложение не требуется.
- **Изменение условий перезапускает маршрут.** Если после согласования поменялась сумма или дата выхода, старые подписи не распространяются на новую версию.
- **Рекрутер ведёт кандидата.** Статус виден рекрутеру, чтобы он сам сообщал кандидату о сроках, а не ждал сообщения изнутри.

## Как сгенерировать через ИИ-агентов

Промпты рассчитаны на AI-агента (Claude Code, Cursor и аналоги) в Laravel-проекте с установленным **Filament 4.x**. Отправляйте их по одному и проверяйте результат каждого шага.

### 1. Данные и модели

```text
Создай модели и миграции для согласования офферов: Offer (кандидат —
внешний id из ATS, вакансия, грейд, подразделение, локация, оклад, бонус,
дата выхода, признак «вне вилки», обоснование, версия, статус),
SalaryBand (грейд, локация, минимум, максимум), ApprovalRule (условия по
грейду, подразделению и признаку исключения, упорядоченный список ролей
согласующих), ApprovalStep (оффер, версия, согласующий, замещающий,
срок, решение, комментарий, время). Добавь фабрики с демо-данными.
```

### 2. Оформление оффера

```text
Сгенерируй Filament-ресурс для Offer. При сохранении сравнивай оклад с
вилкой грейда и локации и выставляй признак «вне вилки»; в этом случае
поле обоснования обязательно. Действие «Отправить на согласование»
строит шаги по подходящему правилу ApprovalRule.
```

Проверьте, что оффер вне вилки нельзя отправить без обоснования.

### 3. Очередь и решения

```text
Сделай страницу «Ждут моего решения» для согласующих с действиями
«Согласовать», «Отклонить» и «Вернуть на доработку» с обязательным
комментарием. Для рекрутера добавь таблицу офферов с текущим шагом,
согласующим и временем ожидания. Изменение суммы или даты выхода создаёт
новую версию и перезапускает маршрут.
```

### 4. Сроки, замещение и интеграции

```text
Сделай задачу по расписанию: если шаг ждёт дольше срока из конфига,
отправь напоминание, а после второго срока передай шаг замещающему и
уведомь руководителя согласующего. Добавь загрузку кандидатов и вакансий
из ATS по API и передачу принятого оффера в учётную систему.
```

### 5. Роли и журнал

```text
Настрой доступ: рекрутер видит офферы своих вакансий, согласующий —
офферы, где он участвует в маршруте, HR и финансы — всё. Суммы не
показывай никому вне этого круга, в том числе в уведомлениях. Добавь
журнал решений в карточке оффера и экспорт за период с временем каждого
шага.
```

## Похожие сценарии

- [Оценочные листы собеседований](https://wpcraft.ru/kb/stacks/filament/use-cases/hr/interview-scorecard-hub.md) — решение по кандидату, после которого оформляется оффер.
- [План численности и бюджет на найм](https://wpcraft.ru/kb/stacks/filament/use-cases/hr/headcount-planning-dashboard.md) — бюджет позиции, в рамках которого проверяются условия.
- [Согласование расходов](https://wpcraft.ru/kb/stacks/filament/use-cases/finance/expense-approval.md) — похожая механика маршрута и сроков для финансовых заявок.

## Материалы и источники

- [Refine: Offer Approval Workflow](https://refine.dev/use-cases/hr/offer-approval-workflow/)
- [Filament 4.x: ресурсы и авторизация](https://filamentphp.com/docs/4.x/resources/overview)
- [Filament 4.x: формы](https://filamentphp.com/docs/4.x/forms/overview)
- [Filament 4.x: уведомления в панели](https://filamentphp.com/docs/4.x/notifications/database-notifications)
- [Filament 4.x: экспорт](https://filamentphp.com/docs/4.x/actions/export)