Как программировать бизнес процессы?
Я помню что для похожих ситуаций можно было использовать шаблон Состояние. Его фишка в том, что можно задать валидную цепочку состояний, а само состояние инкапсулируется в классах
Для этого придуман BPM.
Вот, например: https://camunda.com/