Документация / BPMN
Практические примеры
Готовые процессы, которые можно открыть в редакторе и взять за основу.
Согласование заявки на закупку
Сотрудник создаёт заявку, руководитель согласует её. Если руководитель не ответил за два рабочих дня, ему уходит напоминание (непрерывающий граничный таймер). Отказ возвращает заявку на доработку.
<?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"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
id="Definitions_Purchase" targetNamespace="http://bpmn.io/schema/bpmn">
<bpmn:process id="Process_Purchase" name="Согласование закупки" isExecutable="false">
<bpmn:startEvent id="Need" name="Нужна закупка">
<bpmn:outgoing>P1</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:userTask id="Create" name="Создать заявку">
<bpmn:incoming>P1</bpmn:incoming>
<bpmn:incoming>P_Rework</bpmn:incoming>
<bpmn:outgoing>P2</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="Approve" name="Согласовать заявку">
<bpmn:incoming>P2</bpmn:incoming>
<bpmn:outgoing>P3</bpmn:outgoing>
</bpmn:userTask>
<bpmn:boundaryEvent id="Reminder" name="2 дня" cancelActivity="false" attachedToRef="Approve">
<bpmn:outgoing>P_Remind</bpmn:outgoing>
<bpmn:timerEventDefinition id="Def_Reminder">
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">P2D</bpmn:timeDuration>
</bpmn:timerEventDefinition>
</bpmn:boundaryEvent>
<bpmn:sendTask id="Remind" name="Напомнить руководителю">
<bpmn:incoming>P_Remind</bpmn:incoming>
<bpmn:outgoing>P_Reminded</bpmn:outgoing>
</bpmn:sendTask>
<bpmn:endEvent id="Reminded" name="Напоминание отправлено">
<bpmn:incoming>P_Reminded</bpmn:incoming>
</bpmn:endEvent>
<bpmn:exclusiveGateway id="Decision" name="Согласовано?">
<bpmn:incoming>P3</bpmn:incoming>
<bpmn:outgoing>P_Yes</bpmn:outgoing>
<bpmn:outgoing>P_Rework</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:serviceTask id="Order" name="Оформить заказ поставщику">
<bpmn:incoming>P_Yes</bpmn:incoming>
<bpmn:outgoing>P4</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:endEvent id="Ordered" name="Заказ оформлен">
<bpmn:incoming>P4</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="P1" sourceRef="Need" targetRef="Create" />
<bpmn:sequenceFlow id="P2" sourceRef="Create" targetRef="Approve" />
<bpmn:sequenceFlow id="P3" sourceRef="Approve" targetRef="Decision" />
<bpmn:sequenceFlow id="P_Yes" name="Да" sourceRef="Decision" targetRef="Order" />
<bpmn:sequenceFlow id="P_Rework" name="Нет, на доработку" sourceRef="Decision" targetRef="Create" />
<bpmn:sequenceFlow id="P4" sourceRef="Order" targetRef="Ordered" />
<bpmn:sequenceFlow id="P_Remind" sourceRef="Reminder" targetRef="Remind" />
<bpmn:sequenceFlow id="P_Reminded" sourceRef="Remind" targetRef="Reminded" />
</bpmn:process>
<bpmndi:BPMNDiagram id="Diagram_Purchase">
<bpmndi:BPMNPlane id="Plane_Purchase" bpmnElement="Process_Purchase">
<bpmndi:BPMNShape id="Need_di" bpmnElement="Need">
<dc:Bounds x="152" y="122" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="134" y="165" width="72" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Create_di" bpmnElement="Create">
<dc:Bounds x="240" y="100" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Approve_di" bpmnElement="Approve">
<dc:Bounds x="400" y="100" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Reminder_di" bpmnElement="Reminder">
<dc:Bounds x="432" y="162" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="470" y="198" width="30" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Remind_di" bpmnElement="Remind">
<dc:Bounds x="400" y="250" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Reminded_di" bpmnElement="Reminded">
<dc:Bounds x="572" y="272" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="548" y="315" width="84" height="27" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Decision_di" bpmnElement="Decision" isMarkerVisible="true">
<dc:Bounds x="555" y="115" width="50" height="50" />
<bpmndi:BPMNLabel><dc:Bounds x="545" y="172" width="70" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Order_di" bpmnElement="Order">
<dc:Bounds x="660" y="100" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Ordered_di" bpmnElement="Ordered">
<dc:Bounds x="812" y="122" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="788" y="165" width="84" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="P1_di" bpmnElement="P1">
<di:waypoint x="188" y="140" /><di:waypoint x="240" y="140" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="P2_di" bpmnElement="P2">
<di:waypoint x="340" y="140" /><di:waypoint x="400" y="140" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="P3_di" bpmnElement="P3">
<di:waypoint x="500" y="140" /><di:waypoint x="555" y="140" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="P_Yes_di" bpmnElement="P_Yes">
<di:waypoint x="605" y="140" /><di:waypoint x="660" y="140" />
<bpmndi:BPMNLabel><dc:Bounds x="624" y="122" width="18" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="P_Rework_di" bpmnElement="P_Rework">
<di:waypoint x="580" y="115" /><di:waypoint x="580" y="60" /><di:waypoint x="290" y="60" /><di:waypoint x="290" y="100" />
<bpmndi:BPMNLabel><dc:Bounds x="390" y="42" width="96" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="P4_di" bpmnElement="P4">
<di:waypoint x="760" y="140" /><di:waypoint x="812" y="140" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="P_Remind_di" bpmnElement="P_Remind">
<di:waypoint x="450" y="198" /><di:waypoint x="450" y="250" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="P_Reminded_di" bpmnElement="P_Reminded">
<di:waypoint x="500" y="290" /><di:waypoint x="572" y="290" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
Параллельная обработка заказа с ожиданием оплаты
После получения заказа склад собирает его, а бухгалтерия одновременно выставляет счёт. Параллельный шлюз дожидается обеих работ; затем процесс ждёт оплату не дольше пяти дней (шлюз по событиям).
<?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"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
id="Definitions_Fulfil" targetNamespace="http://bpmn.io/schema/bpmn">
<bpmn:message id="Message_Payment" name="Оплата" />
<bpmn:process id="Process_Fulfil" name="Исполнение заказа" isExecutable="false">
<bpmn:startEvent id="Received" name="Заказ получен">
<bpmn:outgoing>A1</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:parallelGateway id="Split">
<bpmn:incoming>A1</bpmn:incoming>
<bpmn:outgoing>A2</bpmn:outgoing>
<bpmn:outgoing>A3</bpmn:outgoing>
</bpmn:parallelGateway>
<bpmn:manualTask id="Pack" name="Собрать заказ">
<bpmn:incoming>A2</bpmn:incoming>
<bpmn:outgoing>A4</bpmn:outgoing>
</bpmn:manualTask>
<bpmn:serviceTask id="Invoice" name="Выставить счёт">
<bpmn:incoming>A3</bpmn:incoming>
<bpmn:outgoing>A5</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:parallelGateway id="Join">
<bpmn:incoming>A4</bpmn:incoming>
<bpmn:incoming>A5</bpmn:incoming>
<bpmn:outgoing>A6</bpmn:outgoing>
</bpmn:parallelGateway>
<bpmn:eventBasedGateway id="Wait">
<bpmn:incoming>A6</bpmn:incoming>
<bpmn:outgoing>A7</bpmn:outgoing>
<bpmn:outgoing>A8</bpmn:outgoing>
</bpmn:eventBasedGateway>
<bpmn:intermediateCatchEvent id="Paid" name="Оплата получена">
<bpmn:incoming>A7</bpmn:incoming>
<bpmn:outgoing>A9</bpmn:outgoing>
<bpmn:messageEventDefinition id="Def_Paid" messageRef="Message_Payment" />
</bpmn:intermediateCatchEvent>
<bpmn:intermediateCatchEvent id="Timeout" name="5 дней">
<bpmn:incoming>A8</bpmn:incoming>
<bpmn:outgoing>A10</bpmn:outgoing>
<bpmn:timerEventDefinition id="Def_Timeout">
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">P5D</bpmn:timeDuration>
</bpmn:timerEventDefinition>
</bpmn:intermediateCatchEvent>
<bpmn:task id="Ship" name="Отгрузить заказ">
<bpmn:incoming>A9</bpmn:incoming>
<bpmn:outgoing>A11</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="Cancel" name="Отменить заказ">
<bpmn:incoming>A10</bpmn:incoming>
<bpmn:outgoing>A12</bpmn:outgoing>
</bpmn:task>
<bpmn:endEvent id="Shipped" name="Заказ отгружен">
<bpmn:incoming>A11</bpmn:incoming>
</bpmn:endEvent>
<bpmn:endEvent id="Cancelled" name="Заказ отменён">
<bpmn:incoming>A12</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="A1" sourceRef="Received" targetRef="Split" />
<bpmn:sequenceFlow id="A2" sourceRef="Split" targetRef="Pack" />
<bpmn:sequenceFlow id="A3" sourceRef="Split" targetRef="Invoice" />
<bpmn:sequenceFlow id="A4" sourceRef="Pack" targetRef="Join" />
<bpmn:sequenceFlow id="A5" sourceRef="Invoice" targetRef="Join" />
<bpmn:sequenceFlow id="A6" sourceRef="Join" targetRef="Wait" />
<bpmn:sequenceFlow id="A7" sourceRef="Wait" targetRef="Paid" />
<bpmn:sequenceFlow id="A8" sourceRef="Wait" targetRef="Timeout" />
<bpmn:sequenceFlow id="A9" sourceRef="Paid" targetRef="Ship" />
<bpmn:sequenceFlow id="A10" sourceRef="Timeout" targetRef="Cancel" />
<bpmn:sequenceFlow id="A11" sourceRef="Ship" targetRef="Shipped" />
<bpmn:sequenceFlow id="A12" sourceRef="Cancel" targetRef="Cancelled" />
</bpmn:process>
<bpmndi:BPMNDiagram id="Diagram_Fulfil">
<bpmndi:BPMNPlane id="Plane_Fulfil" bpmnElement="Process_Fulfil">
<bpmndi:BPMNShape id="Received_di" bpmnElement="Received">
<dc:Bounds x="152" y="162" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="134" y="205" width="72" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Split_di" bpmnElement="Split">
<dc:Bounds x="235" y="155" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Pack_di" bpmnElement="Pack">
<dc:Bounds x="330" y="80" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Invoice_di" bpmnElement="Invoice">
<dc:Bounds x="330" y="200" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Join_di" bpmnElement="Join">
<dc:Bounds x="475" y="155" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Wait_di" bpmnElement="Wait">
<dc:Bounds x="565" y="155" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Paid_di" bpmnElement="Paid">
<dc:Bounds x="662" y="102" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="637" y="145" width="86" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Timeout_di" bpmnElement="Timeout">
<dc:Bounds x="662" y="222" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="662" y="265" width="36" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Ship_di" bpmnElement="Ship">
<dc:Bounds x="750" y="80" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Cancel_di" bpmnElement="Cancel">
<dc:Bounds x="750" y="200" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Shipped_di" bpmnElement="Shipped">
<dc:Bounds x="902" y="102" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="880" y="145" width="80" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Cancelled_di" bpmnElement="Cancelled">
<dc:Bounds x="902" y="222" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="882" y="265" width="76" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="A1_di" bpmnElement="A1">
<di:waypoint x="188" y="180" /><di:waypoint x="235" y="180" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="A2_di" bpmnElement="A2">
<di:waypoint x="260" y="155" /><di:waypoint x="260" y="120" /><di:waypoint x="330" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="A3_di" bpmnElement="A3">
<di:waypoint x="260" y="205" /><di:waypoint x="260" y="240" /><di:waypoint x="330" y="240" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="A4_di" bpmnElement="A4">
<di:waypoint x="430" y="120" /><di:waypoint x="500" y="120" /><di:waypoint x="500" y="155" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="A5_di" bpmnElement="A5">
<di:waypoint x="430" y="240" /><di:waypoint x="500" y="240" /><di:waypoint x="500" y="205" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="A6_di" bpmnElement="A6">
<di:waypoint x="525" y="180" /><di:waypoint x="565" y="180" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="A7_di" bpmnElement="A7">
<di:waypoint x="590" y="155" /><di:waypoint x="590" y="120" /><di:waypoint x="662" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="A8_di" bpmnElement="A8">
<di:waypoint x="590" y="205" /><di:waypoint x="590" y="240" /><di:waypoint x="662" y="240" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="A9_di" bpmnElement="A9">
<di:waypoint x="698" y="120" /><di:waypoint x="750" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="A10_di" bpmnElement="A10">
<di:waypoint x="698" y="240" /><di:waypoint x="750" y="240" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="A11_di" bpmnElement="A11">
<di:waypoint x="850" y="120" /><di:waypoint x="902" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="A12_di" bpmnElement="A12">
<di:waypoint x="850" y="240" /><di:waypoint x="902" y="240" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
Ещё сценарии для моделирования
Попробуйте самостоятельно дополнить примеры выше — это хорошие упражнения на элементы нотации:
- Отмена заказа клиентом — событийный подпроцесс с прерывающим начальным событием сообщения.
- Ошибка оплаты — граничное событие ошибки на задаче «Принять оплату» и ветвь уведомления клиента.
- Эскалация просроченной заявки — непрерывающая граничная эскалация и задача руководителя.
- Согласование у нескольких экспертов — параллельная многоэкземплярная задача «Проверить документ».
- Бронирование тура — транзакция с задачами компенсации для каждого бронирования.
Похожие инструменты
Обновлено: 30 сентября 2026 г.
