Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Reconciles a supplier invoice against its purchase order and goods receipt (three-way match) — matches line items by SKU/description, applies price and quantity tolerance bands, flags each mismatch by type, and returns an approve / hold / escalate decision. Use when someone hands you an invoice plus the order and the receipt and asks whether to pay. Do NOT use for extracting fields from a single document or for general expense-report approval.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-12 | ✗→✓ | ▲ Improved | 660% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 589% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 780% | 0% |
| case-10 | ✓→✓ | = Same ✓ | 905% | 0% |
| case-02 | ✗→✗ | = Same ✗ | 674% | 0% |
> Template skill. Three-way match is a standard, public accounts-payable method — the discipline below is shared and well-known; only the specific tolerances are yours to set. The tolerance bands and routing thresholds shown are a worked, illustrative example: fork this skill and replace them with your real accounts-payable policy, and the agent then applies your thresholds instead of guessing. The measured lift demonstrates the shape works; the specific tolerances are yours to set.
Takes three documents for one purchase — the purchase order (what was ordered), the goods receipt (what the warehouse actually received), and the supplier invoice (what is being billed) — and decides whether to pay the invoice. The output is a per-line comparison, a typed flag on every mismatch, and one routing verdict.
The base model, handed these three documents and asked "should we pay this?", eyeballs the header totals and gives a narrative yes/no. It does not, by default: match line by line across all three, apply an explicit tolerance band, name each mismatch by type, or route the result through a fixed approve/hold/escalate policy. This skill makes that discipline mandatory.
Activate when the user has an invoice and at least one of the order or the receipt and wants a pay decision:
Do NOT activate for: pulling fields out of one document (that is extraction), approving a T&E expense report, or matching bank transactions to a ledger.
Do not compare totals. Build one row per distinct line and pull the ordered, received, and billed figures side by side.
These bands are org policy (the numbers you fork and replace):
| Dimension | Rule | Within band → | Outside band → flag | |---|---|---|---| | Unit price | Invoice unit price ≤ PO unit price +2% (rounding/FX headroom). Price below PO is always acceptable. | pass (note a below-PO price as a favorable variance) | price-variance | | Billed vs received qty | Billed qty ≤ received qty. Never pay for more than was received. | pass | qty-over | | Received vs ordered qty | Received within 5% of ordered. Short by more than 5% = short delivery; more than ordered = over-delivery. | pass (note it) | short-ship / over-delivery | | Line extended amount | Immaterial if off by ≤ the greater of $2 or 1% of the PO line amount (pure rounding). | pass | (falls out of price/qty flags) |
Extended edge cases — units-of-measure conversion (cases vs eaches), multi-currency invoices and the FX band, one PO received across several partial goods receipts, and non-matchable lines like freight or tax: see references/edge-cases.md.
Assign one of these types to each problem line — a bare "there's a discrepancy" is not enough:
price-variance — invoice unit price above the +2% band.qty-over — billed quantity exceeds received quantity.short-ship — received quantity below ordered beyond the 5% band.over-delivery — received quantity above the ordered quantity.missing-line — a line on the PO/receipt that the invoice never bills, or invoiced with nothing received.duplicate-line — the same SKU billed more than once on the invoice.unmatched-charge — an invoiced line with no matching PO line at all (off-contract charge, e.g. a pallet or handling fee that was never ordered).Collect all flags, then pick the verdict by the highest-severity flag present (escalate beats hold beats approve):
unmatched-charge, any duplicate-line, a re-submitted invoice already paid, or an invoice total over the PO total beyond the price band with no approver on file.price-variance, qty-over (short-pay to the received quantity and hold the difference), short-ship, over-delivery, or missing-line.A per-line table, then the verdict:
| SKU | Ordered | Received | Billed | Unit price (PO → inv) | Flag | |---|---|---|---|---|---| | A-100 | 100 | 100 | 100 | 12.00 → 12.00 | — | | A-205 | 50 | 46 | 50 | 4.00 → 4.00 | qty-over |
Verdict: HOLD — billed 50 of SKU A-205 but only 46 were received; short-pay to 46 and hold the 4-unit difference with the supplier.
Ordered/received/billed all 30 of SKU B-011 at unit 5.00; ordered/received/billed all 12 of SKU B-012 at unit 40.00. Verdict: APPROVE — every line matches on SKU, quantity, and price within band.
SKU C-200: PO unit 8.00, invoice unit 8.60 (+7.5%), quantities all equal. Verdict: HOLD — price-variance on C-200: billed 8.60 against an ordered 8.00, past the +2% band.
Every ordered line matches, but the invoice adds a "handling fee" line with no SKU on the PO. Verdict: ESCALATE — unmatched-charge: the handling-fee line was never ordered and has no PO line to match.
SKU D-9: PO unit 3.33, invoice unit 3.34 (+0.3%), same quantities; line total off by $0.15. Verdict: APPROVE — the gap is within the rounding band; do not flag a penny.
short-ship for procurement follow-up; do not hold the payment.Other measured skills in the registry, with their headline benchmark lift.