Fala galera,
Fiquei com uma dúvida quanto à solução sugerida. Não seria responsabilidade da classe pai controlar se já foi aplicado um descontom, ao invés das classes filhas?
Minha linha de raciocínio é que, independente do estado no qual o orçamento se encontra, o que importa é saber se o orçamento já recebeu um desconto, ou seja, ele deveria controlar isso lá no método "aplica_desconto_extra", através de um atributo do objeto.