Учебный материал · OFL-1.1

Справочник BPMN 2.0

Участники

Пул (Pool)
Participant
Дорожка (Lane)
Lane

Пул

Контейнер для процесса. Участник взаимодействия. Обмен между пулами — только через потоки сообщений. Можно свернуть, скрыв детали.

Пул с дорожками: оркестровая модель
Пул как «дирижёр»: один координирующий процесс распределяет задачи между участниками
Коллаборация: два пула обмениваются сообщениями
Коллаборация: независимые пулы (покупатель и пиццерия) связаны потоками сообщений

Дорожка

Полоса внутри пула: кто выполняет задачи (должность, роль, отдел, ИТ-система).

Дорожки: распределение задач по ролям
Дорожки внутри пула «коммуналка» — задачи распределены по жильцам (Кристиан, Фалько, Роберт); XOR-шлюз выбирает, что приготовить

Действия (Activities)

Типы задач

Абстрактная
Task (None)
Ручная
Manual
Пользовательская
User Task
Отправка
Send Task
Получение
Receive Task
Скрипт
Script Task
Сервисная
Service Task
Бизнес-правило
Business Rule

Абстрактная (None Task)

Тип не указан. Используется на ранних стадиях моделирования, когда способ выполнения ещё не определён, или когда он неважен для целей диаграммы. По сути — «заглушка», которую позже уточняют до конкретного типа.

Пользовательская (User Task)

Выполняется человеком при помощи программного интерфейса: формы в CRM, экрана в веб-приложении, задачи в таск-менеджере. Ключевое отличие от ручной — человек работает внутри системы, которая отслеживает статус задачи.

Примеры: утвердить заявку в системе, заполнить анкету в форме, проверить документ в личном кабинете.

Ручная (Manual Task)

Выполняется человеком без участия BPM-движка. Система не может автоматически отследить начало и завершение этой работы.

Примеры: физически подписать документ, позвонить клиенту по телефону, провести очное совещание, доставить посылку курьером.

Сервисная (Service Task)

Автоматически выполняется программой или сервисом. Человек не участвует. Самый распространённый тип в исполняемых процессах.

Примеры: HTTP-запрос к API, запись в базу данных, вызов микросервиса, выполнение расчёта.

Задача отправки (Send Task)

Отправляет сообщение конкретному внешнему участнику (другому процессу или системе) и сразу завершается, не ожидая ответа. Принцип «выстрелил и забыл».

Примеры: отправить e-mail клиенту, опубликовать событие в очередь сообщений, отправить уведомление через webhook.

Задача получения (Receive Task)

Ожидает входящее сообщение от внешнего участника. Процесс останавливается на этой задаче до тех пор, пока сообщение не придёт.

Особый вариант — инстанцирующая (instantiated) Receive: если такая задача стоит первой в процессе, само получение сообщения порождает новый экземпляр (альтернатива стартовому событию-сообщению).

Примеры: ожидание ответа от контрагента, ожидание callback от платёжной системы, ожидание подтверждения доставки.

Скриптовая (Script Task)

Выполняет встроенный скрипт (код), определённый прямо внутри модели процесса. В отличие от сервисной, код не вызывает внешнюю систему, а работает внутри BPM-движка.

Примеры: преобразовать формат данных, вычислить дедлайн, склеить строку для письма, проверить условие.

Бизнес-правило (Business Rule Task)

Вызывает механизм принятия решений (decision engine, например DMN-таблицу). Входные данные подаются в набор правил, на выходе — решение.

Примеры: определить скидку по категории клиента, рассчитать страховой тариф, проверить заявку на соответствие политике, классифицировать обращение.
Все типы задач BPMN на одной диаграмме
Обзор всех типов задач: абстрактная, ручная, пользовательская, получения, отправки, скриптовая, сервисная, бизнес-правило

Маркеры задач

Маленькие значки в центре нижней части прямоугольника задачи. Указывают на поведение задачи, а не на её тип.

