feat(tradein): same-building матчинг аналогов по house_id (#6) #613
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#613
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/tradein-same-building-match"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Закрывает основную часть #6 (house-match приоритет аналогов) — прямой выигрыш в точности оценки.
Estimator теперь резолвит target-адрес в канонический
house_idи подбирает аналоги поlistings.house_id_fk— детерминированный Tier S «тот же дом» вместо хрупкого address-string prefix match.Почему точнее: 99% листингов (18282/18428) слинкованы с
houses. Раньше Tier S матчилaddress ILIKE prefix— ломается между источниками (Avito/Cian/Yandex форматируют адрес по-разному: «ул Малышева, д 125» vs «Малышева 125»). Теперь — по узлу house-графа, точно тот же дом.Changes
matching/houses.pymatch_house_readonly()— read-only target→house резолвер (cadastr_exact → fingerprint → geo 50m), без INSERT / house_sources / advisory-lock. None если нет уверенного match.estimator.pyestimate_quality: резолвитtarget_house_idпосле geocode+DaData (graceful)._fetch_analogs: новый param + канонический Tier S (WHERE house_id_fk = target) ПЕРЕД address-prefix Tier S (fallback).tests/test_same_building_match.py3 файла, +308/-5.
Каскад матчинга (после PR)
Прогрессивная точность
Target уже получает
house_cadnumот DaData (Q1).match_house_readonlyпробует cadastr_exact первым → как только Q3-backfill заполнитhouses.cadastral_number, матчинг станет ещё строже без изменения кода.Tests
match_house_readonly: cadastr / fingerprint / geo hit, no-match→None, never-inserts (assert нет INSERT/UPDATE/advisory в SQL), no-coords→skip geo_fetch_analogs: canonical Tier S fires при target_house_id (assert SQL содержит house_id_fk); fallback на address ILIKE без house_id; <3 в доме → fall-throughRuff clean. ⚠️ Pre-existing: 4 fail в
test_estimator_source_quota.py(unpack 2≠3 values) — красные на main ДО этого PR, не затронуты (есть отдельный chip на фикс).Deploy
Просто merge → backend redeploy. Миграций нет (использует существующие
listings.house_id_fk+houses). Smoke:/estimateна Малышева 125 → в логахanalogs tier=S(canonical) house_id=....Follow-ups