Camunda — экосистема для исполняемого BPMN 2.0: от моделирования процесса до оркестрации, мониторинга и операционной работы с инстансами. Для системного аналитика это мост между аналитической BPMN-моделью (потоки, шлюзы, события, пулы — см. соседние материалы раздела) и реализацией: модель должна быть не «картинкой для презентации», а готовой к деплою — с корректной семантикой, исполнимыми задачами, сообщениями, таймерами и явными контрактами с внешними системами. Эта статья — не tutorial по платформе, а исполняемая семантика и границы артефакта SA: что зафиксировать в BPMN/DMN/Forms, чтобы dev и ops могли работать без устных дополнений.
1. Суть темы
Camunda Platform — набор компонент для цикла design → automate → monitor → improve: моделер, workflow-движок, UI для операций и интеграции с внешними сервисами. Аналитик работает в Camunda Modeler и отвечает за то, чтобы BPMN-диаграмма отражала бизнес-процесс и содержала достаточно деталей для исполнения движком. На этапе improve SA задаёт, какие метрики процесса нужны бизнесу (длительность этапов, bottlenecks, SLA); сбор и визуализация KPI — в Optimize, операционный разбор инстансов — в Operate / Cockpit.
Граница этой статьи:
| В зоне этой статьи | Вынесено в соседние заметки |
|---|---|
| Camunda Modeler, исполнимость, деплой, роль SA в цикле «модель → тест → prod» | Элементы нотации BPMN — 06.02.01 Потоки, шлюзы, события, 06.02.02 Пулы, дорожки и артефакты, 06.02.03 Типовые паттерны BPMN |
| Связь BPMN с DMN, формами, job workers / external tasks | Чистая нотация и введение — 03.04.01 BPMN 2.0 - введение и основы |
| Полный пакет артефактов сквозной фичи | 10.01.08 Шаблон сквозной фичи (BPMN-процесс) |
| ArchiMate, C4, слои предприятия | 06.03.01 Мотивационный слой, 06.03.05 C4-модель |
Когда Modeler + чеклист, а когда шаблон 10.01.08: для локального процесса или proof-of-concept достаточно исполняемой BPMN в Modeler и чеклиста из раздела 3. Шаблон 10.01.08 Шаблон сквозной фичи (BPMN-процесс) нужен, когда процесс — центр сквозной фичи с несколькими интеграциями, ролями, NFR и трассировкой к требованиям: там SA собирает BPMN вместе с контрактами API, формами, матрицей трассировки и критериями приёмки.
Две линейки продукта не смешивайте в одном проектном глоссарии без явного указания версии:
| Линейка | Движок | Типичный SA-фокус |
|---|---|---|
| Camunda 7 | Process Engine (встраиваемый Java, REST) | serviceTask, Java delegates, external task pattern, Cockpit + Tasklist |
| Camunda 8 | Zeebe (распределённый workflow) | Modeler → Operate / Tasklist / Optimize, job workers, connectors, gRPC/REST API |
flowchart LR
SA[Системный аналитик] -->|BPMN/DMN XML| M[Camunda Modeler]
M -->|deploy| E[Workflow Engine<br/>7: Process Engine / 8: Zeebe]
E --> O[Operate / Cockpit]
E --> T[Tasklist]
E --> Opt[Optimize]
E <-->|jobs / REST| W[Workers / сервисы]
SA -->|спецификация| W
Opt -->|KPI / process mining| SA
Минимальный исполняемый процесс в XML Camunda Modeler: старт, пользовательская задача, исключающий шлюз и два завершения.
<?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:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_camunda_leave" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.0.0">
<bpmn:collaboration id="Collaboration_camunda_leave"><bpmn:participant id="c_pool" name="Согласование отпуска" processRef="Process_leave" /></bpmn:collaboration>
<bpmn:process id="Process_leave" name="Согласование отпуска" isExecutable="true"><bpmn:laneSet id="LaneSet_c_pool"><bpmn:lane id="c_mgr" name="1. Руководитель"><bpmn:flowNodeRef>c_s</bpmn:flowNodeRef><bpmn:flowNodeRef>c_t</bpmn:flowNodeRef><bpmn:flowNodeRef>c_g</bpmn:flowNodeRef><bpmn:flowNodeRef>c_yes</bpmn:flowNodeRef><bpmn:flowNodeRef>c_no</bpmn:flowNodeRef></bpmn:lane></bpmn:laneSet><bpmn:startEvent id="c_s" name="Заявка создана"><bpmn:outgoing>Flow_0</bpmn:outgoing></bpmn:startEvent><bpmn:userTask id="c_t" name="Проверить заявку" camunda:assignee="manager"><bpmn:incoming>Flow_0</bpmn:incoming><bpmn:outgoing>Flow_1</bpmn:outgoing></bpmn:userTask><bpmn:exclusiveGateway id="c_g" name="Согласовано?"><bpmn:incoming>Flow_1</bpmn:incoming><bpmn:outgoing>Flow_2</bpmn:outgoing><bpmn:outgoing>Flow_3</bpmn:outgoing></bpmn:exclusiveGateway><bpmn:endEvent id="c_yes" name="Согласовано"><bpmn:incoming>Flow_2</bpmn:incoming></bpmn:endEvent><bpmn:endEvent id="c_no" name="Отклонено"><bpmn:incoming>Flow_3</bpmn:incoming></bpmn:endEvent><bpmn:sequenceFlow id="Flow_0" sourceRef="c_s" targetRef="c_t" /><bpmn:sequenceFlow id="Flow_1" sourceRef="c_t" targetRef="c_g" /><bpmn:sequenceFlow id="Flow_2" name="да" sourceRef="c_g" targetRef="c_yes" /><bpmn:sequenceFlow id="Flow_3" name="нет" sourceRef="c_g" targetRef="c_no" /></bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_camunda_leave">
<bpmndi:BPMNPlane id="BPMNPlane_camunda_leave" bpmnElement="Collaboration_camunda_leave">
<bpmndi:BPMNShape id="c_pool_di" bpmnElement="c_pool" isHorizontal="true"><dc:Bounds x="80" y="40" width="696" height="324" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="c_mgr_di" bpmnElement="c_mgr" isHorizontal="true"><dc:Bounds x="110" y="40" width="666" height="324" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="c_s_di" bpmnElement="c_s"><dc:Bounds x="153" y="108" width="36" height="36" /><bpmndi:BPMNLabel><dc:Bounds x="145" y="152" width="53" height="28" /></bpmndi:BPMNLabel></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="c_t_di" bpmnElement="c_t"><dc:Bounds x="280" y="86" width="180" height="80" /></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="c_g_di" bpmnElement="c_g" isMarkerVisible="true"><dc:Bounds x="544" y="101" width="50" height="50" /><bpmndi:BPMNLabel><dc:Bounds x="527" y="69" width="85" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="c_yes_di" bpmnElement="c_yes"><dc:Bounds x="685" y="108" width="36" height="36" /><bpmndi:BPMNLabel><dc:Bounds x="664" y="152" width="78" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNShape>
<bpmndi:BPMNShape id="c_no_di" bpmnElement="c_no"><dc:Bounds x="685" y="266" width="36" height="36" /><bpmndi:BPMNLabel><dc:Bounds x="670" y="310" width="66" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0_di" bpmnElement="Flow_0"><di:waypoint x="189" y="126" /><di:waypoint x="280" y="126" /></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1_di" bpmnElement="Flow_1"><di:waypoint x="460" y="126" /><di:waypoint x="544" y="126" /></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_2_di" bpmnElement="Flow_2"><di:waypoint x="594" y="126" /><di:waypoint x="685" y="126" /><bpmndi:BPMNLabel><dc:Bounds x="602" y="108" width="24" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_3_di" bpmnElement="Flow_3"><di:waypoint x="569" y="151" /><di:waypoint x="569" y="284" /><di:waypoint x="685" y="284" /><bpmndi:BPMNLabel><dc:Bounds x="577" y="157" width="27" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
Camunda не заменяет BPMN как нотацию — она исполняет подмножество BPMN 2.0 с платформенными расширениями (camunda:* в XML). Одна и та же диаграмма может быть корректной BPMN для документирования и непригодной для deploy: unsupported elements, отсутствие обязательных атрибутов Camunda, черновик из draw.io без executable-флага. Перед деплоем проверяйте модель в Modeler и матрицу поддержки выбранного движка.
2. Ключевые понятия
Camunda Modeler
Desktop-приложение для BPMN 2.0, DMN (Decision Model and Notation) и Camunda Forms. Основной артефакт для деплоя — BPMN 2.0 XML. Modeler поддерживает Camunda-расширения: тип задачи, job type / topic, input/output mapping, form key и др. Без них диаграмма остаётся визуальной схемой.
Исполняемый процесс (executable process)
BPMN-процесс с isExecutable="true", который движок может инстанцировать и проводить по токенам: start/end events, tasks, gateways, message/timer/signal events — в пределах поддержки выбранной версии движка. Неисполнимая модель допустима на этапе обсуждения с бизнесом, но не деплоится «как есть».
Process definition и process instance
| Понятие | Смысл |
|---|---|
| Process definition | Задеплоенная версия модели — шаблон процесса |
| Process instance | Один конкретный прогон (case) с переменными процесса и текущим состоянием токенов |
Новая версия definition применяется к новым инстансам; уже запущенные продолжают по версии старта. Политику версионирования и миграции running instances фиксируйте с командой заранее — риски миграции 7 → 8 см. 08.05 Управление рисками на этапе анализа.
Переменные процесса
Единый словарь переменных — основа форм, API и мониторинга в Operate. SA фиксирует имя, тип, источник и область видимости:
| Уровень | Где живёт | Кто заполняет | Типичное использование |
|---|---|---|---|
| Process variable | Весь инстанс | Start event, service task, user task (submit) | orderId, amount, статус кейса |
| Local variable | Embedded/called subprocess, scope задачи | I/O mapping, script | Промежуточные значения без «загрязнения» родителя |
| Task variable (C7) | User task | Form submit, Tasklist | Поля формы до complete |
| Input/output mapping | Граница task / call activity | SA задаёт mapping в Modeler | Проброс customerId в worker; изоляция внутренних имён |
Расхождение имён между формой, BPMN mapping и OpenAPI worker — частый источник инцидентов. Согласуйте словарь с 10.01.14 Шаблон глоссария и словаря данных.
User task, Tasklist и Camunda Forms
User task — задача для человека. И в Camunda 7, и в Camunda 8 human workflow идёт через Tasklist: assignee, candidate groups, form reference. SA описывает роли (согласуйте с 10.01.11 Шаблон ролевой модели), поля формы и SLA по NFR.
Camunda Forms — отдельный контур от кастомного FE:
| Способ привязки | Смысл для SA |
|---|---|
| Form key (C7) / linked form (C8) | Ссылка на задеплоенную форму по id; поля формы → переменные процесса при complete |
| Embedded form (C7, legacy) | HTML/JSON inline в BPMN — редко для новых проектов |
| Custom FE + REST | Tasklist не используется; форма вне Camunda — тогда 10.01.09 Шаблон описания экранной формы и логики на FE |
SA для Tasklist-контура описывает: id формы, список полей (label, type, required, binding к variable), validation rules, read-only vs editable. В Camunda 8 форма деплоится вместе с BPMN (единый deployable resource); в C7 form key указывает на deployed form definition. Поля формы и process variables должны совпадать по именам или явному mapping — иначе на test-стенде задача complete без ожидаемых данных. Для сложной FE-логики (мастера, условные блоки) — либо Camunda Form с JS validation, либо custom app + external task pattern; границу зафиксируйте в спецификации.
Service task
Service task — автоматическое действие. Реализация зависит от линейки:
| Линейка | Типичная реализация | Что фиксирует SA на диаграмме |
|---|---|---|
| Camunda 7 | Java delegate, external task (topic + long polling) | Implementation type, topic, I/O, контракт ошибок |
| Camunda 8 | Job worker (gRPC/REST), connector (готовая интеграция) | Job type, input/output mapping, retries |
Контракт API — в 03.05.03 Спецификации контрактов (OpenAPI, AsyncAPI, Protobuf) или 10.01.04 Шаблон спецификации REST API; протокол — в 03.05.02 Синхронные протоколы (REST, gRPC, GraphQL); версионирование called-сервисов — 03.05.07 Управление версионированием API и жизненным циклом.
Connector (Camunda 8) — преднастроенная интеграция (REST, messaging и др.) без собственного worker-кода. SA выбирает connector, когда сценарий типовой и покрыт catalog; custom job worker — когда нужен контроль над логикой, идемпотентностью и observability. Connector не снимает обязанность описать I/O, ошибки и idempotency на уровне процесса.
Job / job worker (Camunda 8 / Zeebe)
Паттерн отделения оркестрации от исполнения: движок создаёт job, worker забирает, выполняет логику, complete/fail. External task в Camunda 7 решает ту же задачу, но это другой API и семантика polling — не называйте его «job worker». Для SA важна граница ответственности на схеме: что делает процесс vs что делает сервис.
Message correlation и signal
Message — точечная доставка: message catch event связывается с конкретным инстансом через correlation keys (переменные процесса). Критично для паттернов «ожидание ответа от внешней системы» — см. 06.02.03 Типовые паттерны BPMN.
Signal — broadcast без correlation: один signal может затронуть много инстансов процесса. Используйте для event-driven сценариев («отменить все заявки по событию X»); стыкуется с 03.05.06 Event-Driven Architecture. Не подменяйте signal там, где нужна адресная доставка message.
Таймеры
Timer start / intermediate / boundary задают когда срабатывает событие:
| Тип | Смысл для SA |
|---|---|
Duration (PT24H) | Относительная задержка от активации |
| Date | Абсолютная дата/время |
| Cycle | Периодический запуск (timer start) |
Boundary timer на user task — эскалация по SLA: явно укажите interrupting (прерывает задачу) или non-interrupting (параллельная ветка напоминания). Business calendar (рабочие часы) vs технический SLA — разные требования; последние оформляйте как NFR.
Event subprocess
Event subprocess — подпроцесс, активируемый событием внутри родительского процесса, часто для «глобальных» реакций: отмена кейса, SLA на весь процесс, реакция на message/signal вне локальной задачи. Два режима:
| Режим | Поведение | Типичный сценарий |
|---|---|---|
| Interrupting | Прерывает основной поток | Глобальный timeout кейса, аварийная отмена |
| Non-interrupting | Параллельная ветка | Фоновое уведомление, audit-log |
Boundary event на одной задаче покрывает локальную эскалацию; event subprocess — когда событие относится ко всему инстансу. Нотация стартовых событий subprocess — в 06.02.01 Потоки, шлюзы, события.
Multi-instance (MI)
Parallel или sequential multi-instance на task/subprocess — стандартный способ моделировать согласование N участников, а не ручной loop в subprocess. Перед моделированием проверьте поддержку MI в матрице Camunda 7/8; completion condition (${nrOfCompletedInstances == 3}) и переменные коллекции (assigneeList) должны быть в спецификации.
Call activity и embedded subprocess
| Конструкция | Когда выбирать |
|---|---|
| Embedded subprocess | Логический блок внутри одного deployable process; версионируется вместе с родителем |
| Call activity | Переиспользуемый subprocess с отдельным deploy и lifecycle |
Для call activity SA документирует: called element (process id), input/output mapping между родителем и дочерним процессом, политику версий called process (always latest vs pinned version). Типичный источник инцидентов при деплое — несогласованный mapping или ссылка на несуществующую версию.
DMN
Таблицы решений вызываются из BPMN через Business Rule Task со ссылкой на decision definition (DMN). Отдельного BPMN-элемента «decision task» нет — не путайте с DMN-элементом decision. SA определяет границу «процесс vs правило»: табличные разветвления — в DMN, каркас потока — в BPMN.
При деплое DMN создаётся новая decision definition version — симметрично process definition. Зафиксируйте: I/O Business Rule Task ↔ input/output decision table, политику «always latest» vs pinned version (как у call activity), кто утверждает изменение правил без изменения BPMN.
Компенсация, saga и ошибки
Три механизма, которые SA не смешивает:
| Механизм | Назначение | Отличие |
|---|---|---|
| BPMN Error (throw/catch, boundary) | Ожидаемый бизнес-отказ → управляемая ветка | Не откатывает уже выполненные шаги |
| Compensation (compensation throw/catch, transaction subprocess) | Откат успешно завершённых activity при отмене транзакции | Связана с transaction boundary; не substitute для boundary error |
| Failed job / retry | Технический сбой worker | Повтор исполнения, не бизнес-ветка |
Паттерны saga и compensation boundary — в 06.02.03 Типовые паттерны BPMN; здесь важно: компенсация ≠ BPMN error и ≠ incident после исчерпания retries.
Ошибки: BPMN error, failed job, incident
| Механизм | Семантика | Кто инициирует |
|---|---|---|
| BPMN Error (error throw / catch, boundary event) | Ожидаемая **бизнес-**ошибка («отказ», «лимит превышен») → управляемая ветка процесса | Worker/delegate бросает error code; процесс ловит boundary |
| Failed job / external task failure | Технический сбой исполнения (timeout, 500, недоступность сервиса) | Worker fail; движок применяет retry policy |
| Incident (Operate / Cockpit) | Job исчерпал retries или модель неконсистентна — инстанс застрял, нужна ops-реакция | Движок создаёт incident |
SA описывает error codes и boundary events для бизнес-веток; retry count и backoff — с dev. Резолв incident (retry, skip, migrate variable) — зона ops; SA участвует в разборе root cause и правке модели/контракта.
Deployment
Публикация BPMN/DMN/Forms XML в движок. SA фиксирует workflow артефактов, а не только технический способ upload:
| Решение | Что описать в требованиях |
|---|---|
| Источник истины | Git-репозиторий моделей (07.05 Системы контроля версий (Git) для документации), не «XML только у аналитика на диске» |
| Кто деплоит | SA → dev на dev; prod — через CI/CD (07.06 CICD и конвейеры — влияние на требования) с approval |
| Версионирование | Tag/release модели; связь commit ↔ process definition version в Operate/Cockpit |
| Стенды | dev/test/prod; запрет ручного deploy в prod из Modeler без процесса |
Деплой создаёт новую process/decision definition version; мониторинг — через Operate (Camunda 8) или Cockpit (Camunda 7).
Безопасность и многотенантность
В корпоративном контуре SA фиксирует в требованиях (детали — 08.07 Основы кибербезопасности для системного аналитика, 03.05.05 Безопасность API):
- Аутентификация Tasklist — SSO/OIDC; mapping пользователя IdP → assignee.
- Candidate groups vs реальные группы IdP — имена групп в BPMN должны совпадать с тем, что отдаёт identity provider (см. 10.01.11 Шаблон ролевой модели).
- Tenant (Camunda 8) / authorization на REST API (C7) — изоляция процессов между подразделениями или клиентами; tenant id при старте инстанса.
Camunda 7 vs Camunda 8 (концептуально)
| Аспект | Camunda 7 | Camunda 8 |
|---|---|---|
| Движок | Embedded Process Engine (Java) | Zeebe, cloud-native |
| Service tasks | Java delegate, external task | Job workers, connectors |
| Human tasks | Tasklist | Tasklist |
| Мониторинг | Cockpit | Operate |
| Аналитика процесса | Optimize (optional) | Optimize |
| Условия на шлюзах | JUEL (${amount > 1000}) | FEEL (amount > 1000) |
| Выражения DMN | FEEL (частично) / JUEL | FEEL |
| Расширения | Зрелая экосистема plugins | Иной набор supported BPMN-элементов |
Перед моделированием зафиксируйте версию, синтаксис условий на gateway и тестовые данные переменных — согласуйте с dev. Проверьте официальную матрицу поддержки BPMN-элементов: не весь BPMN 2.0 исполняется одинаково.
3. Как применяется в работе аналитика
Где SA добавляет ценность
- Модель «к исполнению»: каждый
user task— роль, form key/linked form, I/O; каждыйservice task— система, контракт (sync/async), error codes; compensation boundary — где нужен откат (см. 06.02.03 Типовые паттерны BPMN). - Границы процесса: один deployable process vs
call activity/ embedded subprocess — согласовано с 06.02.02 Пулы, дорожки и артефакты. - Переменные процесса: единый словарь с областями видимости — основа для форм, API и Operate.
- События и интеграции: message (correlation) vs signal (broadcast); boundary vs event subprocess для локальных и глобальных исключений.
- Happy path + исключения: BPMN errors vs technical retries vs compensation — то, что видно в Operate при разборе инцидентов.
- Multi-instance: параллельное/последовательное согласование — MI вместо ad-hoc циклов.
- Трассируемость: осмысленные
idиname, документация в Modeler — 02.03.04 Трассировка требований (концепция), при необходимости 10.01.15 Шаблон матрицы трассировки. - Review модели: walkthrough, чеклист, mock workers / process test на test-стенде — 08.03 Тестирование требований (статическое тестирование), 02.04.01 Верификация и валидация (V&V).
- DMN: правила, которые бизнес меняет чаще процесса, — в decision tables с версионированием.
- Метрики для Optimize: какие длительности этапов, объёмы, SLA отслеживать — SA формулирует; дашборды настраивает ops/аналитика данных.
Типовой workflow SA в Camunda-контуре
flowchart TD
A[Черновик BPMN в Modeler] --> B[Walkthrough с бизнесом]
B --> C[Проверка исполнимости с dev]
C --> D[Deploy на dev/test]
D --> E[Прогон сценариев в Operate / Cockpit]
E --> F{Инциденты / расхождения?}
F -->|да| C
F -->|нет| G[Документирование + handover]
На этапе E аналитик смотрит не только happy path: переменные инстанса, stuck tokens, incidents — обратная связь к качеству модели. Критерии приёмки процесса — 02.04.02 Критерии приёмки (Acceptance Criteria).
Чеклист артефактов перед передачей в разработку
| Проверка | Что должно быть |
|---|---|
| Executable flag | isExecutable="true" на процессе |
| Старт | Явная политика старта: message/timer start + кто инициирует (REST API, scheduler, message); несколько none start в одном процессе — почти всегда ошибка моделирования |
| Потоки | Все sequence flows замкнуты; у exclusive gateway — явные условия (FEEL в C8 / JUEL в C7), согласованные тестовые данные |
| User tasks | Assignee / candidate groups, form key или linked form, поля ↔ variables, I/O |
| Service tasks (C7) | Delegate или external task + topic, I/O, error codes, retries, idempotency key где возможен повтор |
| Service tasks (C8) | Job type или connector, I/O, error codes, retries, idempotency key |
| Call activity | Called process id, I/O mapping, политика версии |
| Multi-instance | Коллекция, completion condition |
| Сообщения / signals | Каталог имён; для message — correlation keys и idempotency при redelivery |
| Таймеры / event subprocess | Duration/date/cycle; interrupting vs non-interrupting; глобальные timeout/отмена — event subprocess |
| Исключения | Boundary error/timer; compensation boundary — отдельно от BPMN error |
| Переменные | Словарь с scope (process/local/mapping) |
| Версия платформы | Camunda 7 или 8, supported elements — в глоссарии |
| DMN | Business Rule Task → decision definition; I/O; политика версии decision |
| Безопасность | Candidate groups ↔ IdP; tenant при multi-tenant |
Связь с интеграцией
Service task и message events — точки стыковки с интеграционными интерфейсами. Асинхронные ожидания — message correlation и асинхронное взаимодействие. Деплой моделей — часть CI/CD-контура; XML-модели — в Git.
Минимальный пример: service task и ошибки
На диаграмме — business-level имя («Проверить кредитный лимит»). В properties Modeler — техническая привязка:
- Job type (C8) / topic (C7 external task):
credit-check - Input mapping:
customerId,amount - Output mapping:
creditApproved,rejectReason - Business error: worker бросает BPMN error
CREDIT_DENIED→ boundary error event «Отказ» на задаче - Technical error: worker fail / HTTP 503 → retries по политике; после исчерпания — incident в Operate (ops retry/skip; SA правит модель при систематических сбоях)
- Compensation (если до этого был успешный reserve limit): отдельный compensation handler — не путать с boundary error «Отказ»
SA не пишет код worker, но закрывает контракт: данные, error codes, ветки процесса, граница SA vs ops на инцидентах.
4. Типовые ошибки и ограничения
Ограничения платформы
- Не весь BPMN 2.0 исполняется: complex gateways, choreography, редкие события часто только для документирования — см. раздел 1 про valid BPMN ≠ deployable.
- Camunda extensions привязывают модель к платформе; export «чистого» BPMN может потребоваться для другого engine.
- Granularity: крупный процесс → сложный мониторинг; слишком много мелких call activity → overhead версионирования и I/O mapping.
- Миграция 7 → 8 нетривиальна: другой движок, API workers, FEEL вместо JUEL. Не смешивайте термины в документации — риски зафиксируйте по 08.05 Управление рисками на этапе анализа.
Типичные ошибки аналитика
| Ошибка | Последствие | Как избежать |
|---|---|---|
| Модель не executable, но ожидают deploy | Процесс не стартует | Явно разделять черновик и модель к деплою |
| Несколько none start events | Неоднозначный старт, deploy error | Message/timer start + документированный инициатор |
| «Decision task» вместо Business Rule Task | Dev ищет несуществующий элемент | Только Business Rule Task + decision definition |
| Business error без error code / boundary | Неконтролируемый fail → incident | Error throw/catch в спецификации |
| Compensation смешана с BPMN error | Неверный откат или ветка | Раздел 2 «Компенсация, saga и ошибки»; паттерны — 06.02.03 Типовые паттерны BPMN |
| Только boundary, без event subprocess | Нет глобальной отмены/timeout кейса | Event subprocess для process-level исключений |
| Implicit gateway logic | Непредсказуемая ветка | Условие на каждом исходящем потоке; FEEL/JUEL по линейке |
| Message/signal без семантики | Зависшие или лишние инстансы | Message = correlation; signal = broadcast |
| Call activity без I/O mapping | Incident при старте дочернего процесса | Mapping + версия called process |
| Loop subprocess вместо MI | Неподдерживаемая или хрупкая логика | Multi-instance для N согласующих |
| User task без form/variables | Разрыв UX и процесса | Form key + согласование полей с variables |
| Form fields ≠ process variables | Complete без данных на test-стенде | Единый словарь; linked form в deploy bundle (C8) |
| Service task как «чёрный ящик» | Incidents без playbooks | Контракт ошибок, retries, boundary, idempotency |
| C7 external task назван «job worker» | Путаница в реализации | Термины по линейке из таблицы «Camunda 7 vs Camunda 8» |
| Только ideal flow | Dev додумывает escalation | Timer boundary, event subprocess, компенсации |
| Candidate groups не совпадают с IdP | Задачи не видны в Tasklist | Согласование с 10.01.11 Шаблон ролевой модели |
Критерий «модель готова»
Модель готова к передаче, если на test-стенде можно пройти сценарий в Operate/Cockpit без устных дополнений: все start policies, user tasks с формами, service tasks с mock workers, message/timer/signal, MI, call activity, event subprocess, заявленные BPMN errors, boundary timers и compensation (где применимо). Статическая проверка до прогона — 08.03 Тестирование требований (статическое тестирование); формальная V&V — 02.04.01 Верификация и валидация (V&V). Если нужны пояснения «dev сам поймёт» — модель не завершена.
Граница ролей SA и ops
| Зона SA | Зона ops |
|---|---|
| Семантика модели, контракты, error codes, SLA в диаграмме | Retry/skip incident, migrate variables, hotfix deploy |
| Root cause после инцидента → правка BPMN/DMN/spec | Ежедневный мониторинг Operate/Cockpit |
| Требования к метрикам для Optimize | Настройка Optimize, алерты |
| Требования к auth Tasklist, tenant, candidate groups | Настройка IdP, authorization engine |
Связи с другими разделами базы
- Элементы нотации исполнимой модели — 06.02.01 Потоки, шлюзы, события
- Пулы, дорожки, организационные границы — 06.02.02 Пулы, дорожки и артефакты
- Паттерны: correlation, retry, saga, compensation — 06.02.03 Типовые паттерны BPMN
- BPMN как нотация vs инструмент исполнения — 03.04.01 BPMN 2.0 - введение и основы
- Шаблон сквозного BPMN-процесса — 10.01.08 Шаблон сквозной фичи (BPMN-процесс)
- Формы user task и FE-спецификация — 10.01.09 Шаблон описания экранной формы и логики на FE
- Ролевая модель (candidate groups) — 10.01.11 Шаблон ролевой модели
- Словарь переменных процесса — 10.01.14 Шаблон глоссария и словаря данных
- Контракт service task (OpenAPI и др.) — 03.05.03 Спецификации контрактов (OpenAPI, AsyncAPI, Protobuf), 10.01.04 Шаблон спецификации REST API
- Версионирование API и called-сервисов — 03.05.07 Управление версионированием API и жизненным циклом
- Интеграционные интерфейсы — 03.01.04 Интерфейсы и интеграционные взаимодействия
- Синхронные протоколы — 03.05.02 Синхронные протоколы (REST, gRPC, GraphQL)
- Асинхронные сообщения и event-driven — 03.05.04 Асинхронное взаимодействие (очереди, Kafka, Events), 03.05.06 Event-Driven Architecture
- Безопасность API и Tasklist — 03.05.05 Безопасность API, 08.07 Основы кибербезопасности для системного аналитика
- SLA и NFR таймеров — 08.02 Нефункциональные требования (NFR) — классификация и стандарты
- Статическая проверка и mock workers — 08.03 Тестирование требований (статическое тестирование)
- V&V модели и контрактов — 02.04.01 Верификация и валидация (V&V)
- Критерии приёмки процесса — 02.04.02 Критерии приёмки (Acceptance Criteria)
- Риски миграции и running instances — 08.05 Управление рисками на этапе анализа
- Трассировка требований — 02.03.04 Трассировка требований (концепция), 10.01.15 Шаблон матрицы трассировки
- Git и CI/CD моделей — 07.05 Системы контроля версий (Git) для документации, 07.06 CICD и конвейеры — влияние на требования
- Моделирование без исполнения (draw.io и др.) — 07.04 Инструменты моделирования (Sparx EA, Lucidchart, draw.io)
- ArchiMate / C4 — другой уровень абстракции — 06.03.01 Мотивационный слой, 06.03.05 C4-модель
Источники и дополнительные материалы
Официальная документация Camunda
- Camunda Platform — обзор
- Camunda 8 Documentation
- About Modeler (Camunda 8)
- BPMN in Camunda 8
- Camunda Forms — utilizing forms
- Tasklist — introduction
- FEEL expression language
- Concepts overview (Camunda 8)
- Job workers (Camunda 8)
- Deploy a process (Java client example)
- Operate — мониторинг инстансов (Camunda 8)
- Optimize — process analytics
- DMN in Camunda 8
- Migrating from Camunda 7
- Camunda 7 Documentation
- BPMN 2.0 implementation reference (Camunda 7)
- Camunda Modeler — download
Стандарты
- BPMN 2.0 specification (OMG) — контекст нотации, на которой построена платформа