---
name: "expense_report_workflow"
description: "Run expense reports end to end: capture receipts at purchase, code each line, run policy checks for receipts, caps, duplicates, splits, and late filings, route approvals by amount, track reimbursement to payment, and close the month with a signed review. Use when someone submits, approves, audits, or pays expense reports, builds an expense policy, chases missing receipts, reconciles a corporate card, or runs a monthly expense close."
---

# Expense Report Workflow

## Purpose
Take an expense from the moment money is spent to the moment it is paid and filed, with no step held in one person's head. Receipt capture, coding, policy checks, approval routing, reimbursement tracking, and a monthly close that accounts for every dollar. A report is done when each line is paid, denied with a reason, or carried with an owner and a date.

This skill works for a solo operator filing their own costs, a manager approving a team, or finance running the whole cycle. It separates two things people mix up: company policy, which the company sets and can change, and tax substantiation rules, which come from IRS Publication 463 and Treasury Regulation 1.62-2 and do not bend to policy.

## Workflow
1. **Set or read the policy first.** Before touching a report, get the written policy: receipt threshold, categories that always need a receipt, category caps, submission window, approval tiers, blocked categories, per diem or actuals for travel, and the mileage method. If no policy exists, start from `assets/policy-template.json`, fill the numbers with the owner, and get them agreed in writing. Never present a company threshold as a tax rule.
2. **Capture at purchase.** Photograph or scan the itemized receipt the day of the purchase and attach it to the line. A card statement proves payment, not what was bought, so it never replaces an itemized receipt. Record the five substantiation elements from Publication 463 while they are fresh: amount, date, place, business purpose, and for meals the attendees and their business relationship.
3. **Code each line.** One line, one category, one project. Use the starter set in `references/categories-and-coding.md`. Split a mixed receipt into two lines. Record foreign currency as charged plus the converted home currency amount and the conversion source. Mileage comes from a log with date, miles, destination, and purpose, paid at the IRS rate in effect on the trip date, with the rate written on the report. Look the rate up each period, rates change and have changed mid-year.
4. **Run the policy check.** Export the report to CSV in the shape of `assets/expenses-template.csv` and run `bin/check_expenses.py expenses.csv --policy policy.json --out-dir out/`. It flags missing receipts, missing purposes, late filings, blocked categories, cap breaches, exact duplicates, possible splits under an approval boundary, round numbers, and per diem days that also carry itemized meals. Full rule definitions are in `references/policy-check-rules.md`. Fix hard flags before the report moves. Soft flags travel with the report as approver notes.
5. **Route approval by total exposure, not by line.** The checked output assigns an approver per line from the policy tiers. Worked sample tiers: up to $100 auto, $100 to $1,000 manager, $1,000 to $5,000 director, over $5,000 VP plus finance. If split lines combine over a boundary, route the combined amount. Pre-approval is required in most policies for large purchases and for travel, so check for a pre-approval record before approving those lines. The approver judges the business purpose. Software cannot do that part.
6. **Handle travel and per diem correctly.** Pick one method per day: per diem or itemized actuals, never both. For per diem, look up the GSA rate for the actual locality and travel dates, record the rate used, and still document time, place, and purpose. Per diem rates change by fiscal year and by city, so never pay from a memorized number. Self-employed filers use actual lodging cost with receipts, not a lodging per diem. Keep the accountable plan clock visible: advances go out within 30 days before the expense, substantiation lands within 60 days after, and excess advances come back within 120 days. Those are the safe harbor timings in Regulation 1.62-2. Miss them as a pattern and reimbursements risk treatment as wages.
7. **Pay and track to zero.** Pay approved out-of-pocket lines by the published method and date, and say what that date is when the report is approved. Track each report in a simple ledger: submitted, in review, approved, paid, held, denied. Corporate card lines are not reimbursed, they are reconciled: match every card statement line to a submitted expense and chase unmatched lines before close, in both directions.
8. **Close the month.** Run the checklist in `references/monthly-close.md`: cut-off chase for unsubmitted costs, card match, open advances against the 120 day window, a decision on every hold, an accrual for approved but unpaid reports, category totals against the prior two months, a random sample audit plus every line over the director threshold, and a signed close note with totals. The worked example in that file shows a real close on the sample data: 8 lines, $1,470.20 in, $676.70 payable, $678.50 held, 2 lines combined and rerouted as a split.

## Output Contract
- `checked.csv`: every submitted line with amount, assigned approver, verdict (approve, review, or hold), and flags.
- `summary.json`: line count, total submitted, payable now, held amount, totals by verdict, approver, and category, and flag counts.
- An approval note per report: approver, date, lines approved, lines held or denied with the reason for each, and the pay date promised.
- A reimbursement ledger entry per report that stays current until the paid date is recorded.
- A monthly close note: submitted, approved, paid, held, denied, and accrued totals, the unmatched card list, open advances, the sample audit result, and one policy change proposed from the months flag counts, signed by the finance lead.

## Operating Rules
1. No receipt, no fast lane. Lines missing a required receipt, a purpose, or a project code where one is required get held, not quietly paid.
2. Never pay a duplicate. Check the same cost across card and out-of-pocket, across people, and across months before payment. Exact duplicates are a hard hold, near duplicates go to a human.
3. Never split to dodge a threshold, and never approve split lines separately when you spot them. Combine and route at the full amount.
4. One travel method per day. A per diem day with itemized meal receipts on top is double claiming, whoever filed it.
5. Look up every rate you pay by: GSA per diem for the place and dates, IRS mileage for the trip date. Write the rate and its source on the report. A rate from memory is a guess.
6. Deadlines are part of the product. A fast, predictable pay cycle gets receipts filed on time. A slow one trains people to batch, forget, and reconstruct, and reconstructed records are weak records.
7. Denials carry a reason and a path: fix and resubmit, appeal to the next approver, or accept. A silent denial or a silent hold is a process failure.
8. The same rules apply to the most senior person in the business. Their reports get an independent approver, never self-approval.
9. This skill runs an expense process, it does not give tax advice. Deductibility calls, accountable plan design, and state reimbursement law go to the companys accountant or tax adviser.
10. Write like a human wrote it. No em dashes, no marketing phrasing, no filler.
