18 Appendix - Object definitions

The following sections list the different JSON objects which are sent to or returned from the RESTful endpoints, in the body the HTTP request/response.

18.1 ODLModel

class ODLModel{
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   ODLModelConfiguration configuration;
   ODLModelData data;
   String _id;
}

18.1.1 ODLModelConfiguration

Appears in:

model.configuration

class ODLModelConfiguration{
   List<ODLWebHookConfiguration> webHooks;
   Long dispatchBufferMilliseconds;
   Long dispatchIfWaitingTimeLessThanMillis;
   ODLCurrentTimeConfig timeOverride;
   ODLDistancesConfig distances;
   ODLProblemConfiguration problem;
   ODLReportingConfiguration reporting;
   ODLStaticModelCPUBudget staticCPUBudget;
   String deleteModelAfter; // Date-time stored in a string.
}

18.1.1.1 ODLCurrentTimeConfig

Appears in:

model.configuration.timeOverride

class ODLCurrentTimeConfig{
   ODLTimeOverrideType overrideType;
   String override; // Date-time stored in a string.
}

enum ODLTimeOverrideType{
   NONE,
   SCHEDULER,
}

18.1.1.2 ODLDistancesConfig

Appears in:

model.configuration.distances

class ODLDistancesConfig{
   Double basicTL2RawSTDSpeedsFallbackMetricToleranceValue;
   Double straightLineDistanceMultiplier;
   Double straightLineSpeedMetresPerSec;
   List<ODLSingleDayDistancesConfig> days;
   ODLDistancesType type;
   ODLParkingTime parkingTime;
   ODLTimeDependentDistancesConfig stdSpeedsProfileForFallback;
   String learnerFilename;
   String matrixFilename;
   TreeMap<String,ODLTimeDependentDistancesConfig> profiles;
}

18.1.1.2.1 ODLTimeDependentDistancesConfig

class ODLTimeDependentDistancesConfig{
   Double basicTL2RawSTDSpeedsFallbackMetricToleranceValue;
   Double straightLineDistanceMultiplier;
   Double straightLineSpeedMetresPerSec;
   List<ODLSingleDayDistancesConfig> days;
   ODLDistancesType type;
   ODLParkingTime parkingTime;
   ODLTimeDependentDistancesConfig stdSpeedsProfileForFallback;
   String learnerFilename;
   String matrixFilename;
}

18.1.1.2.2 ODLSingleDayDistancesConfig

Appears in:

days[]

class ODLSingleDayDistancesConfig{
   Boolean friday;
   Boolean monday;
   Boolean saturday;
   Boolean sunday;
   Boolean thursday;
   Boolean tuesday;
   Boolean wednesday;
   List<ODLTimePeriodDistancesConfig> periods;
}

18.1.1.2.3 ODLTimePeriodDistancesConfig

Appears in:

days[].periods[]

class ODLTimePeriodDistancesConfig{
   Double weight1;
   Double weight2;
   ODLAtomicDistancesConfig config1;
   ODLAtomicDistancesConfig config2;
   String endTime; // Time (without date) stored in a string.
   String startTime; // Time (without date) stored in a string.
}

18.1.1.2.4 ODLAtomicDistancesConfig

class ODLAtomicDistancesConfig{
   Double basicTL2RawSTDSpeedsFallbackMetricToleranceValue;
   Double straightLineDistanceMultiplier;
   Double straightLineSpeedMetresPerSec;
   ODLDistancesType type;
   ODLParkingTime parkingTime;
   ODLTimeDependentDistancesConfig stdSpeedsProfileForFallback;
   String learnerFilename;
   String matrixFilename;
}

enum ODLDistancesType{
   EUCLID,
   ROADS,
   TEXT,
   TEXT_INTERP,
}

18.1.1.2.5 ODLParkingTime

Appears in:

parkingTime

class ODLParkingTime{
   Double parkingTimeMinSeparationMetres;
   Double parkingTimeSeconds;
}

18.1.1.3 ODLProblemConfiguration

Appears in:

model.configuration.problem

class ODLProblemConfiguration{
   Boolean outOfOrderTWsAllowed;
   ODLFullnessPenaltyConfig fullnessPenalty;
   ODLIncompatibleJobGroupRule[] incompatibleJobGroupRules;
   ODLNonlinearPenaltyCalculator latenessPenalty;
   ODLObjectivesConfiguration objective;
}

18.1.1.3.1 ODLFullnessPenaltyConfig

Appears in:

model.configuration.problem.fullnessPenalty

class ODLFullnessPenaltyConfig{
   Double power;
   Double weight;
}

18.1.1.3.2 ODLIncompatibleJobGroupRule

Appears in:

model.configuration.problem.incompatibleJobGroupRules

class ODLIncompatibleJobGroupRule{
   Boolean prohibited;
   Double cost;
   ODLIncompatibleJobGroupRuleType ruleType;
   TreeSet<String> jobGroupIdsA;
   TreeSet<String> jobGroupIdsB;
}

enum ODLIncompatibleJobGroupRuleType{
   NON_EMPTY_SECTION,
   WHOLE_ROUTE,
}

18.1.1.3.3 ODLNonlinearPenaltyCalculator

Appears in:

model.configuration.problem.latenessPenalty

class ODLNonlinearPenaltyCalculator{
   Double multiplier;
   Double power;
}

18.1.1.3.4 ODLObjectivesConfiguration

Appears in:

model.configuration.problem.objective

class ODLObjectivesConfiguration{
   List<ODLObjective> lexicographicObjectives;
}

