Трассировка сети
Трассировка: путь от узла к источнику, всё ниже по потоку, связанные объекты, зоны и участки без питания.
Возможности
- Четыре вида трассировки от участков и узлов: «К источнику», «Ниже по потоку», «Связанные», «Зона». Начальных объектов может быть несколько — номера через запятую, пробел или точку с запятой.
- «Барьеры»: участки и узлы, через которые обход не идёт. У «Связанных» и «Зоны» — ещё остановка по условию: «Задвижки», «Насосные», «Узлы заданного напора», «Источники».
- «Настройка трассировки» — готовые наборы (вид + условия остановки): пять встроенных, свои и общие. Свою можно сохранить и удалить.
- Итог над таблицей: участки, узлы, длина и объём труб, питающие точки, задвижки, потребители и их нагрузка.
- Вкладки «Потребители», «Задвижки», «Питающие точки» с переходом к объекту на карте; «CSV» — выгрузка.
- Результат на карте; его же можно добавить в выбор на карте для правки нескольких объектов или контура журнала.
- Режим «Зоны сети» — все зоны сети и участки без питания для проверки данных.
- Открыть окно сразу от объекта — кнопка в карточке участка или узла (подсказка «Трассировка: к источнику, ниже по потоку, зона»).
Как это работает
Трассировка идёт по тому же графу, что и локализация аварий: магистральные участки без внутренних схем узлов, участки с отключёнными трубами не проводят воду. Закрытая задвижка на участке — барьер всегда. Закрытая задвижка во внутренней схеме камеры обход не останавливает: камера в графе — один узел, и по модели не определить, какую ветку схемы задвижка перекрывает. Питающие точки — источники тепла и узлы заданного напора: через них квартальные сети берут воду из магистрали. Направление «к источнику» и «ниже по потоку» задают питающие точки, а не направление потока из расчёта. Это оценка по связности: напор и расход не проверяются.
| Вид | Что находит |
|---|---|
| К источнику | Узлы и участки на всех путях от питающих точек до начального объекта; в кольце — все обходы. От участка — со стороны ближнего к источнику конца. Потребители не считаются. |
| Ниже по потоку | Что потеряет связь с питанием, если вывести начальные участки и узлы. |
| Связанные | Всё, что соединено с объектом по проводящим участкам. |
| Зона | Компонента связности сети, в которую входит объект, и её питающие точки. |
Объект-барьер по условию попадает в результат, но обход через него не идёт. «Задвижки» — участки с задвижкой и узлы с задвижками во внутренней схеме. Пользовательский участок-барьер не проводит воду, узел-барьер исключается из сети.
Встроенные настройки: «Путь к источникам», «Что останется без питания», «Участок между задвижками» (связанные до задвижек), «Квартальная сеть (до насосных и узлов заданного напора)», «Зона сети». Свои настройки хранятся в базе города. Личные видит только автор, общие — все. Если поменять вид или условия после выбора настройки, выбор снимается и поле показывает «Своя». Кнопка удаления видна у своих настроек, а у чужих общих — только пользователю с правом «Справочники и шаблоны карточек»; у встроенных её нет.
Ограничения.
- В каждом поле — не больше 500 номеров.
- Если в результате больше 20 000 участков, геометрия не передаётся. Кнопка «Показать на карте» неактивна, участки доступны списком и в CSV.
- Сервер отдаёт не больше 2000 потребителей, в таблице показаны первые 200. Под таблицей — «Показаны первые 200 из N — полный список в CSV»; если сервер обрезал список на 2000, — «Показаны первые 200 из N; в CSV — первые 2000: сузьте трассировку».
Зоны сети строятся по всей сети. Закрытые задвижки на участках разрезают сеть. Таблица «Без питания — проверить данные» показывает до 100 зон без единой питающей точки: это разрыв топологии, потерянная связь фрагментов или сеть, отрезанная закрытыми задвижками. Ниже — 20 крупнейших зон с питанием. «Показать» запускает трассировку «Зона» от узла этой зоны.
Карта. Участки результата выделены цветом вида трассировки, потребители — кружками. Карта подстраивается под охват результата. Результат ничего не меняет в базе.
Что нужно для работы
- Данные: топология сети, задвижки с состоянием, источники и узлы заданного напора. Без питающих точек «К источнику» и «Ниже по потоку» не дают результата.
- Права: трассировка и зоны — любой вошедший пользователь, включая роль «Просмотр». Свою настройку сохраняет любой вошедший. Общую — пользователь с правом «Справочники и шаблоны карточек» (роли «Редактор» и «Администратор»); у остальных нет отметки «Общая». Удалить можно свою настройку, а чужую общую — с тем же правом.
Шаги
Откройте «Инструменты» и наберите в поиске «Трассировка сети» — пункт выделен рамкой.

