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).