enum ODLCostType{
   AFTER_DISPATCHES_DIST_AT_STOP,
   AFTER_TRAVEL_CUSTOM_FORMULA,
   CENTERING,
   COST_PER_JOB_FUNC,
   EARLY_REPLENISH,
   FINISH_LAST_JOB_LATENESS,
   FIXED_JOB_COST_GROUP,
   FULLNESS,
   INCOMPATIBLE_JOBS,
   INTERSTOP_RULE,
   JOB_PATTERN,
   JOB_VEHICLE_USER_FUNCTION,
   LATENESS,
   MAX_SEPARATION,
   MAX_WORK_TIME,
   ON_BOARD_TIME,
   PARKING_COST,
   PER_STOP_COST,
   REPLENISH_FILL_COST_AT_ROUTE_END,
   REPLENISH_FILL_FIXED,
   REPLENISH_FILL_VARIABLE,
   SEQUENCE_BASED_STATE_USER_FUNCTION,
   SERVICE_RADIUS,
   SERVICE_TIME,
   SERVICE_TIME_ADDED_ON_LEAVING_PREVIOUS_LOCATION,
   SERVICE_TIME_AT_ACTIVITY_WITHOUT_LOCATION,
   SHARED_STOP_COST,
   SOFT_CAPACITY,
   STOPS_SET_USER_FUNCTION,
   TOTAL_DRIVE_DISTANCE,
   TOTAL_DRIVE_TIME,
   TRAVEL,
   UNASSIGNED_COST,
   VEHICLE_FIXED,
   VEHICLE_VALS_COST_FUNC,
   WAITING,
   WORK_TIME_EXCL_WAIT,
   WRONG_DIRECTION,
}

class ODLObjective{
   List<ODLCostType> costTypesToSum;
}

18.1.1.4 ODLReportingConfiguration

Appears in:

model.configuration.reporting

class ODLReportingConfiguration{
   ODLTabularOutputFields tabularOutputFields;
   String outputTimezoneId;
}

18.1.1.4.1 ODLTabularOutputFields

Appears in:

model.configuration.reporting.tabularOutputFields

class ODLTabularOutputFields{
   List<ODLTabularOutputField> routeDetailsSheet;
   List<ODLTabularOutputField> solutionDetailsSheet;
   List<ODLTabularOutputField> stopDetailsSheet;
}

18.1.1.4.2 ODLTabularOutputField

class ODLTabularOutputField{
   String columnName;
   String decimalFormatPattern;
   String defaultValueIfNull;
   String source;
}

18.1.1.5 ODLStaticModelCPUBudget

Appears in:

model.configuration.staticCPUBudget

class ODLStaticModelCPUBudget{
   Integer maxIterations;
   Integer maxIterationsWithoutImprovement;
   Integer minIterations;
   Long maxMillis;
   Long maxMillisWithoutImprovement;
   Long minCPUMillis;
}

18.1.1.6 ODLWebHookConfiguration

Appears in:

model.configuration.webHooks[]

class ODLWebHookConfiguration{
   ODLWebHookType type;
   String authorization; // Only supported in webapp2
   String url;
}

enum ODLWebHookType{
   PLANNED_ROUTE_CHANGED,
}

18.1.2 ODLModelData

Appears in:

model.data

class ODLModelData{
   List<ODLJob> jobs;
   List<ODLJob> replenishJobs;
   List<ODLVehicle> vehicles;
}

18.1.3 ODLJob

Appears in:

model.data.jobs[]

A job contains stops to be served (usually by just one vehicle unless using job patterns).
class ODLJob{
   Boolean assignableAtDepotOnly;
   Double unassignedCost;
   Integer strictOrderedAssignmentImportance;
   List<ODLAlternativeJob> altJobs;
   List<ODLJobPattern> jobPatterns;
   List<ODLStop> stops;
   Long[] quantities;
   Map<String,ODLRangedOrder2Function[]> vehicleValCostFuncs;
   Map<String,Number> namedVals; // Named values are used in user functions.
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   ODLJobAcceptanceRequest acceptanceRequest;
   ODLJobGroupFixedCost fixedCostGroup;
   ODLOnboardPenaltyWithStopIds[] onboardTimePenalties;
   ODLOnboardTimePenalty onboardTimePenalty;
   ODLUserFunctionsOnJob userFunctions;
   String _id;
   String lock2VehicleId;
   String overrideDistancesProfileIdWhenOnboard;
   String preceedingEnablerJobGroupId;
   String replenishTypeId;
   TreeSet<String> jobGroupIds;
   TreeSet<String> prohibitedSkills;
   TreeSet<String> requiredSkills;
}

18.1.3.1 ODLAlternativeJob

Appears in:

model.data.jobs[].altJobs[]

class ODLAlternativeJob{
   Boolean assignableAtDepotOnly;
   Double unassignedCost;
   Integer strictOrderedAssignmentImportance;
   List<ODLJobPattern> jobPatterns;
   List<ODLStop> stops;
   Long[] quantities;
   Map<String,ODLRangedOrder2Function[]> vehicleValCostFuncs;
   Map<String,Number> namedVals; // Named values are used in user functions.
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   ODLJobAcceptanceRequest acceptanceRequest;
   ODLJobGroupFixedCost fixedCostGroup;
   ODLOnboardPenaltyWithStopIds[] onboardTimePenalties;
   ODLOnboardTimePenalty onboardTimePenalty;
   ODLUserFunctionsOnJob userFunctions;
   String _id;
   String lock2VehicleId;
   String overrideDistancesProfileIdWhenOnboard;
   String preceedingEnablerJobGroupId;
   String replenishTypeId;
   TreeSet<String> jobGroupIds;
   TreeSet<String> prohibitedSkills;
   TreeSet<String> requiredSkills;
}

