Merge pull request 'Архив OpenSpec intercompany-result-table-export (PR #159)' (#160) from chore/159-archive-result-table-export into main
This commit is contained in:
commit
b959a613c0
@ -29,4 +29,9 @@
|
||||
в файле. Цена ошибки: при таком дефекте расчёта выгрузка ответит 500 вместо файла с нулём.
|
||||
- 22.10.2026. Общие реквизиты книги вынесены в базовый `VersionExportInfo`, затронут и код выгрузки шахматки.
|
||||
Обоснование: замечание ревью о копиях шапки и имени файла. Цена ошибки: конфликт слияния с 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.1 Ребейз на `main` после слияния PR #141 (`build_with_members` возвращает объект), `make check-full`
|
||||
- [ ] 2.2 Кнопка выгрузки на экране результирующей таблицы (`web/`) и строка в `../docs/dev/frontend-api-guide.md`
|
||||
- [x] 2.1 PR #159 слит раньше #141 (решение владельца 22.10.2026); конфликт с #141 (`build_with_members` возвращает
|
||||
объект) разрешается при слиянии #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: Две выгрузки
|
||||
- **WHEN** пользователь дважды выгружает ту же шахматку
|
||||
- **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: Нет обязательного счёта
|
||||
- **WHEN** в плане счетов отсутствует счёт 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