+ {/* Left: mini-map */}
+
- {/* Right: EGRN table + НСПД-градрегламент + POI list */}
-
-
+ {/* Right: EGRN table + НСПД-градрегламент + POI list */}
+
+
- {/* #1962 — реальный ПЗЗ-градрегламент из nspd_zoning (synth #1891).
+ {/* #1962 — реальный ПЗЗ-градрегламент из nspd_zoning (synth #1891).
Раньше отчёт показывал только мёртвый zoning.data_available=false
(закрытый PKK6-путь) и НЕ выводил резолвленный регламент. КСИТ-ёмкость
считается от площади ЕГРН (egrn.area_m2). */}
- 0
- ? egrn.area_m2
- : null
- }
- />
-
- {poiData ? (
- 0
+ ? egrn.area_m2
+ : null
+ }
/>
- ) : (
- // Fallback: B6 poi-score (useParcelPoiScoreQuery) ещё грузится или
- // упал. score_breakdown несёт только name/distance_m — без реального
- // per-POI weight и без POI-weighted-score, поэтому НЕ подставляем
- // инвест-балл участка (data.score) как POI-оценку «X / 100» и НЕ
- // фабрикуем weight/score_contribution (#1466). Показываем честный
- // пустой стейт «POI данные недоступны» до прихода B6.
-
- )}
-
-
- {/* Export buttons */}
-
-
-
+ {poiData ? (
+
+ ) : (
+ // Fallback: B6 poi-score (useParcelPoiScoreQuery) ещё грузится или
+ // упал. score_breakdown несёт только name/distance_m — без реального
+ // per-POI weight и без POI-weighted-score, поэтому НЕ подставляем
+ // инвест-балл участка (data.score) как POI-оценку «X / 100» и НЕ
+ // фабрикуем weight/score_contribution (#1466). Показываем честный
+ // пустой стейт «POI данные недоступны» до прихода B6.
+
+ )}
+
+
+
+ {/* Export buttons */}
+
+
+
+
);
}
diff --git a/frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx b/frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx
index 09bd4b9d..341f593a 100644
--- a/frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx
+++ b/frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx
@@ -44,6 +44,7 @@ import {
type UtilityInfrastructureResponse,
} from "@/hooks/useUtilityInfrastructure";
import { buildUtilityTableRows, type UtilityTableRow } from "./utility-table";
+import { StageDetails } from "./StageDetails";
// ── Connection-points map (#1746) ─────────────────────────────────────────────
// Высота тайла карты для drill-in уровня раздела. Легенда + CpLayerControlPanel
@@ -770,117 +771,124 @@ export function Section2NetworksUtilities({ cad }: Props) {
- {/* Power line охранная зона warning */}
- {powerLineZone && (
-
-
-
- Участок находится в охранной зоне ЛЭП ≥35 кВ. Капитальное
- строительство в охранной зоне (ОЗ) запрещено (СП 36.13330). Участок
- в зоне с особыми условиями использования территорий (ЗОУИТ), тип 5.
-
-
- )}
+
+ {/* Power line охранная зона warning */}
+ {powerLineZone && (
+
+
+
+ Участок находится в охранной зоне ЛЭП ≥35 кВ. Капитальное
+ строительство в охранной зоне (ОЗ) запрещено (СП 36.13330).
+ Участок в зоне с особыми условиями использования территорий
+ (ЗОУИТ), тип 5.
+
+
+ )}
- {/* Счётчики источников — явно разделяем «инж.сети OSM» и «точки
+ {/* Счётчики источников — явно разделяем «инж.сети OSM» и «точки
подключения НСПД», чтобы числа не путались (#1953). */}
- {!networksLoading && (
-
- )}
-
- {/* Utilities table — строки из osm_utility_infrastructure (= карта) */}
- {networksLoading ? (
-
- Загрузка инженерных сетей...
-
- ) : tableRows.length > 0 ? (
-
- ) : (
-
-
- Инженерные сети (OSM) не найдены в радиусе {COVERAGE_RADIUS_KM} км.
- {connectionPointCount > 0
- ? " Точки подключения (НСПД) показаны на карте ниже."
- : ""}
-
+
+ Инженерные сети (OSM) не найдены в радиусе {COVERAGE_RADIUS_KM} км.
+ {connectionPointCount > 0
+ ? " Точки подключения (НСПД) показаны на карте ниже."
+ : ""}
+