Сценарии «что если»

Сценарии «что если»: копия фрагмента для варианта сети — правка, расчёт и сравнение с основой.

Где найти
«Инструменты» (значок чемоданчика справа вверху) → Исходные данные → «Сценарии «что если»». То же — палитрой команд: Ctrl+K и начните набирать название.
Права
доступно всем, кто вошёл.
Короткое видео: как это выглядит в системе
Функция показана в сквозном сценарии:Сценарий «что если» со сравнением
Читаю как

Возможности

  • «Новый сценарий» — копия выбранного фрагмента-основы под своим названием и с пояснением «Что проверяем (необязательно)». Копию видит и десктоп — как обычный фрагмент.
  • Список сценариев: основа, дата, автор; флажок «Архив» показывает и архивные.
  • «Отличия сети» — плитки по видам отличий (изменено, добавлено, удалено в сценарии; конфликт; изменения основы после создания сценария) и таблица: объект, поле «основа → сценарий». Щелчок по плитке оставляет в таблице только этот вид, перекрестие в строке показывает объект на карте. «Сравнить заново» перечитывает отличия.
  • «Режим по расчётам» — два расчёта, основы и сценария: недотоп потребителей, «Стали недотоп», «Отключены (без расчёта)», перегруженные участки, расход потребителей с разницей к основе и список изменений; «Excel» выгружает сравнение.
  • «Работать в сценарии» — на карте остаётся только копия, редактор правит её; «Показать основу» возвращает фрагмент-основу.
  • «Перенести в основу» — предпросмотр (что изменится, конфликты, проверка связности), выбор по каждому конфликту «основа» или «сценарий», перенос одной операцией с «Отменить» в уведомлении.
  • Значок архива — убрать сценарий в архив и вернуть; фрагмент-копия при этом остаётся.

Как это работает

Копия. Сценарий создаётся так же, как десктоп копирует фрагмент: объекты основы выгружаются в формат .tgid и загружаются новыми номерами в новый фрагмент. Запись о сценарии хранится в tgid_scenario, соответствие «объект копии → объект основы» и отпечаток каждой строки основы на момент создания — в tgid_scenario_object. Создание — одна операция журнала отмены топологии SCENARIO_CREATE; крупный фрагмент копируется до минуты.

Сравнение трёхстороннее. В момент создания копия равна основе. Если отпечаток строки копии не совпадает с сохранённым — объект правили в сценарии; если не совпадает отпечаток основы — объект правили в основе после создания; если оба — конфликт. Сравниваются те же колонки, что выгружает .tgid; ссылки переводятся в номера основы, поэтому новые номера копии отличием не считаются. В списке отличий — не больше 500 строк, числа на плитках — полные.

Режим по расчётам. Сценарий считается как любой фрагмент. Потребители сравниваются по узлу присоединения: располагаемый напор, теплообеспеченность (ниже 100 % — недотоп), расход сетевой воды. Участки — по расходу, скорости и удельным потерям. Заметными считаются изменения напора от 0,5 м, теплообеспеченности от 1 п. п., расхода участка от 1 т/ч и не меньше 5 %. Объект, который есть в расчёте основы, но не сценария, — «не рассчитан» (отключённая часть сети). По умолчанию берутся последний расчёт сценария и расчёт основы с той же температурой наружного воздуха и режимом; если они разные, окно предупреждает, что сравнение может быть некорректным.

Перенос в основу. Изменённые объекты основы получают значения сценария (у узлов и участков — вместе с геометрией), добавленные вставляются в основу новыми номерами, удалённые узлы и участки помечаются снятыми. Конфликты по умолчанию не переносятся. Изменения основы после создания сценария не трогаются. Перед записью — тот же перенос с откатом: отчёт и проверка правил связности области. Перенос — одна операция журнала отмены SCENARIO_MERGE.

Удаление сценария. Отдельной кнопки нет: сценарий с копией удаляет отмена операции создания («Отменить» редактора топологии или «История правок»), пока копию не правили; иначе — архив.

Что нужно для работы

  • Смотреть сценарии, отличия и сравнение режима — любой вошедший; «Excel» — право «Выгрузки и отчёты».
  • «Новый сценарий», архив — общее право «Импорт сети» и «Участки: Создание», включённая запись топологии на сервере (TOPOLOGY_MUTATIONS_ENABLED=true, MUTATIONS_ENABLED=true).
  • «Перенести в основу» — предпросмотр с теми же правами; запись — права «Перемещение и изломы» и «Удаление» с охватом «все» для участков и узлов.
  • Сравнение режима — расчёты обоих фрагментов: «Расчёт» выполняет фоновая очередь Celery сервера.

