# Requirement change

Marketing have printed a second voucher and it is already on the back of the catalogue, so we need
it live today. Two things.

**There is a new code, `FIVER`, and it takes a flat 500 off.** Not a percentage — five whole units
off whatever is owed.

**The two vouchers stack.** A customer may put `SAVE10` and `FIVER` on the same cart and get both.

The part that matters, and the part that has burned us before: **the order they apply in is fixed,
and it is not the order the customer typed them in.** Percentage first, then the flat amount. So
on a 4599 cart: knock 10% off first — that is 460, rounded as usual — leaving 4139, and then take
the 500 off that. It comes to 960 off. If you do it the other way round the customer gets 910 off
and we get an argument at the till, so it has to be percentage first however they were entered.

A few things that do not change, because someone always assumes they do:

- **The same code twice is still refused.** Stacking means two *different* vouchers.
- **We never pay a customer to shop with us.** If the flat 500 is more than what is left owing,
  it takes what is left and no more. A cart can come to nothing; it can never come to less.
- **Delivery is still worked out on what is owed after all the discounts.** A voucher can still
  cost someone their free delivery, and that is still intended.
- **The order the vouchers are listed back in is still the order they were typed**, because that
  is what the customer sees on the page. Only the arithmetic has an order of its own.
- Everything else is untouched: same catalogue, same prices, same lines, same paging, same
  rounding rule, same unknown-code error.
