# Design a corporate expense management system: system design interview question

> Expense review and reimbursement with policy changes, receipt evidence, audit history, and uncertain payment results.

Source: https://sysround.com/questions/design-corporate-expense-management-system
Updated: 2026-11-05


Difficulty: hard. Levels: Mid-level, Senior, Staff+.

## How the interviewer opens it

"Design a platform where employees submit expenses and receipts, and companies review and reimburse them. Preserve an audit history and prevent multiple reimbursements for the same expense record."

## What to clarify first

- Companies and scale
- Read and write mix
- Expense and approval rules
- Receipts
- Policy checks
- Payments and duplicate claims
- Consistency and availability
- Latency
- Durability and retention
- External services and exclusions

## Scope of a strong answer

Core requirements:

- Submit expenses with receipt attachments
- Apply company policies and request approval
- Reimburse each approved expense record at most once
- Preserve an audit history for expense and payment decisions

Usually out of scope:

- Corporate card feeds
- Travel reservations
- Tax calculations and currency conversion
- Payroll
- Build an identity service or payment provider
- Recovery after a regional outage
- Payout provider failover

## What interviewers probe

### Expense changes and approvals

An approval applies to specific expense details and company rules. Later edits must not change what the reviewer approved.

### Payment outcomes

A provider can accept a payout before the caller receives a result. A local retry can then cause another transfer.

### Repeated expense submissions

A repeated API request differs from a repeated purchase claim. Receipt matches can reveal duplicates but can also identify valid shared expenses.

### Expense history and receipt evidence

The company must explain an old payment using the exact receipt, rules, and decisions that supported it. Partial writes can destroy that evidence.

## Common mistakes

- Treat a payment timeout as a failed payment and create another payout.
- Use a receipt hash as proof that two expenses represent the same purchase.
- Approve an expense without fixing its amount, receipt, and policy version.
- Write audit events after state changes without a durable recovery path.
- Let a repeated request create another reimbursement.
- Trust a company ID or reviewer role from the client.

## The bar by level

- **Mid-level:** Defines a complete submission, approval, and payment flow. Uses database constraints to prevent repeat reimbursement per expense record. Handles provider timeouts without assuming failure. Includes receipt access checks and an audit history.
- **Senior:** Handles revision races, policy versions, and approval permissions. Commits audit and payout intent with state changes. Uses stable provider keys and resolves uncertain results. Separates repeated requests from suspected duplicate claims.
- **Staff+:** Defines guarantees across the database and provider. Handles key expiry, investigation, concurrent duplicate claims, and evidence retention. Distinguishes receipt URL authorization from bearer access. If the interviewer adds those extensions, defines safe provider failover and regional recovery without concurrent payment attempts.

Practice this question with an AI interviewer: https://sysround.com/practice/new?problem=corporate-expense-management


---
SysRound (https://sysround.com) is an AI practice tool for system design interviews. It has a voice or typed AI interviewer and a shared whiteboard. At the end, you get feedback on each skill and a model answer. The AI feedback can be wrong.
