Просто создаются методы вроде "ВыдатьСкидку", "ВыдатьПостояннуюСкиду", "ВыдатьКупон" и вызываются последовательно. Логика каждого метода зашита в методе. В корневом методе никаких if нет. Код читается сверху вниз линейно. Каждый метод в начале имеет проверку условий и если условия не удовлетворяются, то метод сразу выходит. Сложнее будет, если методы будут взаимосвязаны, но это уже другая история.