fix(tradein/sql): цена в подписи дедупликации «доли квартир дома в продаже» #2539

Merged
lekss361 merged 2 commits from fix/tradein-sale-share-dedup-signature into main 2026-07-26 22:50:39 +00:00

2 commits

Author SHA1 Message Date
bot-backend
5c91df2442 chore(tradein/sql): переименовать миграцию 189 -> 190 (номер занят фиксом счётчика квот)
All checks were successful
CI Trade-In / backend-tests (pull_request) Successful in 5m3s
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
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
2026-07-27 00:43:04 +03:00
bot-backend
7a5f4b89f4 fix(tradein/sale-share): price_bucket в дедуп-сигнатуре числителя (#audit)
count(DISTINCT (rooms, round(area_m2), floor)) в v_building_sale_share
(мигр. 148) ложно схлопывает разные квартиры одного этажа в разных
подъездах (подъезда в данных нет). Прод-замер: 15424 raw -> 11324 старая
сигнатура -> 12497 с добавленным price_bucket=round(price_rub/100000)
(+1173, +10.4%). Продуктовое решение: дедуп только при совпадении ЕЩЁ И
цены (тот же бакет, что в estimator.py::_DEDUP_PRICE_BUCKET_RUB).

Требование "с разных площадок" не выражено в SQL (потребовало бы
двухуровневой агрегации across всех 6 FILTER-агрегатов CTE) -- задокументирован
residual risk в мигр. 189: одноплощадочные группы с совпавшей ценой
остаются ложно схлопнуты; кросс-посты с ценовым дрейфом между скрейпами
перестают схлопываться.

price_rub NULL/<=0 -> price_bucket NULL -> листинг не дедупится ни с чем
(консервативно, как в мигр. 148 для NULL rooms/area/floor).
2026-07-27 00:41:47 +03:00