Метод «Копировать разделы и дела номенклатуры дел»

Endpoint: POST {hostname}/ldm-file-register-service/api/v1/file-registers/copy

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

Сценарий выполнения:

  1. Верификация входящего сообщения
  2. Осуществляется получение содержимого номенклатуры дел источника (разделы и дела):

    a. Поиск разделов номенклатуры дел источника:

    i. Поиск разделов первого уровня: отбор записей в таблице «dh_items», где «class_name» равно «fr_dic_file_register_sections» и «fr_section_period» (его id) равно «query» параметра «fileRegisterSourcePeriodId» и «fr_own_organization» равно значению «query» параметра «fileRegisterSourceOrganizationId» и значение параметра «fr_parent_file_register_section» равно «null» или не заполнено.

    ii. Для каждого найденного раздела из этапа 2ai выполняется поиск нижестоящих разделов номенклатуры: отбор записей в таблице «dh_items», где «class_name» равен «fr_dic_file_register_sections» и «fr_parent_file_register_section» равен «id» записи из этапа 2ai.

    iii. Если на предыдущем этапе записи найдены, то выполняется поиск нижестоящих разделов для них аналогично описанному на этапе 2aii и так далее, пока не закончатся нижестоящие разделы.

    b. Поиск связанных дел:

    i. По каждому найденному разделу номенклатуры на этапе 2a выполняется поиск связанных с разделами дел: отбор записей в таблице «dh_relations», где «class_name» равен «fr_relation_section_files» и «source_object_id» равен «id» записи раздела c этапа 2а.

    ii. Для каждой записи, полученной на этапе 2bi, осуществляется получение описания объекта приемника, для этого используется метод «Получение описания дела» GET /api/v1/files/{id}.

    iii. Исключаются из выборки дела, для которых значение параметра «isDeleted» равно «true». Также исключаются соответствующие им связи из этапа 2bi.

  3. Если query параметра запроса «deleteCurrentElements» равно «true», то осуществляется получение содержимого номенклатуры дел приемника (разделы и дела) и выполняется их удаление:

    a. Поиск разделов номенклатуры дел приемника:

    i. Поиск разделов первого уровня: отбор записей в таблице «dh_items», где «class_name» равно «fr_relation_file_register_sections» и «fr_section_period» (его id) равно значению query параметра «fileRegisterTargetPeriodId» и «fr_own_organization» равно значению query параметра «fileRegisterTargetOrganizationId».

    ii. Для каждого найденного раздела из этапа 3ai выполняется поиск нижестоящих разделов номенклатуры: отбор записей в таблице «dh_items», где «class_name» равно «fr_dic_file_register_sections» и «fr_parent_file_register_section» равно «id» записи из этапа 3ai.

    iii. Если на предыдущем этапе записи найдены, то выполняется поиск нижестоящих разделов для них, аналогично описанному на этапе 3aii и так далее, пока не закончатся нижестоящие разделы.

    b. Поиск связанных дел:

    i. По каждому найденному разделу номенклатуры на этапе 3a выполняется поиск связанных с разделами дел: отбор записей в таблице «dh_relations», где «class_name» равно «fr_relation_section_files» и «source_object_id» равно «id» записи раздела c этапа 3а.

    ii. Для каждой записи, полученной на этапе 3bi, осуществляется получение описания объекта приемника. Для этого используется метод «Получить описание дела» GET /api/v1/files/{id}.

    iii. Исключаются из выборки дела, для которых значение параметра «isDeleted» равно «true». Также исключаются соответствующие им связи из этапа 3bi.

  4. Выполняется копирование содержимого номенклатуры источника:

    a. Осуществляется получение описания бизнес-объектов, идентификаторы которых указаны в параметрах «fileRegisterTargetOrganizationId» и «fileRegisterTargetPeriodId».

    b. Создаются копии разделов номенклатуры:

    i. Сначала копируются разделы первого уровня, найденные на этапе 2ai. Используется метод «Создать раздел номенклатуры» POST /api/v1/sections, где передаются параметры бизнес-объекта, указанные в таблице (таблица Маппинг полей при копировании раздела номенклатуры первого уровня).

    ii. Создаются копии разделов, найденных на этапе 2bii. Параметры создаваемого при копировании раздела указаны в таблице (таблица Маппинг полей при копировании раздела номенклатуры второго и последующих уровней).

    iii. Создаются копии разделов, найденных на этапе 2biii и так далее. При этом в качестве вышестоящих разделов передаются разделы, созданные на этапе 4bii. Параметры создаваемого при копировании раздела указаны в таблице (таблица Маппинг полей при копировании раздела номенклатуры второго и последующих уровней).

    c. Для дел, найденных на этапе 2b, у которых значение параметра «fr_transit_file» равно «true» и значение параметра «fr_file_closing_date» равно «null», копирование не выполняется, они переносятся в новую номенклатуру как есть (то есть создаются только новые связи с номенклатурой дел или разделами номенклатуры):

    i. Для связей, найденных на этапе 2bi (с учетом ограничения из 2biii) выполняется создание связи в таблице «dh_relations», где «class_name» равно «fr_relation_section_files & source» и равно одному из разделов номенклатуры, созданному в результате копирования на этапах 4bi-4biii & target – само дело.

    d. Для дел, найденных на этапе 2b (с учетом ограничения из 2biii), у которых значение параметра «fr_transit_file» равно «false» или значение параметра «fr_transit_file» равно «true» и «fr_file_closing_date» не имеет значение «null», создаются их копии и копии связей.

    i. Создание копии дел с помощью метода «Создать новое дело» POST /api/v1/files, передавая в теле сообщения параметры из этапа 4bii. Особенности заполнения параметров дела представлены в таблице (таблица Маппинг полей при копировании дела).

    ii. Для связей, найденных на этапе 4bi, выполняется создание связи в таблице «dh_relations», где значение параметра «class_name» равно «fr_relation_section_files» и «source» равно одному из разделов номенклатуры, созданному в результате копирования на этапах 4bi-4biii & target – копия дела, созданная на этапе 4ci.

  5. Сервис возвращает ответ <200 OK> и массив ItemsDto (из разделов, созданных на этапе 4bi) или пустой массив.