Цикл
Loop
Мн. экз. ∥
Parallel MI
Мн. экз. ≡
Sequential MI
Компенсация
Compensation
Ad-hoc ~
Ad-hoc
Подпроцесс +
Subprocess
МаркерЗначениеПример
↻ ЦиклЗадача повторяется, пока выполняется условие (один экземпляр, несколько итераций)Доработать документ → отправить → если не принят, повторить
∥ Мн. экз. параллельноЗапускается N экземпляров одновременно — по одному на элемент коллекцииОтправить уведомление всем согласующим одновременно
≡ Мн. экз. последовательноТе же N экземпляров, но один за другимПровести собеседование с каждым кандидатом по очереди
⏪ КомпенсацияЗадача-«откат»: выполняется только при вызове компенсации, чтобы отменить уже завершённое действие«Отменить бронирование» после того, как «Забронировать» уже выполнилось
~ Ad-hocЗадачи внутри подпроцесса выполняются в произвольном порядке, могут повторяться или пропускаться; стартовые/конечные события внутри запрещеныСвободный выбор шагов при консультации клиента
+ ПодпроцессСоставное действие со скрытой внутренней последовательностью; потоки не пересекают его границы«Обработка заказа» скрывает 10 внутренних шагов
Маркер цикла на задаче
Маркер цикла (↻): задача повторяется до выполнения условия
Маркер «множественные экземпляры» на задаче
Параллельные множественные экземпляры (∥): «выбрать пиццу» запускается одновременно по одному экземпляру на каждого соседа
Маркер компенсации на задаче
Маркер компенсации (⏪): задача-«откат» выполняется при отмене уже завершённого действия

Подпроцесс

Составное действие со знаком «+». Содержит собственную последовательность. Потоки не могут пересекать его границы. К границе прикрепляются промежуточные события.

Подпроцесс: скрытая сложность
Подпроцесс инкапсулирует внутреннюю последовательность — снаружи виден только знак «+»

Вызов (Call Activity)

Утолщённая рамка. Ссылается на глобальный подпроцесс (напр. «Закупка»), многократно используемый в разных процессах.

Отличие от встроенного подпроцесса: у встроенного данные доступны напрямую (общая область видимости с родителем). У Call Activity процесс отдельный — вход и выход требуют явного data mapping: что передаём при вызове, что забираем после возврата.
Call Activity: общий подпроцесс, переиспользуемый в нескольких процессах
Call Activity: один глобальный подпроцесс «Закупка артикула» (утолщённая рамка) вызывается и из «Обработки заказа», и из «Поддержания склада»

Ad-hoc подпроцесс

Маркер «~». Действия внутри — в любом порядке, могут повторяться или пропускаться. Стартовые/конечные события внутри запрещены.

Ad-hoc подпроцесс: задачи в произвольном порядке
Ad-hoc (~): задачи внутри выполняются в любом порядке и могут повторяться

Событийный подпроцесс

Пунктирная рамка внутри процесса. Запускается стартовым событием, пока родитель активен. Прерывающий — отменяет родителя. Непрерывающий — параллельно.

Событийный подпроцесс
Событийный подпроцесс (пунктирная рамка): запускается событием внутри активного родительского процесса

Шлюзы (Gateways)

Управляют ветвлением и слиянием. Шлюз — не задача! Решение принимается до шлюза.

Исключающий XOR
Или/Или
Параллельный AND
И/И
Включающий OR
Одно или более
Событийный
Event-based
Комплексный
Complex
Пустой
None

Исключающий (XOR, Exclusive Gateway)

Самый частый шлюз. При разделении активирует ровно один исходящий путь — тот, условие которого выполнено первым. Если ни одно условие не сработало, процесс завершается ошибкой (поэтому рекомендуется всегда задавать ветку «по умолчанию»). При слиянии пропускает каждый пришедший токен сразу, не дожидаясь остальных.

Аналогия: развилка на дороге, где вы едете только в одну сторону.

Примеры: «Заказ оплачен? → Да / Нет», «Сумма > 10 000? → Да / Нет».
Рекомендация: формулируйте вопрос перед шлюзом, а варианты ответа — на исходящих стрелках.
Исключающий (XOR) шлюз — пример
XOR-шлюз: «какое блюдо?» → выбор одного рецепта из нескольких (только один путь активируется)

Параллельный (AND, Parallel Gateway)

При разделении активирует все исходящие пути одновременно, безусловно — никаких проверок. При слиянии ожидает токены по всем входящим путям и только когда все собрались, пропускает один токен дальше.

Аналогия: начальник раздал задачи пяти сотрудникам и ждёт, пока все пятеро закончат.

Примеры: параллельная отправка товара и выставление счёта; одновременная проверка документов разными отделами.
Антипаттерн: не сливайте через AND ветки, которые были разделены XOR или подразумевают только одно прохождение. AND будет вечно ждать токены по всем входам — процесс зависнет (deadlock). Сливать после XOR нужно XOR-шлюзом или пустым ромбом.
Параллельный (AND) шлюз — пример
AND-шлюз: все ветки запускаются одновременно и синхронизируются на слиянии (ждём всех)

Включающий (OR, Inclusive Gateway)

