Class B (дашборд покрытия / matching, НЕ valuation — estimator их пока не читает, follow-up #2012): cian SERP теперь промоутит kitchen_area_m2 + mortgage_available и новые колонки is_apartments / is_rosreestr_checked из карточки в listings (раньше лежали только в raw_payload). Проведены через save_listings обоими upsert-путями (ON CONFLICT EXCLUDED + reconcile UPDATE) через COALESCE — re-scrape источника без поля не затирает значение. Class A: house_type нормализуется через общий house_type_normalizer — cian materialType (monolithBrick / gasSilicateBlock / stalin / ...) != каноничному enum → estimator soft-penalty ложно штрафовал аналог. Сырой materialType сохраняется в raw_payload['raw_material_type']. Backfill старых cian-строк — миграция 141 (idempotent, scope source='cian', только мапимые camelCase токены). |
||
|---|---|---|
| .. | ||
| api | ||
| core | ||
| observability | ||
| schemas | ||
| services | ||
| tasks | ||
| __init__.py | ||
| main.py | ||
| scheduler_main.py | ||