gendesign/tradein-mvp/backend
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
..
app feat(tradein/support): веб-чат поддержки — серверная часть поверх Telegram-моста (#2532) 2026-07-26 20:43:47 +00:00
data/sql fix(tradein/sale-share): price_bucket в дедуп-сигнатуре числителя (#audit) 2026-07-27 00:41:47 +03:00
scripts feat(tradein/backtest): --city per-city валидация + corridor city-parity 2026-07-12 20:49:04 +03:00
tests feat(tradein/support): веб-чат поддержки — серверная часть поверх Telegram-моста (#2532) 2026-07-26 20:43:47 +00:00
.dockerignore feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
Dockerfile chore(scraper-kit): docker-context wiring + restore backend workspace dep (#2137) 2026-07-02 14:21:38 +00:00
pyproject.toml fix(tradein/pdf): честный embedded-шрифт (PT Sans/PT Serif) + matplotlib-график вместо div (#2427) 2026-07-04 14:39:37 +00:00