- модели LegalEntity.kpp / LegalEntityHistory.kpp (последней колонкой), миграция 0005_dbml_v5_17 (upgrade/downgrade); - domain/kpp.py: 9 символов (4 цифры, 2 цифры/латинские A-Z, 3 цифры), у ИП запрещён, иначе 422 INVALID_KPP; - схемы Create/Update/Out/Detail/HistoryOut, PATCH пишет снимок history и аудит before/after с kpp, поиск q по КПП; - импорт справочника: необязательная колонка КПП (синоним kpp), код INVALID_KPP, update обновляет непустой КПП; - dev-seed: необязательный ключ kpp (значений в данных нет, не выдумываем); - сверка с DBML, Makefile, README, CLAUDE.md, openspec/config.yaml — на v5.17. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
41 lines
3.9 KiB
YAML
41 lines
3.9 KiB
YAML
schema: spec-driven
|
||
|
||
context: |
|
||
Репозиторий arm-core — часть системы АРМ КА (ДКБ, Россельхозбанк): ядро (FastAPI + React), единственный писатель в PostgreSQL: справочники, файлы/документы, маппинг результатов распознавания, вычисления консолидации, согласование, ЕХ, аудит, права.
|
||
Workspace из нескольких репозиториев; общий контекст — ../CLAUDE.md и ../docs/ (репозиторий arm-ka-docs).
|
||
Источники истины по приоритету: ../docs/model/data-model-v5.17.dbml → ../docs/model/entities-v5.17.md →
|
||
../docs/context/05-domain-rules.md → страницы ТЗ в ../docs/source/tz (черновик, старые имена v4).
|
||
Открытые вопросы — ../docs/context/07-open-questions.md; план срезов — ../docs/context/09-delivery-plan.md.
|
||
Фикстуры — ../fixtures (реальные данные, не спецификация формата).
|
||
Стек: Python 3.11, FastAPI, SQLAlchemy 2 async + Alembic, PostgreSQL 16, pydantic v2, NATS без JetStream (ack и повторы — на уровне приложения), S3 (MinIO, miniopy-async),
|
||
loguru; фронт — React + TypeScript, rsbuild, antd, Redux Toolkit, biome. Язык документов и коммитов — русский,
|
||
идентификаторы — английские, как в DBML.
|
||
|
||
rules:
|
||
proposal:
|
||
- Указывать номер среза из 09-delivery-plan.md и затронутые репозитории; сквозные изменения — отдельный change в ../docs
|
||
- Перечислять таблицы DBML v5.17, которые затрагиваются; поля вне DBML не вводить — сначала новая версия DBML
|
||
- Ссылаться на параграфы 05-domain-rules.md для каждого алгоритма; правило, которого там нет, — в 07-open-questions.md
|
||
- Раздел «Non-goals» обязателен
|
||
- Любое допущение по открытому вопросу помечать ASSUMPTION(OQ-nn)
|
||
specs:
|
||
- Сценарии на реальных фикстурах из ../fixtures, синтетика — только для форматов, которых там нет
|
||
- "Для парсеров: ни одного требования, завязанного на букву колонки, номер строки или имя листа"
|
||
design:
|
||
- Вычисляемые объекты консолидации (сводная ОСВ, пары ВГО, шахматка) — чистые функции в domain/, без ORM-таблиц
|
||
- Деньги — Decimal / numeric(18,2); единицы измерения (руб. / тыс. руб.) указывать явно
|
||
tasks:
|
||
- Задачи не больше половины дня, с указанием репозитория и файлов
|
||
- Первые задачи — тесты и фикстуры, затем реализация
|
||
- Последняя задача среза — обновление docs (03-architecture, 07-open-questions) и README
|
||
|
||
operations:
|
||
apply:
|
||
guidance:
|
||
- Работать в ветке; git -C <repo>; один PR на репозиторий
|
||
- Перед кодом перечитать затрагиваемые таблицы DBML и параграфы 05-domain-rules.md
|
||
- После изменений прогонять линтеры и тесты репозитория; для web — tsc, biome, rsbuild build
|
||
archive:
|
||
guidance:
|
||
- "Перед архивированием: DoD среза из ../CLAUDE.md выполнен, открытые вопросы занесены в 07-open-questions.md"
|