Field Service Dispatch: Constraints, Skills, and Optimization Basics

Overview

Dispatch is constrained optimization under uncertainty. Practical automation combines rules with light optimization—not academic OR only.

Quick definition

Dispatch automation assigns work orders using hard constraints (skills, SLA deadline, parts availability) and soft optimization (travel time)—often solved as constrained routing, not ad hoc sorting.


Definition

Dispatch automation assigns work orders to technicians using eligibility (skills, certifications), availability, geography, and parts readiness.

Why it matters

Poor dispatch burns fuel, misses SLAs, and frustrates customers. AI assists suggestions; constraints enforce reality.

Core framework

Step-by-step model as TypeScript interfaces (machine-readable checkpoints).

Hard constraints first

TypeScript
/** * Hard constraints first * Regulatory licenses, safety, union rules. */ export interface CoreFrameworkStep1HardConstraintsFirst { /** Order in the core framework (0-based) */ readonly stepIndex: 0; /** Display title for this step */ readonly title: "Hard constraints first"; /** Narrative checkpoints as published in the guide */ readonly narrative: readonly string[]; } export const CoreFrameworkStep1HardConstraintsFirst_NARRATIVE: readonly string[] = [ "Regulatory licenses, safety, union rules." ] as const;

Soft scoring

TypeScript
/** * Soft scoring * Prefer repeat customers, minimize travel when ties exist. */ export interface CoreFrameworkStep2SoftScoring { /** Order in the core framework (0-based) */ readonly stepIndex: 1; /** Display title for this step */ readonly title: "Soft scoring"; /** Narrative checkpoints as published in the guide */ readonly narrative: readonly string[]; } export const CoreFrameworkStep2SoftScoring_NARRATIVE: readonly string[] = [ "Prefer repeat customers, minimize travel when ties exist." ] as const;

Detailed breakdown

Logic sections encoded as Python functions with structured narrative payloads.

Dynamic rescheduling

Python
def logic_block_1_dynamic_rescheduling(context: dict) -> dict: """Operational logic: Dynamic rescheduling""" # Narrative steps from the guide (logic section) paragraphs = ["Weather, traffic, and job overrun should trigger replanning with customer notifications."] return { "heading": "Dynamic rescheduling", "paragraphs": paragraphs, "context_keys": tuple(sorted(context.keys())), }

Technical patterns

Constraint layers

  • Feasible set: tech has skill + parts + shift window contains SLA end.
  • Objective: minimize travel then lateness.

Code examples

Feasibility filter

Narrows candidate techs before scoring.

TypeScript
export function feasibleTechs(wo, techs) { return techs.filter((t) => t.skills.includes(wo.requiredSkill) && t.shiftCovers(wo.windowEnd) && t.hasParts(wo.partsNeeded) ); }

System architecture

YAML
[WO create / update] [Constraint filter] [Routing optimizer / greedy heuristic] [Calendar block + notify] [Mobile app]

Real-world example

A facilities firm cut average drive time 15% by feeding traffic-aware estimates into assignment suggestions—humans approved exceptions.

Common mistakes

  • Optimization without real-time status—assignments go stale.
  • Ignoring parts availability—tech arrives unarmed.

PrimeAxiom implements dispatch workflows with CRM and FSM tools—book a field ops review.