Гибрид XOR и AND. При разделении активирует один или более путей в зависимости от условий — каждое условие проверяется независимо. При слиянии ожидает токены только по тем путям, которые были реально активированы (а не по всем, как AND).

Аналогия: буфет — берёте одно блюдо, два или все, но не ноль.

Примеры: клиент выбрал доставку и/или самовывоз и/или подарочную упаковку — нужно выполнить выбранные опции и дождаться завершения всех.
Осторожно: OR-шлюзы сложнее для анализа. В разветвлённых диаграммах правила синхронизации могут быть неочевидны. Не все движки поддерживают их корректно.
Включающий (OR) шлюз — пример
OR-шлюз: один или несколько путей активируются в зависимости от условий; слияние ждёт только активированные ветки

Событийный (Event-based Gateway)

Принципиально отличается от остальных: маршрутизирует не по данным, а по тому, какое событие наступит первым. После шлюза размещаются промежуточные события-ожидания (таймер, сообщение, условие, сигнал). Как только одно из них срабатывает, остальные отменяются.

Аналогия: заказали пиццу — если через 60 минут не привезли, звоните в пиццерию; если привезли раньше — едите.

Примеры: ожидание оплаты с таймером (не оплатили за 3 дня → отменить заказ); ожидание ответа клиента или наступления дедлайна.
Событийный шлюз — пример
Событийный шлюз: маршрутизация по первому наступившему событию (таймер vs. сообщение)

Комплексный (Complex Gateway)

Используется, когда логика ветвления не описывается стандартными шлюзами. Условие слияния задаётся выражением (например, «продолжить, когда 3 из 5 веток завершены» или «когда пришёл первый ответ и прошло 10 минут»).

На практике: встречается редко, не все BPM-движки его поддерживают. Если можно обойтись комбинацией XOR / AND / OR — лучше обойтись.

Пустой (None / Exclusive по умолчанию)

Ромб без маркера. Семантически эквивалентен исключающему (XOR) — стандарт BPMN разрешает опускать крестик. Некоторые методологи считают это плохой практикой, поскольку снижает читаемость: непонятно, забыл ли автор маркер или намеренно выбрал XOR.

События (Events)

Основные понятия

Событие — то, что происходит (факт), в отличие от задачи (активное действие). Круги.

Стартовое
Тонкий круг
Промежуточное
Двойной круг
Конечное
Толстый круг

Catching (незакрашенный маркер) — ожидание. Throwing (закрашенный) — генерация. Прикреплённые к границе: прерывающие (сплошной) и непрерывающие (штрих).

Сводная таблица событий

Иконки из bpmn-font (Camunda). «—» = не определено стандартом.

ТипСтартовоеПромежуточноеКонечное
ОбычноеСобыт. подпр.Непрер.ПерехватГраничноеГранич. непр.Генерация
Пустое (None)
✉ Сообщение
⏱ Таймер
⚡ Ошибка
▲ Сигнал
📋 Условие
↗ Эскалация
⬤ Завершение
⏪ Компенсация
✖ Отмена
➡ Ссылка
⬠ Множественное
➕ Паралл. множ.

Сообщение (Message)

Обмен с конкретным адресатом: письмо, звонок, HTTP, push. Доступно во всех позициях.

Событие сообщения — пример
Событие-сообщение: отправка заказа пиццы как throwing-событие запускает процесс на стороне получателя

Таймер (Timer)

Дата/время, интервал, обратный отсчёт (дедлайн). Только catching.

Таймерное событие — пример
Таймер: стартовое (запуск по расписанию), граничное прерывающее (дедлайн), граничное непрерывающее (напоминание)

Ошибка (Error)

Серьёзный сбой. Catching — только boundary. Throwing — только конечное.

Событие ошибки — пример
Граничное error-событие на подпроцессе «Закупка артикула»: при сбое поток уходит в обработчик «обработать сбой закупки», happy-path продолжается оплатой

Условие (Conditional)

Ожидание внешнего условия («духовка нагрелась»). Только catching.

Условное событие — пример
Conditional: процесс ждёт выполнения внешних условий — пока духовка не нагреется до 180°, пиццу не ставят в неё; пока пицца не готова, её не достают

Сигнал (Signal)

Широковещательная рассылка (vs. адресное сообщение). Любой подписчик реагирует.

Событие-сигнал — пример
Signal: реклама пиццы по ТВ запускает процесс через signal start; после покупки появляется аппетит (условие), и пицца съедается; signal end рассылает оценку на pizzatest.de

Завершение (Terminate)

Немедленно прекращает весь экземпляр процесса. Только конечное.

