feat(site-finder): §3 «Сети и точки подключения» — попапы показывают характеристики (#2111) #2112

Merged
bot-backend merged 1 commit from feat/networks-max-info into main 2026-06-30 13:16:08 +00:00
Collaborator

Что

Реализованы HIGH-пункты аудита #2111: попапы карт §3 показывали данные, которые есть в источнике, но не доходили до фронта. Это прямой ответ на повторный запрос Anton по §3 — «расписать что это за источники/точки подключения и их характеристики».

Три слоя карты:

1. Utility OSM (инж. сети) — характеристики из tags JSONB

  • Бэкенд гуманизирует voltage/operator/diameter/material/цепи в одну RU-строку UtilityInfrastructureFeature.characteristics:
    • voltage (вольты, multi «110000;10000») → «110 кВ/10 кВ» (≥1000→кВ, дробные ок «6600»→«6.6 кВ»);
    • diameter«⌀ 500 мм» (первый числовой run — не склеивает «500x300»);
    • стиль « · »-join совпадает с connection-point _build_structure_characteristics.
  • Попап рендерит «Характеристики: …».

2. Точки подключения (НСПД 36328)

  • EngineeringStructure.purpose (назначение/класс «1.1. Сооружения электроэнергетики»), дедуп против type (null если совпадает).
  • Попап: «Назначение: …» + «№ ЕГРН: …» (cad_num уже был в схеме, просто не рендерился).

3. ЗОУИТ (охранные зоны)

  • Бэкенд уже отдавал reg_numb_border + coverage_pct — фронт теперь рендерит «Рег. №: …» и «Перекрытие участка: N%» (coverage_pct 0..1 → %, typeof===number-guard сохраняет легитимный 0%).

Контракт

  • characteristics / purpose — аддитивные optional (str | None = None), score-совместимо. api-types.ts перегенерён офлайн из app.openapi() (+4 строки). ЗОУИТ-поля едут в nspd_zouit_overlaps: list[dict[str, Any]] passthrough — без изменения схемы.

Тесты / проверки

  • tests/services/test_utility_characteristics.py — 23 кейса (voltage multi/кВ/В/дробные, diameter mm-strip + multidim, operator, цепи, junk-фильтр, None/non-dict guard, полный порядок).
  • tests/services/test_quarter_dump_lookup.py — +4 кейса purpose dedup-vs-type. Итого 73 backend-теста зелёные, ruff clean.
  • Frontend tsc --noEmit , eslint , prettier .
  • Pre-push review: APPROVE (2 минорных нита по форматтеру — diameter multidim уже зафикшен этим коммитом).

После merge+deploy — скриншот-верификация всех трёх попапов на проде (как §1 POI в #2110).

## Что Реализованы HIGH-пункты аудита [#2111](https://git.gendsgn.ru/lekss361/gendesign/issues/2111): попапы карт §3 показывали данные, которые **есть в источнике, но не доходили до фронта**. Это прямой ответ на повторный запрос Anton по §3 — «расписать что это за источники/точки подключения и их характеристики». Три слоя карты: ### 1. Utility OSM (инж. сети) — характеристики из `tags` JSONB - Бэкенд гуманизирует `voltage`/`operator`/`diameter`/`material`/цепи в одну RU-строку `UtilityInfrastructureFeature.characteristics`: - `voltage` (вольты, multi «110000;10000») → **«110 кВ/10 кВ»** (≥1000→кВ, дробные ок «6600»→«6.6 кВ»); - `diameter` → **«⌀ 500 мм»** (первый числовой run — не склеивает «500x300»); - стиль « · »-join совпадает с connection-point `_build_structure_characteristics`. - Попап рендерит «Характеристики: …». ### 2. Точки подключения (НСПД 36328) - `EngineeringStructure.purpose` (назначение/класс «1.1. Сооружения электроэнергетики»), дедуп против `type` (null если совпадает). - Попап: «Назначение: …» + «№ ЕГРН: …» (`cad_num` уже был в схеме, просто не рендерился). ### 3. ЗОУИТ (охранные зоны) - Бэкенд **уже отдавал** `reg_numb_border` + `coverage_pct` — фронт теперь рендерит «Рег. №: …» и «Перекрытие участка: N%» (`coverage_pct` 0..1 → %, `typeof===number`-guard сохраняет легитимный 0%). ## Контракт - `characteristics` / `purpose` — аддитивные optional (`str | None = None`), `score`-совместимо. `api-types.ts` перегенерён офлайн из `app.openapi()` (+4 строки). ЗОУИТ-поля едут в `nspd_zouit_overlaps: list[dict[str, Any]]` passthrough — без изменения схемы. ## Тесты / проверки - `tests/services/test_utility_characteristics.py` — 23 кейса (voltage multi/кВ/В/дробные, diameter mm-strip + multidim, operator, цепи, junk-фильтр, None/non-dict guard, полный порядок). - `tests/services/test_quarter_dump_lookup.py` — +4 кейса purpose dedup-vs-type. Итого **73 backend-теста зелёные**, ruff clean. - Frontend `tsc --noEmit` ✅, eslint ✅, prettier ✅. - Pre-push review: ✅ APPROVE (2 минорных нита по форматтеру — diameter multidim уже зафикшен этим коммитом). После merge+deploy — скриншот-верификация всех трёх попапов на проде (как §1 POI в #2110).
bot-backend added 1 commit 2026-06-30 13:00:32 +00:00
feat(site-finder): §3 «Сети и точки подключения» — попапы показывают характеристики (#2111)
All checks were successful
CI / changes (pull_request) Successful in 7s
CI / frontend-tests (pull_request) Successful in 1m12s
CI / openapi-codegen-check (pull_request) Successful in 2m7s
CI / backend-tests (pull_request) Successful in 14m35s
5428c73db5
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.
bot-backend merged commit 6d6e0ce0ca into main 2026-06-30 13:16:08 +00:00
bot-backend deleted branch feat/networks-max-info 2026-06-30 13:16:08 +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#2112
No description provided.