В BPMN к задаче прикрепили прерывающее граничное событие таймера. Что произойдёт с выполнением задачи при срабатывании таймера?
При срабатывании прерывающего граничного события таймера активная задача прекращается, а поток управления переходит по исходящему потоку от этого события. Обычное завершение задачи после этого не должно продолжать основной сценарий.
BPMN создавался как общий графический язык для описания бизнес-процессов, понятный бизнес-заказчикам, аналитикам и техническим специалистам. Одной из исходных проблем была неоднозначность схем: одинаковые на вид элементы могли трактоваться разными участниками по-разному.
Граничные события появились для явного описания обстоятельств, которые влияют на выполнение конкретной активности: тайм-аута, ошибки, отмены, сообщения или компенсации. Их расположение на границе задачи показывает, что событие относится к жизненному циклу этой задачи, а не ко всему процессу.
Предположим, задача «Согласовать платёж» должна завершиться в течение двух рабочих дней. Если срок истёк, платёж нельзя оставлять в состоянии обычного ожидания: нужно передать его на эскалацию или отменить.
Если в модели использовать прерывающее событие, но фактически ожидать параллельного продолжения задачи, возникнет противоречие. Система может одновременно запустить обработку просрочки и сохранить исходную задачу активной, что приведёт к двойной обработке, неясному статусу и возможному нарушению бизнес-правил.
Прерывающее граничное событие прикреплено к задаче и ожидает наступления заданного события. Пока задача выполняется, таймер может сработать. После срабатывания экземпляр задачи отменяется, а токен процесса направляется по потоку, исходящему от таймера.
Таким образом, основной путь после задачи не используется как результат её успешного завершения. Вместо него запускается альтернативная ветка, например «Эскалировать платёж», «Уведомить руководителя» или «Отменить заявку».
Если задача успела завершиться до срабатывания таймера, граничное событие больше не должно прерывать уже завершённую активность. На практике важно также определить часовой пояс, рабочий календарь, момент старта отсчёта и поведение при повторной доставке уведомления.
Ключевое отличие от непрерывающего граничного события состоит в судьбе исходной задачи. Непрерывающий таймер запускает дополнительную ветку, но оставляет исходную задачу активной; прерывающий таймер заменяет дальнейшее выполнение задачи альтернативным сценарием.
Прерывающий вариант подходит, когда после истечения срока исходная работа теряет смысл или должна быть прекращена. Непрерывающий — когда требуется напоминание, контроль или эскалация без лишения исполнителя возможности закончить задачу.
В процессе рассмотрения страховой заявки эксперт должен вынести решение за 24 часа. После истечения срока нужно уведомить руководителя, но эксперт всё ещё может законно завершить рассмотрение.
Рассматривались два варианта. Прерывающий таймер гарантировал отсутствие позднего решения от эксперта, но лишал его возможности завершить уже почти готовую проверку. Непрерывающий таймер сохранял задачу активной и позволял отправить эскалацию, однако создавал риск, что решение эксперта и управленческое вмешательство будут выполняться одновременно.
Выбрали непрерывающий таймер, потому что бизнес-правило требовало не отменять работу эксперта, а только эскалировать нарушение срока. Дополнительно ввели правило идемпотентности уведомлений и явное состояние заявки, чтобы руководитель видел, что срок нарушен, а завершение экспертизы не создавало дубликат решения.
Если бы после дедлайна заявка автоматически считалась недействительной, обоснованным был бы прерывающий таймер с отдельной веткой отмены. Выбор определяется не формой диаграммы, а тем, сохраняет ли исходная задача бизнес-смысл после наступления события.
Промежуточное событие внутри потока является самостоятельным шагом последовательности: процесс должен дойти до него, чтобы обработать событие. Граничное событие связано с конкретной активностью и ожидает событие во время её выполнения.
Поэтому таймер на границе задачи может контролировать срок этой задачи, тогда как таймер в основном потоке обычно описывает ожидание между двумя этапами. Неправильное расположение меняет область действия таймера и может привести к отсчёту не от того момента.
При срабатывании непрерывающего таймера запускается дополнительная ветка, но исходная задача остаётся активной. Это удобно для напоминаний и эскалаций, но требует обработки возможного параллелизма.
Нужно заранее определить, что произойдёт, если исходная задача завершится одновременно с эскалацией: кто имеет право изменить статус, допускаются ли повторные уведомления и как предотвращаются дубли. Без таких правил диаграмма формально корректна, но бизнес-результат остаётся неоднозначным.
В этом случае таймер контролирует жизненный цикл всего подпроцесса, а не одной внутренней активности. При прерывании прекращается область выполнения подпроцесса вместе с ещё активными внутренними шагами, после чего управление переходит по ветке граничного события.
Такое размещение подходит, когда срок относится ко всей составной операции. Если срок установлен только для одного шага внутри подпроцесса, таймер следует прикреплять к этому шагу; иначе он может преждевременно завершить другие необходимые действия.