Нажмите пункт — откроется окно.

Выберите направление («К источнику», «Ниже по потоку», «Связанные», «Зона») и впишите номер участка или узла, от которого идёт трассировка. Номер виден в карточке объекта; несколько номеров — через запятую.

Нажмите «Трассировать». Над таблицей — итог: сколько участков и узлов, длина и объём труб; найденное подсвечено на карте.

Вкладки результата — задвижки на пути и питающие точки (во всех режимах, кроме «К источнику», — ещё потребители). «CSV» выгружает список; потребителей в нём не больше 2000.

Нажмите «Показать на карте», затем «Оставить на карте» — окно закроется, а найденные участки и узлы останутся выделенными на карте.

Примеры
Копия Алматы, участок 133.
- «К источнику»: 873 участка, 830 узлов, 180 192,8 м труб, 82 880 м³. Питающих точек 3: источники в узлах 713 и 714 и узел заданного напора 726. На пути — 26 задвижек.
- «Ниже по потоку»: без участка 133 связь с питанием теряют 5 узлов и 5 участков (778 м труб), а с ними 4 потребителя на 29,43 Гкал/ч.
- «Участок между задвижками»: 1712 участков и 948 потребителей на 3224,25 Гкал/ч. Обход остановился на 6 узлах-камерах, найдено 30 задвижек. Это та же зона, что даёт «Локализация аварий» для участка 133 (28 задвижек закрыть и 2 уже закрыты).
- «Зоны сети»: 4819 зон, у 4403 есть питание, 416 зон без питания (1903 узла). Самая крупная — 1744 узла, 1800 участков, 3 питающие точки.
Если не получается
- «Укажите участок или узел — начальную точку трассировки» — оба поля пусты.
- «12а» — не номер объекта: в поле попало не целое число. «Не больше 500 объектов в списке» — сократите список.
- «Участки не входят в расчётную схему (удалены, отключены или без топологии): …» — участок удалён, отключён, без узлов или из внутренней схемы узла. То же для узлов — «Узлы не входят в расчётную схему…».
- «Нет связи ни с одной питающей точкой» на вкладке «Питающие точки» — объект в зоне без питания; проверьте её в «Зонах сети».
- «Участков слишком много для показа на карте — доступны списком и в CSV.» — больше 20 000 участков; сузьте трассировку барьерами.
- Нет кнопки удаления у выбранной настройки — она встроенная или это чужая общая настройка, а права «Справочники и шаблоны карточек» нет.
- «Не удалось загрузить настройки трассировки», «Не удалось сохранить настройку», «Не удалось удалить настройку», «Не удалось выполнить трассировку», «Не удалось построить зоны сети» — ошибка сервера или связи.
Для администратора
- Расчёт идёт в API синхронно. Граф сети кешируется в памяти процесса на 60 секунд по городу, вместе с ним — дерево блоков для «К источнику». Первая такая трассировка после сборки графа заметно дольше остальных: на копии Алматы — несколько секунд.
- Свои настройки — таблица
tgid_trace_configбазы города. API создаёт её сам при запуске (миграция20261029_trace_config.sql). Пока таблицы нет, сохранение отвечает 503. - Право на общие настройки —
refsв матрице прав.
Для разработчика
- API:
POST /api/analysis/trace(trace_typeилиconfig_id,stop_at,start_line_ids,start_node_ids,barrier_line_ids,barrier_node_ids,include_geometry),GET /api/analysis/subnetworks?min_nodes=; настройки —GET|POST /api/v1/trace-configs(список отдаёт ещёcan_shared— по нему окно решает, показывать ли удаление чужой общей настройки),PUT|DELETE /api/v1/trace-configs/{id}; обрезку списка потребителей ответ трассировки отмечаетconsumers_truncated. Код —routers/analysis.py,routers/trace_configs.py,database/network_trace.py(run_trace,BlockTree, пределыMAX_GEOJSON_LINES,MAX_LISTED_CONSUMERS),database/trace_configs.py(BUILTIN). - MCP:
network_trace,list_trace_configs(tgid_mcp/tools.py). - Веб:
components/NetworkTraceDialog.vue(ключnetworkTrace), подписи, разбор номеров, охват —utils/networkTrace.ts, слой карты —MapViewer.vue(network-trace), выбор на карте —composables/useJournalMapBridge.ts. - Тесты:
tests/utils/networkTrace.spec.ts; API —tests/test_network_trace.py,tests/test_trace_configs.py; e2e —e2e/functions.spec.ts(«трассировка вверх от участка …»).