18.1.3.2 ODLJobAcceptanceRequest

Appears in:

model.data.jobs[].acceptanceRequest

class ODLJobAcceptanceRequest{
   List<ODLMetricIncreaseTolerance> tolerances;
   String planningQueryId;
}

18.1.3.3 ODLJobGroupFixedCost

Appears in:

model.data.jobs[].fixedCostGroup

class ODLJobGroupFixedCost{
   Double cost;
   String id;
}

18.1.3.4 ODLJobPattern

Appears in:

model.data.jobs[].jobPatterns[]

class ODLJobPattern{
   Double cost;
   Integer repeatInterval;
   Integer repeatNTimes;
   List<String> jobIds;
   ODLRepeatUnit repeatUnit;
   String name;
}

enum ODLRepeatUnit{
   DAY,
   FORTNIGHT,
   MONTH,
   WEEK,
}

18.1.3.5 ODLOnboardPenaltyWithStopIds

Appears in:

model.data.jobs[].onboardTimePenalties

class ODLOnboardPenaltyWithStopIds{
   ODLArrivalTimeLogicType arrivalTimeLogicType;
   ODLDirectTravelBasedOnBoardPenalty directTravelTimeBased;
   ODLOnboardTimePenaltyType type;
   ODLRangedOrder2Function[] hoursPenalty;
   String[] endStopIds;
   String[] startStopIds;
}

18.1.3.6 ODLOnboardTimePenalty

Appears in:

model.data.jobs[].onboardTimePenalty

class ODLOnboardTimePenalty{
   ODLArrivalTimeLogicType arrivalTimeLogicType;
   ODLDirectTravelBasedOnBoardPenalty directTravelTimeBased;
   ODLOnboardTimePenaltyType type;
   ODLRangedOrder2Function[] hoursPenalty;
}

enum ODLArrivalTimeLogicType{
   FROM_CONSECUTIVE_SERVICE_TIME_FOR_COLOCATED_STOPS,
   FROM_EARLIEST_POSSIBLE_SERVICE_TIME_FOR_COLOCATED_STOPS,
}

enum ODLOnboardTimePenaltyType{
   FROM_LEAVE_LOC,
   FROM_PICKUP_TIME,
}

18.1.3.6.1 ODLDirectTravelBasedOnBoardPenalty

Appears in:

model.data.jobs[].onboardTimePenalty.directTravelTimeBased

class ODLDirectTravelBasedOnBoardPenalty{
   Double addHours2DirectTime;
   Double multiplyDirectTimeLimitBy;
   ODLDirectTravelType type;
   ODLRangedOrder2Function[] penalty;
}

enum ODLDirectTravelType{
   HARD_LIMIT,
   HOURS_OVER_LIMIT_PENALTIES,
   PENALTIES,
}

18.1.3.7 ODLStop

Appears in:

model.data.jobs[].stops[]

class ODLStop{
   Double costFixed;
   Double costPerTotalPostDispatchKmAtStop;
   Double extraTravelTimeHours;
   Double sequenceConstraint;
   Integer relativeSequenceConstraint;
   List<ODLCustomTimeWindow> multiTWs;
   List<ODLFromStopGroupCosts> fromStopCosts;
   List<ODLStopReplenishUsage> replenishUsage;
   Long[] onboardQuantityChange;
   Long durationMillis; // Stop duration in milliseconds
   Map<String,Number> namedVals; // Named values are used in user functions.
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   ODLLatLong coordinate;
   ODLParking parking;
   ODLParking secondaryTravelParking;
   ODLSpecialCoordinateType specialCoordinateType;
   ODLStopPlacementOption placementRestriction;
   ODLStopReplenishFills replenishFilling;
   ODLStopSharedCostAndDuration sharedCostDuration;
   ODLStopType type;
   ODLUserFunctionsOnStop userFunctions;
   ODLWrongDirectionRule[] wrongDirectionRules;
   String _id;
   String closeTime; // Date-time stored in a string.
   String depotId2PreventRevisitWithOnBoards;
   String depotId4MultiTripRules;
   String lateTime; // Date-time stored in a string.
   String openTime; // Date-time stored in a string.
   TreeSet<String> stopGroups;
}

enum ODLSpecialCoordinateType{
   VEHICLE_END,
   VEHICLE_SPECIAL_COORDINATE_FOR_STOPS,
   VEHICLE_START,
}

enum ODLStopPlacementOption{
   END_OF_ROUTE,
   START_OF_ROUTE,
}

enum ODLStopType{
   BREAK,
   CUSTOM,
   DELIVER,
   PICKUP,
   REPLENISH,
   SERVICE,
   SHIPMENT_DELIVERY,
   SHIPMENT_PICKUP,
}

18.1.3.7.1 ODLCustomTimeWindow

Appears in:

model.data.jobs[].stops[].multiTWs[]

class ODLCustomTimeWindow{
   List<ODLCustomTimePenalty> penalties;
   String closeTime; // Date-time stored in a string.
   String openTime; // Date-time stored in a string.
}

class ODLCustomTimePenalty{
   ODLPiecewiseFunctionJoinType join;
   String closeTime; // Date-time stored in a string.
   String costZeroTime; // Date-time stored in a string.
   String openTime; // Earliest time stop can be served, vehicle waits before this.
}

18.1.3.7.2 ODLFromStopGroupCosts

