10 KiB
ADDED Requirements
Requirement: Библиотека общего кода arm_statements
Общий код нормализации ББ/ОФР SHALL жить в репозитории RSHB/pylib_ai_arm_statements Python-библиотекой: дистрибутив
pylib-ai-arm-statements, импорт — arm_statements, свои тесты, конфиг линтеров и make check. Библиотека SHALL
содержать: типы шага 1 (FormCandidate, Cell; сериализуемые в json dataclass-ы), шаги 2–8, общие разборы текста
(двойники, даты, суммы, коды), словари — проверок §7 statement_checks.yaml (полный и упрощённый наборы), периодов
statement_periods.yaml, заголовков форм и ОКУД, подписей колонок («Код», «Наименование», исключения), букв-двойников,
единиц измерения statement_units.yaml (написания и коды ОКЕИ), упорядоченные перечни кодов форм по редакциям (66n,
fsbu4) и вариантам (full, simplified) без наименований — байтовая копия docs/contracts/statement-code-orders.yaml
как arm_statements/rules/statement_code_orders.yaml, диапазоны кодов — и загрузчик словарей. Словари SHALL входить в
дистрибутив данными пакета (wheel и sdist), установленная библиотека читает их без исходного репозитория. Словаря
«код → наименование» в библиотеке MUST NOT быть (Р-3). Библиотека SHALL владеть своими типами входа и выхода;
конвертацию выхода в модель контракта делает потребитель. Golden-тесты — внутри библиотеки на синтетических и
обезличенных данных; тесты на реальных фикстурах остаются в сервисах и соседние репозитории не читают. Зависимости
библиотеки — только те, что есть в зеркале банка (сейчас PyYAML), Python — 3.11 (версия платформы).
В tabular-parser, scan-gateway и arm-core библиотека SHALL подключаться зависимостью и импортироваться по имени
arm_statements; поставку, версию и порядок её подъёма задаёт требование «Поставка библиотеки потребителям».
Scenario: Наименований в библиотеке нет
- WHEN ревьюер ищет в библиотеке соответствие «код → наименование»
- THEN его нет: в перечне кодов только коды, наименования строк — словарь ядра
Scenario: Словари в установленном пакете
- WHEN wheel библиотеки установлен в чистое окружение без исходного репозитория
- THEN
import arm_statementsи загрузка стандартных правил работают, все YAML-словари на месте
Requirement: Поставка библиотеки потребителям
Версия библиотеки SHALL быть семантической (MAJOR.MINOR.PATCH), записываться в файл VERSION корня репозитория
библиотеки и помечаться тегом v<версия> на коммите выпуска; опубликованная версия MUST NOT пересобираться с другим
содержимым. Публикацию в Nexus выполняет платформа (CI в Gitea нет).
Потребители (arm-core, tabular-parser, scan-gateway) SHALL держать в api/requirements.txt строку
pylib_ai_arm_statements==<версия>; копии исходников библиотеки в потребителях MUST NOT быть. На платформе библиотека
ставится из Nexus по этой строке. Вне банка make venv SHALL пропускать строки pylib_ai* (как raisa_*) и ставить
библиотеку из локального checkout STATEMENTS_DIR (по умолчанию ../pylib_ai_arm_statements); make install
переустанавливает её без пересоздания окружения. Обе цели SHALL сначала сверять checkout (цель statements-version):
VERSION checkout не равен версии из requirements.txt или checkout нет — ошибка; checkout не на теге v<версия> —
предупреждение (правка библиотеки до выпуска). STATEMENTS_TAG по умолчанию — v<версия> из requirements.txt.
make docker-build SHALL передавать checkout библиотеки контекстом сборки statements и отказывать, если HEAD
checkout не совпадает с тегом STATEMENTS_TAG.
ruff и mypy потребителя библиотеку не проверяют (она проверяется своим make check), arm_statements в конфиге
ruff потребителя — сторонний пакет.
Маркер версии в результате (service.statements_version) и версия ядра для STATEMENTS_VERSION_MISMATCH SHALL
браться из метаданных установленного дистрибутива (importlib.metadata). У заданий, посчитанных до перехода, в
recognition_job.statements_version остаётся хэш коммита копии; расхождение с версией ядра даёт
STATEMENTS_VERSION_MISMATCH (info) — это ожидаемо и не исправляется (решение владельца 26.10.2026).
Порядок правки перечня кодов: PR в docs (contracts/statement-code-orders.yaml) → PR в библиотеку (байтовая копия
yaml) и новая версия → подъём версии в потребителях «сначала ядро». Пока цепочка не дошла до библиотеки,
statements-orders-check в docs предупреждает, но не краснеет. Подъём версии в потребителях выкладывается одной
поставкой ядра и обоих сервисов.
Scenario: Версия общего кода в результате
- WHEN сервис собирает результат с установленной библиотекой версии
0.1.1 - THEN в результате
service.statements_version = "0.1.1"
Scenario: Сборка образа не с того коммита
- WHEN в
../pylib_ai_arm_statementscheckout стоит на коммите после тегаv0.1.1, аSTATEMENTS_TAG = v0.1.1 - THEN
make docker-buildзавершается ошибкой «HEAD библиотеки не совпадает с v0.1.1», образ не собирается
Scenario: Checkout библиотеки другой версии
- WHEN в
api/requirements.txtсервисаpylib_ai_arm_statements==0.1.2, а в../pylib_ai_arm_statementsVERSION=0.1.1 - THEN
make venvиmake installзавершаются ошибкой с обеими версиями, библиотека не ставится
Scenario: Задание до перехода
- WHEN аналитик правит форму, посчитанную сервисом с копией (
statements_version— хэш коммита), а у ядра установлена библиотека0.1.1 - THEN пересчёт пишет
STATEMENTS_VERSION_MISMATCH(info), на статус и подтверждение это не влияет
Scenario: Перечень кодов в docs новее библиотеки
- WHEN в docs в
statement-code-orders.yamlдобавлен код, а библиотека ещё не выпущена с ним - THEN
make -C docs checkпечатает предупреждениеstatements-orders-checkи называет файл, код возврата 0
REMOVED Requirements
Requirement: Пакет общего кода arm_statements и его копии
Reason: копии пакета в сервисах заменены установленной библиотекой (AURORA-1677), репозиторий arm-statements
архивирован, код перенесён в RSHB/pylib_ai_arm_statements.
Migration: требования «Библиотека общего кода arm_statements» и «Поставка библиотеки потребителям».
Requirement: sync-statements — копии пакета в потребителях
Reason: копии api/arm_statements/ в сервисах заменены установленной библиотекой (AURORA-1677); раскладывать и
сверять нечего, скрипт docs/scripts/sync-statements.sh и цели sync-statements, statements-check,
test-sync-statements удалены.
Migration: поставка и версия — требование «Поставка библиотеки потребителям»; сверка перечня кодов docs с
библиотекой — цель statements-orders-check в make -C docs check; сверка словаря имён ядра с перечнем —
тест ядра test_name_dictionary_codes_in_code_orders.