{
  "openapi" : "3.0.3",
  "info" : {
    "title" : "Employee Shift Scheduling",
    "description" : "Assign employees to shifts, optimizing for employee availability, cost reduction, compliance, and employee satisfaction.",
    "contact" : {
      "name" : "Timefold BV",
      "url" : "https://timefold.ai",
      "email" : "info@timefold.ai"
    },
    "version" : "v1"
  },
  "servers" : [ {
    "url" : "/api/models/employee-scheduling"
  } ],
  "tags" : [ {
    "name" : "Demo data",
    "description" : "Generated demo data for the model"
  }, {
    "name" : "Employee Shift Schedule",
    "description" : "Timefold Employee Shift Schedule service - Assign shifts to employees based on skills, availability and affinity"
  } ],
  "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" : {
                    "$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" : {
                  "$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" : {
          "404" : {
            "description" : "In case the given demo data does not exist",
            "content" : {
              "application/json" : { }
            }
          },
          "200" : {
            "description" : "Demo data as a dataset",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ModelRequestEmployeeScheduleEmployeeScheduleConfigOverrides"
                }
              }
            }
          },
          "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" : {
                  "$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" : {
          "404" : {
            "description" : "In case the given demo data does not exist",
            "content" : {
              "application/json" : { }
            }
          },
          "200" : {
            "description" : "Demo data as a dataset",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/EmployeeSchedule"
                }
              }
            }
          },
          "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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/v1/schedules" : {
      "post" : {
        "summary" : "Request an employee shift schedule to be solved, unique identifier is returned that can be used to get the employee shift schedule once solved",
        "operationId" : "schedule",
        "tags" : [ "Employee Shift 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" : {
            "allOf" : [ {
              "$ref" : "#/components/schemas/OperationOnPost"
            }, {
              "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" : {
                "$ref" : "#/components/schemas/ModelRequestEmployeeScheduleEmployeeScheduleConfigOverrides"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "400" : {
            "description" : "In case request given does not meet expectations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "oneOf" : [ {
                    "$ref" : "#/components/schemas/ErrorInfo"
                  }, {
                    "$ref" : "#/components/schemas/ValidationErrorInfo"
                  } ]
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "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" : {
                      "description" : "The moment the run is submitted",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "startDateTime" : {
                      "description" : "The moment the run begins initializing",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "activeDateTime" : {
                      "description" : "The moment the solving phase begins",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "completeDateTime" : {
                      "description" : "The moment the solving phase concludes",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "shutdownDateTime" : {
                      "description" : "The moment the post-processing phase finishes",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "solverStatus" : {
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/SolvingStatus"
                      } ],
                      "nullable" : true
                    },
                    "score" : {
                      "type" : "string",
                      "nullable" : true
                    },
                    "tags" : {
                      "uniqueItems" : true,
                      "type" : "array",
                      "items" : {
                        "type" : "string"
                      }
                    },
                    "validationResult" : {
                      "$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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      },
      "get" : {
        "summary" : "List all employee shift 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" : [ "Employee Shift 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" : {
          "404" : {
            "description" : "In case request given schedule does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Returns scheduling with given identifier",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$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"
          },
          "429" : {
            "description" : "Too many requests or other policy violations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/v1/schedules/recommendations/recommend-employees" : {
      "post" : {
        "summary" : "Calculates employee recommendations for the supplied shifts. This variant is suitable for recommendations for schedules that have not been solved before.",
        "operationId" : "recommend-employees-without-solved-model",
        "tags" : [ "Employee Shift 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" : {
          "required" : true,
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/RecommendEmployeesInput"
              }
            }
          }
        },
        "responses" : {
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "400" : {
            "description" : "In case of invalid payload",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Employee recommendations successfully calculated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RecommendEmployeesResult"
                }
              }
            }
          },
          "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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/v1/schedules/score-analysis" : {
      "post" : {
        "summary" : "Calculates score analysis for the supplied schedule",
        "operationId" : "calculateScoreAnalysis",
        "tags" : [ "Employee Shift 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" : {
                "$ref" : "#/components/schemas/ScoreAnalysisRequestEmployeeScheduleEmployeeScheduleConfigOverrides"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Score analysis for the supplied schedule",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ScoreAnalysisDetail"
                }
              }
            }
          },
          "400" : {
            "description" : "Validation results in case of invalid input",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LegacyValidationResult"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/v1/schedules/validation-issue-types" : {
      "get" : {
        "summary" : "Get validation issue types supported by the model",
        "operationId" : "getValidationIssueTypes",
        "tags" : [ "Employee Shift Schedule" ],
        "responses" : {
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Validation issue types supported by the model",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/v1/schedules/validation-issue-types/{code}" : {
      "get" : {
        "summary" : "Get validation issue type by the code",
        "operationId" : "getValidationIssueTypeByCode",
        "tags" : [ "Employee Shift Schedule" ],
        "parameters" : [ {
          "description" : "Unique identifier of the validation issue type",
          "required" : true,
          "name" : "code",
          "in" : "path",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "404" : {
            "description" : "In case the issue type of the given code does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Validation issue type of the given code",
            "content" : {
              "application/json" : {
                "schema" : { }
              }
            }
          },
          "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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/v1/schedules/{id}" : {
      "delete" : {
        "summary" : "Terminate and return an employee shift schedule with the given identifier",
        "operationId" : "terminateSchedule",
        "tags" : [ "Employee Shift 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" : {
          "404" : {
            "description" : "In case request given schedule does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Returns scheduling with given identifier",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ModelResponseHardMediumSoftScoreOutputEmployeeScheduleEmployeeSchedulingInputMetricsEmployeeSchedulingOutputMetrics"
                }
              }
            }
          },
          "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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      },
      "post" : {
        "summary" : "Request solving a dataset under the given unique identifier.",
        "operationId" : "solveDataset",
        "tags" : [ "Employee Shift 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" : {
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "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" : {
                      "description" : "The moment the run is submitted",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "startDateTime" : {
                      "description" : "The moment the run begins initializing",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "activeDateTime" : {
                      "description" : "The moment the solving phase begins",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "completeDateTime" : {
                      "description" : "The moment the solving phase concludes",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "shutdownDateTime" : {
                      "description" : "The moment the post-processing phase finishes",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "solverStatus" : {
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/SolvingStatus"
                      } ],
                      "nullable" : true
                    },
                    "score" : {
                      "type" : "string",
                      "nullable" : true
                    },
                    "tags" : {
                      "uniqueItems" : true,
                      "type" : "array",
                      "items" : {
                        "type" : "string"
                      }
                    },
                    "validationResult" : {
                      "$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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      },
      "get" : {
        "summary" : "Get an employee shift schedule with the given identifier. It's the best schedule so far as the solver might still be running.",
        "operationId" : "getSchedule",
        "tags" : [ "Employee Shift Schedule" ],
        "parameters" : [ {
          "description" : "Unique identifier of the schedule",
          "required" : true,
          "name" : "id",
          "in" : "path",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "404" : {
            "description" : "In case request given schedule does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Returns scheduling with given identifier",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ModelResponseHardMediumSoftScoreOutputEmployeeScheduleEmployeeSchedulingInputMetricsEmployeeSchedulingOutputMetrics"
                }
              }
            }
          },
          "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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      },
      "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."
          },
          "404" : {
            "description" : "Item cannot be restored or was not found."
          },
          "401" : {
            "description" : "Missing or invalid API key."
          },
          "403" : {
            "description" : "API key used with this call does not have access to the operation."
          }
        }
      }
    },
    "/v1/schedules/{id}/config" : {
      "get" : {
        "summary" : "Get the configuration used for the schedule",
        "operationId" : "getScheduleConfig",
        "tags" : [ "Employee Shift Schedule" ],
        "parameters" : [ {
          "description" : "Unique identifier of the schedule",
          "required" : true,
          "name" : "id",
          "in" : "path",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "404" : {
            "description" : "In case request given schedule does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Returns the configuration used for a schedule with the given identifier",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$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"
          },
          "429" : {
            "description" : "Too many requests or other policy violations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/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" : [ "Employee Shift Schedule" ],
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "schema" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/SolvingStatus"
            }
          }
        } ],
        "responses" : {
          "404" : {
            "description" : "In case request given dataset does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "410" : {
            "description" : "In case given dataset is already in final state",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Event stream of dataset changes",
            "content" : {
              "text/event-stream" : {
                "schema" : {
                  "$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"
          },
          "429" : {
            "description" : "Too many requests or other policy violations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/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" : [ "Employee Shift 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" : {
            "allOf" : [ {
              "$ref" : "#/components/schemas/OperationOnPost"
            }, {
              "default" : "SOLVE"
            } ]
          }
        }, {
          "description" : "Data to use as a source for the operation.",
          "name" : "select",
          "in" : "query",
          "schema" : {
            "allOf" : [ {
              "$ref" : "#/components/schemas/DatasetSelector"
            }, {
              "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" : {
                "$ref" : "#/components/schemas/ModelConfiguration2"
              }
            }
          }
        },
        "responses" : {
          "400" : {
            "description" : "In case request given does not meet expectations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "oneOf" : [ {
                    "$ref" : "#/components/schemas/ErrorInfo"
                  }, {
                    "$ref" : "#/components/schemas/ValidationErrorInfo"
                  } ]
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "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" : {
                      "description" : "The moment the run is submitted",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "startDateTime" : {
                      "description" : "The moment the run begins initializing",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "activeDateTime" : {
                      "description" : "The moment the solving phase begins",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "completeDateTime" : {
                      "description" : "The moment the solving phase concludes",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "shutdownDateTime" : {
                      "description" : "The moment the post-processing phase finishes",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "solverStatus" : {
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/SolvingStatus"
                      } ],
                      "nullable" : true
                    },
                    "score" : {
                      "type" : "string",
                      "nullable" : true
                    },
                    "tags" : {
                      "uniqueItems" : true,
                      "type" : "array",
                      "items" : {
                        "type" : "string"
                      }
                    },
                    "validationResult" : {
                      "$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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/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" : [ "Employee Shift 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" : {
            "allOf" : [ {
              "$ref" : "#/components/schemas/OperationOnPost"
            }, {
              "default" : "SOLVE"
            } ]
          }
        }, {
          "description" : "Data to use as a source for the operation.",
          "name" : "select",
          "in" : "query",
          "schema" : {
            "allOf" : [ {
              "$ref" : "#/components/schemas/DatasetSelector"
            }, {
              "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" : {
                "$ref" : "#/components/schemas/ModelInputPatchRequestEmployeeScheduleConfigOverrides"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "400" : {
            "description" : "In case request given does not meet expectations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "oneOf" : [ {
                    "$ref" : "#/components/schemas/ErrorInfo"
                  }, {
                    "$ref" : "#/components/schemas/ValidationErrorInfo"
                  } ]
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "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" : {
                      "description" : "The moment the run is submitted",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "startDateTime" : {
                      "description" : "The moment the run begins initializing",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "activeDateTime" : {
                      "description" : "The moment the solving phase begins",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "completeDateTime" : {
                      "description" : "The moment the solving phase concludes",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "shutdownDateTime" : {
                      "description" : "The moment the post-processing phase finishes",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "solverStatus" : {
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/SolvingStatus"
                      } ],
                      "nullable" : true
                    },
                    "score" : {
                      "type" : "string",
                      "nullable" : true
                    },
                    "tags" : {
                      "uniqueItems" : true,
                      "type" : "array",
                      "items" : {
                        "type" : "string"
                      }
                    },
                    "validationResult" : {
                      "$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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/v1/schedules/{id}/input" : {
      "get" : {
        "summary" : "Get input dataset",
        "operationId" : "getScheduleInput",
        "tags" : [ "Employee Shift Schedule" ],
        "parameters" : [ {
          "description" : "Unique identifier of the schedule",
          "required" : true,
          "name" : "id",
          "in" : "path",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "404" : {
            "description" : "In case request given schedule does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Returns input dataset for given identifier",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/EmployeeSchedule"
                }
              }
            }
          },
          "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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/v1/schedules/{id}/logs" : {
      "get" : {
        "summary" : "Get logs with given identifier",
        "operationId" : "getScheduleLogs",
        "tags" : [ "Employee Shift Schedule" ],
        "parameters" : [ {
          "description" : "Unique identifier of the schedule",
          "required" : true,
          "name" : "id",
          "in" : "path",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "404" : {
            "description" : "In case request given schedule does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Returns logs with given identifier",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$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"
          },
          "429" : {
            "description" : "Too many requests or other policy violations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/v1/schedules/{id}/metadata" : {
      "get" : {
        "summary" : "Get an employee shift schedule status with the given identifier",
        "operationId" : "getMetadata",
        "tags" : [ "Employee Shift Schedule" ],
        "parameters" : [ {
          "description" : "Unique identifier of the schedule",
          "required" : true,
          "name" : "id",
          "in" : "path",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "404" : {
            "description" : "In case request given schedule does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Returns scheduling with given identifier",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$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"
          },
          "429" : {
            "description" : "Too many requests or other policy violations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      },
      "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" : {
                  "$ref" : "#/components/schemas/Metadata"
                }
              }
            }
          },
          "404" : {
            "description" : "Dataset not found."
          },
          "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."
          }
        }
      }
    },
    "/v1/schedules/{id}/model-request" : {
      "get" : {
        "summary" : "Get complete input request for given schedule with given identifier",
        "operationId" : "getModelRequest",
        "tags" : [ "Employee Shift Schedule" ],
        "parameters" : [ {
          "description" : "Unique identifier of the schedule",
          "required" : true,
          "name" : "id",
          "in" : "path",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "404" : {
            "description" : "In case request given schedule does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Returns scheduling input with given identifier",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ModelRequestEmployeeScheduleEmployeeScheduleConfigOverrides"
                }
              }
            }
          },
          "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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/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" : [ "Employee Shift Schedule" ],
        "parameters" : [ {
          "description" : "Unique identifier of the schedule",
          "required" : true,
          "name" : "id",
          "in" : "path",
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "required" : false,
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ModelConfiguration2"
              }
            }
          }
        },
        "responses" : {
          "400" : {
            "description" : "In case request given does not meet expectations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "oneOf" : [ {
                    "$ref" : "#/components/schemas/ErrorInfo"
                  }, {
                    "$ref" : "#/components/schemas/ValidationErrorInfo"
                  } ]
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "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" : {
                      "description" : "The moment the run is submitted",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "startDateTime" : {
                      "description" : "The moment the run begins initializing",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "activeDateTime" : {
                      "description" : "The moment the solving phase begins",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "completeDateTime" : {
                      "description" : "The moment the solving phase concludes",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "shutdownDateTime" : {
                      "description" : "The moment the post-processing phase finishes",
                      "type" : "string",
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/OffsetDateTime"
                      } ],
                      "nullable" : true
                    },
                    "solverStatus" : {
                      "allOf" : [ {
                        "$ref" : "#/components/schemas/SolvingStatus"
                      } ],
                      "nullable" : true
                    },
                    "score" : {
                      "type" : "string",
                      "nullable" : true
                    },
                    "tags" : {
                      "uniqueItems" : true,
                      "type" : "array",
                      "items" : {
                        "type" : "string"
                      }
                    },
                    "validationResult" : {
                      "$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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/v1/schedules/{id}/recommendations/recommend-employees" : {
      "post" : {
        "summary" : "Calculates employee recommendations for the supplied shifts. This variant attempts to run the operation on the schedule with given id that was processed before to optimize processing time.",
        "operationId" : "recommend-employees-with-solved-model",
        "tags" : [ "Employee Shift 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"
          }
        } ],
        "requestBody" : {
          "required" : true,
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/RecommendEmployeesInput"
              }
            }
          }
        },
        "responses" : {
          "404" : {
            "description" : "In case request given schedule does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "400" : {
            "description" : "In case of invalid payload",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Employee recommendations successfully calculated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RecommendEmployeesResult"
                }
              }
            }
          },
          "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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/v1/schedules/{id}/run" : {
      "get" : {
        "summary" : "(Deprecated endpoint, please use /{id}/metadata instead) Get an employee shift schedule status with the given identifier",
        "operationId" : "getScheduleStatus",
        "deprecated" : true,
        "tags" : [ "Employee Shift Schedule" ],
        "parameters" : [ {
          "description" : "Unique identifier of the schedule",
          "required" : true,
          "name" : "id",
          "in" : "path",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "404" : {
            "description" : "In case request given schedule does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Returns scheduling with given identifier",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$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"
          },
          "429" : {
            "description" : "Too many requests or other policy violations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      },
      "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" : {
                  "$ref" : "#/components/schemas/Metadata"
                }
              }
            }
          },
          "404" : {
            "description" : "Dataset not found."
          },
          "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"
          }
        }
      }
    },
    "/v1/schedules/{id}/score-analysis" : {
      "get" : {
        "summary" : "Get score analysis for a schedule with the given identifier",
        "operationId" : "getScoreAnalysis",
        "tags" : [ "Employee Shift 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" : {
          "404" : {
            "description" : "In case request given schedule does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Score analysis for a schedule with the given identifier",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$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"
          },
          "429" : {
            "description" : "Too many requests or other policy violations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/v1/schedules/{id}/validation-result" : {
      "get" : {
        "summary" : "Get validation result of a dataset with the given identifier",
        "operationId" : "getValidationResult",
        "tags" : [ "Employee Shift Schedule" ],
        "parameters" : [ {
          "description" : "Unique identifier of the schedule",
          "required" : true,
          "name" : "id",
          "in" : "path",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "404" : {
            "description" : "In case the given dataset does not exist",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "500" : {
            "description" : "In case of processing errors",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          },
          "200" : {
            "description" : "Validation results of a dataset with the given identifier",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ValidationResultEmployeeScheduleValidationIssueDetail"
                }
              }
            }
          },
          "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" : {
                  "$ref" : "#/components/schemas/ErrorInfo"
                }
              }
            }
          }
        },
        "security" : [ {
          "auth" : [ ]
        } ]
      }
    },
    "/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" : {
                  "$ref" : "#/components/schemas/ModelResponseHardMediumSoftScoreOutputEmployeeScheduleEmployeeSchedulingInputMetricsEmployeeSchedulingOutputMetrics"
                }
              }
            }
          },
          "400" : {
            "description" : "In case dataset is still solving."
          },
          "404" : {
            "description" : "In case the requested dataset does not exist."
          },
          "401" : {
            "description" : "Missing or invalid API key."
          },
          "403" : {
            "description" : "API key used with this call does not have access to the operation."
          }
        }
      }
    }
  },
  "components" : {
    "schemas" : {
      "ActivationShiftInclude" : {
        "enum" : [ "MANDATORY_SHIFTS", "MANDATORY_AND_OPTIONAL_SHIFTS" ],
        "type" : "string"
      },
      "AllowOverlappingShiftsRule" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "AvoidShiftCloseToDayOffRequestRule" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "avoidPriorShiftTags" : {
            "description" : "Add the shift tags for shifts that should be avoided prior to a day off request.\nIf all of the tags must match set shiftTagsMatches to ALL.\nIf at least one of the tags must match set shiftTagsMatches to ANY.\nIf no tags are provided, the rule has no effect on shifts the day prior to a day off request.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "avoidAfterShiftTags" : {
            "description" : "Add the shift tags for shifts that should be avoided after a day off request.\nIf all of the tags must match set shiftTagsMatches to ALL.\nIf at least one of the tags must match set shiftTagsMatches to ANY.\nIf no tags are provided, the rule has no effect on shifts the day after a day off request.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how avoidPriorShiftTags and avoidAfterShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "satisfiability" : {
            "description" : "Defines satisfiability type of the rule.",
            "default" : "PROHIBITED",
            "enum" : [ "PROHIBITED", "UNPREFERRED" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "BalanceShiftCountJustification" : {
        "type" : "object",
        "properties" : {
          "employeeToShiftsWorked" : {
            "description" : "The number of shifts worked for every employee.",
            "type" : "object",
            "additionalProperties" : {
              "format" : "int64",
              "type" : "integer"
            }
          },
          "balanceShiftCountRule" : {
            "description" : "The balance shift count rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "BalanceShiftCountRule" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "includeEmployeeTags" : {
            "description" : "If defined, only employees containing these tags are balanced. With employeeTagMatches set to ALL, all tags defined here have to be present in the employee tags. With employeeTagMatches set to ANY, at least one tag defined here has to be present in the employee tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeEmployeeTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With employeeTagMatches set to ALL, all tags defined here cannot be present in the employee tags. With employeeTagMatches set to ANY, any of the tags defined here cannot be present in the employee tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "employeeTagMatches" : {
            "description" : "Defines how includeEmployeeTags and excludeEmployeeTags are matched against the employee tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "employeeToPublishedShiftCount" : {
            "description" : "Map of employees to the number of shifts they have worked historically. This is useful in continuous planning scenarios, where the historic data is part of the input dataset and it needs to be taken into account, for example to avoid the same employee always working holiday shifts.",
            "type" : "object",
            "additionalProperties" : {
              "format" : "int32",
              "type" : "integer"
            }
          }
        },
        "additionalProperties" : false
      },
      "BalanceShiftsWorkedForMinimumHourlyDemandJustification" : {
        "type" : "object",
        "properties" : {
          "hourlyDemandRule" : {
            "description" : "The hourly demand rule id.",
            "type" : "string"
          },
          "startDateTime" : {
            "description" : "The start date and time for the demand.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "endDateTime" : {
            "description" : "The end date and time for the demand.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "targetDemand" : {
            "format" : "int32",
            "description" : "The target demand.",
            "type" : "integer"
          },
          "shiftsWorked" : {
            "format" : "int32",
            "description" : "The number of shifts worked in the interval.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "BalanceTimeWorkedJustification" : {
        "type" : "object",
        "properties" : {
          "employeeToMinutesWorked" : {
            "description" : "The number of minutes worked for every employee.",
            "type" : "object",
            "additionalProperties" : {
              "format" : "int64",
              "type" : "integer"
            }
          },
          "balanceTimeWorkedRule" : {
            "description" : "The balance time worked rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "BalanceTimeWorkedRule" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "includeEmployeeTags" : {
            "description" : "If defined, only employees containing these tags are balanced. With employeeTagMatches set to ALL, all tags defined here have to be present in the employee tags. With employeeTagMatches set to ANY, at least one tag defined here has to be present in the employee tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeEmployeeTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With employeeTagMatches set to ALL, all tags defined here cannot be present in the employee tags. With employeeTagMatches set to ANY, any of the tags defined here cannot be present in the employee tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "employeeTagMatches" : {
            "description" : "Defines how includeEmployeeTags and excludeEmployeeTags are matched against the employee tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "employeeToPublishedMinutesWorked" : {
            "description" : "Map of employees to the number of minutes they have worked historically. This is useful in continuous planning scenarios, where the historic data is part of the input dataset and it needs to be taken into account, for example to avoid the same employee always working holiday shifts.",
            "type" : "object",
            "additionalProperties" : {
              "format" : "int32",
              "type" : "integer"
            }
          }
        },
        "additionalProperties" : false
      },
      "Break" : {
        "required" : [ "start", "end" ],
        "type" : "object",
        "properties" : {
          "start" : {
            "description" : "Start time of the break (inclusive).",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "end" : {
            "description" : "End time of the break (exclusive).",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "tags" : {
            "description" : "List of break tags. Use to express additional break data (e.g. for which rules the break is counted as working time).",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        },
        "additionalProperties" : false
      },
      "ConcurrentShiftsRule" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "ruleValidityDateTimeSpan" : {
            "description" : "Defines the time span in which the rule is valid. If not provided, the rule is always valid.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDateTimeSpan"
            } ],
            "nullable" : true
          },
          "timeZoneId" : {
            "format" : "timezone-id",
            "description" : "The timezone offset of the rule.",
            "default" : "Z",
            "type" : "string"
          },
          "concurrentShiftsMax" : {
            "format" : "int32",
            "description" : "Maximum number of concurrent shifts worked.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          }
        }
      },
      "ConsecutiveDaysOffInRollingWindowNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rollingWindowRule" : {
            "description" : "The rolling window rule id.",
            "type" : "string"
          },
          "dateTimeSpan" : {
            "description" : "The date time span during which the maximum number of consecutive days off is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DateTimeSpan"
            } ]
          },
          "maxConsecutiveDaysOff" : {
            "format" : "int64",
            "description" : "The maximum number of consecutive days off.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ConsecutiveDaysOffInRollingWindowNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rollingWindowRule" : {
            "description" : "The rolling window rule id.",
            "type" : "string"
          },
          "dateTimeSpan" : {
            "description" : "The date time span during which the maximum number of consecutive days off is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DateTimeSpan"
            } ]
          },
          "maxConsecutiveDaysOff" : {
            "format" : "int64",
            "description" : "The maximum number of consecutive days off.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ConsecutiveDaysOffLimit" : {
        "type" : "object",
        "properties" : {
          "consecutiveDaysOffMin" : {
            "format" : "int32",
            "description" : "Minimum number of consecutive days off.",
            "minimum" : 1,
            "type" : "integer",
            "nullable" : true
          }
        }
      },
      "ConsecutiveDaysOffPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of consecutive days off is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "consecutiveDaysOff" : {
            "format" : "int64",
            "description" : "The number of consecutive days off.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ConsecutiveDaysOffPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of consecutive days off is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "consecutiveDaysOff" : {
            "format" : "int64",
            "description" : "The number of consecutive days off.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ConsecutiveDaysWorkedNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "consecutiveDaysWorkedRule" : {
            "description" : "The consecutive days worked rule id.",
            "type" : "string"
          },
          "shiftTypeTagCategory" : {
            "description" : "The shift tag type category.",
            "type" : "string"
          },
          "sequenceStartDate" : {
            "description" : "The sequence start date.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDate"
            } ]
          },
          "sequenceEndDate" : {
            "description" : "The sequence end date.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDate"
            } ]
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ConsecutiveDaysWorkedNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "consecutiveDaysWorkedRule" : {
            "description" : "The consecutive days worked rule id.",
            "type" : "string"
          },
          "shiftTypeTagCategory" : {
            "description" : "The shift tag type category.",
            "type" : "string"
          },
          "sequenceStartDate" : {
            "description" : "The sequence start date.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDate"
            } ]
          },
          "sequenceEndDate" : {
            "description" : "The sequence end date.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDate"
            } ]
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ConsecutiveDaysWorkedRule" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "minimum" : {
            "format" : "int32",
            "description" : "Deprecated in combination with REQUIRED satisfiability, use PREFERRED satisfiabilty instead. Minimum number of consecutive days to work.",
            "type" : "integer",
            "nullable" : true
          },
          "maximum" : {
            "format" : "int32",
            "description" : "Maximum number of consecutive days to work.",
            "type" : "integer",
            "nullable" : true
          },
          "satisfiability" : {
            "default" : "REQUIRED",
            "enum" : [ "REQUIRED", "PREFERRED" ],
            "type" : "string"
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "shiftTypeTagCategories" : {
            "description" : "Shift categories. Used to express sequences of shifts having the same tag, for example morning and night. The shift must always have at most one tag defined by this attribute, meaning that the shift cannot have both morning and night tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "minDurationBetweenDifferentSequences" : {
            "description" : "The minimum delay (ISO 8601 duration) between the preceding sequence and the next sequence. Mutually exclusive with 'minDelayBetweenSequences'. Requires 'shiftTypeTagCategories' to be defined.",
            "default" : "PT0M",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "nullable" : true
          },
          "minDelayBetweenDifferentSequences" : {
            "description" : "The minimum date and time (specified as a temporal adjustment function, such as NEXT_DAY, NEXT_MONDAY) between the preceding sequence and the next sequence. Mutually exclusive with 'minDurationBetweenShifts'. Requires 'shiftTypeTagCategories' to be defined.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DelayTo"
            } ],
            "nullable" : true
          },
          "allowedSequenceStartDays" : {
            "description" : "Allowed start days of sequences. If the model plans no shifts on those days, the sequence can start on different subsequent days too. The solver will also prefer to start the sequence on one of these days. Requires 'shiftTypeTagCategories' to be defined.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/DayOfWeek"
            },
            "nullable" : true
          },
          "rewardCompactSequences" : {
            "description" : "If true, the solver will try to compact the sequences by removing empty days between them. Requires 'shiftTypeTagCategories' to be defined.",
            "default" : false,
            "type" : "boolean"
          },
          "overlapKind" : {
            "description" : "Defines how sequence is calculated. START_ONLY is used by default and checks for the start of a shift only. If START_AND_END is set, both the start and end of the shift will be used.",
            "default" : "START_ONLY",
            "enum" : [ "START_ONLY", "START_AND_END" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "ConsecutiveMinutesOffInRollingWindowNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rollingWindowRule" : {
            "description" : "The rolling window rule id.",
            "type" : "string"
          },
          "dateTimeSpan" : {
            "description" : "The date time span during which the maximum number of consecutive minutes off is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DateTimeSpan"
            } ]
          },
          "maxConsecutiveMinutesOff" : {
            "format" : "int64",
            "description" : "The maximum number of consecutive minutes off detected in the date span. If the rule uses 'consecutiveMinutesOffMinIntervals', this is calculated separately for every defined interval.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ConsecutiveMinutesOffInRollingWindowNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rollingWindowRule" : {
            "description" : "The rolling window rule id.",
            "type" : "string"
          },
          "dateTimeSpan" : {
            "description" : "The date time span during which the maximum number of consecutive minutes off is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DateTimeSpan"
            } ]
          },
          "maxConsecutiveMinutesOff" : {
            "format" : "int64",
            "description" : "The maximum number of consecutive minutes off detected in the date span. If the rule uses 'consecutiveMinutesOffMinIntervals', this is calculated separately for every defined interval.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ConsecutiveMinutesOffMinInterval" : {
        "type" : "object",
        "properties" : {
          "consecutiveMinutesOffMin" : {
            "format" : "int64",
            "description" : "Minimum number of consecutive minutes off an employee must take in the rolling window.",
            "minimum" : 1,
            "type" : "integer"
          },
          "count" : {
            "format" : "int64",
            "description" : "The number of times the related consecutive minutes off should be present in the rolling window.",
            "minimum" : 1,
            "type" : "integer"
          }
        }
      },
      "ConsecutiveWeekendsLimit" : {
        "type" : "object",
        "properties" : {
          "consecutiveWeekendsWorkedMax" : {
            "format" : "int32",
            "description" : "Maximum number of consecutive weekends worked.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "ConsecutiveWeekendsOffLimit" : {
        "type" : "object",
        "properties" : {
          "consecutiveWeekendsOffMin" : {
            "format" : "int32",
            "description" : "Minimum number of consecutive weekends off.",
            "minimum" : 2,
            "type" : "integer"
          }
        },
        "additionalProperties" : false
      },
      "ConsecutiveWeekendsOffPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of consecutive weekends off is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "consecutiveWeekendsOff" : {
            "format" : "int64",
            "description" : "The number of consecutive weekends off.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ConsecutiveWeekendsOffPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of consecutive weekends off is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "consecutiveWeekendsOff" : {
            "format" : "int64",
            "description" : "The number of consecutive weekends off.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ConsecutiveWeekendsWorkedPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of consecutive weekends worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "consecutiveWeekendsWorked" : {
            "format" : "int64",
            "description" : "The number of consecutive weekends worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ConsecutiveWeekendsWorkedPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of consecutive weekends worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "consecutiveWeekendsWorked" : {
            "format" : "int64",
            "description" : "The number of consecutive weekends worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "Contract" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the contract.",
            "type" : "string",
            "externalDocs" : {
              "description" : "Contracts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/employee-contracts"
            }
          },
          "priority" : {
            "description" : "Defines the priority of this contract. There are built in priorities, where 1 is the highest priority and 10 is the lowest priority. The default priority is 10.",
            "default" : "10",
            "type" : "string",
            "externalDocs" : {
              "description" : "Contracts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/employee-contracts"
            }
          },
          "consecutiveDaysWorkedRules" : {
            "description" : "Rules for minimum, or maximum consecutive days worked. Use this to control how many days in a row an employee with this contract are minimally (or maximally) required (or preferred) to work.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ConsecutiveDaysWorkedRule"
            },
            "externalDocs" : {
              "description" : "Consecutive days worked documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/work-limits/consecutive-days-worked"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "periodRules" : {
            "description" : "Rules tied to a period (e.g. DAY, WEEK, MONTH, SCHEDULE). Use this to express preference, or a requirement of employees to work a certain number of minutes / shifts / shift types / days in a period, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PeriodRule"
            },
            "externalDocs" : {
              "description" : "Contracts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/employee-contracts"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "avoidShiftCloseToDayOffRequestRules" : {
            "description" : "Rules tied to shifts near a day off. Use this to express preference, or a requirement of employees to avoid certain shifts before, or after a day off, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AvoidShiftCloseToDayOffRequestRule"
            },
            "externalDocs" : {
              "description" : "Shifts to avoid close to day off requests documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/time-off/avoid-shifts-close-to-day-off-requests"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "minutesBetweenShiftsRules" : {
            "description" : "Settings for the minimum, or maximum minutes between shifts. Use this to control how much time off an employee is required, or preferred to have between consecutive shifts, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/MinutesBetweenShiftsRule"
            },
            "externalDocs" : {
              "description" : "Minutes between shifts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-rotations-and-patterns/minutes-between-shifts"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "minimizeGapsBetweenShiftsRules" : {
            "description" : "Settings to minimize the gaps between shifts. Use this to prefer assigning employees to shifts that are close to each other, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/MinimizeGapsBetweenShiftsRule"
            },
            "externalDocs" : {
              "description" : "Minimize gaps between shifts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-rotations-and-patterns/minimize-gaps-between-shifts"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "dailyShiftPairingRules" : {
            "description" : "Settings for shifts that require pairing with another shift on the same or a different day. Use this to control what shifts are required, or preferred to be paired for the employee, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/DailyShiftPairingRule"
            },
            "externalDocs" : {
              "description" : "Daily shift pairings documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-rotations-and-patterns/daily-shift-pairings"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "allowOverlappingShiftsRules" : {
            "description" : "Settings for allowed shift overlaps. Use this to specify shifts that can overlap with other shifts, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AllowOverlappingShiftsRule"
            },
            "externalDocs" : {
              "description" : "Overlapping shifts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-rotations-and-patterns/overlapping-shifts"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "travelConfigurations" : {
            "description" : "List of travel rules between employee and shift locations. Each travel rule can limit the distance from the home location to the shift's location. Whether a rule applies, can be scoped by the given start and end of the rule.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PeriodicTravelConfiguration"
            },
            "externalDocs" : {
              "description" : "Shift travel and locations documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-travel-and-locations"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "disruptionRules" : {
            "description" : "List of disruption rules for employees assigned to this contract. Each disruption rule can control the penalty of disrupting specific shifts. Whether a rule applies can be scoped by a validity date-time span and shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ContractDisruptionRule"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "singleDayShiftSequencePatternRules" : {
            "description" : "Settings for shift sequence patterns that span across a single day. Use this to specify a sequence of shifts that should, or should not follow each other on the same day, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/SingleDayShiftSequencePatternRule"
            },
            "externalDocs" : {
              "description" : "Single day shift sequence patterns documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-rotations-and-patterns/single-day-shift-sequence-patterns"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "multiDayShiftSequencePatternRules" : {
            "description" : "Settings for shift sequence patterns that span across multiple days. Use this to specify chain of shifts that should, or should not follow each other on consecutive days, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/MultiDayShiftSequencePatternRule"
            },
            "externalDocs" : {
              "description" : "Multi-day shift sequence patterns documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-rotations-and-patterns/multi-day-shift-sequence-patterns"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "rollingWindowRules" : {
            "description" : "Settings for shift sequence patterns that span across multiple days. Use this to specify chain of shifts that should, or should not follow each other on consecutive days, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/RollingWindowRule"
            },
            "externalDocs" : {
              "description" : "Work limits documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/work-limits/work-limits"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "shiftRotationRules" : {
            "description" : "Configuration of shift rotation rules. Use this to configure rotation patterns of shifts, for example alternating a week of day shifts and a week of night shifts.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ShiftRotationRule"
            },
            "externalDocs" : {
              "description" : "Shift rotations documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-rotations-and-patterns/shift-rotations"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "weekendConfiguration" : {
            "description" : "Definition of a weekend. Use this to define the weekend days of the week, for example, Saturday and Sunday.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/WeekendConfiguration"
            } ],
            "externalDocs" : {
              "description" : "Work limits documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/work-limits/work-limits"
            }
          },
          "fteConfiguration" : {
            "description" : "Configuration of the full time equivalent (FTE). Some of the rules, such as 'Balance time worked' uses this information to spread the workload across the employees evenly.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/FteConfiguration"
            } ],
            "externalDocs" : {
              "description" : "Fairness documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/fairness/fairness"
            },
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "ContractDisruptionRule" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique string identifier of the configuration.",
            "type" : "string"
          },
          "validityDateTimeSpan" : {
            "description" : "Defines the time span in which the rule is valid. If not provided, the rule is always valid in the period configured.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDateTimeSpan"
            } ],
            "nullable" : true
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only shifts not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "satisfiability" : {
            "description" : "Defines satisfiability type of the rule.",
            "default" : "PREFERRED",
            "enum" : [ "REQUIRED", "PREFERRED" ],
            "type" : "string"
          },
          "disruptionWeight" : {
            "format" : "int32",
            "description" : "Defines the weight of the employee's disruption rule. A higher weight means that it is more important that we do not disrupt shifts for that employee.",
            "default" : 1,
            "minimum" : 1,
            "type" : "integer"
          },
          "scope" : {
            "description" : "The scope determines whether shifts should not count as disrupted, i.e. if they start or end within the scope. Note: This is an experimental API subject to change. There are no guarantees on backward compatibility.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DisruptionScope"
            } ],
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "CostDefinition" : {
        "required" : [ "baseHourlyCost" ],
        "type" : "object",
        "properties" : {
          "baseMinutesLimit" : {
            "format" : "number",
            "description" : "The time in minutes during which the base hourly cost is active. This field is required if any overtimeCostDetails are defined.",
            "minimum" : 1,
            "type" : "integer",
            "nullable" : true
          },
          "baseHourlyCost" : {
            "format" : "number",
            "description" : "The base cost. All time worked within the baseMinutesLimit will cost this amount per hour of work started.",
            "minimum" : 0,
            "type" : "number"
          },
          "overtimeCostDetails" : {
            "description" : "A list of costs and minute limits to define how much overtime costs. The order in which the overtime cost details are provided, is the order in which they will be processed.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OvertimeCostDetail"
            },
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "CostsPerPeriodNotInPreferredRangeJustification" : {
        "type" : "object",
        "properties" : {
          "costsRule" : {
            "description" : "The cost rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the cost is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "cost" : {
            "description" : "The cost.",
            "type" : "number"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "CostsPerPeriodNotInRequiredRangeJustification" : {
        "type" : "object",
        "properties" : {
          "costsRule" : {
            "description" : "The cost rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the cost is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "cost" : {
            "description" : "The cost.",
            "type" : "number"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "CostsRule" : {
        "required" : [ "id", "period" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique string identifier of the rule.",
            "type" : "string"
          },
          "period" : {
            "description" : "Period for which the rule is applicable, for example a month.",
            "type" : "string"
          },
          "zoneOffset" : {
            "description" : "The time zone offset of the rule period.",
            "default" : "Z",
            "type" : "string"
          },
          "includeEmployeeTags" : {
            "description" : "If defined, only employees containing these tags are balanced. With employeeTagMatches set to ALL, all tags defined here have to be present in the employee tags. With employeeTagMatches set to ANY, at least one tag defined here has to be present in the employee tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeEmployeeTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With employeeTagMatches set to ALL, all tags defined here cannot be present in the employee tags. With employeeTagMatches set to ANY, any of the tags defined here cannot be present in the employee tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "employeeTagMatches" : {
            "description" : "Defines how includeEmployeeTags and excludeEmployeeTags are matched against the employee tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "satisfiability" : {
            "description" : "Defines satisfiability type of the rule.",
            "default" : "REQUIRED",
            "enum" : [ "PREFERRED", "REQUIRED" ],
            "type" : "string"
          },
          "employeeShiftCostDetails" : {
            "description" : "List of employee and shift cost groups and their associated costs. The day is considered worked if the employee is assigned to at least one shift that starts on that day. Shifts that start on the previous day and end on the current day are not considered.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/EmployeeShiftCostDetail"
            }
          },
          "totalCostsMin" : {
            "description" : "Deprecated in combination with REQUIRED satisfiability, use PREFERRED satisfiabilty instead. Minimum total costs of shift assignments. In case there are no shifts that satisfy the rule’s filters, not attaining the minimum does cause the constraint violation",
            "type" : "number",
            "nullable" : true
          },
          "totalCostsMax" : {
            "description" : "Maximum total costs of shift assignments.",
            "type" : "number",
            "nullable" : true
          },
          "periodShiftOverlapKind" : {
            "description" : "Defines how overlap is calculated. START_ONLY is used by default and checks whether the start of a shift falls within a period. If START_AND_END is set, both the start and end of the shift will be used to check for an overlap with a period.",
            "default" : "START_ONLY",
            "enum" : [ "START_ONLY", "START_AND_END" ],
            "type" : "string"
          },
          "costsRuleShiftOverlapKind" : {
            "$ref" : "#/components/schemas/PeriodShiftOverlapKind"
          }
        },
        "additionalProperties" : false
      },
      "CustomPeriod" : {
        "required" : [ "id", "dateSpans" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the period.",
            "type" : "string"
          },
          "dateSpans" : {
            "description" : "List of date spans that define the period.",
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            }
          }
        },
        "additionalProperties" : false
      },
      "CustomRotationDurationInDaysNotExceedsRequiredMaximumForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "maximumDaysViolations" : {
            "description" : "The list of maximum days violations.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomRotationViolation"
            }
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "CustomRotationDurationInDaysNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "maximumDaysViolations" : {
            "description" : "The list of maximum days violations.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomRotationViolation"
            }
          },
          "minimumDaysViolations" : {
            "description" : "The list of minimum days violations.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomRotationViolation"
            }
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "CustomRotationPeriod" : {
        "description" : "Custom rotation period configuration. Use this to define flexible rotation periods with a minimum / maximum length, for example minimum 14 days, maximum 30 days.",
        "required" : [ "type" ],
        "type" : "object",
        "properties" : {
          "requiredRotationPeriodMaxSizeInDays" : {
            "format" : "int32",
            "description" : "Required maximum size of the rotation period in days.",
            "minimum" : 1,
            "type" : "integer",
            "nullable" : true
          },
          "preferredRotationPeriodMaxSizeInDays" : {
            "format" : "int32",
            "description" : "Preferred maximum size of the rotation period in days.",
            "minimum" : 1,
            "type" : "integer",
            "nullable" : true
          },
          "preferredRotationPeriodMinSizeInDays" : {
            "format" : "int32",
            "description" : "Preferred minimum size of the rotation period in days.",
            "minimum" : 1,
            "type" : "integer",
            "nullable" : true
          },
          "type" : {
            "description" : "Type identifier",
            "enum" : [ "CUSTOM" ],
            "type" : "string"
          }
        }
      },
      "CustomRotationViolation" : {
        "type" : "object",
        "properties" : {
          "rotationGroup" : {
            "type" : "string"
          },
          "dateSpan" : {
            "$ref" : "#/components/schemas/LocalDateSpan"
          },
          "violationSizeInDays" : {
            "format" : "int64",
            "type" : "integer"
          }
        }
      },
      "DailyShiftPairingRule" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "shiftTags" : {
            "description" : "If defined, shift containing these tags is matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "pairedShiftTags" : {
            "description" : "If defined, shift containing these tags is matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "dayOffset" : {
            "format" : "int32",
            "description" : "Day difference between start day of the shift matched by \"shiftTags\" attribute and the start day of the shift matched by \"pairedShiftTags\" attribute. Can be both positive, or negative.",
            "default" : 0,
            "type" : "integer"
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "satisfiability" : {
            "description" : "Defines satisfiability type of the rule.",
            "default" : "REQUIRED",
            "enum" : [ "PREFERRED", "UNPREFERRED", "PROHIBITED", "REQUIRED" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "DatasetSelector" : {
        "enum" : [ "UNSOLVED", "SOLVED" ],
        "type" : "string"
      },
      "DateAdjusterSpec" : {
        "enum" : [ "SAME_DAY", "NEXT_DAY", "NEXT_MONTH", "NEXT_MONDAY", "NEXT_TUESDAY", "NEXT_WEDNESDAY", "NEXT_THURSDAY", "NEXT_FRIDAY", "NEXT_SATURDAY", "NEXT_SUNDAY" ],
        "type" : "string"
      },
      "DateTimeSpan" : {
        "required" : [ "start", "end" ],
        "type" : "object",
        "properties" : {
          "start" : {
            "description" : "Start time of the period (inclusive).",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "end" : {
            "description" : "End time of the period (exclusive).",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          }
        },
        "additionalProperties" : false
      },
      "DayOfWeek" : {
        "enum" : [ "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" ],
        "type" : "string"
      },
      "DaysOffLimit" : {
        "type" : "object",
        "properties" : {
          "daysOffMax" : {
            "format" : "int32",
            "description" : "Maximum number of days off.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "daysOffMin" : {
            "format" : "int32",
            "description" : "Minimum number of days off.",
            "minimum" : 1,
            "type" : "integer",
            "nullable" : true
          },
          "includeDays" : {
            "description" : "The days of the week that will count towards the total.",
            "minimum" : 1,
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/DayOfWeek"
            },
            "nullable" : true
          }
        }
      },
      "DaysOffPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of days off is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "daysOff" : {
            "format" : "int64",
            "description" : "The number of days off.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "DaysOffPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of days off is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "daysOff" : {
            "format" : "int64",
            "description" : "The number of days off.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "DaysWorkedInRollingWindowNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rollingWindowRule" : {
            "description" : "The rolling window rule id.",
            "type" : "string"
          },
          "dateTimeSpan" : {
            "description" : "The date time span during which the number of days worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DateTimeSpan"
            } ]
          },
          "daysWorked" : {
            "format" : "int64",
            "description" : "The number of days worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "DaysWorkedInRollingWindowNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rollingWindowRule" : {
            "description" : "The rolling window rule id.",
            "type" : "string"
          },
          "dateTimeSpan" : {
            "description" : "The date time span during which the number of days worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DateTimeSpan"
            } ]
          },
          "daysWorked" : {
            "format" : "int64",
            "description" : "The number of days worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "DaysWorkedLimit" : {
        "type" : "object",
        "properties" : {
          "daysWorkedMax" : {
            "format" : "int32",
            "description" : "Maximum number of days an employee can work in the rolling window.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          }
        }
      },
      "DaysWorkedPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of days worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "daysWorked" : {
            "format" : "int64",
            "description" : "The number of days worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "DaysWorkedPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of days worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "daysWorked" : {
            "format" : "int64",
            "description" : "The number of days worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "DelayTo" : {
        "required" : [ "minStartDateAdjuster" ],
        "type" : "object",
        "properties" : {
          "minStartDateAdjuster" : {
            "description" : "The adjuster function for the date part of the delayed visit minimum start, such as NEXT_DAY, NEXT_MONDAY, etc.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DateAdjusterSpec"
            } ]
          },
          "minStartDateAdjusterIncrement" : {
            "format" : "int32",
            "description" : "The increment which determines how many times minStartDateAdjuster is applied.",
            "default" : 1,
            "minimum" : 1,
            "type" : "integer"
          },
          "minStartTime" : {
            "description" : "The time part (ISO 8601 local datetime) of the delayed visit minimum start (inclusive). The zone offset is taken either from the source date time, or from the timezone attribute, if supplied.",
            "default" : "00:00",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalTime"
            } ]
          }
        },
        "additionalProperties" : false
      },
      "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" : {
              "$ref" : "#/components/schemas/DemoDataConfigEntry"
            }
          }
        }
      },
      "DisruptionOverlapScope" : {
        "required" : [ "scopeType" ],
        "type" : "object",
        "properties" : {
          "scopeType" : {
            "description" : "Scope type identifier",
            "enum" : [ "START_AND_END", "OVERLAP" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "DisruptionRule" : {
        "required" : [ "id", "start", "end" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique string identifier of the rule.",
            "type" : "string"
          },
          "start" : {
            "description" : "Start of the date span for which the rule is applicable (inclusive).",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDate"
            } ]
          },
          "end" : {
            "description" : "End of the date span for which the rule is applicable (inclusive).",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDate"
            } ]
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "multiplier" : {
            "format" : "int32",
            "description" : "Defines multiplier for this rule, where 1 is the lowest multiplier and 5 is the highest multiplier. This allows to penalize schedule disruptions closer to the start of the planning window more than disruptions further away from the start of the planning window.",
            "default" : 1,
            "maximum" : 5,
            "minimum" : 1,
            "type" : "integer"
          }
        },
        "additionalProperties" : false
      },
      "DisruptionScope" : {
        "description" : "Base interface for disruption scopes. Note: This is an experimental API subject to change. There are no guarantees on backward compatibility.",
        "type" : "object",
        "oneOf" : [ {
          "$ref" : "#/components/schemas/DisruptionStartAndEndScope"
        }, {
          "$ref" : "#/components/schemas/DisruptionOverlapScope"
        } ],
        "discriminator" : {
          "propertyName" : "scopeType",
          "mapping" : {
            "START_AND_END" : "#/components/schemas/DisruptionStartAndEndScope",
            "OVERLAP" : "#/components/schemas/DisruptionOverlapScope"
          }
        }
      },
      "DisruptionStartAndEndScope" : {
        "required" : [ "startScopeInMinutes", "endScopeInMinutes", "scopeType" ],
        "type" : "object",
        "properties" : {
          "startScopeInMinutes" : {
            "format" : "int64",
            "description" : "The maximum number of minutes difference between a replanned shift's start and an initial shift's start.",
            "minimum" : 0,
            "type" : "integer"
          },
          "endScopeInMinutes" : {
            "format" : "int64",
            "description" : "The maximum number of minutes difference between a replanned shift's end and an initial shift's end.",
            "minimum" : 0,
            "type" : "integer"
          },
          "scopeType" : {
            "description" : "Scope type identifier",
            "enum" : [ "START_AND_END", "OVERLAP" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "Duration" : {
        "format" : "duration",
        "type" : "string",
        "example" : "P1D"
      },
      "DurationScope" : {
        "required" : [ "duration" ],
        "type" : "object",
        "properties" : {
          "duration" : {
            "description" : "The duration in ISO 8601 format.",
            "type" : "string"
          }
        }
      },
      "Employee" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the employee.",
            "type" : "string",
            "externalDocs" : {
              "description" : "Getting started documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/getting-started-with-employee-scheduling"
            }
          },
          "contracts" : {
            "description" : "List of employee contracts.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Getting started documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/getting-started-with-employee-scheduling"
            }
          },
          "priority" : {
            "description" : "Defines priority for employee. Employee preferences are more likely to be satisfied for employees with higher priority.",
            "type" : "string",
            "externalDocs" : {
              "description" : "Employee availability documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/employee-availability"
            },
            "anyOf" : [ {
              "$ref" : "#/components/schemas/LegacyPriority"
            }, {
              "$ref" : "#/components/schemas/Priority"
            }, {
              "type" : "string"
            } ],
            "nullable" : true
          },
          "costGroup" : {
            "description" : "Cost group of the employee. In conjunction with the cost group of the shift, it is used to calculate the cost of the shift assignment.",
            "type" : "string",
            "externalDocs" : {
              "description" : "Cost management documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/cost-management"
            },
            "nullable" : true
          },
          "location" : {
            "description" : "Location of the employee.",
            "maxItems" : 2,
            "minItems" : 2,
            "type" : "array",
            "items" : {
              "format" : "double",
              "type" : "number"
            },
            "externalDocs" : {
              "description" : "Shift travel and locations documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-travel-and-locations"
            },
            "example" : [ 40.5044403760272, -76.37894009358867 ],
            "nullable" : true
          },
          "skills" : {
            "description" : "List of employee skills, optionally including date time spans when a particular skill is valid. They are checked against the required and preferred skills of a shift.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Skill"
            },
            "externalDocs" : {
              "description" : "Skills and risk factors documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/skills-and-risk-factors"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "tags" : {
            "description" : "List of employee tags. They provide additional information that can be used to filter out specific employees (e.g. in balance shifts constraints).",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Shift tag types documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-type-diversity/shift-tag-types"
            }
          },
          "preferredShiftTags" : {
            "description" : "List of preferred shift tags. Use to express preference of employees to work specific shifts (e.g. shifts in a specific organizational unit).",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Shift tag types documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-type-diversity/shift-tag-types"
            }
          },
          "requiredShiftTags" : {
            "description" : "List of required shift tags. Use to express requirement of employees to work specific shifts (e.g. shifts in a specific organizational unit).",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Shift tag types documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-type-diversity/shift-tag-types"
            }
          },
          "preferredShiftTagsExpression" : {
            "description" : "Expression for preferred shift tags using AND/OR boolean logic. Mutually exclusive with preferredShiftTags.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ShiftTagOperandNode"
            } ],
            "externalDocs" : {
              "description" : "Shift tag types documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-type-diversity/shift-tag-types"
            },
            "nullable" : true
          },
          "requiredShiftTagsExpression" : {
            "description" : "Expression for required shift tags using AND/OR boolean logic. Mutually exclusive with requiredShiftTags.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ShiftTagOperandNode"
            } ],
            "externalDocs" : {
              "description" : "Shift tag types documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-type-diversity/shift-tag-types"
            },
            "nullable" : true
          },
          "prohibitedRiskFactors" : {
            "description" : "List of prohibited risk factors. Employees cannot be assigned to a shift that has any of their prohibited risk factors (e.g. selected employees cannot be exposed to COVID-19 shift).",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Skills and risk factors documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/skills-and-risk-factors"
            }
          },
          "preferredPairings" : {
            "description" : "List of preferred employee pairings. Use to express preference of employees to work together at the same time, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/EmployeePairing"
            },
            "externalDocs" : {
              "description" : "Pairing employees documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/pairing-employees"
            }
          },
          "unpreferredPairings" : {
            "description" : "List of unpreferred employee pairings. Use to express non-preference of employees to work together at the same time, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/EmployeePairing"
            },
            "externalDocs" : {
              "description" : "Pairing employees documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/pairing-employees"
            }
          },
          "requiredPairings" : {
            "description" : "List of required employee pairings. Use to express requirement of employees to work together at the same time, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/EmployeePairing"
            },
            "externalDocs" : {
              "description" : "Pairing employees documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/pairing-employees"
            }
          },
          "prohibitedPairings" : {
            "description" : "List of prohibited employee pairings. Use to prevent employees from working together at the same time, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/EmployeePairing"
            },
            "externalDocs" : {
              "description" : "Pairing employees documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/pairing-employees"
            }
          },
          "preferredTimeSpans" : {
            "description" : "List of preferred time spans. Use to express time spans where employee prefers to work, optionally only for shifts with specific tags.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TagAwareDateTimeSpan"
            },
            "externalDocs" : {
              "description" : "Employee availability documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/employee-availability"
            }
          },
          "unpreferredTimeSpans" : {
            "description" : "List of unpreferred time spans. Use to express time spans where employee does not prefer to work, optionally only for shifts with specific tags.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TagAwareDateTimeSpan"
            },
            "externalDocs" : {
              "description" : "Employee availability documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/employee-availability"
            }
          },
          "unavailableTimeSpans" : {
            "description" : "List of unavailable time spans. Use to express time spans where employee cannot work (e.g. time off), optionally only for shifts with specific tags.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TagAwareDateTimeSpan"
            },
            "externalDocs" : {
              "description" : "Employee availability documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/employee-availability"
            }
          },
          "availableTimeSpans" : {
            "description" : "List of available time spans. Use to express time spans the employee is available to work, optionally only for shifts with specific tags.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TagAwareDateTimeSpan"
            },
            "externalDocs" : {
              "description" : "Employee availability documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/employee-availability"
            }
          },
          "zoneOffset" : {
            "description" : "The home time zone offset of the employee.",
            "default" : "Z",
            "type" : "string",
            "deprecated" : true
          },
          "timeZoneId" : {
            "format" : "timezone-id",
            "description" : "The home time zone ID of the employee.",
            "default" : "Z",
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "EmployeeAssignmentDisruptedOnReplanningJustification" : {
        "type" : "object",
        "properties" : {
          "currentEmployee" : {
            "description" : "The id of the employee that is currently assigned.",
            "type" : "string"
          },
          "originalEmployee" : {
            "description" : "The id of the employee that was originally assigned.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The shift id.",
            "type" : "string"
          },
          "disruptionRule" : {
            "description" : "The disruption rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeCostGroup" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the cost group.",
            "type" : "string"
          },
          "employeeActivationCost" : {
            "description" : "Activation cost of an employee with this cost group.",
            "multipleOf" : 1.0,
            "maximum" : 1000,
            "minimum" : 0,
            "type" : "number",
            "nullable" : true
          },
          "employeeActivationRatioWeight" : {
            "format" : "int32",
            "description" : "Activation ratio weight of employees with this cost group compared to other cost groups. For example, if this cost group has a ratio of 2 and other cost group has a ratio of 1, the solver will aim to activate twice as many employees with this cost group compared to the other cost group.",
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "nullable" : true
          },
          "activationShiftInclude" : {
            "description" : "Which shifts to include when calculating employee activation.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ActivationShiftInclude"
            } ]
          }
        },
        "additionalProperties" : false
      },
      "EmployeeDoesNotHavePreferredDailyShiftPairingJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the shift doesn't have its preferred daily shift pairing.",
            "type" : "string"
          },
          "dailyShiftPairingRule" : {
            "description" : "The daily shift pairing rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeDoesNotHaveRequiredDailyShiftPairingJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the shift that doesn't have it's required daily shift pairing.",
            "type" : "string"
          },
          "dailyShiftPairingRule" : {
            "description" : "The daily shift pairing rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeDoesNotWorkDuringAvailableTimeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the shift that doesn't fall during the employee's available time.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeDoesNotWorkRequiredMultiDayShiftSequencePatternJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "matchSequences" : {
            "description" : "The list of pattern match sequences.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PatternMatchSequence"
            }
          },
          "patternRule" : {
            "description" : "The multi days shift sequence pattern rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeDoesNotWorkRequiredSingleDayShiftSequencePatternJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "matchSequence" : {
            "description" : "The pattern match sequence.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PatternMatchSequence"
            } ]
          },
          "patternRule" : {
            "description" : "The single day shift sequence pattern rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeHasProhibitedDailyShiftPairingJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift1" : {
            "description" : "The id of the first shift of the prohibited daily shift pair.",
            "type" : "string"
          },
          "shift2" : {
            "description" : "The id of the second shift of the prohibited daily shift pair.",
            "type" : "string"
          },
          "dailyShiftPairingRule" : {
            "description" : "The id of the daily shift pairing rule.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeHasProhibitedRiskFactorAssociatedWithShiftJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the shift that has prohibited risk factors.",
            "type" : "string"
          },
          "riskFactors" : {
            "description" : "The list of risk factors.",
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeHasProhibitedShiftNearDayOffRequestJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the prohibited shift.",
            "type" : "string"
          },
          "avoidShiftCloseToDayOffRequestRule" : {
            "description" : "The id of the avoid shift close to day off request rule.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeHasUnpreferredDailyShiftPairingJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift1" : {
            "description" : "The id of the first shift of the unpreferred daily shift pair.",
            "type" : "string"
          },
          "shift2" : {
            "description" : "The id of the second shift of the unpreferred daily shift pair.",
            "type" : "string"
          },
          "dailyShiftPairingRule" : {
            "description" : "The id of the daily shift pairing rule.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeHasUnpreferredShiftNearDayOffRequestJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the unpreferred shift.",
            "type" : "string"
          },
          "avoidShiftCloseToDayOffRequestRule" : {
            "description" : "The id of the avoid shift close to day off request rule.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeIsNotPairedWithRequiredEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee1" : {
            "description" : "The id of the first employee of the unfulfilled required pairing.",
            "type" : "string"
          },
          "employee2" : {
            "description" : "The id of the second employee of the unfulfilled required pairing (null if the pairing is tag-based).",
            "type" : "string",
            "nullable" : true
          },
          "tags" : {
            "description" : "The list of tags of the unfulfilled required pairing (null if the pairing is id-based).",
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "nullable" : true
          },
          "shift" : {
            "description" : "The id of the shift.",
            "type" : "string"
          },
          "employeePairing" : {
            "description" : "The unfulfilled required pairing.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/EmployeePairing"
            } ]
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeIsPairedWithPreferredEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee1" : {
            "description" : "The id of the first employee of the unfulfilled preferred pairing.",
            "type" : "string"
          },
          "employee2" : {
            "description" : "The id of the second employee of the unfulfilled preferred pairing (null if the pairing is tag-based).",
            "type" : "string",
            "nullable" : true
          },
          "tags" : {
            "description" : "The list of tags of the unfulfilled preferred pairing (null if the pairing is id-based).",
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "nullable" : true
          },
          "shift1" : {
            "description" : "The id of the first shift.",
            "type" : "string"
          },
          "shift2" : {
            "description" : "The id of the second shift.",
            "type" : "string"
          },
          "employeePairing" : {
            "description" : "The unfulfilled preferred pairing.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/EmployeePairing"
            } ]
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeIsPairedWithProhibitedEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee1" : {
            "description" : "The id of the first employee of the unfulfilled prohibited pairing.",
            "type" : "string"
          },
          "employee2" : {
            "description" : "The id of the second employee of the unfulfilled prohibited pairing (null if the pairing is tag-based).",
            "type" : "string",
            "nullable" : true
          },
          "tags" : {
            "description" : "The list of tags of the unfulfilled prohibited pairing (null if the pairing is id-based).",
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "nullable" : true
          },
          "shift1" : {
            "description" : "The id of the first shift.",
            "type" : "string"
          },
          "shift2" : {
            "description" : "The id of the second shift.",
            "type" : "string"
          },
          "employeePairing" : {
            "description" : "The unfulfilled prohibited pairing.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/EmployeePairing"
            } ]
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeIsPairedWithUnpreferredEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee1" : {
            "description" : "The id of the first employee of the unfulfilled unpreferred pairing.",
            "type" : "string"
          },
          "employee2" : {
            "description" : "The id of the second employee of the unfulfilled unpreferred pairing (null if the pairing is tag-based).",
            "type" : "string",
            "nullable" : true
          },
          "tags" : {
            "description" : "The list of tags of the unfulfilled unpreferred pairing (null if the pairing is id-based).",
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "nullable" : true
          },
          "shift1" : {
            "description" : "The id of the first shift.",
            "type" : "string"
          },
          "shift2" : {
            "description" : "The id of the second shift.",
            "type" : "string"
          },
          "employeePairing" : {
            "description" : "The unfulfilled unpreferred pairing.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/EmployeePairing"
            } ]
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeOutputMetrics" : {
        "description" : "Note: This is an experimental API subject to change. There are no guarantees on backward compatibility. Employee metrics. These provide aggregated stats for a specific employee, such as number of shifts worked.",
        "type" : "object",
        "properties" : {
          "assignedShifts" : {
            "format" : "int32",
            "description" : "The number of shifts assigned to this employee.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10
          },
          "durationWorked" : {
            "description" : "The total duration of all shifts assigned to this employee.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT40H"
          },
          "durationOfTimePreferencesMet" : {
            "description" : "The total duration of preferences met for this employee.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT8H",
            "nullable" : true
          },
          "durationOfTimeUnpreferencesViolated" : {
            "description" : "The total duration of unpreferences violated for this employee.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT8H",
            "nullable" : true
          },
          "disruptedShifts" : {
            "format" : "int32",
            "description" : "The number of shifts disrupted for this employee.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 5,
            "nullable" : true
          },
          "durationOfDisruptedShifts" : {
            "description" : "The total duration of disrupted shifts for this employee.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT8H",
            "nullable" : true
          },
          "incomingDisruptedShifts" : {
            "format" : "int32",
            "description" : "The number of incoming disrupted shifts for this employee (shifts assigned to this employee that were originally assigned to someone else or unassigned).",
            "type" : "integer",
            "readOnly" : true,
            "example" : 3,
            "nullable" : true
          },
          "durationOfIncomingDisruptedShifts" : {
            "description" : "The total duration of incoming disrupted shifts for this employee.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT8H",
            "nullable" : true
          },
          "outgoingDisruptedShifts" : {
            "format" : "int32",
            "description" : "The number of outgoing disrupted shifts for this employee (shifts originally assigned to this employee that are now assigned elsewhere or unassigned).",
            "type" : "integer",
            "readOnly" : true,
            "example" : 2,
            "nullable" : true
          },
          "durationOfOutgoingDisruptedShifts" : {
            "description" : "The total duration of outgoing disrupted shifts for this employee.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT8H",
            "nullable" : true
          },
          "overtimeThresholdDuration" : {
            "description" : "Estimated overtime threshold duration for this employee (derived from weekly period rules). Any duration worked beyond this threshold is considered overtime. The threshold is taken from the PREFERRED weekly rule when exactly one is defined. If no PREFERRED rule exists, it falls back to the REQUIRED weekly rule. Null when multiple PREFERRED weekly rules are defined (ambiguous), or when no weekly rules are defined at all.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT40H",
            "nullable" : true
          },
          "overtimeWorked" : {
            "description" : "Estimated total overtime worked (derived from weekly period rules). Calculated as the duration worked beyond the overtime threshold. Null when multiple PREFERRED weekly rules are defined (ambiguous), or when no weekly rules are defined at all.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT40H",
            "nullable" : true
          },
          "maximumAvailabilityDuration" : {
            "description" : "Estimated maximum availability duration for this employee (derived from weekly period rules).",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT48H",
            "nullable" : true
          },
          "costDefinitionTotalCost" : {
            "description" : "The cost of the employee's schedule, as per their cost definitions.",
            "type" : "number",
            "readOnly" : true,
            "example" : 5,
            "nullable" : true
          },
          "costDefinitionOvertimeDuration" : {
            "description" : "The overtime duration in the employee's schedule, calculated based on the cost definitions.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT48M",
            "nullable" : true
          }
        }
      },
      "EmployeePairing" : {
        "type" : "object",
        "properties" : {
          "pairedEmployee" : {
            "description" : "Unique identifier of the paired employee. Each employee pairing can only specify 'includeEmployeeWithTags', or 'pairedEmployee', not both.",
            "type" : "string"
          },
          "includeEmployeeWithTags" : {
            "description" : "The tags defining which employees can be paired. Each employee pairing can only specify 'includeEmployeeWithTags', or 'pairedEmployee', not both.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "onlyForShiftTags" : {
            "description" : "If defined, only shifts containing at least one tag defined here are matched.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        },
        "additionalProperties" : false
      },
      "EmployeeSchedule" : {
        "type" : "object",
        "properties" : {
          "tagTypes" : {
            "description" : "List of tag types, for example 'Country'.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TagType"
            },
            "externalDocs" : {
              "description" : "Shift tag types documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-type-diversity/shift-tag-types"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "tags" : {
            "description" : "List of tags associated with a tag type, for example 'Belgium'.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Tag"
            },
            "externalDocs" : {
              "description" : "Shift tag types documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-type-diversity/shift-tag-types"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "contracts" : {
            "description" : "List of employee contracts.",
            "minItems" : 1,
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Contract"
            },
            "externalDocs" : {
              "description" : "Contracts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/employee-contracts"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "employees" : {
            "description" : "List of employees.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Employee"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "shifts" : {
            "description" : "List of shifts to be assigned to employees. Possibly contains historic shifts that are already assigned.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Shift"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "shiftGroups" : {
            "description" : "List of shift groups.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ShiftGroup"
            },
            "externalDocs" : {
              "description" : "Alternative shifts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/alternative-shifts"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "employeeCostGroups" : {
            "description" : "List of employee cost groups. Allows to manage employee activation.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/EmployeeCostGroup"
            },
            "externalDocs" : {
              "description" : "Cost management documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/cost-management"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "scheduleParameterization" : {
            "description" : "Schedule parameterization. Allows definition of periods, constraint weights and similar.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ScheduleParameterization"
            } ]
          },
          "globalRules" : {
            "description" : "List of global rules that apply to the entire schedule, as opposed to rules defined in individual contracts.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/GlobalRules"
            } ]
          },
          "planningWindow" : {
            "description" : "The time period that the plan is for, e.g. we are assigning shifts for the week of 2024-01-01 to 2024-01-07.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PlanningWindow"
            } ],
            "externalDocs" : {
              "description" : "Planning window documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/user-guide/planning-window"
            },
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "EmployeeScheduleConfigOverrides" : {
        "description" : "Definition of soft constraint weights. Every constraint has a default weight of 1, meaning that all constraints are equally important. Use this to express preference of some constraints over others. For example, in order to express that the employee pairing constraint is more important than the rest of the constraints, set the value of the employeeIsPairedWithPreferredEmployeeWeight attribute to 10. In order to turn off a constraint, set the value of the corresponding attribute to 0.",
        "type" : "object",
        "properties" : {
          "balanceShiftCountWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "balanceShiftsWorkedForMinimumHourlyDemandWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "balanceTimeWorkedWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "consecutiveDaysOffInRollingWindowNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "consecutiveDaysOffPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "consecutiveDaysWorkedNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "consecutiveMinutesOffInRollingWindowNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "consecutiveWeekendsWorkedPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "consecutiveWeekendsOffPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "costsPerPeriodNotInPreferredRangeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "customRotationDurationInDaysNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "daysOffPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "daysWorkedInRollingWindowNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "daysWorkedPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "employeeAssignmentDisruptedOnReplanningWeight" : {
            "format" : "int64",
            "description" : "Deprecated in favor of 'contract.disruptionRules' with 'minimizeOutgoingDisruptionForEmployeeWeight' and 'minimizeIncomingDisruptionForEmployeeWeight'.",
            "minimum" : 0,
            "type" : "integer",
            "deprecated" : true
          },
          "employeeDoesNotHavePreferredDailyShiftPairingWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "employeeHasUnpreferredDailyShiftPairingWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "employeeHasUnpreferredShiftNearDayOffRequestWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "employeeIsPairedWithPreferredEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "employeeIsPairedWithUnpreferredEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "employeeWorksCompactSequenceWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "employeeWorksDuringPreferredTimeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "employeeWorksDuringUnpreferredTimeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "employeeWorksPreferredMultiDayShiftSequencePatternWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "employeeWorksPreferredSingleDayShiftSequencePatternWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "employeeWorksShiftWithPreferredShiftTagsWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "employeeWorksUnpreferredMultiDayShiftSequencePatternWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "employeeWorksUnpreferredSingleDayShiftSequencePatternWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "keepEmployeeActivationRatioWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "locationsWorkedPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "maximizeActivatedEmployeeSaturationWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "minimizeActivatedEmployeesWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "minimizeCostPerPeriodWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "minimizeGapsBetweenShiftsForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "minimizeIncomingDisruptionForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "minimizeOutgoingDisruptionForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "minimizePreferredScopedDisruptionForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "minimizeTravelDistanceWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "minutesBetweenShiftsNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "minutesLoggedPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "minutesWorkedInRollingWindowNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "minutesWorkedPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "preferredEmployeeAssignedWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "preferredMinimumTimeBetweenDifferentSequencesNotMetForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "preferredSequenceStartDayMetForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "preferredShiftRotationNotMetForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "preferredSkillMissingWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "sequenceEndsOnAllowedSequenceStartDayForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "shiftStartTimeDifferenceInMinutesPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "shiftTypesWorkedPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "shiftsWorkedInRollingWindowNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "shiftsWorkedNotInPreferredHourlyDemandRangeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "shiftsWorkedPerPeriodNotInPreferredRangeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "shiftsWorkedPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "unassignedOptionalShiftWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "uniqueTagsPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "unpreferredEmployeeAssignedWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "weekendMinutesWorkedPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "weekendsWorkedInRollingWindowNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          },
          "weekendsWorkedPerPeriodNotInPreferredRangeForEmployeeWeight" : {
            "format" : "int64",
            "minimum" : 0,
            "type" : "integer"
          }
        },
        "additionalProperties" : false
      },
      "EmployeeScheduleValidationIssueDetail" : {
        "type" : "object"
      },
      "EmployeeSchedulingInputMetrics" : {
        "type" : "object",
        "properties" : {
          "employees" : {
            "format" : "number",
            "title" : "Employees",
            "description" : "The number of employees in the input dataset.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "x-tf-priority" : "1",
            "x-tf-example" : "10"
          },
          "shifts" : {
            "format" : "number",
            "title" : "Shifts",
            "description" : "The number of all shifts in the input dataset.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "x-tf-priority" : "2",
            "x-tf-example" : "10"
          },
          "pinnedShifts" : {
            "format" : "number",
            "title" : "Pinned shifts",
            "description" : "The number of all pinned shifts in the input dataset.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "x-tf-priority" : "3",
            "x-tf-example" : "10"
          },
          "mandatoryShifts" : {
            "format" : "number",
            "title" : "Mandatory shifts",
            "description" : "The number of all mandatory shifts in the input dataset.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "x-tf-priority" : "4",
            "x-tf-example" : "10"
          },
          "optionalShifts" : {
            "format" : "number",
            "title" : "Optional shifts",
            "description" : "The number of all optional shifts in the input dataset.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "x-tf-priority" : "5",
            "x-tf-example" : "10"
          },
          "standaloneShifts" : {
            "format" : "number",
            "title" : "Standalone shifts",
            "description" : "The number of shifts not part of any shift group. Null if no shift groups are defined in the input dataset.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "nullable" : true,
            "x-tf-priority" : "6",
            "x-tf-example" : "10"
          },
          "standalonePinnedShifts" : {
            "format" : "number",
            "title" : "Standalone pinned shifts",
            "description" : "The number of pinned shifts not part of any shift group. Null if no shift groups are defined in the input dataset.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "nullable" : true,
            "x-tf-priority" : "7",
            "x-tf-example" : "10"
          },
          "standaloneMandatoryShifts" : {
            "format" : "number",
            "title" : "Standalone mandatory shifts",
            "description" : "The number of mandatory shifts not part of any shift group. Null if no shift groups are defined in the input dataset.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "nullable" : true,
            "x-tf-priority" : "8",
            "x-tf-example" : "10"
          },
          "standaloneOptionalShifts" : {
            "format" : "number",
            "title" : "Standalone optional shifts",
            "description" : "The number of optional shifts not part of any shift group. Null if no shift groups are defined in the input dataset.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "nullable" : true,
            "x-tf-priority" : "9",
            "x-tf-example" : "10"
          },
          "shiftGroups" : {
            "format" : "number",
            "title" : "Shift groups",
            "description" : "The number of shift groups. Null if no shift groups are defined in the input dataset.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "nullable" : true,
            "x-tf-priority" : "10",
            "x-tf-example" : "10"
          },
          "shiftGroupShifts" : {
            "format" : "number",
            "title" : "Shift group shifts",
            "description" : "The number of shifts that are part of a shift group. Null if no shift groups are defined in the input dataset.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "nullable" : true,
            "x-tf-priority" : "11",
            "x-tf-example" : "10"
          }
        }
      },
      "EmployeeSchedulingJustification" : {
        "type" : "object",
        "properties" : {
          "description" : {
            "type" : "string"
          }
        },
        "oneOf" : [ {
          "$ref" : "#/components/schemas/BalanceShiftCountJustification"
        }, {
          "$ref" : "#/components/schemas/BalanceShiftsWorkedForMinimumHourlyDemandJustification"
        }, {
          "$ref" : "#/components/schemas/BalanceTimeWorkedJustification"
        }, {
          "$ref" : "#/components/schemas/ConsecutiveDaysOffInRollingWindowNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ConsecutiveDaysOffInRollingWindowNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ConsecutiveDaysOffPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ConsecutiveDaysOffPerPeriodNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ConsecutiveDaysWorkedNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ConsecutiveDaysWorkedNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ConsecutiveMinutesOffInRollingWindowNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ConsecutiveMinutesOffInRollingWindowNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ConsecutiveWeekendsOffPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ConsecutiveWeekendsOffPerPeriodNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ConsecutiveWeekendsWorkedPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ConsecutiveWeekendsWorkedPerPeriodNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/CostsPerPeriodNotInPreferredRangeJustification"
        }, {
          "$ref" : "#/components/schemas/CostsPerPeriodNotInRequiredRangeJustification"
        }, {
          "$ref" : "#/components/schemas/CustomRotationDurationInDaysNotExceedsRequiredMaximumForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/CustomRotationDurationInDaysNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/DaysOffPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/DaysOffPerPeriodNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/DaysWorkedInRollingWindowNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/DaysWorkedInRollingWindowNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/DaysWorkedPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/DaysWorkedPerPeriodNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeAssignmentDisruptedOnReplanningJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeDoesNotHavePreferredDailyShiftPairingJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeDoesNotHaveRequiredDailyShiftPairingJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeDoesNotWorkDuringAvailableTimeJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeDoesNotWorkRequiredMultiDayShiftSequencePatternJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeDoesNotWorkRequiredSingleDayShiftSequencePatternJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeHasProhibitedDailyShiftPairingJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeHasProhibitedRiskFactorAssociatedWithShiftJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeHasProhibitedShiftNearDayOffRequestJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeHasUnpreferredDailyShiftPairingJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeHasUnpreferredShiftNearDayOffRequestJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeIsNotPairedWithRequiredEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeIsPairedWithPreferredEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeIsPairedWithProhibitedEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeIsPairedWithUnpreferredEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeWorksCompactSequenceJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeWorksDuringPreferredTimeJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeWorksDuringUnavailableTimeJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeWorksDuringUnpreferredTimeJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeWorksPreferredMultiDayShiftSequencePatternJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeWorksPreferredSingleDayShiftSequencePatternJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeWorksProhibitedMultiDayShiftSequencePatternJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeWorksProhibitedSingleDayShiftSequencePatternJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeWorksShiftWithNonMatchingRequiredShiftTagsJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeWorksShiftWithPreferredShiftTagsJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeWorksUnpreferredMultiDayShiftSequencePatternJustification"
        }, {
          "$ref" : "#/components/schemas/EmployeeWorksUnpreferredSingleDayShiftSequencePatternJustification"
        }, {
          "$ref" : "#/components/schemas/KeepEmployeeActivationRatioJustification"
        }, {
          "$ref" : "#/components/schemas/LocationsWorkedPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/LocationsWorkedPerPeriodNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/MaximizeActivatedEmployeeSaturationJustification"
        }, {
          "$ref" : "#/components/schemas/MaximumEmployeeToShiftTravelDistanceExceededJustification"
        }, {
          "$ref" : "#/components/schemas/MinimizeActivatedEmployeesJustification"
        }, {
          "$ref" : "#/components/schemas/MinimizeCostPerPeriodJustification"
        }, {
          "$ref" : "#/components/schemas/MinimizeGapsBetweenShiftsForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/MinimizeIncomingDisruptionPerEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/MinimizeOutgoingDisruptionPerEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/MinimizePreferredScopedDisruptionPerEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/MinimizeTravelDistanceJustification"
        }, {
          "$ref" : "#/components/schemas/MinimumTimeBetweenShiftsIncludingTravelNotMetJustification"
        }, {
          "$ref" : "#/components/schemas/MinutesBetweenShiftsNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/MinutesBetweenShiftsNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/MinutesLoggedPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/MinutesLoggedPerPeriodNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/MinutesWorkedInRollingWindowNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/MinutesWorkedInRollingWindowNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/MinutesWorkedPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/MinutesWorkedPerPeriodNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/OverlappingShiftJustification"
        }, {
          "$ref" : "#/components/schemas/PreferredEmployeeAssignedJustification"
        }, {
          "$ref" : "#/components/schemas/PreferredSequenceStartDayMetForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/PreferredShiftRotationNotMetForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/PreferredSkillMissingJustification"
        }, {
          "$ref" : "#/components/schemas/ProhibitedEmployeeAssignedJustification"
        }, {
          "$ref" : "#/components/schemas/RequiredScopedDisruptionPerEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/RequiredSequenceStartDayNotMetForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/RequiredShiftGroupAssignmentModeNotMetJustification"
        }, {
          "$ref" : "#/components/schemas/RequiredShiftRotationNotMetForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/RequiredSkillMissingJustification"
        }, {
          "$ref" : "#/components/schemas/ShiftStartTimeDifferenceInMinutesPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ShiftStartTimeDifferenceInMinutesPerPeriodNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ShiftTypesWorkedPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ShiftTypesWorkedPerPeriodNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ShiftsWorkedInRollingWindowNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ShiftsWorkedInRollingWindowNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ShiftsWorkedNotInPreferredHourlyDemandRangeJustification"
        }, {
          "$ref" : "#/components/schemas/ShiftsWorkedNotInRequiredHourlyDemandRangeJustification"
        }, {
          "$ref" : "#/components/schemas/ShiftsWorkedPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ShiftsWorkedPerPeriodNotInPreferredRangeJustification"
        }, {
          "$ref" : "#/components/schemas/ShiftsWorkedPerPeriodNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/ShiftsWorkedPerPeriodNotInRequiredRangeJustification"
        }, {
          "$ref" : "#/components/schemas/UnassignedOptionalShiftJustification"
        }, {
          "$ref" : "#/components/schemas/UnassignedShiftJustification"
        }, {
          "$ref" : "#/components/schemas/UniqueTagsPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/UniqueTagsPerPeriodNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/UnpreferredEmployeeAssignedJustification"
        }, {
          "$ref" : "#/components/schemas/WeekendMinutesWorkedPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/WeekendMinutesWorkedPerPeriodNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/WeekendsWorkedInRollingWindowNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/WeekendsWorkedInRollingWindowNotInRequiredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/WeekendsWorkedPerPeriodNotInPreferredRangeForEmployeeJustification"
        }, {
          "$ref" : "#/components/schemas/WeekendsWorkedPerPeriodNotInRequiredRangeForEmployeeJustification"
        } ]
      },
      "EmployeeSchedulingOutputMetrics" : {
        "type" : "object",
        "properties" : {
          "assignedShifts" : {
            "format" : "number",
            "title" : "Assigned shifts",
            "description" : "The number of shifts assigned to an employee in this schedule. Only shifts that are not part of a shift group are included in this metric.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "x-tf-priority" : "1",
            "x-tf-example" : "10"
          },
          "unassignedShifts" : {
            "format" : "number",
            "title" : "Unassigned shifts",
            "description" : "The number of shifts that could not be assigned to an employee in this schedule. Only shifts that are not part of a shift group are included in this metric.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "x-tf-priority" : "2",
            "x-tf-example" : "10"
          },
          "workingTimeFairnessPercentage" : {
            "format" : "percentage",
            "title" : "Working time fairness",
            "description" : "This percentage indicates how fair a given solution is in terms of how many hours employees are assigned. The higher the percentage, the more equally distributed the working time is between employees. The value is null if no fairness rules were defined.",
            "type" : "number",
            "readOnly" : true,
            "example" : 95.98,
            "nullable" : true,
            "x-tf-example" : "95.98%",
            "x-tf-priority" : "6"
          },
          "disruptionPercentage" : {
            "format" : "percentage",
            "title" : "Disruption percentage",
            "description" : "When an existing schedule is posted, this KPI represents the percentage of shifts that were disrupted, i.e. assigned a different employee. If the provided schedule didn't have any assigned shifts, the value will be 0%.",
            "type" : "number",
            "readOnly" : true,
            "example" : 11.01,
            "x-tf-example" : "11.01%",
            "x-tf-priority" : "9"
          },
          "averageDurationOfEmployeesPreferencesMet" : {
            "title" : "Average duration of employees' preferences met",
            "description" : "The average number of time (defined in the ISO 8601 format) employees' preferences are met for preferred employee pairings, time spans, and shifts.\nThis metric represents how the employees' preferences are being accounted for.\nPortions of shifts may be counted multiple times if they meet multiple preferences. \n(This KPI is experimental and subject to change.)",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT687M",
            "nullable" : true,
            "x-tf-example" : "PT687M",
            "x-tf-priority" : "10"
          },
          "minimumDurationOfPreferencesMetAcrossEmployees" : {
            "title" : "Minimum duration of preferences met across employees",
            "description" : "The minimum number of time (defined in the ISO 8601 format) employees' preferences are met for preferred employee pairings, time spans, and shifts. \nAll other employees have more minutes where they work according to their respective preferences. \n(This KPI is experimental and subject to change.)",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT6M",
            "nullable" : true,
            "x-tf-example" : "PT6M",
            "x-tf-priority" : "11"
          },
          "averageDurationOfEmployeesUnpreferencesViolated" : {
            "title" : "Average duration employees' unpreferences are violated",
            "description" : "The average number of time (defined in the ISO 8601 format) employees' unpreferences are violated for unpreferred employuee pairings,\nand unpreferred time spans. \nThis metric represents how the employees' unpreferences are being accounted for.\nPortions of shifts may be counted multiple times if they violate multiple unpreferences.\n(This KPI is experimental and subject to change.)",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT826M",
            "nullable" : true,
            "x-tf-example" : "PT826M",
            "x-tf-priority" : "12"
          },
          "maximumDurationOfUnpreferencesViolatedAcrossEmployees" : {
            "title" : "Maximum duration of unpreferences violated across employees",
            "description" : "The maximum number of time (defined in the ISO 8601 format) employees' unpreferences are violated for unpreferred employee pairings and time spans. \nAll other employees have fewer minutes where they work according to their respective unpreferences. \n(This KPI is experimental and subject to change.)",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "readOnly" : true,
            "example" : "PT41M",
            "nullable" : true,
            "x-tf-example" : "PT41M",
            "x-tf-priority" : "13"
          },
          "activatedEmployees" : {
            "format" : "number",
            "title" : "Activated employees",
            "description" : "Number of employees that were assigned at least 1 shift in this schedule.",
            "type" : "number",
            "readOnly" : true,
            "example" : 41,
            "x-tf-example" : "41",
            "x-tf-priority" : "15"
          },
          "assignedMandatoryShifts" : {
            "format" : "number",
            "title" : "Assigned mandatory shifts",
            "description" : "The number of mandatory shifts assigned to an employee in this schedule.",
            "type" : "number",
            "readOnly" : true,
            "example" : 1187,
            "x-tf-example" : "1187",
            "x-tf-priority" : "16"
          },
          "assignedOptionalShifts" : {
            "format" : "number",
            "title" : "Assigned optional shifts",
            "description" : "The number of optional shifts assigned to an employee in this schedule.",
            "type" : "number",
            "readOnly" : true,
            "example" : 187,
            "x-tf-example" : "187",
            "x-tf-priority" : "17"
          },
          "assignedShiftGroups" : {
            "format" : "number",
            "title" : "Assigned shift groups",
            "description" : "The number of shift groups with the correct number of shifts assigned.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "nullable" : true,
            "x-tf-priority" : "18",
            "x-tf-example" : "10"
          },
          "unassignedShiftGroups" : {
            "format" : "number",
            "title" : "Unassigned shift groups",
            "description" : "The number of shift groups with an incorrect number of shifts assigned.",
            "type" : "integer",
            "readOnly" : true,
            "example" : 10,
            "nullable" : true,
            "x-tf-priority" : "19",
            "x-tf-example" : "10"
          },
          "travelDistance" : {
            "format" : "number",
            "title" : "Total travel distance to/from home location",
            "description" : "Total travel distance to/from the home locations of employees.",
            "type" : "number",
            "readOnly" : true,
            "example" : 4108,
            "nullable" : true,
            "x-tf-example" : "4108",
            "x-tf-priority" : "20"
          },
          "fixedTotalCost" : {
            "format" : "number",
            "title" : "Fixed total cost",
            "description" : "The total cost of the schedule, based on costs rules. The precision is 3 decimal places.",
            "multipleOf" : 0.001,
            "type" : "number",
            "readOnly" : true,
            "example" : 41108.200,
            "nullable" : true,
            "x-tf-example" : "41108.200",
            "x-tf-priority" : "21"
          }
        }
      },
      "EmployeeShiftCostDetail" : {
        "type" : "object",
        "properties" : {
          "employeeCostGroup" : {
            "type" : "string"
          },
          "shiftCostGroup" : {
            "type" : "string"
          },
          "cost" : {
            "type" : "number"
          }
        }
      },
      "EmployeeWorksCompactSequenceJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rule" : {
            "description" : "The consecutive days worked rule id.",
            "type" : "string"
          },
          "sequenceCategory" : {
            "description" : "The category of the sequence.",
            "type" : "string"
          },
          "shift1" : {
            "description" : "The id of the first shift.",
            "type" : "string"
          },
          "shift2" : {
            "description" : "The id of the second shift.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeWorksDuringPreferredTimeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the shift that is assigned during preferred time.",
            "type" : "string"
          },
          "overlappingTimeSpans" : {
            "description" : "The preferred time spans that overlap with the shift.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TagAwareDateTimeSpan"
            }
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeWorksDuringUnavailableTimeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the shift that is assigned during unavailable time.",
            "type" : "string"
          },
          "overlappingTimeSpans" : {
            "description" : "The unavailable time spans that overlap with the shift.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TagAwareDateTimeSpan"
            }
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeWorksDuringUnpreferredTimeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the shift that is assigned during unpreferred time.",
            "type" : "string"
          },
          "overlappingTimeSpans" : {
            "description" : "The unpreferred time spans that overlap with the shift.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TagAwareDateTimeSpan"
            }
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeWorksPreferredMultiDayShiftSequencePatternJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "matchSequences" : {
            "description" : "The list of pattern match sequences.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PatternMatchSequence"
            }
          },
          "patternRule" : {
            "description" : "The multi days shift sequence pattern rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeWorksPreferredSingleDayShiftSequencePatternJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "matchSequence" : {
            "description" : "The pattern match sequence.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PatternMatchSequence"
            } ]
          },
          "patternRule" : {
            "description" : "The single day shift sequence pattern rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeWorksProhibitedMultiDayShiftSequencePatternJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "matchSequences" : {
            "description" : "The list of pattern match sequences.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PatternMatchSequence"
            }
          },
          "patternRule" : {
            "description" : "The multi days shift sequence pattern rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeWorksProhibitedSingleDayShiftSequencePatternJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "matchSequence" : {
            "description" : "The pattern match sequence.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PatternMatchSequence"
            } ]
          },
          "patternRule" : {
            "description" : "The single day shift sequence pattern rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeWorksShiftWithNonMatchingRequiredShiftTagsJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The shift with non matching required shift tags.",
            "type" : "string"
          },
          "nonMatchingTags" : {
            "description" : "The non matching tags.",
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "rule" : {
            "description" : "The shift tag match rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeWorksShiftWithPreferredShiftTagsJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The shift with matching preferred shift tags.",
            "type" : "string"
          },
          "matchingTags" : {
            "description" : "The matching tags. When complex expressions are used, all matching tags are included for AND expressions, while only the tags contributing to the highest reward magnitude are included for OR expressions.",
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "rule" : {
            "description" : "The shift tag match rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeWorksUnpreferredMultiDayShiftSequencePatternJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "matchSequences" : {
            "description" : "The list of pattern match sequences.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PatternMatchSequence"
            }
          },
          "patternRule" : {
            "description" : "The multi days shift sequence pattern rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "EmployeeWorksUnpreferredSingleDayShiftSequencePatternJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "matchSequence" : {
            "description" : "The pattern match sequence.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PatternMatchSequence"
            } ]
          },
          "patternRule" : {
            "description" : "The single day shift sequence pattern rule id.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ErrorInfo" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "code" : {
            "type" : "string"
          },
          "message" : {
            "type" : "string"
          },
          "details" : {
            "type" : "string"
          }
        }
      },
      "FteConfiguration" : {
        "type" : "object",
        "properties" : {
          "fixedFte" : {
            "description" : "Full time equivalent. The precision is 3 decimal places.",
            "multipleOf" : 0.001,
            "maximum" : 1.0,
            "minimum" : 0.001,
            "type" : "number",
            "example" : 1
          }
        },
        "additionalProperties" : false
      },
      "GlobalPeriodRule" : {
        "required" : [ "id", "period" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "period" : {
            "description" : "Period for which the rule is applicable, for example a month.",
            "type" : "string"
          },
          "zoneOffset" : {
            "description" : "The time zone offset of the global rule period. If not set, the rule will match shifts based on local date time (regardless the shift zone offset) only.",
            "type" : "string",
            "nullable" : true
          },
          "satisfiability" : {
            "description" : "Defines satisfiability type of the rule.",
            "default" : "REQUIRED",
            "enum" : [ "REQUIRED", "PREFERRED" ],
            "type" : "string"
          },
          "includeEmployeeTags" : {
            "description" : "If defined, only employees containing these tags are balanced. With employeeTagMatches set to ALL, all tags defined here have to be present in the employee tags. With employeeTagMatches set to ANY, at least one tag defined here has to be present in the employee tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeEmployeeTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With employeeTagMatches set to ALL, all tags defined here cannot be present in the employee tags. With employeeTagMatches set to ANY, any of the tags defined here cannot be present in the employee tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "employeeTagMatches" : {
            "description" : "Defines how includeEmployeeTags and excludeEmployeeTags are matched against the employee tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "shiftsWorkedMin" : {
            "format" : "int32",
            "description" : "Deprecated in combination with REQUIRED satisfiability, use PREFERRED satisfiabilty instead. Minimum number of shifts worked.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "shiftsWorkedMax" : {
            "format" : "int32",
            "description" : "Maximum number of shifts worked.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "periodShiftOverlapKind" : {
            "description" : "Defines how overlap is calculated. START_ONLY is used by default and checks whether the start of a shift falls within a period. If START_AND_END is set, both the start and end of the shift will be used to check for an overlap with a period.",
            "default" : "START_ONLY",
            "enum" : [ "START_ONLY", "START_AND_END" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "GlobalRules" : {
        "type" : "object",
        "properties" : {
          "balanceTimeWorkedRules" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/BalanceTimeWorkedRule"
            },
            "externalDocs" : {
              "description" : "Balance time worked documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/fairness/balance-time-worked"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "balanceShiftCountRules" : {
            "description" : "Configuration of balance shift count rule. Use to make sure the number of matching shifts is balanced across matching employees. The rule takes historic data into account.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/BalanceShiftCountRule"
            },
            "externalDocs" : {
              "description" : "Balance shift count documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/fairness/balance-shift-count"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "minimumMaximumShiftsPerPeriod" : {
            "description" : "Rules tied to a period (e.g. DAY, WEEK, MONTH, SCHEDULE). Use this to express global preference, or a requirement to fulfill a certain number of minutes, shifts, shift types, days in a period, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/GlobalPeriodRule"
            },
            "externalDocs" : {
              "description" : "Shift assignments documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/shift-assignments"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "minimumMaximumShiftsPerHourlyDemand" : {
            "description" : "Rules tied to hourly demand. Use this to express global preference, or a requirement to fulfill a certain number of shifts in hourly intervals, optionally only for shifts with specific tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/HourlyDemandRule"
            },
            "externalDocs" : {
              "description" : "Demand-based scheduling documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/demand-based-scheduling"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "costsRules" : {
            "description" : "Configuration of costs rules. Use this to make sure the total costs of shift assignments are in the required range.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CostsRule"
            },
            "externalDocs" : {
              "description" : "Cost management documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/cost-management"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "disruptionRules" : {
            "description" : "Deprecated in favor of 'contract.disruptionRules'. Configuration of disruption rules. Use this to make sure the disruptions caused by resolving an existing problem are minimized.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/DisruptionRule"
            },
            "externalDocs" : {
              "description" : "Real-time planning documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/real-time-planning"
            },
            "deprecated" : true,
            "x-uniqueItemsProperty" : "id"
          },
          "shiftTagMatchRules" : {
            "description" : "Configuration of shift tag match rules. Use this to configure how employees are matched to shifts based on tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ShiftTagMatchRule"
            },
            "externalDocs" : {
              "description" : "Shift tag types documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-type-diversity/shift-tag-types"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "unassignedShiftRule" : {
            "description" : "Configuration of unassigned shift rule. Use this to configure the priorities of shift assignments.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/UnassignedShiftRule"
            } ],
            "externalDocs" : {
              "description" : "Mandatory and optional shifts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/mandatory-and-optional-shifts"
            }
          },
          "shiftGroupRules" : {
            "description" : "Configuration of shift group rules. Use this to configure how shifts are assigned within a shift group.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ShiftGroupRule"
            },
            "externalDocs" : {
              "description" : "Alternative shifts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/alternative-shifts"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "concurrentShiftsRules" : {
            "description" : "Configuration of concurrent shifts rules. Use this to configure how many shifts can take place at the same time.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ConcurrentShiftsRule"
            },
            "externalDocs" : {
              "description" : "Shift assignments documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/shift-assignments"
            },
            "x-uniqueItemsProperty" : "id"
          }
        },
        "additionalProperties" : false
      },
      "HourlyDemandDetail" : {
        "required" : [ "startDateTime" ],
        "type" : "object",
        "properties" : {
          "startDateTime" : {
            "description" : "Start time of the interval.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "endDateTime" : {
            "description" : "End time of the interval. Defaults to startDateTime + 1 hour if not provided. The interval duration must be at least 30 minutes.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "minDemand" : {
            "format" : "int32",
            "description" : "Deprecated in combination with REQUIRED satisfiability, use PREFERRED satisfiabilty instead. Minimum demand.",
            "type" : "integer",
            "nullable" : true
          },
          "maxDemand" : {
            "format" : "int32",
            "description" : "Maximum demand.",
            "type" : "integer",
            "nullable" : true
          },
          "rule" : {
            "$ref" : "#/components/schemas/HourlyDemandRule"
          }
        }
      },
      "HourlyDemandRule" : {
        "required" : [ "id", "demandDetails" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only shifts not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "includeEmployeeTags" : {
            "description" : "If defined, only employees containing these tags are matched. With employeeTagMatches set to ALL, all tags defined here have to be present in the employee tags. With employeeTagMatches set to ANY, at least one tag defined here has to be present in the employee tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeEmployeeTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With employeeTagMatches set to ALL, all tags defined here cannot be present in the employee tags. With employeeTagMatches set to ANY, any of the tags defined here cannot be present in the employee tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "employeeTagMatches" : {
            "description" : "Defines how includeEmployeeTags and excludeEmployeeTags are matched against the employee tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "satisfiability" : {
            "description" : "Defines satisfiability type of the rule.",
            "default" : "REQUIRED",
            "enum" : [ "REQUIRED", "PREFERRED" ],
            "type" : "string"
          },
          "demandDetails" : {
            "description" : "Hourly demand details.",
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/HourlyDemandDetail"
            }
          }
        },
        "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" : [ {
          "$ref" : "#/components/schemas/IssueMessage"
        } ]
      },
      "IssueSeverity" : {
        "enum" : [ "ERROR", "WARNING" ],
        "type" : "string"
      },
      "IssueType" : {
        "required" : [ "code", "severity" ],
        "type" : "object",
        "properties" : {
          "code" : {
            "description" : "Unique case-sensitive code of the issue type.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/IssueCode"
            } ]
          },
          "severity" : {
            "description" : "Issue severity",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/IssueSeverity"
            } ]
          },
          "metadata" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/IssueMetadata"
            }
          }
        }
      },
      "KeepEmployeeActivationRatioJustification" : {
        "type" : "object",
        "properties" : {
          "costGroup" : {
            "description" : "The id of the cost group.",
            "type" : "string"
          },
          "activatedEmployees" : {
            "format" : "int32",
            "description" : "The number of activated employees.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "LegacyPriority" : {
        "description" : "Deprecated in favor of numeric (1-10) priority levels.",
        "enum" : [ "CRITICAL", "HIGH", "NORMAL", "LOW" ],
        "type" : "string",
        "deprecated" : true
      },
      "LegacyValidationResult" : {
        "description" : "The result of the validation of the model input",
        "type" : "object",
        "properties" : {
          "summary" : {
            "description" : "The summary of the validation. The model input passes the validation if the summary does not contain errors.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ValidationStatus"
            } ]
          },
          "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
      },
      "LocalDate" : {
        "format" : "date",
        "type" : "string",
        "example" : "2022-03-10"
      },
      "LocalDateSpan" : {
        "type" : "object",
        "properties" : {
          "start" : {
            "$ref" : "#/components/schemas/LocalDate"
          },
          "end" : {
            "$ref" : "#/components/schemas/LocalDate"
          }
        }
      },
      "LocalDateTimeSpan" : {
        "type" : "object",
        "properties" : {
          "start" : {
            "format" : "local-date-time",
            "description" : "Start of the time span (inclusive). If not provided, the start of the time span is unrestricted.",
            "type" : "string",
            "example" : "2022-03-10T12:15:50",
            "nullable" : true
          },
          "end" : {
            "format" : "local-date-time",
            "description" : "End of the time span (exclusive). If not provided, the end of the time span is unrestricted.",
            "type" : "string",
            "example" : "2022-03-10T12:15:50",
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "LocalTime" : {
        "format" : "local-time",
        "type" : "string",
        "externalDocs" : {
          "description" : "As defined by 'partial-time' in RFC3339",
          "url" : "https://www.rfc-editor.org/rfc/rfc3339.html#section-5.6"
        },
        "example" : "13:45:30.123456789"
      },
      "LocationsWorkedPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of locations worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "locationsWorked" : {
            "format" : "int64",
            "description" : "The number of locations worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "LocationsWorkedPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of locations worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "locationsWorked" : {
            "format" : "int64",
            "description" : "The number of locations worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "LogInfo" : {
        "type" : "object",
        "properties" : {
          "details" : {
            "type" : "string"
          }
        }
      },
      "MapsConfiguration" : {
        "type" : "object",
        "properties" : {
          "provider" : {
            "type" : "string"
          },
          "location" : {
            "type" : "string"
          },
          "maxDistanceFromRoad" : {
            "format" : "double",
            "type" : "number"
          },
          "transportType" : {
            "type" : "string"
          }
        }
      },
      "MaximizeActivatedEmployeeSaturationJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shiftCount" : {
            "format" : "int32",
            "description" : "The number of shifts worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MaximumEmployeeToShiftTravelDistanceExceededJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the shift that exceeds the maximum employee to shift travel distance.",
            "type" : "string"
          },
          "distanceInMeters" : {
            "format" : "int64",
            "description" : "The travel distance in meters between the shift and the employee.",
            "type" : "integer"
          },
          "maximumDistanceInMeters" : {
            "format" : "int64",
            "description" : "The maximum travel distance in meters between the shift and the employee.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "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" : {
            "description" : "The moment the run is submitted",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ],
            "nullable" : true
          },
          "startDateTime" : {
            "description" : "The moment the run begins initializing",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ],
            "nullable" : true
          },
          "activeDateTime" : {
            "description" : "The moment the solving phase begins",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ],
            "nullable" : true
          },
          "completeDateTime" : {
            "description" : "The moment the solving phase concludes",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ],
            "nullable" : true
          },
          "shutdownDateTime" : {
            "description" : "The moment the post-processing phase finishes",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ],
            "nullable" : true
          },
          "solverStatus" : {
            "allOf" : [ {
              "$ref" : "#/components/schemas/SolvingStatus"
            } ],
            "nullable" : true
          },
          "score" : {
            "type" : "string",
            "nullable" : true
          },
          "tags" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "validationResult" : {
            "$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" : {
            "description" : "The moment the run is submitted",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ],
            "nullable" : true
          },
          "startDateTime" : {
            "description" : "The moment the run begins initializing",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ],
            "nullable" : true
          },
          "activeDateTime" : {
            "description" : "The moment the solving phase begins",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ],
            "nullable" : true
          },
          "completeDateTime" : {
            "description" : "The moment the solving phase concludes",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ],
            "nullable" : true
          },
          "shutdownDateTime" : {
            "description" : "The moment the post-processing phase finishes",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ],
            "nullable" : true
          },
          "solverStatus" : {
            "allOf" : [ {
              "$ref" : "#/components/schemas/SolvingStatus"
            } ],
            "nullable" : true
          },
          "score" : {
            "type" : "string",
            "nullable" : true
          },
          "tags" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "validationResult" : {
            "$ref" : "#/components/schemas/LegacyValidationResult"
          },
          "failureMessage" : {
            "description" : "The message describing the reason of failure, in case of solverStatus=SOLVING_FAILED.",
            "type" : "string",
            "nullable" : true
          }
        }
      },
      "MinimizeActivatedEmployeesJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "numberOfShifts" : {
            "format" : "int32",
            "description" : "The number of shifts worked by the activated employee.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinimizeCostPerPeriodJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of minutes worked and the cost are calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "minutesWorked" : {
            "format" : "int64",
            "description" : "The number of minutes worked.",
            "type" : "integer"
          },
          "cost" : {
            "description" : "The cost for the number of minutes worked.",
            "type" : "number"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinimizeGapsBetweenShiftsForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift1" : {
            "description" : "The id of the first shift.",
            "type" : "string"
          },
          "shift2" : {
            "description" : "The id of the second shift.",
            "type" : "string"
          },
          "minimizeGapsBetweenShiftsRule" : {
            "description" : "The minimize gaps between shifts rule id.",
            "type" : "string"
          },
          "minutesBetweenShifts" : {
            "format" : "int64",
            "description" : "The minutes between the 2 shifts.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinimizeGapsBetweenShiftsRule" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "requiredPriorShiftTags" : {
            "description" : "If defined, shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "requiredAfterShiftTags" : {
            "description" : "If defined, shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how requiredPriorShiftTags and requiredAfterShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "maximumMinutesBetweenSplitShifts" : {
            "format" : "int32",
            "description" : "Maximum number of minutes between the end of the prior shift and the start of the after shift. The rule does not apply to shifts that are further away from each other than this setting.",
            "default" : 120,
            "minimum" : 0,
            "type" : "integer"
          }
        },
        "additionalProperties" : false
      },
      "MinimizeIncomingDisruptionPerEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "disruptionRule" : {
            "description" : "The disruption rule id.",
            "type" : "string"
          },
          "numberOfShiftsDisrupted" : {
            "format" : "int32",
            "description" : "The number of disrupted shifts.",
            "type" : "integer"
          },
          "disruptedShifts" : {
            "description" : "The identifiers of disrupted shifts.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinimizeOutgoingDisruptionPerEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "disruptionRule" : {
            "description" : "The disruption rule id.",
            "type" : "string"
          },
          "numberOfShiftsDisrupted" : {
            "format" : "int32",
            "description" : "The number of disrupted shifts.",
            "type" : "integer"
          },
          "disruptedShifts" : {
            "description" : "The identifiers of disrupted shifts.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinimizePreferredScopedDisruptionPerEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "disruptionRule" : {
            "description" : "The disruption rule id.",
            "type" : "string"
          },
          "outgoingShift" : {
            "description" : "The original shift's id.",
            "type" : "string"
          },
          "minutesNotCovered" : {
            "format" : "int64",
            "description" : "Minutes not covered by incoming disrupted shifts.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinimizeTravelDistanceJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The shift id.",
            "type" : "string"
          },
          "distanceInMeters" : {
            "format" : "int64",
            "description" : "The distance between the employee and the shift in meters.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinimumTimeBetweenShiftsIncludingTravelNotMetJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift1" : {
            "description" : "The id of the first shift.",
            "type" : "string"
          },
          "shift2" : {
            "description" : "The id of the second shift.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinutesBetweenShiftsNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift1" : {
            "description" : "The id of the first shift.",
            "type" : "string"
          },
          "shift2" : {
            "description" : "The id of the second shift.",
            "type" : "string"
          },
          "minutesBetweenShiftsRule" : {
            "description" : "The minutes between shifts rule id.",
            "type" : "string"
          },
          "violationInMinutes" : {
            "format" : "int32",
            "description" : "The number of minutes that violate the preferred range of minutes between shifts.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinutesBetweenShiftsNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift1" : {
            "description" : "The id of the first shift.",
            "type" : "string"
          },
          "shift2" : {
            "description" : "The id of the second shift.",
            "type" : "string"
          },
          "minutesBetweenShiftsRule" : {
            "description" : "The minutes between shifts rule id.",
            "type" : "string"
          },
          "violationInMinutes" : {
            "format" : "int32",
            "description" : "The number of minutes that violate the required range of minutes between shifts.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinutesBetweenShiftsRule" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "requiredPriorShiftTags" : {
            "description" : "If defined, shift containing these tags is matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "minimumConsecutivePriorShifts" : {
            "format" : "int32",
            "description" : "Minimum number of consecutive prior shifts that have to match the requiredPriorShiftTags. This implementation supports maximum 2 prior consecutive shifts. If value is greater than 1, requiredPriorShiftTags need to be specified to identify the prior sequence, for example a sequence of night shifts.",
            "default" : 1,
            "type" : "integer"
          },
          "requiredAfterShiftTags" : {
            "description" : "If defined, shift containing these tags is matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how requiredPriorShiftTags and requiredAfterShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "satisfiability" : {
            "description" : "Defines satisfiability type of the rule.",
            "default" : "REQUIRED",
            "enum" : [ "REQUIRED", "PREFERRED" ],
            "type" : "string"
          },
          "minimumMinutesBetweenShifts" : {
            "format" : "int32",
            "description" : "Minimum number of minutes between the end of the prior shift and the start of the after shift.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "maximumMinutesBetweenShifts" : {
            "format" : "int32",
            "description" : "Maximum number of minutes between the end of the prior shift and the start of the after shift.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "scope" : {
            "description" : "Scope to limit the shift pairs to which this rule applies. If scope is given as a duration, the rule excludes shift pairs where the start of the after shift is after the end of the prior shift plus the duration.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Scope"
            } ]
          }
        },
        "additionalProperties" : false
      },
      "MinutesLoggedPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of logged minutes is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "minutesLogged" : {
            "format" : "int64",
            "description" : "The number of logged minutes.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinutesLoggedPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of minutes logged is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "minutesLogged" : {
            "format" : "int64",
            "description" : "The number of minutes logged.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinutesWorkedInRollingWindowNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rollingWindowRule" : {
            "description" : "The rolling window rule id.",
            "type" : "string"
          },
          "dateTimeSpan" : {
            "description" : "The date time span during which the number of minutes worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DateTimeSpan"
            } ]
          },
          "minutesWorked" : {
            "format" : "int64",
            "description" : "The number of minutes worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinutesWorkedInRollingWindowNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rollingWindowRule" : {
            "description" : "The rolling window rule id.",
            "type" : "string"
          },
          "dateTimeSpan" : {
            "description" : "The date time span during which the number of minutes worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DateTimeSpan"
            } ]
          },
          "minutesWorked" : {
            "format" : "int64",
            "description" : "The number of minutes worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinutesWorkedLimit" : {
        "type" : "object",
        "properties" : {
          "minutesWorkedMax" : {
            "format" : "int32",
            "description" : "Maximum number of minutes an employee can work in the rolling window.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "countOnlyBetween" : {
            "description" : "If specified, only the portion of shifts overlapping with this daily time interval is counted toward the limit. Time is interpreted in the employee's timezone. For multi-day shifts, the overlap is calculated for each day.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/TimeOfDayInterval"
            } ],
            "nullable" : true
          },
          "unloggedBreakTags" : {
            "description" : "If defined, only breaks containing these tags are not counted towards working time. With breakTagMatches set to ALL, all tags defined here have to be present in the break tags. With breakTagMatches set to ANY, at least one tag defined here has to be present in the break tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "breakTagMatches" : {
            "description" : "Defines how unloggedBreakTags are matched against the break tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "MinutesWorkedLimit1" : {
        "type" : "object",
        "properties" : {
          "minutesWorkedMin" : {
            "format" : "int32",
            "description" : "Minimum number of minutes worked. Only valid with PREFERRED satisfiability.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "minutesWorkedMax" : {
            "format" : "int32",
            "description" : "Maximum number of minutes worked.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "countOnlyBetween" : {
            "description" : "If specified, only the portion of shifts overlapping with this daily time interval is counted toward the limit. Time is interpreted in the employee's timezone. For multi-day shifts, the overlap is calculated for each day.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/TimeOfDayInterval"
            } ],
            "nullable" : true
          },
          "unloggedBreakTags" : {
            "description" : "If defined, only breaks containing these tags are not counted towards working time. With breakTagMatches set to ALL, all tags defined here have to be present in the break tags. With breakTagMatches set to ANY, at least one tag defined here has to be present in the break tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "breakTagMatches" : {
            "description" : "Defines how unloggedBreakTags are matched against the break tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "MinutesWorkedPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of minutes worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "minutesWorked" : {
            "format" : "int64",
            "description" : "The number of minutes worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "MinutesWorkedPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of minutes worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "minutesWorked" : {
            "format" : "int64",
            "description" : "The number of minutes worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ModelConfigEmployeeScheduleConfigOverrides" : {
        "type" : "object",
        "properties" : {
          "overrides" : {
            "description" : "The configuration of individual (soft) constraints weights and additional global model configuration attributes.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/EmployeeScheduleConfigOverrides"
            } ],
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "ModelConfigModelConfigOverrides" : {
        "type" : "object",
        "properties" : {
          "overrides" : {
            "description" : "The configuration of individual (soft) constraints weights and additional global model configuration attributes.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ModelConfigOverrides"
            } ],
            "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"
      },
      "ModelConfiguration1" : {
        "type" : "object",
        "properties" : {
          "run" : {
            "description" : "The run configuration.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/RunConfiguration"
            } ],
            "nullable" : true
          },
          "model" : {
            "description" : "The model configuration. Impacts the quality of solution.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ModelConfigModelConfigOverrides"
            } ],
            "nullable" : true
          },
          "resourcesConfiguration" : {
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ResourcesConfiguration"
            } ],
            "readOnly" : true,
            "nullable" : true
          },
          "mapsConfiguration" : {
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MapsConfiguration"
            } ],
            "readOnly" : true,
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "ModelConfiguration2" : {
        "type" : "object",
        "properties" : {
          "run" : {
            "description" : "The run configuration.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/RunConfiguration"
            } ],
            "nullable" : true
          },
          "model" : {
            "description" : "The model configuration. Impacts the quality of solution.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ModelConfigEmployeeScheduleConfigOverrides"
            } ],
            "nullable" : true
          },
          "resourcesConfiguration" : {
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ResourcesConfiguration"
            } ],
            "readOnly" : true,
            "nullable" : true
          },
          "mapsConfiguration" : {
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MapsConfiguration"
            } ],
            "readOnly" : true,
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "ModelConstraintJustification" : {
        "type" : "object",
        "properties" : {
          "description" : {
            "type" : "string"
          }
        }
      },
      "ModelInput" : {
        "type" : "object"
      },
      "ModelInputPatch" : {
        "required" : [ "op", "path" ],
        "type" : "object",
        "properties" : {
          "op" : {
            "description" : "Operation to be applied",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ModelInputPatchOp"
            } ]
          },
          "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"
      },
      "ModelInputPatchRequestEmployeeScheduleConfigOverrides" : {
        "required" : [ "patch" ],
        "type" : "object",
        "properties" : {
          "config" : {
            "description" : "Optional configuration to be applied when solving the patched dataset.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ModelConfiguration2"
            } ]
          },
          "patch" : {
            "description" : "List of patches to be applied to the original dataset.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ModelInputPatch"
            }
          }
        }
      },
      "ModelRequestEmployeeScheduleEmployeeScheduleConfigOverrides" : {
        "required" : [ "modelInput" ],
        "type" : "object",
        "properties" : {
          "config" : {
            "description" : "The configuration of the model request. If not provided, defaults of the model are used.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ModelConfiguration2"
            } ],
            "nullable" : true
          },
          "modelInput" : {
            "description" : "The model input to solve.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/EmployeeSchedule"
            } ]
          }
        },
        "additionalProperties" : false
      },
      "ModelResponseHardMediumSoftScoreOutputEmployeeScheduleEmployeeSchedulingInputMetricsEmployeeSchedulingOutputMetrics" : {
        "type" : "object",
        "properties" : {
          "metadata" : {
            "description" : "The model dataset metadata.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MetadataHardMediumSoftScore"
            } ],
            "nullable" : true
          },
          "modelOutput" : {
            "description" : "The solution to the requested model input.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OutputEmployeeSchedule"
            } ],
            "nullable" : true
          },
          "inputMetrics" : {
            "description" : "Key metrics aggregated from the model input.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/EmployeeSchedulingInputMetrics"
            } ],
            "nullable" : true
          },
          "kpis" : {
            "description" : "Key metrics aggregated from the model output.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/EmployeeSchedulingOutputMetrics"
            } ],
            "nullable" : true
          },
          "run" : {
            "description" : "The model run metadata. Deprecated in favor of \"metadata\"",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MetadataHardMediumSoftScore"
            } ],
            "readOnly" : true,
            "nullable" : true,
            "deprecated" : true
          }
        }
      },
      "MultiDayShiftSequencePatternElement" : {
        "type" : "object",
        "properties" : {
          "type" : {
            "description" : "ON pattern requires that employee works on the specified day, while OFF pattern requires that employee does not work on the specified day",
            "default" : "ON",
            "enum" : [ "ON", "OFF" ],
            "type" : "string"
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "shiftMatches" : {
            "description" : "Defines the matching behavior in case there are multiple matching shifts on the same day. With the value set to ALL, all shifts need to match the tag criteria of the pattern element on that particular day. With the value set to ANY, any shift needs to match the tag criteria of the pattern element on that particular day.",
            "default" : "ALL",
            "enum" : [ "ALL", "ANY" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "MultiDayShiftSequencePatternRule" : {
        "required" : [ "id", "pattern" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "satisfiability" : {
            "description" : "Defines the satisfiability type of the rule. Please note that REQUIRED has been deprecated and will be replaced by PREFERRED in future version.",
            "default" : "REQUIRED",
            "enum" : [ "REQUIRED", "PROHIBITED", "PREFERRED", "UNPREFERRED" ],
            "type" : "string"
          },
          "weight" : {
            "format" : "int64",
            "description" : "The weight of this pattern, useful for making a pattern more important than another. For example, setting the weight to 2 will make the reward/penalty of this pattern's elements count twice when matched.",
            "default" : 1,
            "minimum" : 1,
            "type" : "integer"
          },
          "pattern" : {
            "description" : "Sequence of pattern elements to be matched.",
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/MultiDayShiftSequencePatternElement"
            }
          }
        },
        "additionalProperties" : false
      },
      "OffsetDateTime" : {
        "format" : "date-time",
        "type" : "string",
        "example" : "2022-03-10T12:15:50-04:00"
      },
      "OperationOnPost" : {
        "enum" : [ "NONE", "SOLVE" ],
        "type" : "string"
      },
      "OutputEmployee" : {
        "description" : "Note: This is an experimental API subject to change. There are no guarantees on backward compatibility. Employee with their metrics.",
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the employee.",
            "type" : "string"
          },
          "metrics" : {
            "description" : "Metrics for this employee.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/EmployeeOutputMetrics"
            } ]
          }
        }
      },
      "OutputEmployeeSchedule" : {
        "description" : "Resulting employee schedule.",
        "type" : "object",
        "properties" : {
          "shifts" : {
            "description" : "Shifts with employees assigned to them.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OutputShift"
            }
          },
          "employees" : {
            "description" : "Note: This is an experimental API subject to change. There are no guarantees on backward compatibility. Employees with their metrics.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OutputEmployee"
            }
          }
        }
      },
      "OutputShift" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the shift.",
            "type" : "string"
          },
          "employee" : {
            "description" : "Identifier of the employee assigned to the shift.",
            "type" : "string",
            "nullable" : true
          }
        }
      },
      "OverlappingShiftJustification" : {
        "type" : "object",
        "properties" : {
          "shift1" : {
            "description" : "The id of the first overlapping shift.",
            "type" : "string"
          },
          "shift2" : {
            "description" : "The id of the second overlapping shift.",
            "type" : "string"
          },
          "employee" : {
            "description" : "The id of the employee that works the overlapping shifts.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "OvertimeCostDetail" : {
        "required" : [ "overtimeHourlyCost" ],
        "type" : "object",
        "properties" : {
          "overtimeMinutesLimit" : {
            "format" : "number",
            "description" : "The time in minutes during which the overtime hourly cost is active. This field is required if this isn't the last overtime cost detail in the list.",
            "minimum" : 1,
            "type" : "integer",
            "nullable" : true
          },
          "overtimeHourlyCost" : {
            "format" : "number",
            "description" : "The overtime cost. All time worked within the overtime minutes limit will cost this amount per hour of work started.",
            "minimum" : 0,
            "type" : "number"
          }
        },
        "additionalProperties" : false
      },
      "PatternMatchElement" : {
        "type" : "object",
        "properties" : {
          "shift" : {
            "type" : "string"
          },
          "matchType" : {
            "$ref" : "#/components/schemas/PatternMatchType"
          }
        }
      },
      "PatternMatchSequence" : {
        "type" : "object",
        "properties" : {
          "matchElements" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PatternMatchElement"
            }
          }
        }
      },
      "PatternMatchType" : {
        "enum" : [ "MATCH", "NO_MATCH" ],
        "type" : "string"
      },
      "PeriodDateSpan" : {
        "required" : [ "start", "end" ],
        "type" : "object",
        "properties" : {
          "start" : {
            "description" : "Start date of the period (inclusive).",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDate"
            } ]
          },
          "end" : {
            "description" : "End date of the period (inclusive).",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDate"
            } ]
          }
        },
        "additionalProperties" : false
      },
      "PeriodRule" : {
        "required" : [ "id", "period" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "period" : {
            "description" : "Period for which the rule is applicable, for example a month.",
            "type" : "string"
          },
          "ruleValidityDateTimeSpan" : {
            "description" : "Defines the time span in which the rule is valid. If not provided, the rule is always valid in the period configured.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDateTimeSpan"
            } ],
            "nullable" : true
          },
          "satisfiability" : {
            "description" : "Defines satisfiability type of the rule.",
            "default" : "REQUIRED",
            "enum" : [ "REQUIRED", "PREFERRED" ],
            "type" : "string"
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "minutesWorkedMin" : {
            "format" : "int64",
            "description" : "Deprecated: Use minutesWorkedLimit instead. Minimum number of minutes worked. Deprecated in combination with REQUIRED satisfiability, use PREFERRED satisfiability instead.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true,
            "deprecated" : true
          },
          "minutesWorkedMax" : {
            "format" : "int64",
            "description" : "Deprecated: Use minutesWorkedLimit instead. Maximum number of minutes worked.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true,
            "deprecated" : true
          },
          "minutesWorkedLimit" : {
            "description" : "Limit on the number of minutes worked, with optional daily time interval filtering.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MinutesWorkedLimit1"
            } ],
            "nullable" : true
          },
          "minutesLoggedMin" : {
            "format" : "int64",
            "description" : "Deprecated in combination with REQUIRED satisfiability, use PREFERRED satisfiabilty instead. Minimum number of logged minutes. Logged minutes are specified by shift.loggedTime and may be different from shift.start - shift.end duration.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "minutesLoggedMax" : {
            "format" : "int64",
            "description" : "Maximum number of logged minutes worked. Logged minutes are specified by shift.loggedTime and may be different from shift.start - shift.end duration.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "shiftsWorkedMin" : {
            "format" : "int32",
            "description" : "Deprecated in combination with REQUIRED satisfiability, use PREFERRED satisfiabilty instead. Minimum number of shifts worked.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "shiftsWorkedMax" : {
            "format" : "int32",
            "description" : "Maximum number of shifts worked.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "daysWorkedMin" : {
            "format" : "int32",
            "description" : "Deprecated in combination with REQUIRED satisfiability, use PREFERRED satisfiabilty instead. Minimum number of days worked.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "daysWorkedMax" : {
            "format" : "int32",
            "description" : "Maximum number of days worked.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "shiftTypesTagCategories" : {
            "description" : "Shift type categories. Used to express rules for minimum or maximum same shifts per period for shifts having one of these tags, for example morning and night. The shift must always have at most one tag defined by this attribute, meaning that the shift cannot have both morning and night tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTypesWorkedMin" : {
            "format" : "int32",
            "description" : "Deprecated in combination with REQUIRED satisfiability, use PREFERRED satisfiabilty instead. Minimum number of same shifts worked.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "shiftTypesWorkedMax" : {
            "format" : "int32",
            "description" : "Maximum number of same shifts worked.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "locationsWorkedMax" : {
            "format" : "int32",
            "description" : "Maximum number of locations worked.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "shiftStartTimeDifferenceInMinutesMax" : {
            "format" : "int32",
            "description" : "Maximum time range in which a shift may start for an employee. The employee's earliest and latest shift starts in a period cannot exceed this number of minutes.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "daysOffLimit" : {
            "description" : "Limit on the number of days off.",
            "minimum" : 0,
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DaysOffLimit"
            } ],
            "nullable" : true
          },
          "consecutiveDaysOffLimit" : {
            "description" : "Limit on the number of consecutive days off.",
            "minimum" : 0,
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ConsecutiveDaysOffLimit"
            } ],
            "nullable" : true
          },
          "uniqueTagsLimit" : {
            "description" : "Defines which TagTypes may be matched at most a set amount of times.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/UniqueTagsLimit"
            } ],
            "nullable" : true
          },
          "weekendsLimit" : {
            "description" : "Limits for the weekends, for example the number of weekends worked.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/WeekendsLimit"
            } ],
            "nullable" : true
          },
          "consecutiveWeekendsLimit" : {
            "description" : "Limit for the consecutive weekends worked.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ConsecutiveWeekendsLimit"
            } ],
            "nullable" : true
          },
          "consecutiveWeekendsOffLimit" : {
            "description" : "Limit for the consecutive weekends off.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ConsecutiveWeekendsOffLimit"
            } ],
            "nullable" : true
          },
          "periodShiftOverlapKind" : {
            "description" : "Defines how overlap is calculated. START_ONLY is used by default and checks whether the start of a shift falls within a period. If START_AND_END is set, both the start and end of the shift will be used to check for an overlap with a period.",
            "default" : "START_ONLY",
            "enum" : [ "START_ONLY", "START_AND_END" ],
            "type" : "string"
          },
          "costDefinition" : {
            "description" : "Defines how much an employee costs based on how long they work, with overtime rates.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/CostDefinition"
            } ],
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "PeriodShiftOverlapKind" : {
        "enum" : [ "START_ONLY", "START_AND_END" ],
        "type" : "string"
      },
      "PeriodicTravelConfiguration" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "excludeMatchingShiftTagTypes" : {
            "description" : "If defined, exclude shifts, where the employee assigned to the shift has preferred/required tags with one of these tag types. Consider a shift with tag 'Belgium' that has tag type 'Country'. Employee has a preference to work in Belgium. If tag type 'Country' is declared in excludeMatchingShiftTagTypes, such shift is not matched.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "maxEmployeeToShiftTravelDistanceInMeters" : {
            "format" : "int64",
            "description" : "Defines maximum travel distance between employee location and shift location.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "minMinutesBetweenShiftsInDifferentLocations" : {
            "format" : "int32",
            "description" : "Defines minimum number of minutes between shifts that have different locations and are assigned to the same employee.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "id" : {
            "description" : "Unique string identifier of the configuration.",
            "type" : "string"
          },
          "validityDateTimeSpan" : {
            "description" : "Defines the time span in which the rule is valid. If not provided, the rule is always valid in the period configured.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDateTimeSpan"
            } ],
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "PlanningWindow" : {
        "required" : [ "start", "end" ],
        "type" : "object",
        "properties" : {
          "start" : {
            "description" : "The start (ISO 8601 datetime with offset to UTC) of the time interval to schedule for (inclusive).",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "end" : {
            "description" : "The end (ISO 8601 datetime with offset to UTC) of the time interval to schedule for (exclusive).",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          }
        },
        "additionalProperties" : false
      },
      "PreferredEmployeeAssignedJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The id of the employee assigned to the shift.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the shift with a preferred employee.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "PreferredSequenceStartDayMetForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rule" : {
            "description" : "The consecutive days worked rule id.",
            "type" : "string"
          },
          "sequenceCategory" : {
            "description" : "The category of the sequence.",
            "type" : "string"
          },
          "sequenceStartDate" : {
            "description" : "The start date of the sequence.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDate"
            } ]
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "PreferredShiftRotationNotMetForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shiftRotationRule" : {
            "description" : "The shift rotation rule id.",
            "type" : "string"
          },
          "shift1" : {
            "description" : "The id of the first shift that violates the rotation.",
            "type" : "string"
          },
          "shift2" : {
            "description" : "The id of the second shift that violates the rotation.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "PreferredSkillMissingJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the shift with preferred skills.",
            "type" : "string"
          },
          "missingSkills" : {
            "description" : "The list of missing skills.",
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "Priority" : {
        "enum" : [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ],
        "type" : "string"
      },
      "PriorityConfiguration" : {
        "description" : "Configuration of priority.",
        "required" : [ "priority", "weight" ],
        "type" : "object",
        "properties" : {
          "priority" : {
            "description" : "Name of the priority.",
            "type" : "string"
          },
          "weight" : {
            "format" : "int32",
            "description" : "Weight associated with the priority.",
            "minimum" : 0,
            "type" : "integer"
          },
          "assignment" : {
            "description" : "Defines the shift assignment type associated with this priority: MANDATORY or OPTIONAL.",
            "default" : "MANDATORY",
            "enum" : [ "MANDATORY", "OPTIONAL" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "ProhibitedEmployeeAssignedJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The id of the employee assigned to the shift.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the shift with a prohibited employee.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "RecommendEmployeesFit" : {
        "required" : [ "employeeId" ],
        "type" : "object",
        "properties" : {
          "scoreDiff" : {
            "type" : "string"
          },
          "constraintDiffs" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/RecommendationConstraintDetail"
            }
          },
          "employeeId" : {
            "description" : "Unique identifier of the proposed employee for the fitted shift.",
            "type" : "string"
          }
        }
      },
      "RecommendEmployeesInput" : {
        "required" : [ "maxNumberOfRecommendations", "fitShiftId", "modelInput" ],
        "type" : "object",
        "properties" : {
          "maxNumberOfRecommendations" : {
            "format" : "int32",
            "description" : "Maximum number of recommendations to return",
            "minimum" : 1,
            "type" : "integer"
          },
          "fitShiftId" : {
            "description" : "Identifier of the shift to be fitted",
            "type" : "string"
          },
          "config" : {
            "description" : "Constraint configuration overrides",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/EmployeeScheduleConfigOverrides"
            } ],
            "nullable" : true
          },
          "modelInput" : {
            "description" : "Schedule containing the shift to be fitted",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/EmployeeSchedule"
            } ]
          }
        },
        "additionalProperties" : false
      },
      "RecommendEmployeesResult" : {
        "type" : "object",
        "properties" : {
          "recommendations" : {
            "description" : "List of employee recommendations for the fitted shift",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/RecommendEmployeesFit"
            }
          }
        }
      },
      "RecommendationConstraintDetail" : {
        "type" : "object",
        "properties" : {
          "score" : {
            "type" : "string"
          },
          "constraintName" : {
            "type" : "string"
          },
          "matchesDiff" : {
            "type" : "array",
            "items" : {
              "type" : "object",
              "properties" : {
                "score" : {
                  "type" : "string"
                },
                "justification" : {
                  "$ref" : "#/components/schemas/EmployeeSchedulingJustification"
                }
              }
            }
          },
          "matchCountDiff" : {
            "format" : "int32",
            "type" : "integer"
          }
        }
      },
      "RequiredScopedDisruptionPerEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "disruptionRule" : {
            "description" : "The disruption rule id.",
            "type" : "string"
          },
          "numberOfShiftsDisrupted" : {
            "format" : "int32",
            "description" : "The number of disrupted shifts.",
            "type" : "integer"
          },
          "disruptedShifts" : {
            "description" : "The identifiers of disrupted shifts.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "RequiredSequenceStartDayNotMetForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rule" : {
            "description" : "The consecutive days worked rule id.",
            "type" : "string"
          },
          "sequenceCategory" : {
            "description" : "The category of the sequence.",
            "type" : "string"
          },
          "previousSequenceEndDate" : {
            "description" : "The end date of the previous sequence.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDate"
            } ]
          },
          "sequenceStartDate" : {
            "description" : "The start date of the sequence.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalDate"
            } ]
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "RequiredShiftGroupAssignmentModeNotMetJustification" : {
        "type" : "object",
        "properties" : {
          "shiftGroupRule" : {
            "description" : "The shift group rule id.",
            "type" : "string"
          },
          "shiftGroup" : {
            "description" : "The shift group id.",
            "type" : "string"
          },
          "groupShiftsWorked" : {
            "format" : "int64",
            "description" : "The number of shift group shifts worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "RequiredShiftRotationNotMetForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shiftRotationRule" : {
            "description" : "The shift rotation rule id.",
            "type" : "string"
          },
          "shift1" : {
            "description" : "The id of the first shift that violates the rotation.",
            "type" : "string"
          },
          "shift2" : {
            "description" : "The id of the second shift that violates the rotation.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "RequiredSkillMissingJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of the shift with required skills.",
            "type" : "string"
          },
          "missingSkills" : {
            "description" : "The list of missing skills.",
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ResourcesConfiguration" : {
        "type" : "object",
        "properties" : {
          "memory" : {
            "format" : "double",
            "type" : "number"
          },
          "labels" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            }
          }
        }
      },
      "RollingTimeWindowConsecutiveDaysOffLimit" : {
        "type" : "object",
        "properties" : {
          "consecutiveDaysOffMin" : {
            "format" : "int32",
            "description" : "Minimum number of consecutive days off an employee must take in the rolling window.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          }
        }
      },
      "RollingTimeWindowConsecutiveMinutesOffLimit" : {
        "type" : "object",
        "properties" : {
          "consecutiveMinutesOffMin" : {
            "format" : "int32",
            "description" : "Minimum number of consecutive minutes off an employee must take in the rolling window.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "consecutiveMinutesOffMinIntervals" : {
            "description" : "A list with consecutive minutes off minimums that the employee must take in the rolling window.",
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ConsecutiveMinutesOffMinInterval"
            },
            "nullable" : true
          },
          "totalConsecutiveMinutesOffMin" : {
            "format" : "int32",
            "description" : "Minimum number of consecutive minutes off an employee must take in the rolling window. This field only works in combination with consecutiveMinutesOffMinIntervals. For example, you define that an employee must at least have 72 consecutive hours off, optionally divided into two intervals of at least 32 hours.",
            "minimum" : 1,
            "type" : "integer",
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "RollingWindow" : {
        "required" : [ "type", "size" ],
        "type" : "object",
        "properties" : {
          "type" : {
            "description" : "Type of the rolling window, for example, HOURLY, DAILY or WEEKLY.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/RollingWindowType"
            } ]
          },
          "size" : {
            "format" : "int32",
            "description" : "Length of the rolling window. Based on the rolling window's type, it can be hours, days or weeks.",
            "minimum" : 1,
            "type" : "integer"
          }
        }
      },
      "RollingWindowCondition" : {
        "required" : [ "triggerLimit", "type" ],
        "type" : "object",
        "properties" : {
          "triggerLimit" : {
            "format" : "number",
            "description" : "The value that triggers the rule to which the condition is linked.",
            "minimum" : 1,
            "type" : "integer"
          },
          "type" : {
            "description" : "Sets the triggerLimit unit, e.g. MIN_SHIFTS_WORKED to signify that the triggerLimit is a value for the minimum number of shifts worked.",
            "enum" : [ "MIN_MINUTES_WORKED", "MIN_SHIFTS_WORKED" ],
            "type" : "string"
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        },
        "additionalProperties" : false
      },
      "RollingWindowRule" : {
        "required" : [ "rollingWindow" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "rollingWindow" : {
            "description" : "Rolling window definition.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/RollingWindow"
            } ]
          },
          "satisfiability" : {
            "description" : "Defines satisfiability type of the rule.",
            "default" : "REQUIRED",
            "enum" : [ "REQUIRED", "PREFERRED" ],
            "type" : "string"
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "shiftsWorkedLimit" : {
            "description" : "Limit of shifts worked in the rolling window.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ShiftsWorkedLimit"
            } ],
            "nullable" : true
          },
          "minutesWorkedLimit" : {
            "description" : "Limit of minutes worked in the rolling window.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/MinutesWorkedLimit"
            } ],
            "nullable" : true
          },
          "daysWorkedLimit" : {
            "description" : "Limit of days worked in the rolling window.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DaysWorkedLimit"
            } ],
            "nullable" : true
          },
          "consecutiveDaysOffLimit" : {
            "description" : "Limit of consecutive days off in the rolling window.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/RollingTimeWindowConsecutiveDaysOffLimit"
            } ],
            "nullable" : true
          },
          "consecutiveMinutesOffLimit" : {
            "description" : "Limit of consecutive minutes off in the rolling window.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/RollingTimeWindowConsecutiveMinutesOffLimit"
            } ],
            "nullable" : true
          },
          "weekendsLimit" : {
            "description" : "Limit of weekends worked in the rolling window.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/RollingWindowWeekendsLimit"
            } ],
            "nullable" : true
          },
          "condition" : {
            "description" : "Defines a condition for this rule to count, for example, at least 6 shifts with tag \"night\".",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/RollingWindowCondition"
            } ],
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "RollingWindowType" : {
        "enum" : [ "HOURLY", "DAILY", "WEEKLY" ],
        "type" : "string"
      },
      "RollingWindowWeekendsLimit" : {
        "type" : "object",
        "properties" : {
          "weekendsWorkedMin" : {
            "format" : "int32",
            "description" : "Minimum number of weekends an employee has to work in the rolling window. Only applicable with PREFERRED satisfiability.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "weekendsWorkedMax" : {
            "format" : "int32",
            "description" : "Maximum number of weekends an employee can work in the rolling window.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          }
        }
      },
      "RotationPeriod" : {
        "description" : "Base interface for rotation periods",
        "type" : "object",
        "oneOf" : [ {
          "$ref" : "#/components/schemas/WeeklyRotationPeriod"
        }, {
          "$ref" : "#/components/schemas/CustomRotationPeriod"
        } ],
        "discriminator" : {
          "propertyName" : "type",
          "mapping" : {
            "WEEKLY" : "#/components/schemas/WeeklyRotationPeriod",
            "CUSTOM" : "#/components/schemas/CustomRotationPeriod"
          }
        }
      },
      "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" : {
            "$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"
            }
          }
        },
        "additionalProperties" : false
      },
      "ScheduleParameterization" : {
        "type" : "object",
        "properties" : {
          "weekStart" : {
            "description" : "Start day of the week.",
            "default" : "MONDAY",
            "enum" : [ "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" ],
            "type" : "string"
          },
          "periods" : {
            "description" : "List of custom periods for the schedule.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomPeriod"
            },
            "x-uniqueItemsProperty" : "id"
          },
          "travelConfiguration" : {
            "description" : "Deprecated in favor of 'contract.travelConfigurations'. Configuration of travel. Use this to make sure the travel is considered for employees and shifts.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/TravelConfiguration"
            } ],
            "nullable" : true,
            "deprecated" : true
          }
        },
        "additionalProperties" : false
      },
      "Scope" : {
        "type" : "object",
        "oneOf" : [ {
          "$ref" : "#/components/schemas/DurationScope"
        } ]
      },
      "ScoreAnalysisConfigEmployeeScheduleConfigOverrides" : {
        "type" : "object",
        "properties" : {
          "model" : {
            "description" : "Model configuration for the score analysis.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ModelConfigEmployeeScheduleConfigOverrides"
            } ],
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "ScoreAnalysisConfigModelConfigOverrides" : {
        "type" : "object",
        "properties" : {
          "model" : {
            "description" : "Model configuration for the score analysis.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ModelConfigModelConfigOverrides"
            } ],
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "ScoreAnalysisDetail" : {
        "type" : "object",
        "properties" : {
          "score" : {
            "type" : "string"
          },
          "constraints" : {
            "type" : "array",
            "items" : {
              "type" : "object",
              "properties" : {
                "name" : {
                  "type" : "string"
                },
                "weight" : {
                  "type" : "string"
                },
                "score" : {
                  "type" : "string"
                },
                "matches" : {
                  "type" : "array",
                  "items" : {
                    "type" : "object",
                    "properties" : {
                      "score" : {
                        "type" : "string"
                      },
                      "justification" : {
                        "$ref" : "#/components/schemas/ModelConstraintJustification"
                      }
                    }
                  }
                },
                "matchCount" : {
                  "format" : "int32",
                  "type" : "integer"
                }
              }
            }
          }
        }
      },
      "ScoreAnalysisRequestEmployeeScheduleEmployeeScheduleConfigOverrides" : {
        "required" : [ "modelInput" ],
        "type" : "object",
        "properties" : {
          "config" : {
            "description" : "Configuration for the score analysis.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ScoreAnalysisConfigEmployeeScheduleConfigOverrides"
            } ],
            "nullable" : true
          },
          "modelInput" : {
            "description" : "The model input to analyze.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/EmployeeSchedule"
            } ]
          }
        },
        "additionalProperties" : false
      },
      "Shift" : {
        "required" : [ "id", "start", "end" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the shift.",
            "type" : "string",
            "externalDocs" : {
              "description" : "Getting started documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/getting-started-with-employee-scheduling"
            }
          },
          "start" : {
            "description" : "Start time of the shift (inclusive).",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ],
            "externalDocs" : {
              "description" : "Getting started documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/getting-started-with-employee-scheduling"
            }
          },
          "end" : {
            "description" : "End time of the shift (exclusive)",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ],
            "externalDocs" : {
              "description" : "Getting started documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/getting-started-with-employee-scheduling"
            }
          },
          "loggedTime" : {
            "description" : "The logged duration of the shift. It can be used to specify an alternative shift duration for contractual period rules.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "externalDocs" : {
              "description" : "Minutes logged per period documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/work-limits/minutes-logged-per-period"
            },
            "nullable" : true
          },
          "costGroup" : {
            "description" : "Cost group of the shift. In conjunction with the cost group of the employee, it is used to calculate the cost of the shift assignment.",
            "type" : "string",
            "externalDocs" : {
              "description" : "Cost management documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/cost-management"
            },
            "nullable" : true
          },
          "location" : {
            "description" : "Location of the shift.",
            "maxItems" : 2,
            "minItems" : 2,
            "type" : "array",
            "items" : {
              "format" : "double",
              "type" : "number"
            },
            "externalDocs" : {
              "description" : "Shift travel and locations documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-travel-and-locations"
            },
            "example" : [ 40.5044403760272, -76.37894009358867 ],
            "nullable" : true
          },
          "requiredSkills" : {
            "description" : "List of required shift skills. Only an employee that has all of the shift’s required skills can be assigned to a shift.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Skills and risk factors documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/skills-and-risk-factors"
            }
          },
          "requiredSkillsMatchKind" : {
            "description" : "Defines how the required skills are matched when assigning an employee to this shift.",
            "enum" : [ "MATCH_ALL", "MATCH_ANY" ],
            "type" : "string",
            "externalDocs" : {
              "description" : "Skills and risk factors documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/skills-and-risk-factors"
            }
          },
          "requiredSkillsExpression" : {
            "description" : "An expression that defines which skills are required and how they are evaluated when assigning an employee.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/SkillOperandNode"
            } ],
            "externalDocs" : {
              "description" : "Skills and risk factors documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/skills-and-risk-factors"
            }
          },
          "preferredSkills" : {
            "description" : "List of preferred shift skills. An employee that has more of the shift’s preferred skills will be preferred over an employee with less of the shift’s preferred skills when assigning this shift.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Skills and risk factors documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/skills-and-risk-factors"
            }
          },
          "preferredSkillsMatchKind" : {
            "description" : "Defines how the preferred skills are matched when assigning an employee to this shift.",
            "enum" : [ "MATCH_ALL", "MATCH_ANY" ],
            "type" : "string",
            "externalDocs" : {
              "description" : "Skills and risk factors documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/skills-and-risk-factors"
            }
          },
          "preferredSkillsExpression" : {
            "description" : "An expression that defines which skills are preferred and how they are evaluated when assigning an employee.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/SkillOperandNode"
            } ],
            "externalDocs" : {
              "description" : "Skills and risk factors documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/skills-and-risk-factors"
            }
          },
          "riskFactors" : {
            "description" : "List of risk factors associated with this shift. An employee cannot be assigned to a shift that is associated with any of their prohibited risk factors (for instance, selected employees cannot be exposed to COVID-19 shift).",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Skills and risk factors documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/skills-and-risk-factors"
            }
          },
          "tags" : {
            "description" : "List of shift tags. Use to express additional shift data (e.g. shift type, department).",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Shift tag types documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-type-diversity/shift-tag-types"
            }
          },
          "preferredEmployees" : {
            "description" : "List of preferred shift employees. Use to express employees that are preferred to work on a shift.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Shift assignments documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/shift-assignments"
            }
          },
          "unpreferredEmployees" : {
            "description" : "List of preferred shift employees. Use to express employees that are unpreferred to work on a shift.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Shift assignments documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/shift-assignments"
            }
          },
          "prohibitedEmployees" : {
            "description" : "List of prohibited shift employees. Use to express employees that are prohibited to work on a shift.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Shift assignments documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/shift-assignments"
            }
          },
          "assignmentPriority" : {
            "format" : "int32",
            "description" : "Deprecated in favor of 'priority' field. Defines priority for shift assignment where 1 is the highest priority and 5 is the lowest priority.",
            "maximum" : 5,
            "minimum" : 1,
            "type" : "integer",
            "nullable" : true,
            "deprecated" : true
          },
          "priority" : {
            "description" : "Defines priority for shift assignment. There are built in priorities, where 1 is the highest priority and 10 is the lowest priority. Their weights and other custom priorities can be defined in the 'unassigned shift rule' in the global rules configuration. Unless an 'assignmentPriority' is specified, the default priority is 10. Dataset can only specify 'priority', or 'assignmentPriority', not both.",
            "type" : "string",
            "externalDocs" : {
              "description" : "Mandatory and optional shifts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/mandatory-and-optional-shifts"
            },
            "anyOf" : [ {
              "$ref" : "#/components/schemas/Priority"
            }, {
              "type" : "string"
            } ],
            "nullable" : true
          },
          "pinned" : {
            "description" : "Shift pin. Use to fix shift assignment to a specific employee, or no employee (employee attribute).",
            "default" : false,
            "type" : "boolean",
            "externalDocs" : {
              "description" : "Manual interventions documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/manual-intervention"
            }
          },
          "employee" : {
            "description" : "Employee assigned to the shift. Can be changed by the solver depending on the value of pinned attribute.",
            "type" : "string",
            "nullable" : true
          },
          "breaks" : {
            "description" : "List of breaks included in the shift. Break time doesn't count towards time worked. Breaks cannot overlap, and must be ordered on start time.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Break"
            },
            "externalDocs" : {
              "description" : "Shift breaks documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/employee-resource-constraints/shift-breaks"
            }
          }
        },
        "additionalProperties" : false
      },
      "ShiftGroup" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the shift.",
            "type" : "string",
            "externalDocs" : {
              "description" : "Alternative shifts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/alternative-shifts"
            }
          },
          "tags" : {
            "description" : "List of shift group tags. Use to express additional shift group data (e.g. shift group type).",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Alternative shifts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/alternative-shifts"
            }
          },
          "shifts" : {
            "description" : "List of shifts belonging to this shift group.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "externalDocs" : {
              "description" : "Alternative shifts documentation",
              "url" : "https://docs.timefold.ai/employee-shift-scheduling/latest/shift-service-constraints/alternative-shifts"
            }
          }
        },
        "additionalProperties" : false
      },
      "ShiftGroupAssignmentMode" : {
        "type" : "object",
        "properties" : {
          "type" : {
            "$ref" : "#/components/schemas/ShiftGroupAssignmentType"
          }
        }
      },
      "ShiftGroupAssignmentType" : {
        "enum" : [ "SINGLE_SHIFT" ],
        "type" : "string"
      },
      "ShiftGroupRule" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "includeShiftGroupTags" : {
            "description" : "If defined, only shift groups containing these tags are matched. At least one tag defined here has to be present in the shift group tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "assignmentMode" : {
            "description" : "Assignment mode. Controls they way the shifts from the group are assigned.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ShiftGroupAssignmentMode"
            } ],
            "nullable" : true
          }
        },
        "additionalProperties" : false
      },
      "ShiftRotationGroup" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the shift type group.",
            "type" : "string"
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "ShiftRotationRule" : {
        "required" : [ "id", "rotationGroups" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rotation rule.",
            "type" : "string"
          },
          "rotationPeriod" : {
            "description" : "The period in which the shift types are rotated, for example a week.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/RotationPeriod"
            } ]
          },
          "builtInRotationPeriod" : {
            "description" : "Note: deprecated, use 'rotationPeriod'. The period in which the shift types are rotated, for example a week.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/RotationPeriod"
            } ],
            "deprecated" : true
          },
          "satisfiability" : {
            "description" : "Defines satisfiability type of the rule.",
            "default" : "REQUIRED",
            "enum" : [ "REQUIRED", "PREFERRED" ],
            "type" : "string"
          },
          "rotationGroups" : {
            "description" : "List of groups to be rotated, for example a group of morning shifts and a group of evening shifts.",
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ShiftRotationGroup"
            }
          }
        },
        "additionalProperties" : false
      },
      "ShiftStartTimeDifferenceInMinutesPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the shift start time difference is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "shiftStartTimeDifference" : {
            "format" : "int64",
            "description" : "The shift start time difference in minutes.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ShiftStartTimeDifferenceInMinutesPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the shift start time difference is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "shiftStartTimeDifference" : {
            "format" : "int64",
            "description" : "The shift start time difference in minutes.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ShiftTagMatchRule" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "satisfiability" : {
            "description" : "Defines satisfiability type of the rule.",
            "default" : "REQUIRED",
            "enum" : [ "PREFERRED", "REQUIRED" ],
            "type" : "string"
          },
          "tagTypeMatchMultipliers" : {
            "description" : "Map of tag types to their match weight. Consider a tag 'Belgium' with tag type 'Country' having multiplier of 100. If employee defines preference to work in a shift with 'Belgium' tag, such shift is matched with higher priority. If not defined, default multiplier is 1.",
            "type" : "object",
            "additionalProperties" : {
              "format" : "int64",
              "type" : "integer"
            }
          }
        },
        "additionalProperties" : false
      },
      "ShiftTagOperand" : {
        "description" : "Base interface for complex shift tag requirements.",
        "type" : "object",
        "oneOf" : [ {
          "$ref" : "#/components/schemas/ShiftTagOperandLeaf"
        }, {
          "$ref" : "#/components/schemas/ShiftTagOperandNode"
        } ],
        "discriminator" : {
          "propertyName" : "type",
          "mapping" : {
            "LEAF" : "#/components/schemas/ShiftTagOperandLeaf",
            "NODE" : "#/components/schemas/ShiftTagOperandNode"
          }
        }
      },
      "ShiftTagOperandLeaf" : {
        "description" : "A shift tag operand leaf defines a tag that will be evaluated based on its parent's operator.",
        "required" : [ "type", "tagId" ],
        "type" : "object",
        "properties" : {
          "type" : {
            "description" : "Type of the operand, for a shift tag operand leaf this should be 'LEAF'.",
            "enum" : [ "LEAF", "NODE" ],
            "type" : "string"
          },
          "tagId" : {
            "description" : "The id of the tag.",
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "ShiftTagOperandNode" : {
        "description" : "A shift tag operand node defines operands that will be evaluated based on the operator.",
        "required" : [ "type", "operator", "operands" ],
        "type" : "object",
        "properties" : {
          "type" : {
            "description" : "Type of the operand, for a shift tag operand node this should be 'NODE'.",
            "enum" : [ "LEAF", "NODE" ],
            "type" : "string"
          },
          "operator" : {
            "description" : "The operator that will determine how the operands are evaluated, as AND or as OR.",
            "enum" : [ "AND", "OR" ],
            "type" : "string"
          },
          "operands" : {
            "description" : "A list of operands that can be either leaves, specifying tags, or nodes, creating complex AND/OR structures.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ShiftTagOperand"
            }
          }
        },
        "additionalProperties" : false
      },
      "ShiftTypesWorkedPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of shift types worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "shiftTypesWorked" : {
            "format" : "int64",
            "description" : "The number of shift types worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ShiftTypesWorkedPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of shift types worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "shiftTypesWorked" : {
            "format" : "int64",
            "description" : "The number of shift types worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ShiftsWorkedInRollingWindowNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rollingWindowRule" : {
            "description" : "The rolling window rule id.",
            "type" : "string"
          },
          "dateTimeSpan" : {
            "description" : "The date time span during which the number of shifts worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DateTimeSpan"
            } ]
          },
          "shiftsWorked" : {
            "format" : "int64",
            "description" : "The number of shifts worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ShiftsWorkedInRollingWindowNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rollingWindowRule" : {
            "description" : "The rolling window rule id.",
            "type" : "string"
          },
          "dateTimeSpan" : {
            "description" : "The date time span during which the number of shifts worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DateTimeSpan"
            } ]
          },
          "shiftsWorked" : {
            "format" : "int64",
            "description" : "The number of shifts worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ShiftsWorkedLimit" : {
        "type" : "object",
        "properties" : {
          "shiftsWorkedMax" : {
            "format" : "int32",
            "description" : "Maximum number of shifts an employee can work in the rolling window.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          }
        }
      },
      "ShiftsWorkedNotInPreferredHourlyDemandRangeJustification" : {
        "type" : "object",
        "properties" : {
          "hourlyDemandRule" : {
            "description" : "The hourly demand rule id.",
            "type" : "string"
          },
          "startDateTime" : {
            "description" : "The start date and time of the interval.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "endDateTime" : {
            "description" : "The end date and time of the interval.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "shiftsWorked" : {
            "format" : "int64",
            "description" : "The number of shifts worked in the interval.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ShiftsWorkedNotInRequiredHourlyDemandRangeJustification" : {
        "type" : "object",
        "properties" : {
          "hourlyDemandRule" : {
            "description" : "The hourly demand rule id.",
            "type" : "string"
          },
          "startDateTime" : {
            "description" : "The start date and time of the interval.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "endDateTime" : {
            "description" : "The end date and time of the interval.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "shiftsWorked" : {
            "format" : "int64",
            "description" : "The number of shifts worked in the interval.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ShiftsWorkedPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of shifts worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "shiftsWorked" : {
            "format" : "int64",
            "description" : "The number of shift worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ShiftsWorkedPerPeriodNotInPreferredRangeJustification" : {
        "type" : "object",
        "properties" : {
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of shifts worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "shiftsWorked" : {
            "format" : "int64",
            "description" : "The number of shifts worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ShiftsWorkedPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of shifts worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "shiftsWorked" : {
            "format" : "int64",
            "description" : "The number of shift worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "ShiftsWorkedPerPeriodNotInRequiredRangeJustification" : {
        "type" : "object",
        "properties" : {
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of shifts worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "shiftsWorked" : {
            "format" : "int64",
            "description" : "The number of shifts worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "SingleDayShiftSequencePatternElement" : {
        "type" : "object",
        "properties" : {
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "SingleDayShiftSequencePatternRule" : {
        "required" : [ "id", "pattern" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "satisfiability" : {
            "description" : "Defines satisfiability type of the rule. Please note that REQUIRED is being deprecated and will be replaced by PREFERRED in future version.",
            "default" : "REQUIRED",
            "enum" : [ "REQUIRED", "PROHIBITED", "PREFERRED", "UNPREFERRED" ],
            "type" : "string"
          },
          "weight" : {
            "format" : "int64",
            "description" : "The weight of this pattern, which can be used to make this pattern more important than other patterns. For example, setting the weight to 2 will make the reward/penalty of this pattern's elements count twice when matched.",
            "default" : 1,
            "minimum" : 1,
            "type" : "integer"
          },
          "pattern" : {
            "description" : "Sequence of pattern elements to be matched.",
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/SingleDayShiftSequencePatternElement"
            }
          },
          "ordered" : {
            "description" : "Defines whether the shifts should match the pattern in the order defined in the pattern.",
            "default" : true,
            "type" : "boolean"
          }
        },
        "additionalProperties" : false
      },
      "Skill" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the skill.",
            "type" : "string"
          },
          "validityDateTimeSpans" : {
            "description" : "List of time spans that optionally restrict validity of the skill.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/DateTimeSpan"
            }
          }
        },
        "additionalProperties" : false
      },
      "SkillOperand" : {
        "description" : "Base interface for complex skill requirements.",
        "type" : "object",
        "oneOf" : [ {
          "$ref" : "#/components/schemas/SkillOperandLeaf"
        }, {
          "$ref" : "#/components/schemas/SkillOperandNode"
        } ],
        "discriminator" : {
          "propertyName" : "type",
          "mapping" : {
            "LEAF" : "#/components/schemas/SkillOperandLeaf",
            "NODE" : "#/components/schemas/SkillOperandNode"
          }
        }
      },
      "SkillOperandLeaf" : {
        "description" : "A skill operand leaf defines a skill that will be evaluated based on its parent's operator.",
        "required" : [ "type", "skillId" ],
        "type" : "object",
        "properties" : {
          "type" : {
            "description" : "Type of the operand, for a skill operand leaf this should be 'LEAF'.",
            "enum" : [ "LEAF", "NODE" ],
            "type" : "string"
          },
          "skillId" : {
            "description" : "The id of the skill.",
            "type" : "string"
          }
        }
      },
      "SkillOperandNode" : {
        "description" : "A skill operand node defines operands that will be evaluated based on the operator.",
        "required" : [ "type", "operator", "operands" ],
        "type" : "object",
        "properties" : {
          "type" : {
            "description" : "Type of the operand, for a skill operand node this should be 'NODE'.",
            "enum" : [ "LEAF", "NODE" ],
            "type" : "string"
          },
          "operator" : {
            "description" : "The operator that will determine how the operands are evaluated, as AND or as OR.",
            "enum" : [ "AND", "OR" ],
            "type" : "string"
          },
          "operands" : {
            "description" : "A list of operands that can be either leaves, specifying skills, or nodes, creating complex AND/OR structures.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/SkillOperand"
            }
          }
        },
        "additionalProperties" : false
      },
      "SolverTerminationConfig" : {
        "type" : "object",
        "properties" : {
          "spentLimit" : {
            "description" : "Maximum duration (ISO 8601 duration format) to keep the solver running (e.g. PT1H).",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "example" : "PT1H"
          },
          "unimprovedSpentLimit" : {
            "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 must be empty. Warning: using this option will disable the default diminished returns termination which is recommended for most use cases.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/Duration"
            } ],
            "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.",
            "type" : "integer",
            "example" : 1000
          }
        },
        "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" : {
        "required" : [ "id", "tagType" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the tag.",
            "type" : "string"
          },
          "tagType" : {
            "description" : "Tag type.",
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "TagAwareDateTimeSpan" : {
        "required" : [ "start", "end" ],
        "type" : "object",
        "properties" : {
          "start" : {
            "description" : "Inclusive start time of the span.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "end" : {
            "description" : "Exclusive end time of the span.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/OffsetDateTime"
            } ]
          },
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only shifts not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "weight" : {
            "format" : "int32",
            "description" : "Defines the weight of this time span. A higher weight means that it is more important. This is only used for soft constraints.",
            "default" : 1,
            "minimum" : 1,
            "type" : "integer"
          }
        },
        "additionalProperties" : false
      },
      "TagType" : {
        "required" : [ "id" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the tag type.",
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "TimeOfDayInterval" : {
        "required" : [ "start", "end" ],
        "type" : "object",
        "properties" : {
          "start" : {
            "description" : "Start time of the daily interval (inclusive). Format: HH:mm or HH:mm:ss.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalTime"
            } ]
          },
          "end" : {
            "description" : "End time of the daily interval (exclusive). If end <= start, the interval spans midnight.",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/LocalTime"
            } ]
          }
        },
        "additionalProperties" : false
      },
      "TravelConfiguration" : {
        "type" : "object",
        "properties" : {
          "includeShiftTags" : {
            "description" : "If defined, only shifts containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here have to be present in the shift tags. With shiftTagMatches set to ANY, at least one tag defined here has to be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeShiftTags" : {
            "description" : "If defined, only employees not containing these tags are matched. With shiftTagMatches set to ALL, all tags defined here cannot be present in the shift tags. With shiftTagMatches set to ANY, any of the tags defined here cannot be present in the shift tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "shiftTagMatches" : {
            "description" : "Defines how includeShiftTags and excludeShiftTags are matched against the shift tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          },
          "excludeMatchingShiftTagTypes" : {
            "description" : "If defined, exclude shifts, where the employee assigned to the shift has preferred/required tags with one of these tag types. Consider a shift with tag 'Belgium' that has tag type 'Country'. Employee has a preference to work in Belgium. If tag type 'Country' is declared in excludeMatchingShiftTagTypes, such shift is not matched.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "maxEmployeeToShiftTravelDistanceInMeters" : {
            "format" : "int64",
            "description" : "Defines maximum travel distance between employee location and shift location.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "minMinutesBetweenShiftsInDifferentLocations" : {
            "format" : "int32",
            "description" : "Defines minimum number of minutes between shifts that have different locations and are assigned to the same employee.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          }
        }
      },
      "UnassignedOptionalShiftJustification" : {
        "type" : "object",
        "properties" : {
          "shift" : {
            "description" : "The id of the unassigned shift.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "UnassignedShiftJustification" : {
        "type" : "object",
        "properties" : {
          "shift" : {
            "description" : "The id of the unassigned shift.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "UnassignedShiftRule" : {
        "required" : [ "id", "priorityWeights" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "description" : "Unique identifier of the rule.",
            "type" : "string"
          },
          "priorityWeights" : {
            "description" : "Definition of priorities and their weights.",
            "minItems" : 1,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PriorityConfiguration"
            }
          }
        },
        "additionalProperties" : false
      },
      "UniqueTagsLimit" : {
        "required" : [ "tagsMax", "includeTagTypes" ],
        "type" : "object",
        "properties" : {
          "tagsMax" : {
            "format" : "int32",
            "description" : "Maximum number of unique tags.",
            "minimum" : 1,
            "type" : "integer"
          },
          "includeTagTypes" : {
            "description" : "The TagTypes of which the tags will be counted of.",
            "minimum" : 1,
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "UniqueTagsPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of unique tags is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "uniqueTagsAmount" : {
            "format" : "int32",
            "description" : "The number of unique tags.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "UniqueTagsPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of unique tags is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "uniqueTagsAmount" : {
            "format" : "int32",
            "description" : "The number of unique tags.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "UnpreferredEmployeeAssignedJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The id of the unpreferred employee.",
            "type" : "string"
          },
          "shift" : {
            "description" : "The id of shift with unpreferred employees.",
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "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" : {
              "$ref" : "#/components/schemas/IssueType"
            }
          }
        }
      },
      "ValidationResultEmployeeScheduleValidationIssueDetail" : {
        "required" : [ "status" ],
        "type" : "object",
        "properties" : {
          "status" : {
            "description" : "Determines if the validated dataset is accepted for further processing",
            "type" : "string",
            "allOf" : [ {
              "$ref" : "#/components/schemas/ValidationStatus"
            } ]
          },
          "issues" : {
            "description" : "Validation issues found",
            "type" : "array",
            "items" : {
              "required" : [ "id", "code", "severity" ],
              "type" : "object",
              "properties" : {
                "id" : {
                  "format" : "int32",
                  "description" : "Issue instance ID. Unique per dataset.",
                  "type" : "integer"
                },
                "code" : {
                  "description" : "Issue code referring to an issue type.",
                  "type" : "string"
                },
                "severity" : {
                  "description" : "Issue severity",
                  "enum" : [ "ERROR", "WARNING" ],
                  "type" : "string"
                },
                "detail" : {
                  "description" : "Issue detail specific to the issue type.",
                  "type" : "object",
                  "allOf" : [ {
                    "$ref" : "#/components/schemas/EmployeeScheduleValidationIssueDetail"
                  } ],
                  "nullable" : true
                }
              }
            }
          }
        }
      },
      "ValidationStatus" : {
        "enum" : [ "VALIDATION_NOT_SUPPORTED", "OK", "WARNINGS", "ERRORS" ],
        "type" : "string"
      },
      "WeekendConfiguration" : {
        "type" : "object",
        "properties" : {
          "weekendDays" : {
            "description" : "Consecutive days of the week that are considered weekend days. Defaults to Saturday and Sunday.",
            "default" : [ "SATURDAY", "SUNDAY" ],
            "maxItems" : 3,
            "minItems" : 1,
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/DayOfWeek"
            }
          }
        },
        "additionalProperties" : false
      },
      "WeekendMinutesWorkedPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of minutes worked in the weekend is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "weekendMinutesWorked" : {
            "format" : "int64",
            "description" : "The number of minutes worked in the weekend.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "WeekendMinutesWorkedPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of minutes worked in the weekend is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "weekendMinutesWorked" : {
            "format" : "int64",
            "description" : "The number of minutes worked in the weekend.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "WeekendsLimit" : {
        "type" : "object",
        "properties" : {
          "weekendMinutesWorkedMax" : {
            "format" : "int32",
            "description" : "Maximum number of weekend minutes worked in a period.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "weekendsWorkedMax" : {
            "format" : "int32",
            "description" : "Maximum number of weekends worked in a period.",
            "minimum" : 0,
            "type" : "integer",
            "nullable" : true
          },
          "unloggedBreakTags" : {
            "description" : "If defined, only breaks containing these tags are not counted towards working time. With breakTagMatches set to ALL, all tags defined here have to be present in the break tags. With breakTagMatches set to ANY, at least one tag defined here has to be present in the break tags.",
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "breakTagMatches" : {
            "description" : "Defines how unloggedBreakTags are matched against the break tags.",
            "default" : "ALL",
            "enum" : [ "ANY", "ALL" ],
            "type" : "string"
          }
        },
        "additionalProperties" : false
      },
      "WeekendsWorkedInRollingWindowNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rollingWindowRule" : {
            "description" : "The rolling window rule id.",
            "type" : "string"
          },
          "dateTimeSpan" : {
            "description" : "The date time span during which the number of weekends worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DateTimeSpan"
            } ]
          },
          "weekendsWorked" : {
            "format" : "int64",
            "description" : "The number of weekends worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "WeekendsWorkedInRollingWindowNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "rollingWindowRule" : {
            "description" : "The rolling window rule id.",
            "type" : "string"
          },
          "dateTimeSpan" : {
            "description" : "The date time span during which the number of weekends worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/DateTimeSpan"
            } ]
          },
          "weekendsWorked" : {
            "format" : "int64",
            "description" : "The number of weekends worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "WeekendsWorkedPerPeriodNotInPreferredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of weekends worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "weekendsWorked" : {
            "format" : "int64",
            "description" : "The number of weekends worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "WeekendsWorkedPerPeriodNotInRequiredRangeForEmployeeJustification" : {
        "type" : "object",
        "properties" : {
          "employee" : {
            "description" : "The employee id.",
            "type" : "string"
          },
          "periodRule" : {
            "description" : "The period rule id.",
            "type" : "string"
          },
          "dateSpan" : {
            "description" : "The date span during which the number of weekends worked is calculated.",
            "type" : "object",
            "allOf" : [ {
              "$ref" : "#/components/schemas/PeriodDateSpan"
            } ]
          },
          "weekendsWorked" : {
            "format" : "int64",
            "description" : "The number of weekends worked.",
            "type" : "integer"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "WeeklyRotationPeriod" : {
        "description" : "Weekly rotation period configuration. Use this to define fixed weekly rotation periods with a length of 7.",
        "required" : [ "type" ],
        "type" : "object",
        "properties" : {
          "type" : {
            "description" : "Type identifier",
            "enum" : [ "WEEKLY" ],
            "type" : "string"
          }
        }
      }
    },
    "securitySchemes" : {
      "auth" : {
        "type" : "apiKey",
        "in" : "header",
        "name" : "X-API-KEY",
        "description" : "API key required to authenticate as part of Timefold Platform"
      }
    }
  }
}