process_data() and status() both confirm payments without setting captured_amount, which stays at 0.0.
Every other provider that supports refunds (PayPal, Sofort, Sagepay, Dummy) sets captured_amount = payment.total on confirmation. The old StripeProvider did too (fixed in #77). StripeProviderV3 never carried this over.
This breaks BasePayment.refund():
- Partial refunds always raise ValueError (amount > 0.0)
- Full refunds log an error and leave captured_amount negative
Related: #412, #77