Appears in:

model.data.jobs[].stops[].fromStopCosts[]

class ODLFromStopGroupCosts{
   Boolean notFrom;
   Boolean skipNoLocationActs;
   Boolean zeroTravelCost;
   Double cost;
   Double timeSeconds;
   String fromStopGroupId;
}

18.1.3.7.3 ODLLatLong

Appears in:

model.data.jobs[].stops[].coordinate

class ODLLatLong{
   Double latitude;
   Double longitude;
   String roadName; // Setting road name is optional but can improve accuracy
}

18.1.3.7.4 ODLParking

Appears in:

model.data.jobs[].stops[].parking

class ODLParking{
   Double cost;
   Double parkingTimeMinSeparationMetres;
   Double parkingTimeSeconds;
}

18.1.3.7.5 ODLStopReplenishFills

Appears in:

model.data.jobs[].stops[].replenishFilling

class ODLStopReplenishFills{
   Double costFixed;
   Double costPerReplenishUnit;
}

18.1.3.7.6 ODLStopReplenishUsage

Appears in:

model.data.jobs[].stops[].replenishUsage[]

class ODLStopReplenishUsage{
   String replenishTypeId;
}

18.1.3.7.7 ODLStopSharedCostAndDuration

Appears in:

model.data.jobs[].stops[].sharedCostDuration

class ODLStopSharedCostAndDuration{
   Double fixedCost;
   Double minSeparationMetres;
   Double seconds;
}

18.1.3.7.8 ODLUserFunctionsOnStop

Appears in:

model.data.jobs[].stops[].userFunctions

class ODLUserFunctionsOnStop{
   List<ODLStatement> sequenceBasedState;
   ODLEnrouteParsingUserFunctions enroute;
}

18.1.3.7.8.1 ODLEnrouteParsingUserFunctions

Appears in:

model.data.jobs[].stops[].userFunctions.enroute

class ODLEnrouteParsingUserFunctions{
   List<ODLStatement> afterTravel;
}

18.1.3.7.9 ODLWrongDirectionRule

Appears in:

model.data.jobs[].stops[].wrongDirectionRules

class ODLWrongDirectionRule{
   ODLRangedOrder2Function[] maxFurtherAwayKmFunction;
   String evaluate2StopId;
}

18.1.3.8 ODLUserFunctionsOnJob

Appears in:

model.data.jobs[].userFunctions

class ODLUserFunctionsOnJob{
   List<ODLStatement> jobVehicleCombination;
}

18.1.4 ODLVehicle

Appears in:

model.data.vehicles[]

class ODLVehicle{
   Integer nbOfInstances;
   List<ODLDispatch> dispatches;
   List<ODLStopArrivalEvent> stopArrivedEvents;
   List<ODLStopCompletedEvent> stopCompleteEvents;
   List<ODLTracePoint> vehicleTraceEvents;
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   ODLVehicleDefinition definition;
   ODLVehicleLock lock;
   String _id;
}

18.1.4.1 ODLDispatch

Appears in:

model.data.vehicles[].dispatches[]

class ODLDispatch{
   ODLLatLong coordinateOverride;
   String _id;
   String creationTime; // Date-time stored in a string.
   String stopId;
}

18.1.4.2 ODLStopArrivalEvent

Appears in:

model.data.vehicles[].stopArrivedEvents[]

class ODLStopArrivalEvent{
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   String _id;
   String stopId;
   String time; // Date-time stored in a string.
}

18.1.4.3 ODLStopCompletedEvent

Appears in:

model.data.vehicles[].stopCompleteEvents[]

class ODLStopCompletedEvent{
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   String _id;
   String stopId;
   String time; // Date-time stored in a string.
}

18.1.4.4 ODLTracePoint

Appears in:

model.data.vehicles[].vehicleTraceEvents[]

class ODLTracePoint{
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   ODLLatLong coordinate;
   String _id;
   String time; // Date-time stored in a string.
}

18.1.4.5 ODLVehicleDefinition

Appears in:

model.data.vehicles[].definition

class ODLVehicleDefinition{
   Double costFixed;
   Double costPerKm;
   Double costPerServicingHour;
   Double costPerStop;
   Double costPerTotalPostDispatchKmAtStop;
   Double costPerTravelHour;
   Double costPerWaiting4BreakHour;
   Double costPerWaiting4FirstStopHour;
   Double costPerWaitingHour;
   Double travelTimeMultiplier;
   Integer maxParallelStopProcessing;
   List<ODLPreloadedStop> preloadedStops;
   List<ODLStopGroupProperties> stopGroupProperties;
   List<ODLVehicleInterStopCosts> interStopCosts;
   List<ODLVehicleReplenish> replenishes;
   Long[] capacities;
   Map<String,Number> namedVals; // Named values are used in user functions.
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   ODLIncompatibleQuantityPair[] incompatibleQuantityIndices;
   ODLLatLong specialCoordinateForStops;
   ODLMultipleCapacityConfigurations multiCapacityConfigs;
   ODLParking parking;
   ODLRangedOrder2Function[] costPerWaitingHourFunc;
   ODLRangedOrder2Function[] extraCostPerKm;
   ODLRangedOrder2Function[] extraCostPerTravelHour;
   ODLRangedOrder2Function[] totalServePlusTravelHours;
   ODLRangedOrder2Function[] totalTravelHours;
   ODLRangedOrder2Function[] totalTravelKm;
   ODLRangedOrder2Function[] workTimeHours;
   ODLSecondaryTravelMode secondaryTravel;
   ODLSoftCapacity[] softCapacities;
   ODLUserFunctionsOnVehicle userFunctions;
   ODLVehicleCentering centering;
   ODLVehicleEnd end;
   ODLVehicleMaxSeparation maxSeparation;
   ODLVehicleServiceRadius serviceRadius;
   ODLVehicleStart start;
   String distancesProfileId;
   String lockDeliveriesTime; // Date-time stored in a string.
   TreeSet<String> skills;
   TreeSet<String> vehicleGroupIds;
}

