diff --git a/backend/app/api/v1/parcels.py b/backend/app/api/v1/parcels.py index 4a5b8335..457746a4 100644 --- a/backend/app/api/v1/parcels.py +++ b/backend/app/api/v1/parcels.py @@ -1188,16 +1188,20 @@ def analyze_parcel( geom_wkt: str = geom_row["wkt"] # type: ignore[index] # 2) District context — ближайший район ЕКБ + # median_price_per_m2: предпочитаем median_12m из mv_quarter_price_per_m2 (12 мес), + # fallback на ekb_districts.median_price_per_m2 (24 мес). district_row = ( db.execute( text(""" - SELECT district_name, - median_price_per_m2, + SELECT d.district_name, + COALESCE(mq.median_12m, d.median_price_per_m2) AS median_price_per_m2, ST_Distance( d.geom::geography, ST_Centroid(ST_GeomFromText(:wkt, 4326))::geography ) AS dist_to_center FROM ekb_districts d + LEFT JOIN mv_quarter_price_per_m2 mq + ON mq.quarter_cad_number = REGEXP_REPLACE(:cad_num, ':[^:]+$', '') WHERE ST_DWithin( d.geom::geography, ST_Centroid(ST_GeomFromText(:wkt, 4326))::geography, @@ -1206,7 +1210,7 @@ def analyze_parcel( ORDER BY dist_to_center ASC LIMIT 1 """), - {"wkt": geom_wkt}, + {"wkt": geom_wkt, "cad_num": cad_num}, ) .mappings() .first() diff --git a/frontend/src/components/site-finder/OverviewTab.tsx b/frontend/src/components/site-finder/OverviewTab.tsx index fb3c1b81..1d54de5f 100644 --- a/frontend/src/components/site-finder/OverviewTab.tsx +++ b/frontend/src/components/site-finder/OverviewTab.tsx @@ -77,6 +77,7 @@ export function OverviewTab({ data, onIsochronesResult }: Props) { {(data.district.median_price_per_m2 / 1000).toFixed(0)} тыс ₽/м² + (12 мес) {(data.district.dist_to_center / 1000).toFixed(1)} км до центра