AURORA-1883: справочник ВСП — просмотр закрытых ВСП (статус, период закрытия), подпись закрытых ВСП в формах (поверх #328) #332

Merged
aep merged 9 commits from feat/330-aurora-1883-closed-vsp into test 2026-11-12 17:04:48 +03:00
Owner

Closes #330. Jira: AURORA-1883 (эпик AURORA-1876, замечание №3 «Справочники»: просмотр закрытых ВСП, в том числе давно закрытых). Поверх #328 (AURORA-1885) — в диффе против test виден и его коммит 744b71f. Миграции нет; от #331 (1886) не зависит.

Спека: openspec/changes/aurora-1883-closed-vsp/ (proposal, specs/vsp-directory/spec.md, design D1–D8). План: docs/superpowers/plans/2026-11-12-aurora-1883-closed-vsp.md.

Что сделано

Бэк

  • GET /dict/info: status=active|closed|all (по умолчанию active, иное → 422), close_date_start / close_date_end; закрытые — по дате закрытия, свежие сверху. Удалённые не возвращаются никогда; исполнитель видит только свои ССП при любом статусе.
  • POST /dict/info/export: те же status и период в теле.
  • GET /dict/info/dropdown?include_inactive=true — с закрытыми (для подписей в формах).
  • Без новых параметров всё как раньше. Удалены неиспользуемый close_date_is_null и мёртвый return в VSPRepository.get_list.

Фронт

  • Справочник ВСП: переключатель «Действующие / Закрытые / Все», поля «Закрыт с / по», колонка «Статус» (бейдж «Действует» / «Закрыт»), приглушённый текст закрытых, выгрузка по текущему статусу и периоду. В «Закрытые»/«Все» в фильтре и выгрузке доступны и архивные ССП.
  • Листы форм: ячейка ВСП — рег. номер; закрытый — «<рег. номер> (закрыт)»; не найден — «ВСП #» (без форматирования как суммы). Выбор в ячейке — только действующие ВСП.

Проверка

  • Backend полный: 922 passed / 10 failed — те же 10 известных падений test, новых нет (+16 тестов: 10 интеграционных в test_vsp.py, 6 unit в test_vsp_status.py).
  • Фронт: node --test 230/230 (новые vspLabel.test.js, vspListParams.test.js), npm run build ок, biome — без новых замечаний.
  • Ручная проверка на локальном стенде (admin): режимы статуса, сортировка закрытых, период 2021; FORM_2/AHR — «ARCH-2024 (закрыт)», поиск по рег. номеру находит, в редакторе выбор только действующих; удалённый ВСП при «тыс. руб.» → «ВСП #6».
  • Не прогонялись на стенде (проверено чтением кода и ревью): закрытие ВСП в режиме «Действующие» → строка уходит; выгрузка из модалки с текущим статусом.
  • Финальное ревью ветки (opus): Critical 0, Important 1 (I-1 — исправлено), Minor 8.

Rulings I made

  • R-1 (design #10): переключатель статуса виден всем ролям, включая исполнителя РФ — спека без оговорок по ролям. Цена: скрыть одну кнопку.
  • R-2 (design #11): загрузка списка ВСП отделена от загрузки ССП, устаревшие ��тветы отбрасываются. Цена: нет.
  • R-3 (design #12): созданный ВСП, не подходящий под статус, не добавляется в список. Цена: нет.
  • R-4 (design #13): закрытый текущий ВСП в редакторе — скрытый disabled пункт меню. Цена: нет (клавиатура — M-5).
  • R-5 (design #14): InputLabelProps → slotProps.inputLabel (MUI 9). Цена: нет.
  • R-6 (design #15): архивные ССП в фильтре/выгрузке для «Закрытые»/«Все»; создание/правка ВСП — только активные ССП. Цена: лишний пункт списка, если архивных ССП с ВСП нет.

Findings

Маркер Суть Статус
I-1 Закрытые ВСП архивного ССП нельзя выгрузить и отфильтровать fixed a4a674f
M-7 Отчёт называл связку фронта покрытой тестами fixed (формулировка)
M-1 После ошибки загрузки списка остаются данные прежнего статуса deferred
M-2 Поле даты: запрос на каждое нажатие, 5-значный год → 422 deferred
M-3 «Закрытые»: добавление/правка ломают сортировку и период до перезагрузки deferred
M-4 До загрузки dropdown ячейки ВСП показывают «ВСП #id» deferred
M-5 Enter в списке на закрытом ВСП может выбрать первый действующий (гипотеза, не регрессия — проверить) deferred
M-6 Нет проверки «Закрыт с» > «по» deferred
M-8 Модалка выгрузки не показывает выгружаемый статус/период deferred
O-1 Два сценария спеки не прогонялись на стенде (см. «Проверка») deferred
H-2 Цыганков: заменив в строке листа закрытый ВСП на действующий, вернуть закрытый нельзя; какие закрытые можно выбирать — вопрос заказчику (ответ) deferred

Порядок мержа

После #328. С #331 и стеком #315–#323 не пересекается (миграции нет).

🤖 Generated with Claude Code

Closes #330. Jira: AURORA-1883 (эпик AURORA-1876, замечание №3 «Справочники»: просмотр закрытых ВСП, в том числе давно закрытых). **Поверх #328 (AURORA-1885)** — в диффе против test виден и его коммит 744b71f. Миграции нет; от #331 (1886) не зависит. Спека: `openspec/changes/aurora-1883-closed-vsp/` (proposal, `specs/vsp-directory/spec.md`, design D1–D8). План: `docs/superpowers/plans/2026-11-12-aurora-1883-closed-vsp.md`. ## Что сделано **Бэк** - `GET /dict/info`: `status=active|closed|all` (по умолчанию `active`, иное → 422), `close_date_start` / `close_date_end`; закрытые — по дате закрытия, свежие сверху. Удалённые не возвращаются никогда; исполнитель видит только свои ССП при любом статусе. - `POST /dict/info/export`: те же `status` и период в теле. - `GET /dict/info/dropdown?include_inactive=true` — с закрытыми (для подписей в формах). - Без новых параметров всё как раньше. Удалены неиспользуемый `close_date_is_null` и мёртвый `return` в `VSPRepository.get_list`. **Фронт** - Справочник ВСП: переключатель «Действующие / Закрытые / Все», поля «Закрыт с / по», колонка «Статус» (бейдж «Действует» / «Закрыт»), приглушённый текст закрытых, выгрузка по текущему статусу и периоду. В «Закрытые»/«Все» в фильтре и выгрузке доступны и архивные ССП. - Листы форм: ячейка ВСП — рег. номер; закрытый — «<рег. номер> (закрыт)»; не найден — «ВСП #<id>» (без форматирования как суммы). Выбор в ячейке — только действующие ВСП. ## Проверка - Backend полный: **922 passed / 10 failed** — те же 10 известных падений test, новых нет (+16 тестов: 10 интеграционных в `test_vsp.py`, 6 unit в `test_vsp_status.py`). - Фронт: `node --test` 230/230 (новые `vspLabel.test.js`, `vspListParams.test.js`), `npm run build` ок, biome — без новых замечаний. - Ручная проверка на локальном стенде (admin): режимы статуса, сортировка закрытых, период 2021; FORM_2/AHR — «ARCH-2024 (закрыт)», поиск по рег. номеру находит, в редакторе выбор только действующих; удалённый ВСП при «тыс. руб.» → «ВСП #6». - **Не прогонялись на стенде** (проверено чтением кода и ревью): закрытие ВСП в режиме «Действующие» → строка уходит; выгрузка из модалки с текущим статусом. - Финальное ревью ветки (opus): Critical 0, Important 1 (I-1 — исправлено), Minor 8. ## Rulings I made - R-1 (design #10): переключатель статуса виден всем ролям, включая исполнителя РФ — спека без оговорок по ролям. Цена: скрыть одну кнопку. - R-2 (design #11): загрузка списка ВСП отделена от загрузки ССП, устаревшие ��тветы отбрасываются. Цена: нет. - R-3 (design #12): созданный ВСП, не подходящий под статус, не добавляется в список. Цена: нет. - R-4 (design #13): закрытый текущий ВСП в редакторе — скрытый disabled пункт меню. Цена: нет (клавиатура — M-5). - R-5 (design #14): `InputLabelProps` → `slotProps.inputLabel` (MUI 9). Цена: нет. - R-6 (design #15): архивные ССП в фильтре/выгрузке для «Закрытые»/«Все»; создание/правка ВСП — только активные ССП. Цена: лишний пункт списка, если архивных ССП с ВСП нет. ## Findings | Маркер | Суть | Статус | |---|---|---| | I-1 | Закрытые ВСП архивного ССП нельзя выгрузить и отфильтровать | fixed a4a674f | | M-7 | Отчёт называл связку фронта покрытой тестами | fixed (формулировка) | | M-1 | После ошибки загрузки списка остаются данные прежнего статуса | deferred | | M-2 | Поле даты: запрос на каждое нажатие, 5-значный год → 422 | deferred | | M-3 | «Закрытые»: добавление/правка ломают сортировку и период до перезагрузки | deferred | | M-4 | До загрузки dropdown ячейки ВСП показывают «ВСП #id» | deferred | | M-5 | Enter в списке на закрытом ВСП может выбрать первый действующий (гипотеза, не регрессия — проверить) | deferred | | M-6 | Нет проверки «Закрыт с» > «по» | deferred | | M-8 | Модалка выгрузки не показывает выгружаемый статус/период | deferred | | O-1 | Два сценария спеки не прогонялись на стенде (см. «Проверка») | deferred | | H-2 | Цыганков: заменив в строке листа закрытый ВСП на действующий, вернуть закрытый нельзя; какие закрытые можно выбирать — вопрос заказчику ([ответ](https://git.aepif.ru/RSHB/DFiP_Budget_planing/pulls/332#issuecomment-9662)) | deferred | ## Порядок мержа После #328. С #331 и стеком #315–#323 не пересекается (миграции нет). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 9 commits 2026-11-12 11:28:49 +03:00
- VSPRepository.get: with_deleted=True означает «включая удалённые», а не «только удалённые»
- VSPService.update: ключ closed_at (имя поля модели) вместо close_date (входной alias)
- тесты: integration test_vsp.py, unit test_vsp_service_close_date.py

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GET /dict/info: status=active|closed|all (по умолчанию active), close_date_start/end;
закрытые сортируются по дате закрытия по убыванию. Удалён неиспользуемый
close_date_is_null и мёртвый return в VSPRepository.get_list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Окно создания и правки ВСП по-прежнему предлагает только активные ССП.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep requested review from tsygankoviva 2026-11-12 12:21:26 +03:00
aep requested review from PotapovaA 2026-11-12 12:21:27 +03:00
Owner

Теперь при удалении ВСП, как я понимаю, если он привязан в листах он остается, но поменять мы можем только на активный? А если пользователь поменял, а потом понял, что ошибся?

Теперь при удалении ВСП, как я понимаю, если он привязан в листах он остается, но поменять мы можем только на активный? А если пользователь поменял, а потом понял, что ошибся?
Owner

Теперь при удалении ВСП, как я понимаю, если он привязан в листах он остается, но поменять мы можем только на активный? А если пользователь поменял, а потом понял, что ошибся?

видимо, будет обратно добавлять в активные

> Теперь при удалении ВСП, как я понимаю, если он привязан в листах он остается, но поменять мы можем только на активный? А если пользователь поменял, а потом понял, что ошибся? видимо, будет обратно добавлять в активные
tsygankoviva approved these changes 2026-11-12 14:20:46 +03:00
Author
Owner

H-2 — ответ на вопрос про выбор ВСП в листах.

Да, ты понял верно. В строке листа закрытый ВСП остаётся и подписан «рег. номер (закрыт)», но выбрать в выпадающем списке можно только действующий (selectableVspOptions, web/src/components/RealtimeTable/utils/vspLabel.js). Если пользователь по ошибке заменил закрытый ВСП на другой, вернуть закрытый сам он не сможет. Это может только админ: снять дату закрытия (AURORA-1886) и поставить её обратно, а ВСП на это время становится действующим для всех.

Про удалённые: если ВСП удалён, а строки на него ссылаются, строка показывает «ВСП #id» и тоже не даёт выбрать его снова. AURORA-1884 запретит удалять ВСП, на который ссылаются строки.

В этом PR поведение не меняю: какие закрытые ВСП можно выбирать (например, закрытые в год формы или позже) — вопрос к заказчику. Выношу в отдельную задачу (follow-up при закрытии 1883).

Статус H-2: deferred.

**H-2** — ответ на [вопрос про выбор ВСП в листах](https://git.aepif.ru/RSHB/DFiP_Budget_planing/pulls/332#issuecomment-9625). Да, ты понял верно. В строке листа закрытый ВСП остаётся и подписан «рег. номер (закрыт)», но выбрать в выпадающем списке можно только действующий (`selectableVspOptions`, `web/src/components/RealtimeTable/utils/vspLabel.js`). Если пользователь по ошибке заменил закрытый ВСП на другой, вернуть закрытый сам он не сможет. Это может только админ: снять дату закрытия (AURORA-1886) и поставить её обратно, а ВСП на это время становится действующим для всех. Про удалённые: если ВСП удалён, а строки на него ссылаются, строка показывает «ВСП #id» и тоже не даёт выбрать его снова. AURORA-1884 запретит удалять ВСП, на который ссылаются строки. В этом PR поведение не меняю: какие закрытые ВСП можно выбирать (например, закрытые в год формы или позже) — вопрос к заказчику. Выношу в отдельную задачу (follow-up при закрытии 1883). Статус H-2: deferred.
aep added 1 commit 2026-11-12 17:04:36 +03:00
Конфликты после #323/#331/#334: импорты в Cell.jsx и тесты в конце
test_vsp.py — оставлены обе стороны. Дерево совпадает с пробным
слиянием всех PR (backend 1041 passed / 10 известных, фронт 263/263).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep merged commit b003eda7c5 into test 2026-11-12 17:04:48 +03:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/DFiP_Budget_planing#332
No description provided.