fix(tradein/estimator): кросс-source дедуп street+house union-find + savepoint вокруг ratio-lookup (#2265) #2273

Merged
lekss361 merged 4 commits from fix/tradein-dedup-addr-key into main 2026-07-03 07:51:48 +00:00
Owner

Summary

Два фикса по живому аудиту честности чисел (#2265, эпик #2262):

  1. Дедуп аналогов протекал на кросс-source дублях (прод-evidence d5fc3841: один физлот Сыромолотова = 3 «аналога» через cian/domklik/yandex; domklik cadnum 0/6296 — всегда пусто). Ключ переписан: нормализованный street_token (типы улиц/город/район/дом-маркеры выброшены, district-маркеры мкр/м-н исключены) + композит (street_token, floor, area_bucket, price_bucket); слияние через union-find по ЛЮБОМУ совпавшему ключу (решает cadnum-асимметрию «у одного есть, у другого нет»); guard: два разных непустых кадастра НИКОГДА не сливаются. house_no сознательно не в equality-ключе (асимметрия наличия номера между источниками — дискриминация на floor/area/price).
  2. Transient DB-error гасил expected_sold (3/224 за 14 дней, вкл. живой a545ca58): _get_asking_sold_ratio обёрнут в begin_nested() + 1 retry на чистой tx. Семантика #2175 сохранена (транзиентный None не кэшируется).

Test plan

  • +9 тестов (3 прод-формата Сыромолотова → один физлот; non-merge кейсы; cadnum-асимметрия/конфликт; savepoint retry/recover/None-uncached)
  • pytest -k "dedup or ratio or estimator": 613 passed, 4 skipped (skipped — предсуществующие integration)
  • ruff clean, pre-commit прошёл
  • post-merge: прод-smoke — переоценка d5fc3841-кейса, n_analogs без триплетов

Refs #2265, #2262, #2087, #2173

## Summary Два фикса по живому аудиту честности чисел (#2265, эпик #2262): 1. **Дедуп аналогов протекал на кросс-source дублях** (прод-evidence d5fc3841: один физлот Сыромолотова = 3 «аналога» через cian/domklik/yandex; domklik cadnum 0/6296 — всегда пусто). Ключ переписан: нормализованный `street_token` (типы улиц/город/район/дом-маркеры выброшены, district-маркеры мкр/м-н исключены) + композит `(street_token, floor, area_bucket, price_bucket)`; слияние через union-find по ЛЮБОМУ совпавшему ключу (решает cadnum-асимметрию «у одного есть, у другого нет»); guard: два разных непустых кадастра НИКОГДА не сливаются. house_no сознательно не в equality-ключе (асимметрия наличия номера между источниками — дискриминация на floor/area/price). 2. **Transient DB-error гасил expected_sold** (3/224 за 14 дней, вкл. живой a545ca58): `_get_asking_sold_ratio` обёрнут в `begin_nested()` + 1 retry на чистой tx. Семантика #2175 сохранена (транзиентный None не кэшируется). ## Test plan - [x] +9 тестов (3 прод-формата Сыромолотова → один физлот; non-merge кейсы; cadnum-асимметрия/конфликт; savepoint retry/recover/None-uncached) - [x] `pytest -k "dedup or ratio or estimator"`: **613 passed, 4 skipped** (skipped — предсуществующие integration) - [x] ruff clean, pre-commit прошёл - [ ] post-merge: прод-smoke — переоценка d5fc3841-кейса, n_analogs без триплетов Refs #2265, #2262, #2087, #2173
lekss361 added 2 commits 2026-07-03 07:22:52 +00:00
fix(tradein/estimator): savepoint+retry вокруг ratio-lookup — transient не гасит expected_sold (#2265)
Some checks failed
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 8s
CI Trade-In / frontend-checks (pull_request) Has been skipped
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
CI Trade-In / backend-tests (pull_request) Failing after 1m36s
9a9f13d513
lekss361 added 1 commit 2026-07-03 07:37:36 +00:00
fix(tradein/estimator): дедуп — нумерованные улицы + house-no guard на street-union (#2265, review follow-up)
Some checks failed
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 10s
CI Trade-In / frontend-checks (pull_request) Has been skipped
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
CI Trade-In / backend-tests (pull_request) Failing after 1m51s
9cdc7cef21
lekss361 added 1 commit 2026-07-03 07:48:26 +00:00
fix(tradein/estimator): полный сьют зелёный после дедуп-ключа (#2265)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 10s
CI / changes (pull_request) Successful in 12s
CI Trade-In / frontend-checks (pull_request) Has been skipped
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
CI Trade-In / backend-tests (pull_request) Successful in 2m20s
6f81ee73d7
lekss361 merged commit 039954580e into main 2026-07-03 07:51:48 +00:00
lekss361 deleted branch fix/tradein-dedup-addr-key 2026-07-03 07:51:48 +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#2273
No description provided.