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

Пользовательские справочники и признаки сотрудника

Пользовательский справочник помогает классифицировать сотрудников. Например, по региону, проекту или рабочей группе. Есть возможность создать справочник «Площадка» с элементами «Москва» и «Казань». Когда кадровик выбирает «Москва» для сотрудника, этот элемент становится его признаком.

У сотрудника может быть несколько признаков, но не больше одного элемента из каждого справочника. Например, «Площадка: Москва» и «Проект: Альфа» совместимы, а «Площадка: Москва» и «Площадка: Казань» одновременно — нет. Признаки относятся к конкретному месту работы (employee); у одного пользователя HRlink может быть несколько таких записей. Подробнее — Модель данных.

Как пользоваться справочниками в интерфейсе

  1. Администратор или пользователь с правами настройщика открывает Справочники → Пользовательские справочники, создаёт справочник, задаёт название, описание и цвет.
  2. Внутри справочника он добавляет элементы. У элемента можно выбрать родителя из того же справочника и руководителя. Так получается иерархия: например, «Россия → Москва».
  3. В карточке сотрудника кадровик открывает Место работы → Редактировать признаки, выбирает нужные элементы и сохраняет изменения.
  4. В реестрах сотрудников, документов и заявлений кадровик использует фильтр Признак сотрудника. При выборе нескольких признаков интерфейс показывает записи, где у сотрудника есть хотя бы один выбранный признак.

Созданные справочники и их элементы можно редактировать; удаление на данный момент не поддерживается. Снять признак с сотрудника можно — сам элемент при этом остаётся в справочнике. Пошаговые действия со скриншотами приведены в пользовательской инструкции.

Что подготовить для API

ДанныеКак использовать
tenantHost и clientIdАдрес тенантаTenantЭкземпляр системы HRlink на отдельном домене (например, company.hr-link.ru). Внутри одного тенанта может быть несколько пространств клиентов. и UUID клиента; clientId можно получить методом Текущий пользователь
ТокенПримеры ниже используют User-Api-Token пользователя с нужными правами
IDidВнутренний идентификатор сущности в формате UUID, генерируемый HRlink при создании. Неизменяемый, используется во всех внутренних операциях. сотрудникаДля единичного назначения нужен UUID employeeId; для массового — внешний IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. сотрудника, а не пользователя клиента
Внешние IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. справочников и элементовСтабильные ключи из вашей системы, которые не меняются при переименовании
Руководители и родители элементовСначала создайте сотрудников-руководителей и родительские элементы, на которые будете ссылаться

Замените значения в фигурных скобках своими данными. Если используете мастер-токен, замените заголовок User-Api-Token во всех запросах на:

Master-Api-Token: {masterApiToken}
Impersonated-User-Id: {clientUserExternalId}
Impersonated-User-Id-Type: EXTERNAL_ID

Здесь clientUserExternalId идентифицирует пользователя, от имени которого выполняется запрос. Он не задаёт сотрудника, которому назначают признак.

Права

ОперацияПрава
Создать справочник или элемент единичным методомCUSTOM_STRUCTURES_CREATE на уровне пользователя клиента
Изменить справочник или элементCUSTOM_STRUCTURES_UPDATE на уровне пользователя клиента
Прочитать справочники для управленияCUSTOM_STRUCTURES; передайте permissionContext=CUSTOM_STRUCTURES
Создать массовую задачуBULK_DATA_SYNC_TASKS_CREATE; для CUSTOM_STRUCTURES дополнительно нужны CUSTOM_STRUCTURES_CREATE и CUSTOM_STRUCTURES_UPDATE
Прочитать статус массовой задачиBULK_DATA_SYNC_TASKS
Изменить признаки сотрудникаEMPLOYEES_UPDATE, доступ к его юрлицу и отделу; при изменении набора нужен доступ ко всем текущим и новым элементам

Токен не расширяет права пользователя. Настройка доступных кадровику элементов справочников — отдельная операция от назначения признаков сотруднику. Общие правила приведены в разделе Авторизация.

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

Задача интеграцииСпособ
Загрузить или обновить несколько справочников с элементамиСоздать задачу синхронизации, тип CUSTOM_STRUCTURES
Назначить признаки нескольким сотрудникамТот же метод синхронизации, тип EMPLOYEE_CUSTOM_STRUCTURE_ELEMENTS
Создать или отредактировать один справочник либо элементЕдиничные методы
Заменить или снять признаки одного сотрудникаЗаменить элементы сотрудника

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

Идентификаторы

  • id — UUID объекта в HRlink; externalId — ключ объекта в вашей системе.
  • Внешний IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. справочника уникален в пределах клиента. Имя справочника также должно быть уникальным в клиенте.
  • Внешний IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. элемента должен быть уникальным внутри справочника. Для массового назначения используйте ключи элементов, уникальные среди всех справочников клиента, например site-moscow и project-alpha.
  • В массовом назначении передавайте пару externalId элемента и customStructureExternalId справочника. Если внешние IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. элементов уже повторяются в разных справочниках, используйте единичное назначение с UUID элемента: текущая реализация массового назначения может выбрать неверный элемент даже при указанном customStructureExternalId.
  • Для сотрудника передавайте его externalId и legalEntityExternalId, если внешний IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. сотрудника неоднозначен в пределах клиента. Не подставляйте вместо него внешний IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. пользователя клиента.

