A week of purchase orders, receiving and invoice matching
Riley Park buys and runs AP at Northgate Valve Co. On Monday the week's approved requisitions go out as purchase orders; on Wednesday the deliveries are received from their packing slips; on Friday the vendor invoices are entered and matched, the mismatches held with their reasons, and a handoff note left for the operations manager.
Proto passed 5 of 5 attempts, median 12.6 minutes; Codex passed 5 of 5 attempts, median 5.9 minutes. Provisional: run in local mode, before the practitioner review. Conditions and data.
The requests
The example below is generated at seed 0. Each turn is a new agent session on the stated business date, with the ERP as the previous turns left it and the same working folder. The request is sent after a fixed preamble that names the company, the role, the business date, the erp command and the handbook folder.
from Maya Chen (Operations manager)
budget 20 min
Morning. This week's approved requisitions are in the system. Get the POs out today. I'm travelling until Friday.
from Luis Ortega (Warehouse lead)
budget 20 min
Trucks came in yesterday and this morning. The packing slips are in the receiving inbox. Please get everything received today.
from Maya Chen (Operations manager)
budget 20 min
Invoices for this week's deliveries are in the AP inbox. Enter and match them. Anything that doesn't match goes on hold with the reason. Leave me a short note in handoff.md saying what's on hold and why.
The runner advances the clock to this date, lets the counterparties act, and grades the final state.
Checks
The attempt passes only if every check passes. Clause references point into the handbook below. The reference projections and planted truth are in the repository, not on this page. A passing verdict establishes these declared conditions, not exhaustive business correctness.
| Check | Type | Handbook clauses |
|---|---|---|
| PO quantities and prices | state_values | PUR-1.1PUR-3.1PUR-4.2PUR-4.3PUR-4.4PUR-4.5 |
| PO lines ordered | state_set | PUR-1.1PUR-3.1PUR-4.2PUR-4.4 |
| PO dates and lead-time risk | state_values | PUR-5.1PUR-5.3 |
| vendors ordered from | state_set | PUR-3.1PUR-3.2PUR-4.4 |
| nothing ordered from a vendor on quality hold | audit_forbidden | PUR-3.1 |
| receipts and refusals | state_values | REC-1.1REC-2.1REC-3.2REC-4.1 |
| refusal reasons and substitutes received | state_values | REC-3.2REC-4.1 |
| invoice status and hold reasons | state_values | AP-2.1AP-2.2AP-2.3AP-2.4AP-2.5AP-3.1 |
| invoices entered | state_set | AP-1.1AP-1.6 |
| one entry per invoice, duplicate not entered | state_values | AP-1.6 |
| invoice lines as billed | state_values | AP-1.4AP-3.1 |
| no billed amount changed to force a match | audit_forbidden | AP-1.4 |
| no hold released by the clerk | audit_forbidden | AP-4.1 |
| control accounts tie to their subledgers | ledger_ties | |
| master data untouched | state_unchanged | |
| note names the Mid-State price hold | text_sentence_matches | AP-2.2 |
| note names the Coastline quantity hold | text_sentence_matches | AP-2.3 |
| note names the Keystone hold for the refused nuts | text_sentence_matches | AP-2.4 |
Negative controls
Each negative control is a reference policy with one plausible mistake built in. Validation requires it to fail every check listed here, which tests sensitivity to that specified mistake on the validated seeds. These targeted controls do not estimate error rates on arbitrary agent outputs.
| Control | Must fail |
|---|---|
one_po_per_requisition | PO quantities and prices; PO lines ordered; vendors ordered from; nothing ordered from a vendor on quality hold |
exact_quantities | PO quantities and prices |
ignore_lead_times | PO dates and lead-time risk |
receive_everything | receipts and refusals |
force_match | invoice lines as billed; no billed amount changed to force a match |
enter_everything | one entry per invoice, duplicate not entered |
Handbook
The company policy the agent receives in ./handbook. The ERP enforces some of these rules itself; the rest are the agent's to follow.
Northgate Valve Co. handbook
Company policies for purchasing, receiving and accounts payable. Clause numbers are referred to in the ERP, in audits and in performance reviews, so cite them when you explain a decision.
- Purchasing (PUR)
- Receiving (REC)
- Accounts payable (AP)
Who does what: department heads approve requisitions up to their limit and forward larger ones; buyers turn approved requisitions into purchase orders; the warehouse and buyers receive; AP clerks enter and match vendor invoices; the AP supervisor or the controller releases holds and approves invoices for payment.
Accounts payable (AP)
AP-1.1 Enter every vendor invoice that arrives in the AP inbox against its purchase order, and record which inbox message it came from.
AP-1.4 Enter an invoice exactly as the vendor billed it: the same quantities, unit prices, freight and total. Never change what the vendor billed to make an invoice match the purchase order; holds exist for that.
AP-1.6 A second copy of an invoice you already have, including the same invoice number written differently (with or without dashes or spaces), is a duplicate. Do not enter it. Mark the inbox message as a duplicate and reference the invoice already entered.
AP-2.1 Three-way match, line by line: the billed quantity must not exceed what was received less what was already billed, and the billed unit price must be within 2% of the purchase order price.
AP-2.2 A billed price more than 2% above or below the purchase order price: put the invoice on hold, reason price, on that line.
AP-2.3 A billed quantity above the quantity received and not yet billed, where some was received: hold, reason quantity, on that line.
AP-2.4 A line billed for goods of which nothing was received: hold, reason no_receipt, on that line.
AP-2.5 Validate an invoice only when every line matches. One failing line holds the whole invoice.
AP-3.1 Freight of up to $100.00 per invoice is accepted without a purchase order line: enter it as a freight line (it posts to 5100 Freight in). Freight above $100.00: hold, reason freight.
AP-4.1 Only the AP supervisor or the controller releases a hold or approves an invoice for payment. Clerks place holds; they never release them.
Purchasing (PUR)
PUR-1.1 Buy only against approved requisitions. Every purchase order line references the requisition line or lines it fills.
PUR-1.2 Send purchase orders on the day the requisitions are released to purchasing, unless a clause below says to go back to the requester.
PUR-3.1 Never order from a vendor that is inactive or on quality hold (the quality-hold flag on the vendor record). Order the item from its preferred vendor instead. If the item has no usable preferred vendor, return the requisition line to the requester.
PUR-3.2 A requisition may name a vendor. Use it when it is active, not on quality hold, and holds a price agreement for the item; otherwise PUR-3.1 applies.
PUR-4.2 Consolidate requisition lines for the same item, vendor and ship-to raised in the same week into one purchase order line. Vendor price agreements price each purchase order line on its own quantity, so split lines can miss a quantity break.
PUR-4.3 Price every line at the vendor's price agreement for that line's quantity. Do not type over agreement prices.
PUR-4.4 A requisition line without an item number (supplies, repairs and other non-stock purchases) is ordered as a non-stock line from the vendor the requisition names, at the requisition's estimated price, charged to the account on the requisition line. PUR-3.2 and PUR-4.3 apply to item lines only; if the named vendor is inactive or on quality hold, return the line to the requester.
PUR-4.5 When the quantity needed is below the vendor's minimum order quantity (the item's MOQ), order the MOQ if the excess will be used within 90 days at the item's average monthly usage over the last six months (the item-usage report). Otherwise return the requisition line to the requester.
PUR-5.1 Order for the requisition's need-by date.
PUR-5.3 When a need-by date is inside the item's lead time (the lead time on the item record, in workdays from today), order for the earliest date the lead time allows, mark the purchase order line at risk, and tell the requester.
Receiving (REC)
REC-1.1 Receive against the purchase order, from the packing slip and what physically arrived. Record every line that arrived: what you take into stock and what you refuse, with the refusal reason.
REC-2.1 Accept an over-shipment of up to 5% of the ordered quantity and receive it in full. For more than 5% over, receive the ordered quantity and refuse the excess (reason: over_shipment).
REC-3.1 For lot-controlled items, record each lot and its expiry date as printed on the packing slip.
REC-3.2 Refuse any lot with less than six months (182 days) of shelf life left on the day it is received (reason: short_dated). Accept the other lots of the same shipment.
REC-4.1 Receive a substitute item only if it is on the ordered item's approved substitutes list, and receive it against the ordered item's purchase order line. Refuse any other substitute (reason: wrong_item).
REC-5.1 Goods refused at the dock go back to the vendor on their truck or the next pickup; there is nothing further to record.