workingTimeWindow. Nothing about this requires a dedicated field: it’s a modeling pattern built from capacities and stop kind, the same primitives covered in the data model.
The core mechanic: pair each delivery with its own depot pickup
Rather than pre-computing a fixed number of “reload rounds” per vehicle, pair every delivery with a pickup of the same cargo at the depot, inside the same order. The"depot:main" tag used below is an arbitrary stop tag your integration defines to mark same-site pickups — it doesn’t reference a Depot API object; see Depot vs. position.
- No fixed round count. The engine is free to chain any number of these pairs on a single resource, going back to the depot as many times as the schedule and capacity allow — you don’t need to guess in advance how many rounds each vehicle needs, or leave unused
"optional": truereload orders on the table. - No per-vehicle sizing. Each pickup carries only its own delivery’s cargo (here 130 kg and 3 piles), so it fits on any vehicle with room for that one delivery, whether the fleet is mixed or uniform. A large reload stop sized to one vehicle’s full capacity would only fit that vehicle, or a bigger one, so you’d have to reserve it for that vehicle with a
skills/requiredSkillspair. Here nothing needs reserving: whichever vehicle the engine assigns the delivery to also gets the matching pickup, because both stops belong to the same order.
If you also want to force or bias which stops happen before versus after each other (for example, a fixed morning sector followed by a fixed afternoon sector), combine this with tagged phases and the
maximizePrecedences objective. That’s a separate concern from the preceding capacity mechanic.Charging depot time once per visit, not once per pickup
With one pickup stop per delivery, a vehicle loading five deliveries’ worth of cargo before a round would otherwise payoperationDuration five times over for what is physically a single dock visit. Keep each pickup’s operationDuration negligible (as in the preceding example) and instead charge the real access time once per visit with the plan-level accessDurationsByStopTag field:
Limiting simultaneous depot visits
A physical depot usually has a limited number of loading docks or bays, and can’t serve every vehicle at once. Tag every pickup stop with a shared depot tag (as in the preceding example) and limit simultaneous presence withoverlappingCapacitiesByStopTag at the plan level. The objectives list below is a variant built for this example, not the platform default — see The default list for the actual default sequence:
depot:main — matching, for example, a depot with two loading docks. It’s a soft limit: minimizeOverOverlappingCapacitiesOnStops minimizes any overrun, so how firmly the engine keeps to it depends on where that objective sits in objectives (here right after minimizeDelay). Because every load in this pattern is an explicit tagged stop that’s part of an order — including the first load of the day, not just later reloads — the limit applies uniformly from the very first pickup, with nothing left uncovered. departure and arrival (see Depot vs. position) are only used for the resource’s idle start/end-of-day position; they carry no cargo and no tag, so keep the actual loading out of them entirely.
Limiting how many times a resource returns to the depot
overlappingCapacitiesByStopTag (preceding section) limits how many resources are simultaneously at the depot — a different question from how many times one resource returns there over the whole tour. For the latter, use the maxStopTagGroups additional constraint:
depot:main tag over the whole tour — the two mechanisms can be combined. A common pattern: leave internal resources free to return to the depot as many times as the schedule needs, but cap subcontractor resources (resourceTags) to a single daily depot visit.
See also
- Swap-body and container-exchange orders — a different, unrelated multi-stop-order pattern for single-unit-at-a-time fleets.
- Data model —
capacities, stopkind,accessDurationsByStopTag, and the rest of the constraints catalog referenced earlier. - Modeling advanced constraints — heterogeneous capacities, skills, breaks, and multiple time windows.
- Handling infeasibility — diagnosing a plan where demand still doesn’t fit even with multiple rounds.
- Requirements briefing checklist — the questions to ask before assuming this pattern applies to an operation.

