Concorbit HelpAll guides →

Lifecycle

Job lifecycle

Jobs move through a series of statuses from booking to invoicing. Each transition is logged on the job activity timeline with the user who triggered it and a timestamp.

Statuses

  • Scheduled: the initial state when a job is created. It has a customer, a (planned or actual) date, and may or may not have a technician assigned.

  • Dispatched: the dispatcher has sent the job to the technician. This is the signal to the technician's mobile app that the job is now theirs to action.

  • En route: the technician is travelling to the site. GPS location is captured when this status is set.

  • On site: the technician has arrived. actual_start_at is stamped with the arrival time.

  • In progress: the technician has started working. Time tracking typically begins here.

  • Completed: the work is finished. actual_end_at is stamped. Customer signature and parts used are recorded at this point.

  • Invoiced: a draft invoice has been generated from the completed job's labour and parts.

  • Cancelled: the job was cancelled. No further transitions are possible.

  • On hold / Rescheduled: interim states used when a job cannot proceed as originally planned.

Action buttons

The job detail page shows status-appropriate action buttons on the header. For example, a scheduled job shows a Dispatch button; an on-site job shows a Start work button; a completed job shows Generate invoice. This drives the most common forward transition for the current status without the technician or dispatcher having to think about it.

Assigning and reassigning

Use the Technician card on the job sidebar to assign or reassign at any time before completion. concorbit checks the technician's skills against the required skills on the job type and warns if there's a mismatch. It also warns if the technician is at their daily job capacity or marked as unavailable. The assignment still proceeds; the warning is advisory, not blocking.

Rescheduling

Scheduled or dispatched jobs can be moved to a new date by the dispatcher. Rescheduling resets the status to "Scheduled" and logs a rescheduled-from/to entry on the activity timeline.

Cancellation

Only jobs that have not been completed can be cancelled. Cancelling stops the workflow and leaves the job in the list for historical reference. Cancelled jobs do not count towards technician utilisation.

Auto-generated invoices

When a job is completed, the Generate invoice button produces a draft invoice containing:

  • Callout fee (optional, top of invoice): if the job's type has a callout fee configured, it appears as the first line. The fee can additionally "cover" the first N minutes of labour; see Jobs settings > Callout fees for the three pricing models (inclusive / additive / minimum visit).

  • Labour lines grouped by rate: one line per labour rate used across the remaining billable time entries after the callout has absorbed its share, calculated as hours × snapshot rate. A job with 3 hours of Standard + 1 hour of Weekend appears as two separate labour lines, not a blended average.

  • Parts lines: one per part used, at the quantity and unit cost recorded on the job.

The rate used for each time entry is the rate that was active when the engineer logged the time, picked automatically based on day + time of work and any company override (see the Labour rates section below). The rate is snapshotted onto the time entry at log-time, so editing a rate after the fact doesn't rewrite historical invoices.

The invoice is created in draft status and can be reviewed, edited, and sent from the Billing module. Once generated, the job status moves to "Invoiced" and the invoice is linked on the job detail page.

Profitability (JCP integration)

Every billable time entry on a job automatically creates a pending Charge record, one per entry, rate × duration = charge total. Each Charge carries a cost_price snapshot from the engineer's jcp_user_costs rate, so margin is frozen at log-time and later cost-rate edits don't rewrite historical profitability.

Charges for field jobs appear in the Field Jobs tab on the JCP dashboard (/jcp?tab=field-jobs) alongside ticket profitability. When a job's invoice is generated, all linked pending/approved charges flip to invoiced status and stamp the invoice ID.

Users with the jcp.view permission also see a small profitability strip at the top of the Job detail page showing live revenue / labour cost / profit / margin / billable hours: the same numbers the JCP dashboard computes, just scoped to that single job.

Non-billable time entries and jobs without a company don't create charges. Parts (stored as the parts_used JSONB on the job) don't yet produce per-part charges; that's a follow-up session once the parts catalogue ships a cost model.

Labour rates

Labour rates are configured under Jobs > Settings > Labour rates. Each rate has:

  • Rate in £/hour

  • Applies on: any day / weekdays / weekends (or a custom day mask)

  • Time window: e.g. 18:00–08:00 for evenings + overnight (windows wrap around midnight automatically)

  • Priority: higher wins when multiple rates match the same datetime

  • Applies on bank holidays: when ticked, the rate wins on any day concorbit recognises as a UK bank holiday (configured under HR > Bank holidays)

When a technician logs time, concorbit picks the matching rate and snapshots it onto the entry. Seeded defaults:

  • Standard rate: any day / any time, priority 10 (the fallback)

  • Out of hours rate: weekdays 18:00–08:00, priority 20, 1.5× standard

  • Weekend rate: Saturday + Sunday any time, priority 30, 1.75× standard

  • Bank holiday rate: applies on bank holidays regardless of day/time, priority 40, 2× standard

Company-specific rate overrides

On a Company record you can set Default labour rate. When a technician logs time against a job for that company, the overriding rate wins over the generic day/time rules (provided it still matches the current datetime; e.g. a company pointing at "Standard" still falls through to "Bank holiday rate" on a BH).

Sharing with Helpdesk

Labour rates are tenant-wide. Rates created here apply to helpdesk ticket time entries too (and vice versa). Manage them from either side.