Маппинг полей при копировании раздела номенклатуры первого уровня

Параметры Принцип заполнения
name Копируется из раздела источника
fr_own_organization Из query параметра «fileRegisterTargetOrganizationId». Title берется из этапа 4a. Параметр «uri» формируется по шаблону: LDM:///<ldm-file-register-service>/<classCode справочника>/<id записи справочника из fileRegisterTargetOrganizationId>#applicationCode=<значение настройки для текущего сервиса с ключом ldm.fileRegisterService.applicationCode>&forrmCode=<значение настройки для текущего сервиса с ключом ldm.fileRegisterOwnOrganisation.formCode>
fr_department Копируется из раздела источника
fr_system_code -
fr_parent_file_register_section Копируется из раздела источника
fr_section_index Копируется из раздела источника
fr_section_period Из query параметра «fileRegisterTargetPeriodId». Title берется из этапа 4a. Параметр «uri» формируется по шаблону: LDM:///<ldm-file-register-service>/<classCode справочника>/<id записи справочника из fileRegisterTargetPeriodId>#applicationCode=<значение настройки для текущего сервиса с ключом ldm.fileRegisterService.applicationCode>&forrmCode=<значение настройки для текущего сервиса с ключом ldm.fileRegisterPeriod.formCode>

Маппинг полей при копировании раздела номенклатуры второго и последующих уровней

