Why is `amount` a String and `discountAmount` a double? Could we expose something more consistent in the builder/getters?