1. Делаем массив УНИФИЦИРОВАННЫХ "страниц" (шагов) всей формы.
2. Делаем массив УНИФИЦИРОВАННЫХ ПЕРЕХОДОВ: id унифицированной "страницы", состояния полей (+расчёт), id-следующей "страницы" (куда переадресуем после корректного заполнения этой).
3. Нужно сделать функцию по-типу switch'a и цикла. Т.е., делаем условия и что показать.
Флаг "Completed" у формы отсутствует - цикл по-кругу, иначе - выход из функции.
В условиях - прописываем: какую "страницу" опроса отобразить на текущее состояние заполнения всей формы и ID унифицированного перехода (выбор следующей вместе с расчётом в зависимости от заполнения текущей).
Также, можно сделать вложенные условия через рекурсию: вызов этой функции с нужной ветки с нужными входными параметрами (sub-формами и т.д.).
На выходе - получаем все, что нужно.