Add a money-back path for pay_now users: within the refund window they can trigger a full refund of the upfront charge, which cancels the subscription immediately and revokes their bank connections (keeping imported data). A refunded_at column records it and blocks a second refund. Eligibility (pay_now variant, active subscription, inside the window, not yet refunded) is centralised in ExperimentOffer::canSelfRefund and surfaced on the billing screen so the frontend can show the button and deadline. |
||
|---|---|---|
| .. | ||
| Controllers | ||
| Middleware | ||
| Requests | ||
| Responses | ||