Шаг 1. Загрузить справочник и элементы

Вызовите Создать задачу синхронизации с типом CUSTOM_STRUCTURES. Пример создаёт новый справочник «Площадка» с двумя элементами:

curl -X POST "https://{tenantHost}/api/v1/clients/{clientId}/bulkDataSyncTasks" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "User-Api-Token: {token}" \
-d '{
"type": "CUSTOM_STRUCTURES",
"data": [
{
"name": "Площадка",
"description": "Место работы сотрудника",
"externalId": "sites",
"colourSchema": {"background": "#E7E9ED", "text": "#576175"},
"version": 0,
"elements": [
{"name": "Москва", "externalId": "site-moscow", "version": 0},
{"name": "Казань", "externalId": "site-kazan", "version": 0}
]
}
]
}'

version: 0 в этом примере предназначена для новых объектов. Перед обновлением существующих справочника и элементов прочитайте их методом Получить справочник по внешнему ID и передайте актуальные version каждого объекта. Не повторяйте первичный запрос с нулевыми версиями как универсальное обновление.

ПолеПравило
name справочникаНепустое название, до 150 символов
descriptionНеобязательное описание, до 1000 символов
externalIdОбязателен для справочника и каждого элемента в массовой синхронизации
colourSchemaПара цветов фона и текста из разрешённых комбинаций; произвольные HEX-цвета не подходят
elements[].parentExternalIdВнешний IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. родительского элемента того же справочника; для корня пропустите поле
elements[].headManagerExternalIdВнешний IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. сотрудника-руководителя; для элемента без руководителя пропустите поле

Для создания иерархии используйте единичное создание элемента: сначала создайте корень, затем дочерние элементы со ссылкой на него. При массовом создании дочернего элемента включайте уже существующего родителя в тот же elements, с его актуальными полями и version. Одной ссылки parentExternalId на родителя вне массива недостаточно: текущая реализация может создать новый элемент без родителя. Элемент не может быть своим родителем; перенос под собственного потомка создаёт недопустимый цикл.

Массовая загрузка создаёт объекты с новыми внешними IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. и обновляет объекты с известными внешними IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID.. Она не удаляет справочники и элементы, которых нет в запросе. elements: [], elements: null или отсутствие elements также не очищают справочник.

Цвета

Используйте согласованную пару из таблицы. Сервер проверяет сочетание фона и текста по своей конфигурации.

Фон backgroundТекст text
#E7E9ED#576175
#E1E7FE#242365
#D7F8FF#1F4B56
#F6E9FD#591E58
#FDEDD8#753B2D
#E3FCE9#254B32
#EFFCD0#455622
#FCFACA#6B4E22
#F7E4E0#661C1B

Шаг 2. Дождаться результата

Ответ на создание задачи содержит её UUID:

{
"result": true,
"bulkDataSyncTask": {"id": "91a2a5fb-2f74-4cf1-9f3c-e3327f4bc3e0"}
}

Этот ответ подтверждает создание задачи, а не завершение загрузки. Вызовите Статус задачи синхронизации, подставив полученный UUID:

curl "https://{tenantHost}/api/v1/clients/{clientId}/bulkDataSyncTasks/{taskId}" \
-H "Accept: application/json" \
-H "User-Api-Token: {token}"
  1. Пока bulkDataSyncTask.state равен QUEUED или IN_PROGRESS, повторяйте чтение статуса с паузой.
  2. После FINISHED проверьте counts.failed и каждую запись data[]. Для нужных объектов ожидайте state: "SYNCED"; одного статуса задачи недостаточно.
  3. При ошибке изучите data[].errorCode, errorMessage и errorData. При FAILED проверьте также bulkDataSyncTask.errorMessage.
  4. Перед назначением признаков перечитайте справочник по внешнему ID и убедитесь, что нужные элементы существуют.

Не считайте пакет единой транзакцией: часть записей может завершиться успешно, а часть — с ошибками. Исправьте ошибочные записи, перечитайте версии уже существующих объектов и только затем повторите загрузку.

Шаг 3. Назначить признаки сотрудникам

Создайте отдельную задачу синхронизации с типом EMPLOYEE_CUSTOM_STRUCTURE_ELEMENTS. В примере employee-001 и company-001внешние IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. уже созданных сотрудника и юрлица:

