+
+ GenDesign и НСПД
+
+
+ НСПД (nspd.gov.ru) — бесплатная государственная карта: кадастр, ПЗЗ,
+ границы. GenDesign не заменяет её, а считает поверх — добавляет рынок,
+ прогноз и инвест-вердикт. Любую цифру можно сверить с первоисточником
+ из карточки участка.
+
+
+
+ {/* Header row */}
+
+
Возможность
+
НСПД (бесплатно)
+
+ GenDesign
+
+
+
+ {/* Data rows */}
+ {COMPARISON_ROWS.map((row, i) => (
+
+
+ {row.feature}
+
+
+
+
+ ))}
+
+
+
{/* ── Pricing ────────────────────────────────────────────────────── */}
/health
+
+ НСПД
+
+
+ ПКК Росреестра
+
GenDesign {new Date().getFullYear()}
@@ -542,3 +743,11 @@ const kpiValue: React.CSSProperties = {
color: "var(--fg-primary)",
fontVariantNumeric: "tabular-nums",
};
+
+const comparisonHeadCell: React.CSSProperties = {
+ fontSize: 11,
+ fontWeight: 600,
+ textTransform: "uppercase",
+ letterSpacing: "0.04em",
+ color: "var(--fg-secondary)",
+};
diff --git a/frontend/src/components/site-finder/analysis/NspdVerifyLink.tsx b/frontend/src/components/site-finder/analysis/NspdVerifyLink.tsx
new file mode 100644
index 00000000..ca75f0b2
--- /dev/null
+++ b/frontend/src/components/site-finder/analysis/NspdVerifyLink.tsx
@@ -0,0 +1,53 @@
+"use client";
+
+/**
+ * NspdVerifyLink — tertiary-link «Проверить на НСПД» / «Открыть на ПКК».
+ *
+ * Issue #97 — кнопка-верификация: открывает официальный бесплатный госсервис
+ * (НСПД / ПКК Росреестра) по кадастровому номеру в новой вкладке, чтобы
+ * пользователь мог сверить данные Site Finder с первоисточником одним кликом.
+ *
+ * Tertiary CTA (ui-conventions): text-only link с иконкой, токены, без hex.
+ */
+
+import { ExternalLink } from "lucide-react";
+
+import { nspdMapUrl, pkkSearchUrl } from "@/lib/nspdLinks";
+
+interface Props {
+ cadNum: string;
+ /** Какой источник открывать. nspd — карта-вьюер НСПД, pkk — ПКК Росреестра. */
+ source?: "nspd" | "pkk";
+ /** Переопределить подпись (по умолчанию зависит от source). */
+ label?: string;
+}
+
+export function NspdVerifyLink({ cadNum, source = "nspd", label }: Props) {
+ if (!cadNum) return null;
+
+ const href = source === "pkk" ? pkkSearchUrl(cadNum) : nspdMapUrl(cadNum);
+ const text =
+ label ?? (source === "pkk" ? "Открыть на ПКК" : "Проверить на НСПД");
+
+ return (
+
+
+ {text}
+
+ );
+}
diff --git a/frontend/src/components/site-finder/analysis/Section1ParcelInfo.tsx b/frontend/src/components/site-finder/analysis/Section1ParcelInfo.tsx
index 9218e3a7..8d07294c 100644
--- a/frontend/src/components/site-finder/analysis/Section1ParcelInfo.tsx
+++ b/frontend/src/components/site-finder/analysis/Section1ParcelInfo.tsx
@@ -17,6 +17,7 @@ import { HeadlineBar } from "@/components/ui/HeadlineBar";
import { KpiCard } from "@/components/site-finder/KpiCard";
import { MiniMap } from "./MiniMap";
import { EgrnPropertyTable } from "./EgrnPropertyTable";
+import { NspdVerifyLink } from "./NspdVerifyLink";
import { PoiList2Gis } from "./PoiList2Gis";
import { ExportButtons } from "./ExportButtons";
import {
@@ -228,17 +229,32 @@ export function Section1ParcelInfo({ cad }: Props) {
marginBottom: 24,
}}
>
- {/* Section title */}
-
- 1. Объект
-
+
+ 1. Объект
+
+
+
+
+
+
{/* HeadlineBar — verdict */}
diff --git a/frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx b/frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx
index ef5025dd..4c59745d 100644
--- a/frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx
+++ b/frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx
@@ -23,6 +23,7 @@ import {
Info,
} from "lucide-react";
import { HeadlineBar } from "@/components/ui/HeadlineBar";
+import { NspdVerifyLink } from "./NspdVerifyLink";
import { useParcelAnalyzeQuery } from "@/lib/site-finder-api";
import type { UtilitySummaryItem } from "@/lib/site-finder-api";
@@ -487,17 +488,33 @@ export function Section2NetworksUtilities({ cad }: Props) {
marginBottom: 24,
}}
>
- {/* Section title */}
-
- 2. Сети и точки подключения
-
+
+ 2. Сети и точки подключения
+
+
+
{/* HeadlineBar */}
diff --git a/frontend/src/lib/nspdLinks.ts b/frontend/src/lib/nspdLinks.ts
new file mode 100644
index 00000000..773ada1a
--- /dev/null
+++ b/frontend/src/lib/nspdLinks.ts
@@ -0,0 +1,27 @@
+/**
+ * Deep-links на официальные государственные источники (НСПД, ПКК Росреестра).
+ *
+ * Issue #97 — пользователь должен мочь верифицировать любые данные Site Finder
+ * на бесплатном официальном сервисе одним кликом. Единая точка построения URL,
+ * чтобы не дублировать литералы `nspd.gov.ru` / `pkk.rosreestr.ru` по компонентам
+ * и иметь один безопасный канал кодирования кадастрового номера.
+ *
+ * Существующие потребители паттерна (до централизации): NspdZoningBlock,
+ * NspdOpportunityBlock, ParcelDrawer, AnalysisSidebar.
+ */
+
+/**
+ * НСПД (Национальная система пространственных данных) — карта-вьюер по
+ * кадастровому номеру. Базовый сервис «посмотреть участок на госкарте».
+ */
+export function nspdMapUrl(cadNum: string): string {
+ return `https://nspd.gov.ru/map?cadastralNumber=${encodeURIComponent(cadNum)}`;
+}
+
+/**
+ * Публичная кадастровая карта Росреестра (ПКК) — поиск по кадастровому номеру.
+ * Используется как fallback / cross-check к НСПД.
+ */
+export function pkkSearchUrl(cadNum: string): string {
+ return `https://pkk.rosreestr.ru/#/search/${encodeURIComponent(cadNum)}`;
+}