Байпасы
Байпасы наружных теплопроводов — обводные линии, их узлы, расход и трубы.
Возможности
- Две вкладки: «Байпасы» и «Стандартные трубы» (в скобках — число записей в базе).
- Плитки качества данных: «Готовы», «Нет линии», «Удалённая линия», «Нет узла», «Нет расхода», «Параметры трубы». Нажатие на плитку — отбор, повторное — снять.
- Поиск по точному ID байпаса или линии, по месту установки, коду и наименованию узлов линии и узла присоединения, по названию фрагмента. Фильтры «Качество данных», «Состояние», «Трубопровод», «Фрагмент».
- Карточка байпаса: «Сетевая привязка», «Задание байпаса», «Параметры трубопровода», «Расчётный режим» — результат последнего сохранённого расчёта.
- «Редактировать свойства»: регулируемый расход и его допуск, заданный напор и его допуск, состояние, трубопровод, место установки, длина, внутренний диаметр, шероховатость, сумма местных сопротивлений, стандарт и ID стандартной трубы.
- «На карте» и кнопка-прицел в строке — переход к байпасу, если у его линии есть геометрия.
- Вкладка «Стандартные трубы»: стандарт, DN, наружный и внутренний диаметр, стенка, площадь сечения, сколько байпасов ссылается на трубу; фильтры «Стандарт» и «Полнота паспорта». В карточке трубы блок «Все поля записи» показывает запись каталога целиком.
- Из протокола расчёта кнопка «Исправить: Журнал байпасов» открывает этот журнал на нужном байпасе.
Как это работает
Где хранятся данные. Байпас — линия сети (linesobj) с карточкой в таблице bypass (связь по lineid), как в десктопе ТГИД. Узел присоединения — bypass.nodeid, трубопровод регулируемого узла — pipelinesignid, состояние — справочник regulatorstates («открыт», «закрыт», «неактивен»). Каталог труб — таблица standardtubes, ссылка на трубу — standardtubelink. Результат расчёта — таблица bp_out; карточка берёт последнюю по дате расчёта запись для линии байпаса.
Качество данных считает сервер, проверки идут по порядку, запись получает первую сработавшую:
| Плитка | Условие |
|---|---|
| «Нет линии» | линии из lineid нет в linesobj |
| «Удалённая линия» | линия помечена удалённой |
| «Нет узла» | не задан nodeid или такого узла нет |
| «Нет расхода» | регулируемый расход пуст или не больше 0 |
| «Параметры трубы» | длина или внутренний диаметр ≤ 0, шероховатость или сумма местных сопротивлений пусты или < 0 |
| «Готовы» | все проверки пройдены |
Стандартная труба «неполная», если не заполнены стандарт, DN, наружный или внутренний диаметр или толщина стенки.
Как байпас считает расчёт. Сопротивление обводной линии (м/(т/ч)²):
S = 6,94988·10⁶ · λ′ / d⁵ · (L + d · Σζ / (λ′ · 1000)), где λ′ = 1 / (4 · (lg(3,715 · d / k))²),
d — внутренний диаметр, мм; L — длина, м; k — шероховатость, мм; Σζ — сумма местных сопротивлений. Незаполненные (ноль или пусто) значения расчёт заменяет: диаметр — 400 мм, длина — 1 м, шероховатость — 0,5 мм; о диаметре и длине пишет в протокол.
- Задан узел присоединения и он есть в расчётной схеме — байпас держит заданный напор в этом узле на трубопроводе из поля «Трубопровод», как регулятор давления.
- Узла нет или он не найден — байпас работает как регулятор расхода по регулируемому расходу; в протоколе «Узел регулирования байпаса […] не найден, байпас считается регулятором расхода».
- Без узла и с нулевым заданием открытый байпас считается закрытым. «Неактивен» — постоянное сопротивление S без регулирования.
Расчёт пишет в bp_out диаметр и потерю напора диафрагмы байпаса, расход, потерю в байпасе, полную потерю напора и гидравлическое сопротивление — их показывает блок «Расчётный режим».
Плитки «Нет узла» и «Нет расхода» — проверка заполнения карточки, а не прогноз расчёта: байпас без узла расчёт всё равно считает — как регулятор расхода, а без узла и расхода открытый байпас закрывает.
Правка пишет только перечисленные поля таблицы bypass. Сервер проверяет версию строки: если запись уже изменил другой пользователь, сохранение отклоняется. Каждая правка попадает в audit_log со старыми и новыми значениями.
Что нужно для работы
- Смотреть журнал и каталог — любой вошедший.
- Править — право «Оборудование» → «Свойства» в матрице прав и включённая запись (
MUTATIONS_ENABLED=true). При охвате «свои» правится только оборудование своих участков и узлов. Без права кнопки «Редактировать свойства» нет. - Блок «Расчётный режим» заполняется после сохранённого расчёта сети, в которой есть байпас.
Шаги
Откройте «Инструменты» и наберите в поиске «Байпасы» — пункт выделен рамкой.

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

