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

Работа с заявлениями

Заявление — это документ, инициируемый сотрудником (заявление на отпуск, увольнение и т.п.), в отличие от документа, который создаёт кадровик. Заявления проходят маршрут согласования и подписания.

Что получится в конце

После выполнения сценария HRlink создаст группу заявлений, заполнит заявление по выбранному типу и передаст его по маршруту согласования и подписания.

Что нужно заранее

Что нужноГде получить
tenantHostАдрес тенантаTenant Экземпляр системы HRlink на отдельном домене (например, company.hr-link.ru). Внутри одного тенанта может быть несколько пространств клиентов. HRlink
clientIdТекущий пользователь
ТокенАутентификация
Тип заявленияПолучить типы заявлений
Значения полей заявленияИз формы внешней системы или данных сотрудника
Пользователь, от имени которого создаётся заявлениеЗаголовки impersonation при мастер-токенеMaster-Api-Token Мастер-токен для M2M-интеграций. Позволяет выполнять запросы от имени любого пользователя системы через заголовки Impersonated-User-Id. Получается через ESA с помощью сертификата интегратора.

Какие методы используются

ШагМетод
Получить типы заявленийПолучить типы заявлений
Создать группу заявленийСоздать заявление
Подписать ПЭППЭП Простая электронная подпись (SES). Подтверждает факт подписания, но не гарантирует неизменность документа после подписания.Подать заявление (ПЭП)
Подписать УНЭПУНЭП Усиленная неквалифицированная электронная подпись (CLOUD_NQES). Облачная подпись, обеспечивающая целостность документа.Подать заявление (УНЭП) и Подтвердить подписание УНЭП
Получить список заявленийПолучить реестр заявлений кадровика

Чем заявление отличается от документа

Заявление в HRlink — это экземпляр типа заявления, заранее настроенного администратором клиента. Тип определяет бланк, поля для заполнения и маршрут согласования-подписания. Всё это — в отличие от документа, где маршрут выбирается при создании — встроено в тип заявления.

ДокументЗаявление
ИнициаторКадровик / делопроизводительСотрудник
МаршрутSIGNINGAPPROVING + SIGNING
Привязка маршрутаВыбирается при созданииВстроен в тип заявления (signingRouteTemplate внутри ApplicationType)
Получать маршрут отдельноДа — через методНет — уже внутри типа
Тип участника ROLEНе поддерживаетсяПоддерживается
API-группаdocumentsGroupsapplicationsGroups

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

Выбор типа заявления

Метод Получить типы заявлений возвращает все типы заявлений клиента. Типы бывают двух видов:

  • Из шаблона docx (templatable: true) — большинство типов. Основа заявления — заранее загруженный docx-шаблон с полями, которые сотрудник заполняет при подаче. Поля описаны в templateFields.
  • Из файла (templatable: false) — один специальный тип, когда сотрудник сам прикладывает файл заявления. Полей для заполнения нет.
curl -X GET "https://{tenantHost}/api/v1/applicationTypes" \
-H "Accept: application/json" \
-H "User-Api-Token: {token}"

Пример сокращённого ответа:

{
"result": true,
"applicationTypes": [
{
"id": "c4d2f1a8-9b3e-4c7d-8a2f-5b6d9e3c7a1b",
"name": "Заявление на отпуск",
"templatable": true,
"active": true,
"fileId": "f1e2d3c4-1111-2222-3333-444455556666",
"signingRouteTemplate": {
"id": "7a2e8b5c-1d4f-4a9e-b3c7-8f6a2d5e1b4c",
"name": "Согласующий и кадровик"
},
"signingByEmployeeSesEnabled": true
},
{
"id": "e8a1b3d5-1111-2222-3333-444455556666",
"name": "Произвольное заявление из файла",
"templatable": false,
"active": true
}
]
}

Что запомнить из ответа:

  • id нужного типа передавайте как typeId при создании группы заявлений (следующий раздел)
  • active: false означает, что администратор выключил тип — не используйте его в интеграции
  • signingRouteTemplate.id — уже привязанный маршрут, отдельно его получать не нужно

Создание группы заявлений

typeId в запросе — это id типа заявления, выбранного в предыдущем разделе. Доступны несколько версий метода. Рекомендуется использовать последнюю.

Почему в запросе объект application

В текущей модели HRlink одна ApplicationGroup содержит одно заявление, поэтому applicationGroupCreateV3 принимает объект application, а не массив.

curl -X POST "https://{tenantHost}/api/v3/clients/{clientId}/applicationGroups" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "User-Api-Token: {token}" \
-d '{
"typeId": "{UUID типа заявления}",
"date": "2026-04-15T00:00:00",
"application": {
"legalEntityId": "{UUID юрлица}",
"fileId": "{UUID загруженного файла}",
"participants": []
}
}'

Версии метода

ВерсияЭндпоинтПримечание
v1POST /api/v1/clients/{clientId}/applicationGroupsБазовая
v2POST /api/v2/clients/{clientId}/applicationGroupsРасширенная
v3POST /api/v3/clients/{clientId}/applicationGroupsРекомендуется

Подписание заявлений

ПЭП (простая электронная подпись)

ПЭППЭП Простая электронная подпись (SES). Подтверждает факт подписания, но не гарантирует неизменность документа после подписания. подписывает одно заявление. Вызовите Подписать заявление ПЭП. В теле передайте participantId участника активного этапа маршрута и текущую version заявления (возьмите из ответа методов получения заявления):

curl -X POST "https://{tenantHost}/api/v1/clients/{clientId}/applications/{applicationId}/signBySes" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "User-Api-Token: {token}" \
-d '{"participantId":"{UUID участника маршрута}","version":1}'

УНЭП (усиленная неквалифицированная)

