6.6 KiB
Raw Blame History

Context

Панель [39] (widgets/FilesDrawer/FilesDrawer.tsx) берёт current_legal_entity_id и current_version_id из стора, грузит GET /legal-entities/{id}/files?limit=100 хуком useLegalEntityFiles (опрос раз в 5 с, пока есть UPLOADED/PROCESSING) и загружает файлы через uploadFiles(legalEntityId, files, versionId) с query consolidation_version_id. Список консолидаций ГК (IConsolidation[] с consolidation_id, year, quarter, versions[] {id, status}) уже лежит в сторе consolidations. Сквозной дизайн — ../docs/openspec/changes/console-files/design.md.

Decisions

D-1. Консолидация и статус версии — селектор, не новое поле стора. store/slices/consolidations/selectors.ts: чистая функция findCurrentConsolidation(consolidations, versionId) -> { consolidation_id, year, quarter, version_status } | null (ищет версию по id в versions[]) и хук-обёртка useCurrentConsolidation() через useAppSelector. Поле current_consolidation_id, упомянутое в сквозном дизайне, не вводится: оно выводится из уже хранимого и не может рассинхронизироваться с ?version= (R-1).

D-2. Один сервис, два маршрута. listLegalEntityFiles(legalEntityId, consolidationId: string | null) и uploadFiles(legalEntityId, files, consolidationId: string | null): при consolidationId путь /consolidations/{cid}/legal-entities/{le}/files, иначе /legal-entities/{le}/files. Обработка 422 UploadResult без изменений.

D-3. Режим панели — локальное состояние showAll. useLegalEntityFiles(legalEntityId, consolidationId, open): смена consolidationId сбрасывает список и перечитывает (как смена ЮЛ). В панели переключатель antd Switch с подписью «Все документы организации» под кнопкой загрузки; consolidationId = showAll ? null : current.consolidation_id. Если консолидация не найдена (версия не из списка) — панель работает в режиме «все» и переключатель скрыт.

D-4. Подпись консолидации у файла. widgets/FilesDrawer/consolidationLabel.ts: consolidationLabel(fileConsolidationId, consolidations, currentConsolidationId) -> string | null: null, если файл в текущей консоли; «вне консолидации» при null; «2025 К1» (year + quarterShortLabel) по списку; «другая консолидация», если id нет в списке. buildDocumentRows(files, labelFor?) добавляет результат в subtitle последним элементом; FilesList получает labelFor от панели только в режиме «все».

D-5. Загрузка только в версии «в работе». IN_WORK_STATUSES = ['INITIATED', 'DOCUMENTS_PROCESSING', 'DATA_CORRECTION'] в selectors.ts; кнопка «Загрузить документы» disabled, если version_status не в списке, с Tooltip «Загрузка доступна только в версии в работе». Модалка получает consolidationId вместо versionId.

D-6. Опрос без изменений: тот же хук, тот же интервал; перечитывается активный список.

Risks / Trade-offs

  • До выката arm-core#96 на стенд панель получит 404 от маршрутов консолидации — ветка вливается после ядра.
  • limit=100 остаётся: стол консоли меньше списка ЮЛ, ограничение стало мягче.

Decisions made without discussion

  1. 09.10.2026 — R-1: консолидация и статус версии выводятся селектором из consolidations[] + current_version_id, а не хранятся отдельным полем current_consolidation_id (сквозной дизайн docs #90 называл поле). Цена ошибки: низкая — если список ГК в сторе пуст (прямой переход по ссылке до загрузки списка), панель секунду работает в режиме «все»; список грузится той же страницей.
  2. 09.10.2026 — R-2: подпись консолидации показывается только в режиме «Все документы организации» и только у файлов не из текущей консоли; в режиме стола подписи нет (все файлы — этой консоли или подхваченные). Цена ошибки: низкая.
  3. 09.10.2026 — R-3: неизвестный consolidation_id (нет в списке ГК) подписывается «другая консолидация», а не скрывается. Цена ошибки: нулевая.
  4. 10.10.2026 — R-4: ручной прогон на стенде отложен до выката arm-core#96. Цена ошибки: UI-дефект всплывёт позже; PR не вливать до прогона.
  5. 10.10.2026 — R-5: trailer коммита 5b7b02a «Claude Haiku 5.5» вместо «Claude Fable 5.1» оставлен. Цена ошибки: неверная атрибуция в одном коммите.
  6. 10.10.2026 — R-6: промежуточное состояние (tsc-ошибка и versionId в UploadDocumentsModal между Task 2 и Task 3) принято, чинится в Task 3. Цена ошибки: нулевая, закрыто в Task 3.
  7. 10.10.2026 — R-7: consolidation_id в scripts/demo-prepare.sh берётся из карточки версии GET /consolidations/versions/$V, а не из POST /consolidations. Цена ошибки: скрипт демо не запускался на живом ядре.
  8. 10.10.2026 — R-8: после создания консолидации перечитывается список консолидаций группы (I-1). Цена ошибки: правка выходит за Impact proposal, лишний запрос.