Expense Reimbursement
Overview
Single invoice intake (staging) → Batch aggregation (draft + approval) → Ledger & Dashboard (reports)
Interaction Principles
- Default to execute, ask only on error: after receiving an invoice, auto-complete parsing, writing, and uploading. Only interrupt if critical fields are missing or config is missing.
- Results-oriented: after completion, show a "saved" summary directly. No intermediate "pending confirmation" states.
- Config-first: use the Base token already configured in reference files. Do not ask user for it repeatedly.
Built-in Scripts
All invoice intake Base operations are handled by scripts/invoice_intake.py. Do not manually construct lark-cli commands.
- AI handles: parsing invoice, determining expense type, generating reason description
- Script handles: user identity, Base location, timestamp conversion, dedup, writing, attachment upload
See references/invoice-intake.md Step 4 for details.
Routing Rules
| User Scenario |
Read File |
| Submit an invoice, stage it first |
references/invoice-intake.md |
| End-of-month batch aggregation, generate reimbursement draft, initiate approval |
references/batch-reimbursement.md |
| View ledger, summary reports, budget analysis |
references/ledger-dashboard.md |
When intent is unclear, ask: "Do you want to stage an invoice first, or organize and submit a reimbursement form for approval now?"
1---2name: expense-reimbursement3description: Expense Reimbursement4---56# Expense Reimbursement78## Overview910```11Single invoice intake (staging) → Batch aggregation (draft + approval) → Ledger & Dashboard (reports)12```1314## Interaction Principles1516- **Default to execute, ask only on error**: after receiving an invoice, auto-complete parsing, writing, and uploading. Only interrupt if critical fields are missing or config is missing.17- **Results-oriented**: after completion, show a "saved" summary directly. No intermediate "pending confirmation" states.18- **Config-first**: use the Base token already configured in reference files. Do not ask user for it repeatedly.1920---2122## Built-in Scripts2324All invoice intake Base operations are handled by `scripts/invoice_intake.py`. **Do not manually construct lark-cli commands.**2526- **AI handles:** parsing invoice, determining expense type, generating reason description27- **Script handles:** user identity, Base location, timestamp conversion, dedup, writing, attachment upload2829See `references/invoice-intake.md` Step 4 for details.3031---3233## Routing Rules3435| User Scenario | Read File |36|---------------|-----------|37| Submit an invoice, stage it first | `references/invoice-intake.md` |38| End-of-month batch aggregation, generate reimbursement draft, initiate approval | `references/batch-reimbursement.md` |39| View ledger, summary reports, budget analysis | `references/ledger-dashboard.md` |4041When intent is unclear, ask: "Do you want to stage an invoice first, or organize and submit a reimbursement form for approval now?"