Expense hub
Re-billing company expenses
Statements for fuel, phones, insurance and internet arrive by e-mail and end up as an overview for each holder. No model: the parsers are deterministic and the totals match to the cent.
The problem
Company expenses for fuel, phones, car insurance and internet have to be split between individual people every month. Statements come in different formats and manual retyping is slow and error-prone.
How it works
- 1
Attachment from mail
IMAP triage verifies the sender by DKIM and saves the attachment with a descriptor file.
- 2
Input check
Expense hub verifies the format, the file hash and its origin.
- 3
Parsing
Its own parsers for spreadsheets, PDF and HTML turn the statement into transactions.
- 4
Normalisation
Transactions have a unique key, so the same statement is never counted twice.
- 5
Approval
Billing goes through draft, approved, posted. Nothing moves on without approval.
- 6
Overview for the holder
Each holder gets an e-mail overview of their items.
Guardrails
- Nothing is posted without an approved billing run.
- Its own spreadsheet reader with limits against crafted files (size, zip bomb, XXE, row count).
- Total checks: an incomplete file is rejected as a whole, not partly.
- A preview mode and a rollback procedure.
The best AI architecture sometimes contains no model. An agent that recognises and verifies the attachment, with a deterministic parser behind it, is more reliable than a model reading an invoice.
More case studies
IMAP triage
Sorting company mail and drafting replies
In the morning it is clear what is on fire. The agent sorts the NOC, CSIRT, billing and sales mailboxes and drafts replies to selected messages. It cannot send them.
GitLab triage
A daily issue digest for developers and teams
Every morning, what changed in GitLab and what is expected of whom. Code builds the sections; a local model only adds summaries. Client data never sees the cloud, and code enforces it.
Day digest
A morning overview from company systems
One e-mail before the day starts: calendar, tasks, mail, GitLab and Mattermost. The agent calls no model itself; it assembles the output of the other agents.
Delegator
Assigning tasks in plain text in chat
You tell a Mattermost bot what needs doing and who should do it. The model proposes a task, code checks the assignee and deadline, you confirm with a thumbs-up. Then the bot watches how the task goes.
No-obligation consultation
Let’s find the first job for AI in your company.
An hour’s conversation about where your data lives, which processes slow you down and what of it may leave your network. You leave with a proposal for a first pilot, not a tool demo.

Built and is accountable for the AI layer at Nux
Radek Růžička
Managing Director and CTO, Nux s.r.o.