(site-finder) [feature/data] все инженерные сети на карту + единый источник (191-ФЗ engineering_networks не используется) #1746

Closed
opened 2026-06-18 06:27:56 +00:00 by bot-backend · 6 comments
Collaborator

Фидбек: все ресурсы точно надо наносить на карту.

Диагноз: Section2 (Section2NetworksUtilities.tsx) — только таблица расстояний, без координат: backend parcels.py:1907 utilities-SQL отдаёт road_class/name/distance БЕЗ lat/lon. Сети представлены 3 несвязанными источниками (osm_noise_sources 2км; nspd cat36328 200м; connection-points 500м). Таблица engineering_networks (191-ФЗ, owner/diameter/voltage, data/sql/91_engineering_networks_191fz.sql) не читается ни одним модулем — залита, потребителя нет.

Фикс (L): единый источник истины (рекоменд. connection-points с geometry) для таблицы И карты; решить судьбу 191-ФЗ engineering_networks. Продуктовое решение по источнику/UX.

Источник: боевой фидбек Anton по analyze cad 66:41:0702048:27 (2026-06-17), углублённая диагностика по коду + live prod.

**Фидбек:** все ресурсы точно надо наносить на карту. **Диагноз:** Section2 (`Section2NetworksUtilities.tsx`) — только таблица расстояний, без координат: backend `parcels.py:1907` utilities-SQL отдаёт road_class/name/distance БЕЗ lat/lon. Сети представлены 3 несвязанными источниками (osm_noise_sources 2км; nspd cat36328 200м; connection-points 500м). Таблица `engineering_networks` (191-ФЗ, owner/diameter/voltage, `data/sql/91_engineering_networks_191fz.sql`) **не читается ни одним модулем** — залита, потребителя нет. **Фикс (L):** единый источник истины (рекоменд. connection-points с geometry) для таблицы И карты; решить судьбу 191-ФЗ engineering_networks. **Продуктовое решение по источнику/UX.** _Источник: боевой фидбек Anton по analyze cad 66:41:0702048:27 (2026-06-17), углублённая диагностика по коду + live prod._
bot-backend added the
enhancement
site-finder
scope/backend
labels 2026-06-18 06:27:56 +00:00
Author
Collaborator

Доступная часть реализована в PR #1751: карта точек подключения и охранных зон сетей (НСПД) добавлена в секцию «Сети» (была только таблица расстояний). Issue оставляю открытым — полный единый источник истины (191-ФЗ engineering_networks: владелец/диаметр/мощность + унификация источников + OSM-шум в «Атмосферу») требует датасета Минстроя (QGIS.zip), которого нет. Это следующий шаг, когда будут данные.

Доступная часть реализована в PR #1751: карта точек подключения и охранных зон сетей (НСПД) добавлена в секцию «Сети» (была только таблица расстояний). **Issue оставляю открытым** — полный единый источник истины (191-ФЗ engineering_networks: владелец/диаметр/мощность + унификация источников + OSM-шум в «Атмосферу») требует датасета Минстроя (QGIS.zip), которого нет. Это следующий шаг, когда будут данные.
Author
Collaborator

Инж.сети БЕЗ B2B — нашёл 2 открытых источника (discovery 2026-06-27)

Не нужны договорённости с РСО/Минстроем для базового слоя:

1. OSM Overpass — уже есть паттерн в коде, проверено живьём. noise_loader.py уже тянет utility-инфру через Overpass. Live-тест по ЕКБ-bbox: 3081+ элементов (power=line 289, power=tower 1864, substation 762, water_works 24, waterway=dam 10, …). Реальная геометрия линий/подстанций. → строю сейчас utility_infrastructure_loader.py + таблица osm_utility_infrastructure_ekb (зеркало 82_osm_poi_ekb.sql) + endpoint. Покрытие OSM по utility неполное, но ненулевое и бесплатное.

