Compare commits
No commits in common. "b959a613c0ccd22feaabe929f9e5d8c6f9139fad" and "6659e3f0a8bbad9868abb61e1bae74f9f102368b" have entirely different histories.
b959a613c0
...
6659e3f0a8
@ -29,9 +29,4 @@
|
|||||||
в файле. Цена ошибки: при таком дефекте расчёта выгрузка ответит 500 вместо файла с нулём.
|
в файле. Цена ошибки: при таком дефекте расчёта выгрузка ответит 500 вместо файла с нулём.
|
||||||
- 22.10.2026. Общие реквизиты книги вынесены в базовый `VersionExportInfo`, затронут и код выгрузки шахматки.
|
- 22.10.2026. Общие реквизиты книги вынесены в базовый `VersionExportInfo`, затронут и код выгрузки шахматки.
|
||||||
Обоснование: замечание ревью о копиях шапки и имени файла. Цена ошибки: конфликт слияния с PR #141 (тот меняет
|
Обоснование: замечание ревью о копиях шапки и имени файла. Цена ошибки: конфликт слияния с PR #141 (тот меняет
|
||||||
`MatrixExportInfo`); порядок — сначала #141, затем ребейз #159. Владелец 22.10.2026 решил иначе: #159 слит первым,
|
`MatrixExportInfo`); порядок — сначала #141, затем ребейз #159.
|
||||||
конфликт разрешается при слиянии #141.
|
|
||||||
- 22.10.2026. M-7 ревью (openpyxl пишет числа через `%.16g`, `Decimal` теряет точность после 16 значащих цифр)
|
|
||||||
отклонено. Обоснование: Excel хранит число с точностью 15 значащих цифр, выгрузка в ячейку-число не может быть точнее;
|
|
||||||
потеря начинается с сумм порядка 10^14 руб., таких в отчётности групп нет. То же относится к выгрузке шахматки. Цена
|
|
||||||
ошибки: для сумм от 10^14 руб. последние копейки в файле округлятся; лечится только выгрузкой сумм текстом.
|
|
||||||
@ -6,7 +6,5 @@
|
|||||||
|
|
||||||
## 2. После слияния
|
## 2. После слияния
|
||||||
|
|
||||||
- [x] 2.1 PR #159 слит раньше #141 (решение владельца 22.10.2026); конфликт с #141 (`build_with_members` возвращает
|
- [ ] 2.1 Ребейз на `main` после слияния PR #141 (`build_with_members` возвращает объект), `make check-full`
|
||||||
объект) разрешается при слиянии #141
|
- [ ] 2.2 Кнопка выгрузки на экране результирующей таблицы (`web/`) и строка в `../docs/dev/frontend-api-guide.md`
|
||||||
- [x] 2.2 Кнопка выгрузки на экране результирующей таблицы — в PR #158 (коммит 473492f); строка в
|
|
||||||
`../docs/dev/frontend-api-guide.md` — follow-up в arm-ka-docs
|
|
||||||
@ -157,18 +157,3 @@ 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,24 +251,3 @@ 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