Formats vary widely
Invoices, waybills, weighbridge slips and fuel receipts; every one has its own fields, and every vendor's template differs. A template-bound reader wouldn't hold up.
Invoices, waybills, weighbridge slips and fuel receipts each carry completely different fields; all of them had to be typed into the books by hand. We built Doksan9 as a system that reads a photographed document, pulls out its fields, and puts every result up for approval.
An invoice, a waybill and a weighbridge slip are all part of the same business, but their fields have nothing in common — one wants an amount and VAT, another a plate number and a description of the goods, another a tare and net weight. All of them landed in the same books, typed in by hand.
Invoices, waybills, weighbridge slips and fuel receipts; every one has its own fields, and every vendor's template differs. A template-bound reader wouldn't hold up.
A vision-language model doesn't always read correctly, so nothing is ever saved automatically. Every result goes to a person first; a document only reaches the books once it has been checked and approved.
Invoices carry a name, address, tax number and vehicle plate; that data leaves as an image, sent straight to a cloud vision-language model for field extraction.
The user photographs a document with the phone or picks one from the gallery; the image is queued. A multimodal vision-language model reads the fields directly out of the image — there's no separate text-recognition step. Every result lands in a pending-approval state; the user reviews the fields, and only once they're approved does the document get saved and filed.
{ "total": "1845.60", "date": "14/03/2026", "vat": "307.60", "description": "ABC Market", "companyId": "5f2e0c1a-....-....-....-............", "operation": true}{ "total": "1845.60", "date": "14/03/2026", "vat": "307.60", "description": "ABC Market" }
The first version read documents with Azure OpenAI's GPT-4 Vision. We later moved to Google's Gemini 2.0 Flash; the document flow and the approval step stayed the same, only the model reading the image changed.