подсказки адреса: пустые части адреса выпадают, а не печатаются #3276

Merged
bot-backend merged 1 commit from fix/mera-suggest-formatting into main 2026-08-30 10:13:02 +00:00
Collaborator

Из отчёта тестировщика 30.08.2026, пункт 5 (вторая половина).

Дефект

Подсказка на проде выглядела так:

г Екатеринбург, ул Фролова , д. 29, корп.

Два изъяна в одной строке: двойной пробел перед запятой после названия улицы и висячее «корп.» без номера.

Где на самом деле корень

Строку собираем не мы. Реестровый readable_address (ЕГРН/НСПД) приходит уже склеенным вместе с пустыми частями, и все пять тиров /suggest отдавали его насквозь. То есть чинить надо не тир, а границу выдачи.

tidy_address() в services/geocoder.py — один проход по частям: схлопнуть пробелы, выбросить пустые и маркер-без-значения (д/корп/стр/лит/кв/оф/пом/вл/уч), склеить обратно.

Применено в GeocodeSuggestion.__post_init__единственной точке, через которую проходят все тиры (cadastral, geoportal, houses, DaData, Nominatim), включая питающие geocode(). Не по одному тиру: сегодня болезнь видно у корпуса, но механизм общий для всех типов частей.

Проверки

14 кейсов, включая прод-строку из отчёта: непустые корпус/строение/литера остаются, пустые выпадают, двойных пробелов и висячих запятых нет ни в одном сочетании.

Фальсификация автором и ревьюером независимо: if False вместо фильтра пустых даёт 10 failed по значению строки, без исключений.

Ревьюер прогнал 7 файлов geocoder/suggest → 309 passed, rc=0. ruff check и ruff format --check чисто.

Честные потолки

  • Чистка только на выдаче. В реестровых таблицах строки остаются грязными — загрузчик cad_buildings вне этой правки.
  • Часть выпадает, только если ВСЯ часть между запятыми это маркер. Форма д. 29 корп. одной частью без запятой не чистится.
  • Прод-выдачу глазами не смотрели — нужна живая /suggest с токеном DaData. Проверка юнит-уровня.
  • Ревьюер отметил выживающего мутанта: raw.strip() вместо регулярки схлопывания пробелов тесты не роняет.
Из отчёта тестировщика 30.08.2026, пункт 5 (вторая половина). ## Дефект Подсказка на проде выглядела так: ``` г Екатеринбург, ул Фролова , д. 29, корп. ``` Два изъяна в одной строке: двойной пробел перед запятой после названия улицы и висячее «корп.» без номера. ## Где на самом деле корень Строку собираем **не мы**. Реестровый `readable_address` (ЕГРН/НСПД) приходит уже склеенным вместе с пустыми частями, и все пять тиров `/suggest` отдавали его насквозь. То есть чинить надо не тир, а границу выдачи. `tidy_address()` в `services/geocoder.py` — один проход по частям: схлопнуть пробелы, выбросить пустые и маркер-без-значения (`д`/`корп`/`стр`/`лит`/`кв`/`оф`/`пом`/`вл`/`уч`), склеить обратно. Применено в `GeocodeSuggestion.__post_init__` — **единственной точке**, через которую проходят все тиры (cadastral, geoportal, houses, DaData, Nominatim), включая питающие `geocode()`. Не по одному тиру: сегодня болезнь видно у корпуса, но механизм общий для всех типов частей. ## Проверки 14 кейсов, включая прод-строку из отчёта: непустые корпус/строение/литера остаются, пустые выпадают, двойных пробелов и висячих запятых нет ни в одном сочетании. Фальсификация автором и ревьюером независимо: `if False` вместо фильтра пустых даёт **10 failed по значению строки**, без исключений. Ревьюер прогнал 7 файлов geocoder/suggest → 309 passed, rc=0. `ruff check` и `ruff format --check` чисто. ## Честные потолки - **Чистка только на выдаче.** В реестровых таблицах строки остаются грязными — загрузчик `cad_buildings` вне этой правки. - **Часть выпадает, только если ВСЯ часть между запятыми это маркер.** Форма `д. 29 корп.` одной частью без запятой не чистится. - **Прод-выдачу глазами не смотрели** — нужна живая `/suggest` с токеном DaData. Проверка юнит-уровня. - Ревьюер отметил выживающего мутанта: `raw.strip()` вместо регулярки схлопывания пробелов тесты не роняет.
bot-backend added 1 commit 2026-08-30 10:04:46 +00:00
fix(tradein): подсказки адреса — пустые части адреса выпадают, а не печатаются
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / changes (pull_request) Successful in 16s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 5m50s
663d63aea4
Прод отдавал «г Екатеринбург, ул Фролова , д. 29, корп.»: реестровый
readable_address (ЕГРН) приходит УЖЕ склеенным вместе с пустыми частями —
маркер без значения печатается, лишний пробел перед запятой остаётся, и все
тиры /suggest (cadastral / geoportal / houses / DaData / Nominatim) пропускали
строку насквозь.

Чиним склейку, а не конкретный случай: `tidy_address()` — один проход по
частям (схлопнуть пробелы, выбросить пустые и маркер-без-номера:
корп./стр./лит./кв./оф./пом. и пр.), склейка обратно. Применяется в
`GeocodeSuggestion.__post_init__` — единственной точке, через которую проходят
все тиры, включая локальные, которые питают и `geocode()`.

Тест на функцию склейки, фальсифицирован снятием фильтра пустых: краснеет по
значению строки (10 из 14), а не исключением.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bot-backend merged commit c53a967f49 into main 2026-08-30 10:13:02 +00:00
bot-backend deleted branch fix/mera-suggest-formatting 2026-08-30 10:13:02 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3276
No description provided.