fix(tradein/ui): городской фильтр в витрине «сделки против объявлений» (#2583 H4) #2627

Merged
lekss361 merged 1 commit from fix/tradein-sales-vs-listings-city into main 2026-08-02 11:54:34 +00:00

1 commit

Author SHA1 Message Date
bot-backend
6052ba3a81 fix(tradein/ui): городской фильтр в витрине «сделки против объявлений» (#2583 H4)
All checks were successful
CI / changes (pull_request) Successful in 10s
CI Trade-In / changes (pull_request) Successful in 10s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 2m44s
street_sales_vs_listings() строила пары ДКП-сделка/объявление только по
совпадению улицы (ILIKE) + rooms + area + дата — без корреляции города.
deals.address/listings.address хранят "<Город>, <Улица>", а street_pattern —
голое имя улицы, которое одинаково матчит одноимённые улицы разных городов
обл.66. Прод-репро: Нижний Тагил + Ленина, rooms=2, area~44.3 — 4 из 8
сделок получали listing-match из другого города, median_discount_pct
уезжал в -44.7% (широкая выборка по всем городам с этой улицей: -63.6%).

Фикс зеркалит уже принятый паттерн /street-deals (#C1): target_city
резолвится через _resolve_target_city(address) и передаётся в TVF
седьмым параметром (DEFAULT NULL — обратная совместимость). deals-сторона
фильтруется строго (city заполнена на 100%), listings-сторона терпима к
NULL (city заполнена частично: avito 63%, yandex 19%, cian 4.6%, domklik
0.6%, n1 0%) — симметрично паттерну asking_to_sold_ratio.py (#2583 H2).
2026-08-02 14:48:36 +03:00