Модели в рамках одной задачи приходят с parentDepartmentExternalId, но не гарантируется корректный порядок пришедших отделов (может идти сначала дочерний отдел для создания, затем его родительский для создания). Необходимо выстроить модели в правильном порядке перед занесением в task#data для корректной обработки задачи.
Метод
POST /api/v1/clients/:clientId/bulkDataSyncTasks
Тело запроса
Markdown |
---|
``` { "type": "CLIENT_DEPARTMENTS", "data": [ { "syncTypes" : ["DATA_WITH_LEGAL_ENTITY", "DATA_WITH_HEAD_MANAGER"], "name": "Bulk Отдел1", "externalId": "bulk1", "parentDepartmentExternalId" :"extZp", "parentDepartmentId" :"HRL-UUID_1", "legalEntityExternalId" : "legalExt2", "legalEntityId" : "HRL-UUID_2", "headManagerExternalId" : "extManager1", "headManagerId" : "HRL-UUID_3" }, { "syncTypes" : ["DATA_WITH_LEGAL_ENTITY"], "name": "Bulk Отдел2", "externalId": "bulk2", "parentDepartmentExternalId" :"bulk1", "legalEntityExternalId" : "legalExt1" }, { "name": "Bulk Отдел3", "externalId": "bulk3", "parentDepartmentExternalId" :"bulk2" } ] } ``` |
В заданном примере отделы на этапе валидации должны выстроиться в правильном порядке - “Отдел2”, “Отдел3”, “Отдел1”, “Пример отдела”. Задача завершится успешно, при этом синхронизация отдела “Пример отдела” завершится со статусом FAILED и данными об ошибке, что родительский отдел не существует по указанному внешнему ID.
- headManagerExternalId - ID руководителя отдела во внешней системе (ID сотрудника, назначаемого руководителем)
- legalEntityExternalId - ID юрлица во внешней системе
- syncTypes - Список типов используемых при синхронизации данных. Допустимые значения в списке DATA_WITH_LEGAL_ENTITY и DATA_WITH_HEAD_MANAGER
Проверки
Проверки при валидации:
- Если в списке updateTypes присутствует значение DATA_WITH_HEAD_MANAGER, производится валидация, которая относится к сотруднику:
- сотрудник должен существовать по заданному ExternalId Ошибка 13.451.
- сотрудник не должен быть уволен. Ошибка 13.461
- пользователь сотрудника является подтвержденным. Ошибка 13.119
- Если в списке updateTypes присутствует значение DATA_WITH_LEGAL_ENTITY, производится валидация, которая относится к юрлицу:
- юрлицо должно существовать по заданному ExternalId. Ошибка 13.306.
- Во время выполнения запроса для каждого элемента синхронизации (отдела клиента) выполняется валидация корректности структуры отделов - по указанному ID родительского отдела строится новая структура и проверяется на цикличность. 13.373. В дополнение к проверкам на этапе обработки данных синхронизации, добавлены аналогичные проверки на этапе валидации, учитывающие ранее обработанные элементы:
- По указанному ID родительского отдела во внешней системе не существует отдела клиента. 13.355 и 13.356 (для parentDepartmentID и parentDepartmentExternalId)
- Если не указан родительский отдел (или null), то считать это попыткой обновления корневого отдела (совпадение externalId). Иначе ошибка - Не указан ID родительского отдела. 13.354
- Если указан externalId корневого отдела, то не должен быть указан (или null) родительский. Ошибка - попытка обновить родительский отдел для корневого. 13.358
- Переданные данные соответствуют типу данных отдела клиента. (при этом parentDepartmentExternalId не является обязательным полем. В случае отсутствия отдел будет создан/обновлен с корневым отделом в качестве родительского)
- Все ID отдела клиента во внешней системе не равны null.
- Все названия отделов клиента заданы.
- Для каждого отдела клиента ID во внешней системе не равен ID родительского отдела во внешней системе.
- Каждый внешний ID модели в данных для синхронизации уникален.
- Для каждого элемента ID отдела клиента во внешней системе не равен ID родительского отдела клиента во внешней системе (родительский отдел не указывает на сам отдел).
- Тип данных отдела клиента - parentDepartmentExternalId, name, externalId.
Проверки при синхронизации
При создании
- Не указан ID родительского отдела во внешней системе.
- По указанному ID родительского отдела во внешней системе не существует отдела клиента.
При обновлении
- Если не указан родительский отдел (или null), то считать это попыткой обновления корневого отдела (проверить совпадение externalId). Иначе ошибка - не указан родительский отдел.
- Если указан externalId корневого отдела, то не должен быть указан (или null) родительский. Ошибка - попытка обновить родительский отдел для корневого.
Логика синхронизации данных отдела
Если список syncTypes пустой или равен null, то обновление legalEntityId и headManagerId в БД не происходит для сохранения обратной совместимости.
Если в списке syncTypes присутствует значение DATA_WITH_LEGAL_ENTITY, то возможны следующие варианты:
- ID юрлица задан - происходит привязка/изменение юрлица отдела
- ID юрлица равен null - происходит отвязка юрлица от отдела
Если в списке syncTypes присутствует значение DATA_WITH_HEAD_MANAGER, то возможны следующие варианты:
- ID сотрудника задан - происходит назначение/изменение руководителя отдела
- ID сотрудника равен null - происходит снятие руководителя отдела
Поиск документации
Livesearch | ||||
---|---|---|---|---|
|