Что мешает сделать этапы логическими функциями? Тогда было бы просто...
## Код:
```
IF <этап0> AND <этап1> AND <этап3> ... THEN....
```

или даже так:
## Код:
```
i := 0;
WHILE ((i < Count) AND <зтап[i]>) DO BEGIN
        ...
        i := i + 1;
END;
ok := (i = Count);
```
