Construction procurement

Three-way matching in construction procurement: order, receipt, bill

Three-way matching is the discipline of paying only for what was ordered, at the price that was agreed, once it has actually arrived. On a construction site, where materials are delivered in parts and bills arrive late, it is the control that keeps a supplier bill from becoming a project cost nobody authorised.

Last revised

What three-way matching is

Three documents describe one purchase from three points of view. The purchase order says what was ordered, in what quantity, at what price. The receipt — a goods receipt note for materials, a service receipt for work — says what actually arrived or was performed. The vendor bill says what the supplier wants to be paid. Three-way matching is the rule that a bill is accepted only where all three agree: the quantity billed was received, the quantity received was ordered, and the price billed is the price on the order.

On a construction project the three rarely arrive together. Steel comes in four deliveries against one order; the supplier bills the first two together; a site engineer confirms the third a week after it landed. Without a systematic match, the bill is approved on its own face, and a project pays for a delivery that never came, or twice for one that did.

The chain, as BuilderOne enforces it

In BuilderOne’s Procurement module the match is not a check run on a finished bill; it is built into what each document is allowed to reference. Each link can only be created against an approved predecessor, and it copies its facts from that predecessor rather than accepting them from the person typing.

The procurement chain and the rule each link enforces
DocumentCreated only againstWhat it copiesThe hard rule
Purchase requestA project and cost category—The request states the need; it commits nothing.
RFQ and supplier quotationsAn approved requestThe requested linesOne quotation is selected and awarded.
Purchase orderThe awarded quotationItem, quantity, unit price and provenance from the quotationAt most one live order per awarded quotation; totals are derived, never typed.
Goods / service receiptAn issued purchase orderThe supplier, from the orderCumulative received quantity per order line can never exceed the ordered quantity. No tolerance.
Vendor billAn approved receiptSupplier and order from the receipt; unit price from the order lineCumulative billed quantity per receipt line can never exceed the received quantity. The line starts at the order’s price; the supplier’s invoiced price is checked against it within your tolerance.

Read the last two rows together and the three-way match falls out of the structure. A bill line must name a receipt line; that receipt line must name an order line; the price is the order’s; the quantity cannot exceed what was received, which cannot exceed what was ordered. There is no separate “matching step” to skip, because a bill that does not match cannot be constructed.

Quantity, price and receipt — the three tests

  • Quantity. A receipt may be partial — three deliveries against one order line are three receipts — but the running total can never pass the ordered quantity. A bill may cover part of a receipt, but its running total can never pass the received quantity. Both limits are strict: there is no percentage tolerance, because a tolerance is a quantity nobody approved.
  • Price. Each bill line starts at the awarded purchase-order price, and the supplier’s own invoiced price and invoice total are recorded beside it. A difference within the tolerance you configure is accepted; anything outside it becomes a match exception, and the bill cannot be submitted until someone allowed to approve vendor bills accepts it with a reason — so a higher rate is never absorbed silently into an approved bill.
  • Receipt. Nothing can be billed that has not been received and approved as received. A service receipt does the same job for work as a goods receipt does for materials, so a consultant’s bill is matched to a confirmed service receipt exactly as a steel bill is matched to a delivery.

What happens to an exception

A system with no tolerance needs a clear answer for the cases that do not fit. In BuilderOne the answer is that the exception is resolved on the document that owns it, never on the bill:

Common exceptions and where each is resolved
ExceptionWhat the system doesWhere it is resolved
Supplier delivers more than orderedThe receipt cannot record the excess against that order line.A further order (or an amended quotation and order) for the excess, then a receipt against it.
Supplier bills at a different priceOutside your tolerance, the bill raises a match exception and cannot be submitted.An approver accepts the exception with a reason, or it is settled with the supplier — a revised order or a debit note.
Bill arrives before the goodsNo approved receipt exists to bill against, so the bill cannot be created.Receive and approve first; the bill follows.
Partial deliveryA partial receipt; the order line stays open for the remainder.Further receipts until the ordered quantity is reached, or the order is closed.
Wrong project on the requestProject and cost category flow from the request through every document.Correct at the request or order stage before receipt, not by re-keying the bill.

Project attribution and the ledger

Because the supplier, project and cost category are the same records the Construction module uses, a matched vendor bill lands on the project it was bought for without anyone re-typing it — and appears in that project’s cost position beside the contractor bills. Approving the bill in Procurement records that the business accepts it; it writes no ledger entry itself.

The general ledger then takes over through two governed posting adapters: the vendor bill accrual (the cost, attributed to the project, against a payable) and the vendor payment (the payable settled from a cash or bank account). Payment readiness is therefore a property of the chain: a bill is ready to pay when it is matched, approved and accrued — and not before.

Questions to ask of any procurement system

  • Can a vendor bill be created with no receipt behind it? It should not be possible.
  • Where does the bill’s unit price come from — the order, or the keyboard?
  • Can received quantity exceed ordered quantity, or billed exceed received? By how much, and who approved the tolerance?
  • Does the project attribution travel from the request to the bill, or is it re-entered at each step?
  • Is “approved in procurement” the same as “posted to the ledger”? It should be two separate, traceable events.

See BuilderOne running on a business like yours

A walkthrough of about half an hour with the team that builds it — on your kind of projects, units and billing, not a canned slideshow.

  1. Tell us what you run. Four fields — it takes under a minute.
  2. We get back to you to arrange a time that suits you.
  3. We walk through your workflow — sale, rent, site or books — in the real product.