Acomba and AI: from invoice to ledger entry
Acomba remains the book of record. AI can become the layer that reads the documents, prepares the entry and raises the exceptions. How far can you automate without losing the audit trail?
Since September 1, 2026, every French business subject to VAT must be able to receive a structured electronic invoice through an approved platform. In Canada, no equivalent requirement has been announced to date for business-to-business exchanges. But the signal is clear: everywhere, the invoice is ceasing to be a document you read and becoming data you process.
For a Quebec SME, the practical question is not "when will we be forced to." It is: what part of the accounting cycle can reasonably be prepared by a machine — and what has to stay signed by a person?
The expensive part is not the data entry, it is the reading
A supplier invoice that arrives by email has to be opened, understood, matched against a purchase order, coded to the right account, taxed correctly, approved, then posted.
The firm Ardent Partners measures this cycle every year. Its 2025 report, drawn from 212 accounts payable professionals, gives an average of US$9.40 per invoice and 9.2 days of processing, with an exception rate of 14%. Only one invoice in three goes through the process without human intervention. The best-performing organizations come down to $2.78 and 3.1 days — and, notably, to an exception rate of 9% against 22% for everyone else.
Hold on to that last comparison: what separates the best from the rest is not entry speed. It is the number of files that go off the rails.
Acomba stays the ledger; AI becomes the layer that prepares
Acomba, published by ACCEO Solutions, is an accounting system that has been installed for more than thirty-five years, and which its publisher reports in use at more than 40,000 Canadian SMEs and 1,200 accounting firms. It is a set of books: it records, it balances, it produces the statements. It is not a document reader, and it has never claimed to be.
So the useful angle is not to replace Acomba. It is to hand it work that is already prepared.
In concrete terms, the cycle breaks into three stages.
The reading. The supplier sends its PDF to a receiving address. An AI layer extracts the supplier, the invoice number, the date, the amounts, the GST, the QST and the tax registration numbers. The original PDF is not transformed: it remains the supporting document.
<figure>
<svg viewBox="0 0 720 244" width="720" height="244" class="w-full h-auto" role="img" aria-label="What AI reads in a supplier invoice — and what it does not replace: the original PDF remains the supporting document."><title>What AI reads in a supplier invoice — and what it does not replace: the original PDF remains the supporting document.</title><rect x="0" y="0" width="720" height="244" fill="#ffffff"/><rect x="8" y="56" width="196" height="104" rx="12" fill="#0f172a" stroke="#0f172a" stroke-width="1.5"/><text x="106" y="100" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="15" fill="#ffffff" text-anchor="middle" font-weight="600">Supplier invoice</text><text x="106" y="124" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="12" fill="#94a3b8" text-anchor="middle" font-weight="normal">PDF received by email</text><text x="238" y="98" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="11" fill="#d97706" text-anchor="middle" font-weight="normal">reading</text><line x1="212" y1="108" x2="259" y2="108" stroke="#d97706" stroke-width="2.5" stroke-linecap="round"/><path d="M258 103 L268 108 L258 113 Z" fill="#d97706"/><rect x="276" y="24" width="436" height="168" rx="12" fill="#f8fafc" stroke="#e2e8f0" stroke-width="1.5"/><text x="298" y="54" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="11" fill="#64748b" text-anchor="start" font-weight="600">EXTRACTED FIELDS</text><circle cx="302" cy="86" r="3" fill="#0165fd"/><text x="314" y="90" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="13" fill="#1e293b" text-anchor="start" font-weight="normal">Supplier</text><circle cx="302" cy="120" r="3" fill="#0165fd"/><text x="314" y="124" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="13" fill="#1e293b" text-anchor="start" font-weight="normal">Invoice number</text><circle cx="302" cy="154" r="3" fill="#0165fd"/><text x="314" y="158" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="13" fill="#1e293b" text-anchor="start" font-weight="normal">Date</text><circle cx="516" cy="86" r="3" fill="#0165fd"/><text x="528" y="90" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="13" fill="#1e293b" text-anchor="start" font-weight="normal">Amount</text><circle cx="516" cy="120" r="3" fill="#0165fd"/><text x="528" y="124" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="13" fill="#1e293b" text-anchor="start" font-weight="normal">GST / QST</text><circle cx="516" cy="154" r="3" fill="#0165fd"/><text x="528" y="158" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="13" fill="#1e293b" text-anchor="start" font-weight="normal">Registration no.</text><text x="8" y="226" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="12" fill="#64748b" text-anchor="start" font-weight="normal">The original PDF is kept as is: supporting document, six years, in readable form.</text></svg>
<figcaption>What AI reads in a supplier invoice — and what it does not replace: the original PDF remains the supporting document.</figcaption>
</figure>
The matching. The invoice is reconciled against the purchase order and the goods receipt. Three lines agree; the fourth comes in at $1,412.50 when $1,350.00 had been ordered. The machine does not settle that gap. It names it and sends it to a person, with the three documents side by side.
<figure>
<svg viewBox="0 0 720 256" width="720" height="256" class="w-full h-auto" role="img" aria-label="Matching does not try to settle everything. It separates what may proceed from what someone must see."><title>Matching does not try to settle everything. It separates what may proceed from what someone must see.</title><rect x="0" y="0" width="720" height="256" fill="#ffffff"/><rect x="8" y="14" width="122" height="32" rx="8" fill="#f1f5f9" stroke="#e2e8f0" stroke-width="1.5"/><text x="69.19999999999999" y="35" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="12.5" fill="#1e293b" text-anchor="middle" font-weight="normal">Purchase order</text><rect x="142.39999999999998" y="14" width="84" height="32" rx="8" fill="#f1f5f9" stroke="#e2e8f0" stroke-width="1.5"/><text x="184.59999999999997" y="35" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="12.5" fill="#1e293b" text-anchor="middle" font-weight="normal">Receiving</text><rect x="238.79999999999995" y="14" width="69" height="32" rx="8" fill="#f1f5f9" stroke="#e2e8f0" stroke-width="1.5"/><text x="273.4" y="35" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="12.5" fill="#1e293b" text-anchor="middle" font-weight="normal">Invoice</text><rect x="8" y="74" width="484" height="52" rx="12" fill="#f8fafc" stroke="#e2e8f0" stroke-width="1.5"/><path d="M28 98 l6 7 l12 -15" fill="none" stroke="#059669" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><text x="60" y="96" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="14" fill="#1e293b" text-anchor="start" font-weight="600">3 lines agree</text><text x="60" y="116" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="12" fill="#64748b" text-anchor="start" font-weight="normal">they proceed without intervention</text><rect x="8" y="140" width="484" height="64" rx="12" fill="#fffbeb" stroke="#fcd34d" stroke-width="1.5"/><text x="30" y="166" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="14" fill="#92400e" text-anchor="start" font-weight="700">1 line deviates</text><text x="30" y="188" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="12" fill="#92400e" text-anchor="start" font-weight="normal">$1,350.00 ordered → $1,412.50 invoiced</text><line x1="502" y1="172" x2="539" y2="172" stroke="#d97706" stroke-width="2.5" stroke-linecap="round"/><path d="M538 167 L548 172 L538 177 Z" fill="#d97706"/><rect x="556" y="140" width="156" height="64" rx="12" fill="#0f172a" stroke="#0f172a" stroke-width="1.5"/><text x="634" y="168" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="13" fill="#ffffff" text-anchor="middle" font-weight="600">Exception</text><text x="634" y="188" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="11" fill="#94a3b8" text-anchor="middle" font-weight="normal">to a named person</text><text x="8" y="238" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="12" fill="#64748b" text-anchor="start" font-weight="normal">The machine does not settle the gap: it names it, and passes it on with all three documents.</text></svg>
<figcaption>Matching does not try to settle everything. It separates what may proceed from what someone must see.</figcaption>
</figure>
The proposed entry. The AI proposes the expense account, the tax breakdown and the cost center, drawing on the history of that same supplier. A manager approves. The entry then goes into Acomba through the integration routes the publisher provides for developers — development kit, web services, a bridge license or import files.
<figure>
<svg viewBox="0 0 720 242" width="720" height="242" class="w-full h-auto" role="img" aria-label="The approval chain is also the audit trail: every link leaves a dated record."><title>The approval chain is also the audit trail: every link leaves a dated record.</title><rect x="0" y="0" width="720" height="242" fill="#ffffff"/><rect x="8" y="20" width="200" height="96" rx="12" fill="#f8fafc" stroke="#e2e8f0" stroke-width="1.5"/><text x="108" y="56" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="14.5" fill="#1e293b" text-anchor="middle" font-weight="600">AI proposes</text><text x="108" y="80" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="11.5" fill="#64748b" text-anchor="middle" font-weight="normal">account, taxes,</text><text x="108" y="98" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="11.5" fill="#64748b" text-anchor="middle" font-weight="normal">cost center</text><rect x="260" y="20" width="200" height="96" rx="12" fill="#f8fafc" stroke="#e2e8f0" stroke-width="1.5"/><text x="360" y="56" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="14.5" fill="#1e293b" text-anchor="middle" font-weight="600">A manager approves</text><text x="360" y="80" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="11.5" fill="#64748b" text-anchor="middle" font-weight="normal">one click,</text><text x="360" y="98" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="11.5" fill="#64748b" text-anchor="middle" font-weight="normal">a named person</text><rect x="512" y="20" width="200" height="96" rx="12" fill="#0f172a" stroke="#0f172a" stroke-width="1.5"/><text x="612" y="56" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="14.5" fill="#ffffff" text-anchor="middle" font-weight="600">Acomba</text><text x="612" y="80" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="11.5" fill="#94a3b8" text-anchor="middle" font-weight="normal">the entry reaches</text><text x="612" y="98" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="11.5" fill="#94a3b8" text-anchor="middle" font-weight="normal">the general ledger</text><line x1="216" y1="68" x2="243" y2="68" stroke="#0165fd" stroke-width="2.5" stroke-linecap="round"/><path d="M242 63 L252 68 L242 73 Z" fill="#0165fd"/><line x1="468" y1="68" x2="495" y2="68" stroke="#0165fd" stroke-width="2.5" stroke-linecap="round"/><path d="M494 63 L504 68 L494 73 Z" fill="#0165fd"/><rect x="8" y="140" width="704" height="52" rx="12" fill="#eff6ff" stroke="#bfdbfe" stroke-width="1.5"/><text x="28" y="171" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="12.5" fill="#1e40af" text-anchor="start" font-weight="700">Logged:</text><text x="95.19999999999999" y="171" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="12.5" fill="#1e40af" text-anchor="start" font-weight="normal">proposal · software author · approver · timestamp</text><text x="8" y="224" font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" font-size="12" fill="#64748b" text-anchor="start" font-weight="normal">This is the required audit trail: from source document through to the summary account, with no gaps.</text></svg>
<figcaption>The approval chain is also the audit trail: every link leaves a dated record.</figcaption>
</figure>
There is nothing spectacular about this breakdown. That is exactly what makes it workable.
What the law requires, and what does not change
Many accounting automation projects discover these obligations after the fact. Yet they are simple, and old.
Revenu Québec requires records and supporting documents to be kept for six years after the last year they relate to. On electronic media, the documents must be kept "in an intelligible form on that same medium," and the business must take the steps needed to ensure and maintain their integrity. Destroying them before that term requires a written, signed request.
The Canada Revenue Agency, in its circular on electronic record keeping, adds two decisive points. First, an electronic record is still required in a readable electronic format, even if a paper copy exists: printing releases you from nothing. Second, the audit trail must carry enough detail to link the supporting documents through to the summary accounts. If the paper is discarded after scanning, the imaging must meet the CAN/CGSB-72.11-93 standard.
That audit trail is exactly what a well-designed AI system produces naturally: the proposal, the model that made it, the approver, the timestamp, and the source document. Badly designed, it produces an entry that nobody can trace back to anything.
The new problem: accountability cannot be automated
The Ordre des CPA du Québec is unambiguous in its guide on artificial intelligence: "As a CPA, you remain fully responsible for the decisions made, the work performed and the deliverables" (our translation). AI is presented there as a support tool that does not stand in for professional judgment.
The asymmetry is worth understanding: the productivity gain goes to the business, the responsibility does not move an inch. A system that speeds up processing while making decisions less traceable moves the risk without moving the burden.
A word on what we do not know. The 95% to 99% extraction rates advertised by vendors rest on no published methodology, and none of them was established in a Quebec setting, bilingual, with GST and QST. Insist on a trial run on your invoices.
The Belarel perspective
The reflex, when automating accounting comes up, is to ask how far AI can go. That is the wrong question. The right one is: what has to stay provable?
Automate the data entry, not the accountability. A machine can read a document better and faster than a tired human on a Thursday afternoon. It cannot answer an auditor, and it cannot carry a professional's signature.
Good design is therefore design in which AI raises more exceptions, not fewer. A system that lowers the exception rate by settling the doubtful cases itself is not improving the accounting: it is moving errors to a place where nobody looks at them any more.
Three questions before starting a project
What is the system allowed to post on its own? In practice: recurring invoices, matched, under a threshold, from a known supplier. Everything else is an exception, and that is normal.
Is the trail complete? From the PDF received through to the general ledger account, with no gaps, with the name of the person who approved it — and the documents kept six years, readable and intact.
Who answers at audit time? If the answer is "the software," the project is not ready.
An SME's accounting does not need to be faster at any cost. It needs to be faster without becoming less explainable. That is a constraint, and it is also what separates a good AI project from a nice demonstration.