Worked examples
Home/Solutions/Invoice reconciliation
Invoices · order confirmations · delivery notes

Reading the invoice is the easy part.

Every line checked against the price list that was actually agreed — the right version, the right unit, the right article — with the reason attached to every verdict.

See how a line is checked

A dozen invoices and the current price list are enough. You get every line back, checked, either way.

The principle

The model reads and proposes. Deterministic rules decide.

Units, conversion factors, which price list applies, the arithmetic, the verdict and the totals are computed, not generated. Every number is reproducible from one invoice line and one price-list row. When something is uncertain, the line says so, with the reason.

THE MODEL READS AND PROPOSES RULES DECIDE 01 Read 5 BOX · 50 PCE @ 4.82 02 Classify product line 03 Identify 6204-2RS1-C3 · 0.96 04 Convert 1 BOX = 10 PCE 05 Price PL 2026-Q1 · 4.55/PCE 06 Route +5.9% · sure · dispute THE MODEL READS AND PROPOSES RULES DECIDE 01 Read 5 BOX · 50 PCE @ 4.82 02 Classify product line 03 Identify 6204-2RS1-C3 · 0.96 04 Convert 1 BOX = 10 PCE 05 Price PL 2026-Q1 · 4.55/PCE 06 Route +5.9% · sure · dispute
The life of one line, invoice INV-20418, line 3. Invented data.
Why it matters

Reading the document is not the hard part. Knowing your rules is.

Any model can pull numbers off a PDF. What decides whether a line is right is everything around the number: which price-list version applies on that date, which unit the price is expressed in, whether a 5 kg pack and a 2.5 kg pack are the same article, whether frozen may ever match fresh, which discount level the customer inherits, and whether the supplier’s own printed reference can be trusted at all. That is the same engine Claro runs on supplier catalogs (decode, match, normalise, validate, write back under rules) pointed at a different document, a different reference and a different reader.

What that looks like on a real line

Five boxes arrive. The invoice bills 50 pieces at 4.82 each. The framework price list in force that day says 4.55 per piece, for a box of 10. Every one of those facts sits on a different document, and the line is only right if all of them agree.

Reproducible verdictsEvery number traces to one invoice line and one price-list row.
Uncertainty statedWhen the engine is unsure, the line says so, with the reason.
Nothing droppedFees, zero-value and out-of-scope lines are labelled and kept.
The problem

What document reconciliation actually runs into

01

Framework prices change by half-year and quarter. The invoice has a date.

A line is priced against the list in force on the day it was issued, not today’s. When no version covers that date, as in the January between two framework lists, that is the answer, not a gap to paper over with the last known price.

02

Boxes are delivered, pieces are billed.

Five boxes on the delivery note, 50 pieces on the invoice. Both are read; the price applies to one of them, and the pack factor between them has to come from somewhere defensible. It is never invented.

03

The printed reference is not your article.

Suppliers print a manufacturer code, an EAN or their own number, and codes get superseded or contradicted by the designation beside them. The article is resolved from the designation and dimensions alone, then checked against the printed code, so a disagreement surfaces instead of spreading.

04

A different seal is a different part.

2RS never matches 2Z, C3 never matches CN, and A2 stainless is not A4, however similar the designations. Seal type, clearance class, material grade and dimensions work as hard filters: a close match that breaks one of them is not a match.

05

The discount is inherited, not printed.

A framework agreement sets the discount group, a volume tier adjusts it, a branch carries its own terms, sometimes across a whole product family. The condition on the line is rebuilt from the agreements, which live in PDFs.

06

Surcharges, zero-value and out-of-scope lines still count.

A small-order surcharge with no quantity, an alloy surcharge indexed to the month, a warranty replacement billed at zero, PPE outside coverage. None are dropped; each is labelled and kept out of the totals it does not belong in.

How Claro does it

