Refs #14 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
53 lines
5.3 KiB
Markdown
53 lines
5.3 KiB
Markdown
# 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. Основание
|
||
|
||
- [x] 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`).
|
||
- [x] 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` для обоих каталогов.
|
||
- [x] 1.3 Словари форм: `api/rules/statement_headers.yaml`, `statement_periods.yaml`, `statement_checks.yaml`; модели в
|
||
`rules.py`; тест на битый словарь; `rules/README.md`.
|
||
|
||
## 2. Оркестратор книги
|
||
|
||
- [x] 2.1 `detect.classify_sheet`: `SheetKind.STATEMENT_CONTINUATION`, признаки формы по области до таблицы (D-2); unit
|
||
на `gridbuilder`, fixtures-тест классификации всех листов `statements-xlsx/**` и `osv/**` (ОСВ не изменились).
|
||
- [x] 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. Конвейер форм
|
||
|
||
- [x] 3.1 `statements/detect.py`: `find_forms` — заголовок формы, ОКУД, тип, разрез листа на блоки, расшифровки (D-3).
|
||
- [x] 3.2 `statements/columns.py`: заголовок таблицы, склейка двухстрочного заголовка, строка нумерации, колонка кодов,
|
||
колонка наименований, колонки-периоды и даты (D-4); unit на три раскладки и шаблоны.
|
||
- [x] 3.3 `statements/header.py`: шапка по меткам, ИНН не аудитора, организация над меткой, дата из тройки (D-5).
|
||
- [x] 3.4 `statements/lines.py`: строки с кодом, значения, прочерки, скобки, дубликаты, предупреждение о единицах (D-6).
|
||
- [x] 3.5 `statements/checks.py`: соотношения из словаря, `abs_terms`, допуск, мягкие, подстроки, `StatementChecks` (D-7).
|
||
- [x] 3.6 `statements/merge.py` + `statement.py` (`StatementParser.parse_sheets`): склейка продолжений, одиночная
|
||
страница, `locator`, критерий `ok` (D-8); unit на книгу из нескольких листов.
|
||
|
||
## 4. Реальные файлы, синтетика, регрессия
|
||
|
||
- [x] 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/`.
|
||
- [x] 4.2 Property-тест `tests/fixtures/test_statements_property.py` по манифесту: типы, ИНН, статусы, сходимость §7 для
|
||
полных форм, шаблоны не падают; golden для всех файлов `statements-xlsx/**`.
|
||
- [x] 4.3 Покрытие словарей форм в `test_rules_coverage.py`; линтер координат на `statements/**` и `book.py`.
|
||
- [x] 4.4 Заполнение `period_start/period_end/is_from_year_start` в шапке ОСВ для квартала/года (D-9); для диапазона
|
||
месяцев — по результату ветки #11 (одна задача здесь либо follow-up).
|
||
- [x] 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» и находками.
|