C-1: nest_by_sums включается из osv.py, если схема шапки не называет группы после счёта; строка с ИНН не вкладывается
и не становится родителем; прямые дети родителя должны быть на одном отступе. M-1: сдвиги складываются.
M-2: код без разделителя сегментов не вкладывается. M-3: строка закрытия — только с ненулевыми оборотами.
M-4: общий жадный перебор _greedy_ends для strategy_sums и вложенности, граница NEST_SCAN_LIMIT под тестом.
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>
Словарь data_types.yaml: row допускает единицу измерения после запятой
(«Кол-во, га» в ОСВ 43.1), indicator_column — «Кол. доп.» в колонке
«Показатели» (сч. 11). Код не меняется.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Часть, отличающаяся от ссылки [Content_Types].xml или *.rels только регистром
(xl/SharedStrings.xml при ссылке на sharedStrings.xml), до openpyxl
переименовывается по ссылке: раньше такая книга была UNREADABLE, а лист с
другим регистром имени openpyxl терял молча. Две части под одну ссылку не
угадываются.
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>
I-1 (R-17): синоним COUNTERPARTY только «Организации» (^организации\b).
I-2 (R-18): правило расчётных счетов не применяется к строкам, известным словарю как не-контрагенты (валюта, «В валюте»).
I-4 (R-19): тождество у второй итоговой строки пропускается только без оборотов и при наличии другой «Итого».
M-1, M-5, M-6, M-7 (вымышленное ФИО ИП в синтетике), M-9.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
counterparty_accounts в osv_groups.yaml (R-9: без 71 и 73), is_counterparty_account,
OSV_ROWS по счёту; формулировка проверки «Итого» без корня ACCOUNT (T4.1);
ожидания s40–s44 в синтетике (T1.1/T1.2), тест испорченной «Итого» плоского списка (T4.2).
Co-Authored-By: Claude Sonnet 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>