Решение владельца 23.10.2026: PR доводим сами, 71ef633 остаётся. design.md: Known issues 1–14 закрыты, открыты 15 (lucide-react в Nexus), 16 (предупреждение вне модалок), 17 (красное поле поиска в [42]); решения без обсуждения (л)–(х), пересмотр (е) и (к). Спека: несохранённые правки в модалках, ошибки [35], [31-00] при неактивных вкладках. tasks.md, web/ARCHITECTURE.md, web/CLAUDE.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.3 KiB
4.3 KiB
Архитектура фронта arm-core/web
SPA поверх API arm-core (/api/v1). Своих данных и бизнес-вычислений нет: всё производное (чек-лист, сводная ОСВ,
статусы) считает сервер, фронт показывает и отправляет действия пользователя. До 21.10.2026 фронт вёлся в отдельном
репозитории RSHB/arm-web и переносился сюда синхронизацией; теперь — только здесь.
Модули
| Модуль | Ответственность | Зависит от |
|---|---|---|
src/api/ |
HTTP-клиент, токен, разбор ошибок | conf/, auth/token |
src/auth/ |
профиль /me, dev-вход, права для меню |
api/ |
src/services/api/ |
вызовы ресурсов arm-core | api/, types/ |
src/store/ |
состояние экранов (Redux Toolkit) | services/api/ |
src/utils/ |
чистые функции: деньги, подписи, скачивание, правила консолидаций | types/ |
src/hooks/ |
общие React-хуки (виртуальный список, предупреждение beforeunload) |
React |
src/types/ |
DTO API (повторяют ../api/src/schemas/) |
— |
src/components/ |
примитивы UI (таблица, теги, заголовок) | antd |
src/widgets/ |
блоки экранов (DocumentReview — проверка документа со сканом, ConsolidatedOsv — сводная ОСВ, FilesDrawer; консолидации — см. ниже) |
components/, store/, services/api/, utils/ |
src/layouts/ |
страницы-маршруты | widgets/ |
Виджеты экранов консолидаций
Требования — ../openspec/changes/consolidations-ui/ (после архивации — ../openspec/specs/consolidations-ui/),
consolidation-setup, consolidated-osv-ui.
| Виджет | Экран | Что делает |
|---|---|---|
ConsoleTable/ConsoleTable.tsx |
[34] | список консолидаций ГК: дерево версий, «Только в работе» (in_work_only), действия строки, меню «⋯» |
ConsoleTable/LockModal.tsx |
[35] | «Взять в работу» (POST …/lock) и перехват с причиной (takeover_reason) |
../utils/consolidations.ts |
— | правила без React: подписи и пояснения статусов версии, ручные переходы (MANUAL_TRANSITIONS — зеркало бэка), своя блокировка, «Версия», in_work_only, причина ≤ 1000 |
ConsoleTable/consts.ts |
— | цвета бейджей статусов версии |
ConsolidatedOsv/OsvTabs.tsx |
[30], [31-00] | вкладки шагов отчёта и «Остались неуказанные ИНН» при уходе с «ОСВ» |
ConsolidatedOsv/useNumberDisplay.tsx |
[30] | «Единицы» и «Знаков после запятой» сводной ОСВ (formatScaledAmount из utils/money.ts) |
../hooks/useBeforeUnload.ts |
— | предупреждение браузера о несохранённых правках в открытой модалке |
ConsoleLegalEntities/ |
[34] | панель «Организации» выбранной версии и чек-лист |
NewConsoleModal/ (CompanyOptionRow.tsx) |
[42] | «Новая консолидация»; строка ЮЛ с ИНН отдельной колонкой |
StatusChangeModal/ChangeStatusModal.tsx |
[33-01] | «Изменить статус» (POST …/status); открывается из шапки layouts/ConsolidatedOsvPage.tsx |
Границы
- Сетевые запросы — только через
src/api/client.ts;fetchнапрямую не вызывается. components/не знают про store и API;types/ни от чего не зависят.utils/не импортирует React, store и API.
Сборка
npm run build → web/dist, Dockerfile ядра кладёт его в api/web/ и FastAPI отдаёт SPA (../README.md).