ReferenceInventory & purchasing

Field purchase detail

What it's for

This is the detail page for a single field purchase — one counter-run receipt a technician submitted. It's where the office reviews the receipt, splits its cost across the jobs it covered, and approves or rejects it. Approving posts the exact allocation to job cost and locks the ledger.

Reach it by opening a row from Materials & Purchasing → Purchasing → Field purchases, at /purchasing/field-purchases/[id].

Tabs

The screen has no tabs. It is one detail page: receipt lines, the allocation ledger, the allocation editor, and the approve/reject controls, stacked in order.

Panels and controls

Four summary cards across the top — Receipt (purchase total, subtotal), Allocation (allocated, remaining), Extras (tax, freight), and Details (reference, line count, reimbursable) — give the numbers at a glance. A status badge (Draft, Needs review, Approved, Rejected) sits in the header; a rejected purchase shows its reason in a banner.

Review exceptions flags problems before you approve: Receipt missing (no photo attached), Possible duplicate (another receipt with the same technician, vendor, date, and total — with a link to compare it), Unassigned cost (the ledger doesn't yet equal the receipt total), and Overallocated (allocations exceed the total and must be corrected).

Receipt lines is a read-only table of what was bought — description, quantity, unit cost, total.

Allocation ledger lists every cost split made so far — target, dollar or quantity basis, amount — with an empty state, Not allocated yet, until the first split is saved. An approved purchase's allocations can be Corrected: a correction opens a form to record a reversal and a replacement target, with a required reason, and produces immutable history rather than editing the original number.

The Allocate cost editor (visible only while status is Needs review) lets you add one or more splits — a work order, project, overhead, or unassigned — each by dollar amount or by a receipt line's quantity, with an optional note. Add split adds another row; Save allocations submits them.

Approve purchase posts the allocation to job cost and locks it; a Reimbursable to technician (payroll expense) checkbox controls whether the amount becomes a payroll expense. It's disabled until a receipt is attached and allocations exactly equal the total. Reject requires a reason and sends the purchase back.

The receipt photo itself sits in a side panel, or Receipt missing if none was attached.

What it accepts

FieldFormatRequiredRule
Allocation targetWork order, project, overhead, or unassignedYes
Allocation basisDollar amount or a receipt line's quantityYes
Allocation amountDollars, or line quantityYes"Allocations cannot exceed the purchase total."
Allocation noteFree text, optionalNo
ReimbursableCheckboxNoControls whether the amount posts as a payroll expense
Rejection reasonFree textYes, to reject"A rejection reason is required."
Correction reasonFree textYes, to correct"A correction reason is required."
ApproveReceipt attached + allocations exactly equal the total"A receipt and an exact allocation are required."

Server-side guards also enforce: "Only submitted purchases can be allocated," "Only submitted purchases can be approved," "Only submitted purchases can be rejected," "Only approved purchases can be corrected," and "Replacement allocations must exactly equal the reversed allocation."

How to configure it

  • Purchasing settings decide whether field purchases need approval and above what amount.
  • Job costing settings decide how allocated field-purchase cost lands on a job's margin.
  • The purchase itself — vendor, date, total, receipt photo, line items — is captured by the technician in the field app, not entered here.

Who can see it

This screen sits behind the Purchasing area.

Owners and office managers can open it. Dispatchers and technicians cannot — a technician records the purchase in the field app and sees their own, not the shop's review queue. 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.

On this page