Skip to content

AI Expense Receipt Assistant

Employees send a receipt photo to a Telegram bot; a vision model reads it, a policy engine checks it, managers approve with one tap, and finance gets a monthly pack.

Year
2026
Role
Solo: workflow, policy engine, schema
Status
Shipped
Context
Open source
Automation · n8n · Vision LLM2026

Results

  • 6

    pipeline stages

    Intake to monthly finance pack

  • 9

    default policy rules

    Reject, send to manager, or auto-approve

Only registered, active employees can submit; anyone else gets an onboarding message with their Telegram ID. A receipt photo goes to GPT-4.1 mini vision at temperature 0, which fills a schema-locked expense record where anything missing becomes null instead of a guess. Receipt text is treated as untrusted input.

A configurable policy engine then rejects what can’t be valid (not a receipt, no total, older than 90 days, duplicates) and routes the rest: over a category limit, above the auto-approve ceiling, alcohol, weekend purchases or low confidence go to the employee’s manager with Approve and Reject buttons, escalating after 72 hours. Everything else is auto-approved.

An idempotent upsert writes each decision to PostgreSQL with an audit trail, the employee gets a confirmation or a reason, and on the 1st of every month finance receives an HTML summary by department and category with a CSV attached. MIT-licensed, imported into n8n as one workflow.