Refs #14 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
5.3 KiB
5.3 KiB
Tasks: Срез 2b — парсер ББ и ОФР из Excel (tabular-parser)
Каждая задача ≤ половины дня, начинается с тестов, заканчивается зелёным make check. Пути — от корня репозитория.
Фикстуры — ../fixtures (worktree .wt/slice-2b/fixtures, отдельный PR в arm-ka-fixtures); контракт v1.2 —
../docs/contracts (ветка feat/26-slice-2b-statement-parser). Детализация шагов и модели исполнителей — в плане
superpowers (docs/superpowers/plans/), который пишется после согласования этой спеки.
1. Основание
- 1.1 Контракт v1.2: копия
../docs/contracts/recognition-result.schema.jsonи примеров вapi/contracts/;StatementDocument.document_type+DISCLOSURE,StatementChecks/FailedRelation,OsvHeader.period_start/ period_end/is_from_year_start;CONTRACT_VERSION = "1.2"; тесты контракта и воркера (result_schema_version). - 1.2 Фикстуры форм в тестах:
conftest.py— параметризацияstatement_fileпо../fixtures/statements-xlsx/**(кромеsynthetic),statement_synthetic_file; манифестtests/statements_manifest.yaml; обобщениеgolden_helpers.pyна каталогexpected_statement_parse/;make golden-update/golden-checkдля обоих каталогов. - 1.3 Словари форм:
api/rules/statement_headers.yaml,statement_periods.yaml,statement_checks.yaml; модели вrules.py; тест на битый словарь;rules/README.md.
2. Оркестратор книги
- 2.1
detect.classify_sheet:SheetKind.STATEMENT_CONTINUATION, признаки формы по области до таблицы (D-2); unit наgridbuilder, fixtures-тест классификации всех листовstatements-xlsx/**иosv/**(ОСВ не изменились). - 2.2
book.py(BookParser, D-1): перенос лимита/чтения/дедлайна/цикла изOsvParser,OsvParserбезparse;get_parserсобираетBookParser;test_osv_parser.py→test_book_parser.py+ unit на смесь листов; golden ОСВ и property ОСВ без изменений.
3. Конвейер форм
- 3.1
statements/detect.py:find_forms— заголовок формы, ОКУД, тип, разрез листа на блоки, расшифровки (D-3). - 3.2
statements/columns.py: заголовок таблицы, склейка двухстрочного заголовка, строка нумерации, колонка кодов, колонка наименований, колонки-периоды и даты (D-4); unit на три раскладки и шаблоны. - 3.3
statements/header.py: шапка по меткам, ИНН не аудитора, организация над меткой, дата из тройки (D-5). - 3.4
statements/lines.py: строки с кодом, значения, прочерки, скобки, дубликаты, предупреждение о единицах (D-6). - 3.5
statements/checks.py: соотношения из словаря,abs_terms, допуск, мягкие, подстроки,StatementChecks(D-7). - 3.6
statements/merge.py+statement.py(StatementParser.parse_sheets): склейка продолжений, одиночная страница,locator, критерийok(D-8); unit на книгу из нескольких листов.
4. Реальные файлы, синтетика, регрессия
- 4.1 Синтетика
tests/synthetic/generate_statements.py:st01_both_forms_one_sheet,st02_csv_like,st03_no_codes,st04_mixed_book,st05_continuation_only,st06_header_variants,st07_single_code_continuation→../fixtures/statements-xlsx/synthetic/. - 4.2 Property-тест
tests/fixtures/test_statements_property.pyпо манифесту: типы, ИНН, статусы, сходимость §7 для полных форм, шаблоны не падают; golden для всех файловstatements-xlsx/**. - 4.3 Покрытие словарей форм в
test_rules_coverage.py; линтер координат наstatements/**иbook.py. - 4.4 Заполнение
period_start/period_end/is_from_year_startв шапке ОСВ для квартала/года (D-9); для диапазона месяцев — по результату ветки #11 (одна задача здесь либо follow-up). - 4.5 Интеграционный тест воркера: книга НПЗ →
needs_check(OQ-138), два документа,result_schema_version = "1.2"; CLI печатает формы.
5. Завершение
- 5.1 README (раздел «Парсер форм»: конвейер, словари, статусы, как запустить на файле), CLAUDE.md сервиса,
rules/README.md;make check-full; rebase на main (ветки #9–#11), PR с «Rulings I made» и находками.