Job States β
The different states a job can be in within the system. All job types (Installation, Service, Repair, Callout, Remedial) share the same state model.
Complete List of States β
| State | Display Label | Description |
|---|---|---|
preallocated | RESERVED | Job is reserved for the engineer but not yet accepted |
waiting_for_acceptance | OFFER | Job is offered to the engineer, awaiting their acceptance |
issue | OFFER | Regional offer - unassigned job available for any engineer in the region |
unallocated | UNALLOCATED | Job is not yet allocated to anyone |
job_pending | BOOKED | Job is booked and scheduled |
visit_pending | BOOKED | Job has visits pending (used for repair/callout jobs) |
ready_for_audit | UNDER REVIEW | Job work is complete, submitted for audit review |
signed_off | COMPLETED | Job has been signed off by audit |
ready_to_invoice | SIGNED OFF | Job is ready for invoicing |
completed | COMPLETED | Job is completed (general completion state) |
completed_manual_invoice | COMPLETED | Job completed with manual invoicing |
invoiced | COMPLETED | Job has been invoiced |
cancelled | CANCELLED | Job has been cancelled |
State Categories β
Job Offers (Pre-Booking) β
States where the engineer has not yet accepted the job:
preallocated- Job is reserved specifically for this engineerwaiting_for_acceptance- Job is offered and awaiting engineer responseissue- Regional offer available to any engineer in the area
Active Jobs β
States for jobs the engineer is actively working on:
job_pending- Standard booked job awaiting completionvisit_pending- Repair/callout job with scheduled visits
Completion States β
States indicating the job work is done:
ready_for_audit- Submitted for reviewsigned_off- Passed audit reviewready_to_invoice- Approved for invoicingcompleted- General completioncompleted_manual_invoice- Completed with manual invoiceinvoiced- Fully invoiced and closed
State Transitions β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β JOB OFFERS β
β ββββββββββββββββ βββββββββββββββββββββββ ββββββββββ β
β β preallocated β βwaiting_for_acceptanceβ β issue β β
β ββββββββ¬ββββββββ ββββββββββββ¬βββββββββββ βββββ¬βββββ β
β β β β β
β ββββββββββββββββββββββββ΄ββββββββββββββββββββ β
β β β
β Accept Job β
ββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ACTIVE JOBS β
β βββββββββββββββ βββββββββββββββββ β
β β job_pending β β visit_pending β β
β ββββββββ¬βββββββ βββββββββ¬ββββββββ β
β β β β
β ββββββββββββββ¬ββββββββββββββ β
β β β
β Submit Job β
βββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββ
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β COMPLETION FLOW β
β β
β ββββββββββββββββββ ββββββββββββββ ββββββββββββββββββββ β
β β ready_for_auditβ βββΆ β signed_off β βββΆ β ready_to_invoice β β
β ββββββββββββββββββ ββββββββββββββ ββββββββββ¬ββββββββββ β
β β β
β βΌ β
β βββββββββββββ ββββββββββββββββ β
β β completed β β invoiced β β
β βββββββββββββ ββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββ β
β β completed_manual_invoice β (alternative path) β
β ββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββ
β cancelled β (can occur from most states)
βββββββββββββSelector Functions β
The app provides helper functions to check job state categories:
| Function | Returns true for |
|---|---|
isJobOffer() | waiting_for_acceptance, preallocated, issue |
isBookedJob() | job_pending, visit_pending |
isCompletedJob() | signed_off, completed, ready_to_invoice, completed_manual_invoice, invoiced, ready_for_audit |
isWaitingForAcceptance() | waiting_for_acceptance |
isRegionalOffer() | issue |
Special Behaviors β
Past Jobs with Pending State β
Jobs with state job_pending that have a job date in the past are displayed as "FORMS REQUIRED" to prompt the engineer to complete outstanding forms.
Regional Offers β
Jobs with state issue are regional offers - unallocated jobs available to any engineer in the region. These can be declined without penalty.