- Sidebar: после создания консолидации перечитывается список группы - useLegalEntityFiles: убран biome-ignore в зависимостях эффекта - FilesDrawer: курсор и pointer-events у недоступной кнопки загрузки - design.md: решения R-4..R-8 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
64 lines
6.6 KiB
Markdown
64 lines
6.6 KiB
Markdown
## 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, лишний запрос.
|