Параллельный процесс с обычными конечными событиями
Без Terminate: после AND-split токены идут параллельно. Задача 2 занимает 45 минут, задача 3 — 30 минут; экземпляр завершается через 55 минут, когда оба токена будут поглощены своими «пустыми» (none) конечными событиями.

А что если после завершения задачи 3 продолжать задачу 2 уже бессмысленно? Тогда применяют шаблон ниже:

Тот же процесс с конечным событием Terminate
С Terminate: после задачи 3 проверяется условие «задача 2 ещё нужна?». Если нет — поток уходит в Terminate-событие, которое мгновенно поглощает все оставшиеся токены экземпляра (включая ещё выполняющуюся задачу 2). Terminate возможен только как конечное событие.
Событие-ссылка — пример
Link-событие: «телепорт» — throwing выбрасывает поток, catching подхватывает, заменяя длинную пересекающую стрелку

Компенсация (Compensation)

Отмена ранее выполненного действия. Компенсирующая задача — через ассоциацию.

Событие компенсации — пример
Компенсация: при отмене уже завершённого действия вызываются задачи-«откаты» (например, отменить бронирование рейса)

Эскалация (Escalation)

От подпроцесса к родителю, не являющаяся ошибкой. Может быть непрерывающей.

Событие эскалации — пример
Escalation: подпроцесс «Доставка» бросает «опоздание», родитель ловит непрерывающим граничным escalation и параллельно уведомляет клиента — основной поток продолжается

Отмена (Cancel)

Только в контексте транзакций. Конечное — откат. Boundary — перехват.

Данные, артефакты, потоки

Объект данных
Data Object
Хранилище
Data Store
Вход данных
Data Input
Выход данных
Data Output
Аннотация
Text Annotation
Группа
Group
Поток
Sequence Flow
Поток сообщ.
Message Flow
Условный
Conditional Flow
По умолч.
Default Flow
Транзакция
Transaction

Объект данных (Data Object)

«Лист бумаги» с загнутым уголком. Представляет информацию, которая создаётся, потребляется или передаётся между задачами в рамках экземпляра процесса. Существует только пока живёт экземпляр.

Примеры: заявка клиента, черновик договора, отчёт, который собирается по ходу процесса.

Хранилище данных (Data Store)

Цилиндр. Постоянное хранение, переживающее экземпляр процесса: база данных, реестр, файловое хранилище. К нему обращаются задачи на чтение/запись.

Примеры: CRM, ERP, БД заказов, архив документов.

Вход / Выход данных (Data Input / Output)

Параметры процесса или подпроцесса на его границе. Вход — то, что подаётся извне; выход — то, что возвращается. Стрелка с незакрашенным/закрашенным треугольником.

Примеры: на входе подпроцесса «Закупка» — список позиций; на выходе — накладная.

Текстовая аннотация (Text Annotation)

Комментарий, прикреплённый пунктирной линией к любому элементу. Не влияет на исполнение — нужен только читателю диаграммы для пояснений.

Группа (Group)

Пунктирный прямоугольник с закруглёнными углами. Визуальная группировка элементов (например, «все задачи по логистике»). Не имеет семантики исполнения, потоки могут свободно пересекать его границы.

Поток управления (Sequence Flow)

Сплошная стрелка с закрашенным наконечником. Задаёт порядок выполнения внутри одного пула. Не может пересекать границы пула.

Условный поток (с маленьким ромбом у источника) — срабатывает, только если условие истинно. Применяется на исходящих стрелках задач без шлюза.

Поток по умолчанию (со штрихом у источника) — запасной путь у XOR/OR-шлюза или условной развилки, активируется, если ни одно из условий не выполнилось.

Поток сообщений (Message Flow)

Пунктирная стрелка с незакрашенным наконечником. Соединяет разные пулы — передача сообщения между независимыми участниками. Внутри одного пула не используется.

Примеры: покупатель отправляет заказ пиццерии; банк присылает подтверждение оплаты.

Транзакция (Transaction)

Подпроцесс с двойной рамкой. Работает по ACID-семантике: либо все внутренние действия успешно подтверждаются, либо вся транзакция откатывается через Cancel-событие (с компенсациями). Для согласованности распределённых операций.

Примеры: бронирование пакета «авиабилет + отель + авто» — если хоть что-то сорвалось, отменяем всё.

Готовы попробовать?

Создайте первую BPMN-схему бесплатно — без регистрации и карты.

Начать генерацию BPMN-блок-схемы с помощью ИИ
Примеры адаптированы из camunda.com. Подготовлено BP1.AI.