Three-way match explained for construction material deliveries

AP teams have run three-way match for decades: a purchase order says what was ordered, a receipt confirms what showed up, and an invoice asks to get paid. All three documents have to agree before a check goes out, quantity ordered, quantity received, quantity billed, the same number three times. On a material-heavy job, that's where the yard comes in.
On a material-heavy job, the receipt leg is where things fall apart, and it's not the accounting software's fault.
Why the receipt side breaks down on a laydown yard
A PO is a clean document. It lists 400 joints of 24-inch pipe, or 120 cubic yards of aggregate, or 60 precast barrier sections, with a price attached to each line. An invoice is also clean, because the supplier generated it from their own records and it matches their delivery ticket almost by definition.
The receipt is the messy one. On most jobs it's whatever a foreman wrote on a packing slip when the truck showed up, or a count a laborer did between other tasks, or nothing at all if the delivery landed on a Friday afternoon and got signed for without anyone walking the load. Loose material is worse. Nobody's measuring a gravel pile with a tape measure, so "received" quantity for aggregate is usually an eyeball guess that gets written down once and never checked again.
That's the gap a three-way match is supposed to close, and it's exactly the leg most yards can't produce. You end up matching a real PO against a real invoice with a receipt number that's really just trust.
What a real material three-way match looks like
For discrete stock, the match is a count. Pipe joints, precast units, rebar bundles, pallets of fittings. The PO says 400 joints shipped in four loads of 100. The receipt has to state how many joints are sitting on dunnage in rows 3 through 6, counted independently of the delivery ticket. If the supplier short-shipped 40 joints and billed for 400 anyway, the only way that surfaces is a count that doesn't come from the same paperwork trail as the invoice.
For loose material, the match is a volume. A 120-cubic-yard PO for crushed aggregate gets reconciled against what's sitting in the stockpile, not against a truck count times a nominal load size, which is how most "received" quantities for aggregate get written down in the first place. A truck that's supposed to carry 18 tons and shows up light doesn't always get caught, because nobody's weighing the pile, just counting trucks.
The whole point of the three-way match is that the receipt has to be independent of the other two documents. If your receiving record is built from the same delivery ticket the supplier used to write the invoice, you don't have three data points, you have one data point copied twice. A real reconciliation needs a receipt generated separately, by someone walking the yard and counting what's physically there, measuring what's physically piled there, with no input from the PO or the invoice.
Where the weekly count fits
That's the piece project controls teams have historically had to do by hand: walk the rows, tally joints, pace off a stockpile and guess at its volume, then sit down with the PO and the invoice and try to explain the gap. It's slow, it depends on who did the walk that week, and a pile volume estimated by eye is rarely close enough to catch a real discrepancy.
A weekly drone flight over the yard turns that walk into a counted, measured record, pipe joints and precast units tallied, rebar bundles tallied, aggregate stockpiles measured for volume, so the receipt leg of the match is a number you can stand behind next to the PO and the invoice. If your yard count is still the weakest link in your reconciliation, that's the gap this is built to close.