curl -X POST "https://{tenantHost}/api/v1/clients/{clientId}/bulkDataSyncTasks" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "User-Api-Token: {token}" \
-d '{
"type": "EMPLOYEE_CUSTOM_STRUCTURE_ELEMENTS",
"data": [
{
"externalId": "employee-001",
"legalEntityExternalId": "company-001",
"customStructureElements": [
{"externalId": "site-moscow", "customStructureExternalId": "sites"}
]
}
]
}'

customStructureElements заменяет весь набор признаков указанного сотрудника. Если у сотрудника уже был признак из справочника «Проект», приведённый запрос снимет его. Чтобы сохранить проект, включите его элемент в тот же массив вместе с site-moscow.

Содержимое запросаРезультат
Один или несколько элементовУ сотрудника остаётся ровно переданный набор, по одному элементу из каждого справочника
customStructureElements: []HRlink снимает все признаки этого сотрудника
Сотрудника нет в dataЕго признаки не меняются
Нет обязательного customStructureElementsНекорректный запрос; для снятия признаков передайте явный пустой массив

В стандартной конфигурации в одной задаче допустимо до 500 сотрудников. Каждую пару externalId и legalEntityExternalId указывайте один раз. Если внешний IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. сотрудника неоднозначен, обязательно задайте внешний IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. юрлица. Запускайте задачи последовательно и проверяйте результат каждой. В статусе этой задачи поле type должно содержать EMPLOYEE_CUSTOM_STRUCTURE_ELEMENTS.

Для проверки назначений вызовите Получить сотрудника. В ответе найдите нужное место работы в employee.legalEntities[] и проверьте его customStructureElements.

Единичные операции

ДействиеМетод
Получить список справочниковПолучить справочники
Получить справочник с элементами и версиямиПо UUID или по внешнему ID
Создать справочникСоздать справочник
Обновить справочникПо UUID или по внешнему ID
Создать элементВ справочнике по UUID или по внешнему ID справочника
Обновить элементПо UUID или по внешним ID
Получить данные известных элементовПолучить элементы, с обязательным массивом UUID ids и подходящим permissionContext
Заменить признаки сотрудникаЗаменить элементы сотрудника

Создание и редактирование

Для создания справочника передайте объект с name, description, externalId и colourSchema, без оболочки type/data из массовой задачи. Обязательны name и colourSchema; внешний IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. задайте сразу, если планируете синхронизацию.

Для создания элемента передайте name и externalId. Родителя можно указать через parentId или parentExternalId, руководителя — через headManagerId или headManagerExternalId. Выбирайте один способ идентификации для каждой ссылки. UUID и внешний IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. руководителя относятся к сотруднику.

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

curl "https://{tenantHost}/api/v1/clients/{clientId}/customStructuresByExternalId/sites?permissionContext=CUSTOM_STRUCTURES" \
-H "Accept: application/json" \
-H "User-Api-Token: {token}"

Используйте customStructure.version для изменения справочника и customStructure.elements[].version для изменения выбранного элемента. Передавайте полное нужное состояние редактируемого объекта, включая сохраняемые описание, внешний IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID., родителя и руководителя. Пропуск необязательного поля не стоит использовать как команду «оставить прежнее значение».

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

Заменить или снять признаки одного сотрудника

Метод Заменить элементы сотрудника принимает UUID сотрудника в пути и полный набор элементов в теле. В спецификации он назван «Добавить сотруднику элементы пользовательского справочника», но фактически выполняет замену.

curl -X PUT "https://{tenantHost}/api/v1/clients/{clientId}/employees/{employeeId}/customStructureElements" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "User-Api-Token: {token}" \
-d '{
"customStructureElements": [
{"id": "0f4b4b6e-68c0-4aa9-a195-2f8f8786b111"}
]
}'

Замените UUID из примера на IDidВнутренний идентификатор сущности в формате UUID, генерируемый HRlink при создании. Неизменяемый, используется во всех внутренних операциях. нужного элемента из ответа Получить справочник. Чтобы снять один признак, передайте все остальные. Чтобы снять все, отправьте тем же методом:

{"customStructureElements": []}

Ошибки и контроль результата

СитуацияЧто проверить или изменить
Нет доступаПроверьте пользователя токена, права операции, доступ к юрлицу, отделу и текущим/новым элементам
Справочник или элемент не найденПроверьте клиента и пару внешних IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID.; дождитесь завершения загрузки справочников
Совпадают внешние IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. элементов в разных справочникахНазначайте по UUID единичным методом либо обеспечьте уникальность внешних IDexternalIdВнешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. в клиенте
Два элемента одного справочника у сотрудникаОставьте один элемент этого справочника
Конфликт версииПрочитайте объект заново и передайте его текущую version
Недопустимая цветовая схема (13.5454)Используйте разрешённую пару; при отличиях конфигурации ориентируйтесь на permittedHexColourCodes в данных ошибки
После назначения исчез другой признакВ запросе был неполный набор; восстановите полный набор с учётом актуальных данных сотрудника
Элемент остался после исключения из загрузкиЭто ожидаемо: синхронизация справочников не выполняет удаление

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