Purchase order
What it's for
A purchase order record is one order in full: what was ordered, what has arrived, what has been billed, and whether those three agree. It is where a short delivery or an overcharge gets caught before it becomes a job cost.
Reach it by opening any row on Materials & Purchasing → Purchasing. The
route is /purchasing/<order>.
Tabs
The record has no tabs. Lines are the body; receiving and billing sit below.
Panels and controls
Fact strip
Vendor, Ship to, Ordered, Expected, Lines, and Total.
Lines
Each line carries a Description ("e.g. 2-ton TXV valve"), an optional Inventory item, an optional Job, a Qty, a Unit Cost ("245.00"), a Total, and how much has been Received. Add line adds one.
A line that has already been received is locked: "This line has already been received and can't be edited." and "...can't be removed." A PO cannot be left with no lines at all — "A purchase order must have at least one line item — cancel the PO instead."
Receiving
Receive shipment and Post receipt record what actually arrived, per line: Ordered, Prev, Receiving now. Received stock lands in the stock location you name, so receiving is what makes inventory true. A cancelled PO cannot be received against.
Vendor bills
Create vendor bill records the invoice, with a Bill number ("e.g. INV-4821") and a Bill date. Upload attaches the document itself.
Run 3-way match compares what was ordered, what was received, and what was billed. Where the bill exceeds the accepted receipt, approving it requires a written reason — "Why approve above the accepted receipt?" That prompt is the control: an overcharge can be accepted, but never silently.
Empty states
No line items, No receipts posted yet, Nothing outstanding, Nothing to bill, and No vendor bills yet.
What it accepts
| Field | Format | Required | Rule |
|---|---|---|---|
| Description | Free text | Yes, per line | "Description is required." |
| Qty | Greater than 0 | Yes, per line | "Quantity must be greater than 0." |
| Unit cost | Dollars, e.g. 245.00 | Yes, per line | "Enter a valid unit cost (e.g. 245.00)." |
| Inventory item | Pick an item | No | "Inventory item not found." |
| Work order / Project | Pick one | No | "Work order not found."; "Project not found." |
| Stock location | Pick a location | Yes, to receive | "Stock location is required."; "Stock location not found." |
| Quantity to receive | A number, at least one line | Yes, to receive | "Enter a quantity to receive on at least one line."; "Nothing left to receive on the entered lines." |
| Bill number | Free text | Yes, per bill | |
| Bill date | A date | Yes, per bill | |
| Attach document | A file | No | |
| Over-receipt approval reason | Free text | Yes, when billing above the accepted receipt | The prompt asks why |
How to configure it
- Purchasing settings decide the approval thresholds for raising and sending an order.
- Bill matching settings decide how strict the three-way match is and what variance is tolerated.
- Inventory settings decide how received cost updates the item's average cost.
- Job costing settings decide how a line assigned to a job lands on its margin.
Who can see it
This screen sits behind the Purchasing area.
Owners and office managers can open it. Dispatchers and technicians cannot. The gate is checked on the server, not just hidden in the sidebar, so a direct link does not get around it.
The full role matrix is on Roles & permissions.