> ## Documentation Index
> Fetch the complete documentation index at: https://developers.kardinal.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Field services

> Skill preference on demanding jobs, opportunistic scheduling, a travel-distance cap, and technicians dispatched from home.

A field-service operation dispatches technicians directly from home rather than a shared depot, matches or prefers specific certifications to specific jobs, keeps drive time between two appointments short, and often has a backlog of lower-priority jobs that only get slotted in when the schedule has room.

## What makes this vertical distinctive

* **Skill preference** — a senior technician is preferred on demanding jobs, without excluding a generalist when the senior isn't available.
* **Opportunistic scheduling** — lower-priority jobs stay optional and only get planned when the route has capacity left.
* **Travel-distance cap between jobs** — a technician's hops from one job to the next stay under a set distance.
* **Home start/end** — every route starts and ends at the technician's own home, not a shared depot.

## Combined example

```json theme={null}
{
  "resources": [
    {
      "id": "technician-senior",
      "vehicleProfile": { "type": "car" },
      "departure": { "lon": 2.375, "lat": 48.872 },
      "arrival": { "lon": 2.375, "lat": 48.872 },
      "preferredStopTags": ["tag:senior-preferred"],
      "maxInterStopDistanceInKm": { "firstTravel": 100, "interStop": 15, "lastTravel": 100 }
    },
    {
      "id": "technician-junior",
      "vehicleProfile": { "type": "car" },
      "departure": { "lon": 2.362, "lat": 48.824 },
      "arrival": { "lon": 2.362, "lat": 48.824 }
    }
  ],
  "orders": [
    {
      "id": "order-demanding-client",
      "stops": [
        {
          "type": "single",
          "id": "stop-demanding-client",
          "position": { "lon": 2.38, "lat": 48.832 },
          "kind": "delivery",
          "operationDuration": "PT45M",
          "tags": ["tag:senior-preferred"]
        }
      ]
    },
    {
      "id": "order-routine-job",
      "stops": [
        {
          "type": "single",
          "id": "stop-routine-job",
          "position": { "lon": 2.358, "lat": 48.836 },
          "kind": "delivery",
          "operationDuration": "PT20M"
        }
      ],
      "priority": -5,
      "optional": true
    }
  ],
  "objectives": ["maximizeMandatoryStops", "maximizePreferredStops", "maximizeOptionalStops", "minimizeCosts"]
}
```

### Skill preference

`technician-senior.preferredStopTags: ["tag:senior-preferred"]` is matched against the same tag on `stop-demanding-client`. See [Driver skills and qualifications](/guides/advanced-constraints#driver-skills-and-qualifications) — the exact worked example this pattern follows.

### Opportunistic scheduling

`order-routine-job` sets `optional: true` with a negative `priority`, so the engine only plans it once every mandatory and preferred stop is already placed, via the `maximizeOptionalStops` objective. A more negative `priority` pushes a job further down the queue relative to other optional orders. See [Order, stop](/reference/data-model#order-stop).

### Travel-distance cap between jobs

`technician-senior.maxInterStopDistanceInKm` bounds each leg of the tour independently: `firstTravel`/`lastTravel` (home to first job, last job to home) get a looser cap than `interStop` (job to job), keeping consecutive appointments close together without also restricting how far the day's first and last jobs can be from home.

### Home start/end

Each technician's `departure`/`arrival` points to its own position rather than a shared depot — `technician-senior` and `technician-junior` don't share coordinates. See [Depot vs. position](/reference/data-model#depot-vs-position) for how a "depot" is just a resource's `departure`/`arrival`, not a first-class object.

## See also

* [Modeling advanced constraints](/guides/advanced-constraints#driver-skills-and-qualifications) — `preferredStopTags` and `requiredSkills`, hard vs. soft.
* [Data model](/reference/data-model#depot-vs-position) — how per-resource `departure`/`arrival` represents a home or depot.
* [Data model](/reference/data-model#order-stop) — `optional`, `priority`, and the rest of the order/stop shape.
