+
+
+
Секция · По вашей улице
+
ДКП-сделки на улице {data.street}
+
+
+
+ Период: 12 мес
+
+
источник: Росреестр (открытые данные)
+
+
+
+
+
+
Сделок за 12 мес
+
+ {data.count}
+ шт
+
+
+
+
Медиана
+
+ {fmtRub(data.median_price_per_m2)}
+ ₽/м²
+
+
+
+
Диапазон
+
+
+ {rangeLowM} – {rangeHighM}
+
+ млн ₽
+
+
+
+
+
+
+
+ | Адрес |
+ Площадь |
+ Цена |
+ ₽/м² |
+ Дата |
+ |
+
+
+
+ {data.deals.map((d: AnalogLot, i: number) => (
+
+ |
+
+ {d.address}
+
+ |
+ {d.area_m2.toFixed(1)} м² |
+ {fmtRub(d.price_rub)} ₽ |
+ {fmtRub(d.price_per_m2)} |
+ {fmtDate(d.listing_date)} |
+
+
+ |
+
+ ))}
+
+
+
+
+
+ Показано{" "}
+ {Math.min(data.deals.length, 10)}{" "}
+ из {data.count} сделок
+
+
+
+ );
+}
diff --git a/tradein-mvp/frontend/src/lib/trade-in-api.ts b/tradein-mvp/frontend/src/lib/trade-in-api.ts
index 3536f2bb..818f212a 100644
--- a/tradein-mvp/frontend/src/lib/trade-in-api.ts
+++ b/tradein-mvp/frontend/src/lib/trade-in-api.ts
@@ -11,6 +11,7 @@ import type {
IMVBenchmarkResponse,
PlacementHistoryItem,
SellTimeSensitivityResponse,
+ StreetDealsResponse,
TradeInEstimateInput,
} from "@/types/trade-in";
@@ -120,6 +121,29 @@ export function useEstimateHouseAnalytics(estimate_id: string | null) {
});
}
+/**
+ * GET /api/v1/trade-in/street-deals
+ * ДКП-сделки Росреестра по улице target адреса. Per-street (open dataset
+ * без номера дома). Empty response если street не извлёкся.
+ */
+export function useStreetDeals(
+ address: string | null,
+ area_m2: number | null,
+ rooms: number | null,
+) {
+ const params = new URLSearchParams();
+ if (address) params.set("address", address);
+ if (area_m2 !== null) params.set("area_m2", String(area_m2));
+ if (rooms !== null) params.set("rooms", String(rooms));
+ return useQuery