Docs
  • Solver
  • Models
    • Field Service Routing
    • Employee Shift Scheduling
    • Pick-up and Delivery Routing
    • Task Scheduling
  • Platform
Try models
  • Task Scheduling
  • User guide
  • Job types and machine types

Task Scheduling

    • Introduction
    • Getting started: Hello world
    • User guide
      • Terminology
      • Scheduling API concepts
      • Integration
      • Constraints
      • Using the API
        • Using the OpenAPI spec
        • API tooling
      • Demo datasets
      • Input datasets
        • Model configuration
        • Model input
      • Output datasets
        • Metadata
        • Model output
        • Input metrics
        • Key performance indicators (KPIs)
      • Job types and machine types
      • Resource-specific durations
      • Freeze jobs until
      • Metrics and optimization goals
      • Score analysis
      • Validation
    • Machine and employee resource constraints
      • Machine unavailability
      • Resource transitions
      • Employee resources
    • Job service constraints
      • Time windows
      • Time management
      • Job dependencies
      • Priority jobs
      • Tags and specific resources
    • Real-time planning
    • Changelog
    • Upgrading to the latest versions
    • Feature requests

Job types and machine types

Job types and machine types allow you to categorize jobs and machines for the purpose of modeling job transitions, which provides time for the setup required when switching between different types of work.

1. Job types

Job types categorize jobs based on the characteristics that affect machine setup or configuration:

{
  "jobTypes": [
    { "id": "Aluminum" },
    { "id": "Steel" },
    { "id": "Plastic" }
  ],
  "jobs": [
    {
      "id": "Job 1",
      "jobType": "Aluminum",
      "duration": "PT2H"
    },
    {
      "id": "Job 2",
      "jobType": "Steel",
      "duration": "PT3H"
    },
    {
      "id": "Job 3",
      "jobType": "Plastic",
      "duration": "PT1H"
    }
  ]
}

Job types are identifiers that group jobs with similar characteristics. The types themselves don’t directly affect scheduling, but they are used in combination with machine types and job transitions.

1.1. Use cases for job types

  • Material types: Aluminum, steel, plastic, wood.

  • Product families: Product A, Product B, Product C.

  • Process types: Rough cut, finish cut, polish.

  • Color categories: Red, blue, green (for paint lines).

  • Temperature ranges: High temp, medium temp, low temp (for furnaces).

  • Size categories: Small parts, medium parts, large parts.

2. Machine types

Machine types categorize machines based on their capabilities and setup requirements:

{
  "machineTypes": [
    { "id": "Mill" },
    { "id": "Lathe" },
    { "id": "Press" }
  ],
  "machines": [
    {
      "id": "Machine A",
      "machineType": "Mill",
      "start": "2024-12-01T00:00:00+00:00"
    },
    {
      "id": "Machine B",
      "machineType": "Mill",
      "start": "2024-12-01T00:00:00+00:00"
    },
    {
      "id": "Machine C",
      "machineType": "Lathe",
      "start": "2024-12-01T00:00:00+00:00"
    }
  ]
}

Machine types are identifiers that group machines with similar operational characteristics.

2.1. Use cases for machine types

  • Equipment categories: Mills, lathes, presses, drills.

  • Capability groups: High precision, standard precision.

  • Technology types: CNC, manual, automated.

  • Processing methods: Cutting, welding, painting, assembly.

  • Capacity classes: Small capacity, large capacity.

3. Job transitions with types

Job types and machine types are used together to define job transitions to provide time for the setup required when switching between job types on a specific machine type:

{
  "machineTypes": [
    { "id": "Paint line" }
  ],
  "jobTypes": [
    { "id": "Red" },
    { "id": "Blue" },
    { "id": "White" }
  ],
  "machines": [
    {
      "id": "Line 1",
      "machineType": "Paint line",
      "start": "2024-12-01T00:00:00+00:00"
    }
  ],
  "jobs": [
    {
      "id": "Paint red",
      "jobType": "Red",
      "duration": "PT2H"
    },
    {
      "id": "Paint blue",
      "jobType": "Blue",
      "duration": "PT2H",
      "dependencies": [
        { "id": "Paint red" }
      ]
    }
  ],
  "jobTransitions": [
    {
      "machineType": "Paint line",
      "fromJobType": "Red",
      "toJobType": "Blue",
      "duration": "PT1H"
    },
    {
      "machineType": "Paint line",
      "fromJobType": "Red",
      "toJobType": "Red",
      "duration": "PT15M"
    }
  ]
}

