Метод «Копировать разделы и дела номенклатуры дел»¶
Endpoint: POST {hostname}/ldm-file-register-service/api/v1/file-registers/copy
Метод позволяет создать новые разделы и дела на основе аналогичных разделов и дел предыдущего периода. При выполнении копирования существующие разделы и дела удаляются и создаются заново, если задана соответствующая настройка.
Сценарий выполнения:
- Верификация входящего сообщения
-
Осуществляется получение содержимого номенклатуры дел источника (разделы и дела):
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.
-
Если 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.
-
Выполняется копирование содержимого номенклатуры источника:
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.
-
Сервис возвращает ответ <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'