Andrey Epifancev
f4699ff86a
chore: отметка задачи 16
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:51:55 +04:00
Andrey Epifancev
70b47a097d
feat: ядро аутентификации (Claims, TokenVerifier, DevHs256Verifier, JwksVerifier, build_verifier)
...
Dev HS256 включается только при AUTH_DEV_ISSUER и DEBUG одновременно; РАИСА — RS256/ES256 по
публичному ключу или JWKS с кэшем. PyJWT[crypto] добавлен в requirements.txt как прод-зависимость.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:51:51 +04:00
Andrey Epifancev
7429240f01
chore: отметка задачи 15
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:41:19 +04:00
Andrey Epifancev
cb2723c3a2
feat: dev-seed (2 РФ и по пользователю на роль) по флагу --dev, проверка ссылок до записи
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:41:07 +04:00
Andrey Epifancev
0f800a1bd0
chore: отметка задачи 14
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:29:37 +04:00
Andrey Epifancev
176999cb71
feat: seed правил элиминации ББ (§4) и чек-листа обязательных документов, проверка счетов до записи
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:29:16 +04:00
Andrey Epifancev
54e072947c
chore: отметка задачи 13
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:17:22 +04:00
Andrey Epifancev
caf009d343
feat: seed плана счетов 94н с субсчетами правил и чек-листа, шаг загрузчика chart_of_account
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:17:18 +04:00
Andrey Epifancev
81af5e7dd7
chore: отметка задачи 12
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:07:20 +04:00
Andrey Epifancev
186ae802e6
feat: seed ролей, прав, матрицы §10 и Головного офиса, загрузчик scripts.seed
...
Двухфазный загрузчик: валидация yaml целиком до записи (SeedError), затем upsert по
натуральному ключу без удалений; run_seed(session, *, dev, seed_dir) без commit, CLI коммитит.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 21:07:07 +04:00
Andrey Epifancev
c8c218e4ac
test: сужен перехват ошибок PostgreSQL в conftest, самодостаточные тесты изоляции транзакции
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 20:54:30 +04:00
Andrey Epifancev
b1f76d0a7d
chore: отметка задачи 11
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 20:47:03 +04:00
Andrey Epifancev
c3cf307866
test: conftest — БД сессии с миграциями, транзакция с откатом на тест, маркер fixtures, тест чтения Decimal
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 20:46:50 +04:00
Andrey Epifancev
78e4a95327
fix: схема dkb создаётся только при отсутствии — миграции работают без права CREATE на базу
...
PostgreSQL проверяет право CREATE на базу раньше IF NOT EXISTS: роль миграций, которой платформа выдала готовую
схему dkb без этого права, падала на CREATE SCHEMA IF NOT EXISTS. env.py (онлайн) проверяет pg_namespace и создаёт
схему только при отсутствии; офлайн-SQL и upgrade() ревизии 0001 — DO-блок с той же проверкой. Тест: схема заранее
во владении отдельной роли, CREATE на базу отозван у PUBLIC — upgrade/check/downgrade/upgrade проходят.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 20:36:13 +04:00
Andrey Epifancev
3a057b2591
chore: отметка задачи 10
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 20:27:29 +04:00
Andrey Epifancev
ed5ed43fa6
feat: миграция 0001_dbml_v5_13 — полный DDL DBML v5.13 с откатом; тесты цикла и make migration-cycle
...
Явный DDL без импорта src.models: схема dkb, 27 enum-типов (явный CREATE/DROP TYPE), 43 таблицы с индексами
(partial unique, NULLS NOT DISTINCT), FK цикла stored_file -> recognition_job отдельным шагом; downgrade —
FK цикла, таблицы в обратном порядке, типы. Тесты (integration, scratch-БД, alembic подпроцессом):
upgrade -> downgrade -> upgrade, пустой compare_metadata и alembic check, каталог = create_all ORM,
поведение partial unique/NULLS NOT DISTINCT/FK-цикла; офлайн-SQL — CREATE SCHEMA первым.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 20:27:23 +04:00
Andrey Epifancev
3b110b6417
feat: alembic env.py — CREATE SCHEMA dkb до таблицы версий, URL из -x dburl, compare_server_default
...
Схема dkb создаётся и фиксируется до context.configure (онлайн) и печатается первой в офлайн-SQL.
URL: -x dburl > sqlalchemy.url, заданный вызывающим кодом (не заглушка driver://) > настройки.
Async-движок из URL напрямую (без configparser-интерполяции %).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 20:27:15 +04:00
Andrey Epifancev
7ea1e67f4e
fix: сверка DBML — табличные UNIQUE и CHECK, действия FK, неизвестные классы типов
...
I-1: табличный UniqueConstraint ORM сверяется как уникальный индекс по колонкам
(флаг колонки unique=True — по-прежнему в свойствах колонки); любое CHECK в ORM —
«отсутствует в DBML».
I-2: у совпавших целей FK сравниваются ON DELETE / ON UPDATE (нет в DBML = NO ACTION),
DEFERRABLE и INITIALLY.
I-3: неизвестный класс типа отрисовывается repr с параметрами (VARCHAR(length=50),
Uuid(as_uuid=False)) и никогда не совпадает с именем типа DBML.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 20:11:25 +04:00
Andrey Epifancev
dd551faf17
chore: отметка задачи 9
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:57:07 +04:00
Andrey Epifancev
e064830702
feat: scripts/check_dbml_vs_orm.py — CLI сверки ORM с DBML (версия, таблицы, колонки, типы, FK, индексы, enum'ы)
...
Ядро сверки перенесено из tests/dbml_parity.py в scripts/dbml_parity.py (единственная
реализация, R-14); tests/dbml_parity.py и dbml_helpers.py — тонкие обёртки с пропуском
теста без docs. Единый формат строк: `<объект>: ожидалось X / фактически Y`,
`<объект>: отсутствует в ORM|DBML`; тип и nullability — одной строкой в нотации DBML.
Версия из шапки DBML сверяется с DBML_VERSION до сравнения таблиц. Коды: 0/1/2.
Без рабочего .env скрипт берёт api/.env.example. Makefile: dbml-check (в check-full),
mypy проверяет scripts.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:56:58 +04:00
Andrey Epifancev
218ce88a31
test: поведенческая проверка partial unique consolidation_lock — первая блокировка фиксируется, снятие проверяется rowcount, имя индекса в ошибке
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:40:11 +04:00
Andrey Epifancev
f30494e7cf
chore: отметка задачи 8
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:33:11 +04:00
Andrey Epifancev
ef55485dfc
test: чётность частей 07–09 с DBML, полнота 43 таблиц и 27 enum, partial unique consolidation_lock на PG16
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:32:48 +04:00
Andrey Epifancev
48525731ff
feat: ORM-модели частей 07–09 DBML v5.13 (консолидация, КФО, аудит/ЕХ, required_document_rule)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:32:48 +04:00
Andrey Epifancev
842bb584ee
chore: отметка задачи 7
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:22:33 +04:00
Andrey Epifancev
856ee2129f
test: чётность частей 04–06 с DBML, NULLS NOT DISTINCT в компараторе, create_all 25 таблиц на PG16
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:22:29 +04:00
Andrey Epifancev
4e363bd00f
feat: ORM-модели частей 04–06 DBML v5.13 (файлы, ОСВ, отчётность)
...
files.py: s3_object, stored_file, document (NULLS NOT DISTINCT), recognition_job;
FK-цикл stored_file <-> recognition_job разорван через use_alter с явным именем.
osv.py: osv_entry. statements.py: financial_statement_meta/column/line/value.
Тест частей 01–03 не привязан к полному составу metadata.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:22:29 +04:00
Andrey Epifancev
24fbe74840
test: общий модуль сверки ORM с DBML (dbml_parity): типы колонок, default, partial WHERE; самопроверка компаратора
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:12:53 +04:00
Andrey Epifancev
8aa1b80c33
test: типизация хелпера проверки partial unique
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:05:56 +04:00
Andrey Epifancev
9936b0a59f
chore: отметка задачи 6
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:05:09 +04:00
Andrey Epifancev
56c98a5d05
test: чётность ORM частей 01–03 с DBML, create_all на временной БД, фикстура scratch_db_url
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:05:04 +04:00
Andrey Epifancev
fb2b9ef9fc
feat: ORM-модели частей 01–03 DBML v5.13 (справочники, доступ, учёт), naming_convention в MetaData
...
16 таблиц: directories, access, accounting; схема dkb, детерминированные имена ограничений.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 19:05:04 +04:00
Andrey Epifancev
a272d6873a
chore: отметка задачи 5
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:47:29 +04:00
Andrey Epifancev
8e6223a273
feat: models/enums.py — 27 enum'ов DBML v5.13, фабрика pg_enum, DBML_VERSION
...
Тест сверяет имена и упорядоченные значения с блоками Enum {} DBML через pydbml.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:47:23 +04:00
Andrey Epifancev
1c56d39b09
test: регрессионные тесты lifespan — старт при недоступных S3/NATS и закрытие созданных ресурсов
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:42:54 +04:00
Andrey Epifancev
12ebb515c2
chore: отметка задачи 4
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:37:05 +04:00
Andrey Epifancev
545994a525
feat: app.py — NATS без nkeys при пустых учётных данных, NATS_ENABLED, nats в /healthcheck, префикс /api/v1
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:36:42 +04:00
Andrey Epifancev
56ab8df3fd
chore: отметка задачи 3
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:29:19 +04:00
Andrey Epifancev
353f3cd46a
build: @biomejs/cli-linux-x64-musl — в optionalDependencies (EBADPLATFORM на macOS)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:29:02 +04:00
Andrey Epifancev
15a06a075d
build: Dockerfile на python:3.11-slim без raisa_*, raisa-* npm в optionalDependencies
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:28:43 +04:00
Andrey Epifancev
e432c1c542
test: test_defaults проверяет умолчания Settings без env-файла
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:23:21 +04:00
Andrey Epifancev
3d1755b7fa
chore: отметка задачи 2
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:17:39 +04:00
Andrey Epifancev
dff1e050b9
feat: Settings читает ENV_FILE, поля auth/NATS/outbox, .env.example и .env.test
...
NATS_SEED/NATS_JWT необязательны (пусто — подключение без nkeys); в app.py
разбор seed защищён от пустого значения (подключение переедет в задаче 22).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:17:19 +04:00
Andrey Epifancev
56ea8dce0c
fix: make venv идемпотентен — uv venv --allow-existing
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:08:37 +04:00
Andrey Epifancev
25a594503a
chore: отметка задачи 1
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:02:43 +04:00
Andrey Epifancev
72415ab891
style: ruff format и правки линтера на каркасе шаблона
...
Без смены поведения: форматирование, сортировка импортов, удаление неиспользуемых
импортов, __all__ в src/db, datetime.UTC, HTTPStatus.NOT_FOUND вместо 404,
аннотация lvl в logger, noqa F401 на проверке доступности raisa_fastapi_protected_api,
mypy: miniopy_async не подтягивается (follow_imports=skip).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:02:19 +04:00
Andrey Epifancev
bf63d3a9dc
chore: mypy — явные флаги strict для models/domain (strict в overrides действует глобально)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:01:48 +04:00
Andrey Epifancev
bb20d323d0
chore: инструменты шаблона — pyproject (ruff, mypy), requirements-dev, Makefile
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:01:18 +04:00
Andrey Epifancev
b018b6b055
docs: design.md — решения 14–23 (рулинги пред-проверки SDD)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 18:00:01 +04:00
Andrey Epifancev
23d2ebd5e7
chore: .gitignore — перенос строки после .cursorignore (шаблон без завершающего перевода строки)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 17:54:50 +04:00