What the engine does per line

  1. 01

    Read every value, with its position on the page

    Label, quantity, unit, unit price and printed reference, each with its page and position, so any value traces back to the document.

    On line 3DGBB 6204 2RS1 C3 · 5 BOX · 50 PCE · 4.82/PCE · ref 7316577118 · p.1 row 3
  2. 02

    Classify the line

    Product, fee, equipment or out of scope. Only product lines are priced; the rest go to their own totals, labelled, never dropped.

    On line 3product
  3. 03

    Identify the article in your price list

    Resolved from designation, dimensions, seal and clearance class first. The printed reference is then checked against the result, never trusted blindly. Hard filters remove candidates before anything is scored.

    Line 3 reads DGBB 6204 2RS1 C3 · ref 7316577118
    6204-2RS1-C3Deep groove ball bearing · 20 × 47 × 14 · contact seal 2RS1 · C30.96Chosen · printed reference agrees
    6204-2Z-C3Deep groove ball bearing · 20 × 47 × 14 · shield 2Z · C3label 0.92Hard filter · Seal type: 2RS ≠ 2Z
    6204-2RS1 CNDeep groove ball bearing · 20 × 47 × 14 · 2RS1 · CNlabel 0.90Hard filter · Clearance class: C3 ≠ CN
    6304-2RS1-C3Deep groove ball bearing · 20 × 52 × 15 · 2RS1 · C30.61Rejected · Dimension conflict: 6304 ≠ 6204
    A close label that breaks a hard filter is not a match, whatever its similarity. Invented data.
  4. 04

    Convert the invoice unit to your price unit

    The factor comes from the price-list row or a rule you validated, and its source is shown. When no factor is defensible, the line says so.

    Delivered5 BOXdelivery note DN-7731 · line 3
    × 10 PCE per BOX1 BOX = 10 PCE · from price-list row 214, pack “BOX 10”
    Invoiced50 PCEinvoice INV-20418 · line 3
    Price unitPCEprice list PL 2026-Q1 · row 214
    5 × 10 = 50 PCE✓ delivered and invoiced agree
    The factor is looked up, never guessed, and its source travels with the line. Invented data.
  5. 05

    Price against the version valid at the invoice date

    The version is chosen by the invoice date, the discount is rebuilt from the agreements, and the arithmetic is done by rules, not generated.

    PL 2025-H2 · 4.35/PCE1 Jul – 31 Dec 2025 PL 2026-Q1 · 4.55/PCE1 Feb – 30 Apr 2026 PL 2026-Q2 · 4.68/PCEfrom 1 May 2026 SepOctNovDecJanFebMarAprMayJun 20252026 Invoice · 14 Mar 2026 PL 2026-Q1 applies · 4.55/PCE Invoice · 22 Jan 2026 no version in force at this date nearest known: 4.35/PCE (PL 2025-H2), shown for context, not applied
    Condition on line 3discount group B3 · −42% framework 2026 · +3% volume tier · branch Milanorebuilt from the agreements
    A date in a gap is an answer: the line says no version was in force. Invented data.
  6. 06

    Route: two separate questions

    Is the engine sure, and what must a human do? Both are answered on every line, separately.

    On line 3Above price · +5.9% · engine: sure · you: dispute the price
Two questions, not one

“Needs a human” and “the engine is unsure” are not the same thing.

A line where the engine is completely certain and the price is wrong still needs a person: to contest it. That is the product working, not a doubt. So every line carries two badges.

Engine
SureReviewRequired
You
Dispute the priceSupply a missing gridQuery the quantityConfirm the articleNothing to do

Sure: the engine has no doubt about the line. Review: a person should look before it is used. Required: the engine cannot settle the line without one.

One illustrative batch · 388 lines · invented counts
Engine \ YouDispute the priceSupply a missing gridQuery the quantityConfirm the articleNothing to do
Sure3147–289
Review2–62111
Required–3212–
Engine sure, action needed: the 31 lines in the marked cell are priced with full certainty and priced wrong. That is the product working, not a doubt.
Inputs and outputs

What goes in, what comes back

Reads
Supplier invoicesOrder confirmationsDelivery notesPDF, scanned or digitalImagesExcel and CSVYour price list, in its versionsYour output templateYour written rules, if any
Returns
One row per line, in your templateRead valuesMatched articleConversion factor and its sourceExpected priceGap in % and in currencyVerdictConfidenceWhat a human should doA one-line explanationRejected candidates, with the reason
Delivered to
Your ERP or price-list systemAPIShared driveFTPEmail, file attached

On your infrastructure or ours. Claro writes back through files and APIs rather than certified connectors, so this list is a guide, not a limit.