УНЭПУНЭП Усиленная неквалифицированная электронная подпись (CLOUD_NQES). Облачная подпись, обеспечивающая целостность документа. подписывает группу заявлений в два шага. На первом шаге сотрудник получает код в текущий канал подписания (SMS или email), на втором — передаёт его в API. Подробнее о канале подписания — Выпуск УНЭП.

  1. Инициировать подписание группы заявлений УНЭПPOST /api/v1/clients/{clientId}/applicationGroups/{applicationGroupId}/sign/nqes. В ответе signingRequestId.
  2. Подтвердить подписание группы заявлений УНЭПPUT на тот же URL с кодом в теле.

Предусловие: у сотрудника должен быть выпущен УНЭПУНЭП Усиленная неквалифицированная электронная подпись (CLOUD_NQES). Облачная подпись, обеспечивающая целостность документа. (NqesIssuingState = FINISHED) — см. Выпуск УНЭП. Автоподписание УНЭПУНЭП Усиленная неквалифицированная электронная подпись (CLOUD_NQES). Облачная подпись, обеспечивающая целостность документа. от лица сотрудника не поддерживается — код физически приходит сотруднику.

Через Госключ

Подпись через Госключ инициирует метод Подписать заявление через ГосключPOST /api/v1/clients/{clientId}/applications/{applicationId}/sign/govKey. Само подтверждение сотрудник проходит в мобильном приложении «Госключ».

Предусловие: у сотрудника включено право ENABLE_SIGNING_THROUGH_GOV_KEY (подписание через Госключ).

Автоподписание от лица сотрудника

С мастер-токеномMaster-Api-Token Мастер-токен для M2M-интеграций. Позволяет выполнять запросы от имени любого пользователя системы через заголовки Impersonated-User-Id. Получается через ESA с помощью сертификата интегратора. и заголовками impersonationImpersonation Выполнение API-запросов от имени другого пользователя при использовании мастер-токена. Пользователь указывается через заголовки Impersonated-User-Id и Impersonated-User-Id-Type. интегратор подписывает заявления от лица сотрудника без его участия. Так работает сценарий «Портал отпусков»:

  1. Создать заявление от имени сотрудника
  2. Подписать ПЭППЭП Простая электронная подпись (SES). Подтверждает факт подписания, но не гарантирует неизменность документа после подписания. от имени сотрудника
  3. Заявление уходит на согласование руководителю
Заголовки для работы от имени пользователя обязательны

Автоподписание работает только через мастер-токенMaster-Api-Token Мастер-токен для M2M-интеграций. Позволяет выполнять запросы от имени любого пользователя системы через заголовки Impersonated-User-Id. Получается через ESA с помощью сертификата интегратора. с заголовками Impersonated-User-Id / Impersonated-User-Id-Type. Пользовательский токен не подходит, так как привязан к конкретному пользователю.

Согласование заявлений

Согласование — этап маршрута с actionType: APPROVING. В публичном API HRlink нет отдельного метода «одобрить заявление»: с точки зрения API одобрение согласующим и подписание подписантом устроены одинаково — через тот же Подписать заявление ПЭП или подпись УНЭПУНЭП Усиленная неквалифицированная электронная подпись (CLOUD_NQES). Облачная подпись, обеспечивающая целостность документа. / Госключ. Сервер сам понимает, что участник находится на этапе APPROVING, и трактует вызов как одобрение.

Для отказа в согласовании есть отдельный метод Отклонить заявление. В теле передайте participantId, текущую version заявления и comment с причиной отклонения:

curl -X PUT "https://{tenantHost}/api/v1/clients/{clientId}/applications/{applicationId}/reject" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "User-Api-Token: {token}" \
-d '{"participantId":"{UUID участника маршрута}","version":2,"comment":"Некорректные даты отпуска"}'

Реестры заявлений

Реестры возвращают страницу заявлений с учётом ролевых ограничений: кадровик видит все заявления своих юрлиц, сотрудник — только свои. Оба метода используют POST для чтения — потому что фильтры сложные (набор UUID, диапазоны дат, статусы) и не помещаются в query-параметры.

Доступные поля фильтрации (все опциональные):

ПолеНазначение
applicationTypeIdsФильтр по типам заявлений
applicationStatusesФильтр по статусам (ApplicationStatus)
legalEntityIdsФильтр по юрлицам (кадровик передаёт юрлица, на которые у него есть права)
employeeIdsФильтр по сотрудникам-заявителям
clientDepartmentIdsФильтр по отделам
applicationDateFrom / applicationDateToДиапазон дат самих заявлений
applicationCreatedDateFrom / applicationCreatedDateToДиапазон дат создания
applicationDocflowFinishedDateFrom / applicationDocflowFinishedDateToДиапазон дат завершения документооборота
applicationIdsЯвный список UUID заявлений
clientUserParticipantIdsФильтр по участникам маршрута
clientUserResponsibleIdsФильтр по ответственным
limit, offsetПагинация

Реестр кадровика

Получить реестр заявлений кадровика — все заявления клиента. Требует прав кадровика хотя бы на одно юрлицо.

curl -X POST "https://{tenantHost}/api/v2/clients/{clientId}/applicationGroups/getHrRegistry" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "User-Api-Token: {token}" \
-d '{
"legalEntityIds": ["{UUID юрлица}"],
"limit": 50,
"offset": 0
}'

Реестр сотрудника

Получить реестр заявлений сотрудника — заявления текущего сотрудника (как заявителя, участника маршрута или ответственного).

curl -X POST "https://{tenantHost}/api/v2/clients/{clientId}/applicationGroups/getEmployeeRegistry" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "User-Api-Token: {token}" \
-d '{"limit": 50, "offset": 0}'