ここの例外系のチェックくらいは簡単にしておいた方がいいです。
totalAmoutBeforeDiscountは必ずdiscountAmountよりも大きくないと例外投げるとか。