Invoice · lineRead labelArticleFactor · sourceExpectedInvoicedGapVerdictConf.EngineYou
20418 · 3DGBB 6204 2RS1 C36204-2RS1-C310 PCE/BOX · PL row 2144.55/PCE4.82/PCE+5.9% · +13.50Above price0.96SureDispute the price
20418 · 4HEX BOLT M12X60 8.8 ZN933-1260-88Z100 PCE/BOX · PL row 3880.21/PCE0.21/PCE0.0% · 0.00Conforming0.97SureNothing to do
20418 · 5O-RING 40X3 NBR70OR-0400-30-N701 · priced per PCE0.38/PCE0.36/PCE−5.3% · −1.00Below price0.92SureNothing to do
20377 · 2CUTTING DISC 125X1.0 INOXCD-125-10-X25 PCE/BOX · PL row 512–1.95/PCE–No grid at that date0.95SureSupply a missing grid
20418 · 7BEARING HOUSING SNL 509–––86.40/PCE–Not in the price list0.44ReviewConfirm the article
20418 · 8SAFETY GLOVES EN388 SZ9–––2.90/PR–Out of scope0.99SureNothing to do
20418 · 9ALLOY SURCHARGE 03/2026–––18.00–Fee0.99SureNothing to do
20418 · 10DGBB 6205 2RS1 C3 · WARRANTY6205-2RS1-C310 PCE/BOX · PL row 2154.95/PCE0.00–Zero-value0.90ReviewSupply a missing grid
20418 · 11DGBB 6204 2Z C3 · ref 73165771186204-2Z-C3 ?10 PCE/BOX–4.61/PCE–To verify0.52RequiredConfirm the article
Row 20418 · 3, in plain language: invoiced at 4.82/PCE against 4.55/PCE in PL 2026-Q1, valid 1 Feb – 30 Apr 2026; 5 BOX × 10 PCE = 50 PCE agrees with the invoice, so the gap is 0.27/PCE, +13.50 on the line. Rejected: 6204-2Z-C3 (seal type, hard filter), 6204-2RS1 CN (clearance class, hard filter), 6304-2RS1-C3 (dimension conflict). Invented data.
No template per supplier

A new layout is read, not configured.

Some vendors build a dedicated template for every supplier. That does not scale, and the day a supplier changes its layout, it breaks. The engine reads the document by its structure, not by a stored template. When it gets something wrong, a reviewer corrects it once, with no developer and no new mapping, and the correction is remembered.

Memory

It remembers, and the memory survives your next price list.

Matches are remembered against supplier, normalised designation, dimensions and seal and clearance class, and deliberately not against the manufacturer reference, because that is the part most likely to change. When the price list is renegotiated and every code is renumbered, the decisions your team already made re-attach themselves.

Every correction narrows the next run

Review shrinks month over month. It does not reset when the price list does.

Built for operations and finance

Who it's for, and how Claro runs it.

Who it's for
MRO and industrial distributorsChecking supplier billing against framework price lists.
Plant purchasing and maintenanceHigh line counts of low-value parts and consumables.
Buying groups in technical tradeDiscount groups and volume tiers negotiated centrally.
Technical distributors and manufacturersReconciling order confirmations into the ERP.

The reader is operations, finance and purchasing, not the catalog team.

How it runs — invoice reconciliation
Read

Every value, with its position on the page.

Classify

Product, fee, equipment or out of scope.

Identify

The article, from the label; the printed code is checked.

Convert

Invoice unit to price unit, factor and source shown.

Price

Against the version valid at the invoice date.

Route

Engine certainty and your action, as two badges.

How fast

From first call to a working pilot in ~11 business days.

Day 0 · first call

We look at real documents

Bring a few genuine invoices and your price list, and we walk one line end to end, together.

Day 1–2 · documents in

No pre-cleaning

Invoices go in exactly as they arrived: scanned, skewed and multi-page is the normal case.

Day 3–5 · sample back

Checked & reviewable

Every line priced, with its verdict and reason, on your own documents, not a canned demo.

Day 8–11 · pilot live

Scoped and signed

Measurable outcomes agreed, a pilot running on one real flow.

Improve over time

Build once. Deploy across every team.

Claro learns your rules once and applies them continuously — every run makes the next one better, and the same layer serves catalog, sales, procurement and your agents without a rebuild.

Talk with us →
FAQ

Invoice reconciliation: common questions

Do you need a template for each supplier?

No. New layouts are read without setup. When a line is read wrong, a reviewer corrects it, not a developer, and the correction is kept.

What if the supplier's reference is wrong?

The article is resolved from the label on its own, then compared with the printed reference. A disagreement is surfaced, not silently resolved.

What happens when no price is valid at the invoice date?

The line says exactly that. The nearest known price can be shown for context, but it is never used as if it applied.

Do validated matches survive a new price list?

Yes. A match is keyed on supplier, designation, dimensions and clearance class, not on the reference, which is the part that changes.

Are fees and zero-value lines dropped?

No. They are labelled, assigned where they belong, and kept out of the totals they would distort.

Who fixes a wrong conversion factor?

A reviewer, in the interface or through the API. The corrected factor is stored and reused.

Does the model decide whether a price is right?

No. The model reads the document and proposes the article. Units, conversion factors, the applicable price-list version, the arithmetic, the verdict and the totals are computed by rules, so every number can be reproduced from one invoice line and one price-list row.

Is our data used to train models?

No. Your data configures your account and nothing else. It is not pooled and not used to train shared models.

Can it run on our own infrastructure?

Yes: in your cloud, or locally with no external calls. Delivery and hosting are decided with you.

How fast is it?

It is built for scheduled batches rather than instant response. An SLA is agreed per account.

Start with a dozen invoices

See every line checked on your own documents.