docs(tradein/geocoder): исправить докстринг — в geocode() нет тира DaData
All checks were successful
CI / changes (pull_request) Successful in 10s
CI Trade-In / 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) Successful in 2m48s

Докстринг _cadastral_house_match утверждал, что промах уходит в цепочку
_cadastral_forward_sync → DaData → Nominatim. Тира DaData в geocode() нет:
_dadata_suggest вызывается ровно в одном месте — внутри suggest() (автокомплит).

Реальные цепочки разведены явно, плюс зафиксировано следствие: на прямом
вызове geocode() адрес с литерой, неизвестный геопорталу и Nominatim, даёт
None вместо оценки соседнего дома. Основной UI-путь не задет — координаты
приходят из выбранной подсказки и минуют geocode().
This commit is contained in:
bot-backend 2026-08-02 14:56:27 +03:00
parent d63702cfec
commit 9f03733e46

View file

@ -1020,8 +1020,20 @@ def _cadastral_house_match(db: Session, street: str, house: str) -> GeocodeSugge
сузилась до цифр prefilter'а.
Нет дома с нужной литерой возвращаем None, а НЕ «похожий» дом: пусть
отработают следующие тиры (`_cadastral_forward_sync` DaData Nominatim).
Тихо подставленный соседний дом здесь необратимо помечался бы `exact`.
отработают следующие тиры. Тихо подставленный соседний дом здесь
необратимо помечался бы `exact`.
ВНИМАНИЕ, цепочки различаются не путать:
* `geocode()` : geoportal cadastral `_cadastral_forward_sync`
Nominatim None. Тира DaData тут НЕТ.
* `suggest()` : cadastral DaData Nominatim (единственный вызов
`_dadata_suggest`).
То есть на прямом вызове `geocode()` (API/PDF/восстановление по `?id=`)
адрес с литерой, неизвестный ни геопорталу, ни Nominatim, даёт None
оценка не строится. Это сознательный выбор: честный отказ вместо
уверенно-неверной оценки чужого дома. Основной UI-путь этим не задет
координаты приходят из выбранной подсказки (`ParamsPanel.tsx:776`
`api/v1/trade_in.py:128` использует lat/lon напрямую, минуя `geocode()`).
"""
house_norm = _norm_house(house)
house_digits_m = re.match(r"\d+", house_norm)