Типы этапов
Автоматическая обработка 
Ожидание событияСообщение от внешней системы.
Ручной ввод от пользователя.
Ожидание некой даты.
И др.
Консистентность
 При обработке процесса важно гарантировать, что один и тот-же экземпляр процесса в один момент времени обрабатывается одним обработчиком.
 Обработчик при обработке содержит у себя актуальное состояние процесса.
 

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

Ситуация 1.
Нам поступило сообщение от внешней системы, по которому мы должный продолжить некоторый экземпляр процесса. Мы берем это экземпляр и перед обработкой проверяем его статус. Если вдруг обнаружилось, что статус некорректный, то это обозначает что возникла ошибка.
Например это может быть вызвано задвоением при отправки сообщений от внешней системы, если при взаимодействии мы не используем подход с уникальной идентификацией сообщений. Ранее приходило первый экземпляр этого сообщения и процесс уже продолжил свое выполнение далее, но вот поступил второй экземпляр того-же сообщения, и мы фиксируем что процесс не находится в нужном состоянии для его обработки. При у нас есть возможность реализовать это таким образом, что мы не повредим консистентность процесса.

Ситуация 2.
Два пользователя открыли форму ручного ввода данных для процесса. Первый пользователь указал данные и продолжил процесс. Второй пользователь пытается проделать то-же самое, но получает ошибку о том, что его форма устарела и кто-то другой внес изменений, на текущем этапе невозможно выполнить данный ручной ввод.

  
Теги: