Фикс: задвоенное v_form2_view/v_form2_sheet_jsonb после PR #292 #295

Merged
tsygankoviva merged 1 commits from feat/294-fix-0052-duplicate-v-form2-view into test 2026-11-03 18:10:18 +03:00
Owner

Closes #294.

Что было не так

PR #292 (fix-migrations, Илья) слил два независимо развивавшихся набора миграций 0050-0053, которые обе претендовали на одни и те же номера: цепочку Фомичева (СПОД/лимиты АХР/источник строки/скрытие сателлитов — AURORA-1906/1897/1907/1887) и отдельную ветку AURORA-1850 (upd_form_cells_subtree, focus_lines-рефакторинг для частичного пересчёта поддерева), которая уже сидела в test до этого под теми же номерами. Слияние прошло простой конкатенацией содержимого файлов, без проверки повторных определений.

Эффект: в 0052_form2_ahr_limit_period_vat_units.sql функция v3.v_form2_view определялась ДВА раза — актуальное тело (с правками AURORA-1897/1906) и устаревшее тело из ветки upd_form_cells_subtree (4-аргументное, до любых правок Фомичева). SQL выполняется построчно, второе определение побеждает — в БД осталось тело без СПОД и с вызовом уже удалённой этой же миграцией старой 4-аргументной _form2_ahr_limit_amount. Ровно это сегодня поймал Салмин на AURORA-1897 (у принтеров/МФУ/копировальных аппаратов норматив снова не отображается — откат к поведению до фикса).

Аналогичная, но не дублирующая, а расходящаяся по сигнатуре проблема была в 0054_form2_ahr_hide_satellite_rows.sql: там v3.v_form2_sheet_jsonb осталась 3-аргументной (без p_focus_lines), в то время как реальный вызов из v_form2_view идёт 4 позиционными аргументами — резолвился в версию из 0052, которая не знает ни про AURORA-1887 (скрытие сателлитных строк), ни про AURORA-1907 (source/is_over_limit/limit_year/over_limit_year).

Что исправлено

  • 0052: убрано второе (устаревшее) определение v3.v_form2_view; AHR_LIMIT-ветка (_form2_ahr_limit_amount(period, limit_without_vat, qty), amount_year, строка «Итого») и fact_q4.spod в AHR_RENT/AHR_UTILITY/AHR_SECURITY перенесены в единственное, 4-арг. тело функции с сохранением фильтра p_focus_lines. Строка «Итого» больше не возвращается безусловно — только когда p_focus_lines IS NULL или фокус действительно пересекается с деревом лимитов (иначе пустая дельта перестаёт быть «почти пустой»).
  • 0054: v3.v_form2_sheet_jsonb переведена на 4-арг. сигнатуру (с DROP FUNCTION старой 3-арг. перегрузки), _sort_rank добавлен в RETURNS TABLE и в финальный SELECT.
  • 0053: v3.get_form2_ahr_satellite_delta — добавлен 'SUB_SUB_ITEM' в список допустимых row_type заголовков; без него WS-дельта по статьям глубины 4 (принтеры/МФУ/копировальные аппараты) была пустой даже при верной остальной логике.

Проверено: полный прогон миграций 0001→0054 на одноразовом Postgres 16 (Docker) с нуля проходит чисто; ровно один overload на v_form2_view/v_form2_sheet_jsonb/v_form2_sheet_sections после миграции.

Findings

Маркер Суть Статус
R-1 Второе определение v_form2_view в 0052 (откат AURORA-1897/1906) fixed 049da41
R-2 v_form2_sheet_jsonb в 0054 — 3-арг., вызов идёт 4-арг., резолвится в версию без AURORA-1887/1907 fixed 049da41
R-3 Строка «Итого» в AHR_LIMIT возвращалась безусловно даже при непустом непересекающемся p_focus_lines fixed 049da41
R-4 get_form2_ahr_satellite_delta не включал SUB_SUB_ITEM — дельта по статьям глубины 4 пуста fixed 049da41

Deferred (не трогал — не моя область, заведено #296)

Полный прогон тестов (393 passed, 18 failed, 4 skipped, было 392/19/4 до фикса) поднял пачку независимых, ранее никогда не исполнявшихся находок — миграции не накатывались с головы до головы ни разу до сегодняшнего дня (коллизия номеров revision), поэтому ничего из цепочек AURORA-1850/1906/1897/1887/1907 реально не проверялось тестами. Детали — в #296.

Closes #294. ## Что было не так PR #292 (`fix-migrations`, Илья) слил два независимо развивавшихся набора миграций `0050-0053`, которые обе претендовали на одни и те же номера: цепочку Фомичева (СПОД/лимиты АХР/источник строки/скрытие сателлитов — AURORA-1906/1897/1907/1887) и отдельную ветку AURORA-1850 (`upd_form_cells_subtree`, focus_lines-рефакторинг для частичного пересчёта поддерева), которая уже сидела в `test` до этого под теми же номерами. Слияние прошло простой конкатенацией содержимого файлов, без проверки повторных определений. **Эффект:** в `0052_form2_ahr_limit_period_vat_units.sql` функция `v3.v_form2_view` определялась ДВА раза — актуальное тело (с правками AURORA-1897/1906) и устаревшее тело из ветки `upd_form_cells_subtree` (4-аргументное, до любых правок Фомичева). SQL выполняется построчно, второе определение побеждает — в БД осталось тело без СПОД и с вызовом уже удалённой этой же миграцией старой 4-аргументной `_form2_ahr_limit_amount`. Ровно это сегодня поймал Салмин на AURORA-1897 (у принтеров/МФУ/копировальных аппаратов норматив снова не отображается — откат к поведению до фикса). Аналогичная, но не дублирующая, а расходящаяся по сигнатуре проблема была в `0054_form2_ahr_hide_satellite_rows.sql`: там `v3.v_form2_sheet_jsonb` осталась 3-аргументной (без `p_focus_lines`), в то время как реальный вызов из `v_form2_view` идёт 4 позиционными аргументами — резолвился в версию из 0052, которая не знает ни про AURORA-1887 (скрытие сателлитных строк), ни про AURORA-1907 (source/is_over_limit/limit_year/over_limit_year). ## Что исправлено - **0052**: убрано второе (устаревшее) определение `v3.v_form2_view`; AHR_LIMIT-ветка (`_form2_ahr_limit_amount(period, limit_without_vat, qty)`, `amount_year`, строка «Итого») и `fact_q4.spod` в AHR_RENT/AHR_UTILITY/AHR_SECURITY перенесены в единственное, 4-арг. тело функции с сохранением фильтра `p_focus_lines`. Строка «Итого» больше не возвращается безусловно — только когда `p_focus_lines IS NULL` или фокус действительно пересекается с деревом лимитов (иначе пустая дельта перестаёт быть «почти пустой»). - **0054**: `v3.v_form2_sheet_jsonb` переведена на 4-арг. сигнатуру (с `DROP FUNCTION` старой 3-арг. перегрузки), `_sort_rank` добавлен в `RETURNS TABLE` и в финальный `SELECT`. - **0053**: `v3.get_form2_ahr_satellite_delta` — добавлен `'SUB_SUB_ITEM'` в список допустимых `row_type` заголовков; без него WS-дельта по статьям глубины 4 (принтеры/МФУ/копировальные аппараты) была пустой даже при верной остальной логике. Проверено: полный прогон миграций `0001→0054` на одноразовом Postgres 16 (Docker) с нуля проходит чисто; ровно один overload на `v_form2_view`/`v_form2_sheet_jsonb`/`v_form2_sheet_sections` после миграции. ## Findings | Маркер | Суть | Статус | |---|---|---| | R-1 | Второе определение `v_form2_view` в 0052 (откат AURORA-1897/1906) | fixed `049da41` | | R-2 | `v_form2_sheet_jsonb` в 0054 — 3-арг., вызов идёт 4-арг., резолвится в версию без AURORA-1887/1907 | fixed `049da41` | | R-3 | Строка «Итого» в AHR_LIMIT возвращалась безусловно даже при непустом непересекающемся `p_focus_lines` | fixed `049da41` | | R-4 | `get_form2_ahr_satellite_delta` не включал `SUB_SUB_ITEM` — дельта по статьям глубины 4 пуста | fixed `049da41` | ## Deferred (не трогал — не моя область, заведено #296) Полный прогон тестов (`393 passed, 18 failed, 4 skipped`, было `392/19/4` до фикса) поднял пачку **независимых, ранее никогда не исполнявшихся** находок — миграции не накатывались с головы до головы ни разу до сегодняшнего дня (коллизия номеров revision), поэтому ничего из цепочек AURORA-1850/1906/1897/1887/1907 реально не проверялось тестами. Детали — в #296.
aep added 1 commit 2026-11-03 17:11:42 +03:00
PR #292 слил два независимо развивавшихся набора миграций 0050-0053
(цепочка Фомичева и ветка AURORA-1850/upd_form_cells_subtree) простой
конкатенацией SQL. Для 0052 это дало ВТОРОЕ, более старое определение
v3.v_form2_view (без СПОД и без правок лимитов AURORA-1897/1906) ниже
первого в том же файле — оно и остаётся финальным телом функции.
Аналогичная проблема в 0054: v3.v_form2_sheet_jsonb там 3-аргументная,
без p_focus_lines, поэтому реальный вызов из v_form2_view (4 аргумента)
резолвился в версию из 0052 без AURORA-1887/1907.

- 0052: убрано второе определение v_form2_view; AHR_LIMIT-ветка и
  fact_q4.spod в AHR_RENT/AHR_UTILITY/AHR_SECURITY перенесены в
  единственное (4-арг.) тело функции; строка «Итого» теперь не
  возвращается при непустом p_focus_lines без совпадений (пустая
  дельта остаётся пустой).
- 0054: v_form2_sheet_jsonb переведена на 4-арг. сигнатуру с DROP
  старой 3-арг. перегрузки.
- 0053: get_form2_ahr_satellite_delta — добавлен SUB_SUB_ITEM в список
  заголовков (без него дельта по статьям глубины 4 пуста).

Closes issue #294.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
aep requested review from tsygankoviva 2026-11-03 17:20:18 +03:00
tsygankoviva approved these changes 2026-11-03 17:57:53 +03:00
tsygankoviva merged commit de94b08719 into test 2026-11-03 18:10:18 +03:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/DFiP_Budget_planing#295
No description provided.