43 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Proposal
## Why
Нормализация форм должна подключаться к arm-core как устанавливаемая Python-библиотека, а не как синхронизируемая копия исходников. При переходе обнаружились две ошибки поставки: YAML-правила не попадали в пакет, а отсутствие внутреннего `VERSION` давало `None` и нарушало обязательность `service.statements_version` для форм.
Change ретроспективно фиксирует работу из этой задачи и оставшиеся проверки; он не объявляет весь переход завершённым.
## What Changes
- Добавлена цель `make install`: создание/использование `api/.venv`, установка или переустановка `pylib-ai-arm-statements` из `STATEMENTS_DIR` (по умолчанию `../pylib_ai_arm_statements`).
- `make venv` исключает `raisa_*` и `pylib_ai*` из `api/requirements.txt`. Обработка `requirements-dev.txt` сохранена: исключаются только вложенные `-r`. В текущем Makefile после requirements также устанавливается локальная библиотека.
- В текущем рабочем дереве закреплена зависимость `pylib_ai_arm_statements==0.1.1`, удалена копия `api/arm_statements/`, отключён `statements-check` в `check-full`. Это наблюдаемое состояние перехода, включая изменения пользователя.
- Импортируемое имя остаётся `arm_statements`. Пробная замена на `pylib_ai_arm_statements` и настройка mypy для этого имени отменены по просьбе пользователя.
- В соседней библиотеке исправлен `MANIFEST.in`: Python-файлы и YAML включаются из `arm_statements`, а не из прежнего каталога `pylib_ai_arm_statements`.
- В библиотеке `statements_version()` при отсутствии или пустом стандартном маркере `VERSION` использует метаданные дистрибутива. Явно переданный отсутствующий/пустой файл по-прежнему даёт `None`.
- Обновлены README, CLAUDE.md, комментарии, описание JSON-контракта и пометки в исторических планах/архивных OpenSpec-документах: теперь это отдельная библиотека; `statements_version` может быть версией дистрибутива.
- Сохранены расчёты, проверки §7, импортный API, схема результата и обязательность версии при наличии форм.
## Capabilities
### New Capabilities
- `statement-library`: поставка правил и кода как Python-библиотеки, локальная установка и определение версии.
### Modified Capabilities
- `documents-api`: использование установленной библиотеки при пересчёте и проверке словарей; сравнение версии задания с версией библиотеки вместо версии встроенной копии.
- `statement-checks`: источник правил §7 — установленная библиотека, без изменения арифметики и сценариев.
## Impact
- Срез 3b, сопровождение нормализации форм; контекст — `../docs/context/09-delivery-plan.md`, доменные алгоритмы — `../docs/context/05-domain-rules.md` §7 и §11. Алгоритмы не изменяются.
- Репозитории: arm-core (этот change); `../pylib_ai_arm_statements` (сделанные исправления поставки и версии описаны как внешняя зависимость, требуют отдельного коммита/поставки). Обновление общих инструкций и согласование с сервисами относятся к отдельному change в `../docs`, он здесь не создаётся.
- DBML: таблицы и поля не меняются, миграций нет. Существующие `recognition_job.statements_version` и `document_issue` используют уже имеющийся механизм версии и `STATEMENTS_VERSION_MISMATCH`.
- Полный интеграционный результат не подтверждён: `test_intake_statements_version_mismatch` был остановлен после зависания. Проверено: переустановка библиотеки, версия `0.1.1`, 11 тестов движка, Ruff и валидность JSON для изменённых описаний.
## Non-goals
- Переименование Python-импортов, изменения фронта, форматов денежных сумм, статусов, правил нормализации и схемы БД.
- Изменения портов БД в `.env.test`, `test_config.py` и посторонние файлы рабочего дерева: не входят в задачу.
- Публикация библиотеки в реестр, обновление других сервисов, запуск apply или архивирование этого change.