fix(tradein/estimator): резолвить target-город коридора из payload.address (C2 hotfix) #2490

Merged
lekss361 merged 2 commits from fix/tradein-oblast-c2fix-corridor-city into main 2026-07-12 17:50:20 +00:00
Owner

Проблема (verified на проде)

C2 city-scope ДКП-коридора оказался NO-OP для не-ЕКБ: estimate_quality резолвил target-город из geo.full_address, но геокодер роняет город для не-ЕКБ городов ('Ленина, 1' вместо 'Нижний Тагил, Ленина, 1') → _resolve_target_city → None → коридор не скоупился, а на stripped-адресе 'Ленина, 1' возвращал None. Прод-диагностика: Нижний Тагил corridor=None (ЕКБ работал — corridor=11, т.к. ЕКБ-улицы и так почти EKB-специфичны).

Фикс

Резолвить город из payload.address (пользовательский ввод — город присутствует) с fallback на canonical/geo для bare-адресов; коридор матчить тоже по payload.address. GET-rehydrate (trade_in.py): row.address приоритетнее canonical (тот же класс).

Verified (прод-диагностика)

corridor(address=payload.address, city=_resolve_target_city(payload.address)):

  • Нижний Тагил: None → 9 (Н.Тагил-specific, city-scoped ✓)
  • Екатеринбург: 11 → 15 (city-scoped EKB, было unscoped — обе валидны, 15 точнее)

EKB regression-гейт байт-зелёный (39 passed; коридор upstream от frozen _price_from_inputs). ruff clean.

Отдельно (не в этом PR)

  • geocoder full_address роняет город для не-ЕКБ (display target_address = «Ленина, 1») — cosmetic, чинится в E (задача UI/geocoder target_address).

Зависит от C2 (#2488, уже в проде).

## Проблема (verified на проде) C2 city-scope ДКП-коридора оказался **NO-OP для не-ЕКБ**: `estimate_quality` резолвил target-город из `geo.full_address`, но геокодер **роняет город** для не-ЕКБ городов (`'Ленина, 1'` вместо `'Нижний Тагил, Ленина, 1'`) → `_resolve_target_city` → None → коридор не скоупился, а на stripped-адресе `'Ленина, 1'` возвращал **None**. Прод-диагностика: Нижний Тагил corridor=**None** (ЕКБ работал — corridor=11, т.к. ЕКБ-улицы и так почти EKB-специфичны). ## Фикс Резолвить город из **`payload.address`** (пользовательский ввод — город присутствует) с fallback на canonical/geo для bare-адресов; коридор матчить тоже по `payload.address`. GET-rehydrate (trade_in.py): `row.address` приоритетнее canonical (тот же класс). ## Verified (прод-диагностика) `corridor(address=payload.address, city=_resolve_target_city(payload.address))`: - Нижний Тагил: **None → 9** (Н.Тагил-specific, city-scoped ✓) - Екатеринбург: 11 → **15** (city-scoped EKB, было unscoped — обе валидны, 15 точнее) EKB regression-гейт **байт-зелёный** (39 passed; коридор upstream от frozen `_price_from_inputs`). ruff clean. ## Отдельно (не в этом PR) - geocoder `full_address` роняет город для не-ЕКБ (display `target_address` = «Ленина, 1») — **cosmetic**, чинится в E (задача UI/geocoder target_address). Зависит от C2 (#2488, уже в проде).
lekss361 added 1 commit 2026-07-12 17:36:42 +00:00
fix(tradein/estimator): резолвить target-город коридора из payload.address (C2 hotfix)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
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) Successful in 50s
7801ac6cc1
C2 city-scope коридора был NO-OP для не-ЕКБ: estimate_quality резолвил город из geo.full_address, но геокодер РОНЯЕТ город для не-ЕКБ («Ленина, 1» вместо «Нижний Тагил, Ленина, 1») → target_city=None → коридор либо unscoped, либо None. Verified на проде: Н.Тагил corridor=None.

Фикс: резолвить город из payload.address (город есть) с fallback на canonical/geo; коридор матчить тоже по payload.address. GET: row.address приоритетнее canonical.

Verified прод-диагностикой: corridor(address=payload.address, city=resolve) → Н.Тагил=9, ЕКБ=15 (было: Н.Тагил=None). EKB regression-гейт байт-зелёный. geocoder full_address city-strip (display «Ленина,1») → cosmetic, E.
bot-backend added 1 commit 2026-07-12 17:48:33 +00:00
docs(tradein): исправить GET-rehydrate comment — row.address=geo.full_address (city-stripped), corridor unscoped для не-ЕКБ (known limitation)
All checks were successful
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 8s
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 Trade-In / backend-tests (pull_request) Successful in 51s
69f8b50934
lekss361 merged commit 4c56c5189a into main 2026-07-12 17:50:20 +00:00
lekss361 deleted branch fix/tradein-oblast-c2fix-corridor-city 2026-07-12 17:50:20 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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#2490
No description provided.