Проверка после правки
После каждой операции редактора сервер проверяет связность изменённого места: висячие участки, узлы без питания, дубли, непривязанные концы. Замечания появляются в панели над картой, пока правку ещё можно отменить.
Возможности
- Проверка изменённого места сразу после каждой операции редактора: трассы, нового узла, переноса, изломов, разреза, слияния, разворота, удаления, смены типа.
- Панель «Проверка правки» над картой: число замечаний и до шести пунктов; остальные — «Ещё N — в «Диагностике топологии» фрагмента».
- Щелчок по пункту — карта переходит к узлу или участку замечания.
- «Отменить правку» — отмена проверенной операции прямо из панели; крестик «Скрыть проверку правки» — оставить правку как есть.
Как это работает
Что проверяется. Сервер берёт из журнала отмены узлы и участки операции, концы её участков и всё, что к ним примыкает (до 500 объектов), и прогоняет правила:
- ошибки — расчёт не пойдёт или пойдёт неверно: участок ссылается на снятый или несуществующий узел, начальный и конечный узлы участка совпадают, узел сразу в нескольких таблицах типа (потребитель, источник, насосная);
- предупреждения — подозрительно: повторяющийся участок (та же пара узлов и признак), конец трубы ближе 1 м к сети, но не привязан к ней, узел без участков и связей, концы участка в разных фрагментах, концы геометрии дальше 1 м от узлов, узлы без питания.
Узлы без питания. Ищутся по графу сети от питающих точек — источников тепла и узлов с заданным напором — с учётом закрытых задвижек; каждая операция редактора сбрасывает кеш графа. Новая трасса в пустом месте всегда даёт это замечание: она ещё не соединена с сетью.
Ничего не запрещает. Проверка только читает базу. Замечания — предупреждения: правка уже сохранена («Правка сохранена; замечания не мешают работе»). Десктоп правит ту же базу без этих правил, поэтому они не встроены в схему как ограничения. Правило «пара подающий/обратный» сознательно не включено: в Алматы у подачи и обратки разные узлы, это норма данных.
Когда панели нет. Если замечаний нет, панель не появляется. Проверка запрашивается для вашей последней операции, когда веб узнаёт о ней (после записи, отмены и повтора).
Что нужно для работы
- Любое право на правку сети (как для редактора). Проверка доступна и при выключенных флагах записи, но без записи проверять нечего.
- Журнал отмены (
topology_undo_log) в базе города: область операции берётся из него.
Шаги
Нарисуйте и создайте трассу. Над картой откроется панель «Проверка правки» с числом предупреждений и списком замечаний. Новая трасса в пустом месте не соединена с источником, поэтому здесь замечание «Узлы без питания».

Щёлкните замечание — карта перейдёт к узлу или участку, о котором оно.

Правка оказалась ошибочной — «Отменить правку» в панели: отменяется именно проверенная операция, уведомление «Отменено», объекты пропадают с карты. Если правка верна, закройте панель крестиком «Скрыть проверку правки».

Примеры
На копии базы Алматы после трассы из двух точек в пустом месте фрагмента 74 (участок 124,04 м, два новых узла): «Проверка правки: 1 предупреждение — Узлы без питания: узел #…; часть сети без питания: 2 узла (узел … и связанные с ним)». Панель e2e-теста и ответ API для той же операции совпали по числу и тексту пунктов.
Если не получается
- Панель не появилась — замечаний нет: при чистой правке панель не показывается.
- «Отменить правку» отвечает, что объекты изменены, — после правки их уже поменяли (вы, другой пользователь или десктоп). Отменяйте по истории правок или правьте вручную.
- Замечание «узлы без питания» у правки внутри существующей сети — проверьте, не закрыта ли задвижка выше по течению и подключён ли участок к узлу, а не просто доведён до него (тогда будет и «непривязанный конец»).
- «Отменить правку» отказывает — после правки её объекты уже изменили. Отмените более поздние правки или исправьте вручную.
Для разработчика
GET /api/v1/topology/operations/{operation_id}/check→{operation_id, total, issues: [{rule, severity, …, coords}]}; 404 — операции нет в журнале.POST /api/v1/topology/check-area {node_ids, line_ids}— те же правила для произвольной области (до 500 узлов и 500 участков).- Сервер:
database/topology_rules.py(check_area,operation_area, правилаdangling_line,zero_length_line,duplicate_line,node_type_conflict,cross_fragment_line,geometry_mismatch,unsnapped_end,orphaned_node,no_supply); граф питания —database/outage_simulation.py. - Веб:
components/TopologyCheckPanel.vue(SHOWN_LIMIT = 6), запрос —checkNewOperationвcomposables/useTopologyEditor.ts, подписи правил —utils/topologyDiagnostics.ts. - Тесты: API
tests/test_topology_rules.py, вебtests/utils/topologyDiagnostics.spec.ts; e2e — второй тестe2e/functions/network-editor.spec.tsсверяет панель с ответом API.
