I-2: в netted попадает только строка, сама сошедшаяся с детьми лишь по нетто; сошедшаяся по колонкам признак не
передаёт. I-3: сальдо конца периода = сальдо начала следующего (по колонкам либо по нетто), разрыв — нарушение.
M-6: сценарии спеки (защиты вложения по суммам, цепочка нетто-строк, непрерывность периодов); CLAUDE.md и докстринг
checks.py ссылаются на решения владельца 28.10.2026.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
В strategy_indent: счёт, чей код продолжает код соседа того же отступа (68.01 → 68.01.1), — ребёнок;
безымянная строка с оборотами счёта сразу за ним — его строка закрытия; аналитика на одном отступе
вкладывается по суммам только внутри родителя с нарушением и только если он после этого сходится.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
period_groups в osv_groups.yaml, признак is_period у ClassifiedRow; родитель, все дети которого
периоды: обороты = Σ, начало = начало первого, конец = конец последнего. НКЗ лист 58 убран
из манифеста ожидаемых needs_check.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Узкий вариант: нетто сальдо допустимо, если среди прямых детей есть нетто-ребёнок
(прошёл сверку только по нетто либо имеет такого потомка); обороты — по колонкам.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Решения владельца 27.10.2026 (docs #172): субсчёт с 3 цифрами в сегменте под счётом шапки, код контрагента + название +
договоры (стратегия code_blocks), суммы субсчёта из «ИТОГ по …», «ИТОГ» — итог листа, «Поставщики» — вид субконто
в таблице, метка «За период» со значением в соседней ячейке, диапазон «01.01.25..30.06.25», год из двух цифр.
Синтетика s45 (период, организация) и s46 (блоки), спека osv-parsing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Нераспознанная метка в колонке «Показатели» давала OSV_ROWS на каждую строку (2 128 одинаковых
на 11.xlsx). Теперь построчные OSV_ROWS «строка N: <текст>» с одинаковым текстом сводятся в одно:
«метка «X» в колонке «Показатели» не распознана — K строк (первые 20 номеров, …) не участвуют в
проверках»; прочие одинаковые построчные — «<текст> — строк: K (…)». Одиночное предупреждение
не меняется. Коды и контракт не тронуты. Спека osv-parsing обновлена.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Метки «Счет Поставщика»/«Счет Клиента» добавлены в header_markers.account; код счёта читается из соседней ячейки строки,
«*» отбрасывается. При известном счёте шапки голый числовой код, не совпадающий с ним, не считается счётом.
Синтетика s45, тест на книге openpyxl, сценарий в спеке osv-parsing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Change перенесён в openspec/changes/archive/2026-10-19-osv-flat-form,
дельта влита в openspec/specs/osv-parsing/spec.md (шапка «по счету: X»,
стратегия header_account, «Итого развернутое» в любом порядке,
контрагенты расчётных счетов).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Change перенесён в openspec/changes/archive/2026-10-19-osv-indicator-column,
дельта влита в openspec/specs/osv-parsing/spec.md (строки-показатели, колонка
«Показатели», «В валюте», BU по умолчанию, счёт 90 в OQ-132).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Колонка «Показатели», строки-показатели, «В валюте», BU по умолчанию (AURORA-1613, AURORA-1661 — валютная часть).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
I-3: дельты osv-parsing (листы ОСВ, иерархия, golden, XLS_NO_CODEPAGE) и
перечень словарей api/rules; пункт об архивации (Purpose спек) в tasks.md.
I-4: README, CLAUDE.md и docstring hierarchy.py совпадают с кодом, пример
вывода CLI переснят. M-6: tasks.md, proposal.md, design.md с решениями P4/R.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
- копия схем и примеров контракта v2.0 (запрос остаётся v1.0), модели result/common/message/request;
ResultWarning/FileWarning, статус и предупреждения у документов, строки forms v2.0, service.statements_version
- statements/pipeline.py: кандидаты адаптера -> normalize_candidate -> to_contract / warning_to_contract
- BookParser: статус книги через envelope_status, SHEET_OTHER / FILE_TYPE_MISMATCH / XLS_NO_CODEPAGE как предупреждения
файла, OSV_* и OSV_XLSB_NO_OUTLINE в документах ОСВ, тексты иерархии по спеке
- воркер, app и CLI получают statements_version из require_statements_version()
- старые модели документа формы вынесены в statements/legacy_models.py до удаления старого конвейера (задача 9)
- OpenSpec: MODIFIED «Парсер — заменяемый интерфейс» в дельте tabular-recognition-service
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W
Хвосты ревью Task 3: формулировка направления листа в spec/design (T3.1), тесты противоречия сведений и приоритета подсказки (T3.2), assert на glue.ok (T3.4).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Строки ИНН не в дереве: с суммами — сосед с теми же суммами (совпали оба — по направлению);
без сумм — сосед по направлению листа: подсказка шапки, иначе единогласные сведения пар по
суммам и однозначных блоков детей. Противоречие или отсутствие сведений — строка без пары.
Хвосты ревью Task 2: тест подразделения переписан на итоговый результат (T2.9); в спеке
уточнены реквизит «нерез.» (только лист, design #14) и защита «над, в дереве» с подсказкой
шапки (design #16) (T2.10); опечатка в докстринге _parent_can_own (T2.11).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Модуль inn_rows: строка с одним ИНН сопоставляется с наименованием в дереве (родитель или ребёнок), без пары
остаётся с причиной; подсказка шапки InnHint отменяет контрольную сумму. row_data_type стал публичным.
ASCII-проверка ИНН (ревью T1.2), комментарий про zip(strict=False) (T1.3), тест «770123456²» (T1.1).
Решения 12–13 в design.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
check-full: tests/fixtures падают только из-за отставания ветки от main (после merge main — 2313 passed).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
У 91 и 99 строки аналитики несут только обороты, сальдо закрыто на субсчёт закрытия
(91.09), поэтому каждая ОСВ 91 получала needs_check. Список счетов — данные
api/rules/osv_checks.yaml (accounts_without_analytic_balance: 91, 99; 90 не входит).
- тождество строки на таких счетах не проверяется;
- «сумма детей = родитель» сохраняется: обороты всегда, сальдо — только у родителя
с дочерними субсчетами (корень -> субсчета); у родителя с одной аналитикой сальдо
не сверяется;
- «Итого» сверяется как обычно;
- строка относится к счёту списка по коду ближайшего счёта ветки (91, 91.01; не 910).
Тесты: unit checks/rules, манифест osv_dkb_expectations (две ОСВ 91 теперь done).
README, CLAUDE.md, openspec/specs/osv-parsing, api/rules/README.md обновлены.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2