fix(tradein): чинит кадастр-матчер геокодера — резолв адресов из своей базы (~60% упавших) #1780
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
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#1780
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/tradein-cadastral-geocode-matcher"
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?
Проблема (прод-аудит)
За 60 дней — 15 оценок упали с
address_not_geocodedу реальных юзеров (praktika/kopylov/user2): валидные адреса ЕКБ из автокомплита не геокодились. Проверено на проде:geocode()/suggest()искали в нашей базеgendesign_cad_buildingsчерезreadable_address ILIKE '%' || query || '%'по сырой строке. Но в базе формат «ул. Серова, д. 27» — подстроки «Серова 27» (или DaData-формы «620144, …, ул Серова, д 27») там нет → 0 hits → проваливалось на Yandex (403, мёртвый ключ) → fail. Данные были — матчер не находил.Фикс
В
geocoder.pyдобавлены два хелпера, подключены как primary кадастр-шаг вgeocode()(2a) иsuggest()(tier 1a); legacy raw-ILIKE остаётся как 2b фоллбэк, Yandex/Nominatim — нетронуты._parse_street_house(address)— вытаскивает (улица, дом) из обеих форм: полный DaData («620091, …, пр-кт Космонавтов, д 26а, кв 335» →("космонавтов","26а"), кв/корпус отбрасываются) и ручной ввод («Серова 27», «8 Марта 204» — улица с цифры)._cadastral_house_match(db, street, house)— матч по cad_buildings: ILIKE по улице + regex с якорем номера дома к маркеруд./дом/строение(убивает ложняк типа «(1-83)» внутри «д 169а»), фильтр город ЕКБ, исключение деревень (Северка/Шабровский/СНТ). psycopg v3: bound-параметры +CAST(:x AS text), в regex только цифры дома (regex-safe). Graceful try/except → None.Валидация на проде (до кода)
Остаток ~40% (Космонавтов 7б/26а, Педагогическая 15, Фрунзе 75) физически отсутствует в наборе ~36k — закрывается отдельно (дозалив кадастра / фоллбэк-геокодер / прокидывание suggest-координат).
Тесты
pytest— 117 passed (новыйtest_geocoder_cadastral_matcher.py: parser-кейсы по всем формам + mocked matcher + wiring; плюс существующие geocoder/cadastral-reverse/dadata).ruff checkчисто. Pre-commit green (фикс root cause B011 в test_cadastral_reverse, без--no-verify).