Internal build Procurement 2026

The cheapest quote was for the wrong quantity, and the automation caught it

Eight linked workflows that compare supplier quotations, recompute every figure, and refuse to recommend anything they cannot substantiate.

Running, internal

A diagram of the quotation comparison pipeline: five supplier quotes entering a set of checks, two being excluded and three ranked.
8
Linked workflows
20
Unit tests, plus 2 negative controls
The negative controls have to fail. A suite where everything passes cannot tell you the checks are wired up.
£1,047
Gap between the apparent winner and the real one
On the sample run: £5,946 stated by the excluded quote against £6,991 delivered by the one actually recommended.
0
Figures taken on trust
Every total is recomputed from quantity and unit price.

Comparing quotes looks like arithmetic and is actually a trust problem

Five suppliers quote against one request for 120 brackets. Ranked on the totals the suppliers themselves stated, Calder Metalworks wins at £5,946. A spreadsheet would pick Calder. So would most automation, faster.

Calder quoted for 100 units. Its arithmetic is internally perfect. It is simply not a quote for what was asked for, so it is excluded and a re-quote is requested rather than being scaled up to look comparable. A quote for a different scope is not a cheaper quote.

Separately, one supplier’s stated total was £200 short of its own line items. The comparison uses the recomputed figure, not the stated one, and flags the discrepancy for confirmation instead of silently correcting it.

It has to be able to refuse

The useful property is not that it ranks quickly. It is that it will decline to produce a recommendation it cannot substantiate, and that you can watch it decline. Two of the five quotes never reach the ranked list: one for scope, one because the supplier is not on the approved list.

That is the same principle behind everything automated here. A model can draft, summarise and extract. It does not get to be the last thing between a number and a decision.

Proving it rather than asserting it

Running the verification script rebuilds the workflows from source, imports them into a clean n8n data directory, and executes them. Five runs have to pass and two have to fail. If a check is accidentally disconnected, the negative controls start passing and the suite goes red.

The extraction step that reads a supplier PDF has a live API path that has never been called in anger. Every run in the repository uses recorded responses, which is stated in its README rather than left for someone to discover.

What this involved

  • Workflow design
  • Automation
  • Verification harness

Built with

  • n8n
  • Node.js
  • Anthropic API