# Архитектура фронта 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/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`) | | `ConsoleTable/consts.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`).