fix(tradein/avito): persist house_type + house_catalog_url in save_detail_enrichment (#2009) #2014

Merged
lekss361 merged 2 commits from feat/tradein-2009-avito-detail-house-type into main 2026-06-27 17:30:35 +00:00
Owner

Summary

save_detail_enrichment раньше ЯВНО опускал house_type и house_catalog_url (парсились, но выбрасывались). Теперь оба сохраняются в listings:

  • house_type (CLASS A — реальный фикс оценки): уже нормализован парсером (_HOUSE_TYPE_MAP → канон panel/brick/monolith/monolith_brick/block/wood, сверено с estimator._IMV_HOUSE_TYPE_MAP). Закрывает вечный NULL listings.house_type для avito (прод: 0%) → estimator soft-penalty начинает учитывать тип дома avito-аналогов. Потолок ~29% (detail-enriched).
  • house_catalog_urllistings.house_url (линковка дома); отдельной колонки нет, house_url существует и сейчас 0% → чисто additive.

COALESCE-направления: house_type existing-first (не затирать canonical из Houses Catalog Stage 2c); house_url new-first additive (avito-owned, нет конкурирующего писателя).

Миграция не нужна (обе колонки существуют: house_type 002, house_url 011).

Test plan

  • ruff check avito_detail.py — clean
  • pytest -k "avito_detail or save_detail or enrichment" — 74 passed
  • code-reviewer — APPROVE (COALESCE-направления верны, psycopg v3 clean, канон end-to-end)
  • post-deploy smoke (в контейнере): SELECT house_type, house_url FROM listings WHERE source='avito' AND detail_enriched_at IS NOT NULL AND house_type IS NOT NULL LIMIT 5 — значения в каноне, house_url заполняется (растёт по новым detail-обогащениям)

Refs #2009

## Summary `save_detail_enrichment` раньше ЯВНО опускал `house_type` и `house_catalog_url` (парсились, но выбрасывались). Теперь оба сохраняются в `listings`: - **`house_type`** (CLASS A — реальный фикс оценки): уже нормализован парсером (`_HOUSE_TYPE_MAP` → канон `panel/brick/monolith/monolith_brick/block/wood`, сверено с `estimator._IMV_HOUSE_TYPE_MAP`). Закрывает вечный NULL `listings.house_type` для avito (прод: 0%) → estimator soft-penalty начинает учитывать тип дома avito-аналогов. Потолок ~29% (detail-enriched). - **`house_catalog_url`** → `listings.house_url` (линковка дома); отдельной колонки нет, `house_url` существует и сейчас 0% → чисто additive. COALESCE-направления: `house_type` existing-first (не затирать canonical из Houses Catalog Stage 2c); `house_url` new-first additive (avito-owned, нет конкурирующего писателя). Миграция **не нужна** (обе колонки существуют: `house_type` 002, `house_url` 011). ## Test plan - [x] `ruff check avito_detail.py` — clean - [x] `pytest -k "avito_detail or save_detail or enrichment"` — 74 passed - [x] code-reviewer — ✅ APPROVE (COALESCE-направления верны, psycopg v3 clean, канон end-to-end) - [ ] post-deploy smoke (в контейнере): `SELECT house_type, house_url FROM listings WHERE source='avito' AND detail_enriched_at IS NOT NULL AND house_type IS NOT NULL LIMIT 5` — значения в каноне, house_url заполняется (растёт по новым detail-обогащениям) Refs #2009
lekss361 added 2 commits 2026-06-27 17:29:23 +00:00
house_type (уже нормализован парсером в канон panel/brick/monolith/
monolith_brick/block/wood) закрывает вечный NULL listings.house_type для avito
(потолок ~29% enriched) → estimator soft-penalty начинает учитывать тип дома
avito-аналогов. house_catalog_url → listings.house_url для линковки дома.
COALESCE — не затираем возможный canonical из Houses Catalog. Чисто additive,
миграция не нужна (колонки listings.house_type / house_url уже существуют).
docs(tradein/avito): clarify house_url is new-first additive in save_detail_enrichment docstring
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
c6a5cecb33
lekss361 merged commit 4a93a9297c into main 2026-06-27 17:30:35 +00:00
lekss361 deleted branch feat/tradein-2009-avito-detail-house-type 2026-06-27 17:30:35 +00:00
Sign in to join this conversation.
No reviewers
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#2014
No description provided.