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>
This commit is contained in:
parent
ab49f5e83d
commit
8dd48f3fad
@ -29,4 +29,9 @@
|
|||||||
в файле. Цена ошибки: при таком дефекте расчёта выгрузка ответит 500 вместо файла с нулём.
|
в файле. Цена ошибки: при таком дефекте расчёта выгрузка ответит 500 вместо файла с нулём.
|
||||||
- 22.10.2026. Общие реквизиты книги вынесены в базовый `VersionExportInfo`, затронут и код выгрузки шахматки.
|
- 22.10.2026. Общие реквизиты книги вынесены в базовый `VersionExportInfo`, затронут и код выгрузки шахматки.
|
||||||
Обоснование: замечание ревью о копиях шапки и имени файла. Цена ошибки: конфликт слияния с PR #141 (тот меняет
|
Обоснование: замечание ревью о копиях шапки и имени файла. Цена ошибки: конфликт слияния с PR #141 (тот меняет
|
||||||
`MatrixExportInfo`); порядок — сначала #141, затем ребейз #159.
|
`MatrixExportInfo`); порядок — сначала #141, затем ребейз #159. Владелец 22.10.2026 решил иначе: #159 слит первым,
|
||||||
|
конфликт разрешается при слиянии #141.
|
||||||
|
- 22.10.2026. M-7 ревью (openpyxl пишет числа через `%.16g`, `Decimal` теряет точность после 16 значащих цифр)
|
||||||
|
отклонено. Обоснование: Excel хранит число с точностью 15 значащих цифр, выгрузка в ячейку-число не может быть точнее;
|
||||||
|
потеря начинается с сумм порядка 10^14 руб., таких в отчётности групп нет. То же относится к выгрузке шахматки. Цена
|
||||||
|
ошибки: для сумм от 10^14 руб. последние копейки в файле округлятся; лечится только выгрузкой сумм текстом.
|
||||||
@ -6,5 +6,7 @@
|
|||||||
|
|
||||||
## 2. После слияния
|
## 2. После слияния
|
||||||
|
|
||||||
- [ ] 2.1 Ребейз на `main` после слияния PR #141 (`build_with_members` возвращает объект), `make check-full`
|
- [x] 2.1 PR #159 слит раньше #141 (решение владельца 22.10.2026); конфликт с #141 (`build_with_members` возвращает
|
||||||
- [ ] 2.2 Кнопка выгрузки на экране результирующей таблицы (`web/`) и строка в `../docs/dev/frontend-api-guide.md`
|
объект) разрешается при слиянии #141
|
||||||
|
- [x] 2.2 Кнопка выгрузки на экране результирующей таблицы — в PR #158 (коммит 473492f); строка в
|
||||||
|
`../docs/dev/frontend-api-guide.md` — follow-up в arm-ka-docs
|
||||||
@ -157,3 +157,18 @@ credit_account_ids, cells}`. `mode` — `ALL` или `MANUAL`, массивы с
|
|||||||
#### Scenario: Две выгрузки
|
#### Scenario: Две выгрузки
|
||||||
- **WHEN** пользователь дважды выгружает ту же шахматку
|
- **WHEN** пользователь дважды выгружает ту же шахматку
|
||||||
- **THEN** в `audit_event` две разные записи `EXPORT`, каждая со своим payload и числом ячеек
|
- **THEN** в `audit_event` две разные записи `EXPORT`, каждая со своим payload и числом ячеек
|
||||||
|
|
||||||
|
### Requirement: Аудит экспорта результирующей таблицы ВГО
|
||||||
|
Каждый успешный `GET …/intercompany-matrix/result-table/export` SHALL добавлять отдельное неизменяемое событие
|
||||||
|
`audit_event` с `action = EXPORT`, `section = EXPORT`, `object_type = consolidation_version`,
|
||||||
|
`object_id = consolidation_version_id`, `consolidation_version_id` версии, `user_id` инициатора, `before_value = null`
|
||||||
|
и `after_value = {report: "intercompany_result_table", articles}`, где `articles` — число статей в книге. Неуспешная
|
||||||
|
выгрузка (404, 422, ошибка сборки книги) события не пишет.
|
||||||
|
|
||||||
|
#### Scenario: Выгрузка таблицы
|
||||||
|
- **WHEN** пользователь выгружает результирующую таблицу версии
|
||||||
|
- **THEN** в `audit_event` одна запись `EXPORT` с `after_value = {report: "intercompany_result_table", articles: 5}`
|
||||||
|
|
||||||
|
#### Scenario: Нет счёта статьи
|
||||||
|
- **WHEN** выгрузка отвечает 422 `RESULT_ACCOUNTS_MISSING`
|
||||||
|
- **THEN** событие `EXPORT` не записано
|
||||||
|
|||||||
@ -251,3 +251,24 @@ SHALL возвращать все правила версии массивом.
|
|||||||
#### Scenario: Нет обязательного счёта
|
#### Scenario: Нет обязательного счёта
|
||||||
- **WHEN** в плане счетов отсутствует счёт 58.03
|
- **WHEN** в плане счетов отсутствует счёт 58.03
|
||||||
- **THEN** ответ 422 `RESULT_ACCOUNTS_MISSING`, сообщение содержит `58.03`
|
- **THEN** ответ 422 `RESULT_ACCOUNTS_MISSING`, сообщение содержит `58.03`
|
||||||
|
|
||||||
|
### Requirement: XLSX результирующей таблицы ВГО
|
||||||
|
`GET /api/v1/consolidations/versions/{version_id}/intercompany-matrix/result-table/export` (`CONSOLIDATION_VIEW`,
|
||||||
|
policy) SHALL возвращать XLSX с теми же статьями, компаниями и итогами, что `GET …/intercompany-matrix/result-table`,
|
||||||
|
из того же расчёта сводной ОСВ версии. Книга — лист «Результирующая таблица» с шапкой (ГК, период, версия, единицы
|
||||||
|
«руб.») и таблицей «Статья ВГО» × компании периметра + колонка «Итого по группе»; суммы — числа с двумя знаками. Имя
|
||||||
|
файла — `intercompany-result-table_<ГК>_<год>-<квартал>_v<n>.xlsx`. Ошибки — как у JSON-маршрута: невидимая или
|
||||||
|
несуществующая версия — 404, отсутствие необходимого кода счёта — 422 `RESULT_ACCOUNTS_MISSING`.
|
||||||
|
|
||||||
|
#### Scenario: Совпадение с JSON
|
||||||
|
- **WHEN** пользователь выгружает результирующую таблицу ГК «Русский бисквит» за 2024 Q1, версия 1
|
||||||
|
- **THEN** имя содержит `Русский бисквит_2024-Q1_v1.xlsx`, порядок компаний, названия статей, суммы по компаниям и
|
||||||
|
«Итого по группе» совпадают с ответом `GET …/result-table` той же версии
|
||||||
|
|
||||||
|
#### Scenario: Нет счёта статьи
|
||||||
|
- **WHEN** в плане счетов нет кода 58.03
|
||||||
|
- **THEN** выгрузка отвечает 422 `RESULT_ACCOUNTS_MISSING` с кодом в сообщении, файл не формируется
|
||||||
|
|
||||||
|
#### Scenario: Версия вне видимости
|
||||||
|
- **WHEN** пользователь филиала выгружает таблицу версии чужой ГК
|
||||||
|
- **THEN** ответ 404 с тем же телом, что у несуществующей версии
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user