feat(tradein/geocoder): регион-параметризация геокодера — region_code в geocode()/known_city_hint, --region-code у скрипта сделок, region_code у geocode-missing (#3051) #3432
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3432
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/3051-geocoder-region-param"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Трек «Москва» (#3051): предпосылка для геокода 212 937 московских сделок (
address='Москва, <улица>', 2 797 уникальных адресов,lat/lon NULL).Почему
Геокодер был жёстко привязан к Свердловской области: Nominatim с
viewbox=OBLAST66 + bounded=1, accept только приaddress.state ~ 'свердловск'и точке в bbox 66,known_city_hintзнал лишь города области ('Москва' → None), cache-ключ без города смешивал регионы. Для 77 это давало None (впустую жгло квоту) либо ложный хит по одноимённой улице области.Что
geocoder.py:geocode(addr, db, city_hint, region_code=66)→ регион прокинут в_geocode_resolve → _nominatim_lookup → _nominatim_query; viewbox/bbox изREGIONS[code](для 66 — прежний литералOBLAST66_VIEWBOX, те же объекты bbox), state-маркер per region ('свердловск'/'москва'), ЕКБ-тиры (geoportal/cadastral) и local-houses fallback только при 66;known_city_hint(value, region_code=66)по словарю региона → cache-ключ|city=москва;_has_oblast_marker/_resolve_city_for_geocodeрегион-aware (без префикса «Москва, Москва…»); неизвестный регион →ValueError. Регион приходит только от вызывающего (deals.region_code), без угадывания по тексту.scripts/geocode_deals_nominatim.py:--region-code(default 66) → фильтр во всех 4 SQL (select/count/update/mark_tried), проброс вgeocode/known_city_hint, регион в логах.admin.pyPOST /admin/geocode-missing:region_code: int = 66→ фильтр в выборке иremaining, проброс вknown_city_hint/geocode.region_code=66), новых тестов нет (правило: после живого прогона).Регрессия 66
Для всех существующих вызовов (дефолт 66) поведение байт-идентично: тот же словарь/regex/viewbox/маркер/tie-break/cache-ключ (ревью линзой «регрессия 66»). Единственное осознанное расхождение:
geocode-missing?target=listingsпо умолчанию больше не берёт 16 930 неактивных listings чужих городов сregion_code NULL(миграция 200) — раньше они геокодились впустую (bounded 66 → None).Живая проверка Nominatim с прода для
Москва, Гродненскаяс viewbox 77:state=Москва,city=Москва, 55.719/37.435 — маркер и bbox сработают.ruffчисто; целевые тесты зелёные (55 файлов, 1079 passed у воркера). Ревью: линза 77 ✅ APPROVE, линза 66 — MINOR (см. выше).Не в scope (follow-up): межпроцессный лимитер Nominatim (скрипт + API), регион в
/estimate/api/v1/geocode/tasks/geocode_missing(дефолт 66), suggest-путь.Refs #3051. Связано: #3422, #3423, #3430, #3431.
🤖 Generated with Claude Code
Геокодер был жёстко привязан к Свердловской области: viewbox 66 + bounded=1, accept только при state ~ 'свердловск' и точке в bbox 66, known_city_hint знал лишь города области → для 212 937 московских сделок (address 'Москва, <улица>') геокод давал None либо ложный хит по одноимённой улице области, а cache-ключ без города смешивал регионы. Теперь регион приходит от вызывающего (deals.region_code): viewbox и bbox из REGIONS[code], state-маркер per region ('свердловск'/'москва'), ЕКБ-тиры (geoportal/cadastral/local houses) только при 66, city-хинт через словарь региона → cache-ключ '|city=москва'. Дефолт 66 везде — для существующих вызовов поведение байт-идентично (ревью двумя линзами). Побочно: geocode-missing по умолчанию больше не берёт listings с region_code NULL (16 930 неактивных чужих городов, которые и раньше геокодились впустую).