@solvice/routing 0.19.1-beta.0 → 0.19.3-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/runs.d.ts +97 -45
- package/dist/v3.d.ts +129 -57
- package/package.json +1 -1
package/dist/runs.d.ts
CHANGED
|
@@ -258,7 +258,7 @@ export interface components {
|
|
|
258
258
|
* New values may be added; clients must accept unknown values and handle
|
|
259
259
|
* them generically, for example by showing `message`.
|
|
260
260
|
*
|
|
261
|
-
* Known values: `unreachable`, `max_leg_travel`, `required_skills`, `serves_tags`, `capacity`, `time_window`, `eligible_vehicles`, `shift_end`, `max_distance`, `max_route_duration`, `max_stops`, `sequence`, `tag_order`, `shipment`, `break`, `multi_trip`, `same_vehicle`, `same_day`, `same_route`, `compatible_vehicles`, `synchronized`, `time_lag`, `all_or_none`, `period_limit`, `quota`, `unknown`. An open set: a later release may add values, so accept any string and handle the ones you know.
|
|
261
|
+
* Known values: `unreachable`, `max_leg_travel`, `required_skills`, `serves_tags`, `capacity`, `time_window`, `eligible_vehicles`, `shift_end`, `max_distance`, `max_route_duration`, `max_stops`, `sequence`, `tag_order`, `shipment`, `break`, `multi_trip`, `unload_before_end`, `same_vehicle`, `same_day`, `same_route`, `compatible_vehicles`, `synchronized`, `time_lag`, `all_or_none`, `period_limit`, `quota`, `max_intake`, `unknown`. An open set: a later release may add values, so accept any string and handle the ones you know.
|
|
262
262
|
* @example capacity
|
|
263
263
|
*/
|
|
264
264
|
ConstraintCode: string;
|
|
@@ -365,6 +365,24 @@ export interface components {
|
|
|
365
365
|
id: string;
|
|
366
366
|
/** @description Where the depot is. */
|
|
367
367
|
location: components["schemas"]["Place"];
|
|
368
|
+
/**
|
|
369
|
+
* @description The most load the depot may receive across the whole request, per
|
|
370
|
+
* named dimension: a tip site's intake limit. Not per day: it sums every
|
|
371
|
+
* shift of every day.
|
|
372
|
+
*
|
|
373
|
+
* Counted is the load on board on arrival at each reload here (including
|
|
374
|
+
* a shift's `initial_load` on its first trip and the final tip of
|
|
375
|
+
* `unload_before_end`), plus the load on board at the end of a shift
|
|
376
|
+
* whose `end` is this depot (not with `unload_before_end`, which unloads
|
|
377
|
+
* at a reload first). A shift's start never counts, and an unused shift
|
|
378
|
+
* receives nothing. A dimension left out is uncapped; `0` means the
|
|
379
|
+
* depot takes none of it. A hard limit: a task that would overfill every
|
|
380
|
+
* depot its trip can tip at stays unassigned (reason `max_intake`).
|
|
381
|
+
*
|
|
382
|
+
* Each dimension must be one a task or vehicle declares, and some shift
|
|
383
|
+
* must reload here, or end here without `unload_before_end`.
|
|
384
|
+
*/
|
|
385
|
+
max_intake?: null | components["schemas"]["Quantities"];
|
|
368
386
|
/**
|
|
369
387
|
* Format: double
|
|
370
388
|
* @description Money charged once per reload visit, in the objective's currency.
|
|
@@ -628,10 +646,10 @@ export interface components {
|
|
|
628
646
|
*/
|
|
629
647
|
preferences?: components["schemas"]["VehiclePreference"][] | null;
|
|
630
648
|
/**
|
|
631
|
-
* Format:
|
|
649
|
+
* Format: uint32
|
|
632
650
|
* @description Importance of a must-serve task when not all of them fit: the solver
|
|
633
|
-
* maximises the summed `priority` of served tasks before any cost.
|
|
634
|
-
* default `1` (maximise the count). A rank, not money — it never makes a
|
|
651
|
+
* maximises the summed `priority` of served tasks before any cost. `1` to
|
|
652
|
+
* `4294967295`, default `1` (maximise the count). A rank, not money — it never makes a
|
|
635
653
|
* task droppable; use `drop_cost` for that. Both set is a 400.
|
|
636
654
|
* @example 3
|
|
637
655
|
*/
|
|
@@ -690,7 +708,10 @@ export interface components {
|
|
|
690
708
|
tags?: string[] | null;
|
|
691
709
|
/**
|
|
692
710
|
* @description Soft target for this task, measured at its arrival (default) or
|
|
693
|
-
* departure. On a shipment it is measured on the **delivery** leg
|
|
711
|
+
* departure. On a shipment it is measured on the **delivery** leg and
|
|
712
|
+
* cannot be combined with `delivery.target` (HTTP 400
|
|
713
|
+
* `conflicting_fields`); `pickup.target` adds a separate target on the
|
|
714
|
+
* pickup leg.
|
|
694
715
|
*/
|
|
695
716
|
target?: null | components["schemas"]["Target"];
|
|
696
717
|
/** @description Time windows for this visit. */
|
|
@@ -819,7 +840,7 @@ export interface components {
|
|
|
819
840
|
*/
|
|
820
841
|
max_route_duration_s?: number | null;
|
|
821
842
|
/**
|
|
822
|
-
* Format:
|
|
843
|
+
* Format: uint32
|
|
823
844
|
* @description Hard cap on served stops across the period's shifts; a job counts as
|
|
824
845
|
* one stop. Start, end, break and reload stops in `routes[].stops` do not
|
|
825
846
|
* count; a shipment counts as two stops.
|
|
@@ -865,7 +886,7 @@ export interface components {
|
|
|
865
886
|
*/
|
|
866
887
|
PlanRoute: {
|
|
867
888
|
/**
|
|
868
|
-
* Format:
|
|
889
|
+
* Format: uint32
|
|
869
890
|
* @description On solve, the first `locked_count` stops stay where they are (already
|
|
870
891
|
* dispatched). Counts every listed stop. Cannot be combined with a
|
|
871
892
|
* `reload` stop, and must not exceed the route's stop count — both are
|
|
@@ -1108,7 +1129,7 @@ export interface components {
|
|
|
1108
1129
|
*/
|
|
1109
1130
|
id: string;
|
|
1110
1131
|
/**
|
|
1111
|
-
* Format:
|
|
1132
|
+
* Format: uint32
|
|
1112
1133
|
* @description The cap on counted stops; a job counts as one stop.
|
|
1113
1134
|
* Start, end, break and reload stops in `routes[].stops` do not count; a
|
|
1114
1135
|
* shipment counts as two stops.
|
|
@@ -1152,8 +1173,10 @@ export interface components {
|
|
|
1152
1173
|
* its pickup. A shipment's own id in `stops`, or a shipment carrying the
|
|
1153
1174
|
* `tag` of a `same_vehicle` or `same_day` relation, is rejected with HTTP 400
|
|
1154
1175
|
* `not_supported`: relations never silently skip a member. `same_route`,
|
|
1155
|
-
* `time_lag`, `compatible_vehicles
|
|
1156
|
-
*
|
|
1176
|
+
* `time_lag`, `compatible_vehicles` and `tag_order` reject a shipment with
|
|
1177
|
+
* HTTP 400 as well. `all_or_none` alone takes a shipment's own id, naming both
|
|
1178
|
+
* legs, in a group that is exactly one `consecutive` chain; such a chain may
|
|
1179
|
+
* also be jobs only.
|
|
1157
1180
|
* @example {
|
|
1158
1181
|
* "stops": [
|
|
1159
1182
|
* "job-1",
|
|
@@ -1166,20 +1189,25 @@ export interface components {
|
|
|
1166
1189
|
/**
|
|
1167
1190
|
* All or none
|
|
1168
1191
|
* @description All or none: either every member in `stops` is served, or none is.
|
|
1169
|
-
* Sets no timing;
|
|
1170
|
-
*
|
|
1192
|
+
* Sets no timing; a coupled group takes its timing from the
|
|
1193
|
+
* `synchronized` or `time_lag` relation that names its members. Hard.
|
|
1194
|
+
* Overlapping `all_or_none` relations chain: one on A and B plus
|
|
1171
1195
|
* one on B and C serve all three together or none of them. A group with
|
|
1172
1196
|
* a task in a vehicle's locked prefix (`plan.routes[].locked_count`) is
|
|
1173
1197
|
* exempt. A member that could be served but is held back because
|
|
1174
1198
|
* another cannot reports `all_or_none` in `unassigned[].reasons`.
|
|
1175
1199
|
*
|
|
1176
|
-
*
|
|
1177
|
-
*
|
|
1200
|
+
* A member may be a shipment id (both legs). Members are coupled by
|
|
1201
|
+
* `synchronized`/`time_lag`, or the group's stops (a shipment as its two
|
|
1202
|
+
* legs) are exactly one `consecutive` chain with no member coupled by
|
|
1203
|
+
* `synchronized` or `time_lag`, directly or through a `sequence` or
|
|
1204
|
+
* `consecutive` relation. A task named by neither is rejected with HTTP 400, as is a
|
|
1205
|
+
* shipment-leg id: name the shipment.
|
|
1178
1206
|
*/
|
|
1179
1207
|
RelationAllOrNone: {
|
|
1180
1208
|
/**
|
|
1181
|
-
* @description Job ids, at least two. A shipment
|
|
1182
|
-
*
|
|
1209
|
+
* @description Job ids or shipment ids, at least two. A shipment-leg stop id is
|
|
1210
|
+
* rejected with HTTP 400.
|
|
1183
1211
|
* @example [
|
|
1184
1212
|
* "job-1",
|
|
1185
1213
|
* "job-2"
|
|
@@ -1227,6 +1255,7 @@ export interface components {
|
|
|
1227
1255
|
* route. A member that is unassigned is skipped, so only listed
|
|
1228
1256
|
* neighbours that are both served are adjacent. Members on different
|
|
1229
1257
|
* routes are unconstrained; add `same_route` to keep them together.
|
|
1258
|
+
* Put a chain in an `all_or_none` to serve it whole or not at all.
|
|
1230
1259
|
*/
|
|
1231
1260
|
RelationConsecutive: {
|
|
1232
1261
|
/**
|
|
@@ -1483,14 +1512,14 @@ export interface components {
|
|
|
1483
1512
|
/** @description One problem in a request. */
|
|
1484
1513
|
RequestIssue: {
|
|
1485
1514
|
/**
|
|
1486
|
-
* Format:
|
|
1515
|
+
* Format: uint64
|
|
1487
1516
|
* @description `limit_exceeded` only: the count this request has.
|
|
1488
1517
|
*/
|
|
1489
1518
|
actual?: number | null;
|
|
1490
1519
|
/** @description What is wrong. */
|
|
1491
1520
|
code: components["schemas"]["ErrorItemCode"];
|
|
1492
1521
|
/**
|
|
1493
|
-
* Format:
|
|
1522
|
+
* Format: uint64
|
|
1494
1523
|
* @description `limit_exceeded` only: the published cap.
|
|
1495
1524
|
*/
|
|
1496
1525
|
limit?: number | null;
|
|
@@ -1819,9 +1848,9 @@ export interface components {
|
|
|
1819
1848
|
* @description Seconds past this task's `target.at`, measured at the stop's arrival
|
|
1820
1849
|
* (plus any `windowed` break taken on arrival there, idle before it
|
|
1821
1850
|
* included) or departure per `target.on`; `0` when met. Present only on a task
|
|
1822
|
-
* stop carrying a target. A shipment's target is measured on its
|
|
1823
|
-
* delivery leg, so it appears on the `:delivery` stop
|
|
1824
|
-
*
|
|
1851
|
+
* stop carrying a target. A shipment's own `target` is measured on its
|
|
1852
|
+
* delivery leg, so it appears on the `:delivery` stop; a `pickup.target`
|
|
1853
|
+
* or `delivery.target` appears on that leg's stop.
|
|
1825
1854
|
* @example 0
|
|
1826
1855
|
*/
|
|
1827
1856
|
target_lateness_s?: number | null;
|
|
@@ -1977,7 +2006,7 @@ export interface components {
|
|
|
1977
2006
|
*/
|
|
1978
2007
|
polyline?: null | components["schemas"]["PolylineDetail"];
|
|
1979
2008
|
/**
|
|
1980
|
-
* Format:
|
|
2009
|
+
* Format: uint64
|
|
1981
2010
|
* @description Random seed for the search. Default `42`: omitting it is the same as
|
|
1982
2011
|
* sending `42`, so send different values to explore different plans.
|
|
1983
2012
|
* Repeated runs on one machine usually return an identical plan; a
|
|
@@ -2239,7 +2268,7 @@ export interface components {
|
|
|
2239
2268
|
*/
|
|
2240
2269
|
unassigned_priority: number;
|
|
2241
2270
|
/**
|
|
2242
|
-
* Format:
|
|
2271
|
+
* Format: uint32
|
|
2243
2272
|
* @description How many hard-constraint violations the plan has (the `violations`
|
|
2244
2273
|
* arrays on routes and stops list them). Always `0` on a solve result.
|
|
2245
2274
|
* @example 0
|
|
@@ -2379,7 +2408,7 @@ export interface components {
|
|
|
2379
2408
|
/** @description How the search behind a plan ended. */
|
|
2380
2409
|
SearchInfo: {
|
|
2381
2410
|
/**
|
|
2382
|
-
* Format:
|
|
2411
|
+
* Format: uint64
|
|
2383
2412
|
* @description Search iterations performed. `0` when nothing was searched.
|
|
2384
2413
|
* @example 48210
|
|
2385
2414
|
*/
|
|
@@ -2405,7 +2434,7 @@ export interface components {
|
|
|
2405
2434
|
*/
|
|
2406
2435
|
cost: number;
|
|
2407
2436
|
/**
|
|
2408
|
-
* Format:
|
|
2437
|
+
* Format: uint64
|
|
2409
2438
|
* @description Milliseconds since the search started (the clock of
|
|
2410
2439
|
* `summary.timings.search_ms`).
|
|
2411
2440
|
*/
|
|
@@ -2550,10 +2579,11 @@ export interface components {
|
|
|
2550
2579
|
/**
|
|
2551
2580
|
* Format: int32
|
|
2552
2581
|
* @description Maximum trips (depot legs) in this shift, across all reload depots.
|
|
2553
|
-
* Counts trips, not reloads: `trips = reloads_used + 1
|
|
2554
|
-
*
|
|
2555
|
-
*
|
|
2556
|
-
*
|
|
2582
|
+
* Counts trips, not reloads: `trips = reloads_used + 1`, where the final
|
|
2583
|
+
* unload of `unload_before_end` is not counted. `max_trips: 1` means a
|
|
2584
|
+
* single trip — reloads are permitted in `reloads` but the cap prevents
|
|
2585
|
+
* ever using one, other than that final unload. `reloads` present with
|
|
2586
|
+
* `max_trips` absent means unlimited trips. A single reload depot can only be
|
|
2557
2587
|
* revisited up to 8 times per shift regardless of `max_trips`;
|
|
2558
2588
|
* a `max_trips` beyond that against one depot
|
|
2559
2589
|
* is accepted but the extra headroom is unreachable — list more than
|
|
@@ -2627,6 +2657,16 @@ export interface components {
|
|
|
2627
2657
|
* @example 2026-07-01T17:00:00+02:00
|
|
2628
2658
|
*/
|
|
2629
2659
|
to: string;
|
|
2660
|
+
/**
|
|
2661
|
+
* @description When `true`, a route that would end with load on board first unloads
|
|
2662
|
+
* at one of this shift's `reloads` depots: a final `reload` stop, at the
|
|
2663
|
+
* depot the solver finds cheapest, taking that depot's
|
|
2664
|
+
* `service_duration_s` and `per_reload`. It does not count toward
|
|
2665
|
+
* `max_trips`. A route whose last trip carries no load ends without one.
|
|
2666
|
+
* `true` without `reloads` is rejected with HTTP 400
|
|
2667
|
+
* `conflicting_fields`. Default `false`.
|
|
2668
|
+
*/
|
|
2669
|
+
unload_before_end?: boolean | null;
|
|
2630
2670
|
};
|
|
2631
2671
|
/**
|
|
2632
2672
|
* @description The `Costs` fields for one shift, minus `per_used_vehicle`. A shift is one
|
|
@@ -2696,7 +2736,7 @@ export interface components {
|
|
|
2696
2736
|
*/
|
|
2697
2737
|
max_route_duration_s?: number | null;
|
|
2698
2738
|
/**
|
|
2699
|
-
* Format:
|
|
2739
|
+
* Format: uint32
|
|
2700
2740
|
* @description Maximum stops served in this shift; a job counts as one stop.
|
|
2701
2741
|
* Start, end, break and reload stops in `routes[].stops` do not count; a
|
|
2702
2742
|
* shipment counts as two stops.
|
|
@@ -2825,10 +2865,10 @@ export interface components {
|
|
|
2825
2865
|
*/
|
|
2826
2866
|
preferences?: components["schemas"]["VehiclePreference"][] | null;
|
|
2827
2867
|
/**
|
|
2828
|
-
* Format:
|
|
2868
|
+
* Format: uint32
|
|
2829
2869
|
* @description Importance of a must-serve task when not all of them fit: the solver
|
|
2830
|
-
* maximises the summed `priority` of served tasks before any cost.
|
|
2831
|
-
* default `1` (maximise the count). A rank, not money — it never makes a
|
|
2870
|
+
* maximises the summed `priority` of served tasks before any cost. `1` to
|
|
2871
|
+
* `4294967295`, default `1` (maximise the count). A rank, not money — it never makes a
|
|
2832
2872
|
* task droppable; use `drop_cost` for that. Both set is a 400.
|
|
2833
2873
|
* @example 3
|
|
2834
2874
|
*/
|
|
@@ -2862,7 +2902,10 @@ export interface components {
|
|
|
2862
2902
|
tags?: string[] | null;
|
|
2863
2903
|
/**
|
|
2864
2904
|
* @description Soft target for this task, measured at its arrival (default) or
|
|
2865
|
-
* departure. On a shipment it is measured on the **delivery** leg
|
|
2905
|
+
* departure. On a shipment it is measured on the **delivery** leg and
|
|
2906
|
+
* cannot be combined with `delivery.target` (HTTP 400
|
|
2907
|
+
* `conflicting_fields`); `pickup.target` adds a separate target on the
|
|
2908
|
+
* pickup leg.
|
|
2866
2909
|
*/
|
|
2867
2910
|
target?: null | components["schemas"]["Target"];
|
|
2868
2911
|
};
|
|
@@ -2920,6 +2963,14 @@ export interface components {
|
|
|
2920
2963
|
* @example 60
|
|
2921
2964
|
*/
|
|
2922
2965
|
setup_duration_s?: number | null;
|
|
2966
|
+
/**
|
|
2967
|
+
* @description Soft target for this leg, measured at its arrival (default) or
|
|
2968
|
+
* departure. Same type, units and validation as the task-level
|
|
2969
|
+
* `target`. The shipment's own `target` is measured on the delivery
|
|
2970
|
+
* leg, so sending it with `delivery.target` is rejected with HTTP 400
|
|
2971
|
+
* (`conflicting_fields`).
|
|
2972
|
+
*/
|
|
2973
|
+
target?: null | components["schemas"]["Target"];
|
|
2923
2974
|
/** @description Time windows for this stop. */
|
|
2924
2975
|
time_windows?: components["schemas"]["TimeWindow"][] | null;
|
|
2925
2976
|
};
|
|
@@ -3221,7 +3272,7 @@ export interface components {
|
|
|
3221
3272
|
/** @description How the search ended. */
|
|
3222
3273
|
search: components["schemas"]["SearchInfo"];
|
|
3223
3274
|
/**
|
|
3224
|
-
* Format:
|
|
3275
|
+
* Format: uint32
|
|
3225
3276
|
* @description Routes with at least one task stop: one per used shift.
|
|
3226
3277
|
* @example 1
|
|
3227
3278
|
*/
|
|
@@ -3245,7 +3296,7 @@ export interface components {
|
|
|
3245
3296
|
*/
|
|
3246
3297
|
travel_estimated?: boolean;
|
|
3247
3298
|
/**
|
|
3248
|
-
* Format:
|
|
3299
|
+
* Format: uint32
|
|
3249
3300
|
* @description Distinct vehicles with at least one route.
|
|
3250
3301
|
* @example 1
|
|
3251
3302
|
*/
|
|
@@ -3324,17 +3375,17 @@ export interface components {
|
|
|
3324
3375
|
*/
|
|
3325
3376
|
TaskCounts: {
|
|
3326
3377
|
/**
|
|
3327
|
-
* Format:
|
|
3378
|
+
* Format: uint32
|
|
3328
3379
|
* @description Tasks on a route.
|
|
3329
3380
|
*/
|
|
3330
3381
|
served: number;
|
|
3331
3382
|
/**
|
|
3332
|
-
* Format:
|
|
3383
|
+
* Format: uint32
|
|
3333
3384
|
* @description Tasks on no route: the length of `unassigned`.
|
|
3334
3385
|
*/
|
|
3335
3386
|
unassigned: number;
|
|
3336
3387
|
/**
|
|
3337
|
-
* Format:
|
|
3388
|
+
* Format: uint32
|
|
3338
3389
|
* @description The unassigned tasks that carry no `drop_cost`: tasks the plan was
|
|
3339
3390
|
* required to serve and did not.
|
|
3340
3391
|
*/
|
|
@@ -3493,13 +3544,13 @@ export interface components {
|
|
|
3493
3544
|
*/
|
|
3494
3545
|
Timings: {
|
|
3495
3546
|
/**
|
|
3496
|
-
* Format:
|
|
3547
|
+
* Format: uint64
|
|
3497
3548
|
* @description Time spent in the search. Absent on `/evaluate`, which runs none, and
|
|
3498
3549
|
* on `/suggest`, which has no separate search figure.
|
|
3499
3550
|
*/
|
|
3500
3551
|
search_ms?: number | null;
|
|
3501
3552
|
/**
|
|
3502
|
-
* Format:
|
|
3553
|
+
* Format: uint64
|
|
3503
3554
|
* @description From the request's arrival to the end of the search (of the scoring,
|
|
3504
3555
|
* on `/evaluate`; of the suggestion search, on `/suggest`): fetching
|
|
3505
3556
|
* travel times and waiting for capacity included, building the response
|
|
@@ -3846,7 +3897,7 @@ export interface components {
|
|
|
3846
3897
|
*/
|
|
3847
3898
|
max_route_duration_s?: number | null;
|
|
3848
3899
|
/**
|
|
3849
|
-
* Format:
|
|
3900
|
+
* Format: uint32
|
|
3850
3901
|
* @description Maximum stops served per shift; a job counts as one stop.
|
|
3851
3902
|
* Start, end, break and reload stops in `routes[].stops` do not count; a
|
|
3852
3903
|
* shipment counts as two stops.
|
|
@@ -3931,15 +3982,16 @@ export interface components {
|
|
|
3931
3982
|
*/
|
|
3932
3983
|
code: components["schemas"]["ConstraintCode"];
|
|
3933
3984
|
/**
|
|
3934
|
-
* @description The capacity dimension over its limit. Only on `capacity
|
|
3985
|
+
* @description The capacity dimension over its limit. Only on `capacity`,
|
|
3986
|
+
* `unload_before_end` and `max_intake`.
|
|
3935
3987
|
* @example weight
|
|
3936
3988
|
*/
|
|
3937
3989
|
dimension?: string | null;
|
|
3938
3990
|
/**
|
|
3939
3991
|
* Format: int64
|
|
3940
3992
|
* @description How far over the limit, in `unit`. On `capacity`, `time_window` (the
|
|
3941
|
-
* seconds late), `shift_end`, `max_distance`, `max_route_duration
|
|
3942
|
-
* `quota`.
|
|
3993
|
+
* seconds late), `shift_end`, `max_distance`, `max_route_duration`,
|
|
3994
|
+
* `quota`, `unload_before_end` and `max_intake`.
|
|
3943
3995
|
* @example 15
|
|
3944
3996
|
*/
|
|
3945
3997
|
excess?: number | null;
|
package/dist/v3.d.ts
CHANGED
|
@@ -54,7 +54,7 @@ export interface paths {
|
|
|
54
54
|
put?: never;
|
|
55
55
|
/**
|
|
56
56
|
* Suggest best insertions for the tasks outside the plan
|
|
57
|
-
* @description Takes the same body as `POST /v3/routing/evaluate` (`problem` + committed `plan`), plus optional `options`. Every task of `problem` that is not in `plan` is a task to place: finds its feasible insertion positions and returns them as `insertions`, ranked by `delta.cost`, the change in the plan's cost in money. Each insertion lists the stops it adds (`placements`) and every plan route it changes, whole (`routes`): swap those routes into `plan` to apply it. An empty `insertions` carries a `reason` whose `code` is `time_limit`, `candidates_exhausted` or `infeasible` (an open set) and whose `message` says the same in English. The committed plan is never modified. Limitation: suggest never opens a new reload trip on a multi-trip vehicle.
|
|
57
|
+
* @description Takes the same body as `POST /v3/routing/evaluate` (`problem` + committed `plan`), plus optional `options`. Every task of `problem` that is not in `plan` is a task to place: finds its feasible insertion positions and returns them as `insertions`, ranked by `delta.cost`, the change in the plan's cost in money. The members of a `synchronized` or `time_lag` group outside `plan` are one task to place: each insertion places every member, and with the default `on: service_start` a crew's members start within `max_spread_s` of one another (`service_start`); a `time_lag` keeps its lag. Each insertion lists the stops it adds (`placements`) and every plan route it changes, whole (`routes`): swap those routes into `plan` to apply it. An empty `insertions` carries a `reason` whose `code` is `time_limit`, `candidates_exhausted` or `infeasible` (an open set) and whose `message` says the same in English. The committed plan is never modified. Limitation: suggest never opens a new reload trip on a multi-trip vehicle.
|
|
58
58
|
*/
|
|
59
59
|
post: operations["suggest"];
|
|
60
60
|
delete?: never;
|
|
@@ -296,7 +296,7 @@ export interface components {
|
|
|
296
296
|
* New values may be added; clients must accept unknown values and handle
|
|
297
297
|
* them generically, for example by showing `message`.
|
|
298
298
|
*
|
|
299
|
-
* Known values: `unreachable`, `max_leg_travel`, `required_skills`, `serves_tags`, `capacity`, `time_window`, `eligible_vehicles`, `shift_end`, `max_distance`, `max_route_duration`, `max_stops`, `sequence`, `tag_order`, `shipment`, `break`, `multi_trip`, `same_vehicle`, `same_day`, `same_route`, `compatible_vehicles`, `synchronized`, `time_lag`, `all_or_none`, `period_limit`, `quota`, `unknown`. An open set: a later release may add values, so accept any string and handle the ones you know.
|
|
299
|
+
* Known values: `unreachable`, `max_leg_travel`, `required_skills`, `serves_tags`, `capacity`, `time_window`, `eligible_vehicles`, `shift_end`, `max_distance`, `max_route_duration`, `max_stops`, `sequence`, `tag_order`, `shipment`, `break`, `multi_trip`, `unload_before_end`, `same_vehicle`, `same_day`, `same_route`, `compatible_vehicles`, `synchronized`, `time_lag`, `all_or_none`, `period_limit`, `quota`, `max_intake`, `unknown`. An open set: a later release may add values, so accept any string and handle the ones you know.
|
|
300
300
|
* @example capacity
|
|
301
301
|
*/
|
|
302
302
|
ConstraintCode: string;
|
|
@@ -403,6 +403,24 @@ export interface components {
|
|
|
403
403
|
id: string;
|
|
404
404
|
/** @description Where the depot is. */
|
|
405
405
|
location: components["schemas"]["Place"];
|
|
406
|
+
/**
|
|
407
|
+
* @description The most load the depot may receive across the whole request, per
|
|
408
|
+
* named dimension: a tip site's intake limit. Not per day: it sums every
|
|
409
|
+
* shift of every day.
|
|
410
|
+
*
|
|
411
|
+
* Counted is the load on board on arrival at each reload here (including
|
|
412
|
+
* a shift's `initial_load` on its first trip and the final tip of
|
|
413
|
+
* `unload_before_end`), plus the load on board at the end of a shift
|
|
414
|
+
* whose `end` is this depot (not with `unload_before_end`, which unloads
|
|
415
|
+
* at a reload first). A shift's start never counts, and an unused shift
|
|
416
|
+
* receives nothing. A dimension left out is uncapped; `0` means the
|
|
417
|
+
* depot takes none of it. A hard limit: a task that would overfill every
|
|
418
|
+
* depot its trip can tip at stays unassigned (reason `max_intake`).
|
|
419
|
+
*
|
|
420
|
+
* Each dimension must be one a task or vehicle declares, and some shift
|
|
421
|
+
* must reload here, or end here without `unload_before_end`.
|
|
422
|
+
*/
|
|
423
|
+
max_intake?: null | components["schemas"]["Quantities"];
|
|
406
424
|
/**
|
|
407
425
|
* Format: double
|
|
408
426
|
* @description Money charged once per reload visit, in the objective's currency.
|
|
@@ -650,6 +668,7 @@ export interface components {
|
|
|
650
668
|
* "arrival": "2026-07-01T09:30:00+02:00",
|
|
651
669
|
* "id": "job-2",
|
|
652
670
|
* "latest_arrival": "2026-07-01T10:15:00+02:00",
|
|
671
|
+
* "service_start": "2026-07-01T09:30:00+02:00",
|
|
653
672
|
* "shift": "mon",
|
|
654
673
|
* "type": "job",
|
|
655
674
|
* "vehicle": "v1"
|
|
@@ -814,10 +833,10 @@ export interface components {
|
|
|
814
833
|
*/
|
|
815
834
|
preferences?: components["schemas"]["VehiclePreference"][] | null;
|
|
816
835
|
/**
|
|
817
|
-
* Format:
|
|
836
|
+
* Format: uint32
|
|
818
837
|
* @description Importance of a must-serve task when not all of them fit: the solver
|
|
819
|
-
* maximises the summed `priority` of served tasks before any cost.
|
|
820
|
-
* default `1` (maximise the count). A rank, not money — it never makes a
|
|
838
|
+
* maximises the summed `priority` of served tasks before any cost. `1` to
|
|
839
|
+
* `4294967295`, default `1` (maximise the count). A rank, not money — it never makes a
|
|
821
840
|
* task droppable; use `drop_cost` for that. Both set is a 400.
|
|
822
841
|
* @example 3
|
|
823
842
|
*/
|
|
@@ -876,7 +895,10 @@ export interface components {
|
|
|
876
895
|
tags?: string[] | null;
|
|
877
896
|
/**
|
|
878
897
|
* @description Soft target for this task, measured at its arrival (default) or
|
|
879
|
-
* departure. On a shipment it is measured on the **delivery** leg
|
|
898
|
+
* departure. On a shipment it is measured on the **delivery** leg and
|
|
899
|
+
* cannot be combined with `delivery.target` (HTTP 400
|
|
900
|
+
* `conflicting_fields`); `pickup.target` adds a separate target on the
|
|
901
|
+
* pickup leg.
|
|
880
902
|
*/
|
|
881
903
|
target?: null | components["schemas"]["Target"];
|
|
882
904
|
/** @description Time windows for this visit. */
|
|
@@ -1005,7 +1027,7 @@ export interface components {
|
|
|
1005
1027
|
*/
|
|
1006
1028
|
max_route_duration_s?: number | null;
|
|
1007
1029
|
/**
|
|
1008
|
-
* Format:
|
|
1030
|
+
* Format: uint32
|
|
1009
1031
|
* @description Hard cap on served stops across the period's shifts; a job counts as
|
|
1010
1032
|
* one stop. Start, end, break and reload stops in `routes[].stops` do not
|
|
1011
1033
|
* count; a shipment counts as two stops.
|
|
@@ -1034,6 +1056,7 @@ export interface components {
|
|
|
1034
1056
|
* "arrival": "2026-07-01T09:30:00+02:00",
|
|
1035
1057
|
* "id": "s1:pickup",
|
|
1036
1058
|
* "latest_arrival": "2026-07-01T10:15:00+02:00",
|
|
1059
|
+
* "service_start": "2026-07-01T09:30:00+02:00",
|
|
1037
1060
|
* "shift": "mon",
|
|
1038
1061
|
* "type": "pickup",
|
|
1039
1062
|
* "vehicle": "v1"
|
|
@@ -1054,10 +1077,23 @@ export interface components {
|
|
|
1054
1077
|
* @description Latest arrival that still keeps the rest of the route feasible
|
|
1055
1078
|
* (RFC 3339, in the offset of `arrival`) — the smaller of the task's own time-window latest and
|
|
1056
1079
|
* the route's forward slack here. Under priced lateness it may be
|
|
1057
|
-
* **earlier** than `arrival`.
|
|
1080
|
+
* **earlier** than `arrival`. For a `synchronized` or `time_lag` member it
|
|
1081
|
+
* is at most `arrival` plus the wait before `service_start`: arriving
|
|
1082
|
+
* later would move the start its partners are booked to meet.
|
|
1058
1083
|
* @example 2026-07-01T10:15:00+02:00
|
|
1059
1084
|
*/
|
|
1060
1085
|
latest_arrival: string;
|
|
1086
|
+
/**
|
|
1087
|
+
* Format: date-time
|
|
1088
|
+
* @description Service start (RFC 3339, in the offset of `arrival`): `arrival` plus
|
|
1089
|
+
* any wait for the time window or a break, and for a `synchronized` or
|
|
1090
|
+
* `time_lag` member the hold for its partners, as `service_start` on the
|
|
1091
|
+
* route stop. With the default `on: service_start`, the members of a
|
|
1092
|
+
* crew start here within the relation's `max_spread_s`: the booking time
|
|
1093
|
+
* (`on: departure` aligns their ends instead; a `time_lag` keeps its lag).
|
|
1094
|
+
* @example 2026-07-01T09:30:00+02:00
|
|
1095
|
+
*/
|
|
1096
|
+
service_start: string;
|
|
1061
1097
|
/** @description Shift of that plan route. */
|
|
1062
1098
|
shift: string;
|
|
1063
1099
|
/**
|
|
@@ -1092,7 +1128,7 @@ export interface components {
|
|
|
1092
1128
|
*/
|
|
1093
1129
|
PlanRoute: {
|
|
1094
1130
|
/**
|
|
1095
|
-
* Format:
|
|
1131
|
+
* Format: uint32
|
|
1096
1132
|
* @description On solve, the first `locked_count` stops stay where they are (already
|
|
1097
1133
|
* dispatched). Counts every listed stop. Cannot be combined with a
|
|
1098
1134
|
* `reload` stop, and must not exceed the route's stop count — both are
|
|
@@ -1341,7 +1377,7 @@ export interface components {
|
|
|
1341
1377
|
*/
|
|
1342
1378
|
id: string;
|
|
1343
1379
|
/**
|
|
1344
|
-
* Format:
|
|
1380
|
+
* Format: uint32
|
|
1345
1381
|
* @description The cap on counted stops; a job counts as one stop.
|
|
1346
1382
|
* Start, end, break and reload stops in `routes[].stops` do not count; a
|
|
1347
1383
|
* shipment counts as two stops.
|
|
@@ -1385,8 +1421,10 @@ export interface components {
|
|
|
1385
1421
|
* its pickup. A shipment's own id in `stops`, or a shipment carrying the
|
|
1386
1422
|
* `tag` of a `same_vehicle` or `same_day` relation, is rejected with HTTP 400
|
|
1387
1423
|
* `not_supported`: relations never silently skip a member. `same_route`,
|
|
1388
|
-
* `time_lag`, `compatible_vehicles
|
|
1389
|
-
*
|
|
1424
|
+
* `time_lag`, `compatible_vehicles` and `tag_order` reject a shipment with
|
|
1425
|
+
* HTTP 400 as well. `all_or_none` alone takes a shipment's own id, naming both
|
|
1426
|
+
* legs, in a group that is exactly one `consecutive` chain; such a chain may
|
|
1427
|
+
* also be jobs only.
|
|
1390
1428
|
* @example {
|
|
1391
1429
|
* "stops": [
|
|
1392
1430
|
* "job-1",
|
|
@@ -1399,20 +1437,25 @@ export interface components {
|
|
|
1399
1437
|
/**
|
|
1400
1438
|
* All or none
|
|
1401
1439
|
* @description All or none: either every member in `stops` is served, or none is.
|
|
1402
|
-
* Sets no timing;
|
|
1403
|
-
*
|
|
1440
|
+
* Sets no timing; a coupled group takes its timing from the
|
|
1441
|
+
* `synchronized` or `time_lag` relation that names its members. Hard.
|
|
1442
|
+
* Overlapping `all_or_none` relations chain: one on A and B plus
|
|
1404
1443
|
* one on B and C serve all three together or none of them. A group with
|
|
1405
1444
|
* a task in a vehicle's locked prefix (`plan.routes[].locked_count`) is
|
|
1406
1445
|
* exempt. A member that could be served but is held back because
|
|
1407
1446
|
* another cannot reports `all_or_none` in `unassigned[].reasons`.
|
|
1408
1447
|
*
|
|
1409
|
-
*
|
|
1410
|
-
*
|
|
1448
|
+
* A member may be a shipment id (both legs). Members are coupled by
|
|
1449
|
+
* `synchronized`/`time_lag`, or the group's stops (a shipment as its two
|
|
1450
|
+
* legs) are exactly one `consecutive` chain with no member coupled by
|
|
1451
|
+
* `synchronized` or `time_lag`, directly or through a `sequence` or
|
|
1452
|
+
* `consecutive` relation. A task named by neither is rejected with HTTP 400, as is a
|
|
1453
|
+
* shipment-leg id: name the shipment.
|
|
1411
1454
|
*/
|
|
1412
1455
|
RelationAllOrNone: {
|
|
1413
1456
|
/**
|
|
1414
|
-
* @description Job ids, at least two. A shipment
|
|
1415
|
-
*
|
|
1457
|
+
* @description Job ids or shipment ids, at least two. A shipment-leg stop id is
|
|
1458
|
+
* rejected with HTTP 400.
|
|
1416
1459
|
* @example [
|
|
1417
1460
|
* "job-1",
|
|
1418
1461
|
* "job-2"
|
|
@@ -1460,6 +1503,7 @@ export interface components {
|
|
|
1460
1503
|
* route. A member that is unassigned is skipped, so only listed
|
|
1461
1504
|
* neighbours that are both served are adjacent. Members on different
|
|
1462
1505
|
* routes are unconstrained; add `same_route` to keep them together.
|
|
1506
|
+
* Put a chain in an `all_or_none` to serve it whole or not at all.
|
|
1463
1507
|
*/
|
|
1464
1508
|
RelationConsecutive: {
|
|
1465
1509
|
/**
|
|
@@ -1716,14 +1760,14 @@ export interface components {
|
|
|
1716
1760
|
/** @description One problem in a request. */
|
|
1717
1761
|
RequestIssue: {
|
|
1718
1762
|
/**
|
|
1719
|
-
* Format:
|
|
1763
|
+
* Format: uint64
|
|
1720
1764
|
* @description `limit_exceeded` only: the count this request has.
|
|
1721
1765
|
*/
|
|
1722
1766
|
actual?: number | null;
|
|
1723
1767
|
/** @description What is wrong. */
|
|
1724
1768
|
code: components["schemas"]["ErrorItemCode"];
|
|
1725
1769
|
/**
|
|
1726
|
-
* Format:
|
|
1770
|
+
* Format: uint64
|
|
1727
1771
|
* @description `limit_exceeded` only: the published cap.
|
|
1728
1772
|
*/
|
|
1729
1773
|
limit?: number | null;
|
|
@@ -2052,9 +2096,9 @@ export interface components {
|
|
|
2052
2096
|
* @description Seconds past this task's `target.at`, measured at the stop's arrival
|
|
2053
2097
|
* (plus any `windowed` break taken on arrival there, idle before it
|
|
2054
2098
|
* included) or departure per `target.on`; `0` when met. Present only on a task
|
|
2055
|
-
* stop carrying a target. A shipment's target is measured on its
|
|
2056
|
-
* delivery leg, so it appears on the `:delivery` stop
|
|
2057
|
-
*
|
|
2099
|
+
* stop carrying a target. A shipment's own `target` is measured on its
|
|
2100
|
+
* delivery leg, so it appears on the `:delivery` stop; a `pickup.target`
|
|
2101
|
+
* or `delivery.target` appears on that leg's stop.
|
|
2058
2102
|
* @example 0
|
|
2059
2103
|
*/
|
|
2060
2104
|
target_lateness_s?: number | null;
|
|
@@ -2140,7 +2184,7 @@ export interface components {
|
|
|
2140
2184
|
*/
|
|
2141
2185
|
unassigned_priority: number;
|
|
2142
2186
|
/**
|
|
2143
|
-
* Format:
|
|
2187
|
+
* Format: uint32
|
|
2144
2188
|
* @description How many hard-constraint violations the plan has (the `violations`
|
|
2145
2189
|
* arrays on routes and stops list them). Always `0` on a solve result.
|
|
2146
2190
|
* @example 0
|
|
@@ -2280,7 +2324,7 @@ export interface components {
|
|
|
2280
2324
|
/** @description How the search behind a plan ended. */
|
|
2281
2325
|
SearchInfo: {
|
|
2282
2326
|
/**
|
|
2283
|
-
* Format:
|
|
2327
|
+
* Format: uint64
|
|
2284
2328
|
* @description Search iterations performed. `0` when nothing was searched.
|
|
2285
2329
|
* @example 48210
|
|
2286
2330
|
*/
|
|
@@ -2306,7 +2350,7 @@ export interface components {
|
|
|
2306
2350
|
*/
|
|
2307
2351
|
cost: number;
|
|
2308
2352
|
/**
|
|
2309
|
-
* Format:
|
|
2353
|
+
* Format: uint64
|
|
2310
2354
|
* @description Milliseconds since the search started (the clock of
|
|
2311
2355
|
* `summary.timings.search_ms`).
|
|
2312
2356
|
*/
|
|
@@ -2451,10 +2495,11 @@ export interface components {
|
|
|
2451
2495
|
/**
|
|
2452
2496
|
* Format: int32
|
|
2453
2497
|
* @description Maximum trips (depot legs) in this shift, across all reload depots.
|
|
2454
|
-
* Counts trips, not reloads: `trips = reloads_used + 1
|
|
2455
|
-
*
|
|
2456
|
-
*
|
|
2457
|
-
*
|
|
2498
|
+
* Counts trips, not reloads: `trips = reloads_used + 1`, where the final
|
|
2499
|
+
* unload of `unload_before_end` is not counted. `max_trips: 1` means a
|
|
2500
|
+
* single trip — reloads are permitted in `reloads` but the cap prevents
|
|
2501
|
+
* ever using one, other than that final unload. `reloads` present with
|
|
2502
|
+
* `max_trips` absent means unlimited trips. A single reload depot can only be
|
|
2458
2503
|
* revisited up to 8 times per shift regardless of `max_trips`;
|
|
2459
2504
|
* a `max_trips` beyond that against one depot
|
|
2460
2505
|
* is accepted but the extra headroom is unreachable — list more than
|
|
@@ -2528,6 +2573,16 @@ export interface components {
|
|
|
2528
2573
|
* @example 2026-07-01T17:00:00+02:00
|
|
2529
2574
|
*/
|
|
2530
2575
|
to: string;
|
|
2576
|
+
/**
|
|
2577
|
+
* @description When `true`, a route that would end with load on board first unloads
|
|
2578
|
+
* at one of this shift's `reloads` depots: a final `reload` stop, at the
|
|
2579
|
+
* depot the solver finds cheapest, taking that depot's
|
|
2580
|
+
* `service_duration_s` and `per_reload`. It does not count toward
|
|
2581
|
+
* `max_trips`. A route whose last trip carries no load ends without one.
|
|
2582
|
+
* `true` without `reloads` is rejected with HTTP 400
|
|
2583
|
+
* `conflicting_fields`. Default `false`.
|
|
2584
|
+
*/
|
|
2585
|
+
unload_before_end?: boolean | null;
|
|
2531
2586
|
};
|
|
2532
2587
|
/**
|
|
2533
2588
|
* @description The `Costs` fields for one shift, minus `per_used_vehicle`. A shift is one
|
|
@@ -2597,7 +2652,7 @@ export interface components {
|
|
|
2597
2652
|
*/
|
|
2598
2653
|
max_route_duration_s?: number | null;
|
|
2599
2654
|
/**
|
|
2600
|
-
* Format:
|
|
2655
|
+
* Format: uint32
|
|
2601
2656
|
* @description Maximum stops served in this shift; a job counts as one stop.
|
|
2602
2657
|
* Start, end, break and reload stops in `routes[].stops` do not count; a
|
|
2603
2658
|
* shipment counts as two stops.
|
|
@@ -2739,10 +2794,10 @@ export interface components {
|
|
|
2739
2794
|
*/
|
|
2740
2795
|
preferences?: components["schemas"]["VehiclePreference"][] | null;
|
|
2741
2796
|
/**
|
|
2742
|
-
* Format:
|
|
2797
|
+
* Format: uint32
|
|
2743
2798
|
* @description Importance of a must-serve task when not all of them fit: the solver
|
|
2744
|
-
* maximises the summed `priority` of served tasks before any cost.
|
|
2745
|
-
* default `1` (maximise the count). A rank, not money — it never makes a
|
|
2799
|
+
* maximises the summed `priority` of served tasks before any cost. `1` to
|
|
2800
|
+
* `4294967295`, default `1` (maximise the count). A rank, not money — it never makes a
|
|
2746
2801
|
* task droppable; use `drop_cost` for that. Both set is a 400.
|
|
2747
2802
|
* @example 3
|
|
2748
2803
|
*/
|
|
@@ -2776,7 +2831,10 @@ export interface components {
|
|
|
2776
2831
|
tags?: string[] | null;
|
|
2777
2832
|
/**
|
|
2778
2833
|
* @description Soft target for this task, measured at its arrival (default) or
|
|
2779
|
-
* departure. On a shipment it is measured on the **delivery** leg
|
|
2834
|
+
* departure. On a shipment it is measured on the **delivery** leg and
|
|
2835
|
+
* cannot be combined with `delivery.target` (HTTP 400
|
|
2836
|
+
* `conflicting_fields`); `pickup.target` adds a separate target on the
|
|
2837
|
+
* pickup leg.
|
|
2780
2838
|
*/
|
|
2781
2839
|
target?: null | components["schemas"]["Target"];
|
|
2782
2840
|
};
|
|
@@ -2834,6 +2892,14 @@ export interface components {
|
|
|
2834
2892
|
* @example 60
|
|
2835
2893
|
*/
|
|
2836
2894
|
setup_duration_s?: number | null;
|
|
2895
|
+
/**
|
|
2896
|
+
* @description Soft target for this leg, measured at its arrival (default) or
|
|
2897
|
+
* departure. Same type, units and validation as the task-level
|
|
2898
|
+
* `target`. The shipment's own `target` is measured on the delivery
|
|
2899
|
+
* leg, so sending it with `delivery.target` is rejected with HTTP 400
|
|
2900
|
+
* (`conflicting_fields`).
|
|
2901
|
+
*/
|
|
2902
|
+
target?: null | components["schemas"]["Target"];
|
|
2837
2903
|
/** @description Time windows for this stop. */
|
|
2838
2904
|
time_windows?: components["schemas"]["TimeWindow"][] | null;
|
|
2839
2905
|
};
|
|
@@ -2873,7 +2939,7 @@ export interface components {
|
|
|
2873
2939
|
*/
|
|
2874
2940
|
polyline?: null | components["schemas"]["PolylineDetail"];
|
|
2875
2941
|
/**
|
|
2876
|
-
* Format:
|
|
2942
|
+
* Format: uint64
|
|
2877
2943
|
* @description Random seed for the search. Default `42`: omitting it is the same as
|
|
2878
2944
|
* sending `42`, so send different values to explore different plans.
|
|
2879
2945
|
* Repeated runs on one machine usually return an identical plan; a
|
|
@@ -3227,15 +3293,18 @@ export interface components {
|
|
|
3227
3293
|
*/
|
|
3228
3294
|
SuggestOptions: {
|
|
3229
3295
|
/**
|
|
3230
|
-
* Format:
|
|
3296
|
+
* Format: uint32
|
|
3231
3297
|
* @description Max ranked `insertions` in each `suggestions[]` entry, `1` to `10`;
|
|
3232
3298
|
* default 5. It caps the insertions per entry, not the number of
|
|
3233
3299
|
* entries: every task outside `plan` still gets its entry. Values outside
|
|
3234
3300
|
* the range are a 400, never clamped. It also sets how widely a unit of
|
|
3235
3301
|
* several stops is searched (such a unit is never searched exhaustively):
|
|
3236
3302
|
* each stop after the unit's first keeps at most
|
|
3237
|
-
* `max(8, 4 × max_insertions)` partial placements. A
|
|
3238
|
-
*
|
|
3303
|
+
* `max(8, 4 × max_insertions)` partial placements. A `synchronized` or
|
|
3304
|
+
* `time_lag` group is the exception: every start slot of each member is
|
|
3305
|
+
* tried, each other member at its cheapest slot, whatever this value. A
|
|
3306
|
+
* single-stop task has every feasible position considered unless
|
|
3307
|
+
* `time_limit_s` runs out first.
|
|
3239
3308
|
* @default 5
|
|
3240
3309
|
* @example 5
|
|
3241
3310
|
*/
|
|
@@ -3394,6 +3463,7 @@ export interface components {
|
|
|
3394
3463
|
* "arrival": "2026-07-01T09:30:00+02:00",
|
|
3395
3464
|
* "id": "job-2",
|
|
3396
3465
|
* "latest_arrival": "2026-07-01T10:15:00+02:00",
|
|
3466
|
+
* "service_start": "2026-07-01T09:30:00+02:00",
|
|
3397
3467
|
* "shift": "mon",
|
|
3398
3468
|
* "type": "job",
|
|
3399
3469
|
* "vehicle": "v1"
|
|
@@ -3439,11 +3509,12 @@ export interface components {
|
|
|
3439
3509
|
*/
|
|
3440
3510
|
timings: components["schemas"]["Timings"];
|
|
3441
3511
|
/**
|
|
3442
|
-
* @description `true` when `options.time_limit_s` cut the search short,
|
|
3512
|
+
* @description `true` when `options.time_limit_s` cut the search short, a
|
|
3443
3513
|
* multi-member unit came back empty after the search had discarded
|
|
3444
3514
|
* candidates (an inconclusive "not found"; its `reason.code` is
|
|
3445
|
-
* `candidates_exhausted`)
|
|
3446
|
-
*
|
|
3515
|
+
* `candidates_exhausted`), or a crew lists fewer than `max_insertions`
|
|
3516
|
+
* after a member's cheapest slot was refused and its other slots went
|
|
3517
|
+
* untried. Lists may then be incomplete or missing the best insertion. A single visit's only level is never pruned, so its
|
|
3447
3518
|
* empty list is proof of infeasibility unless the budget cut it, and its
|
|
3448
3519
|
* `reason.code` is then `time_limit`.
|
|
3449
3520
|
*/
|
|
@@ -3525,7 +3596,7 @@ export interface components {
|
|
|
3525
3596
|
/** @description How the search ended. */
|
|
3526
3597
|
search: components["schemas"]["SearchInfo"];
|
|
3527
3598
|
/**
|
|
3528
|
-
* Format:
|
|
3599
|
+
* Format: uint32
|
|
3529
3600
|
* @description Routes with at least one task stop: one per used shift.
|
|
3530
3601
|
* @example 1
|
|
3531
3602
|
*/
|
|
@@ -3549,7 +3620,7 @@ export interface components {
|
|
|
3549
3620
|
*/
|
|
3550
3621
|
travel_estimated?: boolean;
|
|
3551
3622
|
/**
|
|
3552
|
-
* Format:
|
|
3623
|
+
* Format: uint32
|
|
3553
3624
|
* @description Distinct vehicles with at least one route.
|
|
3554
3625
|
* @example 1
|
|
3555
3626
|
*/
|
|
@@ -3628,17 +3699,17 @@ export interface components {
|
|
|
3628
3699
|
*/
|
|
3629
3700
|
TaskCounts: {
|
|
3630
3701
|
/**
|
|
3631
|
-
* Format:
|
|
3702
|
+
* Format: uint32
|
|
3632
3703
|
* @description Tasks on a route.
|
|
3633
3704
|
*/
|
|
3634
3705
|
served: number;
|
|
3635
3706
|
/**
|
|
3636
|
-
* Format:
|
|
3707
|
+
* Format: uint32
|
|
3637
3708
|
* @description Tasks on no route: the length of `unassigned`.
|
|
3638
3709
|
*/
|
|
3639
3710
|
unassigned: number;
|
|
3640
3711
|
/**
|
|
3641
|
-
* Format:
|
|
3712
|
+
* Format: uint32
|
|
3642
3713
|
* @description The unassigned tasks that carry no `drop_cost`: tasks the plan was
|
|
3643
3714
|
* required to serve and did not.
|
|
3644
3715
|
*/
|
|
@@ -3659,6 +3730,7 @@ export interface components {
|
|
|
3659
3730
|
* "arrival": "2026-07-01T09:30:00+02:00",
|
|
3660
3731
|
* "id": "job-2",
|
|
3661
3732
|
* "latest_arrival": "2026-07-01T10:15:00+02:00",
|
|
3733
|
+
* "service_start": "2026-07-01T09:30:00+02:00",
|
|
3662
3734
|
* "shift": "mon",
|
|
3663
3735
|
* "type": "job",
|
|
3664
3736
|
* "vehicle": "v1"
|
|
@@ -3695,10 +3767,9 @@ export interface components {
|
|
|
3695
3767
|
/** @description Why `insertions` is empty; absent otherwise. */
|
|
3696
3768
|
reason?: null | components["schemas"]["SuggestReason"];
|
|
3697
3769
|
/**
|
|
3698
|
-
* @description The unit's lead:
|
|
3699
|
-
*
|
|
3700
|
-
*
|
|
3701
|
-
* then `shipments`).
|
|
3770
|
+
* @description The unit's lead: the visit, the shipment, the first stop of a
|
|
3771
|
+
* `sequence` chain in the unit, or else, a crew included, the member
|
|
3772
|
+
* that comes first in problem order (`jobs`, then `shipments`).
|
|
3702
3773
|
* @example job-2
|
|
3703
3774
|
*/
|
|
3704
3775
|
task: string;
|
|
@@ -3856,13 +3927,13 @@ export interface components {
|
|
|
3856
3927
|
*/
|
|
3857
3928
|
Timings: {
|
|
3858
3929
|
/**
|
|
3859
|
-
* Format:
|
|
3930
|
+
* Format: uint64
|
|
3860
3931
|
* @description Time spent in the search. Absent on `/evaluate`, which runs none, and
|
|
3861
3932
|
* on `/suggest`, which has no separate search figure.
|
|
3862
3933
|
*/
|
|
3863
3934
|
search_ms?: number | null;
|
|
3864
3935
|
/**
|
|
3865
|
-
* Format:
|
|
3936
|
+
* Format: uint64
|
|
3866
3937
|
* @description From the request's arrival to the end of the search (of the scoring,
|
|
3867
3938
|
* on `/evaluate`; of the suggestion search, on `/suggest`): fetching
|
|
3868
3939
|
* travel times and waiting for capacity included, building the response
|
|
@@ -4223,7 +4294,7 @@ export interface components {
|
|
|
4223
4294
|
*/
|
|
4224
4295
|
max_route_duration_s?: number | null;
|
|
4225
4296
|
/**
|
|
4226
|
-
* Format:
|
|
4297
|
+
* Format: uint32
|
|
4227
4298
|
* @description Maximum stops served per shift; a job counts as one stop.
|
|
4228
4299
|
* Start, end, break and reload stops in `routes[].stops` do not count; a
|
|
4229
4300
|
* shipment counts as two stops.
|
|
@@ -4308,15 +4379,16 @@ export interface components {
|
|
|
4308
4379
|
*/
|
|
4309
4380
|
code: components["schemas"]["ConstraintCode"];
|
|
4310
4381
|
/**
|
|
4311
|
-
* @description The capacity dimension over its limit. Only on `capacity
|
|
4382
|
+
* @description The capacity dimension over its limit. Only on `capacity`,
|
|
4383
|
+
* `unload_before_end` and `max_intake`.
|
|
4312
4384
|
* @example weight
|
|
4313
4385
|
*/
|
|
4314
4386
|
dimension?: string | null;
|
|
4315
4387
|
/**
|
|
4316
4388
|
* Format: int64
|
|
4317
4389
|
* @description How far over the limit, in `unit`. On `capacity`, `time_window` (the
|
|
4318
|
-
* seconds late), `shift_end`, `max_distance`, `max_route_duration
|
|
4319
|
-
* `quota`.
|
|
4390
|
+
* seconds late), `shift_end`, `max_distance`, `max_route_duration`,
|
|
4391
|
+
* `quota`, `unload_before_end` and `max_intake`.
|
|
4320
4392
|
* @example 15
|
|
4321
4393
|
*/
|
|
4322
4394
|
excess?: number | null;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solvice/routing",
|
|
3
|
-
"version": "0.19.
|
|
3
|
+
"version": "0.19.3-beta.0",
|
|
4
4
|
"description": "TypeScript client for the Solvice V3 routing API, generated from its OpenAPI spec.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://docs.solvice.io/guides/platform/sdks/typescript",
|