diff --git a/tradein-mvp/backend/app/services/geocoder.py b/tradein-mvp/backend/app/services/geocoder.py index 01c37ebe..d3c9eb55 100644 --- a/tradein-mvp/backend/app/services/geocoder.py +++ b/tradein-mvp/backend/app/services/geocoder.py @@ -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)