Параметры Принцип заполнения
name Копируется из раздела источника
fr_own_organization Из query параметра «fileRegisterTargetOrganizationId». Title берется из этапа 4a. Параметр «uri» формируется по шаблону: LDM:///<ldm-file-register-service>/<classCode справочника>/<id записи справочника из fileRegisterTargetOrganizationId>#applicationCode=<значение настройки для текущего сервиса с ключом ldm.fileRegisterService.applicationCode>&forrmCode=<значение настройки для текущего сервиса с ключом ldm.fileRegisterOwnOrganisation.formCode>
fr_department Копируется из раздела источника
fr_system_code -
fr_parent_file_register_section Разделы, созданные на предыдущем этапе копирования 5ai или 5aii. Параметр «uri» для вышестоящего атрибута формируется по шаблону: LDM:///<ldm-file-register-service>/<classCode справочника>/<id записи справочника>#applicationCode=<значение настройки для текущего сервиса с ключом ldm.fileRegisterService.applicationCode>&forrmCode=<значение настройки для текущего сервиса с ключом ldm.fileRegisterSections.formCode>
fr_section_index Копируется из раздела источника
fr_section_period Из query параметра «fileRegisterTargetPeriodId». Title берется из этапа 4a. Параметр «uri» формируется по шаблону: LDM:///<ldm-file-register-service>/<classCode справочника>/<id записи справочника из fileRegisterTargetPeriodId>#applicationCode=<значение настройки для текущего сервиса с ключом ldm.fileRegisterService.applicationCode>&forrmCode=<значение настройки для текущего сервиса с ключом ldm.fileRegisterPeriod.formCode>

Маппинг полей при копировании дела

Параметры Принцип заполнения
name Копируется из дела источника
fr_file_index Копируется из дела источника
fr_personnel_file Копируется из дела источника
fr_file_storage_type Копируется из дела источника
fr_file_type Копируется из дела источника
fr_fund Копируется из дела источника
fr_transit_file Копируется из дела источника
fr_file_opening_date По идентификатору из входного параметра «fileRegisterTargetPeriodId» осуществляется поиск записи в справочнике (ITEM) с кодом класса «fr_dic_file_register_periods». В копии дела значение параметра «fr_file_opening_date» устанавливается «fr_start_period_date» из найденной ранее записи справочника
fr_file_closing_date Не заполняется
fr_file_register_section_id Заполняется идентификатором раздела номенклатуры, который соответствует копии раздела из п. 4b c с идентификатором из аналогичного атрибута исходного дела
fr_file_state Определяется значение ITEM из справочника с кодом класса «fr_dic_file_state», у которого «fr_system_code» равен «REGISTRATION». Параметр «uri» для атрибута «fr_file_state» формируется по шаблону: LDM:///<ldm-digital-archive-service>/<classCode справочника>/<id записи справочника>#applicationCode=<значение настройки для текущего сервиса с ключом ldm.digitalArchiveService.applicationCode>&forrmCode=<значение настройки для текущего сервиса с ключом ldm.fileState.formCode>
fr_standart_document_types Копируется из дела источника
fr_file_destruction_date Не заполняется
fr_archive_cipher Не заполняется
fr_file_storage_start_date Если «fr_transit_file» равно «false», параметр «fr_file_storage_start_date» (дата начала хранения дела) рассчитывается и заполняется следующим значением: значение параметра «fr_start_period_date» элемента справочника «Периоды номенклатуры дел» (fr_dic_file_register_periods), который выбран во входящем параметре «fileRegisterTargetPeriodId» метода + 1 год. Например, если выбран период 2025, fr_start_period_date=01.01.2025, то дата начала хранения дела будет равна 01.01.2026
fr_file_storage_end_date Не заполняется, рассчитывается при создании дела
fr_file_destruction_act Не заполняется
fr_storage_date_expired false

Маппинг параметров запроса метода «Копировать разделы и дела номенклатуры дел»

Входящие параметры Тип данных Способ передачи параметров Требования к заполнению
fileRegisterSourcePeriodId string($uuid) Query Копируемый период номенлатуры дел
fileRegisterSourceOrganizationId string($uuid) Query Копируемая организация номенлатуры дел
fileRegisterTargetPeriodId string($uuid) Query Приемник данных периода номенлатуры дел
fileRegisterTargetOrganizationId string($uuid) Query Приемник данных организации номенлатуры дел
deleteCurrentElements boolean Query Признак удаления номенклатуры дел

Пример запроса:

curl -X 'POST' \
  'https://editor-next.swagger.io/api/v1/file-registers/copy' \
  -H 'accept: text/plain'