feat(site-finder): NSPD frontend integration — ПЗЗ зоны / ЗОУИТ / engineering nearby в LandTab #202

Closed
opened 2026-05-16 10:21:24 +00:00 by lekss361 · 1 comment
Owner

Source: Site walkthrough audit 2026-05-16. Backend PR #109/#110/#111/#116 поставили NSPD data в /analyze response (4 поля), но frontend их не отрисовывает.

Что отсутствует в UI

/analyze response содержит (PR #94 sub-PRs):

  • nspd_zoning — ПЗЗ зона из NSPD dump (G1 G2 G3 closes!)
  • nspd_zouit_overlaps — ЗОУИТ пересечения
  • nspd_engineering_nearby — инженерные объекты в 200м
  • nspd_dump — freshness metadata (available/stale/harvest_triggered)

Текущий UI: в LandTab.tsx для ПЗЗ ничего нет / показан захардкоженный fallback "API Росреестра закрыт, см. PKK". Это вводит в заблуждение — данные ЕСТЬ в response, просто не рендерятся.

Также:

  • Connection-points (#115 PR #190) endpoint live, frontend его НЕ вызывает
  • utilities (engineering DB) — рендеринг отсутствует
  • Async harvest indicator (nspd_dump.harvest_triggered=true) — нет polling/refresh UX

Scope

Backend (только types regen)

cd frontend && npm run codegen

Если auto-codegen не работает (backend не запущен локально) — manual TS types в frontend/src/types/site-finder.ts для:

  • NspdZoningField
  • NspdZouitOverlapsField
  • NspdEngineeringNearbyField
  • NspdDumpMeta

Frontend — новые компоненты

frontend/src/components/site-finder/:

  • NspdZoningBlock.tsx — ПЗЗ зона + permitted_use + max_floors/FAR (заменяет hardcoded "API закрыт" блок)
  • NspdZouitOverlapsBlock.tsx — список ЗОУИТ с severity badge + охранные зоны
  • NspdEngineeringNearbyBlock.tsx — инжен. объекты в 200м (combine с /connection-points endpoint)
  • NspdDumpFreshness.tsx (badge component) — индикатор harvest_triggered → polling каждые 5с до available=true

Frontend — integration

LandTab.tsx:

  • Удалить hardcoded "API Росреестра закрыт" блок
  • Add <NspdZoningBlock /> + <NspdZouitOverlapsBlock />
  • Add <NspdEngineeringNearbyBlock /> (либо в LandTab, либо новый "Инженерия" tab)

useSiteAnalysis.ts (или новый useConnectionPoints.ts):

  • TanStack Query для /api/v1/parcels/{cad}/connection-points
  • Auto-fetch когда analyze loaded

Frontend — async harvest UX

При nspd_dump.harvest_triggered=true:

  • Toast/banner «Загружаем NSPD данные, 15-30с…»
  • Polling каждые 5с на refresh analyze
  • Auto-update UI когда harvest complete

Acceptance

  • LandTab показывает реальные ПЗЗ данные из nspd_zoning (не hardcoded "API закрыт")
  • ЗОУИТ пересечения рендерятся с severity colors
  • Engineering nearby + connection-points визуально на карте (Leaflet layer)
  • Async harvest показывает progress + auto-refresh
  • Никаких console errors типа "Cannot read property X" — фронт matches backend shape

Effort

~1.5-2 дня (3-4 новых components + 1 hook + LandTab integration + types regen)

Owner

frontend-engineer (UI) + backend-engineer (если codegen потребует исправлений в schema)

  • Backend: PR #109 / #110 / #111 / #116 (NSPD harvest + analyze integration)
  • Connection-points: #115 (closed by PR #190 backend, missing UI)
  • Audit session: 2026-05-16
**Source:** Site walkthrough audit 2026-05-16. Backend PR #109/#110/#111/#116 поставили NSPD data в `/analyze` response (4 поля), но frontend их не отрисовывает. ## Что отсутствует в UI `/analyze` response содержит (PR #94 sub-PRs): - `nspd_zoning` — ПЗЗ зона из NSPD dump (G1 G2 G3 closes!) - `nspd_zouit_overlaps` — ЗОУИТ пересечения - `nspd_engineering_nearby` — инженерные объекты в 200м - `nspd_dump` — freshness metadata (available/stale/harvest_triggered) **Текущий UI:** в `LandTab.tsx` для ПЗЗ ничего нет / показан **захардкоженный fallback "API Росреестра закрыт, см. PKK"**. Это вводит в заблуждение — данные ЕСТЬ в response, просто не рендерятся. Также: - Connection-points (#115 PR #190) endpoint live, frontend его НЕ вызывает - `utilities` (engineering DB) — рендеринг отсутствует - Async harvest indicator (`nspd_dump.harvest_triggered=true`) — нет polling/refresh UX ## Scope ### Backend (только types regen) ```bash cd frontend && npm run codegen ``` Если auto-codegen не работает (backend не запущен локально) — manual TS types в `frontend/src/types/site-finder.ts` для: - `NspdZoningField` - `NspdZouitOverlapsField` - `NspdEngineeringNearbyField` - `NspdDumpMeta` ### Frontend — новые компоненты `frontend/src/components/site-finder/`: - `NspdZoningBlock.tsx` — ПЗЗ зона + permitted_use + max_floors/FAR (заменяет hardcoded "API закрыт" блок) - `NspdZouitOverlapsBlock.tsx` — список ЗОУИТ с severity badge + охранные зоны - `NspdEngineeringNearbyBlock.tsx` — инжен. объекты в 200м (combine с `/connection-points` endpoint) - `NspdDumpFreshness.tsx` (badge component) — индикатор harvest_triggered → polling каждые 5с до `available=true` ### Frontend — integration `LandTab.tsx`: - **Удалить hardcoded "API Росреестра закрыт"** блок - Add `<NspdZoningBlock />` + `<NspdZouitOverlapsBlock />` - Add `<NspdEngineeringNearbyBlock />` (либо в LandTab, либо новый "Инженерия" tab) `useSiteAnalysis.ts` (или новый `useConnectionPoints.ts`): - TanStack Query для `/api/v1/parcels/{cad}/connection-points` - Auto-fetch когда analyze loaded ### Frontend — async harvest UX При `nspd_dump.harvest_triggered=true`: - Toast/banner «Загружаем NSPD данные, 15-30с…» - Polling каждые 5с на refresh analyze - Auto-update UI когда harvest complete ## Acceptance - [ ] LandTab показывает реальные ПЗЗ данные из `nspd_zoning` (не hardcoded "API закрыт") - [ ] ЗОУИТ пересечения рендерятся с severity colors - [ ] Engineering nearby + connection-points визуально на карте (Leaflet layer) - [ ] Async harvest показывает progress + auto-refresh - [ ] Никаких console errors типа "Cannot read property X" — фронт matches backend shape ## Effort ~1.5-2 дня (3-4 новых components + 1 hook + LandTab integration + types regen) ## Owner `frontend-engineer` (UI) + `backend-engineer` (если codegen потребует исправлений в schema) ## Links - Backend: PR #109 / #110 / #111 / #116 (NSPD harvest + analyze integration) - Connection-points: #115 (closed by PR #190 backend, missing UI) - Audit session: 2026-05-16
Author
Owner

Закрыто — реализовано PR #212 (merged 2026-05-16): 4 блока в LandTab.tsxNspdZoningBlock (ПЗЗ), NspdZouitOverlapsBlock (ЗОУИТ), NspdEngineeringNearbyBlock, NspdFreshnessBadge. Удалено hardcoded "API закрыт" сообщение.

Расширения добавлены в #94 sub-PRs:

  • PR #217: TIER 3 risk zones (NspdRiskZonesBlock)
  • PR #220: TIER 4 opportunity + red lines (NspdOpportunityBlock + NspdRedLinesBlock)
Закрыто — реализовано PR #212 (merged 2026-05-16): 4 блока в `LandTab.tsx` — `NspdZoningBlock` (ПЗЗ), `NspdZouitOverlapsBlock` (ЗОУИТ), `NspdEngineeringNearbyBlock`, `NspdFreshnessBadge`. Удалено hardcoded "API закрыт" сообщение. Расширения добавлены в #94 sub-PRs: - PR #217: TIER 3 risk zones (NspdRiskZonesBlock) - PR #220: TIER 4 opportunity + red lines (NspdOpportunityBlock + NspdRedLinesBlock)
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#202
No description provided.