Full refunds work as expected and are already supported
Partial refunds are correct from a customer’s point of view
Currently, when a Partial refund happens, the Payee “refunds” the full amount to the Platform, while the Platform only refunds the correct partial amount to the customer.
Partial refunds transfer the full amount back to the parent account, ex. on a $10 purchase with a $5 partial refund applied, the full $10 will be refunded to the parent account. The $5 refund to the customer appears to be correct.
Another example: A platform with a 10% fee gets an order for $60. The Payee gets a $60 transfer, and then the Platform gets its $6 application fee out of that.
Then, a $10 partial refund is created through Craft Commerce. The customer is correctly refunded $10. The $60 transfer to the Payee is completely reversed, which is incorrect. Perhaps there needs to be options for how this is handled (ex. how much is each party responsible for, or in the fees you can set whether or not it would be refunded as part of a refund), but by default it would make sense to follow the same logic as the fee.
So, the Platform should be responsible for 10% of the refund ($1), and the Payee should cover the rest ($9, not the full $60 currently sent back).
Stripe’s refunds might not let you do this kind of splitting as part of the refund, and instead it might need to be a separate transfer.
Partial refunds transfer the full amount back to the parent account, ex. on a $10 purchase with a $5 partial refund applied, the full $10 will be refunded to the parent account. The $5 refund to the customer appears to be correct.
Another example: A platform with a 10% fee gets an order for $60. The Payee gets a $60 transfer, and then the Platform gets its $6 application fee out of that.
Then, a $10 partial refund is created through Craft Commerce. The customer is correctly refunded $10. The $60 transfer to the Payee is completely reversed, which is incorrect. Perhaps there needs to be options for how this is handled (ex. how much is each party responsible for, or in the fees you can set whether or not it would be refunded as part of a refund), but by default it would make sense to follow the same logic as the fee.
So, the Platform should be responsible for 10% of the refund ($1), and the Payee should cover the rest ($9, not the full $60 currently sent back).
Stripe’s refunds might not let you do this kind of splitting as part of the refund, and instead it might need to be a separate transfer.