18.1.4.5.1 ODLIncompatibleQuantityPair

Appears in:

model.data.vehicles[].definition.incompatibleQuantityIndices

class ODLIncompatibleQuantityPair{
   Integer quantityIndx1;
   Integer quantityIndx2;
}

18.1.4.5.2 ODLMultipleCapacityConfigurations

Appears in:

model.data.vehicles[].definition.multiCapacityConfigs

class ODLMultipleCapacityConfigurations{
   ODLCapacityConfiguration[] configs;
}

class ODLCapacityConfiguration{
   Long[] capacities;
   String name;
}

18.1.4.5.3 ODLPreloadedStop

Appears in:

model.data.vehicles[].definition.preloadedStops[]

class ODLPreloadedStop{
   Double costFixed;
   Double costPerTotalPostDispatchKmAtStop;
   Double extraTravelTimeHours;
   Double sequenceConstraint;
   Integer relativeSequenceConstraint;
   List<ODLCustomTimeWindow> multiTWs;
   List<ODLFromStopGroupCosts> fromStopCosts;
   Long[] onboardQuantityChange;
   Long durationMillis; // Stop duration in milliseconds
   Map<String,Number> namedVals; // Named values are used in user functions.
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   ODLLatLong coordinate;
   ODLParking parking;
   ODLParking secondaryTravelParking;
   ODLStopPlacementOption placementRestriction;
   ODLStopSharedCostAndDuration sharedCostDuration;
   ODLStopType type;
   ODLUserFunctionsOnStop userFunctions;
   ODLWrongDirectionRule[] wrongDirectionRules;
   String _id;
   String closeTime; // Date-time stored in a string.
   String depotId2PreventRevisitWithOnBoards;
   String depotId4MultiTripRules;
   String lateTime; // Date-time stored in a string.
   String openTime; // Date-time stored in a string.
   TreeSet<String> stopGroups;
}

18.1.4.5.4 ODLRangedOrder2Function

class ODLRangedOrder2Function{
   Double c0;
   Double c1;
   Double c2;
   Double exclusiveUpperLimit;
   Double inclusiveLowerLimit;
   Double translate;
   ODLPiecewiseFunctionJoinType join;
}

enum ODLPiecewiseFunctionJoinType{
   EXACT,
   INCREASING,
   NO_JOIN,
   PLUS_CONST,
}

18.1.4.5.5 ODLSecondaryTravelMode

Appears in:

model.data.vehicles[].definition.secondaryTravel

class ODLSecondaryTravelMode{
   Double costPerKm;
   Double costPerTravelHour;
   Double travelTimeMultiplier;
   ODLParking parking;
   ODLRangedOrder2Function[] extraCostPerKm;
   ODLRangedOrder2Function[] extraCostPerTravelHour;
   String distancesProfileId;
}

18.1.4.5.6 ODLSoftCapacity

Appears in:

model.data.vehicles[].definition.softCapacities

class ODLSoftCapacity{
   Double costPerViolation;
   Double costPerViolationSqd;
   Long capacity;
}

18.1.4.5.7 ODLStopGroupProperties

Appears in:

model.data.vehicles[].definition.stopGroupProperties[]

class ODLStopGroupProperties{
   Boolean prohibited;
   Double costFixed;
   Double extraTravelTimeHours;
   Long durationMillis;
   ODLDurationFunction durationFunction;
   ODLStopGroupMatchRule matchType;
   TreeSet<String> stopGroups;
}

enum ODLStopGroupMatchRule{
   ALL_MUST_MATCH,
   MATCH_2_ANYTHING,
   NONE_MUST_MATCH,
   ONE_MUST_MATCH,
}

18.1.4.5.7.1 ODLDurationFunction

Appears in:

model.data.vehicles[].definition.stopGroupProperties[].durationFunction

class ODLDurationFunction{
   List<ODLDurationAtomicFunction> functions;
   ODLDurationFunctionType type;
}

class ODLDurationAtomicFunction{
   Double[] millisPerQuantity;
   Double[] millisPerQuantitySqd;
   Double defaultMultiplier;
   Long millisFixed;
}

enum ODLDurationFunctionType{
   DEFAULT_PLUS_MAX,
   MAX,
   MIN,
}

18.1.4.5.8 ODLUserFunctionsOnVehicle

Appears in:

model.data.vehicles[].definition.userFunctions

class ODLUserFunctionsOnVehicle{
   List<ODLStatement> jobVehicleCombination;
   List<ODLStatement> sequenceBasedState;
   List<ODLStatement> unorderedStopsSet;
   ODLEnrouteParsingUserFunctions enroute;
}

18.1.4.5.9 ODLVehicleCentering

Appears in:

model.data.vehicles[].definition.centering

class ODLVehicleCentering{
   Boolean includeShipmentDeliveries;
   Boolean includeShipmentPickups;
   Double costMultiplier; // 10 is a good value to try first
   ODLLatLong coordinate; // Optional coordinate to fix the centre
}

18.1.4.5.10 ODLVehicleEnd

Appears in:

model.data.vehicles[].definition.end

