Every jobcard breaks down into one or more jobs. A job is "the work" — "Full service", "MOT", "Front brake pads" — and each job owns its labour lines, parts, and fixed costs. The jobcard's total is the sum of its jobs' totals.
The line-item model
| Level | What it holds |
|---|---|
| Jobcard | Customer, vehicle, status, comments, recommendations, mileage in/out |
| Job | Description, assigned technician, complete flag, authorisation status |
| Labour | Each labour line: description, hours, hourly rate, line total |
| Part | Each part: description, quantity, unit cost (internal), unit price (customer), order status |
| Fixed cost | Each fixed-cost line: description, quantity, sale price |
Labour and parts both belong to a job, not to the jobcard directly. That means you can have a jobcard with two jobs — "Service" and "MOT" — each with their own labour and parts, and the customer sees a clean breakdown per job on the printed invoice.
How saves work (this is important)
Jobcard-level fields (title, customer, vehicle, status, mileage, comments) save immediately as you edit them — there's an autosave + a debounce.
Line items (labour, parts, descriptions) auto-save too, per job: your edits live in local state, and about a second and a half after you stop typing the whole job is committed in one bulk save. Each job shows a "Saving" then "Saved" indicator in its header while this happens, with a retry link if a save fails.
Watch the save indicator
Pistonlog flushes pending edits when you navigate away, but it's safer to wait for the "Saved" tick on the job you were editing. If a save errors, click the indicator to retry.
Defaults from your garage
Both labour rate and parts markup pre-fill from your garage's defaults in Pricing. You can override them per line if a specific job uses a different rate.
Related
- Creating a jobcard
- Job authorisation statuses
- Parts — the parts hub with deeper detail