pcp-tgu: «снять с учёта» терминально-негативный план (dismissed_at)

Оператор деактивирует отменённый/неудавшийся план, чтобы он не считался
проблемой и не красил индикатор КА. Косметико-статистический флаг
dismissed_at: статус плана и состояние цепочки не трогает, обратим.

- planned_plan.dismissed_at (V14) + поле в сущности и PlanResponse;
- DismissPlanUseCase.dismiss/restore с гардом на терминально-негативные
  статусы (REJECTED, START_AMBIGUOUS, LAYIN_FAILED, NOT_ACCEPTED,
  SUPERSEDED), идемпотентно; эндпоинты POST /api/plans/{id}/dismiss|restore;
- BFF (pcp-ui-service): проброс dismissedAt в TguPlanResponse и
  /api/tgu-planning/plans/{id}/dismiss|restore;
- тест DismissPlanUseCaseTest; починен предсуществующий TguPlanningServiceTest
  (мок-JSON не отдавал projected — WebClient падал на null→boolean).
This commit is contained in:
Дмитрий Соловьев
2026-06-04 16:59:13 +03:00
parent fae57e957e
commit e6f1219c9c
10 changed files with 280 additions and 4 deletions
@@ -0,0 +1,6 @@
-- «Снято с учёта»: оператор деактивирует терминально-негативный план (REJECTED, START_AMBIGUOUS,
-- LAYIN_FAILED, NOT_ACCEPTED, SUPERSEDED), чтобы он не считался проблемой и не красил индикатор КА.
-- Чисто косметико-статистический флаг: статус плана и состояние цепочки не трогает, обратим
-- (restore = dismissed_at -> NULL). NULL — план на учёте (как раньше).
ALTER TABLE planned_plan
ADD COLUMN IF NOT EXISTS dismissed_at TIMESTAMP NULL;