class ODLVehicleEnd{
   Double costFixed;
   Double costPerTotalPostDispatchKmAtStop;
   Double extraTravelTimeHours;
   Double sequenceConstraint;
   Integer relativeSequenceConstraint;
   List<ODLCustomTimeWindow> multiTWs;
   List<ODLFromStopGroupCosts> fromStopCosts;
   Long[] onboardQuantityChange;
   Long durationMillis; // Stop duration in milliseconds
   Map<String,Number> namedVals; // Named values are used in user functions.
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   ODLLatLong coordinate;
   ODLParking parking;
   ODLParking secondaryTravelParking;
   ODLStopPlacementOption placementRestriction;
   ODLStopSharedCostAndDuration sharedCostDuration;
   ODLStopType type;
   ODLUserFunctionsOnStop userFunctions;
   ODLWrongDirectionRule[] wrongDirectionRules;
   String _id;
   String closeTime; // Date-time stored in a string.
   String depotId2PreventRevisitWithOnBoards;
   String depotId4MultiTripRules;
   String lateTime; // Date-time stored in a string.
   String openTime; // Date-time stored in a string.
   TreeSet<String> stopGroups;
}

18.1.4.5.11 ODLVehicleInterStopCosts

Appears in:

model.data.vehicles[].definition.interStopCosts[]

class ODLVehicleInterStopCosts{
   Boolean notFrom;
   Boolean notTo;
   Boolean skipNoLocationActs;
   Boolean zeroTravelCost;
   Double cost;
   Double timeSeconds;
   String fromStopGroupId;
   String toStopGroupId;
}

18.1.4.5.12 ODLVehicleMaxSeparation

Appears in:

model.data.vehicles[].definition.maxSeparation

class ODLVehicleMaxSeparation{
   Boolean includeRouteEnd;
   ODLMaxSeparationUnit unit;
   ODLRangedOrder2Function[] costs;
}

enum ODLMaxSeparationUnit{
   HOURS,
   KM,
}

18.1.4.5.13 ODLVehicleReplenish

Appears in:

model.data.vehicles[].definition.replenishes[]

class ODLVehicleReplenish{
   Double initialValue;
   Double maxValue;
   Double minValue;
   Double replenishPerHour;
   Double targetFullness4NextStopAfter;
   Double usagePerHour;
   Double usagePerStop;
   Double usagePerTravelHour;
   Double usagePerTravelKm;
   Double worktimeHoursBasedCostPerRefill;
   Integer maxNbReplenishes;
   List<String> replenishJobGroups4ExplicitSearch;
   String replenishTypeId;
}

18.1.4.5.14 ODLVehicleServiceRadius

Appears in:

model.data.vehicles[].definition.serviceRadius

class ODLVehicleServiceRadius{
   Double costFixed;
   Double costPerSquareViolation;
   Double costPerViolation;
   Double hardRadius;
   Double softRadius;
   GeoJSONPolygon hardGeoJSONPolygon;
   ODLLatLong coordinate;
   ODLMultiStopLogicType multiStopLogic;
   ODLServiceRadiusType type;
}

enum ODLMultiStopLogicType{
   MIN,
   SUM,
}

enum ODLServiceRadiusType{
   HOURS,
   KM,
   POLYGON,
}

18.1.4.5.15 ODLVehicleStart

Appears in:

model.data.vehicles[].definition.start

class ODLVehicleStart{
   Double costFixed;
   Double costPerTotalPostDispatchKmAtStop;
   Double extraTravelTimeHours;
   Double sequenceConstraint;
   Integer relativeSequenceConstraint;
   List<ODLFromStopGroupCosts> fromStopCosts;
   Long[] onboardQuantityChange;
   Long durationMillis; // Stop duration in milliseconds
   Map<String,Number> namedVals; // Named values are used in user functions.
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   ODLLatLong coordinate;
   ODLParking parking;
   ODLParking secondaryTravelParking;
   ODLStopPlacementOption placementRestriction;
   ODLStopSharedCostAndDuration sharedCostDuration;
   ODLStopType type;
   ODLUserFunctionsOnStop userFunctions;
   ODLWrongDirectionRule[] wrongDirectionRules;
   String _id;
   String closeTime; // Date-time stored in a string.
   String depotId2PreventRevisitWithOnBoards;
   String depotId4MultiTripRules;
   String lateTime; // Date-time stored in a string.
   String openTime; // Date-time stored in a string.
   TreeSet<String> stopGroups;
}

18.1.4.6 ODLVehicleLock

Appears in:

model.data.vehicles[].lock

class ODLVehicleLock{
   List<ODLJobLock> jobLocks;
   ODLVehicleLockState state;
}

enum ODLVehicleLockState{
   NO_MORE_DELIVERIES,
   UNLOCKED,
}

18.1.4.6.1 ODLJobLock

Appears in:

model.data.vehicles[].lock.jobLocks[]

class ODLJobLock{
   String jobId;
}

18.2 ODLOptimiserPlan

class ODLOptimiserPlan{
   List<ODLJob> unplannedJobs;
   List<ODLNotLoadAnalysis4Job> unplannedAnalysis;
   List<ODLVehiclePlan> vehiclePlans;
   ODLPlanStatistics statistics;
}

18.2.1 ODLNotLoadAnalysis4Job

Appears in:

plan.unplannedAnalysis[]

class ODLNotLoadAnalysis4Job{
   List<String> details;
   String jobId;
   TreeSet<String> reasons;
}

18.2.2 ODLPlanStatistics

Appears in:

plan.statistics

