[tradein] Houses Catalog: Cian bti_data/valuation house_info распарсены, но выбрасываются (никогда не пишутся в houses) #2435

Open
opened 2026-07-04 19:38:20 +00:00 by lekss361 · 0 comments
Owner

Контекст

Пользователь запросил закрыть разрыв "Houses у Cian/Yandex (только Avito)" по аналогии с Avito. Полная разведка (Explore-агент, 2026-07-04) показала: houses/house_reviews/house_placement_history — provider-agnostic с самого начала (source text, колонки под cian/yandex уже добавлены в 020_houses_alter_cian.sql/031_houses_alter_yandex.sql), houses матчатся по адресу/гео межисточниково (match_or_create_house), не по listing source — т.е. разрыв это в основном UX-полнота HouseInfoCard.tsx (пусто для домов, тронутых только Cian/Yandex-листингами), НЕ точность оценки (estimator.py не использует rating/amenity-поля вообще, только price-history, который уже частично cross-source через yandex_valuation).

Cian — конкретный, узкий разрыв (эта issue)

  1. providers/cian/detail.py:59-60,175-182DetailEnrichment.bti_data (series_name/entrances/flat_count/is_emergency/heat_supply_type/gas_supply_type/overlap_type) парсится из того же _cianConfig state, что и сам оффер (без доп. запроса) — но save_detail_enrichment (:316) явно комментирует "не сохраняется здесь — задача Stage 6 (houses)" и просто отбрасывает. Колонки под это уже есть (020_houses_alter_cian.sql).
  2. providers/cian/valuation.py:78-112CianValuationResult.house_info (15 полей: год/тип/этажность), .management_company, .external_house_id (= houses.cian_internal_house_id) — вычисляются, но _save_to_cache (:467-560) пишет только в external_valuations (price cache), house-поля на пол. HOUSE_FIELD_PRIORITY["management_company_id"] = ["cian_valuation"] уже существует именно под это.

Cian ЖК (newbuildings) — уже работает (newbuilding.py → real UPDATE houses), не трогать/не дублировать.

DoD

  • bti_data резолвится через match_or_create_house (адрес/гео, как в avito/houses.py::_persist_house) и пишется в соответствующие колонки houses
  • Cian Valuation house_info/management_company/external_house_id аналогично доходят до houses (не только external_valuations)
  • Не трогает существующий newbuilding-путь (newbuilding.py, newbuilding_enrich_backfill.py)
  • Учесть открытый риск #1772 (дом дробится на несколько houses) — писать строго через match_or_create_house, не создавать альтернативный путь
  • Тесты по аналогии с существующими save_detail_enrichment/_save_to_cache тестами

Оценка: S (обе части, данные уже распарсены и типизированы — только write-path).

Yandex — отдельно, НЕ в этой issue

Аггрегатный ЖК rating/developer/text_reviews_count уже осел в отдельной market.yandex_jk_enrichment, но не долит до houses/house_reviews (S-M, паттерн есть — _save_cian_reviews). Для вторичных домов Yandex — в providers/yandex/detail.py нет embedded-state богатства (DOM/JSON-LD only, в отличие от Cian/Avito MFE-блобов) — по коду похоже, что сайт просто не отдаёт эту информацию для вторички. Нужен ~1-2ч Playwright-recon на живом realty.yandex.ru ПЕРЕД тем как оценивать объём (может оказаться, что там просто нечего парсить). Заведу отдельную issue после recon.

Refs: разведка от Explore-агента в этой сессии (2026-07-04), issue history #2011/#1791/#1792 (закрыты, но задокументировали историю этого же класса разрывов).

## Контекст Пользователь запросил закрыть разрыв "Houses❌ у Cian/Yandex (только Avito✅)" по аналогии с Avito. Полная разведка (Explore-агент, 2026-07-04) показала: `houses`/`house_reviews`/`house_placement_history` — provider-agnostic с самого начала (`source text`, колонки под cian/yandex уже добавлены в `020_houses_alter_cian.sql`/`031_houses_alter_yandex.sql`), houses матчатся по адресу/гео **межисточниково** (`match_or_create_house`), не по listing source — т.е. разрыв это в основном UX-полнота `HouseInfoCard.tsx` (пусто для домов, тронутых только Cian/Yandex-листингами), НЕ точность оценки (`estimator.py` не использует rating/amenity-поля вообще, только price-history, который уже частично cross-source через `yandex_valuation`). ## Cian — конкретный, узкий разрыв (эта issue) 1. **`providers/cian/detail.py:59-60,175-182`** — `DetailEnrichment.bti_data` (series_name/entrances/flat_count/is_emergency/heat_supply_type/gas_supply_type/overlap_type) парсится из того же `_cianConfig` state, что и сам оффер (без доп. запроса) — но `save_detail_enrichment` (:316) явно комментирует "не сохраняется здесь — задача Stage 6 (houses)" и просто отбрасывает. Колонки под это уже есть (`020_houses_alter_cian.sql`). 2. **`providers/cian/valuation.py:78-112`** — `CianValuationResult.house_info` (15 полей: год/тип/этажность), `.management_company`, `.external_house_id` (= `houses.cian_internal_house_id`) — вычисляются, но `_save_to_cache` (:467-560) пишет только в `external_valuations` (price cache), house-поля на пол. `HOUSE_FIELD_PRIORITY["management_company_id"] = ["cian_valuation"]` уже существует именно под это. Cian ЖК (newbuildings) — **уже работает** (`newbuilding.py` → real `UPDATE houses`), не трогать/не дублировать. ## DoD - [ ] `bti_data` резолвится через `match_or_create_house` (адрес/гео, как в `avito/houses.py::_persist_house`) и пишется в соответствующие колонки `houses` - [ ] Cian Valuation `house_info`/`management_company`/`external_house_id` аналогично доходят до `houses` (не только `external_valuations`) - [ ] Не трогает существующий newbuilding-путь (`newbuilding.py`, `newbuilding_enrich_backfill.py`) - [ ] Учесть открытый риск #1772 (дом дробится на несколько houses) — писать строго через `match_or_create_house`, не создавать альтернативный путь - [ ] Тесты по аналогии с существующими `save_detail_enrichment`/`_save_to_cache` тестами Оценка: **S** (обе части, данные уже распарсены и типизированы — только write-path). ## Yandex — отдельно, НЕ в этой issue Аггрегатный ЖК rating/developer/text_reviews_count уже осел в отдельной `market.yandex_jk_enrichment`, но не долит до `houses`/`house_reviews` (S-M, паттерн есть — `_save_cian_reviews`). Для **вторичных** домов Yandex — в `providers/yandex/detail.py` **нет** embedded-state богатства (DOM/JSON-LD only, в отличие от Cian/Avito MFE-блобов) — по коду похоже, что сайт просто не отдаёт эту информацию для вторички. Нужен ~1-2ч Playwright-recon на живом realty.yandex.ru ПЕРЕД тем как оценивать объём (может оказаться, что там просто нечего парсить). Заведу отдельную issue после recon. Refs: разведка от Explore-агента в этой сессии (2026-07-04), issue history #2011/#1791/#1792 (закрыты, но задокументировали историю этого же класса разрывов).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2435
No description provided.