feat(tradein): /estimate принимает координаты от автокомплита, минует geocode (Variant A, backend) #1782

Merged
lekss361 merged 1 commit from feat/tradein-estimate-accept-coords into main 2026-06-19 11:16:52 +00:00
Owner

Зачем

Класс фейлов address_not_geocoded (15 за 60 дней у praktika/kopylov/user2): автокомплит уже разрезолвил адрес с координатами, но /estimate их выбрасывал и геокодил строку заново через сломанную цепочку (cadastral→Yandex 403→Nominatim) → fail. Проверено на проде: подстановка координат заставила Фрунзе 75 и Космонавтов 7 (которых нет в кадастре) посчитаться.

Что (backend-часть)

  • schemas/trade_in.pyTradeInEstimateInput получает опциональные lat/lon (с границами ge/le).
  • estimator.py — в estimate_quality(): если lat/lon переданы и в пределах ЕКБ-bbox → строим GeocodeResult(provider="cache", confidence="exact") из них и пропускаем geocode(). Вне bbox / частичные → штатный geocode() как раньше. Остальная функция не тронута.

Аддитивно и безопасно: нет координат → поведение 1:1 как сейчас. Парная фронт-часть (передаёт координаты) — отдельным PR; порядок мержа любой (Pydantic игнорит лишние поля, фронт без бэка = no-op).

Тесты

test_estimator_client_coords.py — 3 passed: (1) ЕКБ-координаты → geocode НЕ вызывается; (2) московские координаты игнорируются → geocode вызывается; (3) lat/lon=None → geocode вызывается. ruff чисто, pre-commit green.

Парный PR: feat/tradein-estimate-send-coords (фронт).

## Зачем Класс фейлов `address_not_geocoded` (15 за 60 дней у praktika/kopylov/user2): автокомплит **уже разрезолвил** адрес с координатами, но `/estimate` их выбрасывал и геокодил строку заново через сломанную цепочку (cadastral→Yandex 403→Nominatim) → fail. Проверено на проде: подстановка координат заставила Фрунзе 75 и Космонавтов 7 (которых нет в кадастре) посчитаться. ## Что (backend-часть) - `schemas/trade_in.py` — `TradeInEstimateInput` получает опциональные `lat`/`lon` (с границами ge/le). - `estimator.py` — в `estimate_quality()`: если `lat/lon` переданы и **в пределах ЕКБ-bbox** → строим `GeocodeResult(provider="cache", confidence="exact")` из них и **пропускаем `geocode()`**. Вне bbox / частичные → штатный `geocode()` как раньше. Остальная функция не тронута. **Аддитивно и безопасно:** нет координат → поведение 1:1 как сейчас. Парная фронт-часть (передаёт координаты) — отдельным PR; порядок мержа любой (Pydantic игнорит лишние поля, фронт без бэка = no-op). ## Тесты `test_estimator_client_coords.py` — 3 passed: (1) ЕКБ-координаты → geocode НЕ вызывается; (2) московские координаты игнорируются → geocode вызывается; (3) lat/lon=None → geocode вызывается. `ruff` чисто, pre-commit green. Парный PR: `feat/tradein-estimate-send-coords` (фронт).
lekss361 added 1 commit 2026-06-19 11:15:50 +00:00
feat(tradein): estimate accepts client-provided coords, skips geocode (Variant A)
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
99e2a5d75c
lekss361 merged commit 9701d3289d into main 2026-06-19 11:16:52 +00:00
lekss361 deleted branch feat/tradein-estimate-accept-coords 2026-06-19 11:16:52 +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#1782
No description provided.