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>
This commit is contained in:
parent
5d4fd67d3d
commit
d096459c75
@ -870,7 +870,8 @@ Q2–Q4 не подходят (R-14a). Привязываются только `
|
|||||||
|
|
||||||
API: список счетов `GET /directories/accounts`, правила версии `GET …/elimination-rules`, матрица
|
API: список счетов `GET /directories/accounts`, правила версии `GET …/elimination-rules`, матрица
|
||||||
`GET …/intercompany-matrix/all` и `POST …/manual`, их XLSX-выгрузки, статичная таблица
|
`GET …/intercompany-matrix/all` и `POST …/manual`, их XLSX-выгрузки, статичная таблица
|
||||||
`GET …/intercompany-matrix/result-table`. Режим PRESET (счета и показатель из правила элиминации):
|
`GET …/intercompany-matrix/result-table` и её XLSX `GET …/intercompany-matrix/result-table/export`
|
||||||
|
(аудит `EXPORT`, `report = "intercompany_result_table"`). Режим PRESET (счета и показатель из правила элиминации):
|
||||||
`GET …/intercompany-matrix/preset/{rule_id}` и его выгрузка `…/preset/{rule_id}/export`.
|
`GET …/intercompany-matrix/preset/{rule_id}` и его выгрузка `…/preset/{rule_id}/export`.
|
||||||
`GET …/elimination-rules` отдаёт объект `{version_no, is_version_fixed, rules}` (у правила есть `id`): при незаданной
|
`GET …/elimination-rules` отдаёт объект `{version_no, is_version_fixed, rules}` (у правила есть `id`): при незаданной
|
||||||
версии правил — открытые правила (`valid_to IS NULL`) с максимальным `version_no`; ответ сообщает этот номер. Ошибки PRESET: 422 `RULE_REQUIRED`, `INVALID_RULE`,
|
версии правил — открытые правила (`valid_to IS NULL`) с максимальным `version_no`; ответ сообщает этот номер. Ошибки PRESET: 422 `RULE_REQUIRED`, `INVALID_RULE`,
|
||||||
|
|||||||
@ -17,7 +17,7 @@ change не входит. Шахматка — чистая функция от
|
|||||||
`ACCOUNTS_REQUIRED`; неверные `side_1`/`measure`/`company_no` — 422 `INVALID_RULE`; не передан `rule_id` — 422
|
`ACCOUNTS_REQUIRED`; неверные `side_1`/`measure`/`company_no` — 422 `INVALID_RULE`; не передан `rule_id` — 422
|
||||||
`RULE_REQUIRED`.
|
`RULE_REQUIRED`.
|
||||||
3. Показатель (`closing`/`turnover`) берётся из правила; ALL и MANUAL остаются на `closing`.
|
3. Показатель (`closing`/`turnover`) берётся из правила; ALL и MANUAL остаются на `closing`.
|
||||||
4. Применённые корректировки правила (`status = APPLIED`, тот же `rule_id` и версия консолидации) уменьшают
|
4. *Отменено решением владельца 21.10.2026 (п. 3 ниже), в реализацию не входит.* Применённые корректировки правила (`status = APPLIED`, тот же `rule_id` и версия консолидации) уменьшают
|
||||||
`amount_a` ячейки `(A, B)` на `debit_adjustment` корректировки (`legal_entity_id = A`, `counterparty_id = B`) и
|
`amount_a` ячейки `(A, B)` на `debit_adjustment` корректировки (`legal_entity_id = A`, `counterparty_id = B`) и
|
||||||
`amount_b` на `credit_adjustment` корректировки `(B, A)`; расхождение, процент и порог пересчитываются, ID
|
`amount_b` на `credit_adjustment` корректировки `(B, A)`; расхождение, процент и порог пересчитываются, ID
|
||||||
корректировок попадают в `correction_ids_debit/credit`.
|
корректировок попадают в `correction_ids_debit/credit`.
|
||||||
@ -38,7 +38,7 @@ change не входит. Шахматка — чистая функция от
|
|||||||
3. **Корректировки из шахматки убираются** (решение 4 выше и `correction_ids_*` в ячейке). Причины: корректировки в
|
3. **Корректировки из шахматки убираются** (решение 4 выше и `correction_ids_*` в ячейке). Причины: корректировки в
|
||||||
ядре никто не создаёт (спринт корректировок), семантика ключа `(rule, A, B)` относительно ячейки (A, B) / (B, A) не
|
ядре никто не создаёт (спринт корректировок), семантика ключа `(rule, A, B)` относительно ячейки (A, B) / (B, A) не
|
||||||
утверждена, счета корректировки и `parent_correction_id` не учитывались; §6 описывает шахматку как суммы первички.
|
утверждена, счета корректировки и `parent_correction_id` не учитывались; §6 описывает шахматку как суммы первички.
|
||||||
Код корректировок выделен в ветку `AURORA-1747` и возвращается после решения по аналитике
|
Код корректировок сохранён в ветке `wip/shahmatka-corrections-unpaired` (PR #164 не сливается) и возвращается после решения по аналитике
|
||||||
AURORA-1643 «Учитывание корректировок в шахматке».
|
AURORA-1643 «Учитывание корректировок в шахматке».
|
||||||
4. **Ручка `…/preset/{rule_id}/unpaired-osv` убирается** (решение 5 выше). Причины: «без пары» по наличию строк
|
4. **Ручка `…/preset/{rule_id}/unpaired-osv` убирается** (решение 5 выше). Причины: «без пары» по наличию строк
|
||||||
(дефект AURORA-1651), ложные срабатывания при пересечении счетов сторон (76 в правиле № 6), нет ячейки и стороны
|
(дефект AURORA-1651), ложные срабатывания при пересечении счетов сторон (76 в правиле № 6), нет ячейки и стороны
|
||||||
@ -53,7 +53,8 @@ change не входит. Шахматка — чистая функция от
|
|||||||
|
|
||||||
- 2026-10-21. Change пишет ревьюер в ветке автора по решению владельца. Обоснование: автор не оформила OpenSpec. Цена
|
- 2026-10-21. Change пишет ревьюер в ветке автора по решению владельца. Обоснование: автор не оформила OpenSpec. Цена
|
||||||
ошибки: автор переписывает change.
|
ошибки: автор переписывает change.
|
||||||
- 2026-10-21. Спека описывает фактическое поведение PR; спорное вынесено в Known issues. Обоснование: домен решает
|
- 2026-10-21. Спека описывает фактическое поведение PR; спорное вынесено в Known issues (раздел снят в раунде 2 —
|
||||||
|
все пункты закрыты автором). Обоснование: домен решает
|
||||||
автор и владелец, не ревьюер. Цена ошибки: после решения владельца спека меняется дельтой.
|
автор и владелец, не ревьюер. Цена ошибки: после решения владельца спека меняется дельтой.
|
||||||
- 2026-10-21. Поле `as_of` удалено из `EliminationRulesOut` как мёртвое: после правок по ревью всегда `None`, в main
|
- 2026-10-21. Поле `as_of` удалено из `EliminationRulesOut` как мёртвое: после правок по ревью всегда `None`, в main
|
||||||
его не было, потребителей нет. Цена ошибки: если фронт ждал `as_of`, поле нужно вернуть.
|
его не было, потребителей нет. Цена ошибки: если фронт ждал `as_of`, поле нужно вернуть.
|
||||||
@ -63,3 +64,6 @@ change не входит. Шахматка — чистая функция от
|
|||||||
(`consolidated_osv.py`) разбита на две без изменения результата (ruff E501). Цена ошибки: нулевая.
|
(`consolidated_osv.py`) разбита на две без изменения результата (ruff E501). Цена ошибки: нулевая.
|
||||||
- 2026-10-21. В MODIFIED-блоке требования про правила элиминации и аудит экспорта приведён полный текст; требование
|
- 2026-10-21. В MODIFIED-блоке требования про правила элиминации и аудит экспорта приведён полный текст; требование
|
||||||
«XLSX шахматки» (ALL/MANUAL) не менялось, поведение PRESET описано отдельным ADDED-требованием.
|
«XLSX шахматки» (ALL/MANUAL) не менялось, поведение PRESET описано отдельным ADDED-требованием.
|
||||||
|
- 2026-10-22. Раунд 2 ревью: в ветку влит `main` (#163), в README возвращена фраза про XLSX результирующей таблицы,
|
||||||
|
потерянная при merge автора (b7d9794). Показатель пресета в docs (#146, §6) приведён к change: `measure` правила,
|
||||||
|
у правил ББ — `closing`. Цена ошибки: нулевая.
|
||||||
|
|||||||
@ -3,8 +3,8 @@
|
|||||||
Шахматка ВГО (ТЗ §6) считалась только по всем счетам (ALL) или по счетам, выбранным вручную (MANUAL). Аналитику нужен
|
Шахматка ВГО (ТЗ §6) считалась только по всем счетам (ALL) или по счетам, выбранным вручную (MANUAL). Аналитику нужен
|
||||||
режим «пресет»: счета и показатель берутся из правила элиминации (Прил. 3).
|
режим «пресет»: счета и показатель берутся из правила элиминации (Прил. 3).
|
||||||
Реализация — PR RSHB/arm-core#141 (ветка `add-preset-shahmatka`, автор — Потапова).
|
Реализация — PR RSHB/arm-core#141 (ветка `add-preset-shahmatka`, автор — Потапова).
|
||||||
Требования оформлены как дельты этого change'а при ревью (решение владельца 21.10.2026); спорное поведение вынесено в
|
Требования оформлены как дельты этого change'а при ревью (решение владельца 21.10.2026); решения владельца и ревью —
|
||||||
`design.md`, `## Known issues`, и в спеке не закреплено как окончательное.
|
`design.md`.
|
||||||
|
|
||||||
## What Changes
|
## What Changes
|
||||||
|
|
||||||
|
|||||||
@ -35,14 +35,21 @@
|
|||||||
### Requirement: XLSX шахматки пресета
|
### Requirement: XLSX шахматки пресета
|
||||||
`GET …/intercompany-matrix/preset/{rule_id}/export` SHALL возвращать XLSX с теми же строками, что JSON-расчёт
|
`GET …/intercompany-matrix/preset/{rule_id}/export` SHALL возвращать XLSX с теми же строками, что JSON-расчёт
|
||||||
пресета. Имя файла SHALL иметь вид `intercompany-matrix_<ГК>_<год>-<квартал>_v<n>_rule-balance-<rule_no>.xlsx`. Шапка SHALL
|
пресета. Имя файла SHALL иметь вид `intercompany-matrix_<ГК>_<год>-<квартал>_v<n>_rule-balance-<rule_no>.xlsx`. Шапка SHALL
|
||||||
содержать режим «Пресет», коды счетов дебета и кредита правила, номер правила, статьи А и Б, фактическую версию правил
|
содержать режим «Пресет», счета дебета и кредита так, как они заданы в правиле (без раскрытия по субсчетам), и отдельно
|
||||||
и строку «Показатель» со значением «Сальдо» для `closing` или «Оборот» для `turnover`. Строка «Показатель» SHALL присутствовать и в выгрузках ALL и MANUAL (значение
|
исключения правила («кроме …»), номер правила, статьи сторон дебета и кредита (при `side_1 = K` статьи меняются местами
|
||||||
|
вместе со сторонами), фактическую версию правил и строку «Показатель» со значением «Сальдо» для `closing` или «Оборот» для `turnover`. Строка «Показатель» SHALL присутствовать и в выгрузках ALL и MANUAL (значение
|
||||||
«Сальдо»).
|
«Сальдо»).
|
||||||
|
|
||||||
#### Scenario: Выгрузка по оборотам
|
#### Scenario: Выгрузка по оборотам
|
||||||
- **WHEN** пользователь выгружает пресет с `measure = turnover`
|
- **WHEN** пользователь выгружает пресет с `measure = turnover`
|
||||||
- **THEN** шапка содержит «Режим — Пресет», «Показатель — Оборот», номер, статьи и версию правила; имя файла заканчивается на `_rule-balance-<rule_no>.xlsx`
|
- **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: Правило не найдено
|
#### Scenario: Правило не найдено
|
||||||
- **WHEN** `rule_id` не существует
|
- **WHEN** `rule_id` не существует
|
||||||
- **THEN** 404, файл не отдаётся, событие аудита не пишется
|
- **THEN** 404, файл не отдаётся, событие аудита не пишется
|
||||||
|
|||||||
@ -1,14 +1,23 @@
|
|||||||
## 1. Реализация
|
## 1. Реализация
|
||||||
|
|
||||||
Реализация выполнена автором в PR RSHB/arm-core#141; задач плана нет. Доработки по замечаниям ревью — см.
|
Реализация выполнена автором в PR RSHB/arm-core#141; задач плана нет. Доработки по замечаниям ревью — комментарии PR
|
||||||
`design.md`, `## Known issues`.
|
(раунды 1–2) и разделы решений в `design.md`.
|
||||||
|
|
||||||
## 2. Доработки по решениям владельца 2026-10-21 (автор)
|
## 2. Доработки по решениям владельца 2026-10-21 (автор)
|
||||||
|
|
||||||
- [x] 2.1 Отдельным коммитом убрать учёт корректировок (`_apply_corrections`, `correction_for_version_consolidation`,
|
- [x] 2.1 Отдельным коммитом убрать учёт корректировок (`_apply_corrections`, `correction_for_version_consolidation`,
|
||||||
`correction_ids_*`) вместе с тестами; код выделен в `AURORA-1747`.
|
`correction_ids_*`) вместе с тестами; код сохранён в `wip/shahmatka-corrections-unpaired`.
|
||||||
- [x] 2.1a Убрать ручку `unpaired-osv` (`get_unpaired_rows`, `UnpairedOsvOut`, маршрут) вместе с тестами;
|
- [x] 2.1a Убрать ручку `unpaired-osv` (`get_unpaired_rows`, `UnpairedOsvOut`, маршрут) вместе с тестами;
|
||||||
код сохранён в `wip/shahmatka-corrections-unpaired`.
|
код сохранён в `wip/shahmatka-corrections-unpaired`.
|
||||||
- [x] 2.2 PRESET — только правила `statement_type = balance`; правило ОФР — 422 `INVALID_RULE`, тест.
|
- [x] 2.2 PRESET — только правила `statement_type = balance`; правило ОФР — 422 `INVALID_RULE`, тест.
|
||||||
- [x] 2.3 Несколько открытых `version_no` — только максимальная версия; вернуть её номер, тест.
|
- [x] 2.3 Несколько открытых `version_no` — только максимальная версия; вернуть её номер, тест.
|
||||||
- [x] 2.4 Ревьюер: убрать из дельты `consolidated-osv` требования про корректировки и `unpaired-osv`, обновить README.
|
- [x] 2.4 Ревьюер: убрать из дельты `consolidated-osv` требования про корректировки и `unpaired-osv`, обновить README.
|
||||||
|
|
||||||
|
## 3. Ревью, раунд 2 (2026-10-22)
|
||||||
|
|
||||||
|
- [x] 3.1 Ревьюер: влить `main`, вернуть фразу README про XLSX результирующей таблицы, поправить design/proposal/tasks.
|
||||||
|
- [x] 3.2 Ревьюер: показатель пресета в docs #146 §6 — `measure` правила.
|
||||||
|
- [ ] 3.3 Автор: название и описание PR, шапка xlsx пресета (счета правила и «кроме»), подписи статей при `side_1 = K`,
|
||||||
|
лишняя проверка в `_export_response`, реквизиты правила в `MatrixExportInfo` и `_filename`, описания ошибок preset в
|
||||||
|
OpenAPI.
|
||||||
|
- [ ] 3.4 После слияния: архив change.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user