diff --git a/openspec/changes/console-files/.openspec.yaml b/openspec/changes/archive/2026-10-10-console-files/.openspec.yaml similarity index 100% rename from openspec/changes/console-files/.openspec.yaml rename to openspec/changes/archive/2026-10-10-console-files/.openspec.yaml diff --git a/openspec/changes/console-files/design.md b/openspec/changes/archive/2026-10-10-console-files/design.md similarity index 100% rename from openspec/changes/console-files/design.md rename to openspec/changes/archive/2026-10-10-console-files/design.md diff --git a/openspec/changes/console-files/proposal.md b/openspec/changes/archive/2026-10-10-console-files/proposal.md similarity index 100% rename from openspec/changes/console-files/proposal.md rename to openspec/changes/archive/2026-10-10-console-files/proposal.md diff --git a/openspec/changes/console-files/specs/primary-files-ui/spec.md b/openspec/changes/archive/2026-10-10-console-files/specs/primary-files-ui/spec.md similarity index 100% rename from openspec/changes/console-files/specs/primary-files-ui/spec.md rename to openspec/changes/archive/2026-10-10-console-files/specs/primary-files-ui/spec.md diff --git a/openspec/specs/primary-files-ui/spec.md b/openspec/specs/primary-files-ui/spec.md index 741a071..43988cd 100644 --- a/openspec/specs/primary-files-ui/spec.md +++ b/openspec/specs/primary-files-ui/spec.md @@ -7,11 +7,14 @@ ### Requirement: Загрузка файлов ЮЛ в контексте версии Панель «Файлы ЮЛ» [39]/[40], открытая из строки ЮЛ карточки версии, SHALL загружать выбранные файлы одним запросом -`POST /legal-entities/{id}/files?consolidation_version_id={version_id}` (multipart, поле `files` повторяется), без -других полей формы. Тип и период документа не спрашиваются. После ответа панель SHALL показать итог: принятые файлы -(`accepted[].name`) и отклонённые с причиной (`rejected[].name` + `message`). Ответ 422 с телом `UploadResult` SHALL -трактоваться как «ни один файл не принят» с тем же показом `rejected[]`; ответ 422 с `detail` (`ENTITY_NOT_IN_PERIMETER`) -и прочие ошибки — показом `message`. +`POST /consolidations/{consolidation_id}/legal-entities/{legal_entity_id}/files` (multipart, поле `files` повторяется), +где `consolidation_id` — консолидация открытой версии (из списка консолидаций ГК в сторе по `current_version_id`), +без других полей формы и без query `consolidation_version_id`. Тип и период документа не спрашиваются. Кнопка +«Загрузить документы» SHALL быть недоступна с подсказкой «Загрузка доступна только в версии в работе», если статус +открытой версии не `INITIATED`, `DOCUMENTS_PROCESSING` или `DATA_CORRECTION`. После ответа панель SHALL показать итог: +принятые файлы (`accepted[].name`) и отклонённые с причиной (`rejected[].name` + `message`). Ответ 422 с телом +`UploadResult` SHALL трактоваться как «ни один файл не принят» с тем же показом `rejected[]`; ответ 422 с `detail` +(`ENTITY_NOT_IN_PERIMETER`), 409 (`CONSOLIDATION_NOT_EDITABLE`) и прочие ошибки — показом `message`. #### Scenario: Часть файлов отклонена - **WHEN** аналитик загружает ОСВ-файл и файл, уже загруженный ранее у этого ЮЛ @@ -21,23 +24,44 @@ - **WHEN** сервер отвечает 422 с телом `UploadResult` - **THEN** панель показывает каждый отклонённый файл с причиной, а не общую ошибку +#### Scenario: Загрузка идёт в консолидацию +- **WHEN** панель открыта из версии консолидации 2024 Q3 и аналитик загружает файл +- **THEN** запрос уходит на `/consolidations/{id консолидации 2024 Q3}/legal-entities/{id ЮЛ}/files` без query; после + приёма файл появляется в столе панели + +#### Scenario: Версия не в работе +- **WHEN** панель открыта из версии в статусе `CANCELLED` +- **THEN** кнопка «Загрузить документы» недоступна, при наведении — подсказка + ### Requirement: Список файлов и документов ЮЛ -Панель SHALL показывать файлы ЮЛ из `GET /legal-entities/{id}/files` (новые первыми): имя, статус файла по-русски +Панель SHALL по умолчанию показывать рабочий стол консолидации открытой версии — +`GET /consolidations/{consolidation_id}/legal-entities/{id}/files` (новые первыми): имя, статус файла по-русски («Обработка» для `UPLOADED`/`PROCESSING`, «Ошибка» с причиной из `job` для `ERROR`) и вложенные `documents[]` — тип («ОСВ <счёт>», «Бух. баланс», «ОФР», «Расшифровка», «Прочее»), период («2024 К1», «2024 · 9 мес.», «период не определён»), статус документа («Требуется проверка», «Загружен» для `CONFIRMED`, «Ошибка»). Документы `OSV`, `BALANCE`, -`INCOME` SHALL быть ссылками на `/documents/:document_id`. +`INCOME` SHALL быть ссылками на `/documents/:document_id`. Переключатель «Все документы организации» SHALL переключать +панель на `GET /legal-entities/{id}/files`; в этом режиме у файла не из текущей консолидации в подписи SHALL стоять его +консолидация: «<год> К» по списку консолидаций ГК, «вне консолидации» при `consolidation_id = null`, «другая +консолидация», если id нет в списке. Если консолидация открытой версии не определена (версии нет в списке ГК), панель +SHALL работать в режиме «все» без переключателя. #### Scenario: PDF с двумя формами - **WHEN** файл `aep_6.pdf` распознан - **THEN** под файлом видны два документа — «Бух. баланс» и «ОФР» со статусом «Требуется проверка», каждый открывает экран проверки +#### Scenario: Стол и все документы +- **WHEN** у ЮЛ есть файлы, загруженные в консолидации 2024 Q3 и 2024 Q4, и файл, загруженный без контекста; панель + открыта из версии 2024 Q3 +- **THEN** по умолчанию виден только файл 2024 Q3; после переключателя «Все документы организации» видны все три, у + файла 2024 Q4 подпись «2024 К4», у файла без контекста — «вне консолидации», у файла 2024 Q3 подписи нет + ### Requirement: Опрос до окончания распознавания -Пока панель открыта и среди файлов есть `UPLOADED` или `PROCESSING`, панель SHALL перечитывать список раз в 5 секунд и -SHALL прекратить опрос, когда таких файлов нет или панель закрыта. При закрытии панели карточка версии SHALL +Пока панель открыта и среди файлов активного списка (стол или все документы) есть `UPLOADED` или `PROCESSING`, панель +SHALL перечитывать этот список раз в 5 секунд и SHALL прекратить опрос, когда таких файлов нет или панель закрыта. +Переключение режима или смена ЮЛ SHALL сбрасывать список и перечитывать его. При закрытии панели карточка версии SHALL перечитываться (обновить ячейки чек-листа). #### Scenario: Опрос останавливается -- **WHEN** все файлы ЮЛ перешли в `PROCESSED` или `ERROR` +- **WHEN** все файлы активного списка перешли в `PROCESSED` или `ERROR` - **THEN** запросы списка файлов прекращаются