Плашки над списком — качество данных: сколько записей готовы к расчёту, а у скольких чего-то не хватает (нет линии, линия удалена, нет узла, нет расхода, не заданы параметры трубы). Красные — критично (расчёт их не учтёт), оранжевые — требуют внимания. Нажмите плашку — список сузится до таких записей. На копии Алматы байпасов нет — список пуст («Байпасы не найдены»); когда они есть, отбор по плашке и поиск работают так же, как в других журналах оборудования.

Вкладка «Стандартные трубы» — диаметры и толщины стенок, из которых выбираются трубы байпаса.

Примеры
Копия Алматы: таблица пуста. В bypass нет ни одной записи: список пуст («Байпасы не найдены»), над ним — предупреждения «В базе нет байпасов…» и «Результатов расчёта по байпасам ещё нет…». Вкладка «Стандартные трубы» работает: 83 трубы трёх стандартов, все с полным паспортом.
Копия Астаны: почему нет «Готовых». В bypass 465 записей, «Готовы» — 0. «Нет линии» — 133, «Удалённая линия» — 2, «Нет узла» — 330. Состояния: «открыт» — 47, «закрыт» — 418. У всех 330 байпасов с живой линией узел присоединения не задан, у 308 из них нет и регулируемого расхода. Для расчёта это значит: такой байпас — регулятор расхода с нулевым заданием, и если он открыт, расчёт его закрывает.
Если не получается
- «В базе нет байпасов: они появятся в журнале, когда будут внесены; каталог стандартных труб — на отдельной вкладке.» — в базе города байпасов нет.
- «Результатов расчёта по байпасам ещё нет: диаметр диафрагмы, расход и потери напора появятся после сохранения расчёта сети.» — выполните и сохраните расчёт сети.
- В карточке «гидравлический режим для этого байпаса пока не рассчитан» — для его линии нет записи в
bp_out. - «Не выбран или потерян узел присоединения байпасного участка.» — задайте узел, если байпас должен держать напор; без узла он работает как регулятор расхода.
- «Регулируемый расход равен нулю или отсутствует.» — заполните «Регулируемый расход».
- «Длина, внутренний диаметр, шероховатость или сумма местных сопротивлений имеют недопустимое значение.» — исправьте параметры в «Параметры трубопровода».
- «Запись изменена другим пользователем — обновите карточку» — карточку изменили после открытия; нажмите «Перезагрузить объект» в уведомлении и повторите правку.
- «Справочники не загрузились — плитки и фильтры могут быть неполными» — сервер не отдал справочники; список при этом работает, нажмите «Обновить».
- «Не удалось загрузить байпасы», «Не удалось открыть карточку байпаса», «Не удалось загрузить стандартные трубы» — нет связи с сервером API.
Для администратора
- Запись:
MUTATIONS_ENABLED=true; право — действие «Свойства» для вида «Оборудование». - Таблицы десктопные:
bypass,standardtubes,standards,regulatorstates,pipelinesigns,bp_out,calculation; веб их не создаёт. - Правки пишутся в
audit_log. После правки сбрасывается кеш моделирования отключений.
Для разработчика
- Чтение:
GET /api/network-bypasses/lookups,GET /api/network-bypasses/items(page,page_size,quality_status,state_id,pipeline_sign_id,fragment_id,line_id,search),GET /api/network-bypasses/items/{bypass_id},GET /api/network-bypasses/tubes,GET /api/network-bypasses/tubes/{standard_tube_id}—routers/equipment.py,database/network_bypasses.py. - Правка:
GET|PUT /api/v1/equipment-edit/bypass/{row_id}(поля карточки десктопа иstandardtubelink, версияxmin→ 409) —routers/equipment_edit.py,database/typed_edit.py. - Расчёт: чтение байпаса —
heatnet/io/reader.py(_bypass), сопротивление —heatnet/physics/resistance.py(bypass_resistance), регулирование —heatnet/solve/regulators.py. - Веб:
components/NetworkBypassJournalDialog.vue,services/equipmentEditService.ts,composables/useJournalEdit.ts,composables/useEquipmentSaveError.ts. - Тесты: API —
tests/test_equipment_router.py,tests/test_equipment_edit_router.py; веб —tests/utils/equipmentEdit.spec.ts; e2e —e2e/functions/equipment-registries.spec.ts(реестры оборудования: «найдено» как в ответе API).
