arm-core/web/README.md
Andrey Epifancev 1a35829074 fix(web): синхронизация встроенного фронта с arm-web@test (4a02512) (#133)
Перенесён диапазон arm-web 0f2bbc8..4a02512 (23 коммитов, 51 файлов набора
синхронизации) скриптом docs/scripts/sync-web.sh. После переноса web/ и
arm-web@test идентичны по набору. Коммиты arm-web:
- 4fb477d Подпись пустой цели «цель не заполнена», тесты null/null (ревью I-1, M-1, M-2, M-4)
- cb36ec8 Нарушения проверок: expected/actual и индекс колонки могут быть null (#45)
- b4b8c04 openspec(statements-v2): решения по итогам прогона в браузере (T11.D-1…D-5, #43)
- aa3054e docs(arm-web): экран формы v5.19 — README и карта модулей (#43)
- 88a4920 fix(arm-web): нераспознанный текст суммы, пустые подстроки без расшифровок, свёрнутый список предупреждений (#43)
- a3199d6 fix(arm-web): вёрстка экрана проверки формы — ширины колонок, значки в ячейке, шапка, ссылка кнопкой (#43)
- 12fcea7 fix(statement): защитные значения по умолчанию для ядра без v5.19 (M-2, #43)
- 4783593 fix(statement): ссылка на строки без кода всегда видна, сортировка по row_index, Alert для ошибки скрытого поля кода, постоянный aria-label (T9.1, T9.2, T9.4, T7.1, T8.1, T3.3, M-3, #43)
- d965fdc fix(statement): округление уверенности в подсказках шапки, пустые тексты в подсказках, комментарий шапки (T5.1, T5.2, M-1, T3.1, #43)
- 6556e3d fix(statement): не отправлять поля шапки, равные текущим (I-2, #43)
- 8d2deb9 docs(openspec): решения без обсуждения из исполнения и имя кнопки «Подтвердить данные» (#43)
- fc5cc16 fix(files): клики внутри popover не открывают строку, ключи и aria-label (#43)
- fdf9358 feat(files): предупреждения файла структурами и предупреждения документа в панели файлов и у ОСВ (#43)
- 5b11f2d feat(statement): блокировка подтверждения при строках без кода, LINES_UNRESOLVED и DUPLICATE_FORM (#43)
- a779d2a feat(statement): подтверждение ячеек, дата колонки, наименование организации и подтверждение даты (#43)
- d416422 feat(statement): правка строк — код с подсказкой из справочника, меню строки, LINE_CODE_TAKEN (#43)
- ef4d325 refactor(statement): один черновик правок и сборка единственного PATCH (#43)
- 8ab116f feat(statement): шапка — организация, поля на проверку и подсказки распознанного текста (#43)
- 4ae8643 feat(statement): предупреждения и нарушения у строк, ячеек, колонок и в списке документа (#43)
- 34d523a feat(statement): вид строк по статусам, подсветка по needs_review, переключатель расшифровок (#43)
- c2f33e7 feat(statement): раскладка строк без кода и расшифровок на своих местах (#43)
- e4ee7f0 fix(fixtures): коды соотношения, column_index, порядок edition_lines (#43)
- f83b035 feat(types): API формы v5.19 — статусы строк, needs_review, issues, предупреждения файла (#43)

Co-Authored-By: sync-web.sh <noreply@aepif.ru>
2026-10-18 22:56:49 +04:00

7.9 KiB
Raw Blame History

arm-web — фронт АРМ КА (демо-прототип)

SPA кредитного аналитика поверх API arm-core (/api/v1). Контекст системы — ../CLAUDE.md, архитектура — ARCHITECTURE.md, соглашения репозитория — CLAUDE.md.

Запуск

  1. make install.
  2. Стенд arm-core — по ../docs/dev/qa-guide.md §4 (ядро на localhost:8000, DEBUG=true, make seed-dev); для распознавания PDF — профиль services (§6.8: tabular-parser, scan-gateway, scan-emulator).
  3. make start — dev-сервер rsbuild (сам ставит REACT_APP_ROOT_PATH=/; без этого приложение ждёт префикс /aurora/apps/fastapi-dkb-armka и показывает белый экран, см. qa-guide §4.3). Запросы /api проксируются на ARM_CORE_URL (по умолчанию http://localhost:8000), REACT_APP_API_URL в dev не нужен.
  4. Вход — через dev-форму (POST /dev/token), например ka_go@armka.local.

Форматирование и линтеры

Перед PR — npm run format (или make format): eslint --fix → biome check --write (импорты, безопасные исправления) → prettier --write. Команда приводит src/ к единому виду; повторный запуск ничего не меняет.

  • Prettier (.prettierrc.json) — единственный форматтер: табы, ширина 140, одинарные кавычки (в CSS — двойные), > тега JSX на той же строке. Форматтер biome выключен, чтобы два инструмента не спорили о пробелах.
  • ESLint (eslint.config.js) — правила, повторяющие biome.json; biome остаётся линтером в make lint/make check.
  • npm run lint — eslint + prettier --check без исправлений: ошибки валят команду, предупреждения (any, console, зависимости хуков) — нет.
  • В редакторе: расширения Prettier и ESLint, «Format on Save» с Prettier — результат совпадёт с npm run format.

Проверка

make check — install, biome + ESLint + Prettier (make lint), tsc --noEmit, vitest, rsbuild build. Зелёным считается всё вместе.

Демо-сценарий

Пользователь с правами на ГК «Русский бисквит» (ka_go@armka.local).

Данные стенда уже подготовлены: консолидация РБ ГСК 2024 Q3 создана (версия 0437f8be-019c-4dbb-9776-08c306aa38cc, ОСВ загружены и подтверждены), aep_6.pdf уже загружен Счастливочной. Повторы дают штатные ошибки (409 CONSOLIDATION_EXISTS, DUPLICATE_FILE) — их можно показать как обработку ошибок.

  1. Кнопка «Новая консолидация» — в боковом меню (действует на всё приложение, не на выбранную группу); в модалке выбирается ГК «Русский бисквит», ГСК, период — другой, например 2024 Q2 или 2025 Q3 (для 2024 Q3 вернётся 409 CONSOLIDATION_EXISTS) → члены ГСК отмечены → «Создать» → открывается страница группы с новой версией.
  2. Дальше работаем на подготовленной версии 2024 Q3 (/groups/<id>?version=0437f8be-019c-4dbb-9776-08c306aa38cc): панель «Организации» → ЮЛ → «Файлы» → документы ОСВ в статусе «Загружен». Загрузка ОСВ вручную — ../fixtures/osv/{rb,schastl}/2024-Q{1,2,3}/*; для новой версии быстро — scripts/demo-prepare.sh <version_id> [email] (каталог фикстур — FIXTURES_DIR, по умолчанию ../../fixtures относительно репозитория; в конце печатает сводку).
  3. ББ/ОФР: открыть уже загруженный ББ Счастливочной (или загрузить ../fixtures/ocr/aep_6.pdf РБ) → скан слева, форма справа, исправить ячейку. ИНН и дата отчёта в aep_6 не распознаются: в шапке ввести дату строго 2024-09-30 (ГГГГ-ММ-ДД) и нажать «Сохранить», иначе «Подтвердить данные» даст 409 PERIOD_REQUIRED. Принять нарушения с комментарием (если есть), подтвердить.
  4. «К отчётности» → сводная ОСВ; фильтр «Счастливочная» + «бисквит» → строка 60.01 (сальдо нач. Кт 4 454 151.93, обороты Дт 128 058 143.65, Кт 125 950 450.77, сальдо кон. Кт 2 346 459.05, GSK); «Скачать xlsx».

Ожидаемая сводка на чистой версии (qa-guide §7.2): строк: 1385 документов: 22 несопоставленных: 1260 пробелов: 7. Если на стенде раньше вручную сопоставляли контрагентов (K14), алиасы сохраняются между версиями, и «несопоставленных» будет меньше (на стенде прогона — 1349); остальные цифры не меняются.

Экран проверки формы ББ/ОФР (контракт 2.0, ядро v5.19)

Что нового (#43): строки формы показываются по статусам (ok / нераспознанный код / без кода / расшифровка) на своих местах; предупреждения и нарушения стоят значками у ячеек, колонок, строк и полей шапки, а полный список свёрнут до трёх записей («Показать все»); в режиме правки можно назначить код строке, пометить её расшифровкой и подтвердить значение, код или дату колонки — всё уходит одним PATCH; кнопка «Подтвердить данные» заблокирована, пока есть строки без кода (ссылка «Разберите строки без кода: N» ведёт к первой); панель файлов ЮЛ показывает счётчик предупреждений файла и документа. Карта модулей — в CLAUDE.md, раздел «Архитектура».

Ограничения прототипа

  • Нет блокировки версии («Взять в работу»), сопоставления контрагентов, экрана чек-листа, комментариев, удаления файлов, смены периметра и ручных переходов статусов.
  • Нет правки строк ОСВ (в API нет), картинок страниц и координат ячеек в скане (в API нет).
  • Нет генерации типов из OpenAPI и автотестов компонентов (vitest — только чистые функции).
  • Нет сборки под контур и переноса в arm-core/web — отдельной задачей после демо.
  • Изменений arm-core / scan-gateway нет: найденные пробелы — отдельные issue в тех репозиториях.