AURORA-1887: открытый АХР пересчитывает итоги после удаления записи аренды/коммуналки/охраны #325

Merged
aep merged 1 commits from feat/324-aurora-1887-ahr-delete-refresh into test 2026-11-12 00:01:19 +03:00
Owner

Closes #324. Возврат тестировщика по AURORA-1887 (11.11.2026).

Что было

После удаления записи на листе «АХР Аренда» (и так же для коммуналки и охраны) у другого пользователя открытый АХР показывал прежние итоги (I кв. 1 225 вместо 1 075) до перезагрузки.

Причина

notify_ahr_about_satellite_change (api/src/api/v1/websocket.py) при row_deleted рассылал на АХР row_deleted по строке сателлита с result: []. Эта строка на АХР скрыта (AURORA-1887), фронт её не находит, а пересчитанных заголовков не получает. Правка и добавление записей работали, потому что для них уходит дельта get_form2_ahr_satellite_delta с заголовками.

Исправление

  • В result события row_deleted теперь пересчитанные заголовки ROOT/GROUP/ITEM/SUB_ITEM/SUB_SUB_ITEM по пути статьи удалённой строки — тот же набор, что v3.del_budget_line отдаёт для обычных листов. Фронт (useRealtimeData: updateCells(result) → deleteRow) уже так это обрабатывает.
  • Поиск удалённой строки по аудиту и выборка заголовков вынесены из websocket.py в SheetRepository / SheetService.get_form2_ahr_satellite_delete_delta.
  • Протокол WS, фронт и SQL-функции не меняются, миграции нет.

Проверка

  • Новые тесты: tests/integration/test_form2_ahr_satellite_integration.py::test_satellite_delete_delta_* (3 листа + нет записи в аудите), tests/unit/test_websocket_ahr_satellite_delete.py.
  • Backend целиком: 900 passed, 10 failed — ровно известные падения на чистой test (form3 add_project, satellite spod ×3, upd_form_cells_subtree ×3, 0037_guard, export_service_query_params ×2).
  • Вручную в двух браузерах не проверялось.

Rulings I made

  • R-1: SQL поиска по аудиту и заголовков — текстовым запросом в репозитории, без новой SQL-функции и миграции. Номер миграции не конфликтует с #315/#323 (обе претендуют на 0060), а запрос по аудиту и раньше жил в Python. Цена ошибки: если позже понадобится тот же набор в SQL, его придётся перенести в функцию.

Findings

Маркер Суть Статус
O-1 10 известных падений backend-набора на чистой test (не связаны с правкой) deferred (уже в #311/#322)
O-2 Ручная проверка в двух браузерах не делалась deferred

🤖 Generated with Claude Code

Closes #324. Возврат тестировщика по AURORA-1887 (11.11.2026). ## Что было После удаления записи на листе «АХР Аренда» (и так же для коммуналки и охраны) у другого пользователя открытый АХР показывал прежние итоги (I кв. 1 225 вместо 1 075) до перезагрузки. ## Причина `notify_ahr_about_satellite_change` (`api/src/api/v1/websocket.py`) при `row_deleted` рассылал на АХР `row_deleted` по строке сателлита с `result: []`. Эта строка на АХР скрыта (AURORA-1887), фронт её не находит, а пересчитанных заголовков не получает. Правка и добавление записей работали, потому что для них уходит дельта `get_form2_ahr_satellite_delta` с заголовками. ## Исправление - В `result` события `row_deleted` теперь пересчитанные заголовки ROOT/GROUP/ITEM/SUB_ITEM/SUB_SUB_ITEM по пути статьи удалённой строки — тот же набор, что `v3.del_budget_line` отдаёт для обычных листов. Фронт (`useRealtimeData`: `updateCells(result)` → `deleteRow`) уже так это обрабатывает. - Поиск удалённой строки по аудиту и выборка заголовков вынесены из `websocket.py` в `SheetRepository` / `SheetService.get_form2_ahr_satellite_delete_delta`. - Протокол WS, фронт и SQL-функции не меняются, миграции нет. ## Проверка - Новые тесты: `tests/integration/test_form2_ahr_satellite_integration.py::test_satellite_delete_delta_*` (3 листа + нет записи в аудите), `tests/unit/test_websocket_ahr_satellite_delete.py`. - Backend целиком: 900 passed, 10 failed — ровно известные падения на чистой `test` (form3 add_project, satellite spod ×3, upd_form_cells_subtree ×3, 0037_guard, export_service_query_params ×2). - Вручную в двух браузерах не проверялось. ## Rulings I made - R-1: SQL поиска по аудиту и заголовков — текстовым запросом в репозитории, без новой SQL-функции и миграции. Номер миграции не конфликтует с #315/#323 (обе претендуют на 0060), а запрос по аудиту и раньше жил в Python. Цена ошибки: если позже понадобится тот же набор в SQL, его придётся перенести в функцию. ## Findings | Маркер | Суть | Статус | |---|---|---| | O-1 | 10 известных падений backend-набора на чистой `test` (не связаны с правкой) | deferred (уже в #311/#322) | | O-2 | Ручная проверка в двух браузерах не делалась | deferred | 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 1 commit 2026-11-11 22:52:18 +03:00
notify_ahr_about_satellite_change рассылал на АХР row_deleted по скрытой
(AURORA-1887) строке сателлита с пустым result: фронт не находил строку
и не получал пересчитанных заголовков — итоги статьи, раздела и сметы
оставались прежними до перезагрузки.

Теперь в result — заголовки ROOT/GROUP/ITEM/SUB_ITEM/SUB_SUB_ITEM по пути
статьи удалённой строки (как del_budget_line для обычных листов). Поиск
строки по аудиту и выборка заголовков вынесены в
SheetRepository/SheetService.get_form2_ahr_satellite_delete_delta.
Протокол WS и фронт не меняются.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep requested review from tsygankoviva 2026-11-11 22:52:31 +03:00
aep merged commit fb45e8ddca into test 2026-11-12 00:01:19 +03:00
Author
Owner

Влито в test без ревью по решению владельца задачи (fb45e8d), чтобы попасть в раскатку 12.11. Правка только в бэкенде (websocket.py + SheetService/SheetRepository), без миграции. @tsygankoviva — посмотри, пожалуйста, постфактум; замечания поправлю отдельным PR.

Влито в test без ревью по решению владельца задачи (fb45e8d), чтобы попасть в раскатку 12.11. Правка только в бэкенде (websocket.py + SheetService/SheetRepository), без миграции. @tsygankoviva — посмотри, пожалуйста, постфактум; замечания поправлю отдельным PR.
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/DFiP_Budget_planing#325
No description provided.