🟢 #32 G5 Gate Verdict UI — sub-PR 1/2 backend aggregator #140

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

Per Макс ask: user-facing banner 'Можно строить МКД?' в Site Finder.

Foundation (уже shipped Sprint 1.1)

analyze_parcel response уже содержит:

  • nspd_zoning (ПЗЗ зона — Жилая / Производственная / etc)
  • nspd_zouit_overlaps (охранные зоны)
  • nspd_engineering_nearby (инженерные сети)

What to add

Sub-PR 1/2 (this) — Backend aggregator

Новое поле в analyze response:

"gate_verdict": {
  "can_build_mkd": true | false | "unknown",
  "verdict_label": "Можно" | "Нельзя" | "С ограничениями" | "Нужна проверка",
  "blockers": [
    {"code": "PZZ_NOT_RESIDENTIAL", "detail": "Зона: Производственная"},
    ...
  ],
  "warnings": [
    {"code": "ZOUIT_OVERLAP", "detail": "Охранная зона ЛЭП 110кВ (50м)"},
    ...
  ],
  "checks_performed": [...],
  "source": "nspd_dump" | "nspd_dump_partial"
}

Logic:

  • ПЗЗ ≠ Жилая → CAN'T_BUILD (blocker)
  • ЗОУИТ overlap c parcel геометрией → CAN'T_BUILD (blocker; sub=17 инжен. охранные особо)
  • Инжен. сетей в радиусе 200м НЕТ → WARNING (не блокер, но риск)
  • nspd_dump stale (>180 days) → source: nspd_dump_partial

Sub-PR 2/2 — Frontend

GateVerdictBanner в OverviewTab.tsx (top of page) — coloured banner (red/yellow/green) + collapsible details.

Acceptance

  • Backend: gate_verdict field в response /parcels/{cad}/analyze
  • Aggregator logic с tests на различные комбинации (ПЗЗ Жилая+нет ЗОУИТ → can build; ПЗЗ Производ → can't; etc)
  • Frontend (sub-PR 2): visible banner

Refs: #94 (foundation), #127

Per Макс ask: user-facing banner 'Можно строить МКД?' в Site Finder. ## Foundation (уже shipped Sprint 1.1) `analyze_parcel` response уже содержит: - `nspd_zoning` (ПЗЗ зона — Жилая / Производственная / etc) - `nspd_zouit_overlaps` (охранные зоны) - `nspd_engineering_nearby` (инженерные сети) ## What to add ### Sub-PR 1/2 (this) — Backend aggregator Новое поле в analyze response: ```json "gate_verdict": { "can_build_mkd": true | false | "unknown", "verdict_label": "Можно" | "Нельзя" | "С ограничениями" | "Нужна проверка", "blockers": [ {"code": "PZZ_NOT_RESIDENTIAL", "detail": "Зона: Производственная"}, ... ], "warnings": [ {"code": "ZOUIT_OVERLAP", "detail": "Охранная зона ЛЭП 110кВ (50м)"}, ... ], "checks_performed": [...], "source": "nspd_dump" | "nspd_dump_partial" } ``` Logic: - ПЗЗ ≠ Жилая → CAN'T_BUILD (blocker) - ЗОУИТ overlap c parcel геометрией → CAN'T_BUILD (blocker; sub=17 инжен. охранные особо) - Инжен. сетей в радиусе 200м НЕТ → WARNING (не блокер, но риск) - nspd_dump stale (>180 days) → `source: nspd_dump_partial` ### Sub-PR 2/2 — Frontend GateVerdictBanner в `OverviewTab.tsx` (top of page) — coloured banner (red/yellow/green) + collapsible details. ## Acceptance - [ ] Backend: `gate_verdict` field в response `/parcels/{cad}/analyze` - [ ] Aggregator logic с tests на различные комбинации (ПЗЗ Жилая+нет ЗОУИТ → can build; ПЗЗ Производ → can't; etc) - [ ] Frontend (sub-PR 2): visible banner Refs: #94 (foundation), #127
Sign in to join this conversation.
No milestone
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#140
No description provided.