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 токены). |
||
|---|---|---|
| .. | ||
| app | ||
| data/sql | ||
| scripts | ||
| tests | ||
| .dockerignore | ||
| Dockerfile | ||
| pyproject.toml | ||