Skip to content

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 ​

StateDisplay LabelDescription
preallocatedRESERVEDJob is reserved for the engineer but not yet accepted
waiting_for_acceptanceOFFERJob is offered to the engineer, awaiting their acceptance
issueOFFERRegional offer - unassigned job available for any engineer in the region
unallocatedUNALLOCATEDJob is not yet allocated to anyone
job_pendingBOOKEDJob is booked and scheduled
visit_pendingBOOKEDJob has visits pending (used for repair/callout jobs)
ready_for_auditUNDER REVIEWJob work is complete, submitted for audit review
signed_offCOMPLETEDJob has been signed off by audit
ready_to_invoiceSIGNED OFFJob is ready for invoicing
completedCOMPLETEDJob is completed (general completion state)
completed_manual_invoiceCOMPLETEDJob completed with manual invoicing
invoicedCOMPLETEDJob has been invoiced
cancelledCANCELLEDJob 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 engineer
  • waiting_for_acceptance - Job is offered and awaiting engineer response
  • issue - 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 completion
  • visit_pending - Repair/callout job with scheduled visits

Completion States ​

States indicating the job work is done:

  • ready_for_audit - Submitted for review
  • signed_off - Passed audit review
  • ready_to_invoice - Approved for invoicing
  • completed - General completion
  • completed_manual_invoice - Completed with manual invoice
  • invoiced - 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:

FunctionReturns 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.

Learn more about Regional Offers