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) экспортированы для переиспользования в попапах
карты вместо дублирования.