Синхронизация пользователей

Как наполнять и поддерживать в актуальном состоянии справочники сотрудников и оргструктуры: что для этого есть в самом продукте (REST API, поля моделей, ключи сопоставления) и какие готовые внешние скрипты можно использовать.

Задача

Инвентаризация ведет справочник сотрудников (пользователей) и оргструктуру. Заполнять их можно вручную, но в организации эти данные обычно уже есть в кадровой системе и/или Active Directory. Продукт рассчитан на то, что внешние скрипты будут:

  • импортировать сотрудников и оргструктуру из кадровой системы (SAP, 1C и т.п.);
  • обогащать записи данными из Active Directory (логины, email) и/или выгружать данные обратно в AD;
  • забирать данные из инвентаризации в другие ИС (например, ФИО по внутреннему номеру телефона для CallerID).

Механизм

Встроенного планировщика синхронизации в продукте нет - обмен выполняется внешними скриптами через REST API:

  • /web/api/users - CRUD и поиск по сотрудникам. Поиск возможен по id, ФИО (name), табельному номеру (employee_id/num), логину (login), организации (org_id), внешнему ключу (uid), признаку увольнения (uvolen);
  • /web/api/org-struct - CRUD по подразделениям оргструктуры (древовидная структура; для сопоставления с кадровой системой у подразделений есть внешние ключи hr_id/parent_hr_id).

Полное описание API доступно в Swagger UI приложения (/site/api-doc, доступ - с правами администратора).

Модель сотрудника содержит, в частности, поля для кадровых данных (табельный номер, тип трудоустройства, должность, подразделение, даты приема/увольнения, признак “уволен”, день рождения), контакты (внутренний, городской, мобильный телефоны, email) и учетные данные (логин AD, внешний ключ uid).

Отдельно про поле Руководитель (manager_id): это настоящая ссылка на запись сотрудника - целочисленный id записи в инвентаризации, а не кадровый идентификатор. Скрипт синхронизации, проставляющий руководителя, должен сначала найти запись руководителя (например, по своему ключу uid или табельному номеру через /web/api/users) и передать в manager_id полученный целочисленный id.

Готовые скрипты

Обзор всех практически реализованных интеграций - на странице интеграции с внешними ИС.

Несколько трудоустройств

С точки зрения кадров один человек может иметь несколько трудоустройств (несколько записей с разными табельными номерами, в т.ч. одновременно по разным типам трудоустройства), а с точки зрения большинства информационных систем есть один пользователь с одной должностью в одной организации. В инвентаризации каждое трудоустройство - отдельная запись сотрудника. Чтобы выбрать, какое из трудоустройств считать “основным” (например, выгружать в AD), логин прописывается только у одной из записей человека (логин уникален в пределах БД).

Управление синхронизацией

  • У записи сотрудника есть флаг “Отключить синхронизацию” (nosync) - запрет внешнему скрипту синхронизации с кадровой БД обновлять эту запись (проверка флага должна быть реализована во внешнем скрипте). Удобно для служебных/ручных записей, которых нет в кадровой системе.
  • Параметр user.name_as_uid.enable разрешает использовать полное ФИО как ключ для переназначения логина (по умолчанию выключено).