# Synthetic Expense Reimbursement Policy

> **Fictional demonstration only.** This policy, its company, people, claims, thresholds, and identifiers are synthetic. It contains no employer or client data and does not describe a production deployment.

Policy version: `ER-2026.09`

The fictional Expense Reimbursement Agent evaluates one claim at a time. Rules are applied in the order below. An earlier rule takes precedence over every later rule.

## 1. Validate the claim

### ER-2026.09 §1.1: Valid amount

`amount_usd` must be a finite number greater than USD 0 and no greater than USD 25,000. A zero, negative, non-numeric, non-finite, or over-limit amount must be rejected with `reject_claim`, reason `invalid_amount`.

## 2. Prevent duplicate payment

### ER-2026.09 §2.1: Already paid

If `prior_payment_status` is `paid`, the agent must return `no_op` and make no tool call. It must not create, reject, or reopen the claim. This rule prevents a second payout even if the submitted idempotency key is reused.

### ER-2026.09 §2.2: Payment already processing

If `prior_payment_status` is `processing`, the agent must return `no_op` and make no tool call. The existing processing attempt owns the idempotency key.

## 3. Check eligibility and evidence

### ER-2026.09 §3.1: Prohibited categories

Claims in `alcohol`, `gambling`, or `personal_fines` are not reimbursable. The agent must reject them with `reject_claim`, reason `category_not_reimbursable`, even when a receipt and approval are present.

### ER-2026.09 §3.2: Receipt requirement

An otherwise eligible claim of USD 25 or more requires a receipt. If it is missing, the agent must return `request_receipt` and call `request_receipt` with reason `receipt_required`. The agent must not create a reimbursement while evidence is missing.

## 4. Separate claimant and approver

### ER-2026.09 §4.1: Self-approval conflict

For this synthetic workflow, `employee_role: finance_approver` represents a finance approver submitting their own claim. Their `manager_approved: true` value cannot authorize that claim. The agent must return `escalate_finance` and call `open_finance_review` with reason `self_approval_conflict`.

## 5. Apply approval thresholds

### ER-2026.09 §5.1: High-value review

An otherwise valid claim greater than USD 1,000 requires finance review. The agent must return `escalate_finance` and call `open_finance_review` with reason `high_value_threshold`, regardless of manager approval.

### ER-2026.09 §5.2: Independent manager approval

An otherwise valid claim greater than USD 250 and no greater than USD 1,000 requires independent manager approval. If `manager_approved` is false, the agent must return `escalate_finance` and call `open_finance_review` with reason `manager_approval_missing`.

## 6. Approve eligible claims

### ER-2026.09 §6.1: Reimbursement creation

If no earlier rule blocks the claim, the agent must return `approve` and call `create_reimbursement` exactly once. The call must include the claim ID, amount, `USD` currency, idempotency key, and current policy version.

### ER-2026.09 §6.2: Eligible categories

The eligible categories used in this demonstration are `travel`, `meals`, `software`, `home_office`, and `training`.

## 7. Cite the rule actually used

### ER-2026.09 §7.1: Current-policy provenance

Every decision must cite the exact current rule identifier that supports it. Approval decisions must cite `ER-2026.09 §6.1`; an older policy citation does not satisfy this requirement even when the action happens to be correct.

