(high) Section2NetworksUtilities.getUtilityConfig: реальные subtype сетей не маппятся → сырые англ. ключи в таблице #1463

Closed
opened 2026-06-15 05:56:44 +00:00 by bot-backend · 1 comment
Collaborator

Severity: high · Категория: report · Файл: frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx:37-98

Section2NetworksUtilities.tsx:37-98 — switch getUtilityConfig обрабатывает только substation/power_line/pipeline/water_intake/pumping_station. Backend (parcels.py:1906-1909 кладёт subtype = r['road_class'] напрямую) отдаёт реальные значения из noise_loader._NOISE_QUERIES (noise_loader.py:45-62): gas_pipeline, water_main, sewerage, water_works, wastewater_plant, water_tower, storage_tank, transformer, heat_substation. Все они падают в default (строка 86-96) → в колонке 'Тип объекта' клиентской секции '2. Сети' рендерится сырой англ. ключ ('gas_pipeline', 'water_main', 'transformer'). Кейсы water_intake (64) и pumping_station (75) при этом мертвы — backend такие subtype не генерит. Импакт: финдиректор видит англоязычные коды вместо названий сетей в отчёте. Чинить: переписать switch на реальные road_class-значения (gas_pipeline→'Газ (газопровод)', water_main/water_works/water_tower→'Водопровод', sewerage/wastewater_plant→'Канализация', substation/transformer→'Электричество', heat_substation→'Теплоснабжение'); единый remap желательно вынести в общий хелпер (OverviewTab.tsx:176 имеет тот же дефект).

Почему баг: backend/app/api/v1/parcels.py:1906 кладёт subtype = r['road_class'] напрямую в summary; road_class определён в noise_loader.py:45-62 как power_line/pipeline/gas_pipeline/water_main/sewerage/water_works/wastewater_plant/water_tower/storage_tank/substation/transformer/heat_substation. Только substation/power_line/pipeline совпадают со switch; остальные (включая газ как gas_pipeline и воду как water_main) идут в default и показывают англ. ключ. Никакого remap-слоя между API и компонентом нет (grep по water_intake/gas_pipeline во фронте — только OverviewTab с тем же багом).

Как чинить: Привести ключи switch к реальным backend road_class: gas_pipeline → 'Газ (газопровод)', water_main/water_works/water_tower → 'Водопровод', sewerage/wastewater_plant/pumping_station → 'Канализация', transformer → 'Электричество (трансформатор)', heat_substation → 'Теплосеть (ЦТП)'. Pipeline (man_made=pipeline, без substance) пометить нейтрально, не как 'Газ'.


deep-audit «армия ботов 2» · verify+harden, confidence 0.95 · unit U98

**Severity:** high · **Категория:** report · **Файл:** `frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx:37-98` Section2NetworksUtilities.tsx:37-98 — switch getUtilityConfig обрабатывает только substation/power_line/pipeline/water_intake/pumping_station. Backend (parcels.py:1906-1909 кладёт subtype = r['road_class'] напрямую) отдаёт реальные значения из noise_loader._NOISE_QUERIES (noise_loader.py:45-62): gas_pipeline, water_main, sewerage, water_works, wastewater_plant, water_tower, storage_tank, transformer, heat_substation. Все они падают в default (строка 86-96) → в колонке 'Тип объекта' клиентской секции '2. Сети' рендерится сырой англ. ключ ('gas_pipeline', 'water_main', 'transformer'). Кейсы water_intake (64) и pumping_station (75) при этом мертвы — backend такие subtype не генерит. Импакт: финдиректор видит англоязычные коды вместо названий сетей в отчёте. Чинить: переписать switch на реальные road_class-значения (gas_pipeline→'Газ (газопровод)', water_main/water_works/water_tower→'Водопровод', sewerage/wastewater_plant→'Канализация', substation/transformer→'Электричество', heat_substation→'Теплоснабжение'); единый remap желательно вынести в общий хелпер (OverviewTab.tsx:176 имеет тот же дефект). **Почему баг:** backend/app/api/v1/parcels.py:1906 кладёт subtype = r['road_class'] напрямую в summary; road_class определён в noise_loader.py:45-62 как power_line/pipeline/gas_pipeline/water_main/sewerage/water_works/wastewater_plant/water_tower/storage_tank/substation/transformer/heat_substation. Только substation/power_line/pipeline совпадают со switch; остальные (включая газ как gas_pipeline и воду как water_main) идут в default и показывают англ. ключ. Никакого remap-слоя между API и компонентом нет (grep по water_intake/gas_pipeline во фронте — только OverviewTab с тем же багом). **Как чинить:** Привести ключи switch к реальным backend road_class: gas_pipeline → 'Газ (газопровод)', water_main/water_works/water_tower → 'Водопровод', sewerage/wastewater_plant/pumping_station → 'Канализация', transformer → 'Электричество (трансформатор)', heat_substation → 'Теплосеть (ЦТП)'. Pipeline (man_made=pipeline, без substance) пометить нейтрально, не как 'Газ'. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.95 · unit U98</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:56:44 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:08 +00:00
Owner

