test: golden fixtures контракта 2.0 в тестах ядра (#144) #145

Merged
aep merged 1 commits from feat/144-golden-v2-tests into main 2026-10-20 21:12:06 +03:00
Owner

Closes #144. Без задачи Jira (решение владельца 20.10.2026). Только тесты, код продукта не менялся.

Почему main был красный

fixtures #26/#27 (19.10.2026) перевели golden форм ББ/ОФР (golden/expected_statement_parse) и OCR (ocr/expected_normalize) на контракт 2.0. Загрузчики tests/fixtures_helpers.golden_result / ocr_result читали их RecognitionResult 1.x (schema_version '2.0' не проходит ^1\.\d+$): на origin/main e6e4cd8 make test — 2 падения, make test-integration — 162.

Что сделано

  • golden_result, ocr_result — модель по MAJOR schema_version (contract.versions.parse_result); для 2.0 подставляется service.statements_version копии пакета ядра (в снимках версии вырезаны, а при формах поле обязательно).
  • golden_result_v1 — снимок 2.0, сведённый к 1.2: только строки с кодом (в 1.x line_code обязателен), колонки формы пронумерованы с 0 в порядке первого появления (в 2.0 column_index — номер столбца листа: 12, 16, 18), null в шапке — отсутствие поля. Подключён к test_mapping_statements.py и test_api_statements.py через functools.partial (явный result_builder=ocr_result по-прежнему перекрывает).
  • factories.make_entries_from_result — parse_result вместо RecognitionResult.
  • test_fixtures_marker: эталоны OCR 2.0 — schema_version 2.0, rows 88 (aep_6), у aep_5 в метриках предупреждение JSON_FAILED уровня error.
  • test_delete_file_with_statement_form: замечаний считается «было + 1» — снимок 2.0 приносит предупреждения сервиса.
  • test_mapping_golden: 76.Н.1 (synthetic s42, tabular-parser#59) — в KNOWN_OUT_OF_PLAN.

Rulings I made

  • R-1: модули test_mapping_statements.py и test_api_statements.py писались под приём 1.x (Срез 3b) — оставлены на пути 1.x через снимки, сведённые к 1.2, а не переписаны под ожидания 2.0. Причина: ядро по-прежнему принимает 1.x (LEGACY_WARNING), а путь 2.0 покрыт test_mapping_statements_v2.py и test_statements_v2_edit.py. Цена ошибки: API формы на реальных снимках гоняется на входе 1.x; поведение 2.0 на реальных golden этими модулями не проверяется.
  • R-2: «76.Н.1» — вымышленный субсчёт синтетики, не дыра в плане счетов.

Проверки (make check-full по шагам)

Шаг Результат
lint (ruff + mypy) ✅
test ✅ 1820 passed
dbml-check ✅
check-infra ✅
test-integration ✅ 1114 passed
e2e ✅ 1 passed
docker-build ✅
web-check ✅

🤖 Generated with Claude Code

Closes #144. Без задачи Jira (решение владельца 20.10.2026). Только тесты, код продукта не менялся. ## Почему main был красный fixtures #26/#27 (19.10.2026) перевели golden форм ББ/ОФР (`golden/expected_statement_parse`) и OCR (`ocr/expected_normalize`) на контракт 2.0. Загрузчики `tests/fixtures_helpers.golden_result` / `ocr_result` читали их `RecognitionResult` 1.x (`schema_version '2.0'` не проходит `^1\.\d+$`): на origin/main e6e4cd8 `make test` — 2 падения, `make test-integration` — 162. ## Что сделано - `golden_result`, `ocr_result` — модель по MAJOR `schema_version` (`contract.versions.parse_result`); для 2.0 подставляется `service.statements_version` копии пакета ядра (в снимках версии вырезаны, а при формах поле обязательно). - `golden_result_v1` — снимок 2.0, сведённый к 1.2: только строки с кодом (в 1.x `line_code` обязателен), колонки формы пронумерованы с 0 в порядке первого появления (в 2.0 `column_index` — номер столбца листа: 12, 16, 18), `null` в шапке — отсутствие поля. Подключён к `test_mapping_statements.py` и `test_api_statements.py` через `functools.partial` (явный `result_builder=ocr_result` по-прежнему перекрывает). - `factories.make_entries_from_result` — `parse_result` вместо `RecognitionResult`. - `test_fixtures_marker`: эталоны OCR 2.0 — `schema_version 2.0`, `rows 88` (aep_6), у aep_5 в метриках предупреждение `JSON_FAILED` уровня error. - `test_delete_file_with_statement_form`: замечаний считается «было + 1» — снимок 2.0 приносит предупреждения сервиса. - `test_mapping_golden`: `76.Н.1` (synthetic s42, tabular-parser#59) — в `KNOWN_OUT_OF_PLAN`. ## Rulings I made - R-1: модули `test_mapping_statements.py` и `test_api_statements.py` писались под приём `1.x` (Срез 3b) — оставлены на пути 1.x через снимки, сведённые к 1.2, а не переписаны под ожидания 2.0. Причина: ядро по-прежнему принимает 1.x (LEGACY_WARNING), а путь 2.0 покрыт `test_mapping_statements_v2.py` и `test_statements_v2_edit.py`. Цена ошибки: API формы на реальных снимках гоняется на входе 1.x; поведение 2.0 на реальных golden этими модулями не проверяется. - R-2: «76.Н.1» — вымышленный субсчёт синтетики, не дыра в плане счетов. ## Проверки (make check-full по шагам) | Шаг | Результат | |---|---| | lint (ruff + mypy) | ✅ | | test | ✅ 1820 passed | | dbml-check | ✅ | | check-infra | ✅ | | test-integration | ✅ 1114 passed | | e2e | ✅ 1 passed | | docker-build | ✅ | | web-check | ✅ | 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 1 commit 2026-10-20 20:34:39 +03:00
fixtures #26/#27 (19.10.2026) перевели снимки форм и OCR на контракт 2.0,
а загрузчики тестов читали их моделью 1.x: 164 падения на main.

- golden_result/ocr_result: модель по MAJOR schema_version, для 2.0 —
  service.statements_version копии пакета ядра;
- golden_result_v1: снимок 2.0 → 1.2 (строки с кодом, колонки с 0, без
  null в шапке) для модулей приёма 1.x — test_mapping_statements и
  test_api_statements; путь 2.0 покрывают *_v2;
- make_entries_from_result — parse_result; ожидания fixtures_marker под
  эталоны 2.0; удаление файла считает замечания сервиса снимка;
- 76.Н.1 (synthetic s42, tabular-parser#59) — в KNOWN_OUT_OF_PLAN.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep merged commit 5512365b5d into main 2026-10-20 21:12:06 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-core#145
No description provided.