02 / Подбор сотрудников
От отклика до выхода на работу
Отклики, переписка и этапы найма собраны в одной системе. Кандидат может посмотреть свой статус в личном кабинете.
Задача
Отклики приходят с разных площадок. Рекрутеру нужно не потерять кандидата, избежать дублей и понимать, кто с ним уже общался.
Что сделали
Кандидаты, переписка и этапы подбора собраны в одном месте. За каждым кандидатом можно закрепить менеджера и проследить путь до найма.
Отклики с hh.ru и Авито
Поиск повторных кандидатов
Этапы собеседования, пробного дня и найма

Ещё экраны продукта



Как это работает
- Собрать отклики
Отклики с площадок приходят в одну систему. Она проверяет, есть ли кандидат в базе, чтобы не создавать дубликат.
- Связаться с кандидатом
За откликом закрепляют менеджера. Переписка доступна рядом с данными кандидата.
- Этапы найма
Интервью, стажировка и решение о трудоустройстве фиксируются с историей статусов и причинами отказа.
- Обновить данные
Новый статус передаётся на площадку. Если связь прервалась, система повторяет попытку.
Для технической команды: как устроено решение
Слой коннекторов принимает события с внешних площадок и передаёт их в фоновые задачи, которые обновляют модель кандидата и вакансии; back office и портал кандидата используют общие данные с разными правами доступа, а живые обновления идут через отдельный канал сообщений.
- Слой коннекторов к внешним площадкам
- Фоновые задачи приёма и синхронизации
- Back office
- Портал кандидата
- Канал живых обновлений
Надёжность
- Ролевой доступ и отдельный, ограниченный срез данных для службы безопасности.
- Версионирование согласия на обработку персональных данных с датой и источником согласия.
- Ограничения по времени выполнения фоновых задач для защиты от зависших сетевых вызовов.
- Кандидат может самостоятельно запросить удаление своих данных из личного портала после повторного подтверждения пароля.
Решения и ограничения
Необработанное событие сохраняется целиком и может быть повторно обработано позже, а не отбрасывается.
Входящее событие с внешней площадки иногда невозможно обработать сразу, например до синхронизации вакансии.
Отклик не теряется из-за временной проблемы синхронизации данных.
Дедупликация учитывает не только идентификатор события, но и совпадение кандидата по контактным данным.
Внешняя площадка может повторно доставить одно и то же событие с новым идентификатором.
Один и тот же кандидат не создаётся в системе повторно.
Исходящая синхронизация выполняется отдельным устойчивым механизмом с состоянием и повторными попытками.
Изменение статуса нужно синхронизировать с внешней площадкой надёжно, а не в рамках одного HTTP-запроса пользователя.
Временная недоступность внешней площадки не приводит к потере изменения статуса.
Идентифицирующие поля анонимизируются автоматически по истечении настроенного срока хранения.
Персональные данные кандидата нельзя хранить неограниченно после завершения процесса.
Жизненный цикл персональных данных заложен в продукт, а не оставлен на ручной регламент.
Исходящее сообщение системы «усыновляется» при получении подтверждения от площадки вместо создания повторной записи.
Кандидат может написать в чат несколько раз, а исходящее сообщение оператора не всегда сразу получает идентификатор площадки.
Переписка не задваивается даже при задержке подтверждения от внешней площадки.
Каждая исходящая операция синхронизации хранит собственное состояние и обрабатывается независимо от остальных.
Синхронизация статуса на площадку и автоответ кандидату — разные операции, и обе не должны зависеть от результата друг друга.
Сбой одной операции не блокирует и не откатывает другую.
Технологии
- Python
- Django
- PostgreSQL
- Celery
- Redis
- Channels / WebSocket
- Docker Compose