Замечание заказчика 09.11.2026, п. 1: счета 76 (аренда, НДС) не должны участвовать в
расчётах и засорять таблицу корректировок. Список субсчетов — Лысенко 10.11.2026.
- seed правил v1 (правка на месте, решение владельца 10.11.2026): из маски 76 на обеих
сторонах правил 5–8 исключены 76.07/76.27/76.37 .1/.5/.9, 76.АВ, 76.ВА, 76.К, 76.Н, 76.НА,
76.ОТ; правило 1 не меняется; на стендах нужен повторный seed;
- результирующая таблица §6 (RESULT_ARTICLES) — тот же список ACCOUNT_76_EXCLUDED, совпадение
с seed проверяет тест;
- дефект: VgoService._rule_accounts сливал счета дебета и кредита правила, исключения одной
стороны возвращались через маску другой — Кт-строки 76.* попадали в правила 5–8 и висели
в нераспределённых (MULTIPLE_RULES); то же в candidate_rule_ids. Теперь account_owners
ведёт стороны раздельно, правило строки — по её стороне (row_side, rules_for);
- golden-тест правила 6 на фикстурах РБ: 76.АВ вне правила, ΣA 108 062 446,46, 1,65 %
(совпадает с эталоном, OQ-164).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- grand_total результирующей таблицы убран из API и xlsx: аналитик 03.11 попросил
убрать итог снизу, сумма ДЗ + КЗ + ФВ + займов смысла не имеет
- total_debet переименовано в total_debit, как во всём API
- итоги матрицы квантуются до двух знаков ("0.00" и при одном ЮЛ)
- правки openspec/specs перенесены в change intercompany-matrix-totals
- README: фильтр ЮЛ и итоги
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- суммы сторон со знаком, как в шахматке; строки с суммой < 0 в упаковку не идут, причина NEGATIVE_AMOUNT;
при min(ΣA, ΣB) ≤ 0 процент null и элиминация 0, статус списка AUTO — только при элиминации > 0
- группы одного размера выбираются по проценту расхождения к меньшей сумме (точной дробью), ничья — по равному проценту
- elimination_amount группы и тройки переименован в deviation_amount; version_no тройки обязателен
- суммы и проценты пар в JSON — с двумя знаками
- elimination-pairs по правилу с measure ≠ closing — 422 INVALID_RULE
- дельта спеки, design.md (R-7, R-8), tasks, README
make check-full: exit 0 (1896 passed; integration 990 passed).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- consolidation_version.elimination_rules_version NOT NULL: миграция 0010
проставляет существующим версиям номер правил, действовавших на дату
создания (по Москве), иначе последних открытых; без правил — отказ;
создание версии без действующих правил — 409 ELIMINATION_RULES_MISSING;
ветки «правила не зафиксированы» убраны (rules, preset, is_version_fixed
всегда true);
- GET …/elimination-totals: все тройки «правило ББ × упорядоченная пара
периметра» с ΣA, ΣB, расхождением, суммой элиминации, статусом
AUTO/DISCREPANCY/ONE_SIDED/MANUAL и osv_entry_ids; сводная ОСВ строится
один раз; сбор строк сторон вынесен в _collect_rule_sides — общий
с упаковкой тройки.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Конфликты с #141: в ALL оставлены и фильтр забалансовых, и MatrixSelection; тесты
#141 на старый one_sided переписаны под расчёт по суммам.
- one_sided = ровно одна сумма нулевая (знак не важен), тесты с отрицательными суммами;
- шапка xlsx режима ALL — «Все балансовые счета»;
- фильтр GET /directories/accounts убран из PR (решение владельца 22.10.2026).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>