feat(tradein/v2): карта вторички — сделки Росреестра + объявления по источникам (SourcesView) #2478

Merged
bot-backend merged 1 commit from feat/v2-secondary-map into main 2026-07-12 13:26:56 +00:00

1 commit

Author SHA1 Message Date
bot-backend
293423649a feat(tradein/v2): карта вторички в overlay 05 — сделки Росреестра + объявления по источникам
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
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 / frontend-checks (pull_request) Successful in 1m5s
SourcesMap.tsx: реальный OSM-баземап (Leaflet CDN, порт паттерна MapCard.tsx,
без npm-зависимости) поверх estimate.analogs + estimate.actual_deals — оба
поля уже несут lat/lon и source в живом API-ответе (проверено по
_listing_to_analog/_deal_to_analog в estimator.py и AnalogLot в
schemas/trade_in.py), бэкенд не менялся.

Объявления — цвет по источнику (categorical-палитра dataviz-skill, validated),
сделки — ромб нейтрального цвета вместо ещё одного hue (сделки геокодированы
по street-centroid и стекируются в одну точку — сгруппированы + jitter +
бейдж «×N», честная подпись про приближение). Целевая квартира + радиус-круг
по той же дистанции, что уже заявлена в фильтр-чипе таблицы объявлений выше.

Смонтирован в SourcesView.tsx (overlay «05 АНАЛОГИЧНЫЕ ОБЪЯВЛЕНИЯ»), estimate
прокинут через SectionOverlay из app/v2/page.tsx. mappers.ts: несколько
приватных форматтеров (fmtMonthYear/numRu/fmtDist/sourceLabel/tierLabel/
adMeta/dealMeta/deglueAddr) экспортированы для переиспользования в попапах
карты вместо дублирования.
2026-07-12 16:22:36 +03:00