fix(tradein/geocoder): строгий матч литеры дома + починка DaData region-фильтра #2622

Merged
lekss361 merged 2 commits from fix/tradein-geocoder-house-letter into main 2026-08-02 12:06:45 +00:00
Showing only changes of commit 9f03733e46 - Show all commits

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)