В этой статье вы узнаете, какие элементы BPMN поддерживает DES-симуляция (имитационное моделирование) в Storm BPMN, а также что делать, если в вашей схеме есть подпроцессы, граничные события, условия на стрелках или другие элементы, которые движок не моделирует. Здесь описаны ограничения по типам задач, шлюзов, событий и буферов, а также способы упростить схему для успешного запуска симуляции.

Движок DES-симуляции строит модель на основе BPMN-схемы, но учитывает не все элементы. Если в схеме присутствуют неподдерживаемые конструкции, симуляция может не запуститься или дать неточные результаты. Ниже — полный список того, что движок понимает, и рекомендации по адаптации схемы.

## Поддерживаемые элементы

Движок корректно моделирует следующие элементы BPMN:

* **Задачи всех видов** — пользовательские, сервисные, скриптовые и другие. Каждая задача настраивается отдельно: длительность, распределение, ресурс, доход и расходы.
* **Начальное и конечное события** — стандартные круглые маркеры без триггеров. Они обозначают начало и завершение процесса.
* **Исключающий шлюз (XOR)** — развилка «или-или». Для него вы задаёте вероятности ветвей, и их сумма должна быть 100 %.
* **Параллельный шлюз (AND)** — развилка «и-и». Все ветки выполняются одновременно.
* **Включающий шлюз (OR)** — считается как исключающий (XOR). То есть из нескольких ветвей выбирается одна по вероятности.
* **Промежуточные события** — используются как задержка во времени. Условное промежуточное событие может быть включено как буфер (межоперационное хранилище с конечной ёмкостью).
* **Петли** — допустимы, но заявка не может пройти один и тот же узел более 100 раз. При превышении лимита заявка отбрасывается с причиной «Превышены повторы».

## Неподдерживаемые элементы и ограничения

Следующие элементы движок не моделирует. На экране настройки симуляции их нельзя добавить, а если они есть в исходной BPMN-схеме — их нужно убрать или заменить:

* **Подпроцессы и вызовы активности** — движок не раскрывает вложенные схемы. Если в схеме есть подпроцесс, его содержимое нужно вынести на основной уровень как отдельные задачи.
* **Граничные события** — таймеры, ошибки и другие события, привязанные к задачам (маленькие квадратики на границе задачи). Движок их игнорирует. Если логика требует таймаута или обработки ошибки, используйте политику таймаутов в настройках симуляции или добавьте отдельную задачу после основной.
* **Событийный и сложный шлюзы** — не поддерживаются. Замените их на исключающий (XOR) или параллельный (AND) шлюз в зависимости от логики.
* **Стартовые и конечные события с триггерами** — события, запускаемые сообщением, таймером, сигналом, ошибкой или terminate. Движок понимает только «чистые» начальное и конечное события без триггеров.
* **Объекты данных** — иконки данных, связанные со стрелками. Движок их не учитывает.
* **Второй пул и потоки сообщений** — моделируется только первый пул. Межпульное взаимодействие через сообщения не поддерживается.
* **Условия на стрелках** — текстовые условия на последовательных соединениях. Маршрут определяется только вероятностями на шлюзах, а не условиями на стрелках.

## Как упростить схему для запуска симуляции

Если ваша BPMN-схема содержит неподдерживаемые элементы, выполните следующие шаги:

1. Откройте схему в редакторе Storm BPMN.
2. Найдите подпроцессы и вынесите их содержимое на основной уровень как отдельные задачи, соединённые последовательными стрелками.
3. Удалите граничные события с задач. Если таймаут критичен для анализа, настройте политику таймаутов в секции «Политика таймаутов» на экране настройки симуляции.
4. Замените событийные и сложные шлюзы на исключающие или параллельные.
5. Уберите условия со стрелок. Если логика требует выбора пути, добавьте исключающий шлюз и задайте вероятности ветвей.
6. Удалите объекты данных и потоки сообщений между пулами. Оставьте только один пул.
7. Сохраните изменённую схему и привяжите её к симуляции.

После упрощения нажмите **«Проверить»** на экране настройки симуляции. Если проверка пройдена успешно, кнопка **«Запустить симуляцию»** станет активной.

## Частые формулировки

«поддерживаемые элементы BPMN в симуляции», «почему подпроцесс не работает в DES», «граничные события в имитационном моделировании», «ограничения BPMN для симуляции», «как упростить схему для запуска симуляции», «условия на стрелках в DES-симуляции», «второй пул в имитационном моделировании», «событийный шлюз в симуляции».