Если 06.02.01 Потоки, шлюзы, события определяют динамику процесса — как и в каком порядке движется работа, — то пулы, дорожки и артефакты задают организационный и информационный контекст: кто выполняет работу и какие документы и данные при этом участвуют. Без этого слоя диаграмма остаётся блок-схемой одного исполнителя; с ним — модель совместного процесса с границами ответственности и трассируемостью данных.
1. Суть темы
Эта заметка — углубление ветки 06.02 по организационному и информационному слою BPMN. Обзор нотации и виды задач — в 03.04.01 BPMN 2.0 - введение и основы (ветка SA «описание бизнес-процессов»); если вы уже прошли 03.04, здесь — детали пулов, дорожек, артефактов и типовые ошибки компоновки. Если заходите только через 06.02 — сначала 03.04.01, затем 06.02.01 Потоки, шлюзы, события, затем эта заметка.
BPMN различает два уровня диаграммы, и пулы с дорожками ведут себя на них по-разному:
| Тип диаграммы | Что моделируется | Пулы | Дорожки |
|---|---|---|---|
| Диаграмма процесса (Process Diagram) | Один процесс внутри одного участника | Ровно один пул (явный или неявный) | Роли и подразделения внутри этого участника |
| Диаграмма взаимодействия (Collaboration Diagram) | Несколько участников и обмен между ними | Несколько пулов; каждый процесс — ровно в одном пуле | Дорожки внутри каждого пула по необходимости |
Правило «каждый процесс обязан находиться ровно в одном пуле» и «между пулами только потоки сообщений» относится к collaboration. На диаграмме процесса с одним пулом и дорожками «Отдел A / Отдел B / CRM» вы моделируете передачу работы внутри одной организации через sequence flow, пересекающий границы дорожек — без message flow.
Пул (Pool) — участник процесса: организация, юридическое лицо, автономная система или внешний актор верхнего уровня. Дорожка (Lane) — роль, должность, подразделение или система-исполнитель внутри одного пула. Артефакты (Artifacts) — объекты данных, хранилища, группы и аннотации; они не двигают токен, но документируют информационный контекст.
Когда нужен только протокол обмена между участниками без детализации процессов внутри пулов, используют диаграмму хореографии (Choreography Diagram) — см. 06.02.03 Типовые паттерны BPMN. Collaboration с white box избыточен, если внутренние шаги партнёров не важны.
Аналогия «чёрного ящика» пула близка к внешнему актору на 03.01.02 Моделирование контекста системы (Context Diagram): внутреннее устройство участника нас не интересует, важны только сообщения на границе.
2. Ключевые понятия
2.1 Пулы (Pools)
Пул — контейнер для процесса участника. Графически это большой прямоугольник; имя пула размещается вдоль границы.
Participant и Pool. В XML-модели BPMN на collaboration Participant — логический участник (модельный элемент с именем и ссылкой на процесс); Pool — его графическое представление на диаграмме. На process diagram participant может быть не нарисован — пул неявный. При импорте в Camunda или валидации XSD «pool» и «participant» не синонимы: у participant может быть пустой processRef (участник без детализированного процесса), а pool на рисунке всё равно показывает его границу.
| Вид | Описание | Пример |
|---|---|---|
| «Белый ящик» (white box) | Внутри пула показан процесс: события, задачи, шлюзы, sequence flow. | Пул «Интернет-магазин» с детальным процессом обработки заказа. |
| «Чёрный ящик» (black box) | Графическая договорённость: внутри пула нет элементов процесса. Message flow идёт к границе пула или к событию/активности на границе. | Пул «Платёжная система»: отправляем запрос, получаем ответ; внутренняя логика вне фокуса модели. |
| Пул без процесса | Модельный случай: participant на collaboration без processRef (или с пустым процессом) — партнёр присутствует, но его внутренний поток не моделируется. Визуально совпадает с black box, но отличие в XML: есть participant, нет привязанного process. | Пул «Банк-эквайер» только с message flow к границе; legacy-система как контрагент без BPMN-процесса. |
Правила пулов на collaboration:
- Элементы одного процесса нельзя размещать в разных пулах.
- Между пулами — только потоки сообщений (Message Flow): пунктир с пустой стрелкой. Sequence flow не пересекает границу пула.
- На одной collaboration может быть несколько процессов — по одному (или ни одного) в каждом пуле. Это не «один процесс, разрезанный на пулы».
Потоки сообщений (кратко; семантика send/receive и message events — в 06.02.01 Потоки, шлюзы, события):
- Соединяют разные пулы (или пул с внешним участником).
- Message в BPMN — элемент данных сообщения; Message Flow — линия передачи. Имеет смысл именовать сообщение (message name) для интеграционного анализа — см. 03.01.04 Интерфейсы и интеграционные взаимодействия.
- Пунктир внутри одного пула — это не message flow, а ошибка моделирования (для порядка шагов — sequence flow).
Точки крепления message flow (типовой паттерн на ревью):
| Конец линии | Допустимые якоря |
|---|---|
| У отправителя | Send Task, Message Intermediate Throw Event, Message End Event; для black box — граница пула |
| У получателя | Receive Task, Message Start Event, Message Intermediate Catch Event; для black box — граница пула |
Линия не «висит в воздухе» между пулами: каждый конец привязан к активности, событию или контуру пула. Задачи Send/Receive и message throw/catch — в 06.02.01 Потоки, шлюзы, события; здесь фиксируем где на границе участника они должны стоять.
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_pools_box" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.0.0">
<bpmn:collaboration id="Collaboration_pools_box"><bpmn:participant id="bb_buyer" name="Покупатель" /><bpmn:participant id="wb_shop" name="Магазин" processRef="process_wb" /><bpmn:messageFlow id="Message_0" name="Заказ" sourceRef="bb_buyer" targetRef="wb_recv" /><bpmn:messageFlow id="Message_1" name="Доставка" sourceRef="wb_send" targetRef="bb_buyer" /></bpmn:collaboration>
<bpmn:process id="process_wb" name="Магазин" isExecutable="false"><bpmn:laneSet id="LaneSet_wb_shop"><bpmn:lane id="wb_sales" name="1. Продажи"><bpmn:flowNodeRef>wb_recv</bpmn:flowNodeRef><bpmn:flowNodeRef>wb_check</bpmn:flowNodeRef></bpmn:lane><bpmn:lane id="wb_wh" name="2. Склад"><bpmn:flowNodeRef>wb_pack</bpmn:flowNodeRef><bpmn:flowNodeRef>wb_send</bpmn:flowNodeRef></bpmn:lane></bpmn:laneSet><bpmn:receiveTask id="wb_recv" name="1.1 Получить заказ"><bpmn:outgoing>Flow_0</bpmn:outgoing></bpmn:receiveTask><bpmn:serviceTask id="wb_check" name="1.2 Проверить наличие"><bpmn:incoming>Flow_0</bpmn:incoming><bpmn:outgoing>Flow_1</bpmn:outgoing></bpmn:serviceTask><bpmn:manualTask id="wb_pack" name="2.1 Упаковать"><bpmn:incoming>Flow_1</bpmn:incoming><bpmn:outgoing>Flow_2</bpmn:outgoing></bpmn:manualTask><bpmn:sendTask id="wb_send" name="2.2 Сообщить о доставке"><bpmn:incoming>Flow_2</bpmn:incoming></bpmn:sendTask><bpmn:sequenceFlow id="Flow_0" sourceRef="wb_recv" targetRef="wb_check" /><bpmn:sequenceFlow id="Flow_1" sourceRef="wb_check" targetRef="wb_pack" /><bpmn:sequenceFlow id="Flow_2" sourceRef="wb_pack" targetRef="wb_send" /></bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_pools_box">
<bpmndi:BPMNPlane id="BPMNPlane_pools_box" bpmnElement="Collaboration_pools_box">
<bpmndi:BPMNShape id="bb_buyer_di" bpmnElement="bb_buyer" isHorizontal="true"><dc:Bounds x="80" y="40" width="1086" height="120" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="wb_shop_di" bpmnElement="wb_shop" isHorizontal="true"><dc:Bounds x="80" y="250" width="1086" height="332" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="wb_sales_di" bpmnElement="wb_sales" isHorizontal="true"><dc:Bounds x="110" y="250" width="1056" height="166" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="wb_wh_di" bpmnElement="wb_wh" isHorizontal="true"><dc:Bounds x="110" y="416" width="1056" height="166" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="wb_recv_di" bpmnElement="wb_recv"><dc:Bounds x="146" y="296" width="180" height="80" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="wb_check_di" bpmnElement="wb_check"><dc:Bounds x="410" y="296" width="180" height="80" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="wb_pack_di" bpmnElement="wb_pack"><dc:Bounds x="674" y="462" width="180" height="80" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="wb_send_di" bpmnElement="wb_send"><dc:Bounds x="938" y="462" width="180" height="80" /></bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0_di" bpmnElement="Flow_0"><di:waypoint x="326" y="336" /><di:waypoint x="410" y="336" /></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1_di" bpmnElement="Flow_1"><di:waypoint x="590" y="336" /><di:waypoint x="764" y="336" /><di:waypoint x="764" y="462" /></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_2_di" bpmnElement="Flow_2"><di:waypoint x="854" y="502" /><di:waypoint x="938" y="502" /></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Message_0_di" bpmnElement="Message_0"><di:waypoint x="623" y="160" /><di:waypoint x="623" y="196" /><di:waypoint x="236" y="196" /><di:waypoint x="236" y="296" /><bpmndi:BPMNLabel><dc:Bounds x="631" y="171" width="40" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Message_1_di" bpmnElement="Message_1"><di:waypoint x="1028" y="462" /><di:waypoint x="1028" y="196" /><di:waypoint x="1028" y="160" /><bpmndi:BPMNLabel><dc:Bounds x="1036" y="322" width="59" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
У «Покупателя» нет процесса: это participant без
processRef. Message flow «Заказ» приходит на receive task магазина, ответ «Доставка» крепится к границе чёрного ящика. Внутри магазина — только sequence flow.
2.2 Дорожки (Lanes)
Дорожка — логический раздел внутри одного пула: конкретная роль, должность, подразделение или система, выполняющая часть работ.
Виды представления:
- Горизонтальные — классический вид; каждая дорожка на всю ширину пула.
- Вертикальные — та же семантика, другая ориентация; удобно для длинных процессов и печати в Confluence.
- Вложенные — дорожка внутри дорожки (отдел → группа → исполнитель). Задача лежит в самой глубокой дорожке того исполнителя, который её выполняет; ответственность наследуется от родительской дорожки.
Правила дорожек:
- Дорожки существуют только внутри пула.
- Задача и подпроцесс размещаются в дорожке исполнителя — того, кто реально выполняет действие, а не того, кто инициировал передачу.
- Sequence flow свободно пересекает границы дорожек внутри одного пула — это передача работы между ролями, не межорганизационный обмен.
- Пул без явного lane set в инструментах трактуется как один неявный процесс в одной «неименованной» дорожке; для нескольких ролей lane set лучше задавать явно.
Именуйте дорожки по роли или системе («Менеджер по продажам», «CRM»), а не по ФИО сотрудника. Участники процесса как стейкholders — 02.01.03 Анализ заинтересованных сторон (Stakeholder Map).
Дорожка задаёт организационную ответственность на диаграмме, но не назначает автоматически исполнителя в BPMN-движке (candidate groups, assignment) — это настраивается отдельно; см. 06.02.04 Работа с Camunda.
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_lanes_shop" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.0.0">
<bpmn:collaboration id="Collaboration_lanes_shop"><bpmn:participant id="lane_shop" name="Магазин" processRef="process_lanes" /></bpmn:collaboration>
<bpmn:process id="process_lanes" name="Магазин" isExecutable="false"><bpmn:laneSet id="LaneSet_lane_shop"><bpmn:lane id="sales" name="1. Продажи"><bpmn:flowNodeRef>l_req</bpmn:flowNodeRef><bpmn:flowNodeRef>l_bill</bpmn:flowNodeRef></bpmn:lane><bpmn:lane id="floor" name="2. Склад"><bpmn:flowNodeRef>l_pick</bpmn:flowNodeRef><bpmn:flowNodeRef>l_hand</bpmn:flowNodeRef></bpmn:lane></bpmn:laneSet><bpmn:userTask id="l_req" name="1.1 Обработать заявку"><bpmn:outgoing>Flow_0</bpmn:outgoing></bpmn:userTask><bpmn:serviceTask id="l_bill" name="1.2 Выставить счёт"><bpmn:incoming>Flow_0</bpmn:incoming><bpmn:outgoing>Flow_1</bpmn:outgoing></bpmn:serviceTask><bpmn:manualTask id="l_pick" name="2.1 Собрать товар"><bpmn:incoming>Flow_1</bpmn:incoming><bpmn:outgoing>Flow_2</bpmn:outgoing></bpmn:manualTask><bpmn:sendTask id="l_hand" name="2.2 Передать в доставку"><bpmn:incoming>Flow_2</bpmn:incoming></bpmn:sendTask><bpmn:sequenceFlow id="Flow_0" sourceRef="l_req" targetRef="l_bill" /><bpmn:sequenceFlow id="Flow_1" sourceRef="l_bill" targetRef="l_pick" /><bpmn:sequenceFlow id="Flow_2" sourceRef="l_pick" targetRef="l_hand" /></bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_lanes_shop">
<bpmndi:BPMNPlane id="BPMNPlane_lanes_shop" bpmnElement="Collaboration_lanes_shop">
<bpmndi:BPMNShape id="lane_shop_di" bpmnElement="lane_shop" isHorizontal="true"><dc:Bounds x="80" y="40" width="1086" height="332" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sales_di" bpmnElement="sales" isHorizontal="true"><dc:Bounds x="110" y="40" width="1056" height="166" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="floor_di" bpmnElement="floor" isHorizontal="true"><dc:Bounds x="110" y="206" width="1056" height="166" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="l_req_di" bpmnElement="l_req"><dc:Bounds x="146" y="86" width="180" height="80" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="l_bill_di" bpmnElement="l_bill"><dc:Bounds x="410" y="86" width="180" height="80" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="l_pick_di" bpmnElement="l_pick"><dc:Bounds x="674" y="252" width="180" height="80" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="l_hand_di" bpmnElement="l_hand"><dc:Bounds x="938" y="252" width="180" height="80" /></bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0_di" bpmnElement="Flow_0"><di:waypoint x="326" y="126" /><di:waypoint x="410" y="126" /></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1_di" bpmnElement="Flow_1"><di:waypoint x="590" y="126" /><di:waypoint x="764" y="126" /><di:waypoint x="764" y="252" /></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_2_di" bpmnElement="Flow_2"><di:waypoint x="854" y="292" /><di:waypoint x="938" y="292" /></bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
Дорожки «Продажи» и «Склад» внутри одного пула. Sequence flow переходит от продаж к складу без message flow.
2.3 Артефакты (Artifacts)
Артефакты дают дополнительную информацию и не влияют на поток управления и сообщений.
Объекты данных (Data Objects)
Информация, которую задачи читают, создают или изменяют. Изображение — прямоугольник с загнутым углом (лист).
- Data Object — именованный объект («Заказ», «Счёт-фактура»).
- Data Input / Data Output — явное направление данных в/из задачи (маркер на границе задачи + ассоциация).
- Collection — маркер «три линии» снизу; набор однотипных объектов («Список заказов»).
Data Input/Output vs ассоциация к Data Object: для аналитической диаграммы и ревью достаточно dotted association от Data Object к задаче — читатель видит, какой документ участвует в шаге. Data Input/Output имеет смысл, когда нужна явная семантика «вход/выход» задачи: исполняемая модель, формальная спецификация I/O, экспорт в движок с привязкой data mapping. На эскизе процесса для стейкholders — association; на диаграмме для разработки и Camunda — I/O при необходимости.
Семантику имён объектов фиксируйте в 03.03.03 Словарь данных (описание) и 10.01.14 Шаблон глоссария и словаря данных; аналогия с потоками на DFD — 03.04.02 Диаграмма потоков данных (DFD).
Хранилище данных (Data Store)
Отдельный тип артефакта, не подвид Data Object. Цилиндр на диаграмме; показывает, где данные сохраняются между экземплярами процесса (БД, реестр, файловое хранилище). Связь с задачами — через ассоциацию «чтение/запись», без движения токена.
Группы (Groups)
Пунктирный прямоугольник с закруглёнными углами объединяет элементы визуально — для фазы, зоны согласования, scope анализа. Группа не создаёт scope для потока: токен не «знает» о границе группы. Для инкапсуляции логики используйте подпроцесс или транзакцию, а не группу.
Текстовые аннотации (Text Annotations)
Прямоугольник с открытой левой стороной, связанный ассоциацией с любым элементом. Пояснения, примеры, бизнес-правила на диаграмме.
В XML-модели BPMN также есть элемент Documentation — машиночитаемое описание процесса или элемента; на печатной диаграмме его часто дублируют text annotation для читателя.
Ассоциации (Associations)
Пунктирная линия (с открытой стрелкой при необходимости) связывает артефакт с задачей, событием, шлюзом или message flow.
| Связь | Допустимо? | Когда использовать |
|---|---|---|
| Data Object ↔ задача | Да | Документ/данные у шага; достаточно для большинства аналитических диаграмм |
| Data Input/Output ↔ задача | Да | Явный вход/выход; исполняемая модель, формальный I/O |
| Data Object ↔ message flow | Да | Какое содержимое передаётся между пулами |
| Data Object ↔ sequence flow | Нет | Sequence flow не несёт данных |
| Annotation ↔ любой элемент | Да | Пояснения без влияния на поток |
Для трассировки требований документируйте: имя объекта данных, связанные задачи, при межпульном обмене — имя сообщения и связанный data object; см. 02.03.04 Трассировка требований (концепция).
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_artifacts" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.0.0">
<bpmn:collaboration id="Collaboration_artifacts"><bpmn:participant id="art_shop" name="Магазин" processRef="process_art" /></bpmn:collaboration>
<bpmn:process id="process_art" name="Магазин" isExecutable="false"><bpmn:laneSet id="LaneSet_art_shop"><bpmn:lane id="art" name="1. Исполнение"><bpmn:flowNodeRef>a_make</bpmn:flowNodeRef><bpmn:flowNodeRef>a_pay</bpmn:flowNodeRef><bpmn:flowNodeRef>a_pack</bpmn:flowNodeRef><bpmn:flowNodeRef>a_send</bpmn:flowNodeRef></bpmn:lane></bpmn:laneSet><bpmn:dataObject id="a_doc_obj" /><bpmn:dataObject id="a_track_obj" /><bpmn:userTask id="a_make" name="1.1 Оформить заказ"><bpmn:outgoing>Flow_0</bpmn:outgoing></bpmn:userTask><bpmn:serviceTask id="a_pay" name="1.2 Проверить оплату"><bpmn:incoming>Flow_0</bpmn:incoming><bpmn:outgoing>Flow_1</bpmn:outgoing></bpmn:serviceTask><bpmn:manualTask id="a_pack" name="1.3 Упаковать"><bpmn:incoming>Flow_1</bpmn:incoming><bpmn:outgoing>Flow_2</bpmn:outgoing></bpmn:manualTask><bpmn:sendTask id="a_send" name="1.4 Отправить"><bpmn:incoming>Flow_2</bpmn:incoming></bpmn:sendTask><bpmn:dataObjectReference id="a_doc" name="Заказ" dataObjectRef="a_doc_obj" /><bpmn:dataObjectReference id="a_track" name="Трек-номер" dataObjectRef="a_track_obj" /><bpmn:dataStoreReference id="a_store" name="Реестр заказов" /><bpmn:textAnnotation id="a_note"><bpmn:text>Клиент заполняет форму на сайте</bpmn:text></bpmn:textAnnotation><bpmn:sequenceFlow id="Flow_0" sourceRef="a_make" targetRef="a_pay" /><bpmn:sequenceFlow id="Flow_1" sourceRef="a_pay" targetRef="a_pack" /><bpmn:sequenceFlow id="Flow_2" sourceRef="a_pack" targetRef="a_send" /><bpmn:association id="Assoc_0" sourceRef="a_make" targetRef="a_doc" associationDirection="None" /><bpmn:association id="Assoc_1" sourceRef="a_send" targetRef="a_track" associationDirection="None" /><bpmn:association id="Assoc_2" sourceRef="a_pay" targetRef="a_store" associationDirection="None" /><bpmn:association id="Assoc_3" sourceRef="a_note" targetRef="a_make" associationDirection="None" /></bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_artifacts">
<bpmndi:BPMNPlane id="BPMNPlane_artifacts" bpmnElement="Collaboration_artifacts">
<bpmndi:BPMNShape id="art_shop_di" bpmnElement="art_shop" isHorizontal="true"><dc:Bounds x="80" y="40" width="1086" height="310" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="art_di" bpmnElement="art" isHorizontal="true"><dc:Bounds x="110" y="40" width="1056" height="310" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="a_make_di" bpmnElement="a_make"><dc:Bounds x="146" y="126" width="180" height="80" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="a_pay_di" bpmnElement="a_pay"><dc:Bounds x="410" y="126" width="180" height="80" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="a_pack_di" bpmnElement="a_pack"><dc:Bounds x="674" y="126" width="180" height="80" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="a_send_di" bpmnElement="a_send"><dc:Bounds x="938" y="126" width="180" height="80" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="a_doc_di" bpmnElement="a_doc"><dc:Bounds x="218" y="48" width="36" height="50" /><bpmndi:BPMNLabel><dc:Bounds x="216" y="106" width="40" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="a_track_di" bpmnElement="a_track"><dc:Bounds x="1010" y="48" width="36" height="50" /><bpmndi:BPMNLabel><dc:Bounds x="992" y="106" width="72" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="a_store_di" bpmnElement="a_store"><dc:Bounds x="418" y="234" width="50" height="50" /><bpmndi:BPMNLabel><dc:Bounds x="394" y="292" width="98" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="a_note_di" bpmnElement="a_note"><dc:Bounds x="146" y="234" width="120" height="44" /></bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0_di" bpmnElement="Flow_0"><di:waypoint x="326" y="166" /><di:waypoint x="410" y="166" /></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1_di" bpmnElement="Flow_1"><di:waypoint x="590" y="166" /><di:waypoint x="674" y="166" /></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_2_di" bpmnElement="Flow_2"><di:waypoint x="854" y="166" /><di:waypoint x="938" y="166" /></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Assoc_0_di" bpmnElement="Assoc_0"><di:waypoint x="236" y="126" /><di:waypoint x="236" y="98" /></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Assoc_1_di" bpmnElement="Assoc_1"><di:waypoint x="1028" y="126" /><di:waypoint x="1028" y="98" /></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Assoc_2_di" bpmnElement="Assoc_2"><di:waypoint x="410" y="166" /><di:waypoint x="443" y="166" /><di:waypoint x="443" y="234" /></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Assoc_3_di" bpmnElement="Assoc_3"><di:waypoint x="266" y="256" /><di:waypoint x="236" y="256" /><di:waypoint x="236" y="206" /></bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
3. Как применяется в работе аналитика
3.1 Выбор: один пул с дорожками или несколько пулов
| Вопрос | Решение |
|---|---|
| Участники — разные юрлица или автономные контрагенты? | Отдельные пулы + message flow |
| Нужна только наша детализация, партнёр — «чёрный ящик»? | Наш процесс в white box; партнёр — black box / пул без процесса |
| Все роли в одной организации, общий процесс? | Один пул, дорожки по ролям/отделам |
| Интеграция с внешней системой — только обмен сообщениями, без видимости её процесса? | Система — отдельный пул (black box) |
| Система внутри нашего контура, задачи CRM видны на той же диаграмме? | Дорожка «CRM» внутри нашего пула |
Пул на collaboration часто совпадает с границей scope участника — см. 02.01.04 Определение границ решения (Scope Modelling).
Типичная ошибка — два отдела одной компании оформить двумя пулами «Отдел A» и «Отдел B». Правильнее: один пул «Компания», две дорожки; sequence flow между ними.
3.2 Система как исполнитель: пул или дорожка?
| Критерий | Дорожка «Система X» | Отдельный пул «Система X» |
|---|---|---|
| Система принадлежит той же организации, процесс детализирован | ✓ | |
| Система — внешний SaaS / партнёр, виден только интерфейс | ✓ (black box) | |
| Нужно показать внутренний процесс системы | ✓ (white box, отдельный процесс в пуле) | |
| Автоматическая задача (service task) в нашем процессе | ✓ |
3.3 Практика построения диаграммы
- Определите тип диаграммы: один участник → process; несколько → collaboration.
- Назначьте пулы по границам ответственности и юридическим/интеграционным границам, не по orgchart «для красоты».
- Внутри пула разложите задачи по дорожкам исполнителей.
- Между пулами проведите message flow; крепите к send/receive, message events или границе black box; подпишите сообщения и при необходимости ассоциируйте data objects.
- Добавьте артефакты для документов, без которых шаг не примут на ревью или в тестировании.
Шаблон описания сквозного процесса с пулами и дорожками — 10.01.08 Шаблон сквозной фичи (BPMN-процесс). Следующий шаг после базовых элементов — типовые схемы сборки и хореография в 06.02.03 Типовые паттерны BPMN; исполнение в движке — 06.02.04 Работа с Camunda.
4. Типовые ошибки и ограничения
- Смешение process и collaboration — правила «один процесс — один пул» и message flow между пулами применяют к collaboration; на одном пуле с дорожками достаточно sequence flow.
- «Чёрный ящик» с задачами внутри — если показаны задачи участника, это white box; для black box уберите внутреннюю структуру.
- Message flow без якоря — линия должна крепиться к send/receive, message event или границе пула, а не «висеть» между прямоугольниками.
- Message flow внутри одного пула — пунктир между двумя задачами одного пула неверен; используйте sequence flow.
- Data Store внутри раздела Data Object — в нотации это разные артефакты с разной семантикой.
- Группа вместо подпроцесса — группа не скрывает и не инкапсулирует поток; для reusable или atomic блока — подпроцесс.
- Задача не в дорожке исполнителя — «Проверить оплату» в дорожке «Клиент», хотя выполняет бухгалтерия, ломает чтение RACI на диаграмме.
- Дублирование «Клиент» — как пул (внешний актор) и как дорожка внутри «Магазин» на разных диаграммах без явной договорённости команды.
- Mermaid и PlantUML вместо BPMN XML — в них нет пулов, типов задач и граничных событий. Диаграммы в этой заметке — BPMN 2.0; править и отдавать в движок их нужно из редактора, см. 07.04 Инструменты моделирования (Sparx EA, Lucidchart, draw.io).
Связи с другими разделами базы
- 06.02.01 Потоки, шлюзы, события — sequence flow, message flow, send/receive и message events
- 06.02.03 Типовые паттерны BPMN — схемы с несколькими пулами, хореография, типовые ошибки компоновки
- 06.02.04 Работа с Camunda — исполнение моделей с пулами и дорожками в BPMN-движке
- 03.04.01 BPMN 2.0 - введение и основы — обзор нотации в ветке SA; начните здесь, если ещё не знакомы с BPMN
- 02.01.04 Определение границ решения (Scope Modelling) — пул как граница scope участника
- 03.04.02 Диаграмма потоков данных (DFD) — аналог data object и data store
- 03.03.03 Словарь данных (описание) — именование и семантика объектов данных на диаграмме
- 03.01.02 Моделирование контекста системы (Context Diagram) — внешние участники и границы системы
- 03.01.04 Интерфейсы и интеграционные взаимодействия — message flow и межсистемный обмен
- 02.01.03 Анализ заинтересованных сторон (Stakeholder Map) — участники как основа для пулов
- 02.03.04 Трассировка требований (концепция) — связь data objects с требованиями
- 10.01.08 Шаблон сквозной фичи (BPMN-процесс) — шаблон документирования процесса
- 10.01.14 Шаблон глоссария и словаря данных — фиксация терминов артефактов данных
- 07.04 Инструменты моделирования (Sparx EA, Lucidchart, draw.io) — построение BPMN-диаграмм
Источники и дополнительные материалы
Книги и стандарты
- OMG. Business Process Model and Notation (BPMN) Version 2.0.2 — норматив по Pool, Lane, Participant, Artifact, Data Store. https://www.omg.org/spec/BPMN/2.0.2
- Брюс Сильвер. «BPMN в действии. Моделирование и анализ бизнес-процессов» — Method & Style: пулы, дорожки, white/black box. ДМК Пресс.
- Томас Аллвейер. «BPMN 2.0. Introduction to the Standard for Business Process Modeling» — collaboration, артефакты и данные.
Практические руководства
- Camunda BPMN Tutorial — обзор нотации, в том числе pools и lanes. https://camunda.com/bpmn/
- Camunda Modeler: Pools and Lanes — размещение участников и дорожек. https://docs.camunda.io/docs/components/modeler/bpmn/pools/
- Camunda Modeler: Data Objects — объекты данных и ассоциации. https://docs.camunda.io/docs/components/modeler/bpmn/data-objects/
Спецификации и синтаксис
- PlantUML: Activity Diagram (BPMN notation) — текстовое описание диаграмм с пулами. https://plantuml.com/activity-diagram-beta
- PlantUML stdlib: BPMN — примеры синтаксиса pools/lanes. https://github.com/plantuml/plantuml-stdlib/tree/master/bpmn