In this example:

  • Switching from red paint to blue paint requires 1 hour of cleanup.

  • Continuing with red paint (same color) only requires 15 minutes.

  • If both jobs are assigned to Line 1, the transition duration will be added between them.

For more information on job transitions, see Job transitions.

4. When job transitions apply

Job transitions only take effect when ALL of these conditions are met:

  1. Both jobs have a dependency relationship.

  2. Both jobs are assigned to the same machine.

  3. Both jobs have jobType specified.

  4. The machine has machineType specified.

  5. A matching jobTransition exists for the machine type and job type combination.

If any of these conditions are not met, no transition duration is added.

5. Job types without transitions

Job types can be defined even if you don’t currently use job transitions. This allows you to:

  • Categorize jobs for reporting and analysis.

  • Plan for future transition modeling.

  • Document job characteristics in the data model.

{
  "jobTypes": [
    { "id": "Priority customer" },
    { "id": "Standard customer" },
    { "id": "Internal" }
  ],
  "jobs": [
    {
      "id": "Customer order",
      "jobType": "Priority customer",
      "duration": "PT4H"
    }
  ]
}

However, without corresponding jobTransitions entries, the job type will not affect scheduling.

6. Machine types without transitions

Similarly, machine types can exist without job transitions, allowing you to categorize machines:

{
  "machineTypes": [
    { "id": "Generation 1" },
    { "id": "Generation 2" },
    { "id": "Generation 3" }
  ],
  "machines": [
    {
      "id": "Old machine",
      "machineType": "Generation 1",
      "start": "2024-12-01T00:00:00+00:00"
    },
    {
      "id": "New machine",
      "machineType": "Generation 3",
      "start": "2024-12-01T00:00:00+00:00"
    }
  ]
}

7. Complex transition matrices

Real-world scenarios often involve many job types and complex transition patterns:

{
  "machineTypes": [
    { "id": "cnc mill" }
  ],
  "jobTypes": [
    { "id": "Aluminum roughing" },
    { "id": "Aluminum finishing" },
    { "id": "Steel roughing" },
    { "id": "Steel finishing" }
  ],
  "jobTransitions": [
    {
      "machineType": "CNC mill",
      "fromJobType": "Aluminum roughing",
      "toJobType": "Aluminum finishing",
      "duration": "PT10M"
    },
    {
      "machineType": "CNC mill",
      "fromJobType": "Aluminum roughing",
      "toJobType": "Aluminum roughing",
      "duration": "PT5M"
    },
    {
      "machineType": "CNC mill",
      "fromJobType": "Aluminum finishing",
      "toJobType": "Steel roughing",
      "duration": "PT30M"
    },
    {
      "machineType": "CNC mill",
      "fromJobType": "Steel roughing",
      "toJobType": "Aluminum roughing",
      "duration": "PT45M"
    }
  ]
}

This models different transition times depending on:

  • Material changes (aluminum to steel requires more cleanup).

  • Operation changes (roughing to finishing is quicker).

  • Same material continuation (minimal setup).

The solver will consider these transition times when optimizing the schedule and may batch similar job types together to minimize total transition time.

8. Employees

Note that job types and machine types are specifically for modeling job transitions on machines. Employees do not use machine types or job types.

9. Validation

Job types and machine types must be defined before being referenced:

  • If a job specifies a jobType, that job type must exist in the jobTypes list.

  • If a machine specifies a machineType, that machine type must exist in the machineTypes list.

  • If a job transition references a job type, that type must exist in jobTypes.

  • If a job transition references a machine type, that type must exist in machineTypes.

For more information on validation, see Validation.

10. Best practices

  1. Choose meaningful names: Use descriptive IDs that clearly indicate what the type represents.

  2. Keep it simple: Start with a small number of types and add more only if needed.

  3. Model reality: Transition durations should reflect actual setup times.

  4. Document your types: Maintain clear documentation of what each type represents.

  5. Consider symmetry: Transitions may not be symmetric (A→B might differ from B→A),

  6. Test thoroughly: Verify that transition times improve your schedules without making them infeasible.

  7. Balance granularity: Too many types make the model complex; too few miss important setup times.

Next

  • See the full API spec or try the online API.

  • Learn about resource transitions.

  • Learn about job dependencies.

  • © 2026 Timefold BV
  • Timefold.ai
  • Documentation
  • Changelog
  • Send feedback
  • Privacy
  • Legal
    • Light mode
    • Dark mode
    • System default