5.4 KiB
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
- 09.10.2026 — R-1: консолидация и статус версии выводятся селектором из
consolidations[]+current_version_id, а не хранятся отдельным полемcurrent_consolidation_id(сквозной дизайн docs #90 называл поле). Цена ошибки: низкая — если список ГК в сторе пуст (прямой переход по ссылке до загрузки списка), панель секунду работает в режиме «все»; список грузится той же страницей. - 09.10.2026 — R-2: подпись консолидации показывается только в режиме «Все документы организации» и только у файлов не из текущей консоли; в режиме стола подписи нет (все файлы — этой консоли или подхваченные). Цена ошибки: низкая.
- 09.10.2026 — R-3: неизвестный
consolidation_id(нет в списке ГК) подписывается «другая консолидация», а не скрывается. Цена ошибки: нулевая.