openspec: change intercompany-matrix-preset-header (AURORA-1761, PR #223)
Шапка XLSX пресета: коды правила без раскрытия, строки «кроме», статьи А/Б по сторонам. Сценарий правила № 6 — без перечня кодов (после AURORA-2034 исключения 76 на обеих сторонах), решения в design.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
c95d2525e4
commit
e9a4f8e8a8
11
openspec/changes/intercompany-matrix-preset-header/design.md
Normal file
11
openspec/changes/intercompany-matrix-preset-header/design.md
Normal file
@ -0,0 +1,11 @@
|
||||
# Design
|
||||
|
||||
## Decisions made without discussion
|
||||
|
||||
1. **2026-11-11. Сценарий правила № 6 без перечня кодов.** После AURORA-2034 (seed правила 6 исключает 15 субсчетов 76
|
||||
на обеих сторонах) сценарий автора «кроме 76.07.5, 76.07.9» / «кроме 76.07.1» устарел; в спеке сценарий описан без
|
||||
перечня кодов, точный список проверяет тест seed. Цена ошибки: спека не ловит расхождение шапки с seed — его ловит
|
||||
`test_seed_rules.py`.
|
||||
2. **2026-11-11. Влив main: пустая сторона в шапке.** В main ALL/MANUAL объединены, у MANUAL сторона может быть пустой;
|
||||
при разрешении конфликта шапка пишет «Все балансовые счета» для пустой стороны (`or all_accounts`, как в main), а не
|
||||
по режиму. Цена ошибки: для PRESET сторона пустой не бывает (`ACCOUNTS_REQUIRED`), на шапку пресета не влияет.
|
||||
@ -0,0 +1,34 @@
|
||||
# Proposal
|
||||
|
||||
## Why
|
||||
|
||||
AURORA-1761 (PR arm-core #223): техдолг ревью PR #141 (пресет шахматки по правилу ББ, AURORA-1747). Шапка XLSX пресета
|
||||
перечисляла все раскрытые субсчета сторон правила: для правила № 6 — около 50 кодов в одной ячейке, а исключения
|
||||
субсчетов 76 не видны вовсе, шапку нельзя сверить с Прил. 3. Подписи «Статья А / Статья Б» не учитывали `side_1 = K`.
|
||||
|
||||
## What Changes
|
||||
|
||||
- Шапка XLSX пресета: «Счета дебета» / «Счета кредита» — коды так, как они заданы в правиле; под каждой стороной строка
|
||||
«кроме» с исключёнными кодами этой стороны.
|
||||
- «Статья А» — статья дебетовой стороны, «Статья Б» — кредитовой: при `side_1 = K` статьи меняются местами.
|
||||
- Реквизиты правила в `MatrixExportInfo` — вложенный `PresetRuleDetails` (None для ALL/MANUAL) вместо шести
|
||||
необязательных полей; имя файла через общий `VersionExportInfo._filename`.
|
||||
- Из `_export_response` убрана проверка с `raise ValueError` (давала 500).
|
||||
- OpenAPI маршрутов preset: 404 — версия или правило, 422 — `INVALID_RULE` / `RULE_REQUIRED` / `ACCOUNTS_REQUIRED`.
|
||||
|
||||
## Capabilities
|
||||
|
||||
### Modified Capabilities
|
||||
|
||||
- `consolidated-osv` — «XLSX шахматки пресета»: коды правила без раскрытия, строки «кроме», статьи по сторонам.
|
||||
|
||||
## Impact
|
||||
|
||||
arm-core `api/src/services/intercompany_matrix.py`, `api/src/services/intercompany_matrix_export.py`,
|
||||
`api/src/api/endpoints/consolidations/intercompany_matrix.py`, тесты шахматки. JSON-ответ расчёта, аудит, DBML,
|
||||
`05-domain-rules.md` не меняются.
|
||||
|
||||
## Non-goals
|
||||
|
||||
- Проверка правила до расчёта сводной ОСВ (необязательный пункт задачи) — не сделана: на неверный `rule_id` по-прежнему
|
||||
сначала считается свод.
|
||||
@ -0,0 +1,29 @@
|
||||
## MODIFIED Requirements
|
||||
|
||||
### Requirement: XLSX шахматки пресета
|
||||
`GET …/intercompany-matrix/preset/{rule_id}/export` SHALL возвращать XLSX с теми же строками, что JSON-расчёт
|
||||
пресета. Имя файла SHALL иметь вид `intercompany-matrix_<ГК>_<год>-<квартал>_v<n>_rule-balance-<rule_no>.xlsx`. Шапка SHALL
|
||||
содержать режим «Пресет», коды счетов дебета и кредита так, как они заданы в правиле (без раскрытия по иерархии), под
|
||||
каждой стороной — строку «кроме» с исключёнными кодами этой стороны, если исключения есть, номер правила, статьи А и Б,
|
||||
фактическую версию правил и строку «Показатель» со значением «Сальдо» для `closing` или «Оборот» для `turnover`.
|
||||
Статья А SHALL относиться к дебетовой стороне, статья Б — к кредитовой: `article_1_line` / `article_2_line` при
|
||||
`side_1 = D`, наоборот при `side_1 = K`. Строка «Показатель» SHALL присутствовать и в выгрузках ALL и MANUAL (значение
|
||||
«Сальдо»).
|
||||
|
||||
#### Scenario: Правило с исключениями на обеих сторонах
|
||||
- **WHEN** пользователь выгружает пресет правила № 6 из seed-набора Прил. 3 (маска «76» на обеих сторонах с
|
||||
исключениями субсчетов 76)
|
||||
- **THEN** «Счета дебета» и «Счета кредита» содержат только коды сторон правила, включая «76», без раскрытых субсчетов;
|
||||
под каждой стороной строка «кроме» перечисляет исключённые коды этой стороны
|
||||
|
||||
#### Scenario: Кредитная первая сторона правила
|
||||
- **WHEN** пользователь выгружает пресет с `side_1 = K`
|
||||
- **THEN** «Статья А» содержит `article_2_line`, «Статья Б» — `article_1_line`
|
||||
|
||||
#### Scenario: Выгрузка по оборотам
|
||||
- **WHEN** пользователь выгружает пресет с `measure = turnover`
|
||||
- **THEN** шапка содержит «Режим — Пресет», «Показатель — Оборот», номер, статьи и версию правила; имя файла заканчивается на `_rule-balance-<rule_no>.xlsx`
|
||||
|
||||
#### Scenario: Правило не найдено
|
||||
- **WHEN** `rule_id` не существует
|
||||
- **THEN** 404, файл не отдаётся, событие аудита не пишется
|
||||
10
openspec/changes/intercompany-matrix-preset-header/tasks.md
Normal file
10
openspec/changes/intercompany-matrix-preset-header/tasks.md
Normal file
@ -0,0 +1,10 @@
|
||||
# Tasks
|
||||
|
||||
- [x] 1.1 arm-core `api/src/services/intercompany_matrix.py` — `PresetRuleDetails`, коды сторон правила и исключений в
|
||||
`MatrixSelection`, `filename` через `_filename` (PR #223, автор)
|
||||
- [x] 1.2 arm-core `api/src/services/intercompany_matrix_export.py` — строки «кроме», статьи А/Б по `side_1` (PR #223, автор)
|
||||
- [x] 1.3 arm-core `api/src/api/endpoints/consolidations/intercompany_matrix.py` — `PRESET_ERRORS`, без `raise ValueError`
|
||||
в `_export_response` (PR #223, автор)
|
||||
- [x] 1.4 Тесты: шапка правила № 6 с исключениями, `side_1 = K`, описания ошибок маршрутов preset (PR #223, автор)
|
||||
- [x] 1.5 Ревью: влит main (объединённые ALL/MANUAL, AURORA-2034), пустая сторона MANUAL в шапке — «Все балансовые счета»;
|
||||
правка спеки перенесена из `openspec/specs` в этот change
|
||||
Loading…
x
Reference in New Issue
Block a user