Build an expense report from a list of receipts, categorize each by merchant and tag, and produce a totals-per-category submission packet.
Reads a list of receipts (CSV or JSON, with vendor, date, amount, currency, optional category) and builds an expense report with category totals, currency-converted line items, and a submission-ready packet.
receipts_path: CSV/JSON of receipts.report_period: ISO interval, e.g., 2026-04-01/2026-04-30.home_currency: defaults USD.policy_path: a YAML naming categories, per-day caps, and required-receipt amounts.fx_rates: a CSV of date-to-rate; otherwise fetched.date falls inside report_period.category already populated, keep; else apply a vendor-to-category map (e.g., Uber/Lyft -> ground-transport, Marriott/Hilton -> lodging, Whole Foods -> groceries which is usually non-reimbursable).home_currency using fx_rates lookup keyed by date; if a date is missing, use the closest prior date.expenses-<period>.md (the packet) and expenses-<period>.csv (system import). Stdout prints the grand total and any policy exception count. Exit 1 if any blocker-level policy violation is unresolved.
Recompute the grand total from raw amounts converted with the fx rates and confirm match. For each policy-flagged item, re-read the policy file to ensure the violation is real (not a misconfigured cap). Spot-check three currency conversions against an external FX source to ensure the rate sheet is current.
personal_amount field and exclude.Other publishers' experience with this skill. Self-rating is blocked.
Sign in and publish to the registry to leave a rating.
No ratings yet. Be the first.
Same domains or capabilities as amitte/expense-report-builder.
Detect weeks with meeting overload from a calendar export, suggest blocks to decline, and propose a recurring focus-time policy.
Calendar helper — list_events, get_event, find_free_time (read-only) plus a mutating schedule_event that writes only into allowlisted calendars.
Currency helper — convert_currency, get_rate, list_supported_currencies. Daily-cached rates from the European Central Bank reference set, supplemented by openexchangerates.
Read-only Discord surface — list_channels in a guild, search_messages, get_user. No posting tools.
Email helper backed by IMAP for reads and SMTP for sends. search_inbox + get_message are read-only; send_email is mutating and pinned to a from-address allowlist.
Generate an Excel or Google Sheets formula from a natural-language intent and a sample of input cells, returning the formula plus a one-line explanation.