2026-10-27 17:06:45 +04:00

10 KiB
Raw Blame History

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_statements checkout стоит на коммите после тега 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_statements VERSION = 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.