01
What it is
The task sounds small until you count. Someone opens an invoice, finds the beneficiary details, copies them into a payment order, checks the IBAN digit by digit. Five minutes per document, with a one-character error risk that costs a lost payment. Multiply by dozens of invoices a week.
The bot works where the work already lives — in the group chat.
A document is dropped in, the bot replies with structured details and stores them, so next time the same counterparty is recognised instantly. No interface is needed: Telegram is the interface.
02
capabilities
What it does
01
Details extracted from PDF
Company name, bank, accounts and identifiers pulled by the model as a structured response, not by regexes over text.
02
Works in group chats
The bot lives in the accounting chat and replies to the document itself. No separate app to open.
03
A growing counterparty database
Extracted details are stored — a repeat invoice from the same counterparty is recognised immediately.
04
Access control
An administrator system governs who may add users and see the details database.
05
Processing cost accounting
Every model call is metered, so the cost of processing a document is visible.
06
Inbound classification
A separate processor sorts the document stream and separates invoices from everything else.
03
architecture
How it works
01
Document into chat
02
PDF parsing
03
Model-driven extraction
04
Stored to database
05
Reply in chat
Under the hood
- A Python bot under systemd with restart-on-failure and file logging.
- SQLite as the store for details, administrators and history.
- Claude API for extraction under a strict response schema.
- A separate classifier and a call-cost tracker as independent modules.
- Role and scenario documentation sits next to the code — the bot can be handed over without us.
- Isolated from other services on the same host; it listens on nothing externally.
04
scale
Numbers
input format
~5 min
manual work saved per document
1
chat instead of an app
100%
calls with cost accounting