целостность: объявление шага сценария и данных, хранимых на этом шаге, неразделимо. Динамически типизированный вариант описывать шаги enum'ом и при этом подразумевать, что при таком-то шаге такое-то поле не null, не рассматриваю;
Я бы здесь по проще описал.
Либо добавил краткие пояснения.
Остальное понятно, написано хорошо
Идей нет.
Спасибо, перепишу.
Другой ревьюер тоже указал на этот участок)