Andrey Epifancev a2b0a58fd0 docs(openspec): спеки экранов из arm-web@de4e477 перенесены в arm-core (#148)
Спеки consolidated-osv-ui, consolidation-setup, document-review-ui, primary-files-ui
и архив changes demo-prototype, statements-v2. Каталоги архива statement-template-lines
и console-files в arm-core уже заняты другими изменениями и не переносились.
Ссылки на ../arm-web/openspec в CLAUDE.md и web/CLAUDE.md заменены на openspec/specs/*-ui.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 09:58:02 +04:00

8.0 KiB
Raw Blame History

primary-files-ui Specification

Purpose

Аналитик загружает первичные файлы ЮЛ в контексте версии и видит в панели «Первичные документы» [39]/[40] файлы и их документы со статусами распознавания; список обновляется сам, пока идёт распознавание.

Requirements

Requirement: Загрузка файлов ЮЛ в контексте версии

Панель «Файлы ЮЛ» [39]/[40], открытая из строки ЮЛ карточки версии, SHALL загружать выбранные файлы одним запросом 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 аналитик загружает ОСВ-файл и файл, уже загруженный ранее у этого ЮЛ
  • THEN первый показан принятым, второй — отклонённым с текстом причины DUPLICATE_FILE от сервера

Scenario: Все файлы отклонены

  • 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 /consolidations/{consolidation_id}/legal-entities/{id}/files (новые первыми): имя, статус файла по-русски («Обработка» для UPLOADED/PROCESSING, «Ошибка» с причиной из job для ERROR) и вложенные documents[] — тип («ОСВ <счёт>», «Бух. баланс», «ОФР», «Расшифровка», «Прочее»), период («2024 К1», «2024 · 9 мес.», «период не определён»), статус документа («Требуется проверка», «Загружен» для CONFIRMED, «Ошибка»). Документы OSV, BALANCE, 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 сбрасывать список и перечитывать его. При закрытии панели карточка версии SHALL перечитываться (обновить ячейки чек-листа).

Scenario: Опрос останавливается

  • WHEN все файлы активного списка перешли в PROCESSED или ERROR
  • THEN запросы списка файлов прекращаются

Requirement: Предупреждения файла и документа в карточке файла

Карточка файла (панель файлов) SHALL читать job.warnings как список структур {code, severity, message, locator} (после выкладки ядра v5.19 это не строки; у старых заданий ядро отдаёт строки, обёрнутые в LEGACY_WARNING), показывать message и locator, отличая error от info; предупреждения листа ОСВ и документа — из DocumentOut.issues[]. job.mapping_warnings остаётся списком строк.

Scenario: Потерянный ОФР в карточке

  • WHEN у задания job.warnings = [{code: "JSON_FAILED", severity: "error", message: "…", locator: "file:x_ofr.json"}]
  • THEN карточка показывает предупреждение уровня «ошибка» с текстом и местом; экран не падает на объекте вместо строки