Design a refund service
Your task
Design a refund service for a large e-commerce platform processing ~2M orders/day. Support full and partial refunds, multiple partial refunds against one payment (total refunded must never exceed captured amount), refunds that arrive via API and via async PSP webhook, and the case where the original payment used split tenders (gift card + card). Describe the model and how you prevent over-refunding under concurrent refund requests and duplicate webhooks.
It covers
- Partial refunds
- Refund reconciliation
- State machine