Gate G5: API/Schema/UI «Gate Verdict» (verdict block + crisis-banner) #32

Closed
opened 2026-05-11 20:14:11 +00:00 by lekss361 · 0 comments
lekss361 commented 2026-05-11 20:14:11 +00:00 (Migrated from github.com)

Эшелон: 🔴 Gate — «Можно ли тут строить МКД»

Контекст / проблема

После G1-G4 у нас есть raw данные про ПЗЗ/ВРИ/ЗОУИТ. Нужно их агрегировать в один верхнеуровневый verdict и поднять в UI выше scoring (сейчас scoring наверху, а должно быть «можно/нельзя» — потом scoring).

Что сделать

Backend

  1. Pydantic schema GateVerdict в schemas/parcel.py:
    class GateVerdict(BaseModel):
        verdict: Literal["ok", "warn", "blocked"]
        reasons: list[str]               # human-readable
        can_build_mkd: bool
        pzz_zones: list[PzzZoneIntersect]
        permitted_use: str | None
        land_category: str | None
        zouit_intersections: list[ZouitIntersect]
        pzz_constraints: PzzConstraints | None  # max_floors, max_far, ...
    
  2. В analyze response — gate block помещается первым перед score
  3. Aggregation logic:
    • blocked = ЗОУИТ severity=block OR permitted_use не МКД OR land_category не нас.пунктов
    • warn = есть warn-level ЗОУИТ OR ПЗЗ требует уточнения
    • ok = все проверки прошли

Frontend

  1. Новый GateBanner.tsx — top of result, color-coded (red=blocked / yellow=warn / green=ok)
  2. Bullet list reasons + expandable details (ПЗЗ, ВРИ, ЗОУИТ)
  3. Если blocked — серый-полупрозрачный остальной scoring (visual «нельзя инвестировать»)

Acceptance

  • Все 3 уровня verdict рендерятся корректно
  • ИЖС-участок → blocked + reason «Земли ИЖС, не МКД»
  • Участок Ж-3 в Центре с СЗЗ → warn + список ЗОУИТ
  • Участок Ж-5 в Академическом без ЗОУИТ → ok + constraints display
  • Mobile responsive

Owner

backend-engineer (schema + logic) + frontend-engineer (GateBanner + integration)

Effort

1–1.5 дня

Dependencies

  • G1, G2, G3, G4 (нужны данные для verdict)
  • Closes part of: #27
**Эшелон:** 🔴 Gate — «Можно ли тут строить МКД» ## Контекст / проблема После G1-G4 у нас есть raw данные про ПЗЗ/ВРИ/ЗОУИТ. Нужно их **агрегировать в один верхнеуровневый verdict** и **поднять в UI выше scoring** (сейчас scoring наверху, а должно быть «можно/нельзя» — потом scoring). ## Что сделать ### Backend 1. Pydantic schema `GateVerdict` в `schemas/parcel.py`: ```python class GateVerdict(BaseModel): verdict: Literal["ok", "warn", "blocked"] reasons: list[str] # human-readable can_build_mkd: bool pzz_zones: list[PzzZoneIntersect] permitted_use: str | None land_category: str | None zouit_intersections: list[ZouitIntersect] pzz_constraints: PzzConstraints | None # max_floors, max_far, ... ``` 2. В `analyze` response — `gate` block помещается **первым** перед `score` 3. Aggregation logic: - `blocked` = ЗОУИТ severity=block OR permitted_use не МКД OR land_category не нас.пунктов - `warn` = есть warn-level ЗОУИТ OR ПЗЗ требует уточнения - `ok` = все проверки прошли ### Frontend 1. Новый `GateBanner.tsx` — top of result, color-coded (red=blocked / yellow=warn / green=ok) 2. Bullet list reasons + expandable details (ПЗЗ, ВРИ, ЗОУИТ) 3. Если `blocked` — серый-полупрозрачный остальной scoring (visual «нельзя инвестировать») ## Acceptance - [ ] Все 3 уровня verdict рендерятся корректно - [ ] ИЖС-участок → blocked + reason «Земли ИЖС, не МКД» - [ ] Участок Ж-3 в Центре с СЗЗ → warn + список ЗОУИТ - [ ] Участок Ж-5 в Академическом без ЗОУИТ → ok + constraints display - [ ] Mobile responsive ## Owner `backend-engineer` (schema + logic) + `frontend-engineer` (GateBanner + integration) ## Effort 1–1.5 дня ## Dependencies - G1, G2, G3, G4 (нужны данные для verdict) ## Links - Closes part of: #27
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#32
No description provided.