A part is a line item inside a job on a jobcard. To add one, you open the job, scroll to its parts table, and add a row.
What's on a part row
| Field | Notes |
|---|---|
| Description | What the part is — free text |
| Quantity | Defaults to 1. Decimals allowed for fluids etc. |
| Unit cost | What the garage paid. Hidden from technician views. |
| Sale price | What the customer pays. Left blank, it's calculated from cost via markup. |
| Supplier | Pick from your suppliers list, or type a one-off name. Optional |
| Ref. | Order or invoice reference (e.g. INV-123), optional |
| Status | Where this part is in the lifecycle — see Part order statuses |
Pre-fill from the parts catalogue
Parts you've used before are saved to the parts catalogue automatically. Next time you add a part, click the search icon on the part row and search the catalogue by description — the row pre-fills with everything that's stored.
Markup
Sale price auto-calculates from cost using your garage's default markup percentage (e.g. cost × 1.4 for a 40% markup). You can override the calculated price on any line. The markup itself lives in Workshop Settings → Pricing.
Cost visibility
Several columns on the parts table are permission-gated. Users without parts.view_cost don't see Unit Cost (reception and managers have it by default; technicians don't). Sale Price and Subtotal need payments.view, and the Supplier column needs suppliers.view, so technicians see none of these by default. See Unit cost visibility.