﻿---
title: Воронка подбора кандидатов
description: "Дашборд на Laravel + Filament: этапы подбора, зависшие кандидаты, представления для нанимающих руководителей и эффективность источников."
---

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

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

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

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

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

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

- **Сначала — готовая ATS.** Huntflow, Поток и аналогичные системы уже ведут воронку, письма кандидатам и отчёты. Отдельный дашборд оправдан, когда нужны свои разрезы, общая картина по нескольким источникам или связь с планом численности и внутренними сервисами. В этом случае его строят поверх ATS через API, без переноса данных.
- **Источник заполняется при создании.** Без обязательного поля «источник» невозможно понять, какие каналы действительно приносят нанятых.
- **Этапы должны отражать реальность.** Раз в квартал просматривайте этапы: если через этап проходит ничтожная доля кандидатов, его стоит объединить с соседним или убрать.
- **Срок на этапе — настройка.** Допустимое время на каждом этапе задаётся для вакансии или типа ролей и уточняется по истории, а не зашивается в код.
- **Данные кандидатов — персональные данные.** Нужны согласие на обработку и сроки хранения по 152-ФЗ; отказников после срока обезличивают или удаляют. Храните только то, что нужно для решения о найме.
- **Доступ ограничивают на сервере.** Руководитель видит только свои вакансии, рекрутер — закреплённые за ним, руководитель HR — всё. Правило действует в доске, таблицах, виджетах и выгрузке.
- **Метрики без пустых периодов.** Если по роли за период не было наймов, показывайте «нет данных», а не нулевое время до найма.

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

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

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

```text
Создай модели и миграции для воронки подбора: Vacancy (должность,
подразделение, нанимающий руководитель, рекрутер, статус), Stage
(вакансия или общий набор, название, порядок, допустимый срок в днях),
Candidate (ФИО, почта и телефон — уникальные, источник — обязателен,
согласие на обработку и его дата), Application (кандидат, вакансия,
текущий этап, дата входа в этап, следующий шаг и его дата, итог),
StageTransition (отклик, откуда, куда, автор, время). Добавь фабрики.
```

### 2. Доска и карточка кандидата

```text
Сгенерируй Filament-ресурс для Application с таблицей и представлением
доской по этапам выбранной вакансии. Действие «Перевести на этап» пишет
StageTransition и требует дату следующего шага. В карточке покажи
историю переходов и следующий шаг.
```

### 3. Зависшие кандидаты и фильтры

```text
Добавь фильтры «Дольше срока на этапе» и «Нет следующего шага в течение
48 часов после собеседования», а также фильтры по вакансии, рекрутеру,
источнику и этапу. Подсвечивай строки сверх срока в таблице и на доске.
```

### 4. Синхронизация с ATS и импорт

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

Проверьте, что повторный импорт того же файла не создаёт новых кандидатов.

### 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/customer-support/support-capacity-planner.md) — расчёт потребности в людях, который часто запускает найм.

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

- [Refine: Recruiting Pipeline Dashboard](https://refine.dev/use-cases/hr/recruiting-pipeline-dashboard/)
- [Filament 4.x: ресурсы и авторизация](https://filamentphp.com/docs/4.x/resources/overview)
- [Filament 4.x: фильтры таблиц](https://filamentphp.com/docs/4.x/tables/filters/overview)
- [Filament 4.x: импорт](https://filamentphp.com/docs/4.x/actions/import)
- [Filament 4.x: виджеты](https://filamentphp.com/docs/4.x/widgets/overview)