From 9f03733e468e3ea389ea85e0f7d03c9824fdd536 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Sun, 2 Aug 2026 14:56:27 +0300 Subject: [PATCH] =?UTF-8?q?docs(tradein/geocoder):=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=B8=D1=82=D1=8C=20=D0=B4=D0=BE=D0=BA=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=B8=D0=BD=D0=B3=20=E2=80=94=20=D0=B2=20geocode()?= =?UTF-8?q?=20=D0=BD=D0=B5=D1=82=20=D1=82=D0=B8=D1=80=D0=B0=20DaData?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Докстринг _cadastral_house_match утверждал, что промах уходит в цепочку _cadastral_forward_sync → DaData → Nominatim. Тира DaData в geocode() нет: _dadata_suggest вызывается ровно в одном месте — внутри suggest() (автокомплит). Реальные цепочки разведены явно, плюс зафиксировано следствие: на прямом вызове geocode() адрес с литерой, неизвестный геопорталу и Nominatim, даёт None вместо оценки соседнего дома. Основной UI-путь не задет — координаты приходят из выбранной подсказки и минуют geocode(). --- tradein-mvp/backend/app/services/geocoder.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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)