feat(networks): человеко-язык типов §3 + реальные имена НСПД-точек (#1953) #2107

Merged
bot-backend merged 1 commit from feat/network-popups-human-labels into main 2026-06-30 11:34:30 +00:00
Collaborator

Summary

Round-3 task ONE — типы сетей на карте §3 человеческим языком + «что это за точки подключения + характеристики». Был разобран ранее, но не внедрён → попап показывал «шляпу» (power=substation, generic «Объект»).

OSM-попап (UtilityInfrastructureLayer)

Вместо сырого Тип: power=substation — человеческая подпись (humanOsmType по source_tag): power=substation→Электроподстанция, power=tower→Опора ЛЭП, power=line→ЛЭП, man_made=water_tower→Водонапорная башня, wastewater_plant→Очистные сооружения и т.д. pipeline/tower уточняются по виду ресурса (gas→Газопровод, communication→Вышка связи). Неизвестный тег → строку «Тип» не показываем (без сырого кода / дубля вида).

НСПД-точки подключения (ConnectionPointsLayer + backend)

Реальные атрибуты дампа cat 36328 лежат в props["options"] (params_name с напряжением/типом — «КЛ 10кВ ТП 1077-ТП 5419», params_purpose, object_type_value, адрес, год/протяжённость/собственность), а _get_engineering_structures_by_boundary читал НЕсуществующие top-level ключи → попап показывал «Объект». Теперь читает options.* + собирает строку характеристик (год · протяжённость · собственность). EngineeringStructure получает additive-поле characteristics (api-types регенерирован, @/types/nspd зеркалит). Попап показывает реальное имя / назначение / характеристики / адрес.

Test plan

  • backend ruff + pytest (47 incl. 3 новых: _clean_struct_str / _build_structure_characteristics)
  • frontend tsc + next lint + vitest (17 incl. 5 новых: humanOsmType)
  • api-types регенерирован (codegen-check пройдёт)
  • code-reviewer APPROVE (options.* guard sound, fallback preserved, contract sync, no regression)
  • post-deploy screenshot-verify: OSM-попап «Тип: Электроподстанция»; НСПД-попап — реальное имя «КЛ 10кВ…» + характеристики

Часть epic #1953.

## Summary Round-3 task ONE — типы сетей на карте §3 человеческим языком + «что это за точки подключения + характеристики». Был разобран ранее, но не внедрён → попап показывал «шляпу» (`power=substation`, generic «Объект»). ### OSM-попап (UtilityInfrastructureLayer) Вместо сырого `Тип: power=substation` — человеческая подпись (`humanOsmType` по `source_tag`): `power=substation`→Электроподстанция, `power=tower`→Опора ЛЭП, `power=line`→ЛЭП, `man_made=water_tower`→Водонапорная башня, `wastewater_plant`→Очистные сооружения и т.д. `pipeline`/`tower` уточняются по виду ресурса (gas→Газопровод, communication→Вышка связи). Неизвестный тег → строку «Тип» не показываем (без сырого кода / дубля вида). ### НСПД-точки подключения (ConnectionPointsLayer + backend) Реальные атрибуты дампа cat 36328 лежат в `props["options"]` (`params_name` с напряжением/типом — «КЛ 10кВ ТП 1077-ТП 5419», `params_purpose`, `object_type_value`, адрес, год/протяжённость/собственность), а `_get_engineering_structures_by_boundary` читал НЕсуществующие top-level ключи → попап показывал «Объект». Теперь читает `options.*` + собирает строку характеристик (год · протяжённость · собственность). `EngineeringStructure` получает additive-поле `characteristics` (api-types регенерирован, `@/types/nspd` зеркалит). Попап показывает реальное имя / назначение / характеристики / адрес. ## Test plan - [x] backend ruff + pytest (47 incl. 3 новых: _clean_struct_str / _build_structure_characteristics) - [x] frontend tsc + next lint + vitest (17 incl. 5 новых: humanOsmType) - [x] api-types регенерирован (codegen-check пройдёт) - [x] code-reviewer ✅ APPROVE (options.* guard sound, fallback preserved, contract sync, no regression) - [ ] post-deploy screenshot-verify: OSM-попап «Тип: Электроподстанция»; НСПД-попап — реальное имя «КЛ 10кВ…» + характеристики Часть epic #1953.
bot-backend added 1 commit 2026-06-30 11:18:58 +00:00
feat(networks): человеко-язык типов на карте §3 + реальные имена НСПД-точек (#1953)
All checks were successful
CI / changes (pull_request) Successful in 8s
CI / frontend-tests (pull_request) Successful in 1m17s
CI / openapi-codegen-check (pull_request) Successful in 2m14s
CI / backend-tests (pull_request) Successful in 14m41s
40b041b379
Round-3 task ONE (был разобран, но не внедрён — попап показывал «шляпу»).

OSM-попап: вместо сырого «Тип: power=substation» — человеческая подпись
(humanOsmType по source_tag: power=substation→Электроподстанция, power=tower→
Опора ЛЭП, power=line→ЛЭП, man_made=water_tower→Водонапорная башня и т.д.;
pipeline/tower уточняются по виду ресурса). Неизвестный тег → строку «Тип» не
показываем (без сырого кода).

НСПД-точки подключения: реальные атрибуты дампа cat 36328 лежат в
props["options"] (params_name с напряжением/типом «КЛ 10кВ ТП…», params_purpose,
object_type_value, адрес, год/протяжённость/собственность), а
_get_engineering_structures_by_boundary читал НЕсуществующие top-level ключи →
попап показывал «Объект». Теперь читаем options.* + собираем строку
характеристик (год · протяжённость · собственность). EngineeringStructure
получает additive-поле characteristics (api-types регенерирован, @/types/nspd
зеркалит). НСПД-попап показывает имя/назначение/характеристики/адрес.

Тесты: humanOsmType (5 кейсов) + _clean_struct_str/_build_structure_characteristics (3).
bot-backend merged commit 53cfd3c3b8 into main 2026-06-30 11:34:30 +00:00
bot-backend deleted branch feat/network-popups-human-labels 2026-06-30 11:34:30 +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#2107
No description provided.