This approach would also allow for implementing coupons in different ways (ex. time-based, limited), reduce mental stress by being able to retry codes till you found a valid coupon (some providers allow for coupon codes but no way to verify it's valid) and not distract from the check-out process (it would simply require showing which of the redeemed coupons are applicable to the purchase).
A plus side of this approach is that a coupon is enough to persuade potential buyers to create accounts to keep their coupon (while it's valid - for later use) and thus also reducing friction in the check-out process which should lead to more sales.
I do also now believe the existing 'coupon' implementation is at fault by leaving too much on the table.