Обмен с ядром на core NATS: подписка queue group, ack status=processing сразу по получении, process-local LRU job_id против повторных запросов, публикация результата с повторами; удалены durable consumer / max_deliver / ack_wait. Dockerfile python:3.11-slim; make check / make check-full вместо CI; raisa_* фильтруются при dev-установке. Обновлены proposal, design (решения без обсуждения), specs, tasks, CLAUDE.md, openspec/config.yaml. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
5.3 KiB
5.3 KiB
CLAUDE.md — arm-core (ядро АРМ КА)
Общий контекст системы — ../CLAUDE.md и ../docs/ (workspace). Этот файл — только про этот репозиторий.
Что это
Ядро: справочники, файлы/документы, маппинг результатов распознавания, вычисления консолидации, маршрут согласования,
ЕХ, аудит, права. Единственный писатель в PostgreSQL. Монорепо api/ (FastAPI) + web/ (React/TS) по шаблону
команды «Шаблон FastAPI» (нулевой коммит RSHB/DKB_ARMKA@ba172f8; импорт — ba92222, очистка от домена — 8e1f423).
Соглашения шаблона
Полный текст — ../docs/context/03-architecture.md, раздел «Соглашения шаблона команды». Главное для этого репозитория:
- Команды — из
api/(там.env,pytest.ini,web/для SPA):python run_server.py,alembic upgrade head,pytest,ruff check . && ruff format --check .,mypy src. Изweb/:npm run start|build,npx biome check src,npx tsc --noEmit. Бутстрап —setup/setup.sh(pip/npm через Nexus банка). - Раскладка
api/src/:api/endpoints→services→repositories→models; DTO —schemas/; инфраструктура —core/(config, clients, nats_callback, logger, exception_handlers, auth);db/— engine и сессия. Наши добавления:domain/(чистые функции по §§ правил),api/scripts/(check_dbml_vs_orm.py, seed). - DI — ручные фабрики
Dependsвapi/dependencies/; сессия изget_async_session;storage/nats— изrequest.app.state. - Настройки — pydantic-settings,
api/.env, вложенность__, инфраструктура подOPENBAO__*;DEBUG=trueотключает NATS и middleware РАИСА. Флаги разработки (AUTH_DEV_ISSUER) — отдельные поляSettings, по умолчанию выключены. - БД — схема
dkb(MetaData,search_path, Alembic); PKuuidчерезUUIDPrimaryMixin; ревизии вapi/alembic/versions/; автогенерация — черновик, финал сверяется с DBML скриптом. - Ошибки —
common/exceptions.py→core/exception_handlers.py, ответ{"detail": …}по-русски. Логи — loguru. - Тесты — pytest-asyncio (auto, session loop),
APP_ENV=test,ENV_FILE=.env.test; БД-тесты — на PostgreSQL из compose,domain/— без БД. - Линтеры — backend
ruff+mypy(api/pyproject.toml); frontendbiome(ширина 140, одинарные кавычки) +tsc. - Frontend — React 18 + TS strict, rsbuild, antd 6 (основной UI-кит), Redux Toolkit (
store/slices/), react-router 7;layouts/— страницы,widgets/— блоки,components/— примитивы; env толькоREACT_APP_*черезconf/config.ts; запросы —${Config.API_URL}/api/v1/...;REACT_APP_ROOT_PATH=ROOT_PATHбэка. - Сборка — платформа (Python 3.11) запускает
api/run_server.py(SERVER__HOST/PORT), ресурсы —raisa_config.yml; SPA:web/dist→api/web/.Dockerfile(python:3.11-slim) в корне — только для локального compose (убран из.gitignoreшаблона). CI в репозитории нет: перед PR —make check-full. Без Nexus:make venvставит зависимости безraisa_*, npm-пакетыraisa-*—optionalDependencies. - NATS без JetStream: подписка queue group
arm-coreнаrecognition.result; ack сервисов — конвертprocessing; запрос без ack публикуется повторно (30 с × 3) →dlq; дедуп результатов —recognition_job.result_msg_id.
Зависимости от соседей
- Контракты:
../docs/contracts/recognition-result.schema.json(вход из парсера/шлюза),ex-payload-v1.schema.json. - Фикстуры:
../fixtures/(envARM_KA_FIXTURES); при отсутствии тесты с маркеромfixturesпропускаются с предупреждением. - NATS subjects и схема ключей S3 —
../docs/context/03-architecture.md.
Правила репозитория
- ORM 1:1 с
../docs/model/data-model-v5.13.dbml;api/scripts/check_dbml_vs_orm.py— обязательная проверка CI. - Алгоритмы — только из
../docs/context/05-domain-rules.md; номер § — в docstring. - Вычисляемые объекты консолидации —
api/src/domain/, без ORM-таблиц. - Фронт: пользователь слаб во фронте — для TS/React изменений делай ревью сам и объясняй решения в PR.
- OpenSpec:
openspec/здесь; сквозные изменения — change в../docs.