Returns, refund requests, and chargebacks each have their own records and states. A refund request reaches exactly one terminal outcome, and approved refunds can never cumulatively exceed the order total.
A refund request ends as approved, rejected, or cancelled, and the database prevents it reaching more than one of those.
Refunds must be explicitly approved by an admin, and the approved amount can never exceed what was recorded on the request.
Accepting a return writes a stock movement automatically, so restocked units are available to sell straight away.
Chargebacks are stored with their status and evidence deadline beside the order they relate to.