2. NSPD доп-слои — wire-only. nspd.gov.ru публичный (без auth), уже интегрирован (nspd_client.py, 31 слой). list_layers(theme_id=1) отдаёт каталог — там есть доп. инженер/сеть/ЗОУИТ-слои (фильтр по «инженер/сеть/водо/газ/электр/тепло/канали»). Можно добавить охранные ЗОУИТ инж.сетей (это buildability-констрейнт, ценнее геометрии) тем же клиентом. → follow-up (cross-ref #103, #52 п.1).

3. 91_engineering_networks_191fz.sql — схема есть (137 НСИ-классификаторов + 6 ref-таблиц), но 0/542 строк + нет лоадера; 191-ФЗ-источник (ФГИС ТП) gate-kept (личный кабинет). Пропускаю — OSM+NSPD покрывают открыто.

Вывод для #52: инж.сети (п.1 B2B-реестра) можно закрыть открытыми данными для MVP-слоя без обращений в МРСК/Водоканал. B2B нужен только для точных мощностей/нагрузок per-substation (это уже не «на карту», а deep-аналитика).

## Инж.сети БЕЗ B2B — нашёл 2 открытых источника (discovery 2026-06-27) Не нужны договорённости с РСО/Минстроем для базового слоя: **1. OSM Overpass — уже есть паттерн в коде, проверено живьём.** `noise_loader.py` уже тянет utility-инфру через Overpass. Live-тест по ЕКБ-bbox: **3081+ элементов** (power=line 289, power=tower 1864, substation 762, water_works 24, waterway=dam 10, …). Реальная геометрия линий/подстанций. → **строю сейчас** `utility_infrastructure_loader.py` + таблица `osm_utility_infrastructure_ekb` (зеркало `82_osm_poi_ekb.sql`) + endpoint. Покрытие OSM по utility неполное, но ненулевое и бесплатное. **2. NSPD доп-слои — wire-only.** nspd.gov.ru публичный (без auth), уже интегрирован (`nspd_client.py`, 31 слой). `list_layers(theme_id=1)` отдаёт каталог — там есть доп. инженер/сеть/ЗОУИТ-слои (фильтр по «инженер/сеть/водо/газ/электр/тепло/канали»). Можно добавить охранные ЗОУИТ инж.сетей (это buildability-констрейнт, ценнее геометрии) тем же клиентом. → **follow-up** (cross-ref #103, #52 п.1). **3. `91_engineering_networks_191fz.sql`** — схема есть (137 НСИ-классификаторов + 6 ref-таблиц), но **0/542 строк** + нет лоадера; 191-ФЗ-источник (ФГИС ТП) gate-kept (личный кабинет). Пропускаю — OSM+NSPD покрывают открыто. **Вывод для #52:** инж.сети (п.1 B2B-реестра) можно закрыть открытыми данными для MVP-слоя без обращений в МРСК/Водоканал. B2B нужен только для точных мощностей/нагрузок per-substation (это уже не «на карту», а deep-аналитика).
Author
Collaborator

Backend live на проде (2026-06-27)

PR #1930 смержен + задеплоен (migration 170, backend+worker образы). Таблица наполнена с Overpass:

  • osm_utility_infrastructure_ekb: 1099 элементов (power 1072, water 27), все с валидной geom.
  • Endpoint работает: ST_DWithin(geom::geography, центр-ЕКБ, 500м) → 13 элементов (= то, что вернёт GET /api/v1/parcels/{cad}/utility-infrastructure). Spatial-индекс + запрос проверены на проде.
  • Источник — OSM Overpass, без B2B.

⚠️ Overpass throttle — частичное покрытие

Публичный overpass-api.de зарейтлимитил (429 / 504) поздние query-типы (power=tower, water_works, gas, heat_substation, man_made=tower, wastewater_plant) — успели пройти power=line/substation + water. Поэтому 1099 (в основном ЛЭП), а не ~3к.

  • Top-up: weekly-beat (пн 04:00 МСК) перезапустит — throttle к тому времени сбросится.
  • Follow-up (hardening): добавить в лоадер retry-with-backoff на 429/504 + опц. mirror (overpass.kumi.systems) + больший inter-query delay (1с мало для overpass-api.de). Тогда beat будет добирать всё стабильно.

Остаётся

  • Полное покрытие (towers/gas/heat/sewage) — после beat-retry / hardening.
  • Frontend: сети на карту — домен frontend-контрибьютора (endpoint + типы готовы, api-types.ts регенерирован).

Базовый слой (ЛЭП+вода, 1099 объектов) запрашиваемый. Держу open под полное покрытие + фронт-рендер.

## Backend live на проде (2026-06-27) PR #1930 смержен + задеплоен (migration **170**, backend+worker образы). Таблица наполнена с Overpass: - **`osm_utility_infrastructure_ekb`: 1099 элементов** (power 1072, water 27), все с валидной geom. - **Endpoint работает**: `ST_DWithin(geom::geography, центр-ЕКБ, 500м)` → 13 элементов (= то, что вернёт `GET /api/v1/parcels/{cad}/utility-infrastructure`). Spatial-индекс + запрос проверены на проде. - **Источник — OSM Overpass, без B2B.** ### ⚠️ Overpass throttle — частичное покрытие Публичный `overpass-api.de` зарейтлимитил (429 / 504) поздние query-типы (power=tower, water_works, gas, heat_substation, man_made=tower, wastewater_plant) — успели пройти power=line/substation + water. Поэтому 1099 (в основном ЛЭП), а не ~3к. - **Top-up:** weekly-beat (пн 04:00 МСК) перезапустит — throttle к тому времени сбросится. - **Follow-up (hardening):** добавить в лоадер retry-with-backoff на 429/504 + опц. mirror (`overpass.kumi.systems`) + больший inter-query delay (1с мало для overpass-api.de). Тогда beat будет добирать всё стабильно. ### Остаётся - Полное покрытие (towers/gas/heat/sewage) — после beat-retry / hardening. - **Frontend: сети на карту** — домен frontend-контрибьютора (endpoint + типы готовы, api-types.ts регенерирован). Базовый слой (ЛЭП+вода, 1099 объектов) запрашиваемый. Держу open под полное покрытие + фронт-рендер.
Author
Collaborator

Полное покрытие достигнуто (2026-06-27)

После retry-backoff+mirror фикса (#1931, deployed) re-populate взял полный набор: osm_utility_infrastructure_ekb = 3084 элемента:

  • power 2935 (было 1072 — towers/подстанции долились), communication 70, water 51, gas 26, sewage 2. heat=0 (heat_substation в OSM ЕКБ почти нет — ожидаемо).

Backend-слой инж.сетей готов и наполнен: таблица + endpoint GET /parcels/{cad}/utility-infrastructure + weekly-beat (теперь устойчив к throttle). Без B2B, открытые данные.

Остаётся только frontend-рендер на карту (домен frontend-контрибьютора; endpoint + типы готовы). Держу open под фронт; backend-часть #1746 + NSPD-доп-слои (#103) — закрыты/follow-up.

## ✅ Полное покрытие достигнуто (2026-06-27) После retry-backoff+mirror фикса (#1931, deployed) re-populate взял **полный набор**: `osm_utility_infrastructure_ekb` = **3084 элемента**: - power **2935** (было 1072 — towers/подстанции долились), communication 70, water 51, gas 26, sewage 2. heat=0 (heat_substation в OSM ЕКБ почти нет — ожидаемо). Backend-слой инж.сетей готов и наполнен: таблица + endpoint `GET /parcels/{cad}/utility-infrastructure` + weekly-beat (теперь устойчив к throttle). Без B2B, открытые данные. **Остаётся только frontend-рендер на карту** (домен frontend-контрибьютора; endpoint + типы готовы). Держу open под фронт; backend-часть #1746 + NSPD-доп-слои (#103) — закрыты/follow-up.
Author
Collaborator

Фронт-рендер инж.сетей на карту — задеплоен и QA-проверен в браузере (2026-06-27)

PR #1934 смержен + задеплоен на прод (main 6c8bf0e, build-frontend ). Слой OSM инж.сетей теперь рисуется на карте в секции «Сети» analyze, рядом с точками подключения НСПД и ЗОУИТ.

QA (live prod, реальный браузер через basic-auth, cad 66:41:0702048:27)

  • Leaflet-карта в секции «Сети» (а не только таблица расстояний).
  • Панель «Инженерные сети (OSM)» с тогглами и счётчиками («Показать все (12)», «Электросети 12»).
  • Янтарные ЛЭП-линии на карте: 13 SVG-path со stroke #f59e0b (LineString power).
  • Тоггл работает: выключение «Электросети» убрало 12 фич с карты (overlay paths 140→128).
  • 0 console-ошибок при навигации + интеракции.
  • Нет регресса: НСПД точки подключения + ЗОУИТ-слои на месте.
  • Endpoint utility-infrastructure / connection-points / analyze → все 200.

Проверено и кодово: чанк роута в задеплоенном контейнере (page-179f55576ce47725.js) содержит код слоя; endpoint отдаёт и LineString, и Point геометрию — оба типа рендерятся.

Что закрыто этим

Боевой фидбек «все ресурсы точно надо наносить на карту» — выполнен. OSM-слой инж.сетей (power/water/gas/communication/sewage, 3084 элемента, weekly-beat) на карте + единый рендер с НСПД-слоями на одной карте.

Что остаётся (data-gated, сужаю scope)

  • 191-ФЗ engineering_networks (владелец/диаметр/напряжение, 91_engineering_networks_191fz.sql) — 0/542 строк, нет лоадера, источник ФГИС ТП gate-kept (личный кабинет Минстроя, QGIS.zip). Это единственная оставшаяся часть тикета и она упирается в данные, не в код. Когда будет датасет — лоадер + слой добавляются тем же паттерном.

Держу open только под 191-ФЗ-датасет. Если решишь, что OSM-слоя достаточно для MVP — могу закрыть и завести 191-ФЗ отдельным data-тикетом.

## ✅ Фронт-рендер инж.сетей на карту — задеплоен и QA-проверен в браузере (2026-06-27) PR #1934 смержен + задеплоен на прод (main `6c8bf0e`, build-frontend ✅). Слой OSM инж.сетей теперь **рисуется на карте** в секции «Сети» analyze, рядом с точками подключения НСПД и ЗОУИТ. ### QA (live prod, реальный браузер через basic-auth, cad `66:41:0702048:27`) - ✅ **Leaflet-карта** в секции «Сети» (а не только таблица расстояний). - ✅ Панель **«Инженерные сети (OSM)»** с тогглами и счётчиками («Показать все (12)», «Электросети 12»). - ✅ **Янтарные ЛЭП-линии** на карте: 13 SVG-path со stroke `#f59e0b` (LineString power). - ✅ **Тоггл работает**: выключение «Электросети» убрало 12 фич с карты (overlay paths 140→128). - ✅ **0 console-ошибок** при навигации + интеракции. - ✅ **Нет регресса**: НСПД точки подключения + ЗОУИТ-слои на месте. - ✅ Endpoint `utility-infrastructure` / `connection-points` / `analyze` → все 200. Проверено и кодово: чанк роута в задеплоенном контейнере (`page-179f55576ce47725.js`) содержит код слоя; endpoint отдаёт и LineString, и Point геометрию — оба типа рендерятся. ### Что закрыто этим Боевой фидбек «**все ресурсы точно надо наносить на карту**» — выполнен. OSM-слой инж.сетей (power/water/gas/communication/sewage, 3084 элемента, weekly-beat) на карте + единый рендер с НСПД-слоями на одной карте. ### Что остаётся (data-gated, сужаю scope) - **191-ФЗ `engineering_networks`** (владелец/диаметр/напряжение, `91_engineering_networks_191fz.sql`) — 0/542 строк, нет лоадера, источник ФГИС ТП gate-kept (личный кабинет Минстроя, QGIS.zip). Это **единственная** оставшаяся часть тикета и она упирается в данные, не в код. Когда будет датасет — лоадер + слой добавляются тем же паттерном. Держу open **только** под 191-ФЗ-датасет. Если решишь, что OSM-слоя достаточно для MVP — могу закрыть и завести 191-ФЗ отдельным data-тикетом.
Author
Collaborator

Закрываю как MVP-достаточный (2026-07-04) — OSM-слой инж.сетей на карте живёт с 2026-06-27, QA-проверен, весь боевой фидбек «все ресурсы на карту» выполнен. Единственный оставшийся хвост (191-ФЗ engineering_networks) упирается в датасет из личного кабинета Минстроя — вынесен в отдельный needs-human тикет #2409, чтобы не путать data-blocker с code-задачей.

Закрываю как MVP-достаточный (2026-07-04) — OSM-слой инж.сетей на карте живёт с 2026-06-27, QA-проверен, весь боевой фидбек «все ресурсы на карту» выполнен. Единственный оставшийся хвост (191-ФЗ engineering_networks) упирается в датасет из личного кабинета Минстроя — вынесен в отдельный needs-human тикет #2409, чтобы не путать data-blocker с code-задачей.
Sign in to join this conversation.
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#1746
No description provided.