class ODLPlanStatistics{
   Double cost;
   Integer altPlanSourceIndx;
   Integer nbNotLoadJobs;
   Integer nbRoutes;
   Long nbOptBursts;
   Map<String,Double> optimiserCostBreakdown;
   ODLPlanQualityStatistics totalTimes;
   String source;
}

18.2.2.1 ODLPlanQualityStatistics

Appears in:

plan.statistics.totalTimes

class ODLPlanQualityStatistics{
   Double[] lexicographicCost;
   Double cost;
   Double latenessSeconds;
   Double noLocationOperationTimeSeconds;
   Double onBoardSecondsOverDirectBasedLimit;
   Double operationTimeSeconds;
   Double travelMetres;
   Double travelSeconds;
   Double waitTimeSeconds;
   Integer usedVehicles;
}

18.2.3 ODLVehicleLockWithVid

class ODLVehicleLockWithVid{
   List<ODLJobLock> jobLocks;
   ODLVehicleLockState state;
   String vehicleId;
}

18.2.4 ODLVehiclePlan

Appears in:

plan.vehiclePlans[]

class ODLVehiclePlan{
   Boolean impossibleVehicle;
   GeoJSONGeom dispatchedIncompleteGeomToFirstStop;
   GeoJSONGeom geomToFirstStop;
   List<ODLOptimisedDelay> optimisedDelays;
   List<ODLPlannedStop> dispatchedIncompleteStops;
   List<ODLPlannedStop> plannedStops;
   ODLHasTimeAndCoord dispatchedIncompleteStartPoint;
   ODLPlannedEndPoint planEndPoint;
   ODLPlannedStartPoint planStartPoint;
   ODLRouteQualityStatistics timeStatistics;
   ODLRouteQualityStatistics timeStatisticsInclDispatchedIncomplete;
   String vehicleId;
}

18.2.4.1 ODLHasTimeAndCoord

Appears in:

plan.vehiclePlans[].dispatchedIncompleteStartPoint

class ODLHasTimeAndCoord{
   ODLLatLong coordinate;
   String time; // Date-time stored in a string.
}

18.2.4.2 ODLOptimisedDelay

Appears in:

plan.vehiclePlans[].optimisedDelays[]

class ODLOptimisedDelay{
   Integer parallelOperatorIndex;
   String end; // Date-time stored in a string.
   String start; // Date-time stored in a string.
}

18.2.4.3 ODLPlannedEndPoint

Appears in:

plan.vehiclePlans[].planEndPoint

class ODLPlannedEndPoint{
   Double cumulativeTravelKm;
   Double latenessHours;
   Double travelHoursBefore;
   Double travelKmBefore;
   Map<String,Double> enrouteUserVarsAfter;
   Map<String,Double> enrouteValsAfter;
   Map<String,Double> replnValsAfter;
   Map<String,Double> sequenceBasedStateUserVarsAfter;
   ODLTravelModeCode travelMode;
   String arrival; // Date-time stored in a string.
   String arrivalTimeB4ParkExclDistConfPark; // Date-time stored in a string.
   String complete; // Date-time stored in a string.
   String leaveAfter; // Date-time stored in a string.
   String start; // Date-time stored in a string.
}

18.2.4.4 ODLPlannedStartPoint

Appears in:

plan.vehiclePlans[].planStartPoint

class ODLPlannedStartPoint{
   Map<String,Double> enrouteUserVarsAfter;
   Map<String,Double> enrouteValsAfter;
   Map<String,Double> replnValsAfter;
   Map<String,Double> sequenceBasedStateUserVarsAfter;
   ODLLatLong coordinate;
   String time; // Date-time stored in a string.
}

18.2.4.5 ODLPlannedStop

Appears in:

plan.vehiclePlans[].plannedStops[]

class ODLPlannedStop{
   GeoJSONGeom geomToNextStop;
   Map<String,Double> enrouteUserVarsAfter;
   Map<String,Double> enrouteValsAfter;
   Map<String,Double> replnValsAfter;
   Map<String,Double> sequenceBasedStateUserVarsAfter;
   Map<String,String> stopProperties;
   ODLLatLong return2VehicleCoord;
   ODLTimeEstimates4Stop timeEstimates;
   ODLTravelModeCode travelMode;
   String earliestDispatch; // Date-time stored in a string.
}

enum ODLTravelModeCode{
   P, // Primary travel model, e.g. driving
   S, // Secondary travel mode, e.g. walking
}

18.2.4.5.1 ODLTimeEstimates4Stop

Appears in:

plan.vehiclePlans[].plannedStops[].timeEstimates

class ODLTimeEstimates4Stop{
   Double cumulativeTravelKm;
   Double latenessHours;
   Double travelHoursBefore;
   Double travelKmBefore;
   String arrival; // Date-time stored in a string.
   String arrivalTimeB4ParkExclDistConfPark; // Date-time stored in a string.
   String complete; // Date-time stored in a string.
   String leaveAfter; // Date-time stored in a string.
   String start; // Date-time stored in a string.
}

18.2.4.6 ODLRouteQualityStatistics

Appears in:

plan.vehiclePlans[].timeStatistics

class ODLRouteQualityStatistics{
   Double[] lexicographicCost;
   Double cost;
   Double latenessSeconds;
   Double maxWorkingTimeSeconds;
   Double noLocationOperationTimeSeconds;
   Double onBoardSecondsOverDirectBasedLimit;
   Double operationTimeSeconds;
   Double travelMetres;
   Double travelSeconds;
   Double waitTimeSeconds;
   Integer usedVehicles;
   List<ODLContiguousIsland> contiguousIslands;
   Map<String,Double> optimiserCostBreakdown;
}

