Just a thought on an old thread.
I think you can play a generation game with Schematron using phases. You can validate one document with one phase until it passes, then move to the next phase. For example, the first phase might be to validate names and addresses. The second phase might be to validate the order details. The third phase might be to validate shipping and payment details.
This seems a better ordered, more declarative, and less error-prone method than, for example, pages that rewrite themselves.