Andrey Epifancev d096459c75 docs: change intercompany-matrix-presets и README — ревью #141, раунд 2 (AURORA-1747)
README: возвращена фраза про XLSX результирующей таблицы, потерянная при merge.
Change: отменённое решение 4, ветка-закладка wip/shahmatka-corrections-unpaired,
ссылки на снятый раздел Known issues, шапка xlsx пресета — счета правила и «кроме»,
статьи сторон при side_1 = K, tasks раунда 2.

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

5.0 KiB
Raw Blame History

ADDED Requirements

Requirement: Шахматка по правилу-пресету

GET /api/v1/consolidations/versions/{version_id}/intercompany-matrix/preset/{rule_id} (CONSOLIDATION_VIEW, policy) SHALL рассчитывать шахматку в режиме PRESET с тем же ответом, что ALL и MANUAL. Счета дебета и кредита SHALL браться из правила элиминации rule_id: дебет — сторона company_1, если side_1 = D, иначе company_2; кредит — вторая сторона; исключения (excluded) вычитаются, выбранные счета раскрываются по иерархии и фильтруются по виду, как в MANUAL. Показатель SHALL браться из measure правила: closing — конечное сальдо (closing_debit/closing_credit), turnover — обороты (turnover_debit/turnover_credit). Правило SHALL быть действительным для версии консолидации: при заданном elimination_rules_version — с тем же version_no, иначе — без valid_to и с максимальным открытым version_no; несуществующее или недействительное правило SHALL давать 404. Ошибки 422: RULE_REQUIRED — правило не выбрано, INVALID_RULE — правило ОФР либо неверные side_1, measure или сторона счёта правила, ACCOUNTS_REQUIRED — у одной из сторон нет счетов. Невидимая и несуществующая версия SHALL отвечать 404 NOT_FOUND.

Scenario: Пресет по сальдо

  • WHEN правило с side_1 = D, measure = closing содержит дебетовые счета на стороне 1 и кредитовые на стороне 2
  • THEN amount_a пары — сумма closing_debit по счетам стороны 1, amount_b — сумма closing_credit по счетам стороны 2

Scenario: Пресет по оборотам

  • WHEN у правила measure = turnover
  • THEN суммы считаются по turnover_debit/turnover_credit

Scenario: Правило другой версии

  • WHEN у версии elimination_rules_version = 2, а rule_id принадлежит правилу версии 1
  • THEN 404 для расчёта и выгрузки

Scenario: Неизвестное правило

  • WHEN rule_id не существует
  • THEN 404

Scenario: Правило ОФР

  • WHEN у правила statement_type = income
  • THEN расчёт и выгрузка возвращают 422 INVALID_RULE

Requirement: XLSX шахматки пресета

GET …/intercompany-matrix/preset/{rule_id}/export SHALL возвращать XLSX с теми же строками, что JSON-расчёт пресета. Имя файла SHALL иметь вид intercompany-matrix_<ГК>_<год>-<квартал>_v<n>_rule-balance-<rule_no>.xlsx. Шапка SHALL содержать режим «Пресет», счета дебета и кредита так, как они заданы в правиле (без раскрытия по субсчетам), и отдельно исключения правила («кроме …»), номер правила, статьи сторон дебета и кредита (при side_1 = K статьи меняются местами вместе со сторонами), фактическую версию правил и строку «Показатель» со значением «Сальдо» для closing или «Оборот» для turnover. Строка «Показатель» SHALL присутствовать и в выгрузках ALL и MANUAL (значение «Сальдо»).

Scenario: Выгрузка по оборотам

  • WHEN пользователь выгружает пресет с measure = turnover
  • THEN шапка содержит «Режим — Пресет», «Показатель — Оборот», номер, статьи и версию правила; имя файла заканчивается на _rule-balance-<rule_no>.xlsx

Scenario: Шапка правила с исключениями

  • WHEN выгружается пресет по правилу № 6 (seed v1: дебет 60.02, 60.22, 60.32, 62.01, 62.03, 62.21, 62.31, 76, исключения 76.07.5, 76.07.9)
  • THEN в шапке счета дебета — эти восемь кодов, отдельной строкой — «кроме 76.07.5, 76.07.9»; раскрытых субсчетов (76.01, 76.02, …) в шапке нет

Scenario: Правило не найдено

  • WHEN rule_id не существует
  • THEN 404, файл не отдаётся, событие аудита не пишется