🔍 week ревью 1 — верификация (ПОДТВЕРЖДЕНО, со уточнением списка значений)

Текущее состояние кода: frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx:36-97getUtilityConfig(subtype) switch обрабатывает только substation/power_line/pipeline/water_intake/pumping_station, default (85-95) возвращает сырой subtype как label.

Backend backend/app/api/v1/parcels.py:1903-1906 кладёт subtype = r["road_class"] напрямую. Фактические road_class для source_type='utility' в noise_loader.py:45-54 (_NOISE_QUERIES): power_line, pipeline, water_works, wastewater_plant, water_tower, storage_tank, substation. (NB: issue называет ещё gas_pipeline/water_main/sewerage/transformer/heat_substation — этих значений в текущем _NOISE_QUERIES нет, список в issue частично устарел; но баг от этого только подтверждается.)

Совпадают со switch лишь substation/power_line/pipeline. Остальные реальные значения (water_works, wastewater_plant, water_tower, storage_tank) падают в default → в колонке «Тип объекта» рендерится сырой англ. ключ. Кейсы water_intake (63) и pumping_station (74) — мёртвые (backend такие subtype не генерит). Дубль в OverviewTab.tsx:176 (ссылка на water_intake).

Корень: Нет remap-слоя между backend road_class и UI; switch построен на значениях, не совпадающих с фактическим выводом noise_loader.

Что править:

  • Привести ключи switch к реальным road_class из noise_loader.py: substation → 'Электричество (подстанция)', power_line → 'Электричество (ЛЭП)', pipeline → 'Трубопровод' (man_made=pipeline без substance — нейтрально, НЕ «Газ»), water_works/water_tower/storage_tank → 'Водопровод', wastewater_plant → 'Канализация'. Убрать мёртвые water_intake/pumping_station или оставить как алиасы.
  • Вынести remap в общий хелпер (тот же дефект — OverviewTab.tsx:176).

Что посмотреть:

  • Код: frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx:36-97; frontend/src/components/site-finder/OverviewTab.tsx:176. Backend backend/app/api/v1/parcels.py:1880-1911; backend/app/services/site_finder/noise_loader.py:28-54 (источник истины по road_class).
  • Vault: релевантных заметок не найдено.
**🔍 week ревью 1 — верификация (ПОДТВЕРЖДЕНО, со уточнением списка значений)** **Текущее состояние кода:** `frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx:36-97` — `getUtilityConfig(subtype)` switch обрабатывает только `substation`/`power_line`/`pipeline`/`water_intake`/`pumping_station`, default (85-95) возвращает сырой `subtype` как label. Backend `backend/app/api/v1/parcels.py:1903-1906` кладёт `subtype = r["road_class"]` напрямую. Фактические `road_class` для `source_type='utility'` в `noise_loader.py:45-54` (`_NOISE_QUERIES`): **power_line, pipeline, water_works, wastewater_plant, water_tower, storage_tank, substation**. (NB: issue называет ещё `gas_pipeline`/`water_main`/`sewerage`/`transformer`/`heat_substation` — этих значений в текущем `_NOISE_QUERIES` нет, список в issue частично устарел; но баг от этого только подтверждается.) Совпадают со switch лишь `substation`/`power_line`/`pipeline`. Остальные реальные значения (`water_works`, `wastewater_plant`, `water_tower`, `storage_tank`) падают в default → в колонке «Тип объекта» рендерится сырой англ. ключ. Кейсы `water_intake` (63) и `pumping_station` (74) — мёртвые (backend такие subtype не генерит). Дубль в `OverviewTab.tsx:176` (ссылка на `water_intake`). **Корень:** Нет remap-слоя между backend `road_class` и UI; switch построен на значениях, не совпадающих с фактическим выводом `noise_loader`. **Что править:** - Привести ключи switch к реальным `road_class` из `noise_loader.py`: `substation → 'Электричество (подстанция)'`, `power_line → 'Электричество (ЛЭП)'`, `pipeline → 'Трубопровод'` (man_made=pipeline без substance — нейтрально, НЕ «Газ»), `water_works/water_tower/storage_tank → 'Водопровод'`, `wastewater_plant → 'Канализация'`. Убрать мёртвые `water_intake`/`pumping_station` или оставить как алиасы. - Вынести remap в общий хелпер (тот же дефект — `OverviewTab.tsx:176`). **Что посмотреть:** - Код: `frontend/src/components/site-finder/analysis/Section2NetworksUtilities.tsx:36-97`; `frontend/src/components/site-finder/OverviewTab.tsx:176`. Backend `backend/app/api/v1/parcels.py:1880-1911`; `backend/app/services/site_finder/noise_loader.py:28-54` (источник истины по `road_class`). - Vault: релевантных заметок не найдено.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
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#1463
No description provided.