(high) cad_territorial_zones.geom объявлена GEOGRAPHY(POLYGON) — MultiPolygon ПЗЗ-зоны молча отбрасываются при harvest
(medium) 09_macro_and_trend.py/main: trend_ratio=2.0 при v_prior==0 даёт максимальный буст районам без истории продаж
fix(forecasting): cap trend_ratio by v_rec magnitude when v_prior==0 (#1508)
[medium] supply_layers: один domrf-объект может учитываться И в Layer2 (hidden) И в Layer3 (future) — двойной счёт предложения на горизонтах 18/24 мес
fix(site-finder): non-overlapping L2/L3 ready_dt windows, stop double-count of 13-24mo supply (#1355)
(medium) trade_in_pdf._build_cover: «Срок действия данных» захардкожен today+30д, игнорирует estimate.expires_at (=now+24ч)
fix(tradein): trade-in PDF cover uses estimate.expires_at, not hardcoded +30d (#1530)
fix(analytics): align portfolio series to area buckets in quartirography (#1406)
(high) QuartirographyChart.tsx/portfolioMap: портфель по числу комнат наложен на ось площади (м²) — сравнение в разных единицах
(high) page.tsx / KpiCard «Sold % (квартиры)»: вердикт «выше/ниже среднего рынка» считается по собственному sold% объекта без рыночных данных
fix(analytics): drop false market verdict from per-object Sold % KpiCard (#1407)
fix(site-finder): non-overlapping L2/L3 ready_dt windows, stop double-count of 13-24mo supply (#1355)