{"openapi":"3.0.3","info":{"title":"Task Scheduling","description":"Assign jobs to machines and/or employees while minimizing the makespan.","contact":{"name":"Timefold BV","url":"https://timefold.ai","email":"info@timefold.ai"},"version":"v1"},"servers":[{"url":"/api/models/job-scheduling"}],"tags":[{"name":"Demo data","description":"Generated demo data for the model"},{"name":"Job Schedule","description":"Assign jobs to machines and/or employees, optimizing for production efficiency and employee satisfaction, minimizing the makespan."}],"paths":{"/v1/demo-data":{"get":{"summary":"List of available demo datasets.","tags":["Demo data"],"responses":{"200":{"description":"List of available demo datasets","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"shortDescription":{"type":"string"},"longDescription":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"$$ref":"#/components/schemas/DemoDataConfigEntry"}}},"$$ref":"#/components/schemas/DemoMetaData"}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}]}},"/v1/demo-data/{demoDataId}":{"get":{"summary":"Get the demo dataset with the given identifier.","tags":["Demo data"],"parameters":[{"description":"ID of the demo dataset from the list of available datasets","required":true,"name":"demoDataId","in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Demo data as a dataset","content":{"application/json":{"schema":{"required":["modelInput"],"type":"object","properties":{"config":{"type":"object","properties":{"run":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}},"description":"The run configuration.","nullable":true},"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"The model configuration. Impacts the quality of solution.","nullable":true},"resourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"readOnly":true,"nullable":true},"mapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}},"readOnly":true,"nullable":true}},"additionalProperties":false,"description":"The configuration of the model request. If not provided, defaults of the model are used.","nullable":true},"modelInput":{"description":"The model input to solve.","type":"object","properties":{"machines":{"description":"The machines that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The machine that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"jobs":{"description":"Jobs assigned to this machine.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this machine will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this machine.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the machine is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this machine with a processingStart before this point in time will get pinned."},"machineType":{"description":"The type of the machine.","type":"string","nullable":true},"initialJobType":{"description":"The job type that the machine is set up for at its start. The first job on the machine changes over from it, so a job transition from this job type to the job type of the first job applies. Without it, the first job needs no changeover.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputMachine"},"x-uniqueItemsProperty":"id"},"machineTags":{"description":"The tags that machines can carry.","uniqueItems":true,"type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"},"x-uniqueItemsProperty":"id"},"machineTypes":{"description":"The machine types that machines and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Resource type expressing the type of a resource","type":"object","properties":{"id":{"description":"The unique identifier of the machine type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/MachineType"},"x-uniqueItemsProperty":"id"},"employees":{"description":"The employees that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The employee that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"jobs":{"description":"Jobs assigned to this employee.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this employee will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this employee.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the employee is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this employee with a processingStart before this point in time will get pinned."}},"additionalProperties":false,"$$ref":"#/components/schemas/InputEmployee"},"x-uniqueItemsProperty":"id"},"employeeTags":{"description":"The tags that employees can carry.","type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"}},"jobs":{"description":"The jobs to schedule.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"duration":{"description":"Duration of the job. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"string","nullable":true},"durationOnResources":{"description":"Duration of the job on specific resources. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"array","items":{"description":"Duration of a job on a specific machine or employee.","required":["resource","duration"],"type":"object","properties":{"resource":{"description":"Identifier of the machine.","type":"string"},"duration":{"description":"Duration of the job on the machine or employee.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobDurationOnResource"},"nullable":true},"requiredTags":{"description":"Required tags. A job can only be assigned to a resource (machine or employee) with all of these tags.","uniqueItems":true,"type":"array","items":{"type":"string"}},"requiredResources":{"description":"Required resources. A job can only be assigned to one of these resources.","uniqueItems":true,"type":"array","items":{"type":"string"}},"dependencies":{"description":"Dependency jobs. This job can only start after all dependency jobs have finished.","uniqueItems":true,"type":"array","items":{"description":"A job that must be finished, or started, before the job that declares this dependency.","required":["id"],"type":"object","properties":{"id":{"description":"Unique identifier of the job.","type":"string"},"anchor":{"description":"The point on the preceding job that the offsets are measured from.","enum":["END","START"],"type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"Smallest allowed offset between the anchor of the preceding job and the start of this job."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"Largest allowed offset between the anchor of the preceding job and the start of this job. Unset means unbounded."},"requiresSameResource":{"description":"The dependent job must run on the same resource as the preceding job.","type":"boolean"},"noIntermediateJobs":{"description":"No other job may run between the preceding job and the dependent job.","type":"boolean"}},"$$ref":"#/components/schemas/DependencyJob"}},"minStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Minimum start time of the job. The job will never be scheduled before this point in time.","nullable":true},"idealEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Ideal end time of the job. The job will ideally finish close to this point in time.","nullable":true},"maxEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Maximum end time of the job. The job will never finish after this point in time.","nullable":true},"dueDate":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Due date of the job. A job that finishes after its due date counts as late. Unlike 'maxEnd', a due date is a goal: a job that cannot make it is still scheduled.","nullable":true},"priority":{"format":"int32","description":"The job's priority. Jobs with high priority ideally finish before low-priority jobs.","minimum":1,"type":"integer"},"jobType":{"description":"The type of the job.","type":"string","nullable":true},"noInterruptions":{"description":"Whether the job must run without interruption. By default a job that overlaps an unavailable time span of its resource pauses and continues afterwards, which makes the job take longer. A job with 'noInterruptions' instead waits until its resource is available for the whole duration of the job.","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJob"},"x-uniqueItemsProperty":"id"},"jobTypes":{"description":"The job types that jobs and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Job type expressing the type of a job","type":"object","properties":{"id":{"description":"The unique identifier of the job type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobType"},"x-uniqueItemsProperty":"id"},"jobTransitions":{"description":"The transition times between jobs of a given type on a machine of a given type.","type":"array","items":{"description":"JobTransition between jobs","required":["machineType","fromJobType","toJobType","duration"],"type":"object","properties":{"machineType":{"description":"Type associated with the machine","type":"string"},"fromJobType":{"description":"Type associated with the source job","type":"string"},"toJobType":{"description":"Type associated with the target job","type":"string"},"duration":{"description":"Duration of the transition","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobTransition"}},"resourceTransitions":{"description":"The rewarded and the forbidden transitions between specific resources.","type":"array","items":{"description":"A transition between dependent jobs from/to specific resources (machines/employees) will be rewarded.","required":["fromResourceId","toResourceId"],"type":"object","properties":{"fromResourceId":{"description":"ID of the source resource","type":"string"},"toResourceId":{"description":"ID of the target resource","type":"string"},"reward":{"format":"int32","description":"Reward score for this transition (higher is better)","type":"integer"},"forbidden":{"description":"The transition is forbidden","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/ResourceTransition"}}},"additionalProperties":false}},"additionalProperties":false,"$$ref":"#/components/schemas/ModelRequestJobScheduleInputJobScheduleConfigOverrides"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case the given demo data does not exist","content":{"application/json":{}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}]}},"/v1/demo-data/{demoDataId}/input":{"get":{"summary":"Get the demo dataset with the given identifier as model input only.","tags":["Demo data"],"parameters":[{"description":"ID of the demo dataset from the list of available datasets","required":true,"name":"demoDataId","in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Demo data as a dataset","content":{"application/json":{"schema":{"description":"Definition of the schedule.","type":"object","properties":{"machines":{"description":"The machines that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The machine that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"jobs":{"description":"Jobs assigned to this machine.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this machine will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this machine.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the machine is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this machine with a processingStart before this point in time will get pinned."},"machineType":{"description":"The type of the machine.","type":"string","nullable":true},"initialJobType":{"description":"The job type that the machine is set up for at its start. The first job on the machine changes over from it, so a job transition from this job type to the job type of the first job applies. Without it, the first job needs no changeover.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputMachine"},"x-uniqueItemsProperty":"id"},"machineTags":{"description":"The tags that machines can carry.","uniqueItems":true,"type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"},"x-uniqueItemsProperty":"id"},"machineTypes":{"description":"The machine types that machines and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Resource type expressing the type of a resource","type":"object","properties":{"id":{"description":"The unique identifier of the machine type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/MachineType"},"x-uniqueItemsProperty":"id"},"employees":{"description":"The employees that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The employee that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"jobs":{"description":"Jobs assigned to this employee.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this employee will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this employee.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the employee is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this employee with a processingStart before this point in time will get pinned."}},"additionalProperties":false,"$$ref":"#/components/schemas/InputEmployee"},"x-uniqueItemsProperty":"id"},"employeeTags":{"description":"The tags that employees can carry.","type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"}},"jobs":{"description":"The jobs to schedule.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"duration":{"description":"Duration of the job. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"string","nullable":true},"durationOnResources":{"description":"Duration of the job on specific resources. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"array","items":{"description":"Duration of a job on a specific machine or employee.","required":["resource","duration"],"type":"object","properties":{"resource":{"description":"Identifier of the machine.","type":"string"},"duration":{"description":"Duration of the job on the machine or employee.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobDurationOnResource"},"nullable":true},"requiredTags":{"description":"Required tags. A job can only be assigned to a resource (machine or employee) with all of these tags.","uniqueItems":true,"type":"array","items":{"type":"string"}},"requiredResources":{"description":"Required resources. A job can only be assigned to one of these resources.","uniqueItems":true,"type":"array","items":{"type":"string"}},"dependencies":{"description":"Dependency jobs. This job can only start after all dependency jobs have finished.","uniqueItems":true,"type":"array","items":{"description":"A job that must be finished, or started, before the job that declares this dependency.","required":["id"],"type":"object","properties":{"id":{"description":"Unique identifier of the job.","type":"string"},"anchor":{"description":"The point on the preceding job that the offsets are measured from.","enum":["END","START"],"type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"Smallest allowed offset between the anchor of the preceding job and the start of this job."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"Largest allowed offset between the anchor of the preceding job and the start of this job. Unset means unbounded."},"requiresSameResource":{"description":"The dependent job must run on the same resource as the preceding job.","type":"boolean"},"noIntermediateJobs":{"description":"No other job may run between the preceding job and the dependent job.","type":"boolean"}},"$$ref":"#/components/schemas/DependencyJob"}},"minStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Minimum start time of the job. The job will never be scheduled before this point in time.","nullable":true},"idealEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Ideal end time of the job. The job will ideally finish close to this point in time.","nullable":true},"maxEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Maximum end time of the job. The job will never finish after this point in time.","nullable":true},"dueDate":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Due date of the job. A job that finishes after its due date counts as late. Unlike 'maxEnd', a due date is a goal: a job that cannot make it is still scheduled.","nullable":true},"priority":{"format":"int32","description":"The job's priority. Jobs with high priority ideally finish before low-priority jobs.","minimum":1,"type":"integer"},"jobType":{"description":"The type of the job.","type":"string","nullable":true},"noInterruptions":{"description":"Whether the job must run without interruption. By default a job that overlaps an unavailable time span of its resource pauses and continues afterwards, which makes the job take longer. A job with 'noInterruptions' instead waits until its resource is available for the whole duration of the job.","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJob"},"x-uniqueItemsProperty":"id"},"jobTypes":{"description":"The job types that jobs and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Job type expressing the type of a job","type":"object","properties":{"id":{"description":"The unique identifier of the job type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobType"},"x-uniqueItemsProperty":"id"},"jobTransitions":{"description":"The transition times between jobs of a given type on a machine of a given type.","type":"array","items":{"description":"JobTransition between jobs","required":["machineType","fromJobType","toJobType","duration"],"type":"object","properties":{"machineType":{"description":"Type associated with the machine","type":"string"},"fromJobType":{"description":"Type associated with the source job","type":"string"},"toJobType":{"description":"Type associated with the target job","type":"string"},"duration":{"description":"Duration of the transition","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobTransition"}},"resourceTransitions":{"description":"The rewarded and the forbidden transitions between specific resources.","type":"array","items":{"description":"A transition between dependent jobs from/to specific resources (machines/employees) will be rewarded.","required":["fromResourceId","toResourceId"],"type":"object","properties":{"fromResourceId":{"description":"ID of the source resource","type":"string"},"toResourceId":{"description":"ID of the target resource","type":"string"},"reward":{"format":"int32","description":"Reward score for this transition (higher is better)","type":"integer"},"forbidden":{"description":"The transition is forbidden","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/ResourceTransition"}}},"additionalProperties":false,"$$ref":"#/components/schemas/JobScheduleInput"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case the given demo data does not exist","content":{"application/json":{}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}]}},"/v1/schedules":{"post":{"summary":"Request a job schedule to be solved, a unique identifier is returned that can be used to retrieve the job schedule once solved","operationId":"schedule","tags":["Job Schedule"],"parameters":[{"description":"Optional name to be given to the dataset, if not provided a name will be generated.","name":"name","in":"query","schema":{"type":"string"}},{"description":"Operation to execute on the POST request.","name":"operation","in":"query","schema":{"enum":["NONE","SOLVE"],"type":"string","default":"SOLVE"}},{"name":"configurationId","in":"query","required":false,"description":"Optional identifier of the configuration profile. You may provide either the configuration profile’s unique ID or its name.","schema":{"type":"string"}},{"name":"priority","in":"query","required":false,"description":"Optional solve priority. Defaults to 5, minimum 0 (lowest priority), maximum 10 (highest priority).","schema":{"type":"integer"}},{"name":"tags","in":"query","required":false,"description":"Optional tags to be associated with dataset","schema":{"type":"array","items":{"type":"string"}}}],"requestBody":{"content":{"application/json":{"schema":{"required":["modelInput"],"type":"object","properties":{"config":{"type":"object","properties":{"run":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}},"description":"The run configuration.","nullable":true},"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"The model configuration. Impacts the quality of solution.","nullable":true},"resourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"readOnly":true,"nullable":true},"mapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}},"readOnly":true,"nullable":true}},"additionalProperties":false,"description":"The configuration of the model request. If not provided, defaults of the model are used.","nullable":true},"modelInput":{"description":"The model input to solve.","type":"object","properties":{"machines":{"description":"The machines that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The machine that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"jobs":{"description":"Jobs assigned to this machine.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this machine will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this machine.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the machine is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this machine with a processingStart before this point in time will get pinned."},"machineType":{"description":"The type of the machine.","type":"string","nullable":true},"initialJobType":{"description":"The job type that the machine is set up for at its start. The first job on the machine changes over from it, so a job transition from this job type to the job type of the first job applies. Without it, the first job needs no changeover.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputMachine"},"x-uniqueItemsProperty":"id"},"machineTags":{"description":"The tags that machines can carry.","uniqueItems":true,"type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"},"x-uniqueItemsProperty":"id"},"machineTypes":{"description":"The machine types that machines and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Resource type expressing the type of a resource","type":"object","properties":{"id":{"description":"The unique identifier of the machine type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/MachineType"},"x-uniqueItemsProperty":"id"},"employees":{"description":"The employees that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The employee that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"jobs":{"description":"Jobs assigned to this employee.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this employee will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this employee.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the employee is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this employee with a processingStart before this point in time will get pinned."}},"additionalProperties":false,"$$ref":"#/components/schemas/InputEmployee"},"x-uniqueItemsProperty":"id"},"employeeTags":{"description":"The tags that employees can carry.","type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"}},"jobs":{"description":"The jobs to schedule.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"duration":{"description":"Duration of the job. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"string","nullable":true},"durationOnResources":{"description":"Duration of the job on specific resources. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"array","items":{"description":"Duration of a job on a specific machine or employee.","required":["resource","duration"],"type":"object","properties":{"resource":{"description":"Identifier of the machine.","type":"string"},"duration":{"description":"Duration of the job on the machine or employee.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobDurationOnResource"},"nullable":true},"requiredTags":{"description":"Required tags. A job can only be assigned to a resource (machine or employee) with all of these tags.","uniqueItems":true,"type":"array","items":{"type":"string"}},"requiredResources":{"description":"Required resources. A job can only be assigned to one of these resources.","uniqueItems":true,"type":"array","items":{"type":"string"}},"dependencies":{"description":"Dependency jobs. This job can only start after all dependency jobs have finished.","uniqueItems":true,"type":"array","items":{"description":"A job that must be finished, or started, before the job that declares this dependency.","required":["id"],"type":"object","properties":{"id":{"description":"Unique identifier of the job.","type":"string"},"anchor":{"description":"The point on the preceding job that the offsets are measured from.","enum":["END","START"],"type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"Smallest allowed offset between the anchor of the preceding job and the start of this job."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"Largest allowed offset between the anchor of the preceding job and the start of this job. Unset means unbounded."},"requiresSameResource":{"description":"The dependent job must run on the same resource as the preceding job.","type":"boolean"},"noIntermediateJobs":{"description":"No other job may run between the preceding job and the dependent job.","type":"boolean"}},"$$ref":"#/components/schemas/DependencyJob"}},"minStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Minimum start time of the job. The job will never be scheduled before this point in time.","nullable":true},"idealEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Ideal end time of the job. The job will ideally finish close to this point in time.","nullable":true},"maxEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Maximum end time of the job. The job will never finish after this point in time.","nullable":true},"dueDate":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Due date of the job. A job that finishes after its due date counts as late. Unlike 'maxEnd', a due date is a goal: a job that cannot make it is still scheduled.","nullable":true},"priority":{"format":"int32","description":"The job's priority. Jobs with high priority ideally finish before low-priority jobs.","minimum":1,"type":"integer"},"jobType":{"description":"The type of the job.","type":"string","nullable":true},"noInterruptions":{"description":"Whether the job must run without interruption. By default a job that overlaps an unavailable time span of its resource pauses and continues afterwards, which makes the job take longer. A job with 'noInterruptions' instead waits until its resource is available for the whole duration of the job.","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJob"},"x-uniqueItemsProperty":"id"},"jobTypes":{"description":"The job types that jobs and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Job type expressing the type of a job","type":"object","properties":{"id":{"description":"The unique identifier of the job type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobType"},"x-uniqueItemsProperty":"id"},"jobTransitions":{"description":"The transition times between jobs of a given type on a machine of a given type.","type":"array","items":{"description":"JobTransition between jobs","required":["machineType","fromJobType","toJobType","duration"],"type":"object","properties":{"machineType":{"description":"Type associated with the machine","type":"string"},"fromJobType":{"description":"Type associated with the source job","type":"string"},"toJobType":{"description":"Type associated with the target job","type":"string"},"duration":{"description":"Duration of the transition","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobTransition"}},"resourceTransitions":{"description":"The rewarded and the forbidden transitions between specific resources.","type":"array","items":{"description":"A transition between dependent jobs from/to specific resources (machines/employees) will be rewarded.","required":["fromResourceId","toResourceId"],"type":"object","properties":{"fromResourceId":{"description":"ID of the source resource","type":"string"},"toResourceId":{"description":"ID of the target resource","type":"string"},"reward":{"format":"int32","description":"Reward score for this transition (higher is better)","type":"integer"},"forbidden":{"description":"The transition is forbidden","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/ResourceTransition"}}},"additionalProperties":false}},"additionalProperties":false,"$$ref":"#/components/schemas/ModelRequestJobScheduleInputJobScheduleConfigOverrides"}}},"required":true},"responses":{"202":{"description":"Successfully accepted request to post a dataset","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}}}}}},"400":{"description":"In case request given does not meet expectations","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"},{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"string"}}},"$$ref":"#/components/schemas/ValidationErrorInfo"}]}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"schedule"},"get":{"summary":"List all job schedules that are registered in the service (that are to be solved, in progress, or solved), only returning its status","operationId":"getSchedules","deprecated":true,"tags":["Job Schedule"],"parameters":[{"name":"page","in":"query","schema":{"format":"int32","default":0,"minimum":0,"type":"integer"}},{"name":"size","in":"query","schema":{"format":"int32","default":100,"maximum":1000,"minimum":0,"type":"integer"}}],"responses":{"200":{"description":"Returns scheduling with given identifier","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"$$ref":"#/components/schemas/Metadata"}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case request given schedule does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"getSchedules"}},"/v1/schedules/score-analysis":{"post":{"summary":"Calculates score analysis for the supplied schedule","operationId":"calculateScoreAnalysis","tags":["Job Schedule"],"parameters":[{"name":"includeJustifications","in":"query","schema":{"default":false,"type":"boolean"}},{"name":"configurationId","in":"query","required":false,"description":"Optional identifier of the configuration profile. You may provide either the configuration profile’s unique ID or its name.","schema":{"type":"string"}},{"name":"priority","in":"query","required":false,"description":"Optional solve priority. Defaults to 5, minimum 0 (lowest priority), maximum 10 (highest priority).","schema":{"type":"integer"}},{"name":"tags","in":"query","required":false,"description":"Optional tags to be associated with dataset","schema":{"type":"array","items":{"type":"string"}}}],"requestBody":{"content":{"application/json":{"schema":{"required":["modelInput"],"type":"object","properties":{"config":{"type":"object","properties":{"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"Model configuration for the score analysis.","nullable":true}},"additionalProperties":false,"description":"Configuration for the score analysis.","nullable":true},"modelInput":{"description":"The model input to analyze.","type":"object","properties":{"machines":{"description":"The machines that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The machine that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"jobs":{"description":"Jobs assigned to this machine.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this machine will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this machine.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the machine is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this machine with a processingStart before this point in time will get pinned."},"machineType":{"description":"The type of the machine.","type":"string","nullable":true},"initialJobType":{"description":"The job type that the machine is set up for at its start. The first job on the machine changes over from it, so a job transition from this job type to the job type of the first job applies. Without it, the first job needs no changeover.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputMachine"},"x-uniqueItemsProperty":"id"},"machineTags":{"description":"The tags that machines can carry.","uniqueItems":true,"type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"},"x-uniqueItemsProperty":"id"},"machineTypes":{"description":"The machine types that machines and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Resource type expressing the type of a resource","type":"object","properties":{"id":{"description":"The unique identifier of the machine type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/MachineType"},"x-uniqueItemsProperty":"id"},"employees":{"description":"The employees that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The employee that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"jobs":{"description":"Jobs assigned to this employee.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this employee will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this employee.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the employee is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this employee with a processingStart before this point in time will get pinned."}},"additionalProperties":false,"$$ref":"#/components/schemas/InputEmployee"},"x-uniqueItemsProperty":"id"},"employeeTags":{"description":"The tags that employees can carry.","type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"}},"jobs":{"description":"The jobs to schedule.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"duration":{"description":"Duration of the job. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"string","nullable":true},"durationOnResources":{"description":"Duration of the job on specific resources. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"array","items":{"description":"Duration of a job on a specific machine or employee.","required":["resource","duration"],"type":"object","properties":{"resource":{"description":"Identifier of the machine.","type":"string"},"duration":{"description":"Duration of the job on the machine or employee.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobDurationOnResource"},"nullable":true},"requiredTags":{"description":"Required tags. A job can only be assigned to a resource (machine or employee) with all of these tags.","uniqueItems":true,"type":"array","items":{"type":"string"}},"requiredResources":{"description":"Required resources. A job can only be assigned to one of these resources.","uniqueItems":true,"type":"array","items":{"type":"string"}},"dependencies":{"description":"Dependency jobs. This job can only start after all dependency jobs have finished.","uniqueItems":true,"type":"array","items":{"description":"A job that must be finished, or started, before the job that declares this dependency.","required":["id"],"type":"object","properties":{"id":{"description":"Unique identifier of the job.","type":"string"},"anchor":{"description":"The point on the preceding job that the offsets are measured from.","enum":["END","START"],"type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"Smallest allowed offset between the anchor of the preceding job and the start of this job."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"Largest allowed offset between the anchor of the preceding job and the start of this job. Unset means unbounded."},"requiresSameResource":{"description":"The dependent job must run on the same resource as the preceding job.","type":"boolean"},"noIntermediateJobs":{"description":"No other job may run between the preceding job and the dependent job.","type":"boolean"}},"$$ref":"#/components/schemas/DependencyJob"}},"minStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Minimum start time of the job. The job will never be scheduled before this point in time.","nullable":true},"idealEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Ideal end time of the job. The job will ideally finish close to this point in time.","nullable":true},"maxEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Maximum end time of the job. The job will never finish after this point in time.","nullable":true},"dueDate":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Due date of the job. A job that finishes after its due date counts as late. Unlike 'maxEnd', a due date is a goal: a job that cannot make it is still scheduled.","nullable":true},"priority":{"format":"int32","description":"The job's priority. Jobs with high priority ideally finish before low-priority jobs.","minimum":1,"type":"integer"},"jobType":{"description":"The type of the job.","type":"string","nullable":true},"noInterruptions":{"description":"Whether the job must run without interruption. By default a job that overlaps an unavailable time span of its resource pauses and continues afterwards, which makes the job take longer. A job with 'noInterruptions' instead waits until its resource is available for the whole duration of the job.","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJob"},"x-uniqueItemsProperty":"id"},"jobTypes":{"description":"The job types that jobs and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Job type expressing the type of a job","type":"object","properties":{"id":{"description":"The unique identifier of the job type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobType"},"x-uniqueItemsProperty":"id"},"jobTransitions":{"description":"The transition times between jobs of a given type on a machine of a given type.","type":"array","items":{"description":"JobTransition between jobs","required":["machineType","fromJobType","toJobType","duration"],"type":"object","properties":{"machineType":{"description":"Type associated with the machine","type":"string"},"fromJobType":{"description":"Type associated with the source job","type":"string"},"toJobType":{"description":"Type associated with the target job","type":"string"},"duration":{"description":"Duration of the transition","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobTransition"}},"resourceTransitions":{"description":"The rewarded and the forbidden transitions between specific resources.","type":"array","items":{"description":"A transition between dependent jobs from/to specific resources (machines/employees) will be rewarded.","required":["fromResourceId","toResourceId"],"type":"object","properties":{"fromResourceId":{"description":"ID of the source resource","type":"string"},"toResourceId":{"description":"ID of the target resource","type":"string"},"reward":{"format":"int32","description":"Reward score for this transition (higher is better)","type":"integer"},"forbidden":{"description":"The transition is forbidden","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/ResourceTransition"}}},"additionalProperties":false}},"additionalProperties":false,"$$ref":"#/components/schemas/ScoreAnalysisRequestJobScheduleInputJobScheduleConfigOverrides"}}},"required":true},"responses":{"200":{"description":"Score analysis for the supplied schedule","content":{"application/json":{"schema":{"type":"object","properties":{"score":{"type":"string"},"constraints":{"type":"array","items":{"type":"object","properties":{"id":{"description":"Identifier of the constraint. Unique within the model, and identical across all runs and datasets of the same model version.","type":"string"},"name":{"type":"string"},"weight":{"type":"string"},"score":{"type":"string"},"matches":{"type":"array","items":{"type":"object","properties":{"score":{"type":"string"},"justification":{"type":"object","properties":{"description":{"type":"string"}},"$$ref":"#/components/schemas/ModelConstraintJustification"}}}},"matchCount":{"format":"int32","type":"integer"}}}}},"$$ref":"#/components/schemas/ScoreAnalysisDetail"}}}},"400":{"description":"Validation results in case of invalid input","content":{"application/json":{"schema":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"calculateScoreAnalysis"}},"/v1/schedules/validation-issue-types":{"get":{"summary":"Get validation issue types supported by the model","operationId":"getValidationIssueTypes","tags":["Job Schedule"],"responses":{"200":{"description":"Validation issue types supported by the model","content":{"application/json":{"schema":{"required":["issueTypes"],"type":"object","properties":{"issueTypes":{"description":"List of all supported validation issue types together with their metadata.","type":"array","items":{"required":["code","severity"],"type":"object","properties":{"code":{"type":"object","properties":{"value":{"type":"string"}},"description":"Unique case-sensitive code of the issue type."},"severity":{"enum":["ERROR","WARNING"],"type":"string","description":"Issue severity"},"metadata":{"type":"array","items":{"type":"object","properties":{"type":{"description":"The type of the issue type detail.","type":"string","readOnly":true}},"oneOf":[{"type":"object","properties":{"type":{"description":"The type of the issue type detail.","type":"string","readOnly":true},"message":{"type":"string"}},"$$ref":"#/components/schemas/IssueMessage"}],"$$ref":"#/components/schemas/IssueMetadata"}}},"$$ref":"#/components/schemas/IssueType"}}},"$$ref":"#/components/schemas/ValidationIssueTypes"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"getValidationIssueTypes"}},"/v1/schedules/validation-issue-types/{code}":{"get":{"summary":"Get validation issue type by the code","operationId":"getValidationIssueTypeByCode","tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the validation issue type","required":true,"name":"code","in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Validation issue type of the given code","content":{"application/json":{"schema":{"required":["issueTypes"],"type":"object","properties":{"issueTypes":{"description":"List of all supported validation issue types together with their metadata.","type":"array","items":{"required":["code","severity"],"type":"object","properties":{"code":{"type":"object","properties":{"value":{"type":"string"}},"description":"Unique case-sensitive code of the issue type."},"severity":{"enum":["ERROR","WARNING"],"type":"string","description":"Issue severity"},"metadata":{"type":"array","items":{"type":"object","properties":{"type":{"description":"The type of the issue type detail.","type":"string","readOnly":true}},"oneOf":[{"type":"object","properties":{"type":{"description":"The type of the issue type detail.","type":"string","readOnly":true},"message":{"type":"string"}},"$$ref":"#/components/schemas/IssueMessage"}],"$$ref":"#/components/schemas/IssueMetadata"}}},"$$ref":"#/components/schemas/IssueType"}}},"$$ref":"#/components/schemas/ValidationIssueTypes"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case the issue type of the given code does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"getValidationIssueTypeByCode"}},"/v1/schedules/{id}":{"delete":{"summary":"Terminate and return a job schedule with the given identifier","operationId":"terminateSchedule","tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the schedule","required":true,"name":"id","in":"path","schema":{"type":"string"}},{"name":"force","in":"query","required":false,"description":"Instructs to forcibly terminate in case regular termination fails","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Returns scheduling with given identifier","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"description":"The model dataset metadata.","nullable":true},"modelOutput":{"description":"The solution to the requested model input.","type":"object","properties":{"machines":{"description":"The machines with the jobs the solver placed on them, in processing order.","type":"array","items":{"description":"The machine that processes jobs.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"schedule":{"description":"Jobs assigned to this machine.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}},"idleTime":{"description":"The time in which the machine waits between its start and the end of its last job: it neither processes a job, nor changes over, nor is unavailable. Zero when the machine has no jobs.","type":"string","nullable":true},"changeovers":{"format":"int64","description":"The number of changeovers on this machine, including the one before its first job when the machine has an initial job type.","type":"integer"},"changeoverTime":{"description":"The total duration of the changeovers on this machine. Zero when it has none.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputMachine"}},"employees":{"description":"The employees with the jobs the solver placed on them, in processing order.","type":"array","items":{"description":"The employee that processes jobs.","required":["id"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"schedule":{"description":"Jobs assigned to this employee.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputEmployee"}},"unassignedJobs":{"description":"The jobs the solver could not assign to any machine or employee.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}}},"additionalProperties":false,"nullable":true},"inputMetrics":{"description":"Key metrics aggregated from the model input.","type":"object","properties":{"jobs":{"format":"number","title":"Jobs","description":"The number of jobs in the input dataset.","type":"integer","example":4064,"x-tf-priority":"1","x-tf-example":"1654"},"machines":{"format":"number","title":"Machines","description":"The number of machines in the input dataset.","type":"integer","example":100,"x-tf-priority":"2","x-tf-example":"50"},"employees":{"format":"number","title":"Employees","description":"The number of employees in the input dataset.","type":"integer","example":50,"x-tf-priority":"3","x-tf-example":"25"}},"nullable":true},"kpis":{"description":"Key metrics aggregated from the model output.","type":"object","properties":{"makespan":{"format":"duration","title":"Makespan","description":"The total duration of the schedule.","type":"string","example":"PT1H","x-tf-priority":"2","x-tf-example":"PT1H"},"unassignedJobs":{"format":"number","title":"Unassigned jobs","description":"The number of jobs that could not be assigned to a machine or employee in this schedule.","type":"integer","example":10,"x-tf-priority":"1","x-tf-example":"12"},"assignedJobs":{"format":"number","title":"Assigned jobs","description":"The number of jobs that are successfully assigned to machines or employees in this schedule.","type":"integer","example":90,"x-tf-priority":"3","x-tf-example":"88"},"activatedMachines":{"format":"number","title":"Activated machines","description":"The number of machines that have at least one job assigned.","type":"integer","example":5,"x-tf-priority":"4","x-tf-example":"5"},"activatedEmployees":{"format":"number","title":"Activated employees","description":"The number of employees that have at least one job assigned.","type":"integer","example":5,"x-tf-priority":"5","x-tf-example":"5"},"idealEndTimeDeviation":{"format":"duration","title":"Ideal end time deviation","description":"The total deviation of jobs from their ideal end times when specified.","type":"string","example":"PT2H","x-tf-priority":"6","x-tf-example":"PT2H"},"lateJobs":{"format":"number","title":"Late jobs","description":"The number of jobs that finish after their due date or after their maximum end. A job that finishes after both counts once.","type":"integer","example":3,"x-tf-priority":"7","x-tf-example":"3"},"machineUtilization":{"format":"percentage","title":"Machine utilization","description":"The percentage of available machine time that is spent processing jobs. Available time runs from the start of each machine to the end of the schedule, without its unavailable time spans. Setup time and idle time do not count as processing. Unset when no machine is available before the end of the schedule.","type":"number","example":85.5,"nullable":true,"x-tf-priority":"8","x-tf-example":"85.5%"},"employeeUtilization":{"format":"percentage","title":"Employee utilization","description":"The percentage of available employee time that is spent processing jobs. Available time runs from the start of each employee to the end of the schedule, without its unavailable time spans, such as breaks. Idle time does not count as processing. Unset when no employee is available before the end of the schedule.","type":"number","example":92.5,"nullable":true,"x-tf-priority":"9","x-tf-example":"92.5%"},"changeovers":{"format":"number","title":"Changeovers","description":"The number of changeovers on machines. A changeover is the switch between two consecutive jobs on a machine when the job type changes or a job transition adds time.","type":"integer","example":4,"x-tf-priority":"10","x-tf-example":"4"},"totalChangeoverTime":{"format":"duration","title":"Total changeover time","description":"The total duration of all changeovers on machines, from the job transitions.","type":"string","example":"PT3H","x-tf-priority":"11","x-tf-example":"PT3H"},"totalIdleTime":{"format":"duration","title":"Total idle time","description":"The total time in which machines wait between their start and the end of their last job: they neither process a job, nor change over, nor are unavailable.","type":"string","example":"PT5H","x-tf-priority":"12","x-tf-example":"PT5H"}},"nullable":true},"run":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"description":"The model run metadata. Deprecated in favor of \"metadata\"","readOnly":true,"nullable":true,"deprecated":true}},"$$ref":"#/components/schemas/ModelResponseHardMediumSoftScoreJobScheduleOutputJobScheduleInputMetricsJobScheduleOutputMetrics"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case request given schedule does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"terminateSchedule"},"post":{"summary":"Request solving a dataset under the given unique identifier.","operationId":"solveDataset","tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the dataset","required":true,"name":"id","in":"path","schema":{"type":"string"}},{"name":"priority","in":"query","required":false,"description":"Optional solve priority. Defaults to 5, minimum 0 (lowest priority), maximum 10 (highest priority).","schema":{"type":"integer"}}],"responses":{"202":{"description":"Successfully accepted request to solve scheduling problem","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"solveDataset"},"get":{"summary":"Get a job schedule with the given identifier. It's the best schedule so far as the solver might still be running.","operationId":"getSchedule","tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the schedule","required":true,"name":"id","in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns scheduling with given identifier","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"description":"The model dataset metadata.","nullable":true},"modelOutput":{"description":"The solution to the requested model input.","type":"object","properties":{"machines":{"description":"The machines with the jobs the solver placed on them, in processing order.","type":"array","items":{"description":"The machine that processes jobs.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"schedule":{"description":"Jobs assigned to this machine.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}},"idleTime":{"description":"The time in which the machine waits between its start and the end of its last job: it neither processes a job, nor changes over, nor is unavailable. Zero when the machine has no jobs.","type":"string","nullable":true},"changeovers":{"format":"int64","description":"The number of changeovers on this machine, including the one before its first job when the machine has an initial job type.","type":"integer"},"changeoverTime":{"description":"The total duration of the changeovers on this machine. Zero when it has none.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputMachine"}},"employees":{"description":"The employees with the jobs the solver placed on them, in processing order.","type":"array","items":{"description":"The employee that processes jobs.","required":["id"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"schedule":{"description":"Jobs assigned to this employee.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputEmployee"}},"unassignedJobs":{"description":"The jobs the solver could not assign to any machine or employee.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}}},"additionalProperties":false,"nullable":true},"inputMetrics":{"description":"Key metrics aggregated from the model input.","type":"object","properties":{"jobs":{"format":"number","title":"Jobs","description":"The number of jobs in the input dataset.","type":"integer","example":4064,"x-tf-priority":"1","x-tf-example":"1654"},"machines":{"format":"number","title":"Machines","description":"The number of machines in the input dataset.","type":"integer","example":100,"x-tf-priority":"2","x-tf-example":"50"},"employees":{"format":"number","title":"Employees","description":"The number of employees in the input dataset.","type":"integer","example":50,"x-tf-priority":"3","x-tf-example":"25"}},"nullable":true},"kpis":{"description":"Key metrics aggregated from the model output.","type":"object","properties":{"makespan":{"format":"duration","title":"Makespan","description":"The total duration of the schedule.","type":"string","example":"PT1H","x-tf-priority":"2","x-tf-example":"PT1H"},"unassignedJobs":{"format":"number","title":"Unassigned jobs","description":"The number of jobs that could not be assigned to a machine or employee in this schedule.","type":"integer","example":10,"x-tf-priority":"1","x-tf-example":"12"},"assignedJobs":{"format":"number","title":"Assigned jobs","description":"The number of jobs that are successfully assigned to machines or employees in this schedule.","type":"integer","example":90,"x-tf-priority":"3","x-tf-example":"88"},"activatedMachines":{"format":"number","title":"Activated machines","description":"The number of machines that have at least one job assigned.","type":"integer","example":5,"x-tf-priority":"4","x-tf-example":"5"},"activatedEmployees":{"format":"number","title":"Activated employees","description":"The number of employees that have at least one job assigned.","type":"integer","example":5,"x-tf-priority":"5","x-tf-example":"5"},"idealEndTimeDeviation":{"format":"duration","title":"Ideal end time deviation","description":"The total deviation of jobs from their ideal end times when specified.","type":"string","example":"PT2H","x-tf-priority":"6","x-tf-example":"PT2H"},"lateJobs":{"format":"number","title":"Late jobs","description":"The number of jobs that finish after their due date or after their maximum end. A job that finishes after both counts once.","type":"integer","example":3,"x-tf-priority":"7","x-tf-example":"3"},"machineUtilization":{"format":"percentage","title":"Machine utilization","description":"The percentage of available machine time that is spent processing jobs. Available time runs from the start of each machine to the end of the schedule, without its unavailable time spans. Setup time and idle time do not count as processing. Unset when no machine is available before the end of the schedule.","type":"number","example":85.5,"nullable":true,"x-tf-priority":"8","x-tf-example":"85.5%"},"employeeUtilization":{"format":"percentage","title":"Employee utilization","description":"The percentage of available employee time that is spent processing jobs. Available time runs from the start of each employee to the end of the schedule, without its unavailable time spans, such as breaks. Idle time does not count as processing. Unset when no employee is available before the end of the schedule.","type":"number","example":92.5,"nullable":true,"x-tf-priority":"9","x-tf-example":"92.5%"},"changeovers":{"format":"number","title":"Changeovers","description":"The number of changeovers on machines. A changeover is the switch between two consecutive jobs on a machine when the job type changes or a job transition adds time.","type":"integer","example":4,"x-tf-priority":"10","x-tf-example":"4"},"totalChangeoverTime":{"format":"duration","title":"Total changeover time","description":"The total duration of all changeovers on machines, from the job transitions.","type":"string","example":"PT3H","x-tf-priority":"11","x-tf-example":"PT3H"},"totalIdleTime":{"format":"duration","title":"Total idle time","description":"The total time in which machines wait between their start and the end of their last job: they neither process a job, nor change over, nor are unavailable.","type":"string","example":"PT5H","x-tf-priority":"12","x-tf-example":"PT5H"}},"nullable":true},"run":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"description":"The model run metadata. Deprecated in favor of \"metadata\"","readOnly":true,"nullable":true,"deprecated":true}},"$$ref":"#/components/schemas/ModelResponseHardMediumSoftScoreJobScheduleOutputJobScheduleInputMetricsJobScheduleOutputMetrics"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case request given schedule does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"getSchedule"},"put":{"tags":["Administration"],"operationId":"restoreSchedule","description":"Restores previously deleted dataset if it is still available.","summary":"Restores dataset that was previously deleted.","parameters":[{"name":"id","in":"path","description":"Unique id of the dataset to be restored.","schema":{"type":"string"},"required":true}],"security":[{"auth":[]}],"responses":{"204":{"description":"Item successfully restored."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API key used with this call does not have access to the operation."},"404":{"description":"Item cannot be restored or was not found."}},"__originalOperationId":"restoreSchedule"}},"/v1/schedules/{id}/config":{"get":{"summary":"Get the configuration used for the schedule","operationId":"getScheduleConfig","tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the schedule","required":true,"name":"id","in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the configuration used for a schedule with the given identifier","content":{"application/json":{"schema":{"type":"object","properties":{"run":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}},"description":"The run configuration.","nullable":true},"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"The model configuration. Impacts the quality of solution.","nullable":true},"resourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"readOnly":true,"nullable":true},"mapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}},"readOnly":true,"nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/ModelConfiguration2"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case request given schedule does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"getScheduleConfig"}},"/v1/schedules/{id}/events":{"get":{"summary":"Subscribes to events of given dataset (of type metadata) as long as it has not yet reached final state (completed, failed, incomplete or invalid)","operationId":"getMetadataEvents","tags":["Job Schedule"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"array","items":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","$$ref":"#/components/schemas/SolvingStatus"}}}],"responses":{"200":{"description":"Event stream of dataset changes","content":{"text/event-stream":{"schema":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"$$ref":"#/components/schemas/Metadata"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case request given dataset does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"410":{"description":"In case given dataset is already in final state","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"getMetadataEvents"}},"/v1/schedules/{id}/from-input":{"post":{"summary":"Request a problem to be solved, based on a previously solved dataset. A unique identifier is returned that can be used to get the schedule once solved","operationId":"fromInput","tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the schedule","required":true,"name":"id","in":"path","schema":{"type":"string"}},{"description":"Optional name to be given to the dataset, if not provided a name will be generated.","name":"name","in":"query","schema":{"type":"string"}},{"description":"Operation to execute on the POST request.","name":"operation","in":"query","schema":{"enum":["NONE","SOLVE"],"type":"string","default":"SOLVE"}},{"description":"Data to use as a source for the operation.","name":"select","in":"query","schema":{"enum":["UNSOLVED","SOLVED"],"type":"string","default":"UNSOLVED"}},{"name":"configurationId","in":"query","required":false,"description":"Optional identifier of the configuration profile. You may provide either the configuration profile’s unique ID or its name.","schema":{"type":"string"}},{"name":"priority","in":"query","required":false,"description":"Optional solve priority. Defaults to 5, minimum 0 (lowest priority), maximum 10 (highest priority).","schema":{"type":"integer"}},{"name":"tags","in":"query","required":false,"description":"Optional tags to be associated with dataset","schema":{"type":"array","items":{"type":"string"}}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"run":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}},"description":"The run configuration.","nullable":true},"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"The model configuration. Impacts the quality of solution.","nullable":true},"resourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"readOnly":true,"nullable":true},"mapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}},"readOnly":true,"nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/ModelConfiguration2"}}}},"responses":{"202":{"description":"Successfully accepted request to solve scheduling problem","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}}}}}},"400":{"description":"In case request given does not meet expectations","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"},{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"string"}}},"$$ref":"#/components/schemas/ValidationErrorInfo"}]}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"fromInput"}},"/v1/schedules/{id}/from-patch":{"post":{"summary":"Preview: Request a problem to be solved, based on a previous dataset that is patched with given operations. A unique identifier is returned that can be used to get the dataset","description":"Request a problem to be solved, based on a previous dataset that is patched with given operations. This operation is in preview and might be a subject to change. This operation is not be available for everyone (feature-flagged).","operationId":"fromPatch","tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the schedule","required":true,"name":"id","in":"path","schema":{"type":"string"}},{"description":"Optional name to be given to the dataset, if not provided a name will be generated.","name":"name","in":"query","schema":{"type":"string"}},{"description":"Operation to execute on the POST request.","name":"operation","in":"query","schema":{"enum":["NONE","SOLVE"],"type":"string","default":"SOLVE"}},{"description":"Data to use as a source for the operation.","name":"select","in":"query","schema":{"enum":["UNSOLVED","SOLVED"],"type":"string","default":"SOLVED"}},{"name":"configurationId","in":"query","required":false,"description":"Optional identifier of the configuration profile. You may provide either the configuration profile’s unique ID or its name.","schema":{"type":"string"}},{"name":"priority","in":"query","required":false,"description":"Optional solve priority. Defaults to 5, minimum 0 (lowest priority), maximum 10 (highest priority).","schema":{"type":"integer"}},{"name":"tags","in":"query","required":false,"description":"Optional tags to be associated with dataset","schema":{"type":"array","items":{"type":"string"}}}],"requestBody":{"content":{"application/json":{"schema":{"required":["patch"],"type":"object","properties":{"config":{"type":"object","properties":{"run":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}},"description":"The run configuration.","nullable":true},"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"The model configuration. Impacts the quality of solution.","nullable":true},"resourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"readOnly":true,"nullable":true},"mapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}},"readOnly":true,"nullable":true}},"additionalProperties":false,"description":"Optional configuration to be applied when solving the patched dataset."},"patch":{"description":"List of patches to be applied to the original dataset.","type":"array","items":{"required":["op","path"],"type":"object","properties":{"op":{"enum":["add","remove","replace"],"type":"string","description":"Operation to be applied"},"path":{"description":"Path within the dataset structure to be modified. Can use field expression with format [fieldName=value] or index to point to selected objects","type":"string","example":"/employees/[id=Employee123]"},"value":{"description":"Value (object, array or simple value) to be used for add or replace operations. It should not be given for remove operation","additionalProperties":true,"anyOf":[{},{"type":"array","items":{}}]}},"$$ref":"#/components/schemas/ModelInputPatch"}}},"$$ref":"#/components/schemas/ModelInputPatchRequestJobScheduleConfigOverrides"}}},"required":true},"responses":{"202":{"description":"Successfully patched and accepted request to solve scheduling problem","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}}}}}},"400":{"description":"In case request given does not meet expectations","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"},{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"string"}}},"$$ref":"#/components/schemas/ValidationErrorInfo"}]}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"fromPatch"}},"/v1/schedules/{id}/input":{"get":{"summary":"Get input dataset","operationId":"getScheduleInput","tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the schedule","required":true,"name":"id","in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns input dataset for given identifier","content":{"application/json":{"schema":{"description":"Definition of the schedule.","type":"object","properties":{"machines":{"description":"The machines that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The machine that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"jobs":{"description":"Jobs assigned to this machine.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this machine will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this machine.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the machine is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this machine with a processingStart before this point in time will get pinned."},"machineType":{"description":"The type of the machine.","type":"string","nullable":true},"initialJobType":{"description":"The job type that the machine is set up for at its start. The first job on the machine changes over from it, so a job transition from this job type to the job type of the first job applies. Without it, the first job needs no changeover.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputMachine"},"x-uniqueItemsProperty":"id"},"machineTags":{"description":"The tags that machines can carry.","uniqueItems":true,"type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"},"x-uniqueItemsProperty":"id"},"machineTypes":{"description":"The machine types that machines and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Resource type expressing the type of a resource","type":"object","properties":{"id":{"description":"The unique identifier of the machine type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/MachineType"},"x-uniqueItemsProperty":"id"},"employees":{"description":"The employees that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The employee that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"jobs":{"description":"Jobs assigned to this employee.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this employee will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this employee.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the employee is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this employee with a processingStart before this point in time will get pinned."}},"additionalProperties":false,"$$ref":"#/components/schemas/InputEmployee"},"x-uniqueItemsProperty":"id"},"employeeTags":{"description":"The tags that employees can carry.","type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"}},"jobs":{"description":"The jobs to schedule.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"duration":{"description":"Duration of the job. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"string","nullable":true},"durationOnResources":{"description":"Duration of the job on specific resources. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"array","items":{"description":"Duration of a job on a specific machine or employee.","required":["resource","duration"],"type":"object","properties":{"resource":{"description":"Identifier of the machine.","type":"string"},"duration":{"description":"Duration of the job on the machine or employee.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobDurationOnResource"},"nullable":true},"requiredTags":{"description":"Required tags. A job can only be assigned to a resource (machine or employee) with all of these tags.","uniqueItems":true,"type":"array","items":{"type":"string"}},"requiredResources":{"description":"Required resources. A job can only be assigned to one of these resources.","uniqueItems":true,"type":"array","items":{"type":"string"}},"dependencies":{"description":"Dependency jobs. This job can only start after all dependency jobs have finished.","uniqueItems":true,"type":"array","items":{"description":"A job that must be finished, or started, before the job that declares this dependency.","required":["id"],"type":"object","properties":{"id":{"description":"Unique identifier of the job.","type":"string"},"anchor":{"description":"The point on the preceding job that the offsets are measured from.","enum":["END","START"],"type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"Smallest allowed offset between the anchor of the preceding job and the start of this job."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"Largest allowed offset between the anchor of the preceding job and the start of this job. Unset means unbounded."},"requiresSameResource":{"description":"The dependent job must run on the same resource as the preceding job.","type":"boolean"},"noIntermediateJobs":{"description":"No other job may run between the preceding job and the dependent job.","type":"boolean"}},"$$ref":"#/components/schemas/DependencyJob"}},"minStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Minimum start time of the job. The job will never be scheduled before this point in time.","nullable":true},"idealEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Ideal end time of the job. The job will ideally finish close to this point in time.","nullable":true},"maxEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Maximum end time of the job. The job will never finish after this point in time.","nullable":true},"dueDate":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Due date of the job. A job that finishes after its due date counts as late. Unlike 'maxEnd', a due date is a goal: a job that cannot make it is still scheduled.","nullable":true},"priority":{"format":"int32","description":"The job's priority. Jobs with high priority ideally finish before low-priority jobs.","minimum":1,"type":"integer"},"jobType":{"description":"The type of the job.","type":"string","nullable":true},"noInterruptions":{"description":"Whether the job must run without interruption. By default a job that overlaps an unavailable time span of its resource pauses and continues afterwards, which makes the job take longer. A job with 'noInterruptions' instead waits until its resource is available for the whole duration of the job.","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJob"},"x-uniqueItemsProperty":"id"},"jobTypes":{"description":"The job types that jobs and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Job type expressing the type of a job","type":"object","properties":{"id":{"description":"The unique identifier of the job type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobType"},"x-uniqueItemsProperty":"id"},"jobTransitions":{"description":"The transition times between jobs of a given type on a machine of a given type.","type":"array","items":{"description":"JobTransition between jobs","required":["machineType","fromJobType","toJobType","duration"],"type":"object","properties":{"machineType":{"description":"Type associated with the machine","type":"string"},"fromJobType":{"description":"Type associated with the source job","type":"string"},"toJobType":{"description":"Type associated with the target job","type":"string"},"duration":{"description":"Duration of the transition","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobTransition"}},"resourceTransitions":{"description":"The rewarded and the forbidden transitions between specific resources.","type":"array","items":{"description":"A transition between dependent jobs from/to specific resources (machines/employees) will be rewarded.","required":["fromResourceId","toResourceId"],"type":"object","properties":{"fromResourceId":{"description":"ID of the source resource","type":"string"},"toResourceId":{"description":"ID of the target resource","type":"string"},"reward":{"format":"int32","description":"Reward score for this transition (higher is better)","type":"integer"},"forbidden":{"description":"The transition is forbidden","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/ResourceTransition"}}},"additionalProperties":false,"$$ref":"#/components/schemas/JobScheduleInput"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case request given schedule does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"getScheduleInput"}},"/v1/schedules/{id}/logs":{"get":{"summary":"Get logs with given identifier","operationId":"getScheduleLogs","tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the schedule","required":true,"name":"id","in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns logs with given identifier","content":{"application/json":{"schema":{"type":"object","properties":{"details":{"type":"string"}},"$$ref":"#/components/schemas/LogInfo"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case request given schedule does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"getScheduleLogs"}},"/v1/schedules/{id}/metadata":{"get":{"summary":"Get a job schedule status with the given identifier","operationId":"getMetadata","tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the schedule","required":true,"name":"id","in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns scheduling with given identifier","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"$$ref":"#/components/schemas/Metadata"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case request given schedule does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"getMetadata"},"patch":{"tags":["Administration"],"operationId":"updateMetadata","description":"Update dataset name and tags if still available","summary":"Update dataset name and tags","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","description":"Unique id of the dataset to be updated.","required":true,"schema":{"type":"string"}}],"security":[{"auth":[]}],"responses":{"200":{"description":"Dataset successfully updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"$$ref":"#/components/schemas/Metadata"}}}},"400":{"description":"Dataset can not be updated, invalid state."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API key used with this call does not have access to the operation."},"404":{"description":"Dataset not found."}},"__originalOperationId":"updateMetadata"}},"/v1/schedules/{id}/model-request":{"get":{"summary":"Get complete input request for given schedule with given identifier","operationId":"getModelRequest","tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the schedule","required":true,"name":"id","in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns scheduling input with given identifier","content":{"application/json":{"schema":{"required":["modelInput"],"type":"object","properties":{"config":{"type":"object","properties":{"run":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}},"description":"The run configuration.","nullable":true},"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"The model configuration. Impacts the quality of solution.","nullable":true},"resourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"readOnly":true,"nullable":true},"mapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}},"readOnly":true,"nullable":true}},"additionalProperties":false,"description":"The configuration of the model request. If not provided, defaults of the model are used.","nullable":true},"modelInput":{"description":"The model input to solve.","type":"object","properties":{"machines":{"description":"The machines that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The machine that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"jobs":{"description":"Jobs assigned to this machine.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this machine will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this machine.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the machine is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this machine with a processingStart before this point in time will get pinned."},"machineType":{"description":"The type of the machine.","type":"string","nullable":true},"initialJobType":{"description":"The job type that the machine is set up for at its start. The first job on the machine changes over from it, so a job transition from this job type to the job type of the first job applies. Without it, the first job needs no changeover.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputMachine"},"x-uniqueItemsProperty":"id"},"machineTags":{"description":"The tags that machines can carry.","uniqueItems":true,"type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"},"x-uniqueItemsProperty":"id"},"machineTypes":{"description":"The machine types that machines and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Resource type expressing the type of a resource","type":"object","properties":{"id":{"description":"The unique identifier of the machine type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/MachineType"},"x-uniqueItemsProperty":"id"},"employees":{"description":"The employees that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The employee that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"jobs":{"description":"Jobs assigned to this employee.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this employee will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this employee.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the employee is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this employee with a processingStart before this point in time will get pinned."}},"additionalProperties":false,"$$ref":"#/components/schemas/InputEmployee"},"x-uniqueItemsProperty":"id"},"employeeTags":{"description":"The tags that employees can carry.","type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"}},"jobs":{"description":"The jobs to schedule.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"duration":{"description":"Duration of the job. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"string","nullable":true},"durationOnResources":{"description":"Duration of the job on specific resources. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"array","items":{"description":"Duration of a job on a specific machine or employee.","required":["resource","duration"],"type":"object","properties":{"resource":{"description":"Identifier of the machine.","type":"string"},"duration":{"description":"Duration of the job on the machine or employee.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobDurationOnResource"},"nullable":true},"requiredTags":{"description":"Required tags. A job can only be assigned to a resource (machine or employee) with all of these tags.","uniqueItems":true,"type":"array","items":{"type":"string"}},"requiredResources":{"description":"Required resources. A job can only be assigned to one of these resources.","uniqueItems":true,"type":"array","items":{"type":"string"}},"dependencies":{"description":"Dependency jobs. This job can only start after all dependency jobs have finished.","uniqueItems":true,"type":"array","items":{"description":"A job that must be finished, or started, before the job that declares this dependency.","required":["id"],"type":"object","properties":{"id":{"description":"Unique identifier of the job.","type":"string"},"anchor":{"description":"The point on the preceding job that the offsets are measured from.","enum":["END","START"],"type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"Smallest allowed offset between the anchor of the preceding job and the start of this job."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"Largest allowed offset between the anchor of the preceding job and the start of this job. Unset means unbounded."},"requiresSameResource":{"description":"The dependent job must run on the same resource as the preceding job.","type":"boolean"},"noIntermediateJobs":{"description":"No other job may run between the preceding job and the dependent job.","type":"boolean"}},"$$ref":"#/components/schemas/DependencyJob"}},"minStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Minimum start time of the job. The job will never be scheduled before this point in time.","nullable":true},"idealEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Ideal end time of the job. The job will ideally finish close to this point in time.","nullable":true},"maxEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Maximum end time of the job. The job will never finish after this point in time.","nullable":true},"dueDate":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Due date of the job. A job that finishes after its due date counts as late. Unlike 'maxEnd', a due date is a goal: a job that cannot make it is still scheduled.","nullable":true},"priority":{"format":"int32","description":"The job's priority. Jobs with high priority ideally finish before low-priority jobs.","minimum":1,"type":"integer"},"jobType":{"description":"The type of the job.","type":"string","nullable":true},"noInterruptions":{"description":"Whether the job must run without interruption. By default a job that overlaps an unavailable time span of its resource pauses and continues afterwards, which makes the job take longer. A job with 'noInterruptions' instead waits until its resource is available for the whole duration of the job.","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJob"},"x-uniqueItemsProperty":"id"},"jobTypes":{"description":"The job types that jobs and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Job type expressing the type of a job","type":"object","properties":{"id":{"description":"The unique identifier of the job type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobType"},"x-uniqueItemsProperty":"id"},"jobTransitions":{"description":"The transition times between jobs of a given type on a machine of a given type.","type":"array","items":{"description":"JobTransition between jobs","required":["machineType","fromJobType","toJobType","duration"],"type":"object","properties":{"machineType":{"description":"Type associated with the machine","type":"string"},"fromJobType":{"description":"Type associated with the source job","type":"string"},"toJobType":{"description":"Type associated with the target job","type":"string"},"duration":{"description":"Duration of the transition","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobTransition"}},"resourceTransitions":{"description":"The rewarded and the forbidden transitions between specific resources.","type":"array","items":{"description":"A transition between dependent jobs from/to specific resources (machines/employees) will be rewarded.","required":["fromResourceId","toResourceId"],"type":"object","properties":{"fromResourceId":{"description":"ID of the source resource","type":"string"},"toResourceId":{"description":"ID of the target resource","type":"string"},"reward":{"format":"int32","description":"Reward score for this transition (higher is better)","type":"integer"},"forbidden":{"description":"The transition is forbidden","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/ResourceTransition"}}},"additionalProperties":false}},"additionalProperties":false,"$$ref":"#/components/schemas/ModelRequestJobScheduleInputJobScheduleConfigOverrides"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case request given schedule does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"getModelRequest"}},"/v1/schedules/{id}/new-run":{"post":{"summary":"(Deprecated endpoint, please use /{id}/from-input instead) Request a problem to be solved, based on a previously solved dataset. A unique identifier is returned that can be used to get the schedule once solved","operationId":"reschedule","deprecated":true,"tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the schedule","required":true,"name":"id","in":"path","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"run":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}},"description":"The run configuration.","nullable":true},"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"The model configuration. Impacts the quality of solution.","nullable":true},"resourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"readOnly":true,"nullable":true},"mapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}},"readOnly":true,"nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/ModelConfiguration2"}}}},"responses":{"202":{"description":"Successfully accepted request to solve scheduling problem","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}}}}}},"400":{"description":"In case request given does not meet expectations","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"},{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"string"}}},"$$ref":"#/components/schemas/ValidationErrorInfo"}]}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"reschedule"}},"/v1/schedules/{id}/run":{"get":{"summary":"(Deprecated endpoint, please use /{id}/metadata instead) Get a job schedule status with the given identifier","operationId":"getScheduleStatus","deprecated":true,"tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the schedule","required":true,"name":"id","in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns scheduling with given identifier","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"$$ref":"#/components/schemas/Metadata"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case request given schedule does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"getScheduleStatus"},"patch":{"tags":["Administration"],"operationId":"updateSchedule","description":"Update item name and tags if still available","summary":"(Deprecated endpoint, please use /{id}/metadata instead) Update item name and tags","deprecated":true,"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","description":"Unique id of the item to be updated","required":true,"schema":{"type":"string"}}],"security":[{"auth":[]}],"responses":{"200":{"description":"Dataset successfully updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"$$ref":"#/components/schemas/Metadata"}}}},"400":{"description":"Dataset can not be updated, invalid state."},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"Dataset not found."}},"__originalOperationId":"updateSchedule"}},"/v1/schedules/{id}/score-analysis":{"get":{"summary":"Get score analysis for a schedule with the given identifier","operationId":"getScoreAnalysis","tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the schedule","required":true,"name":"id","in":"path","schema":{"type":"string"}},{"name":"includeJustifications","in":"query","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Score analysis for a schedule with the given identifier","content":{"application/json":{"schema":{"type":"object","properties":{"score":{"type":"string"},"constraints":{"type":"array","items":{"type":"object","properties":{"id":{"description":"Identifier of the constraint. Unique within the model, and identical across all runs and datasets of the same model version.","type":"string"},"name":{"type":"string"},"weight":{"type":"string"},"score":{"type":"string"},"matches":{"type":"array","items":{"type":"object","properties":{"score":{"type":"string"},"justification":{"type":"object","properties":{"description":{"type":"string"}},"$$ref":"#/components/schemas/ModelConstraintJustification"}}}},"matchCount":{"format":"int32","type":"integer"}}}}},"$$ref":"#/components/schemas/ScoreAnalysisDetail"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case request given schedule does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"getScoreAnalysis"}},"/v1/schedules/{id}/validation-result":{"get":{"summary":"Get validation result of a dataset with the given identifier","operationId":"getValidationResult","tags":["Job Schedule"],"parameters":[{"description":"Unique identifier of the schedule","required":true,"name":"id","in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Validation results of a dataset with the given identifier","content":{"application/json":{"schema":{"required":["status"],"type":"object","properties":{"status":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"Determines if the validated dataset is accepted for further processing"},"issues":{"description":"Validation issues found","type":"array","items":{"description":"Reports one problem found while validating a job schedule input.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"}},"oneOf":[{"description":"Multiple resources have the same id.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resourceId1":{"description":"The id that both resources declare.","type":"string"},"resource1Type":{"description":"The type of the resource that declared the id first.","type":"string"},"resourceId2":{"description":"The id that both resources declare, repeated for the second resource.","type":"string"},"resource2Type":{"description":"The type of the resource that repeats the id.","type":"string"}},"$$ref":"#/components/schemas/DuplicateResourceIdIssue"},{"description":"A job dependency would close a cycle in the dependency graph.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobDependencyCycleIssue"},{"description":"A job depends on a job that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobDependencyDoesNotExistIssue"},{"description":"A job dependency allows no offset at all, because its maxOffset is below its minOffset.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"The smallest allowed offset that the dependency declares."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"The largest allowed offset that the dependency declares."}},"$$ref":"#/components/schemas/JobDependencyMaxOffsetLessThanMinOffsetIssue"},{"description":"A job dependency declares a negative maxOffset.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"The negative largest allowed offset that the dependency declares."}},"$$ref":"#/components/schemas/JobDependencyNegativeMaxOffsetIssue"},{"description":"A job dependency declares a negative minOffset.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"The negative smallest allowed offset that the dependency declares."}},"$$ref":"#/components/schemas/JobDependencyNegativeMinOffsetIssue"},{"description":"A job dependency forbids intermediate jobs without requiring the same resource, which cannot be enforced.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobDependencyNoIntermediateJobsWithoutSameResourceIssue"},{"description":"A job dependency requires the same resource without anchoring on the end of the preceding job.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobDependencySameResourceWithoutEndAnchorIssue"},{"description":"A job declares a duration on a resource that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"resource":{"description":"The resource that does not exist.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The duration that the job declares for that resource."}},"$$ref":"#/components/schemas/JobDurationOnResourceDoesNotExistIssue"},{"description":"A job declares a negative duration on a resource.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"resource":{"description":"The resource that the negative duration is declared for.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The negative duration that the job declares."}},"$$ref":"#/components/schemas/JobNegativeDurationOnResourceIssue"},{"description":"A job refers to a job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"jobType":{"description":"The job type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobNonExistingJobTypeIssue"},{"description":"A resource carries a job that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job on the resource that does not exist.","type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobOnResourceDoesNotExistIssue"},{"description":"A job requires a resource that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"resource":{"description":"The required resource that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobRequiredResourceDoesNotExistIssue"},{"description":"A job transition declares a negative duration. A setup cannot take less than no time: a negative one would let a job start before the job before it on the same resource ends.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The negative duration that the job transition declares."}},"$$ref":"#/components/schemas/JobTransitionNegativeDurationIssue"},{"description":"A job transition starts from a job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"fromJobType":{"description":"The source job type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobTransitionNonExistingFromJobTypeIssue"},{"description":"A job transition refers to a machine type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"machineType":{"description":"The machine type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobTransitionNonExistingMachineTypeIssue"},{"description":"A job transition leads to a job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"toJobType":{"description":"The target job type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobTransitionNonExistingToJobTypeIssue"},{"description":"A job declares neither a duration nor a duration on any resource, so it cannot be scheduled.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobWithoutDurationIssue"},{"description":"A machine is set up for an initial job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"machine":{"description":"The machine that the issue is about.","type":"string"},"initialJobType":{"description":"The initial job type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/MachineNonExistingInitialJobTypeIssue"},{"description":"A resource refers to a machine type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"},"machineType":{"description":"The machine type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/ResourceNonExistingMachineTypeIssue"},{"description":"A resource declares two unavailable time spans that overlap.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"},"timeSpan1":{"description":"The earlier of the two overlapping time spans.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false},"timeSpan2":{"description":"The later of the two overlapping time spans.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false}},"$$ref":"#/components/schemas/ResourceOverlappingUnavailableTimeSpansIssue"},{"description":"A resource transition is forbidden and rewarded at the same time.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resourceTransition":{"description":"The resource transition that the issue is about.","type":"string"},"reward":{"format":"int32","description":"The reward that the forbidden transition declares.","type":"integer"}},"$$ref":"#/components/schemas/ResourceTransitionForbiddenWithRewardIssue"},{"description":"A resource transition refers to a machine that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resourceTransition":{"description":"The resource transition that the issue is about.","type":"string"},"nonExistingMachine":{"description":"The machine that does not exist.","type":"string"}},"$$ref":"#/components/schemas/ResourceTransitionNonExistingMachineIssue"},{"description":"A resource carries a tag that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"},"tag":{"description":"The tag that does not exist.","type":"string"}},"$$ref":"#/components/schemas/TagOnResourceDoesNotExistIssue"},{"description":"A resource declares more than one availability time span for a tag, which is not supported.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"tag":{"description":"The tag that is declared more than once.","type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/TagOnResourceMultipleTimeSpansIssue"}],"$$ref":"#/components/schemas/AbstractJobScheduleIssue"}}},"$$ref":"#/components/schemas/ValidationResultAbstractJobScheduleIssue"}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"API key used with this call does not have access to the operation"},"404":{"description":"In case the given dataset does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"429":{"description":"Too many requests or other policy violations","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}},"500":{"description":"In case of processing errors","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"$$ref":"#/components/schemas/ErrorInfo"}}}}},"security":[{"auth":[]}],"__originalOperationId":"getValidationResult"}},"/v1/schedules/{id}/purge":{"delete":{"tags":["Administration"],"operationId":"deleteSchedule","description":"Delete dataset from storage and return the dataset with given identifier.","summary":"Delete dataset from storage.","parameters":[{"name":"id","in":"path","description":"Unique id of the item to be deleted.","schema":{"type":"string"},"required":true}],"security":[{"auth":[]}],"responses":{"200":{"description":"Returns scheduling with given identifier.","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"description":"The model dataset metadata.","nullable":true},"modelOutput":{"description":"The solution to the requested model input.","type":"object","properties":{"machines":{"description":"The machines with the jobs the solver placed on them, in processing order.","type":"array","items":{"description":"The machine that processes jobs.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"schedule":{"description":"Jobs assigned to this machine.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}},"idleTime":{"description":"The time in which the machine waits between its start and the end of its last job: it neither processes a job, nor changes over, nor is unavailable. Zero when the machine has no jobs.","type":"string","nullable":true},"changeovers":{"format":"int64","description":"The number of changeovers on this machine, including the one before its first job when the machine has an initial job type.","type":"integer"},"changeoverTime":{"description":"The total duration of the changeovers on this machine. Zero when it has none.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputMachine"}},"employees":{"description":"The employees with the jobs the solver placed on them, in processing order.","type":"array","items":{"description":"The employee that processes jobs.","required":["id"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"schedule":{"description":"Jobs assigned to this employee.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputEmployee"}},"unassignedJobs":{"description":"The jobs the solver could not assign to any machine or employee.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}}},"additionalProperties":false,"nullable":true},"inputMetrics":{"description":"Key metrics aggregated from the model input.","type":"object","properties":{"jobs":{"format":"number","title":"Jobs","description":"The number of jobs in the input dataset.","type":"integer","example":4064,"x-tf-priority":"1","x-tf-example":"1654"},"machines":{"format":"number","title":"Machines","description":"The number of machines in the input dataset.","type":"integer","example":100,"x-tf-priority":"2","x-tf-example":"50"},"employees":{"format":"number","title":"Employees","description":"The number of employees in the input dataset.","type":"integer","example":50,"x-tf-priority":"3","x-tf-example":"25"}},"nullable":true},"kpis":{"description":"Key metrics aggregated from the model output.","type":"object","properties":{"makespan":{"format":"duration","title":"Makespan","description":"The total duration of the schedule.","type":"string","example":"PT1H","x-tf-priority":"2","x-tf-example":"PT1H"},"unassignedJobs":{"format":"number","title":"Unassigned jobs","description":"The number of jobs that could not be assigned to a machine or employee in this schedule.","type":"integer","example":10,"x-tf-priority":"1","x-tf-example":"12"},"assignedJobs":{"format":"number","title":"Assigned jobs","description":"The number of jobs that are successfully assigned to machines or employees in this schedule.","type":"integer","example":90,"x-tf-priority":"3","x-tf-example":"88"},"activatedMachines":{"format":"number","title":"Activated machines","description":"The number of machines that have at least one job assigned.","type":"integer","example":5,"x-tf-priority":"4","x-tf-example":"5"},"activatedEmployees":{"format":"number","title":"Activated employees","description":"The number of employees that have at least one job assigned.","type":"integer","example":5,"x-tf-priority":"5","x-tf-example":"5"},"idealEndTimeDeviation":{"format":"duration","title":"Ideal end time deviation","description":"The total deviation of jobs from their ideal end times when specified.","type":"string","example":"PT2H","x-tf-priority":"6","x-tf-example":"PT2H"},"lateJobs":{"format":"number","title":"Late jobs","description":"The number of jobs that finish after their due date or after their maximum end. A job that finishes after both counts once.","type":"integer","example":3,"x-tf-priority":"7","x-tf-example":"3"},"machineUtilization":{"format":"percentage","title":"Machine utilization","description":"The percentage of available machine time that is spent processing jobs. Available time runs from the start of each machine to the end of the schedule, without its unavailable time spans. Setup time and idle time do not count as processing. Unset when no machine is available before the end of the schedule.","type":"number","example":85.5,"nullable":true,"x-tf-priority":"8","x-tf-example":"85.5%"},"employeeUtilization":{"format":"percentage","title":"Employee utilization","description":"The percentage of available employee time that is spent processing jobs. Available time runs from the start of each employee to the end of the schedule, without its unavailable time spans, such as breaks. Idle time does not count as processing. Unset when no employee is available before the end of the schedule.","type":"number","example":92.5,"nullable":true,"x-tf-priority":"9","x-tf-example":"92.5%"},"changeovers":{"format":"number","title":"Changeovers","description":"The number of changeovers on machines. A changeover is the switch between two consecutive jobs on a machine when the job type changes or a job transition adds time.","type":"integer","example":4,"x-tf-priority":"10","x-tf-example":"4"},"totalChangeoverTime":{"format":"duration","title":"Total changeover time","description":"The total duration of all changeovers on machines, from the job transitions.","type":"string","example":"PT3H","x-tf-priority":"11","x-tf-example":"PT3H"},"totalIdleTime":{"format":"duration","title":"Total idle time","description":"The total time in which machines wait between their start and the end of their last job: they neither process a job, nor change over, nor are unavailable.","type":"string","example":"PT5H","x-tf-priority":"12","x-tf-example":"PT5H"}},"nullable":true},"run":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"description":"The model run metadata. Deprecated in favor of \"metadata\"","readOnly":true,"nullable":true,"deprecated":true}},"$$ref":"#/components/schemas/ModelResponseHardMediumSoftScoreJobScheduleOutputJobScheduleInputMetricsJobScheduleOutputMetrics"}}}},"400":{"description":"In case dataset is still solving."},"401":{"description":"Missing or invalid API key."},"403":{"description":"API key used with this call does not have access to the operation."},"404":{"description":"In case the requested dataset does not exist."}},"__originalOperationId":"deleteSchedule"}}},"components":{"schemas":{"AbstractJobScheduleIssue":{"description":"Reports one problem found while validating a job schedule input.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"}},"oneOf":[{"description":"Multiple resources have the same id.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resourceId1":{"description":"The id that both resources declare.","type":"string"},"resource1Type":{"description":"The type of the resource that declared the id first.","type":"string"},"resourceId2":{"description":"The id that both resources declare, repeated for the second resource.","type":"string"},"resource2Type":{"description":"The type of the resource that repeats the id.","type":"string"}},"$$ref":"#/components/schemas/DuplicateResourceIdIssue"},{"description":"A job dependency would close a cycle in the dependency graph.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobDependencyCycleIssue"},{"description":"A job depends on a job that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobDependencyDoesNotExistIssue"},{"description":"A job dependency allows no offset at all, because its maxOffset is below its minOffset.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"The smallest allowed offset that the dependency declares."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"The largest allowed offset that the dependency declares."}},"$$ref":"#/components/schemas/JobDependencyMaxOffsetLessThanMinOffsetIssue"},{"description":"A job dependency declares a negative maxOffset.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"The negative largest allowed offset that the dependency declares."}},"$$ref":"#/components/schemas/JobDependencyNegativeMaxOffsetIssue"},{"description":"A job dependency declares a negative minOffset.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"The negative smallest allowed offset that the dependency declares."}},"$$ref":"#/components/schemas/JobDependencyNegativeMinOffsetIssue"},{"description":"A job dependency forbids intermediate jobs without requiring the same resource, which cannot be enforced.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobDependencyNoIntermediateJobsWithoutSameResourceIssue"},{"description":"A job dependency requires the same resource without anchoring on the end of the preceding job.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobDependencySameResourceWithoutEndAnchorIssue"},{"description":"A job declares a duration on a resource that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"resource":{"description":"The resource that does not exist.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The duration that the job declares for that resource."}},"$$ref":"#/components/schemas/JobDurationOnResourceDoesNotExistIssue"},{"description":"A job declares a negative duration on a resource.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"resource":{"description":"The resource that the negative duration is declared for.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The negative duration that the job declares."}},"$$ref":"#/components/schemas/JobNegativeDurationOnResourceIssue"},{"description":"A job refers to a job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"jobType":{"description":"The job type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobNonExistingJobTypeIssue"},{"description":"A resource carries a job that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job on the resource that does not exist.","type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobOnResourceDoesNotExistIssue"},{"description":"A job requires a resource that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"resource":{"description":"The required resource that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobRequiredResourceDoesNotExistIssue"},{"description":"A job transition declares a negative duration. A setup cannot take less than no time: a negative one would let a job start before the job before it on the same resource ends.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The negative duration that the job transition declares."}},"$$ref":"#/components/schemas/JobTransitionNegativeDurationIssue"},{"description":"A job transition starts from a job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"fromJobType":{"description":"The source job type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobTransitionNonExistingFromJobTypeIssue"},{"description":"A job transition refers to a machine type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"machineType":{"description":"The machine type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobTransitionNonExistingMachineTypeIssue"},{"description":"A job transition leads to a job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"toJobType":{"description":"The target job type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobTransitionNonExistingToJobTypeIssue"},{"description":"A job declares neither a duration nor a duration on any resource, so it cannot be scheduled.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobWithoutDurationIssue"},{"description":"A machine is set up for an initial job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"machine":{"description":"The machine that the issue is about.","type":"string"},"initialJobType":{"description":"The initial job type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/MachineNonExistingInitialJobTypeIssue"},{"description":"A resource refers to a machine type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"},"machineType":{"description":"The machine type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/ResourceNonExistingMachineTypeIssue"},{"description":"A resource declares two unavailable time spans that overlap.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"},"timeSpan1":{"description":"The earlier of the two overlapping time spans.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false},"timeSpan2":{"description":"The later of the two overlapping time spans.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false}},"$$ref":"#/components/schemas/ResourceOverlappingUnavailableTimeSpansIssue"},{"description":"A resource transition is forbidden and rewarded at the same time.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resourceTransition":{"description":"The resource transition that the issue is about.","type":"string"},"reward":{"format":"int32","description":"The reward that the forbidden transition declares.","type":"integer"}},"$$ref":"#/components/schemas/ResourceTransitionForbiddenWithRewardIssue"},{"description":"A resource transition refers to a machine that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resourceTransition":{"description":"The resource transition that the issue is about.","type":"string"},"nonExistingMachine":{"description":"The machine that does not exist.","type":"string"}},"$$ref":"#/components/schemas/ResourceTransitionNonExistingMachineIssue"},{"description":"A resource carries a tag that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"},"tag":{"description":"The tag that does not exist.","type":"string"}},"$$ref":"#/components/schemas/TagOnResourceDoesNotExistIssue"},{"description":"A resource declares more than one availability time span for a tag, which is not supported.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"tag":{"description":"The tag that is declared more than once.","type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/TagOnResourceMultipleTimeSpansIssue"}]},"Anchor":{"description":"The point on the preceding job that the offsets of a job dependency are measured from.","enum":["END","START"],"type":"string"},"DatasetSelector":{"enum":["UNSOLVED","SOLVED"],"type":"string"},"DemoDataConfigEntry":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"DemoMetaData":{"type":"object","properties":{"id":{"type":"string"},"shortDescription":{"type":"string"},"longDescription":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"$$ref":"#/components/schemas/DemoDataConfigEntry"}}}},"DependencyJob":{"description":"A job that must be finished, or started, before the job that declares this dependency.","required":["id"],"type":"object","properties":{"id":{"description":"Unique identifier of the job.","type":"string"},"anchor":{"description":"The point on the preceding job that the offsets are measured from.","enum":["END","START"],"type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"Smallest allowed offset between the anchor of the preceding job and the start of this job."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"Largest allowed offset between the anchor of the preceding job and the start of this job. Unset means unbounded."},"requiresSameResource":{"description":"The dependent job must run on the same resource as the preceding job.","type":"boolean"},"noIntermediateJobs":{"description":"No other job may run between the preceding job and the dependent job.","type":"boolean"}}},"DuplicateResourceIdIssue":{"description":"Multiple resources have the same id.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resourceId1":{"description":"The id that both resources declare.","type":"string"},"resource1Type":{"description":"The type of the resource that declared the id first.","type":"string"},"resourceId2":{"description":"The id that both resources declare, repeated for the second resource.","type":"string"},"resource2Type":{"description":"The type of the resource that repeats the id.","type":"string"}}},"Duration":{"format":"duration","type":"string","example":"P1D"},"ErrorInfo":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}}},"InputEmployee":{"description":"The employee that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"jobs":{"description":"Jobs assigned to this employee.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this employee will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this employee.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the employee is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this employee with a processingStart before this point in time will get pinned."}},"additionalProperties":false},"InputJob":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"duration":{"description":"Duration of the job. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"string","nullable":true},"durationOnResources":{"description":"Duration of the job on specific resources. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"array","items":{"description":"Duration of a job on a specific machine or employee.","required":["resource","duration"],"type":"object","properties":{"resource":{"description":"Identifier of the machine.","type":"string"},"duration":{"description":"Duration of the job on the machine or employee.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobDurationOnResource"},"nullable":true},"requiredTags":{"description":"Required tags. A job can only be assigned to a resource (machine or employee) with all of these tags.","uniqueItems":true,"type":"array","items":{"type":"string"}},"requiredResources":{"description":"Required resources. A job can only be assigned to one of these resources.","uniqueItems":true,"type":"array","items":{"type":"string"}},"dependencies":{"description":"Dependency jobs. This job can only start after all dependency jobs have finished.","uniqueItems":true,"type":"array","items":{"description":"A job that must be finished, or started, before the job that declares this dependency.","required":["id"],"type":"object","properties":{"id":{"description":"Unique identifier of the job.","type":"string"},"anchor":{"description":"The point on the preceding job that the offsets are measured from.","enum":["END","START"],"type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"Smallest allowed offset between the anchor of the preceding job and the start of this job."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"Largest allowed offset between the anchor of the preceding job and the start of this job. Unset means unbounded."},"requiresSameResource":{"description":"The dependent job must run on the same resource as the preceding job.","type":"boolean"},"noIntermediateJobs":{"description":"No other job may run between the preceding job and the dependent job.","type":"boolean"}},"$$ref":"#/components/schemas/DependencyJob"}},"minStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Minimum start time of the job. The job will never be scheduled before this point in time.","nullable":true},"idealEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Ideal end time of the job. The job will ideally finish close to this point in time.","nullable":true},"maxEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Maximum end time of the job. The job will never finish after this point in time.","nullable":true},"dueDate":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Due date of the job. A job that finishes after its due date counts as late. Unlike 'maxEnd', a due date is a goal: a job that cannot make it is still scheduled.","nullable":true},"priority":{"format":"int32","description":"The job's priority. Jobs with high priority ideally finish before low-priority jobs.","minimum":1,"type":"integer"},"jobType":{"description":"The type of the job.","type":"string","nullable":true},"noInterruptions":{"description":"Whether the job must run without interruption. By default a job that overlaps an unavailable time span of its resource pauses and continues afterwards, which makes the job take longer. A job with 'noInterruptions' instead waits until its resource is available for the whole duration of the job.","type":"boolean"}},"additionalProperties":false},"InputJobOnResource":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false},"InputMachine":{"description":"The machine that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"jobs":{"description":"Jobs assigned to this machine.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this machine will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this machine.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the machine is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this machine with a processingStart before this point in time will get pinned."},"machineType":{"description":"The type of the machine.","type":"string","nullable":true},"initialJobType":{"description":"The job type that the machine is set up for at its start. The first job on the machine changes over from it, so a job transition from this job type to the job type of the first job applies. Without it, the first job needs no changeover.","type":"string","nullable":true}},"additionalProperties":false},"IssueCode":{"type":"object","properties":{"value":{"type":"string"}}},"IssueMessage":{"type":"object","properties":{"type":{"description":"The type of the issue type detail.","type":"string","readOnly":true},"message":{"type":"string"}}},"IssueMetadata":{"type":"object","properties":{"type":{"description":"The type of the issue type detail.","type":"string","readOnly":true}},"oneOf":[{"type":"object","properties":{"type":{"description":"The type of the issue type detail.","type":"string","readOnly":true},"message":{"type":"string"}},"$$ref":"#/components/schemas/IssueMessage"}]},"IssueSeverity":{"enum":["ERROR","WARNING"],"type":"string"},"IssueType":{"required":["code","severity"],"type":"object","properties":{"code":{"type":"object","properties":{"value":{"type":"string"}},"description":"Unique case-sensitive code of the issue type."},"severity":{"enum":["ERROR","WARNING"],"type":"string","description":"Issue severity"},"metadata":{"type":"array","items":{"type":"object","properties":{"type":{"description":"The type of the issue type detail.","type":"string","readOnly":true}},"oneOf":[{"type":"object","properties":{"type":{"description":"The type of the issue type detail.","type":"string","readOnly":true},"message":{"type":"string"}},"$$ref":"#/components/schemas/IssueMessage"}],"$$ref":"#/components/schemas/IssueMetadata"}}}},"JobDependencyCycleIssue":{"description":"A job dependency would close a cycle in the dependency graph.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"}}},"JobDependencyDoesNotExistIssue":{"description":"A job depends on a job that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency that does not exist.","type":"string"}}},"JobDependencyMaxOffsetLessThanMinOffsetIssue":{"description":"A job dependency allows no offset at all, because its maxOffset is below its minOffset.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"The smallest allowed offset that the dependency declares."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"The largest allowed offset that the dependency declares."}}},"JobDependencyNegativeMaxOffsetIssue":{"description":"A job dependency declares a negative maxOffset.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"The negative largest allowed offset that the dependency declares."}}},"JobDependencyNegativeMinOffsetIssue":{"description":"A job dependency declares a negative minOffset.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"The negative smallest allowed offset that the dependency declares."}}},"JobDependencyNoIntermediateJobsWithoutSameResourceIssue":{"description":"A job dependency forbids intermediate jobs without requiring the same resource, which cannot be enforced.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"}}},"JobDependencyNotAssignedViolationJustification":{"description":"Justification for a job dependency not being assigned violation.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that starts too early.","type":"string"},"dependencyJobId":{"description":"The dependency job that finishes too late.","type":"string"}}},"JobDependencyRequiresSameResourceViolationJustification":{"description":"Justification for a job dependency not being assigned to the same resource violation.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that is not assigned to the same resource as the dependency job.","type":"string"},"dependencyJobId":{"description":"The dependency job.","type":"string"}}},"JobDependencySameResourceWithoutEndAnchorIssue":{"description":"A job dependency requires the same resource without anchoring on the end of the preceding job.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"}}},"JobDependencyTimingViolationJustification":{"description":"Justification for a job dependency violation.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that is assigned.","type":"string"},"dependencyJobId":{"description":"The dependency job that is not assigned.","type":"string"},"jobStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start time of the job."},"dependencyEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end time of the dependency job."}}},"JobDurationOnResource":{"description":"Duration of a job on a specific machine or employee.","required":["resource","duration"],"type":"object","properties":{"resource":{"description":"Identifier of the machine.","type":"string"},"duration":{"description":"Duration of the job on the machine or employee.","type":"string"}},"additionalProperties":false},"JobDurationOnResourceDoesNotExistIssue":{"description":"A job declares a duration on a resource that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"resource":{"description":"The resource that does not exist.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The duration that the job declares for that resource."}}},"JobFinishedAfterMaximumEndJustification":{"description":"Justification for a job that finishes after its maximum end.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that finishes too late.","type":"string"},"maxEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The maximum end that the job was allowed to finish at."},"processingEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end that the solver scheduled the job to finish at."}}},"JobNegativeDurationOnResourceIssue":{"description":"A job declares a negative duration on a resource.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"resource":{"description":"The resource that the negative duration is declared for.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The negative duration that the job declares."}}},"JobNonExistingJobTypeIssue":{"description":"A job refers to a job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"jobType":{"description":"The job type that does not exist.","type":"string"}}},"JobOnResourceDoesNotExistIssue":{"description":"A resource carries a job that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job on the resource that does not exist.","type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"}}},"JobRequiredResourceDoesNotExistIssue":{"description":"A job requires a resource that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"resource":{"description":"The required resource that does not exist.","type":"string"}}},"JobScheduleConfigOverrides":{"description":"Definition of soft constraint weights. Every constraint has a default weight of 1, meaning that all constraints are equally important, except the minimize idle time constraint, which has a default weight of 0 and is off unless its weight is set. Use this to express preference of some constraints over others. For example, in order to express that the minimize makespan constraint is more important than the rest of the constraints, set the value of the minimizeMakespanWeight attribute to 10. In order to turn off a constraint, set the value of the corresponding attribute to 0. A weight left unset is not overridden here, so the value from the configuration profile (or the constraint's default) applies.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false},"JobScheduleConstraintJustification":{"description":"Explains why a constraint matched, so that a score can be traced back to the input.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"}},"oneOf":[{"description":"Justification for a job dependency not being assigned violation.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that starts too early.","type":"string"},"dependencyJobId":{"description":"The dependency job that finishes too late.","type":"string"}},"$$ref":"#/components/schemas/JobDependencyNotAssignedViolationJustification"},{"description":"Justification for a job dependency not being assigned to the same resource violation.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that is not assigned to the same resource as the dependency job.","type":"string"},"dependencyJobId":{"description":"The dependency job.","type":"string"}},"$$ref":"#/components/schemas/JobDependencyRequiresSameResourceViolationJustification"},{"description":"Justification for a job dependency violation.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that is assigned.","type":"string"},"dependencyJobId":{"description":"The dependency job that is not assigned.","type":"string"},"jobStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start time of the job."},"dependencyEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end time of the dependency job."}},"$$ref":"#/components/schemas/JobDependencyTimingViolationJustification"},{"description":"Justification for a job that finishes after its maximum end.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that finishes too late.","type":"string"},"maxEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The maximum end that the job was allowed to finish at."},"processingEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end that the solver scheduled the job to finish at."}},"$$ref":"#/components/schemas/JobFinishedAfterMaximumEndJustification"},{"description":"Justification for a job that starts before its minimum start.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that starts too early.","type":"string"},"minStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The minimum start that the job was allowed to start at."},"processingStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start that the solver scheduled the job to start at."}},"$$ref":"#/components/schemas/JobStartedBeforeMinimumStartJustification"},{"description":"Justification for a changeover that takes time between two consecutive jobs on a machine, or before its first job.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"machineId":{"description":"The machine that changes over.","type":"string"},"previousJobId":{"description":"The job before the changeover. Unset for the first job on the machine, which changes over from the initial job type of the machine.","type":"string","nullable":true},"jobId":{"description":"The job after the changeover.","type":"string"},"changeoverDuration":{"format":"duration","type":"string","example":"P1D","description":"The duration of the changeover, from the job transitions."}},"$$ref":"#/components/schemas/MinimizeChangeoverTimeJustification"},{"description":"Justification for a job that finishes away from its ideal end.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that finishes away from its ideal end.","type":"string"},"idealEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end that the job would ideally finish at."},"processingEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end that the solver scheduled the job to finish at."}},"$$ref":"#/components/schemas/MinimizeIdealEndDifferenceJustification"},{"description":"Justification for a machine that is idle before a job.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"machineId":{"description":"The machine that is idle.","type":"string"},"jobId":{"description":"The job that the machine waits for.","type":"string"},"idleTime":{"format":"duration","type":"string","example":"P1D","description":"The idle time before the job, without changeovers and unavailable time spans."}},"$$ref":"#/components/schemas/MinimizeIdleTimeJustification"},{"description":"Justification for the time that a resource spends on the jobs assigned to it.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"resourceId":{"description":"The machine or employee that the jobs are assigned to.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The time from the start of the resource to the end of its last job."}},"$$ref":"#/components/schemas/MinimizeMakespanJustification"},{"description":"Justification for a job that finishes after its due date.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that finishes after its due date.","type":"string"},"dueDate":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The due date of the job."},"processingEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end that the solver scheduled the job to finish at."}},"$$ref":"#/components/schemas/MinimizeLatenessJustification"},{"description":"Justification for a changeover between two consecutive jobs on a machine, or before its first job.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"machineId":{"description":"The machine that changes over.","type":"string"},"previousJobId":{"description":"The job before the changeover. Unset for the first job on the machine, which changes over from the initial job type of the machine.","type":"string","nullable":true},"jobId":{"description":"The job after the changeover.","type":"string"},"previousJobType":{"description":"The job type before the changeover: of the previous job, or the initial job type of the machine.","type":"string"},"jobType":{"description":"The job type of the job after the changeover.","type":"string"}},"$$ref":"#/components/schemas/MinimizeNumberOfChangeoversJustification"},{"description":"Justification for a job that is not assigned to any machine or employee.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that is left unassigned.","type":"string"}},"$$ref":"#/components/schemas/MinimizeNumberOfUnassignedJobs"},{"description":"Justification for a job that is assigned to a resource it does not accept.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"resourceId":{"description":"The machine or employee that the job is assigned to.","type":"string"},"jobId":{"description":"The job whose required resources are not met.","type":"string"},"requiredResourceIds":{"description":"The machines or employees that the job accepts.","uniqueItems":true,"type":"array","items":{"type":"string"}}},"$$ref":"#/components/schemas/RequiredResourcesDoNotMatchJustification"},{"description":"Justification for a job that is assigned to a resource without all of its required tags.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"resourceId":{"description":"The machine or employee that the job is assigned to.","type":"string"},"jobId":{"description":"The job whose required tags are not met.","type":"string"},"requiredTags":{"description":"The tags that the job requires.","type":"array","items":{"type":"string"}},"tags":{"description":"The tags that the assigned machine or employee carries.","type":"array","items":{"type":"string"}}},"$$ref":"#/components/schemas/RequiredTagsDoNotMatchJustification"},{"description":"Justification for a pair of dependent jobs on a forbidden transition between two resources.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"fromResourceId":{"description":"The machine that the preceding job is assigned to.","type":"string"},"toResourceId":{"description":"The machine that the dependent job is assigned to.","type":"string"}},"$$ref":"#/components/schemas/ResourceTransitionForbiddenJustification"},{"description":"Justification for a pair of dependent jobs on a rewarded transition between two resources.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"fromResourceId":{"description":"The machine that the preceding job is assigned to.","type":"string"},"toResourceId":{"description":"The machine that the dependent job is assigned to.","type":"string"},"reward":{"format":"int32","description":"The reward that this transition earns.","type":"integer"}},"$$ref":"#/components/schemas/RewardResourceTransitionJustification"}]},"JobScheduleInput":{"description":"Definition of the schedule.","type":"object","properties":{"machines":{"description":"The machines that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The machine that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"jobs":{"description":"Jobs assigned to this machine.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this machine will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this machine.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the machine is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this machine with a processingStart before this point in time will get pinned."},"machineType":{"description":"The type of the machine.","type":"string","nullable":true},"initialJobType":{"description":"The job type that the machine is set up for at its start. The first job on the machine changes over from it, so a job transition from this job type to the job type of the first job applies. Without it, the first job needs no changeover.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputMachine"},"x-uniqueItemsProperty":"id"},"machineTags":{"description":"The tags that machines can carry.","uniqueItems":true,"type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"},"x-uniqueItemsProperty":"id"},"machineTypes":{"description":"The machine types that machines and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Resource type expressing the type of a resource","type":"object","properties":{"id":{"description":"The unique identifier of the machine type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/MachineType"},"x-uniqueItemsProperty":"id"},"employees":{"description":"The employees that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The employee that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"jobs":{"description":"Jobs assigned to this employee.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this employee will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this employee.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the employee is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this employee with a processingStart before this point in time will get pinned."}},"additionalProperties":false,"$$ref":"#/components/schemas/InputEmployee"},"x-uniqueItemsProperty":"id"},"employeeTags":{"description":"The tags that employees can carry.","type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"}},"jobs":{"description":"The jobs to schedule.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"duration":{"description":"Duration of the job. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"string","nullable":true},"durationOnResources":{"description":"Duration of the job on specific resources. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"array","items":{"description":"Duration of a job on a specific machine or employee.","required":["resource","duration"],"type":"object","properties":{"resource":{"description":"Identifier of the machine.","type":"string"},"duration":{"description":"Duration of the job on the machine or employee.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobDurationOnResource"},"nullable":true},"requiredTags":{"description":"Required tags. A job can only be assigned to a resource (machine or employee) with all of these tags.","uniqueItems":true,"type":"array","items":{"type":"string"}},"requiredResources":{"description":"Required resources. A job can only be assigned to one of these resources.","uniqueItems":true,"type":"array","items":{"type":"string"}},"dependencies":{"description":"Dependency jobs. This job can only start after all dependency jobs have finished.","uniqueItems":true,"type":"array","items":{"description":"A job that must be finished, or started, before the job that declares this dependency.","required":["id"],"type":"object","properties":{"id":{"description":"Unique identifier of the job.","type":"string"},"anchor":{"description":"The point on the preceding job that the offsets are measured from.","enum":["END","START"],"type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"Smallest allowed offset between the anchor of the preceding job and the start of this job."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"Largest allowed offset between the anchor of the preceding job and the start of this job. Unset means unbounded."},"requiresSameResource":{"description":"The dependent job must run on the same resource as the preceding job.","type":"boolean"},"noIntermediateJobs":{"description":"No other job may run between the preceding job and the dependent job.","type":"boolean"}},"$$ref":"#/components/schemas/DependencyJob"}},"minStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Minimum start time of the job. The job will never be scheduled before this point in time.","nullable":true},"idealEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Ideal end time of the job. The job will ideally finish close to this point in time.","nullable":true},"maxEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Maximum end time of the job. The job will never finish after this point in time.","nullable":true},"dueDate":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Due date of the job. A job that finishes after its due date counts as late. Unlike 'maxEnd', a due date is a goal: a job that cannot make it is still scheduled.","nullable":true},"priority":{"format":"int32","description":"The job's priority. Jobs with high priority ideally finish before low-priority jobs.","minimum":1,"type":"integer"},"jobType":{"description":"The type of the job.","type":"string","nullable":true},"noInterruptions":{"description":"Whether the job must run without interruption. By default a job that overlaps an unavailable time span of its resource pauses and continues afterwards, which makes the job take longer. A job with 'noInterruptions' instead waits until its resource is available for the whole duration of the job.","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJob"},"x-uniqueItemsProperty":"id"},"jobTypes":{"description":"The job types that jobs and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Job type expressing the type of a job","type":"object","properties":{"id":{"description":"The unique identifier of the job type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobType"},"x-uniqueItemsProperty":"id"},"jobTransitions":{"description":"The transition times between jobs of a given type on a machine of a given type.","type":"array","items":{"description":"JobTransition between jobs","required":["machineType","fromJobType","toJobType","duration"],"type":"object","properties":{"machineType":{"description":"Type associated with the machine","type":"string"},"fromJobType":{"description":"Type associated with the source job","type":"string"},"toJobType":{"description":"Type associated with the target job","type":"string"},"duration":{"description":"Duration of the transition","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobTransition"}},"resourceTransitions":{"description":"The rewarded and the forbidden transitions between specific resources.","type":"array","items":{"description":"A transition between dependent jobs from/to specific resources (machines/employees) will be rewarded.","required":["fromResourceId","toResourceId"],"type":"object","properties":{"fromResourceId":{"description":"ID of the source resource","type":"string"},"toResourceId":{"description":"ID of the target resource","type":"string"},"reward":{"format":"int32","description":"Reward score for this transition (higher is better)","type":"integer"},"forbidden":{"description":"The transition is forbidden","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/ResourceTransition"}}},"additionalProperties":false},"JobScheduleInputMetrics":{"description":"The size of the input dataset.","type":"object","properties":{"jobs":{"format":"number","title":"Jobs","description":"The number of jobs in the input dataset.","type":"integer","example":4064,"x-tf-priority":"1","x-tf-example":"1654"},"machines":{"format":"number","title":"Machines","description":"The number of machines in the input dataset.","type":"integer","example":100,"x-tf-priority":"2","x-tf-example":"50"},"employees":{"format":"number","title":"Employees","description":"The number of employees in the input dataset.","type":"integer","example":50,"x-tf-priority":"3","x-tf-example":"25"}}},"JobScheduleOutput":{"description":"Definition of the schedule.","type":"object","properties":{"machines":{"description":"The machines with the jobs the solver placed on them, in processing order.","type":"array","items":{"description":"The machine that processes jobs.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"schedule":{"description":"Jobs assigned to this machine.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}},"idleTime":{"description":"The time in which the machine waits between its start and the end of its last job: it neither processes a job, nor changes over, nor is unavailable. Zero when the machine has no jobs.","type":"string","nullable":true},"changeovers":{"format":"int64","description":"The number of changeovers on this machine, including the one before its first job when the machine has an initial job type.","type":"integer"},"changeoverTime":{"description":"The total duration of the changeovers on this machine. Zero when it has none.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputMachine"}},"employees":{"description":"The employees with the jobs the solver placed on them, in processing order.","type":"array","items":{"description":"The employee that processes jobs.","required":["id"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"schedule":{"description":"Jobs assigned to this employee.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputEmployee"}},"unassignedJobs":{"description":"The jobs the solver could not assign to any machine or employee.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}}},"additionalProperties":false},"JobScheduleOutputMetrics":{"description":"The characteristics of the schedule that the solver produced.","type":"object","properties":{"makespan":{"format":"duration","title":"Makespan","description":"The total duration of the schedule.","type":"string","example":"PT1H","x-tf-priority":"2","x-tf-example":"PT1H"},"unassignedJobs":{"format":"number","title":"Unassigned jobs","description":"The number of jobs that could not be assigned to a machine or employee in this schedule.","type":"integer","example":10,"x-tf-priority":"1","x-tf-example":"12"},"assignedJobs":{"format":"number","title":"Assigned jobs","description":"The number of jobs that are successfully assigned to machines or employees in this schedule.","type":"integer","example":90,"x-tf-priority":"3","x-tf-example":"88"},"activatedMachines":{"format":"number","title":"Activated machines","description":"The number of machines that have at least one job assigned.","type":"integer","example":5,"x-tf-priority":"4","x-tf-example":"5"},"activatedEmployees":{"format":"number","title":"Activated employees","description":"The number of employees that have at least one job assigned.","type":"integer","example":5,"x-tf-priority":"5","x-tf-example":"5"},"idealEndTimeDeviation":{"format":"duration","title":"Ideal end time deviation","description":"The total deviation of jobs from their ideal end times when specified.","type":"string","example":"PT2H","x-tf-priority":"6","x-tf-example":"PT2H"},"lateJobs":{"format":"number","title":"Late jobs","description":"The number of jobs that finish after their due date or after their maximum end. A job that finishes after both counts once.","type":"integer","example":3,"x-tf-priority":"7","x-tf-example":"3"},"machineUtilization":{"format":"percentage","title":"Machine utilization","description":"The percentage of available machine time that is spent processing jobs. Available time runs from the start of each machine to the end of the schedule, without its unavailable time spans. Setup time and idle time do not count as processing. Unset when no machine is available before the end of the schedule.","type":"number","example":85.5,"nullable":true,"x-tf-priority":"8","x-tf-example":"85.5%"},"employeeUtilization":{"format":"percentage","title":"Employee utilization","description":"The percentage of available employee time that is spent processing jobs. Available time runs from the start of each employee to the end of the schedule, without its unavailable time spans, such as breaks. Idle time does not count as processing. Unset when no employee is available before the end of the schedule.","type":"number","example":92.5,"nullable":true,"x-tf-priority":"9","x-tf-example":"92.5%"},"changeovers":{"format":"number","title":"Changeovers","description":"The number of changeovers on machines. A changeover is the switch between two consecutive jobs on a machine when the job type changes or a job transition adds time.","type":"integer","example":4,"x-tf-priority":"10","x-tf-example":"4"},"totalChangeoverTime":{"format":"duration","title":"Total changeover time","description":"The total duration of all changeovers on machines, from the job transitions.","type":"string","example":"PT3H","x-tf-priority":"11","x-tf-example":"PT3H"},"totalIdleTime":{"format":"duration","title":"Total idle time","description":"The total time in which machines wait between their start and the end of their last job: they neither process a job, nor change over, nor are unavailable.","type":"string","example":"PT5H","x-tf-priority":"12","x-tf-example":"PT5H"}}},"JobStartedBeforeMinimumStartJustification":{"description":"Justification for a job that starts before its minimum start.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that starts too early.","type":"string"},"minStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The minimum start that the job was allowed to start at."},"processingStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start that the solver scheduled the job to start at."}}},"JobTransition":{"description":"JobTransition between jobs","required":["machineType","fromJobType","toJobType","duration"],"type":"object","properties":{"machineType":{"description":"Type associated with the machine","type":"string"},"fromJobType":{"description":"Type associated with the source job","type":"string"},"toJobType":{"description":"Type associated with the target job","type":"string"},"duration":{"description":"Duration of the transition","type":"string"}},"additionalProperties":false},"JobTransitionNegativeDurationIssue":{"description":"A job transition declares a negative duration. A setup cannot take less than no time: a negative one would let a job start before the job before it on the same resource ends.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The negative duration that the job transition declares."}}},"JobTransitionNonExistingFromJobTypeIssue":{"description":"A job transition starts from a job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"fromJobType":{"description":"The source job type that does not exist.","type":"string"}}},"JobTransitionNonExistingMachineTypeIssue":{"description":"A job transition refers to a machine type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"machineType":{"description":"The machine type that does not exist.","type":"string"}}},"JobTransitionNonExistingToJobTypeIssue":{"description":"A job transition leads to a job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"toJobType":{"description":"The target job type that does not exist.","type":"string"}}},"JobType":{"description":"Job type expressing the type of a job","type":"object","properties":{"id":{"description":"The unique identifier of the job type.","type":"string"}},"additionalProperties":false},"JobWithoutDurationIssue":{"description":"A job declares neither a duration nor a duration on any resource, so it cannot be scheduled.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"}}},"LegacyValidationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false},"LogInfo":{"type":"object","properties":{"details":{"type":"string"}}},"MachineNonExistingInitialJobTypeIssue":{"description":"A machine is set up for an initial job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"machine":{"description":"The machine that the issue is about.","type":"string"},"initialJobType":{"description":"The initial job type that does not exist.","type":"string"}}},"MachineType":{"description":"Resource type expressing the type of a resource","type":"object","properties":{"id":{"description":"The unique identifier of the machine type.","type":"string"}},"additionalProperties":false},"MapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}}},"Metadata":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}}},"MetadataHardMediumSoftScore":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}}},"MinimizeChangeoverTimeJustification":{"description":"Justification for a changeover that takes time between two consecutive jobs on a machine, or before its first job.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"machineId":{"description":"The machine that changes over.","type":"string"},"previousJobId":{"description":"The job before the changeover. Unset for the first job on the machine, which changes over from the initial job type of the machine.","type":"string","nullable":true},"jobId":{"description":"The job after the changeover.","type":"string"},"changeoverDuration":{"format":"duration","type":"string","example":"P1D","description":"The duration of the changeover, from the job transitions."}}},"MinimizeIdealEndDifferenceJustification":{"description":"Justification for a job that finishes away from its ideal end.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that finishes away from its ideal end.","type":"string"},"idealEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end that the job would ideally finish at."},"processingEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end that the solver scheduled the job to finish at."}}},"MinimizeIdleTimeJustification":{"description":"Justification for a machine that is idle before a job.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"machineId":{"description":"The machine that is idle.","type":"string"},"jobId":{"description":"The job that the machine waits for.","type":"string"},"idleTime":{"format":"duration","type":"string","example":"P1D","description":"The idle time before the job, without changeovers and unavailable time spans."}}},"MinimizeLatenessJustification":{"description":"Justification for a job that finishes after its due date.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that finishes after its due date.","type":"string"},"dueDate":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The due date of the job."},"processingEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end that the solver scheduled the job to finish at."}}},"MinimizeMakespanJustification":{"description":"Justification for the time that a resource spends on the jobs assigned to it.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"resourceId":{"description":"The machine or employee that the jobs are assigned to.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The time from the start of the resource to the end of its last job."}}},"MinimizeNumberOfChangeoversJustification":{"description":"Justification for a changeover between two consecutive jobs on a machine, or before its first job.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"machineId":{"description":"The machine that changes over.","type":"string"},"previousJobId":{"description":"The job before the changeover. Unset for the first job on the machine, which changes over from the initial job type of the machine.","type":"string","nullable":true},"jobId":{"description":"The job after the changeover.","type":"string"},"previousJobType":{"description":"The job type before the changeover: of the previous job, or the initial job type of the machine.","type":"string"},"jobType":{"description":"The job type of the job after the changeover.","type":"string"}}},"MinimizeNumberOfUnassignedJobs":{"description":"Justification for a job that is not assigned to any machine or employee.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"jobId":{"description":"The job that is left unassigned.","type":"string"}}},"ModelConfig":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","nullable":true}},"additionalProperties":false},"ModelConfigJobScheduleConfigOverrides":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false},"ModelConfigModelConfigOverrides":{"type":"object","properties":{"overrides":{"type":"object","description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","nullable":true}},"additionalProperties":false},"ModelConfigObject":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","nullable":true}},"additionalProperties":false},"ModelConfigOverrides":{"type":"object"},"ModelConfiguration":{"type":"object","properties":{"run":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}},"description":"The run configuration.","nullable":true},"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","nullable":true}},"additionalProperties":false,"description":"The model configuration. Impacts the quality of solution.","nullable":true},"resourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"readOnly":true,"nullable":true},"mapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}},"readOnly":true,"nullable":true}},"additionalProperties":false},"ModelConfiguration1":{"type":"object","properties":{"run":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}},"description":"The run configuration.","nullable":true},"model":{"type":"object","properties":{"overrides":{"type":"object","description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","nullable":true}},"additionalProperties":false,"description":"The model configuration. Impacts the quality of solution.","nullable":true},"resourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"readOnly":true,"nullable":true},"mapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}},"readOnly":true,"nullable":true}},"additionalProperties":false},"ModelConfiguration2":{"type":"object","properties":{"run":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}},"description":"The run configuration.","nullable":true},"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"The model configuration. Impacts the quality of solution.","nullable":true},"resourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"readOnly":true,"nullable":true},"mapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}},"readOnly":true,"nullable":true}},"additionalProperties":false},"ModelConstraintJustification":{"type":"object","properties":{"description":{"type":"string"}}},"ModelInput":{"type":"object"},"ModelInputPatch":{"required":["op","path"],"type":"object","properties":{"op":{"enum":["add","remove","replace"],"type":"string","description":"Operation to be applied"},"path":{"description":"Path within the dataset structure to be modified. Can use field expression with format [fieldName=value] or index to point to selected objects","type":"string","example":"/employees/[id=Employee123]"},"value":{"description":"Value (object, array or simple value) to be used for add or replace operations. It should not be given for remove operation","additionalProperties":true,"anyOf":[{},{"type":"array","items":{}}]}}},"ModelInputPatchOp":{"enum":["add","remove","replace"],"type":"string"},"ModelInputPatchRequestJobScheduleConfigOverrides":{"required":["patch"],"type":"object","properties":{"config":{"type":"object","properties":{"run":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}},"description":"The run configuration.","nullable":true},"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"The model configuration. Impacts the quality of solution.","nullable":true},"resourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"readOnly":true,"nullable":true},"mapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}},"readOnly":true,"nullable":true}},"additionalProperties":false,"description":"Optional configuration to be applied when solving the patched dataset."},"patch":{"description":"List of patches to be applied to the original dataset.","type":"array","items":{"required":["op","path"],"type":"object","properties":{"op":{"enum":["add","remove","replace"],"type":"string","description":"Operation to be applied"},"path":{"description":"Path within the dataset structure to be modified. Can use field expression with format [fieldName=value] or index to point to selected objects","type":"string","example":"/employees/[id=Employee123]"},"value":{"description":"Value (object, array or simple value) to be used for add or replace operations. It should not be given for remove operation","additionalProperties":true,"anyOf":[{},{"type":"array","items":{}}]}},"$$ref":"#/components/schemas/ModelInputPatch"}}}},"ModelRequest":{"required":["modelInput"],"type":"object","properties":{"config":{"type":"object","properties":{"run":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}},"description":"The run configuration.","nullable":true},"model":{"type":"object","properties":{"overrides":{"type":"object","description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","nullable":true}},"additionalProperties":false,"description":"The model configuration. Impacts the quality of solution.","nullable":true},"resourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"readOnly":true,"nullable":true},"mapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}},"readOnly":true,"nullable":true}},"additionalProperties":false,"description":"The configuration of the model request. If not provided, defaults of the model are used.","nullable":true},"modelInput":{"type":"object","description":"The model input to solve."}},"additionalProperties":false},"ModelRequestJobScheduleInputJobScheduleConfigOverrides":{"required":["modelInput"],"type":"object","properties":{"config":{"type":"object","properties":{"run":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}},"description":"The run configuration.","nullable":true},"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"The model configuration. Impacts the quality of solution.","nullable":true},"resourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"readOnly":true,"nullable":true},"mapsConfiguration":{"type":"object","properties":{"provider":{"type":"string"},"location":{"type":"string"},"maxDistanceFromRoad":{"format":"double","type":"number"},"transportType":{"type":"string"},"useTraffic":{"type":"boolean"}},"readOnly":true,"nullable":true}},"additionalProperties":false,"description":"The configuration of the model request. If not provided, defaults of the model are used.","nullable":true},"modelInput":{"description":"The model input to solve.","type":"object","properties":{"machines":{"description":"The machines that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The machine that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"jobs":{"description":"Jobs assigned to this machine.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this machine will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this machine.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the machine is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this machine with a processingStart before this point in time will get pinned."},"machineType":{"description":"The type of the machine.","type":"string","nullable":true},"initialJobType":{"description":"The job type that the machine is set up for at its start. The first job on the machine changes over from it, so a job transition from this job type to the job type of the first job applies. Without it, the first job needs no changeover.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputMachine"},"x-uniqueItemsProperty":"id"},"machineTags":{"description":"The tags that machines can carry.","uniqueItems":true,"type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"},"x-uniqueItemsProperty":"id"},"machineTypes":{"description":"The machine types that machines and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Resource type expressing the type of a resource","type":"object","properties":{"id":{"description":"The unique identifier of the machine type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/MachineType"},"x-uniqueItemsProperty":"id"},"employees":{"description":"The employees that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The employee that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"jobs":{"description":"Jobs assigned to this employee.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this employee will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this employee.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the employee is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this employee with a processingStart before this point in time will get pinned."}},"additionalProperties":false,"$$ref":"#/components/schemas/InputEmployee"},"x-uniqueItemsProperty":"id"},"employeeTags":{"description":"The tags that employees can carry.","type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"}},"jobs":{"description":"The jobs to schedule.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"duration":{"description":"Duration of the job. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"string","nullable":true},"durationOnResources":{"description":"Duration of the job on specific resources. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"array","items":{"description":"Duration of a job on a specific machine or employee.","required":["resource","duration"],"type":"object","properties":{"resource":{"description":"Identifier of the machine.","type":"string"},"duration":{"description":"Duration of the job on the machine or employee.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobDurationOnResource"},"nullable":true},"requiredTags":{"description":"Required tags. A job can only be assigned to a resource (machine or employee) with all of these tags.","uniqueItems":true,"type":"array","items":{"type":"string"}},"requiredResources":{"description":"Required resources. A job can only be assigned to one of these resources.","uniqueItems":true,"type":"array","items":{"type":"string"}},"dependencies":{"description":"Dependency jobs. This job can only start after all dependency jobs have finished.","uniqueItems":true,"type":"array","items":{"description":"A job that must be finished, or started, before the job that declares this dependency.","required":["id"],"type":"object","properties":{"id":{"description":"Unique identifier of the job.","type":"string"},"anchor":{"description":"The point on the preceding job that the offsets are measured from.","enum":["END","START"],"type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"Smallest allowed offset between the anchor of the preceding job and the start of this job."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"Largest allowed offset between the anchor of the preceding job and the start of this job. Unset means unbounded."},"requiresSameResource":{"description":"The dependent job must run on the same resource as the preceding job.","type":"boolean"},"noIntermediateJobs":{"description":"No other job may run between the preceding job and the dependent job.","type":"boolean"}},"$$ref":"#/components/schemas/DependencyJob"}},"minStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Minimum start time of the job. The job will never be scheduled before this point in time.","nullable":true},"idealEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Ideal end time of the job. The job will ideally finish close to this point in time.","nullable":true},"maxEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Maximum end time of the job. The job will never finish after this point in time.","nullable":true},"dueDate":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Due date of the job. A job that finishes after its due date counts as late. Unlike 'maxEnd', a due date is a goal: a job that cannot make it is still scheduled.","nullable":true},"priority":{"format":"int32","description":"The job's priority. Jobs with high priority ideally finish before low-priority jobs.","minimum":1,"type":"integer"},"jobType":{"description":"The type of the job.","type":"string","nullable":true},"noInterruptions":{"description":"Whether the job must run without interruption. By default a job that overlaps an unavailable time span of its resource pauses and continues afterwards, which makes the job take longer. A job with 'noInterruptions' instead waits until its resource is available for the whole duration of the job.","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJob"},"x-uniqueItemsProperty":"id"},"jobTypes":{"description":"The job types that jobs and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Job type expressing the type of a job","type":"object","properties":{"id":{"description":"The unique identifier of the job type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobType"},"x-uniqueItemsProperty":"id"},"jobTransitions":{"description":"The transition times between jobs of a given type on a machine of a given type.","type":"array","items":{"description":"JobTransition between jobs","required":["machineType","fromJobType","toJobType","duration"],"type":"object","properties":{"machineType":{"description":"Type associated with the machine","type":"string"},"fromJobType":{"description":"Type associated with the source job","type":"string"},"toJobType":{"description":"Type associated with the target job","type":"string"},"duration":{"description":"Duration of the transition","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobTransition"}},"resourceTransitions":{"description":"The rewarded and the forbidden transitions between specific resources.","type":"array","items":{"description":"A transition between dependent jobs from/to specific resources (machines/employees) will be rewarded.","required":["fromResourceId","toResourceId"],"type":"object","properties":{"fromResourceId":{"description":"ID of the source resource","type":"string"},"toResourceId":{"description":"ID of the target resource","type":"string"},"reward":{"format":"int32","description":"Reward score for this transition (higher is better)","type":"integer"},"forbidden":{"description":"The transition is forbidden","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/ResourceTransition"}}},"additionalProperties":false}},"additionalProperties":false},"ModelResponseHardMediumSoftScoreJobScheduleOutputJobScheduleInputMetricsJobScheduleOutputMetrics":{"type":"object","properties":{"metadata":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"description":"The model dataset metadata.","nullable":true},"modelOutput":{"description":"The solution to the requested model input.","type":"object","properties":{"machines":{"description":"The machines with the jobs the solver placed on them, in processing order.","type":"array","items":{"description":"The machine that processes jobs.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"schedule":{"description":"Jobs assigned to this machine.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}},"idleTime":{"description":"The time in which the machine waits between its start and the end of its last job: it neither processes a job, nor changes over, nor is unavailable. Zero when the machine has no jobs.","type":"string","nullable":true},"changeovers":{"format":"int64","description":"The number of changeovers on this machine, including the one before its first job when the machine has an initial job type.","type":"integer"},"changeoverTime":{"description":"The total duration of the changeovers on this machine. Zero when it has none.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputMachine"}},"employees":{"description":"The employees with the jobs the solver placed on them, in processing order.","type":"array","items":{"description":"The employee that processes jobs.","required":["id"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"schedule":{"description":"Jobs assigned to this employee.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputEmployee"}},"unassignedJobs":{"description":"The jobs the solver could not assign to any machine or employee.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}}},"additionalProperties":false,"nullable":true},"inputMetrics":{"description":"Key metrics aggregated from the model input.","type":"object","properties":{"jobs":{"format":"number","title":"Jobs","description":"The number of jobs in the input dataset.","type":"integer","example":4064,"x-tf-priority":"1","x-tf-example":"1654"},"machines":{"format":"number","title":"Machines","description":"The number of machines in the input dataset.","type":"integer","example":100,"x-tf-priority":"2","x-tf-example":"50"},"employees":{"format":"number","title":"Employees","description":"The number of employees in the input dataset.","type":"integer","example":50,"x-tf-priority":"3","x-tf-example":"25"}},"nullable":true},"kpis":{"description":"Key metrics aggregated from the model output.","type":"object","properties":{"makespan":{"format":"duration","title":"Makespan","description":"The total duration of the schedule.","type":"string","example":"PT1H","x-tf-priority":"2","x-tf-example":"PT1H"},"unassignedJobs":{"format":"number","title":"Unassigned jobs","description":"The number of jobs that could not be assigned to a machine or employee in this schedule.","type":"integer","example":10,"x-tf-priority":"1","x-tf-example":"12"},"assignedJobs":{"format":"number","title":"Assigned jobs","description":"The number of jobs that are successfully assigned to machines or employees in this schedule.","type":"integer","example":90,"x-tf-priority":"3","x-tf-example":"88"},"activatedMachines":{"format":"number","title":"Activated machines","description":"The number of machines that have at least one job assigned.","type":"integer","example":5,"x-tf-priority":"4","x-tf-example":"5"},"activatedEmployees":{"format":"number","title":"Activated employees","description":"The number of employees that have at least one job assigned.","type":"integer","example":5,"x-tf-priority":"5","x-tf-example":"5"},"idealEndTimeDeviation":{"format":"duration","title":"Ideal end time deviation","description":"The total deviation of jobs from their ideal end times when specified.","type":"string","example":"PT2H","x-tf-priority":"6","x-tf-example":"PT2H"},"lateJobs":{"format":"number","title":"Late jobs","description":"The number of jobs that finish after their due date or after their maximum end. A job that finishes after both counts once.","type":"integer","example":3,"x-tf-priority":"7","x-tf-example":"3"},"machineUtilization":{"format":"percentage","title":"Machine utilization","description":"The percentage of available machine time that is spent processing jobs. Available time runs from the start of each machine to the end of the schedule, without its unavailable time spans. Setup time and idle time do not count as processing. Unset when no machine is available before the end of the schedule.","type":"number","example":85.5,"nullable":true,"x-tf-priority":"8","x-tf-example":"85.5%"},"employeeUtilization":{"format":"percentage","title":"Employee utilization","description":"The percentage of available employee time that is spent processing jobs. Available time runs from the start of each employee to the end of the schedule, without its unavailable time spans, such as breaks. Idle time does not count as processing. Unset when no employee is available before the end of the schedule.","type":"number","example":92.5,"nullable":true,"x-tf-priority":"9","x-tf-example":"92.5%"},"changeovers":{"format":"number","title":"Changeovers","description":"The number of changeovers on machines. A changeover is the switch between two consecutive jobs on a machine when the job type changes or a job transition adds time.","type":"integer","example":4,"x-tf-priority":"10","x-tf-example":"4"},"totalChangeoverTime":{"format":"duration","title":"Total changeover time","description":"The total duration of all changeovers on machines, from the job transitions.","type":"string","example":"PT3H","x-tf-priority":"11","x-tf-example":"PT3H"},"totalIdleTime":{"format":"duration","title":"Total idle time","description":"The total time in which machines wait between their start and the end of their last job: they neither process a job, nor change over, nor are unavailable.","type":"string","example":"PT5H","x-tf-priority":"12","x-tf-example":"PT5H"}},"nullable":true},"run":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"description":"The id of the parent data set this was created from","type":"string","nullable":true},"originId":{"description":"The id of the origin (root) data set this initially originates from","type":"string","nullable":true},"name":{"type":"string","nullable":true},"submitDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run is submitted","nullable":true},"startDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the run begins initializing","nullable":true},"activeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase begins","nullable":true},"completeDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the solving phase concludes","nullable":true},"shutdownDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The moment the post-processing phase finishes","nullable":true},"solverStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string","nullable":true},"score":{"type":"string","nullable":true},"tags":{"uniqueItems":true,"type":"array","items":{"type":"string"}},"validationResult":{"description":"The result of the validation of the model input","type":"object","properties":{"summary":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"The summary of the validation. The model input passes the validation if the summary does not contain errors."},"errors":{"description":"The list of errors that occurred during the validation. If the list is empty, the model input is considered valid.","type":"array","items":{"type":"string"}},"warnings":{"description":"The list of warnings that occurred during the validation.","type":"array","items":{"type":"string"}}},"additionalProperties":false,"$$ref":"#/components/schemas/LegacyValidationResult"},"failureMessage":{"description":"The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.","type":"string","nullable":true}},"description":"The model run metadata. Deprecated in favor of \"metadata\"","readOnly":true,"nullable":true,"deprecated":true}}},"OffsetDateTime":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00"},"OperationOnPost":{"enum":["NONE","SOLVE"],"type":"string"},"OutputEmployee":{"description":"The employee that processes jobs.","required":["id"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"schedule":{"description":"Jobs assigned to this employee.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}}},"additionalProperties":false},"OutputJob":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false},"OutputMachine":{"description":"The machine that processes jobs.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"schedule":{"description":"Jobs assigned to this machine.","type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing end, as calculated by the solver.","nullable":true},"changeoverStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Start of the changeover before this job, when its machine changes over from the previous job. The changeover starts when the previous job ends. Unset when the job has no changeover.","nullable":true},"changeoverDuration":{"description":"Duration of the changeover before this job, from the job transitions. Zero when the job type changes but the job transition takes no time. Unset when the job has no changeover.","type":"string","nullable":true},"lateness":{"description":"How long after its due date or its maximum end the job ends. When it misses both, the larger of the two. Unset when the job ends on time.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/OutputJob"}},"idleTime":{"description":"The time in which the machine waits between its start and the end of its last job: it neither processes a job, nor changes over, nor is unavailable. Zero when the machine has no jobs.","type":"string","nullable":true},"changeovers":{"format":"int64","description":"The number of changeovers on this machine, including the one before its first job when the machine has an initial job type.","type":"integer"},"changeoverTime":{"description":"The total duration of the changeovers on this machine. Zero when it has none.","type":"string","nullable":true}},"additionalProperties":false},"RequiredResourcesDoNotMatchJustification":{"description":"Justification for a job that is assigned to a resource it does not accept.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"resourceId":{"description":"The machine or employee that the job is assigned to.","type":"string"},"jobId":{"description":"The job whose required resources are not met.","type":"string"},"requiredResourceIds":{"description":"The machines or employees that the job accepts.","uniqueItems":true,"type":"array","items":{"type":"string"}}}},"RequiredTagsDoNotMatchJustification":{"description":"Justification for a job that is assigned to a resource without all of its required tags.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"resourceId":{"description":"The machine or employee that the job is assigned to.","type":"string"},"jobId":{"description":"The job whose required tags are not met.","type":"string"},"requiredTags":{"description":"The tags that the job requires.","type":"array","items":{"type":"string"}},"tags":{"description":"The tags that the assigned machine or employee carries.","type":"array","items":{"type":"string"}}}},"ResourceNonExistingMachineTypeIssue":{"description":"A resource refers to a machine type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"},"machineType":{"description":"The machine type that does not exist.","type":"string"}}},"ResourceOverlappingUnavailableTimeSpansIssue":{"description":"A resource declares two unavailable time spans that overlap.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"},"timeSpan1":{"description":"The earlier of the two overlapping time spans.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false},"timeSpan2":{"description":"The later of the two overlapping time spans.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false}}},"ResourceTransition":{"description":"A transition between dependent jobs from/to specific resources (machines/employees) will be rewarded.","required":["fromResourceId","toResourceId"],"type":"object","properties":{"fromResourceId":{"description":"ID of the source resource","type":"string"},"toResourceId":{"description":"ID of the target resource","type":"string"},"reward":{"format":"int32","description":"Reward score for this transition (higher is better)","type":"integer"},"forbidden":{"description":"The transition is forbidden","type":"boolean"}},"additionalProperties":false},"ResourceTransitionForbiddenJustification":{"description":"Justification for a pair of dependent jobs on a forbidden transition between two resources.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"fromResourceId":{"description":"The machine that the preceding job is assigned to.","type":"string"},"toResourceId":{"description":"The machine that the dependent job is assigned to.","type":"string"}}},"ResourceTransitionForbiddenWithRewardIssue":{"description":"A resource transition is forbidden and rewarded at the same time.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resourceTransition":{"description":"The resource transition that the issue is about.","type":"string"},"reward":{"format":"int32","description":"The reward that the forbidden transition declares.","type":"integer"}}},"ResourceTransitionNonExistingMachineIssue":{"description":"A resource transition refers to a machine that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resourceTransition":{"description":"The resource transition that the issue is about.","type":"string"},"nonExistingMachine":{"description":"The machine that does not exist.","type":"string"}}},"ResourcesConfiguration":{"type":"object","properties":{"memory":{"format":"double","type":"number"},"labels":{"type":"object","additionalProperties":{"type":"string"}}}},"RewardResourceTransitionJustification":{"description":"Justification for a pair of dependent jobs on a rewarded transition between two resources.","type":"object","properties":{"description":{"description":"Human readable explanation of this constraint match.","type":"string"},"fromResourceId":{"description":"The machine that the preceding job is assigned to.","type":"string"},"toResourceId":{"description":"The machine that the dependent job is assigned to.","type":"string"},"reward":{"format":"int32","description":"The reward that this transition earns.","type":"integer"}}},"RunConfiguration":{"type":"object","properties":{"name":{"description":"Optional name to be given to the dataset. If not provided, the name will be generated.","maxLength":255,"minLength":0,"type":"string","nullable":true},"termination":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false,"$$ref":"#/components/schemas/SolverTerminationConfig"},"maxThreadCount":{"format":"int32","description":"Optional maximum number of threads to be used for solving.","minimum":1,"type":"integer","nullable":true},"tags":{"description":"Optional tags to be assigned to the dataset.","maxItems":100,"uniqueItems":true,"type":"array","items":{"type":"string"}}}},"ScoreAnalysisConfig":{"type":"object","properties":{"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","nullable":true}},"additionalProperties":false,"description":"Model configuration for the score analysis.","nullable":true}},"additionalProperties":false},"ScoreAnalysisConfigJobScheduleConfigOverrides":{"type":"object","properties":{"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"Model configuration for the score analysis.","nullable":true}},"additionalProperties":false},"ScoreAnalysisConfigModelConfigOverrides":{"type":"object","properties":{"model":{"type":"object","properties":{"overrides":{"type":"object","description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","nullable":true}},"additionalProperties":false,"description":"Model configuration for the score analysis.","nullable":true}},"additionalProperties":false},"ScoreAnalysisDetail":{"type":"object","properties":{"score":{"type":"string"},"constraints":{"type":"array","items":{"type":"object","properties":{"id":{"description":"Identifier of the constraint. Unique within the model, and identical across all runs and datasets of the same model version.","type":"string"},"name":{"type":"string"},"weight":{"type":"string"},"score":{"type":"string"},"matches":{"type":"array","items":{"type":"object","properties":{"score":{"type":"string"},"justification":{"type":"object","properties":{"description":{"type":"string"}},"$$ref":"#/components/schemas/ModelConstraintJustification"}}}},"matchCount":{"format":"int32","type":"integer"}}}}}},"ScoreAnalysisRequest":{"required":["modelInput"],"type":"object","properties":{"config":{"type":"object","properties":{"model":{"type":"object","properties":{"overrides":{"type":"object","description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","nullable":true}},"additionalProperties":false,"description":"Model configuration for the score analysis.","nullable":true}},"additionalProperties":false,"description":"Configuration for the score analysis.","nullable":true},"modelInput":{"type":"object","description":"The model input to analyze."}},"additionalProperties":false},"ScoreAnalysisRequestJobScheduleInputJobScheduleConfigOverrides":{"required":["modelInput"],"type":"object","properties":{"config":{"type":"object","properties":{"model":{"type":"object","properties":{"overrides":{"description":"The configuration of individual (soft) constraints weights and additional global model configuration attributes.","type":"object","properties":{"minimizeMakespanWeight":{"format":"int64","description":"Soft weight of the minimize makespan constraint.","type":"integer"},"minimizeIdealEndDifferenceWeight":{"format":"int64","description":"Soft weight of the minimize ideal end difference constraint.","type":"integer"},"minimizeLatenessWeight":{"format":"int64","description":"Soft weight of the minimize lateness constraint.","type":"integer"},"minimizeChangeoverTimeWeight":{"format":"int64","description":"Soft weight of the minimize changeover time constraint.","type":"integer"},"minimizeNumberOfChangeoversWeight":{"format":"int64","description":"Soft weight of the minimize number of changeovers constraint.","type":"integer"},"minimizeIdleTimeWeight":{"format":"int64","description":"Soft weight of the minimize idle time constraint. The default is 0, which turns the constraint off.","type":"integer"}},"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"Model configuration for the score analysis.","nullable":true}},"additionalProperties":false,"description":"Configuration for the score analysis.","nullable":true},"modelInput":{"description":"The model input to analyze.","type":"object","properties":{"machines":{"description":"The machines that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The machine that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The unique identifier of the machine.","type":"string"},"jobs":{"description":"Jobs assigned to this machine.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this machine will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this machine.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the machine is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this machine with a processingStart before this point in time will get pinned."},"machineType":{"description":"The type of the machine.","type":"string","nullable":true},"initialJobType":{"description":"The job type that the machine is set up for at its start. The first job on the machine changes over from it, so a job transition from this job type to the job type of the first job applies. Without it, the first job needs no changeover.","type":"string","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputMachine"},"x-uniqueItemsProperty":"id"},"machineTags":{"description":"The tags that machines can carry.","uniqueItems":true,"type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"},"x-uniqueItemsProperty":"id"},"machineTypes":{"description":"The machine types that machines and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Resource type expressing the type of a resource","type":"object","properties":{"id":{"description":"The unique identifier of the machine type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/MachineType"},"x-uniqueItemsProperty":"id"},"employees":{"description":"The employees that can process jobs.","uniqueItems":true,"type":"array","items":{"description":"The employee that processes jobs.","required":["id","start"],"type":"object","properties":{"id":{"description":"The id of the employee.","type":"string"},"jobs":{"description":"Jobs assigned to this employee.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Processing start, as calculated by the solver.","nullable":true}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJobOnResource"}},"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start the of the jobs assigned to this employee will be derived from this value. There will be no jobs with 'processingStart' before this point in time."},"tags":{"description":"Tags associated with this employee.","uniqueItems":true,"type":"array","items":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false,"$$ref":"#/components/schemas/TagAvailability"}},"unavailableTimeSpans":{"description":"The list of time spans the employee is not available. Time spans can not overlap.","uniqueItems":true,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}},"freezeJobsUntil":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"All jobs submitted on this employee with a processingStart before this point in time will get pinned."}},"additionalProperties":false,"$$ref":"#/components/schemas/InputEmployee"},"x-uniqueItemsProperty":"id"},"employeeTags":{"description":"The tags that employees can carry.","type":"array","items":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/Tag"}},"jobs":{"description":"The jobs to schedule.","uniqueItems":true,"type":"array","items":{"description":"Jobs that are processed by machines or employees.","required":["id"],"type":"object","properties":{"id":{"description":"The unique identifier of the job.","type":"string"},"duration":{"description":"Duration of the job. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"string","nullable":true},"durationOnResources":{"description":"Duration of the job on specific resources. If both 'duration' and 'durationOnResources' are specified, then `duration` is the default and `durationOnResources` will override it for the the resources listed in 'durationOnResources'.","type":"array","items":{"description":"Duration of a job on a specific machine or employee.","required":["resource","duration"],"type":"object","properties":{"resource":{"description":"Identifier of the machine.","type":"string"},"duration":{"description":"Duration of the job on the machine or employee.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobDurationOnResource"},"nullable":true},"requiredTags":{"description":"Required tags. A job can only be assigned to a resource (machine or employee) with all of these tags.","uniqueItems":true,"type":"array","items":{"type":"string"}},"requiredResources":{"description":"Required resources. A job can only be assigned to one of these resources.","uniqueItems":true,"type":"array","items":{"type":"string"}},"dependencies":{"description":"Dependency jobs. This job can only start after all dependency jobs have finished.","uniqueItems":true,"type":"array","items":{"description":"A job that must be finished, or started, before the job that declares this dependency.","required":["id"],"type":"object","properties":{"id":{"description":"Unique identifier of the job.","type":"string"},"anchor":{"description":"The point on the preceding job that the offsets are measured from.","enum":["END","START"],"type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"Smallest allowed offset between the anchor of the preceding job and the start of this job."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"Largest allowed offset between the anchor of the preceding job and the start of this job. Unset means unbounded."},"requiresSameResource":{"description":"The dependent job must run on the same resource as the preceding job.","type":"boolean"},"noIntermediateJobs":{"description":"No other job may run between the preceding job and the dependent job.","type":"boolean"}},"$$ref":"#/components/schemas/DependencyJob"}},"minStart":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Minimum start time of the job. The job will never be scheduled before this point in time.","nullable":true},"idealEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Ideal end time of the job. The job will ideally finish close to this point in time.","nullable":true},"maxEnd":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Maximum end time of the job. The job will never finish after this point in time.","nullable":true},"dueDate":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"Due date of the job. A job that finishes after its due date counts as late. Unlike 'maxEnd', a due date is a goal: a job that cannot make it is still scheduled.","nullable":true},"priority":{"format":"int32","description":"The job's priority. Jobs with high priority ideally finish before low-priority jobs.","minimum":1,"type":"integer"},"jobType":{"description":"The type of the job.","type":"string","nullable":true},"noInterruptions":{"description":"Whether the job must run without interruption. By default a job that overlaps an unavailable time span of its resource pauses and continues afterwards, which makes the job take longer. A job with 'noInterruptions' instead waits until its resource is available for the whole duration of the job.","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/InputJob"},"x-uniqueItemsProperty":"id"},"jobTypes":{"description":"The job types that jobs and job transitions can refer to.","uniqueItems":true,"type":"array","items":{"description":"Job type expressing the type of a job","type":"object","properties":{"id":{"description":"The unique identifier of the job type.","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobType"},"x-uniqueItemsProperty":"id"},"jobTransitions":{"description":"The transition times between jobs of a given type on a machine of a given type.","type":"array","items":{"description":"JobTransition between jobs","required":["machineType","fromJobType","toJobType","duration"],"type":"object","properties":{"machineType":{"description":"Type associated with the machine","type":"string"},"fromJobType":{"description":"Type associated with the source job","type":"string"},"toJobType":{"description":"Type associated with the target job","type":"string"},"duration":{"description":"Duration of the transition","type":"string"}},"additionalProperties":false,"$$ref":"#/components/schemas/JobTransition"}},"resourceTransitions":{"description":"The rewarded and the forbidden transitions between specific resources.","type":"array","items":{"description":"A transition between dependent jobs from/to specific resources (machines/employees) will be rewarded.","required":["fromResourceId","toResourceId"],"type":"object","properties":{"fromResourceId":{"description":"ID of the source resource","type":"string"},"toResourceId":{"description":"ID of the target resource","type":"string"},"reward":{"format":"int32","description":"Reward score for this transition (higher is better)","type":"integer"},"forbidden":{"description":"The transition is forbidden","type":"boolean"}},"additionalProperties":false,"$$ref":"#/components/schemas/ResourceTransition"}}},"additionalProperties":false}},"additionalProperties":false},"SolverTerminationConfig":{"type":"object","properties":{"spentLimit":{"format":"duration","type":"string","description":"Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).","example":"PT1H"},"unimprovedSpentLimit":{"format":"duration","type":"string","description":"Maximum unimproved score duration (ISO 8601 duration format). If the score has not improved during this period (e.g. PT5M), terminate the solver. If no value is provided, the default diminished returns termination will apply. If set, stepCountLimit and moveCountLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","example":"PT5M"},"stepCountLimit":{"format":"int32","description":"Maximum solver step count. The solver will stop solving after a pre-determined amount of steps. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":1000},"moveCountLimit":{"format":"int64","description":"Maximum number of moves evaluated by the solver. The solver will stop solving after a pre-determined amount of moves have been evaluated. Use when you require results independently of the hardware resources performance. Use this termination if you want to benchmark your models, not recommended for production use. If set, unimprovedSpentLimit must be empty. Can be combined with stepCountLimit: the solver stops as soon as either limit is reached. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.","minimum":0,"type":"integer","example":100000},"slidingWindowDuration":{"format":"duration","type":"string","description":"Sliding window (ISO 8601 duration format) over which score improvement is measured by the diminished returns termination. Defaults to PT30S when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","example":"PT30S"},"minimumImprovementRatio":{"format":"double","description":"Minimum ratio between current and initial improvement before the diminished returns termination kicks in. Must be strictly positive. Defaults to 0.0001 when omitted. Only takes effect when diminished returns is active (i.e. unimprovedSpentLimit, stepCountLimit and moveCountLimit are all empty).","type":"number","example":0.0001}},"additionalProperties":false},"SolvingStatus":{"enum":["DATASET_CREATED","DATASET_VALIDATED","DATASET_INVALID","DATASET_COMPUTED","SOLVING_SCHEDULED","SOLVING_STARTED","SOLVING_ACTIVE","SOLVING_COMPLETED","SOLVING_INCOMPLETE","SOLVING_FAILED"],"type":"string"},"Tag":{"description":"Tag expressing a characteristic of a machine or an employee","type":"object","properties":{"id":{"description":"The unique identifier of the tag.","type":"string"}},"additionalProperties":false},"TagAvailability":{"description":"Availability of the tag in time (optional)","required":["tagId"],"type":"object","properties":{"tagId":{"description":"Unique ID of the tag","type":"string"},"timeSpans":{"description":"A time availability of the tag. If not provided, the tag is considered as always available","maxItems":1,"type":"array","items":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false,"$$ref":"#/components/schemas/TimeSpan"}}},"additionalProperties":false},"TagOnResourceDoesNotExistIssue":{"description":"A resource carries a tag that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"},"tag":{"description":"The tag that does not exist.","type":"string"}}},"TagOnResourceMultipleTimeSpansIssue":{"description":"A resource declares more than one availability time span for a tag, which is not supported.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"tag":{"description":"The tag that is declared more than once.","type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"}}},"TimeSpan":{"description":"Time span with an inclusive start and an exclusive end.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false},"ValidationErrorInfo":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"string"}}}},"ValidationIssueTypes":{"required":["issueTypes"],"type":"object","properties":{"issueTypes":{"description":"List of all supported validation issue types together with their metadata.","type":"array","items":{"required":["code","severity"],"type":"object","properties":{"code":{"type":"object","properties":{"value":{"type":"string"}},"description":"Unique case-sensitive code of the issue type."},"severity":{"enum":["ERROR","WARNING"],"type":"string","description":"Issue severity"},"metadata":{"type":"array","items":{"type":"object","properties":{"type":{"description":"The type of the issue type detail.","type":"string","readOnly":true}},"oneOf":[{"type":"object","properties":{"type":{"description":"The type of the issue type detail.","type":"string","readOnly":true},"message":{"type":"string"}},"$$ref":"#/components/schemas/IssueMessage"}],"$$ref":"#/components/schemas/IssueMetadata"}}},"$$ref":"#/components/schemas/IssueType"}}}},"ValidationResultAbstractJobScheduleIssue":{"required":["status"],"type":"object","properties":{"status":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string","description":"Determines if the validated dataset is accepted for further processing"},"issues":{"description":"Validation issues found","type":"array","items":{"description":"Reports one problem found while validating a job schedule input.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"}},"oneOf":[{"description":"Multiple resources have the same id.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resourceId1":{"description":"The id that both resources declare.","type":"string"},"resource1Type":{"description":"The type of the resource that declared the id first.","type":"string"},"resourceId2":{"description":"The id that both resources declare, repeated for the second resource.","type":"string"},"resource2Type":{"description":"The type of the resource that repeats the id.","type":"string"}},"$$ref":"#/components/schemas/DuplicateResourceIdIssue"},{"description":"A job dependency would close a cycle in the dependency graph.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobDependencyCycleIssue"},{"description":"A job depends on a job that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobDependencyDoesNotExistIssue"},{"description":"A job dependency allows no offset at all, because its maxOffset is below its minOffset.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"The smallest allowed offset that the dependency declares."},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"The largest allowed offset that the dependency declares."}},"$$ref":"#/components/schemas/JobDependencyMaxOffsetLessThanMinOffsetIssue"},{"description":"A job dependency declares a negative maxOffset.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"},"maxOffset":{"format":"duration","type":"string","example":"P1D","description":"The negative largest allowed offset that the dependency declares."}},"$$ref":"#/components/schemas/JobDependencyNegativeMaxOffsetIssue"},{"description":"A job dependency declares a negative minOffset.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"},"minOffset":{"format":"duration","type":"string","example":"P1D","description":"The negative smallest allowed offset that the dependency declares."}},"$$ref":"#/components/schemas/JobDependencyNegativeMinOffsetIssue"},{"description":"A job dependency forbids intermediate jobs without requiring the same resource, which cannot be enforced.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobDependencyNoIntermediateJobsWithoutSameResourceIssue"},{"description":"A job dependency requires the same resource without anchoring on the end of the preceding job.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"dependency":{"description":"The dependency of that job that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobDependencySameResourceWithoutEndAnchorIssue"},{"description":"A job declares a duration on a resource that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"resource":{"description":"The resource that does not exist.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The duration that the job declares for that resource."}},"$$ref":"#/components/schemas/JobDurationOnResourceDoesNotExistIssue"},{"description":"A job declares a negative duration on a resource.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"resource":{"description":"The resource that the negative duration is declared for.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The negative duration that the job declares."}},"$$ref":"#/components/schemas/JobNegativeDurationOnResourceIssue"},{"description":"A job refers to a job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"jobType":{"description":"The job type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobNonExistingJobTypeIssue"},{"description":"A resource carries a job that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job on the resource that does not exist.","type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobOnResourceDoesNotExistIssue"},{"description":"A job requires a resource that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"},"resource":{"description":"The required resource that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobRequiredResourceDoesNotExistIssue"},{"description":"A job transition declares a negative duration. A setup cannot take less than no time: a negative one would let a job start before the job before it on the same resource ends.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"duration":{"format":"duration","type":"string","example":"P1D","description":"The negative duration that the job transition declares."}},"$$ref":"#/components/schemas/JobTransitionNegativeDurationIssue"},{"description":"A job transition starts from a job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"fromJobType":{"description":"The source job type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobTransitionNonExistingFromJobTypeIssue"},{"description":"A job transition refers to a machine type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"machineType":{"description":"The machine type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobTransitionNonExistingMachineTypeIssue"},{"description":"A job transition leads to a job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"transition":{"description":"The job transition that the issue is about.","type":"string"},"toJobType":{"description":"The target job type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/JobTransitionNonExistingToJobTypeIssue"},{"description":"A job declares neither a duration nor a duration on any resource, so it cannot be scheduled.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"job":{"description":"The job that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/JobWithoutDurationIssue"},{"description":"A machine is set up for an initial job type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"machine":{"description":"The machine that the issue is about.","type":"string"},"initialJobType":{"description":"The initial job type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/MachineNonExistingInitialJobTypeIssue"},{"description":"A resource refers to a machine type that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"},"machineType":{"description":"The machine type that does not exist.","type":"string"}},"$$ref":"#/components/schemas/ResourceNonExistingMachineTypeIssue"},{"description":"A resource declares two unavailable time spans that overlap.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"},"timeSpan1":{"description":"The earlier of the two overlapping time spans.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false},"timeSpan2":{"description":"The later of the two overlapping time spans.","required":["start","end"],"type":"object","properties":{"start":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The start (ISO 8601) of the time span (inclusive)."},"end":{"format":"date-time","type":"string","example":"2022-03-10T12:15:50-04:00","description":"The end (ISO 8601) of the time span (exclusive)."}},"additionalProperties":false}},"$$ref":"#/components/schemas/ResourceOverlappingUnavailableTimeSpansIssue"},{"description":"A resource transition is forbidden and rewarded at the same time.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resourceTransition":{"description":"The resource transition that the issue is about.","type":"string"},"reward":{"format":"int32","description":"The reward that the forbidden transition declares.","type":"integer"}},"$$ref":"#/components/schemas/ResourceTransitionForbiddenWithRewardIssue"},{"description":"A resource transition refers to a machine that the schedule does not contain.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resourceTransition":{"description":"The resource transition that the issue is about.","type":"string"},"nonExistingMachine":{"description":"The machine that does not exist.","type":"string"}},"$$ref":"#/components/schemas/ResourceTransitionNonExistingMachineIssue"},{"description":"A resource carries a tag that the schedule does not declare.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"},"tag":{"description":"The tag that does not exist.","type":"string"}},"$$ref":"#/components/schemas/TagOnResourceDoesNotExistIssue"},{"description":"A resource declares more than one availability time span for a tag, which is not supported.","required":["code","severity"],"type":"object","properties":{"code":{"description":"Issue code referring to an issue type.","type":"string"},"severity":{"description":"Issue severity","enum":["ERROR","WARNING"],"type":"string"},"tag":{"description":"The tag that is declared more than once.","type":"string"},"resource":{"description":"The machine or employee that the issue is about.","type":"string"}},"$$ref":"#/components/schemas/TagOnResourceMultipleTimeSpansIssue"}],"$$ref":"#/components/schemas/AbstractJobScheduleIssue"}}}},"ValidationStatus":{"enum":["VALIDATION_NOT_SUPPORTED","OK","WARNINGS","ERRORS"],"type":"string"}},"securitySchemes":{"auth":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"API key required to authenticate as part of Timefold Platform"}}},"$$normalized":true}