diff --git a/tradein-mvp/backend/app/services/estimator.py b/tradein-mvp/backend/app/services/estimator.py index d866edbd..335af239 100644 --- a/tradein-mvp/backend/app/services/estimator.py +++ b/tradein-mvp/backend/app/services/estimator.py @@ -1846,8 +1846,13 @@ def _fetch_dkp_corridor( """#652: коридор ₽/м² по реальным ДКП-сделкам Росреестра для target. Reuse паттерна street-deals (api/v1/trade_in.py): извлекаем улицу из адреса, - фильтруем `deals` (source='rosreestr', та же rooms, площадь ±tolerance, окно + фильтруем `deals` (source='rosreestr', площадь ±tolerance, окно period_months) и нормализуем per-m². Возвращаем low/median/high ₽/м². + Фильтра по rooms тут НЕТ осознанно (#3256): `deals.rooms` — бакет площади, + а не комнатность, поэтому предикат по нему был вторым фильтром по площади + и вырезал полосу ±tolerance (у 180 клиентов — целиком). См. якорь в + deploy/import-rosreestr.sh. `rooms` в сигнатуре остаётся как гейт + «запрос без комнатности — не оценка», но в SQL не уходит. ADVISORY — caller не клампит, только сурфейсит + опциональная пометка. Best-effort: None при отсутствии улицы / сделок / любой ошибке. NB: при n>=clamp_min_n коридор клампит headline + radius-floor (НЕ чисто diff --git a/tradein-mvp/deploy/import-rosreestr.sh b/tradein-mvp/deploy/import-rosreestr.sh index 86f7b050..303326ed 100755 --- a/tradein-mvp/deploy/import-rosreestr.sh +++ b/tradein-mvp/deploy/import-rosreestr.sh @@ -76,6 +76,10 @@ docker exec "$SRC_PG" psql -U "$SRC_USER" -d "$SRC_DB" -v ON_ERROR_STOP=on -c " -- НЕ фильтруют по deals.rooms ИМЕННО потому, что здесь синтетика; с -- настоящей комнатностью предикат нужно вернуть, иначе все сайты молча -- продолжат ключеваться площадью. + -- ОСТАВШИЙСЯ потребитель, который ВСЁ ЕЩЁ фильтрует по d.rooms: + -- TVF street_sales_vs_listings (data/sql/211_sales_vs_listings_segment_guard.sql:89), + -- её зовёт API /sales-vs-listings (trade_in.py). Там ключ асимметричный — + -- d.rooms синтетика, l.rooms настоящая, — копипастой из #3256 не чинится. CASE WHEN area < 30 THEN 0 WHEN area < 44 THEN 1 WHEN area < 62 THEN 2 WHEN area < 85 THEN 3