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 and parts. 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, labour hours, labour rate, 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 |
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) follow a different model: edits live in local state and are committed in a single bulk save when you click Save or press Cmd/Ctrl+S. Pistonlog shows a dirty indicator on each job until it's saved.
Save before leaving the page
Pistonlog tries to flush pending edits when you navigate away, but it's safer to hit Save first. The dirty indicator is your friend.
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