Audit #2111 (HIGH): попапы карт §3 показывали данные, которые есть в источнике,
но недоливались до фронта. Три слоя:
- Utility OSM: гуманизируем voltage/operator/diameter/material/цепи из tags JSONB
в одну RU-строку UtilityInfrastructureFeature.characteristics
(«110 кВ/10 кВ · МРСК Урала», «⌀ 500 мм · steel»). diameter берёт первый
числовой run (не склеивает мульти-размеры «500x300»).
- Точки подключения (НСПД 36328): EngineeringStructure.purpose (назначение/класс,
дедуп против type) + рендер «Назначение» и «№ ЕГРН» (cad_num уже был в схеме).
- ЗОУИТ: бэкенд уже отдавал reg_numb_border + coverage_pct — фронт рендерит
«Рег. №» и «Перекрытие участка N%» (0..1 → %, typeof-guard сохраняет 0%).
Аддитивные optional-поля схемы (str|None=None) — без breaking changes.
api-types.ts перегенерён офлайн из app.openapi(). Юнит-тесты: _utility_characteristics
(formatter edge-cases) + purpose dedup-vs-type.