Контейнер для процесса. Участник взаимодействия. Обмен между пулами — только через потоки сообщений. Можно свернуть, скрыв детали.
Полоса внутри пула: кто выполняет задачи (должность, роль, отдел, ИТ-система).
Тип не указан. Используется на ранних стадиях моделирования, когда способ выполнения ещё не определён, или когда он неважен для целей диаграммы. По сути — «заглушка», которую позже уточняют до конкретного типа.
Выполняется человеком при помощи программного интерфейса: формы в CRM, экрана в веб-приложении, задачи в таск-менеджере. Ключевое отличие от ручной — человек работает внутри системы, которая отслеживает статус задачи.
Выполняется человеком без участия BPM-движка. Система не может автоматически отследить начало и завершение этой работы.
Автоматически выполняется программой или сервисом. Человек не участвует. Самый распространённый тип в исполняемых процессах.
Отправляет сообщение конкретному внешнему участнику (другому процессу или системе) и сразу завершается, не ожидая ответа. Принцип «выстрелил и забыл».
Ожидает входящее сообщение от внешнего участника. Процесс останавливается на этой задаче до тех пор, пока сообщение не придёт.
Особый вариант — инстанцирующая (instantiated) Receive: если такая задача стоит первой в процессе, само получение сообщения порождает новый экземпляр (альтернатива стартовому событию-сообщению).
Выполняет встроенный скрипт (код), определённый прямо внутри модели процесса. В отличие от сервисной, код не вызывает внешнюю систему, а работает внутри BPM-движка.
Вызывает механизм принятия решений (decision engine, например DMN-таблицу). Входные данные подаются в набор правил, на выходе — решение.
Маленькие значки в центре нижней части прямоугольника задачи. Указывают на поведение задачи, а не на её тип.
| Маркер | Значение | Пример |
|---|---|---|
| ↻ Цикл | Задача повторяется, пока выполняется условие (один экземпляр, несколько итераций) | Доработать документ → отправить → если не принят, повторить |
| ∥ Мн. экз. параллельно | Запускается N экземпляров одновременно — по одному на элемент коллекции | Отправить уведомление всем согласующим одновременно |
| ≡ Мн. экз. последовательно | Те же N экземпляров, но один за другим | Провести собеседование с каждым кандидатом по очереди |
| ⏪ Компенсация | Задача-«откат»: выполняется только при вызове компенсации, чтобы отменить уже завершённое действие | «Отменить бронирование» после того, как «Забронировать» уже выполнилось |
| ~ Ad-hoc | Задачи внутри подпроцесса выполняются в произвольном порядке, могут повторяться или пропускаться; стартовые/конечные события внутри запрещены | Свободный выбор шагов при консультации клиента |
| + Подпроцесс | Составное действие со скрытой внутренней последовательностью; потоки не пересекают его границы | «Обработка заказа» скрывает 10 внутренних шагов |
Составное действие со знаком «+». Содержит собственную последовательность. Потоки не могут пересекать его границы. К границе прикрепляются промежуточные события.
Утолщённая рамка. Ссылается на глобальный подпроцесс (напр. «Закупка»), многократно используемый в разных процессах.
Маркер «~». Действия внутри — в любом порядке, могут повторяться или пропускаться. Стартовые/конечные события внутри запрещены.
Пунктирная рамка внутри процесса. Запускается стартовым событием, пока родитель активен. Прерывающий — отменяет родителя. Непрерывающий — параллельно.
Управляют ветвлением и слиянием. Шлюз — не задача! Решение принимается до шлюза.
Самый частый шлюз. При разделении активирует ровно один исходящий путь — тот, условие которого выполнено первым. Если ни одно условие не сработало, процесс завершается ошибкой (поэтому рекомендуется всегда задавать ветку «по умолчанию»). При слиянии пропускает каждый пришедший токен сразу, не дожидаясь остальных.
Аналогия: развилка на дороге, где вы едете только в одну сторону.
При разделении активирует все исходящие пути одновременно, безусловно — никаких проверок. При слиянии ожидает токены по всем входящим путям и только когда все собрались, пропускает один токен дальше.
Аналогия: начальник раздал задачи пяти сотрудникам и ждёт, пока все пятеро закончат.
Гибрид XOR и AND. При разделении активирует один или более путей в зависимости от условий — каждое условие проверяется независимо. При слиянии ожидает токены только по тем путям, которые были реально активированы (а не по всем, как AND).
Аналогия: буфет — берёте одно блюдо, два или все, но не ноль.
Принципиально отличается от остальных: маршрутизирует не по данным, а по тому, какое событие наступит первым. После шлюза размещаются промежуточные события-ожидания (таймер, сообщение, условие, сигнал). Как только одно из них срабатывает, остальные отменяются.
Аналогия: заказали пиццу — если через 60 минут не привезли, звоните в пиццерию; если привезли раньше — едите.
Используется, когда логика ветвления не описывается стандартными шлюзами. Условие слияния задаётся выражением (например, «продолжить, когда 3 из 5 веток завершены» или «когда пришёл первый ответ и прошло 10 минут»).
Ромб без маркера. Семантически эквивалентен исключающему (XOR) — стандарт BPMN разрешает опускать крестик. Некоторые методологи считают это плохой практикой, поскольку снижает читаемость: непонятно, забыл ли автор маркер или намеренно выбрал XOR.
Событие — то, что происходит (факт), в отличие от задачи (активное действие). Круги.
Catching (незакрашенный маркер) — ожидание. Throwing (закрашенный) — генерация. Прикреплённые к границе: прерывающие (сплошной) и непрерывающие (штрих).
Иконки из bpmn-font (Camunda). «—» = не определено стандартом.
| Тип | Стартовое | Промежуточное | Конечное | |||||
|---|---|---|---|---|---|---|---|---|
| Обычное | Событ. подпр. | Непрер. | Перехват | Граничное | Гранич. непр. | Генерация | ||
| Пустое (None) | — | — | — | — | — | |||
| ✉ Сообщение | ||||||||
| ⏱ Таймер | — | — | ||||||
| ⚡ Ошибка | — | — | — | — | — | |||
| ▲ Сигнал | ||||||||
| 📋 Условие | — | — | ||||||
| ↗ Эскалация | — | — | ||||||
| ⬤ Завершение | — | — | — | — | — | — | — | |
| ⏪ Компенсация | — | — | — | — | ||||
| ✖ Отмена | — | — | — | — | — | — | ||
| ➡ Ссылка | — | — | — | — | — | — | ||
| ⬠ Множественное | ||||||||
| ➕ Паралл. множ. | — | — | ||||||
Обмен с конкретным адресатом: письмо, звонок, HTTP, push. Доступно во всех позициях.
Дата/время, интервал, обратный отсчёт (дедлайн). Только catching.
Серьёзный сбой. Catching — только boundary. Throwing — только конечное.
Ожидание внешнего условия («духовка нагрелась»). Только catching.
Широковещательная рассылка (vs. адресное сообщение). Любой подписчик реагирует.
Немедленно прекращает весь экземпляр процесса. Только конечное.
А что если после завершения задачи 3 продолжать задачу 2 уже бессмысленно? Тогда применяют шаблон ниже:
«Телепорт» потока. Парные throw + catch заменяют длинную стрелку. Только промежуточное.
Отмена ранее выполненного действия. Компенсирующая задача — через ассоциацию.
От подпроцесса к родителю, не являющаяся ошибкой. Может быть непрерывающей.
Только в контексте транзакций. Конечное — откат. Boundary — перехват.
«Лист бумаги» с загнутым уголком. Представляет информацию, которая создаётся, потребляется или передаётся между задачами в рамках экземпляра процесса. Существует только пока живёт экземпляр.
Цилиндр. Постоянное хранение, переживающее экземпляр процесса: база данных, реестр, файловое хранилище. К нему обращаются задачи на чтение/запись.
Параметры процесса или подпроцесса на его границе. Вход — то, что подаётся извне; выход — то, что возвращается. Стрелка с незакрашенным/закрашенным треугольником.
Комментарий, прикреплённый пунктирной линией к любому элементу. Не влияет на исполнение — нужен только читателю диаграммы для пояснений.
Пунктирный прямоугольник с закруглёнными углами. Визуальная группировка элементов (например, «все задачи по логистике»). Не имеет семантики исполнения, потоки могут свободно пересекать его границы.
Сплошная стрелка с закрашенным наконечником. Задаёт порядок выполнения внутри одного пула. Не может пересекать границы пула.
Условный поток (с маленьким ромбом у источника) — срабатывает, только если условие истинно. Применяется на исходящих стрелках задач без шлюза.
Поток по умолчанию (со штрихом у источника) — запасной путь у XOR/OR-шлюза или условной развилки, активируется, если ни одно из условий не выполнилось.
Пунктирная стрелка с незакрашенным наконечником. Соединяет разные пулы — передача сообщения между независимыми участниками. Внутри одного пула не используется.
Подпроцесс с двойной рамкой. Работает по ACID-семантике: либо все внутренние действия успешно подтверждаются, либо вся транзакция откатывается через Cancel-событие (с компенсациями). Для согласованности распределённых операций.
Создайте первую BPMN-схему бесплатно — без регистрации и карты.
Начать генерацию BPMN-блок-схемы с помощью ИИ