Andrey Epifancev 8dd48f3fad docs(openspec): архив intercompany-result-table-export (PR #159)
Задачи 2.1/2.2 отмечены: #159 слит до #141, кнопка выгрузки — PR #158,
строка в frontend-api-guide — follow-up в arm-ka-docs. M-7 отклонено (design.md).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 12:49:20 +04:00

4.8 KiB
Raw Permalink Blame History

Context

Реализация — PR RSHB/arm-core#159. Результирующая таблица ВГО (§6) — чистая функция от сводной ОСВ версии и периметра (calculate_result_table); в БД не хранится (DECISION-5). Выгрузка повторяет устройство выгрузки шахматки (intercompany_matrix_export.py, change intercompany-matrix).

Decisions

  1. JSON и xlsx строятся одним методом сервиса _build_result_table (build_with_members → calculate_result_table), поэтому состав и порядок компаний, статьи и group_total совпадают; параметров у таблицы нет.
  2. Книга: лист «Результирующая таблица», шапка (ГК, период, версия, единицы «руб.»), строка заголовка «Статья ВГО» / компании / «Итого по группе», суммы — Decimal с форматом #,##0.00, закреплены заголовок и первая колонка. Имя файла — intercompany-result-table_<ГК>_<год>-<квартал>_v<n>.xlsx (RFC 5987, запасное ASCII-имя).
  3. Аудит EXPORT пишется после построения книги: ошибка расчёта (404, 422) или сборки книги события не оставляет.
  4. Реквизиты версии в шапке и имени файла общие для шахматки и результирующей таблицы (VersionExportInfo, _write_details, _group_name, _xlsx_response) — без копий кода.

Decisions made without discussion

  • 22.10.2026. Требование автора перенесено из openspec/specs/consolidations-api в дельту ADDED отдельным требованием со сценариями (у автора — абзац внутри требования «Результирующая таблица ВГО» без сценария); событие аудита добавлено в audit-trail. Обоснование: владелец поручил закрыть замечания ревью силами ревьюера, прецедент — change intercompany-matrix. Цена ошибки: низкая — текст правится в этом change'е до архивации.
  • 22.10.2026. Аудит экспорта результирующей таблицы оформлен отдельным ADDED-требованием, а не MODIFIED «Аудит экспорта шахматки». Обоснование: у событий разный payload (articles вместо режима и счетов), отдельное требование не переписывает согласованный текст. Цена ошибки: низкая.
  • 22.10.2026. Компания без суммы в статье при сборке книги даёт KeyError вместо молчаливого 0. Обоснование: calculate_result_table выдаёт сумму на каждую компанию периметра, пропуск — ошибка расчёта, которую нельзя прятать в файле. Цена ошибки: при таком дефекте расчёта выгрузка ответит 500 вместо файла с нулём.
  • 22.10.2026. Общие реквизиты книги вынесены в базовый VersionExportInfo, затронут и код выгрузки шахматки. Обоснование: замечание ревью о копиях шапки и имени файла. Цена ошибки: конфликт слияния с PR #141 (тот меняет MatrixExportInfo); порядок — сначала #141, затем ребейз #159. Владелец 22.10.2026 решил иначе: #159 слит первым, конфликт разрешается при слиянии #141.
  • 22.10.2026. M-7 ревью (openpyxl пишет числа через %.16g, Decimal теряет точность после 16 значащих цифр) отклонено. Обоснование: Excel хранит число с точностью 15 значащих цифр, выгрузка в ячейку-число не может быть точнее; потеря начинается с сумм порядка 10^14 руб., таких в отчётности групп нет. То же относится к выгрузке шахматки. Цена ошибки: для сумм от 10^14 руб. последние копейки в файле округлятся; лечится только выгрузкой сумм текстом.