Модели в рамках одной задачи приходят с parentDepartmentExternalId, но не гарантируется корректный порядок пришедших отделов (может идти сначала дочерний отдел для создания, затем его родительский для создания). Необходимо выстроить модели в правильном порядке перед занесением в task#data для корректной обработки задачи.

Метод

POST /api/v1/clients/:clientId/bulkDataSyncTasks

Тело запроса

```
{
    "type": "CLIENT_DEPARTMENTS",
    "data": [
        {
            "syncTypes" : ["DATA_WITH_LEGAL_ENTITY", "DATA_WITH_HEAD_MANAGER"],
            "name": "Bulk Отдел1", 
            "externalId": "bulk1",
            "parentDepartmentExternalId" :"extZp",
            "legalEntityExternalId" : "legalExt2",
            "headManagerExternalId" : "extManager1"
        },
        {
            "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 - происходит снятие руководителя отдела


Поиск документации