Шаги

  1. Откройте «Инструменты» и наберите в поиске «Сценарии «что если»» — пункт выделен рамкой.

    Пункт «Сценарии «что если»» в панели «Инструменты»

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

    Окно «Сценарии «что если»»

  3. Выберите сценарий в списке слева: справа — его основа и отличия сети от основы (что изменено, добавлено, удалено). Перекрестие в строке показывает объект на карте.

    Сценарии «что если»: шаг 3

  4. Откройте вкладку «Режим по расчётам»: выберите расчёт основы и расчёт сценария — плитки покажут недотоп, перегрузку участков и расход потребителей с разницей к основе, ниже — список изменений. «Excel» выгружает сравнение.

    Сценарии «что если»: шаг 4

  5. Чтобы править копию, нажмите «Работать в сценарии» — карта переключится на фрагмент сценария; «Показать основу» возвращает исходный фрагмент.

Примеры

Копия Алматы: сценарий «Перспектива 2035 (+34.58 Гкал/ч)». Основа — «Маг. сети для расчета НС» (#74), копия — фрагмент #117. «Отличия сети»: 60 обобщённых потребителей «Изменено» — в копии подняты нагрузки, например отопление 1,211 → 1,510 Гкал/ч. «Режим по расчётам»: копия и основа посчитаны при tн −25 °C (расчёт сценария №2, основы — №3). Недотоп у 429 потребителей — как в основе, новых недотопов нет; перегруженных участков 67 — на 5 больше, расход потребителей 40,7 тыс. т/ч — на 522 т/ч больше. Изменений по участкам 556, в списке первые 300: например, участок №326200 — расход 218,8 → 255 т/ч, скорость 1,15 → 1,3 м/с. Без расчёта копии вкладка пишет «Сценарий ещё не рассчитан» — сначала выполните «Расчёт» для фрагмента-копии.

Та же копия: полный цикл на маленьком фрагменте. Сценарий от «СВЭР Толстого,6б» (#42) — копия из 14 узлов и 10 участков. Групповой установщик поставил шероховатость 1,5 мм десяти участкам копии; «Сравнить заново» — плитка «Изменено» 10, в строках «Паспорт участка» значение «2 → 1.5» (у поля шероховатости в окне пока нет русской подписи — показано имя поля базы tuberoughness). Предпросмотр переноса — «Паспорт участка: изменить 10», проверка связности без замечаний. После возврата значений и отмены создания сценарий и копия исчезли из списка.

Если не получается

  • Вкладка «Режим по расчётам» пустая — нет расчёта основы или сценария: выполните «Расчёт» для обоих фрагментов.
  • «Перенести в основу» неактивна — в сценарии нет правок.
  • «Разная температура наружного воздуха…», «Разные режимы расчёта…» — выбраны несопоставимые расчёты; выберите расчёт основы с той же Tн и режимом.
  • «Переносить нечего: правок сценария нет.» — правок нет или остались только конфликты, которые вы оставили за основой.
  • У сценария пометка «копия удалена» — фрагмент-копию удалили (например, в десктопе); сценарий можно только убрать в архив.
  • «Не удалось создать сценарий», «Не удалось сравнить сценарий с основой», «Не удалось подготовить перенос», «Отменить перенос нельзя» — с текстом ответа сервера: отмену не даёт, например, правка объектов после переноса.
  • «Применение — права «Перемещение» и «Удаление» всех участков и узлов» — у пользователя нет охвата «все»; перенос делает тот, у кого он есть.

Для администратора

  • Флаги: MUTATIONS_ENABLED, TOPOLOGY_MUTATIONS_ENABLED. Таблицы сценариев tgid_scenario, tgid_scenario_object создаёт миграция sql/migrations/20261029_scenarios.sql.
  • Создание и перенос пишутся в журнал отмены топологии и audit_log; после них сбрасываются кеши топологии и моделирования отключений.
  • Копии сценариев — обычные фрагменты: их видят десктоп, расчёт и выгрузки. Архив не удаляет копию.

Для разработчика

  • API (routers/scenarios.py; логика — database/scenarios.py, database/scenario_compare.py, database/scenario_merge.py, отчёт Excel — database/scenario_report.py): GET /api/v1/scenarios?include_archived=, POST /api/v1/scenarios (base_fileid, name до 60 символов, note), GET /api/v1/scenarios/{id}/diff?limit=, GET /api/v1/scenarios/{id}/compare?base_calculation_id=&scenario_calculation_id=, GET /api/v1/scenarios/{id}/compare.xlsx, POST /api/v1/scenarios/{id}/merge (dry_run, resolutions — {"таблица:id копии": "scenario"|"base"}), POST /api/v1/scenarios/{id}/status (active | archived). Отмена создания и переноса — POST /api/v1/topology/undo.
  • Веб: components/ScenariosDialog.vue, components/ScenarioMergeDialog.vue, utils/scenarios.ts, запросы — services/api/fragments.ts.
  • Тесты: API — tests/test_scenarios.py, tests/test_scenario_report.py; веб — tests/utils/scenarios.spec.ts; e2e — e2e/functions/source-data.spec.ts («Сценарий «что если»»: создание из окна, правка копии, отличия, перенос в основу и его отмена из уведомления, удаление отменой создания).
Хотите увидеть эту функцию на своих данных?Покажем ТГИД на демонстрации и ответим на вопросы инженеров.
Запросить демо