18.2.4.6.1 ODLContiguousIsland

Appears in:

plan.vehiclePlans[].timeStatistics.contiguousIslands[]

class ODLContiguousIsland{
   List<String> stopIds;
}

18.3 ODLPlanningQuery

class ODLPlanningQuery{
   Boolean keepPlan;
   Integer resultsLimit;
   List<ODLJob> jobs;
   List<ODLMetricIncreaseTolerance> tolerances;
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   ODLETARequest ETARequest;
   ODLHardTWFeasibleSearch hardTWRangeRequest;
   ODLHighLevelOptimiserCPUBudget overrideCPUBudget;
   ODLMatrixRequestType1 matrixRequest;
   ODLMatrixRequestType2 matrixRequestType2;
   ODLQueryType queryType;
   ODLRouteGeometryAccuracy routeGeometryAccuracy;
   String _id;
}

enum ODLQueryType{
   ETA,
   HARD_TW_RANGE,
   MATRIX,
   MATRIX_REQUEST_TYPE_2,
   STANDARD,
}

enum ODLRouteGeometryAccuracy{
   HIGH,
   NO_GEOMETRY,
   RAW,
   STD,
}

18.3.1 ODLETARequest

Appears in:

query.ETARequest

class ODLETARequest{
   List<ODLCompactVehiclePlan> plans;
   ODLModelConfiguration configuration;
   ODLModelData data;
}

18.3.1.1 ODLCompactVehiclePlan

Appears in:

query.ETARequest.plans[]

class ODLCompactVehiclePlan{
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   String _id;
}

18.3.2 ODLHardTWFeasibleSearch

Appears in:

query.hardTWRangeRequest

class ODLHardTWFeasibleSearch{
   Long lowerLimitMillis;
   Long searchToleranceMillis;
   Long upperLimitMillis;
   TreeSet<String> vehicleFilter;
}

18.3.3 ODLMatrixRequestType1

Appears in:

query.matrixRequest

class ODLMatrixRequestType1{
   Boolean includeDest2Origins;
   List<ODLMatrixRequestLocation> froms;
   List<ODLMatrixRequestLocation> tos;
   List<String> distanceProfileIds;
   List<String> timesUTC;
}

18.3.3.1 ODLMatrixRequestLocation

class ODLMatrixRequestLocation{
   Double latitude;
   Double longitude;
   String id;
   String roadName; // Setting road name is optional but can improve accuracy
}

18.3.4 ODLMatrixRequestType2

Appears in:

query.matrixRequestType2

class ODLMatrixRequestType2{
   String departureTimeUTC; // Date-time stored in a string.
   String distancesProfileid;
}

18.3.5 ODLMetricIncreaseTolerance

Appears in:

query.tolerances[]

class ODLMetricIncreaseTolerance{
   Double tolerance;
   ODLPlanQualityMetricType type;
}

enum ODLPlanQualityMetricType{
   LATENESS_SECONDS,
   TIME_SECONDS,
   TOTAL_COST,
   TRAVEL_TIME_SECONDS,
   USED_VEHICLES,
   WAITING_TIME_SECONDS,
}

18.4 ODLPlanningQueryResult

class ODLPlanningQueryResult{
   List<ODLJobPlanningQueryResult> costSortedResults;
   List<ODLMatrixTimeProfileResult> matrix;
   Map<String,String> properties; // User-defined key-values never read by optimiser, use to store own notes etc.
   ODLHardTWRequestResult hardTWRangeResult;
   ODLOptimiserPlan ETAResult;
   ODLQueryProcessingStatus processedStatus;
   String _id;
   String errorMessage;
   byte[] matrixRequestType2ZippedTabSeparatedMatrix;
}

enum ODLQueryProcessingStatus{
   COMPLETE,
   ERROR,
   NOT_FOUND,
   STARTED,
   WAITING,
}

18.4.1 ODLHardTWRequestResult

Appears in:

queryResult.hardTWRangeResult

class ODLHardTWRequestResult{
   ODLJobPlanningQueryResult after;
   ODLJobPlanningQueryResult before;
   ODLJobPlanningQueryResult original;
}

18.4.2 ODLJobAcceptanceState

class ODLJobAcceptanceState{
   ODLJobAcceptanceStateType state;
   String jobId;
}

enum ODLJobAcceptanceStateType{
   ACCEPTED,
   JOB_NOT_FOUND,
   NO_ACCEPTANCE_REQUEST,
   PENDING,
   REJECTED,
}

18.4.3 ODLJobPlanningQueryResult

Appears in:

queryResult.costSortedResults[]

class ODLJobPlanningQueryResult{
   Integer rank;
   List<ODLPlannedStop> timings;
   ODLJob job;
   ODLOptimiserPlan plan;
   ODLPlanQualityStatistics estimatedChange;
   ODLVehicle selected;
   String failureReason;
   String textDescription;
}

18.4.4 ODLMatrixTimeProfileResult

Appears in:

queryResult.matrix[]

class ODLMatrixTimeProfileResult{
   List<ODLMatrixQueryResultElement> rows;
   String distancesProfileId;
   String time; // Date-time stored in a string.
}

18.4.4.1 ODLMatrixQueryResultElement

Appears in:

queryResult.matrix[].rows[]

class ODLMatrixQueryResultElement{
   Integer m;
   Integer s;
   String f;
   String t;
}

18.5 ODLCountResponse

class ODLCountResponse{
   Long count;
}