From 4d39ae5b5d7477889fc7de6117c888b2ce76db1f Mon Sep 17 00:00:00 2001 From: lekss361 Date: Sun, 17 May 2026 14:28:32 +0300 Subject: [PATCH] fix(sf-07): use median_12m from mv_quarter_price_per_m2 for district price MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ekb_districts.median_price_per_m2 was populated from a 24-month window. LEFT JOIN mv_quarter_price_per_m2 on the cad quarter and COALESCE(median_12m, fallback) so the API returns the 12-month median where available. Frontend OverviewTab adds a "(12 мес)" hint next to the value. Closes #271 item 7 --- backend/app/api/v1/parcels.py | 10 +++++++--- frontend/src/components/site-finder/OverviewTab.tsx | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) 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)} км до центра