6.7 KiB
6.7 KiB
Context
Реализация — PR RSHB/arm-core#141 (ветка add-preset-shahmatka). Шахматка — чистая функция от сводной ОСВ версии,
периметра и выбранных счетов; в БД не хранится (DECISION-5). Корректировки (correction) — хранимые ручные решения,
читаются, но в ядре пока никем не создаются.
Decisions
- Режим PRESET берёт правило по
rule_id. Правило должно быть действительно для версии: при зафиксированномelimination_rules_version— совпадать поversion_no, иначе — иметьvalid_to IS NULL; иначе 404. - Сторона дебета —
company_1, еслиside_1 = D, иначеcompany_2; кредит — вторая сторона. Счета и исключения раскрываются по иерархии (_select_accounts), как в MANUAL. Нет счетов хотя бы одной стороны — 422ACCOUNTS_REQUIRED; неверныеside_1/measure/company_no— 422INVALID_RULE; не переданrule_id— 422RULE_REQUIRED. - Показатель (
closing/turnover) берётся из правила; ALL и MANUAL остаются наclosing. - Применённые корректировки правила (
status = APPLIED, тот жеrule_idи версия консолидации) уменьшаютamount_aячейки(A, B)наdebit_adjustmentкорректировки (legal_entity_id = A,counterparty_id = B) иamount_bнаcredit_adjustmentкорректировки(B, A); расхождение, процент и порог пересчитываются, ID корректировок попадают вcorrection_ids_debit/credit. unpaired-osvстроится изone_sided-ячеек шахматки пресета (osv_entry_ids_*) и возвращает строки сводной ОСВ, содержащие эти записи.GET …/elimination-rulesотдаёт объект с основанием выбора версии;as_ofне вводится.- xlsx пресета: имя
intercompany-matrix_<ГК>_<год>-<квартал>_v<n>_preset-<rule_id>.xlsx, в шапке «Режим = Пресет», коды счетов сторон (отсортированы) и строка «Показатель» (Сальдо/Оборот) для всех режимов.
Known issues / вопросы владельцу
Спека описывает фактическое поведение PR; пункты ниже не закреплены как окончательные и ждут решения автора и владельца.
- При пустом
consolidation_version.elimination_rules_versionберутся текущие открытые правила. Это расходится с DBML («фиксируется при первом расчёте, замораживается при VERIFIED») и критерием AURORA-1536; нужно решение владельца, в том числе для версий в статусеVERIFIED. - «Актуальные» правила —
valid_to IS NULLна сегодня, а не на отчётную дату консолидации. - Если открытыми остаются несколько
version_no, список правил даёт дублиrule_no. - Семантика корректировки:
(rule, A, B)дебетовой частью правит ячейку(A, B), кредитовой — ячейку(B, A);debit_account_id,credit_account_idиparent_correction_idне учитываются; корректировки в ядре пока никто не создаёт. unpaired-osvпостроена наone_sidedпо наличию строк — это дефект AURORA-1651, и «без пары» здесь не равно «без пары» по §5 и AURORA-1536.- Пресет здесь — правило Прил. 3, а §6 описывает пресеты как наборы счетов; PRESET по ОФР на оборотах
(
measure = turnover) не подтверждён §5/§6. - Имя файла содержит UUID правила, шапка xlsx не содержит номер правила и версию; audit не пишет номер/версию правил и ID применённых корректировок.
Decisions made without discussion
- 2026-10-21. Change пишет ревьюер в ветке автора по решению владельца. Обоснование: автор не оформила OpenSpec. Цена ошибки: автор переписывает change.
- 2026-10-21. Спека описывает фактическое поведение PR; спорное вынесено в Known issues. Обоснование: домен решает автор и владелец, не ревьюер. Цена ошибки: после решения владельца спека меняется дельтой.
- 2026-10-21. Поле
as_ofудалено изEliminationRulesOutкак мёртвое: после правок по ревью всегдаNone, в main его не было, потребителей нет. Цена ошибки: если фронт ждалas_of, поле нужно вернуть. - 2026-10-21. Интеграционный тест
test_preset_uses_current_rules_when_version_unfixedприведён к фактическому поведению (version_no is None,is_version_fixed is False), а не к старому ожиданиюversion_no == rule.version_no; логика вычисленияversion_noне добавлялась. Цена ошибки: если автор решит возвращать номер версии, тест вернуть. - 2026-10-21. mypy:
measureаннотированMeasureбезcast; слишком длинная f-строка имени файла свода ОСВ (consolidated_osv.py) разбита на две без изменения результата (ruff E501). Цена ошибки: нулевая. - 2026-10-21. В MODIFIED-блоке требования про правила элиминации и аудит экспорта приведён полный текст; требование «XLSX шахматки» (ALL/MANUAL) не менялось, поведение PRESET описано отдельным ADDED-требованием.