arm-core/web/ARCHITECTURE.md
Andrey Epifancev 36224dd81c Merge origin/main в AURORA-1589: шапка, «Единицы» и [31-00] — в страницу отчёта с вкладками #158 (ревью #166)
Конфликты после #158 (страница отчёта с вкладками по адресу):
- layouts/ConsolidationReportPage: пояснение статуса, тег, «Изменить статус» и модалка [33-01] из ConsolidatedOsvPage;
- widgets/ConsolidatedOsvContent: «Единицы / Знаков» и onUnmappedChange (unmapped_total наверх);
- OsvTabs: вкладки по адресу из main + модалка [31-00] при уходе с «ОСВ»;
- types/api.ts: обе части.
Спека consolidations-ui: решение (ц), Known issues 11 и 15 (lucide-react в зеркале есть), tasks 2.5, 2.8;
ARCHITECTURE.md и web/CLAUDE.md — новая страница отчёта.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 10:59:14 +04:00

4.3 KiB
Raw Permalink Blame History

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