"01.01.26 у всех сделок" — не ETL-баг, а честный предел источника:
rosreestr open dataset публикует только квартальную гранулярность
(period_start_date = первый день квартала), не точную дату сделки
(задокументировано в 01_schema_rosreestr_deals.sql ещё на моменте
создания схемы). Живой SQL подтвердил: 9 distinct дат на 9 кварталов,
5510 сделок все на 2026-01-01.
Фикс — честная маркировка, без фабрикации данных:
- AnalogLot.date_precision / SalesListingPair.deal_date_precision
("day"/"quarter") — фронт может показать "Q1 2026" вместо ложной
точной даты.
- SellTimeBucket.insufficient_data (n_lots < sell_time_sensitivity_min_n_lots=10,
паттерн 1-в-1 с существующим AvitoImvSummary.thin_market) —
немонотонность на малых бакетах помечается, не сглаживается статистически.
p3 naming-consistency (cadastral cols 0% filled). Migration 094_cadastral_unify.sql
(idempotent DO-block IF EXISTS): drop+recreate listings_search_mv (MV) +
v_data_quality (view), RENAME deals/house_metadata kadastr_num->cadastral_number,
DROP listings.kadastr_num + listings_kadastr_idx. Code SQL-string renames in
search_query/estimator/base (Lot dataclass field NOT renamed). 240 tests pass.
WARN: destructive DDL auto-applies to prod on deploy -> MERGE-GATE post-demo.
Reviewer: verify recreated MV/view DDL vs LIVE pg_get_viewdef before apply
(reconstructed from migration history 050/046, not live capture).
Refs #732