2026-10-09 23:39:35 +04:00

5.4 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 (нет в списке ГК) подписывается «другая консолидация», а не скрывается. Цена ошибки: нулевая.