Learn how to define the employees that will be used in the roster.
Employees form the foundation for all schedules produced by the solver. The primary objective for all produced schedules is to assign employees to shifts in such a way that they can optimally cover all demand for labour.
Employee schema
object
Show properties
string
required
Unique identifier for this employee.
array of string
List of labels assigned to this employee. Labels can be used in constraints to group employees.
array of object
List of attributes that this employee has. Shifts, demands and tasks can have requirements on the attributes that an employee has.
Show attributes – item structure
string
The category of the attribute.
array of string
required
The values that the employee has for this attribute. For example, an employee can have the values “marketing” and “finance” for an attribute with the id “department”.
object
List of periods in the schedule. Periods can either be defined explicitly using custom definitions, or through a recurrent definition. A recurrent definition can be used to easily generate a list of similar periods (such as weeks, months, etc.).
Show periods – properties
object
List of days in the schedule. Each day will become one period. By default, each period will last the entire day. If a startTime and/or endTime are specified, these will apply to each period.
Show days – properties
array of date (date)
List of dates in the schedule. Only allowed in CALENDAR payloads.
array of dayIndex
List of day indices in the schedule. Only allowed in RECURRING payloads.
array of dayOfWeek
List of days of the week. Will apply to all days in the schedule that match any of the specified weekdays.
string (time)
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
string (time)
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
array of object
List of custom period definitions. Each custom period definition defines one period in the schedule.
Show customDefinitions – item structure
object
Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).
Show startDay – properties
string (date)
Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.
integer
Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.
object
Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).
Show endDay – properties
string (date)
Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.
integer
Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.
string (time)
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
string (time)
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
boolean
If true, the startTime and endTime will be applied to each individual day in the period. If false, the startTime will apply to the first day and the endTime will apply to the last day. Default: false.
object
A recurrent definition to easily create a set of similar periods.
Show recurrentDefinition – properties
integer
required
The number of days in each period.
integer
The number of days between the start of each period. If not specified, this defaults to the value of daysPerPeriod, creating non-overlapping consecutive periods. Setting daysBetweenStarts to 1 will create a sliding window of periods.
object
Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).
Show startDay – properties
string (date)
Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.
integer
Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.
object
Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).
Show endDay – properties
string (date)
Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.
integer
Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.
string (time)
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
string (time)
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
boolean
If true, the startTime and endTime will be applied to each individual day in the period. If false, the startTime will apply to the first day and the endTime will apply to the last day. Default: false.
array of string
Provide labels to re-use periods that were defined in the configuration.
array of object
Optional list of roles that this employee can work. Each role can have additional attributes that the employee has when working that role.
Show roles – item structure
string
Unique identifier for this role.
array of object
List of additional attributes this employee has when they work in this role.
Show attributes – item structure
string
The category of the attribute.
array of string
required
The values that the employee has for this attribute. For example, an employee can have the values “marketing” and “finance” for an attribute with the id “department”.
object
List of periods in the schedule. Periods can either be defined explicitly using custom definitions, or through a recurrent definition. A recurrent definition can be used to easily generate a list of similar periods (such as weeks, months, etc.).
Show periods – properties
object
List of days in the schedule. Each day will become one period. By default, each period will last the entire day. If a startTime and/or endTime are specified, these will apply to each period.
Show days – properties
array of date (date)
List of dates in the schedule. Only allowed in CALENDAR payloads.
array of dayIndex
List of day indices in the schedule. Only allowed in RECURRING payloads.
array of dayOfWeek
List of days of the week. Will apply to all days in the schedule that match any of the specified weekdays.
string (time)
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
string (time)
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
array of object
List of custom period definitions. Each custom period definition defines one period in the schedule.
Show customDefinitions – item structure
object
Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).
Show startDay – properties
string (date)
Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.
integer
Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.
object
Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).
Show endDay – properties
string (date)
Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.
integer
Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.
string (time)
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
string (time)
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
boolean
If true, the startTime and endTime will be applied to each individual day in the period. If false, the startTime will apply to the first day and the endTime will apply to the last day. Default: false.
object
A recurrent definition to easily create a set of similar periods.
Show recurrentDefinition – properties
integer
required
The number of days in each period.
integer
The number of days between the start of each period. If not specified, this defaults to the value of daysPerPeriod, creating non-overlapping consecutive periods. Setting daysBetweenStarts to 1 will create a sliding window of periods.
object
Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).
Show startDay – properties
string (date)
Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.
integer
Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.
object
Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).
Show endDay – properties
string (date)
Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.
integer
Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.
string (time)
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
string (time)
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
boolean
If true, the startTime and endTime will be applied to each individual day in the period. If false, the startTime will apply to the first day and the endTime will apply to the last day. Default: false.
array of string
Provide labels to re-use periods that were defined in the configuration.
array of object
List of assignments that are pre-assigned to this employee.
Show preassignedShifts – item structure
string
required
Unique identifier for the shift.
object
required
List of days in the schedule. Days can be defined as an array of dates (in CALENDAR payloads), as an array of day indices (in RECURRING payloads), or as an array of weekdays (allowed in all payloads).
Show days – properties
array of date (date)
List of dates in the schedule. Only allowed in CALENDAR payloads.
array of dayIndex
List of day indices in the schedule. Only allowed in RECURRING payloads.
array of dayOfWeek
List of days of the week. Will apply to all days in the schedule that match any of the specified weekdays.
boolean
Whether the shift is locked. Locked shifts cannot be changed by the solver. For read-only employees, all shifts are automatically considered locked. Default: false.
string
The role id of the role that the employee has when working this shift. Needs to match a role id from the employee’s list of roles.
boolean
If set to true, the employee will only work their preassigned shifts. These will not be altered, and the solver will not assign new shifts to this employee. Default: false.
Attributes
Employee attributes provide a flexible way to specify custom characteristics for each employee. These attributes can be used to determine eligibility for shifts, demands, or tasks. In addition, some constraints can be configured to apply to all employees that meet certain attribute requirements. Some good examples of characteristics where it might make sense to use attributes are departments, competences, or personnel-groups.Each attribute must have its own unique category indicating what kind of attribute it is. An employee can have multiple values for the same attribute.Here’s an example of how to specify attributes for an employee:
The following example shows an employee that is part of the departments finance and hr, and has the competences manager and accountant. Finally, they are part of the personnel group group-1.
It is possible to start the solver from a partially filled schedule where employees already have some shifts assigned to them. These are specified in preassignedShifts. If these pre-assignments are set to isLocked, the solver will never change them. The solver therefore considers unlocked preassigned shifts as suggestions.
The following example shows an employee that is preassigned to work shift-1 shifts on each of the first four days of the schedule. These assignments are set as isLocked and will not be changed by the solver.
You can set an employee to isReadOnly to indicate that the solver should only use their preassigned shifts and not assign them to any new shifts. This is useful when you want to preserve certain employee assignments while allowing the solver to optimize the rest of the schedule.When an employee is marked as isReadOnly, the solver will:
Use all their preassigned shifts (regardless of whether they are locked or unlocked)
Not assign the employee to any additional shifts beyond their preassigned ones
The following example shows an employee that is set to read-only. The solver will only use their preassigned shifts and will not assign them to any new shifts.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Automatic Rostering","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/automaticrostering/geYJCg2PEZLfgAwl/logo/light.png?fit=max\u0026auto=format\u0026n=geYJCg2PEZLfgAwl\u0026q=85\u0026s=184cc1b5d04c48601ba425b95cf1d878","dark":"https://mintcdn.com/automaticrostering/geYJCg2PEZLfgAwl/logo/light.png?fit=max\u0026auto=format\u0026n=geYJCg2PEZLfgAwl\u0026q=85\u0026s=184cc1b5d04c48601ba425b95cf1d878"},"favicon":"https://mintcdn.com/automaticrostering/tszNXFD11BtKFzPx/favicon.png?fit=max\u0026auto=format\u0026n=tszNXFD11BtKFzPx\u0026q=85\u0026s=c07f8a95ebdc438d2979dd06d3d989ed","api":{"examples":{"languages":[]}},"navbar":{"links":[{"href":"mailto:stian.vale@visma.com","label":"Contact"}]},"footer":{},"contextual":{"options":["copy","chatgpt"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"automaticrostering","hasAudioNarration":false,"actualSubdomain":"automaticrostering","customDomains":["docs.automaticrostering.visma.net"],"gitSource":{"type":"github","owner":"automatic-rostering","repo":"product","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6aedc35cb7010cc612509184","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"Guides","count":41},{"language":"default","tag":"Entities","count":24},{"language":"default","tag":"API reference","count":10},{"language":"default","tag":"Constraints","count":9},{"language":"default","tag":"Rules","count":9},{"language":"default","tag":"Roster","count":8},{"language":"default","tag":"Getting started","count":7},{"language":"default","tag":"Concepts","count":3},{"language":"default","tag":"Status updates","count":3},{"language":"default","tag":"Other","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"v1/entities/employees","slug":"/v1/entities/employees","pageMetadata":{"title":"Employees","description":"Learn how to define the employees that will be used in the roster.","icon":"users","href":"/v1/entities/employees"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn how to define the employees that will be used in the roster.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,ul:`ul`,..._provideComponents(),...props.components},{Card,CodeBlock,Expandable,Heading,ResponseField,Tip}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Employees form the foundation for all schedules produced by the solver. The primary objective for all produced schedules is to assign employees to shifts in such a way that they can optimally cover all demand for labour.`}),`\n`,_jsx(Card,{title:`Employee schema`,children:_jsx(ResponseField,{name:`employee`,type:`object`,id:`param-employee`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(ResponseField,{name:`id`,type:`string`,required:true,id:`param-id`,children:_jsx(_components.p,{children:`Unique identifier for this employee.`})}),_jsx(ResponseField,{name:`labels`,type:`array of string`,id:`param-labels`,children:_jsx(_components.p,{children:`List of labels assigned to this employee. Labels can be used in constraints to group employees.`})}),_jsx(ResponseField,{name:`attributes`,type:`array of object`,id:`param-attributes`,children:_jsx(_components.p,{children:`List of attributes that this employee has. Shifts, demands and tasks can have requirements on the attributes that an employee has.`})}),_jsxs(Expandable,{title:`attributes – item structure`,children:[_jsx(ResponseField,{name:`category`,type:`string`,id:`param-category`,children:_jsx(_components.p,{children:`The category of the attribute.`})}),_jsx(ResponseField,{name:`values`,type:`array of string`,required:true,id:`param-values`,children:_jsx(_components.p,{children:`The values that the employee has for this attribute. For example, an employee can have the values “marketing” and “finance” for an attribute with the id “department”.`})}),_jsx(ResponseField,{name:`periods`,type:`object`,id:`param-periods`,children:_jsx(_components.p,{children:`List of periods in the schedule. Periods can either be defined explicitly using custom definitions, or through a recurrent definition. A recurrent definition can be used to easily generate a list of similar periods (such as weeks, months, etc.).`})}),_jsxs(Expandable,{title:`periods – properties`,children:[_jsx(ResponseField,{name:`days`,type:`object`,id:`param-days`,children:_jsx(_components.p,{children:`List of days in the schedule. Each day will become one period. By default, each period will last the entire day. If a startTime and/or endTime are specified, these will apply to each period.`})}),_jsxs(Expandable,{title:`days – properties`,children:[_jsx(ResponseField,{name:`dates`,type:`array of date (date)`,id:`param-dates`,children:_jsx(_components.p,{children:`List of dates in the schedule. Only allowed in CALENDAR payloads.`})}),_jsx(ResponseField,{name:`dayIndices`,type:`array of dayIndex`,id:`param-day-indices`,children:_jsx(_components.p,{children:`List of day indices in the schedule. Only allowed in RECURRING payloads.`})}),_jsx(ResponseField,{name:`daysOfWeek`,type:`array of dayOfWeek`,id:`param-days-of-week`,children:_jsx(_components.p,{children:`List of days of the week. Will apply to all days in the schedule that match any of the specified weekdays.`})}),_jsx(ResponseField,{name:`startTime`,type:`string (time)`,id:`param-start-time`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})}),_jsx(ResponseField,{name:`endTime`,type:`string (time)`,id:`param-end-time`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})})]}),_jsx(ResponseField,{name:`customDefinitions`,type:`array of object`,id:`param-custom-definitions`,children:_jsx(_components.p,{children:`List of custom period definitions. Each custom period definition defines one period in the schedule.`})}),_jsxs(Expandable,{title:`customDefinitions – item structure`,children:[_jsx(ResponseField,{name:`startDay`,type:`object`,id:`param-start-day`,children:_jsx(_components.p,{children:`Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).`})}),_jsxs(Expandable,{title:`startDay – properties`,children:[_jsx(ResponseField,{name:`date`,type:`string (date)`,id:`param-date`,children:_jsx(_components.p,{children:`Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.`})}),_jsx(ResponseField,{name:`dayIndex`,type:`integer`,id:`param-day-index`,children:_jsx(_components.p,{children:`Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.`})})]}),_jsx(ResponseField,{name:`endDay`,type:`object`,id:`param-end-day`,children:_jsx(_components.p,{children:`Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).`})}),_jsxs(Expandable,{title:`endDay – properties`,children:[_jsx(ResponseField,{name:`date`,type:`string (date)`,id:`param-date-1`,children:_jsx(_components.p,{children:`Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.`})}),_jsx(ResponseField,{name:`dayIndex`,type:`integer`,id:`param-day-index-1`,children:_jsx(_components.p,{children:`Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.`})})]}),_jsx(ResponseField,{name:`startTime`,type:`string (time)`,id:`param-start-time-1`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})}),_jsx(ResponseField,{name:`endTime`,type:`string (time)`,id:`param-end-time-1`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})}),_jsx(ResponseField,{name:`applyTimeToAllDays`,type:`boolean`,id:`param-apply-time-to-all-days`,children:_jsx(_components.p,{children:`If true, the startTime and endTime will be applied to each individual day in the period. If false, the startTime will apply to the first day and the endTime will apply to the last day. Default: false.`})})]}),_jsx(ResponseField,{name:`recurrentDefinition`,type:`object`,id:`param-recurrent-definition`,children:_jsx(_components.p,{children:`A recurrent definition to easily create a set of similar periods.`})}),_jsxs(Expandable,{title:`recurrentDefinition – properties`,children:[_jsx(ResponseField,{name:`daysPerPeriod`,type:`integer`,required:true,id:`param-days-per-period`,children:_jsx(_components.p,{children:`The number of days in each period.`})}),_jsx(ResponseField,{name:`daysBetweenStarts`,type:`integer`,id:`param-days-between-starts`,children:_jsx(_components.p,{children:`The number of days between the start of each period. If not specified, this defaults to the value of daysPerPeriod, creating non-overlapping consecutive periods. Setting daysBetweenStarts to 1 will create a sliding window of periods.`})}),_jsx(ResponseField,{name:`startDay`,type:`object`,id:`param-start-day-1`,children:_jsx(_components.p,{children:`Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).`})}),_jsxs(Expandable,{title:`startDay – properties`,children:[_jsx(ResponseField,{name:`date`,type:`string (date)`,id:`param-date-2`,children:_jsx(_components.p,{children:`Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.`})}),_jsx(ResponseField,{name:`dayIndex`,type:`integer`,id:`param-day-index-2`,children:_jsx(_components.p,{children:`Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.`})})]}),_jsx(ResponseField,{name:`endDay`,type:`object`,id:`param-end-day-1`,children:_jsx(_components.p,{children:`Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).`})}),_jsxs(Expandable,{title:`endDay – properties`,children:[_jsx(ResponseField,{name:`date`,type:`string (date)`,id:`param-date-3`,children:_jsx(_components.p,{children:`Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.`})}),_jsx(ResponseField,{name:`dayIndex`,type:`integer`,id:`param-day-index-3`,children:_jsx(_components.p,{children:`Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.`})})]}),_jsx(ResponseField,{name:`startTime`,type:`string (time)`,id:`param-start-time-2`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})}),_jsx(ResponseField,{name:`endTime`,type:`string (time)`,id:`param-end-time-2`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})}),_jsx(ResponseField,{name:`applyTimeToAllDays`,type:`boolean`,id:`param-apply-time-to-all-days-1`,children:_jsx(_components.p,{children:`If true, the startTime and endTime will be applied to each individual day in the period. If false, the startTime will apply to the first day and the endTime will apply to the last day. Default: false.`})})]}),_jsx(ResponseField,{name:`labels`,type:`array of string`,id:`param-labels-1`,children:_jsx(_components.p,{children:`Provide labels to re-use periods that were defined in the configuration.`})})]})]}),_jsx(ResponseField,{name:`roles`,type:`array of object`,id:`param-roles`,children:_jsx(_components.p,{children:`Optional list of roles that this employee can work. Each role can have additional attributes that the employee has when working that role.`})}),_jsxs(Expandable,{title:`roles – item structure`,children:[_jsx(ResponseField,{name:`id`,type:`string`,id:`param-id-1`,children:_jsx(_components.p,{children:`Unique identifier for this role.`})}),_jsx(ResponseField,{name:`attributes`,type:`array of object`,id:`param-attributes-1`,children:_jsx(_components.p,{children:`List of additional attributes this employee has when they work in this role.`})}),_jsxs(Expandable,{title:`attributes – item structure`,children:[_jsx(ResponseField,{name:`category`,type:`string`,id:`param-category-1`,children:_jsx(_components.p,{children:`The category of the attribute.`})}),_jsx(ResponseField,{name:`values`,type:`array of string`,required:true,id:`param-values-1`,children:_jsx(_components.p,{children:`The values that the employee has for this attribute. For example, an employee can have the values “marketing” and “finance” for an attribute with the id “department”.`})}),_jsx(ResponseField,{name:`periods`,type:`object`,id:`param-periods-1`,children:_jsx(_components.p,{children:`List of periods in the schedule. Periods can either be defined explicitly using custom definitions, or through a recurrent definition. A recurrent definition can be used to easily generate a list of similar periods (such as weeks, months, etc.).`})}),_jsxs(Expandable,{title:`periods – properties`,children:[_jsx(ResponseField,{name:`days`,type:`object`,id:`param-days-1`,children:_jsx(_components.p,{children:`List of days in the schedule. Each day will become one period. By default, each period will last the entire day. If a startTime and/or endTime are specified, these will apply to each period.`})}),_jsxs(Expandable,{title:`days – properties`,children:[_jsx(ResponseField,{name:`dates`,type:`array of date (date)`,id:`param-dates-1`,children:_jsx(_components.p,{children:`List of dates in the schedule. Only allowed in CALENDAR payloads.`})}),_jsx(ResponseField,{name:`dayIndices`,type:`array of dayIndex`,id:`param-day-indices-1`,children:_jsx(_components.p,{children:`List of day indices in the schedule. Only allowed in RECURRING payloads.`})}),_jsx(ResponseField,{name:`daysOfWeek`,type:`array of dayOfWeek`,id:`param-days-of-week-1`,children:_jsx(_components.p,{children:`List of days of the week. Will apply to all days in the schedule that match any of the specified weekdays.`})}),_jsx(ResponseField,{name:`startTime`,type:`string (time)`,id:`param-start-time-3`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})}),_jsx(ResponseField,{name:`endTime`,type:`string (time)`,id:`param-end-time-3`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})})]}),_jsx(ResponseField,{name:`customDefinitions`,type:`array of object`,id:`param-custom-definitions-1`,children:_jsx(_components.p,{children:`List of custom period definitions. Each custom period definition defines one period in the schedule.`})}),_jsxs(Expandable,{title:`customDefinitions – item structure`,children:[_jsx(ResponseField,{name:`startDay`,type:`object`,id:`param-start-day-2`,children:_jsx(_components.p,{children:`Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).`})}),_jsxs(Expandable,{title:`startDay – properties`,children:[_jsx(ResponseField,{name:`date`,type:`string (date)`,id:`param-date-4`,children:_jsx(_components.p,{children:`Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.`})}),_jsx(ResponseField,{name:`dayIndex`,type:`integer`,id:`param-day-index-4`,children:_jsx(_components.p,{children:`Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.`})})]}),_jsx(ResponseField,{name:`endDay`,type:`object`,id:`param-end-day-2`,children:_jsx(_components.p,{children:`Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).`})}),_jsxs(Expandable,{title:`endDay – properties`,children:[_jsx(ResponseField,{name:`date`,type:`string (date)`,id:`param-date-5`,children:_jsx(_components.p,{children:`Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.`})}),_jsx(ResponseField,{name:`dayIndex`,type:`integer`,id:`param-day-index-5`,children:_jsx(_components.p,{children:`Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.`})})]}),_jsx(ResponseField,{name:`startTime`,type:`string (time)`,id:`param-start-time-4`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})}),_jsx(ResponseField,{name:`endTime`,type:`string (time)`,id:`param-end-time-4`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})}),_jsx(ResponseField,{name:`applyTimeToAllDays`,type:`boolean`,id:`param-apply-time-to-all-days-2`,children:_jsx(_components.p,{children:`If true, the startTime and endTime will be applied to each individual day in the period. If false, the startTime will apply to the first day and the endTime will apply to the last day. Default: false.`})})]}),_jsx(ResponseField,{name:`recurrentDefinition`,type:`object`,id:`param-recurrent-definition-1`,children:_jsx(_components.p,{children:`A recurrent definition to easily create a set of similar periods.`})}),_jsxs(Expandable,{title:`recurrentDefinition – properties`,children:[_jsx(ResponseField,{name:`daysPerPeriod`,type:`integer`,required:true,id:`param-days-per-period-1`,children:_jsx(_components.p,{children:`The number of days in each period.`})}),_jsx(ResponseField,{name:`daysBetweenStarts`,type:`integer`,id:`param-days-between-starts-1`,children:_jsx(_components.p,{children:`The number of days between the start of each period. If not specified, this defaults to the value of daysPerPeriod, creating non-overlapping consecutive periods. Setting daysBetweenStarts to 1 will create a sliding window of periods.`})}),_jsx(ResponseField,{name:`startDay`,type:`object`,id:`param-start-day-3`,children:_jsx(_components.p,{children:`Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).`})}),_jsxs(Expandable,{title:`startDay – properties`,children:[_jsx(ResponseField,{name:`date`,type:`string (date)`,id:`param-date-6`,children:_jsx(_components.p,{children:`Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.`})}),_jsx(ResponseField,{name:`dayIndex`,type:`integer`,id:`param-day-index-6`,children:_jsx(_components.p,{children:`Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.`})})]}),_jsx(ResponseField,{name:`endDay`,type:`object`,id:`param-end-day-3`,children:_jsx(_components.p,{children:`Describes one day in the schedule. Can be defined as a date (in CALENDAR payloads) or as a day index (in RECURRING payloads).`})}),_jsxs(Expandable,{title:`endDay – properties`,children:[_jsx(ResponseField,{name:`date`,type:`string (date)`,id:`param-date-7`,children:_jsx(_components.p,{children:`Date is specified in ISO8601 format YYYY-MM-DD. Can only be used when schedule type is CALENDAR.`})}),_jsx(ResponseField,{name:`dayIndex`,type:`integer`,id:`param-day-index-7`,children:_jsx(_components.p,{children:`Day index relative to the first day of the period (starts at 0). Can only be used when schedule type is RECURRING.`})})]}),_jsx(ResponseField,{name:`startTime`,type:`string (time)`,id:`param-start-time-5`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})}),_jsx(ResponseField,{name:`endTime`,type:`string (time)`,id:`param-end-time-5`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})}),_jsx(ResponseField,{name:`applyTimeToAllDays`,type:`boolean`,id:`param-apply-time-to-all-days-3`,children:_jsx(_components.p,{children:`If true, the startTime and endTime will be applied to each individual day in the period. If false, the startTime will apply to the first day and the endTime will apply to the last day. Default: false.`})})]}),_jsx(ResponseField,{name:`labels`,type:`array of string`,id:`param-labels-2`,children:_jsx(_components.p,{children:`Provide labels to re-use periods that were defined in the configuration.`})})]})]})]}),_jsx(ResponseField,{name:`preassignedShifts`,type:`array of object`,id:`param-preassigned-shifts`,children:_jsx(_components.p,{children:`List of assignments that are pre-assigned to this employee.`})}),_jsxs(Expandable,{title:`preassignedShifts – item structure`,children:[_jsx(ResponseField,{name:`shiftId`,type:`string`,required:true,id:`param-shift-id`,children:_jsx(_components.p,{children:`Unique identifier for the shift.`})}),_jsx(ResponseField,{name:`days`,type:`object`,required:true,id:`param-days-2`,children:_jsx(_components.p,{children:`List of days in the schedule. Days can be defined as an array of dates (in CALENDAR payloads), as an array of day indices (in RECURRING payloads), or as an array of weekdays (allowed in all payloads).`})}),_jsxs(Expandable,{title:`days – properties`,children:[_jsx(ResponseField,{name:`dates`,type:`array of date (date)`,id:`param-dates-2`,children:_jsx(_components.p,{children:`List of dates in the schedule. Only allowed in CALENDAR payloads.`})}),_jsx(ResponseField,{name:`dayIndices`,type:`array of dayIndex`,id:`param-day-indices-2`,children:_jsx(_components.p,{children:`List of day indices in the schedule. Only allowed in RECURRING payloads.`})}),_jsx(ResponseField,{name:`daysOfWeek`,type:`array of dayOfWeek`,id:`param-days-of-week-2`,children:_jsx(_components.p,{children:`List of days of the week. Will apply to all days in the schedule that match any of the specified weekdays.`})})]}),_jsx(ResponseField,{name:`isLocked`,type:`boolean`,id:`param-is-locked`,children:_jsx(_components.p,{children:`Whether the shift is locked. Locked shifts cannot be changed by the solver. For read-only employees, all shifts are automatically considered locked. Default: false.`})}),_jsx(ResponseField,{name:`roleId`,type:`string`,id:`param-role-id`,children:_jsx(_components.p,{children:`The role id of the role that the employee has when working this shift. Needs to match a role id from the employee’s list of roles.`})})]}),_jsx(ResponseField,{name:`isReadOnly`,type:`boolean`,id:`param-is-read-only`,children:_jsx(_components.p,{children:`If set to true, the employee will only work their preassigned shifts. These will not be altered, and the solver will not assign new shifts to this employee. Default: false.`})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`attributes`,children:`Attributes`}),`\n`,_jsxs(_components.p,{children:[`Employee attributes provide a flexible way to specify custom characteristics for each employee. These attributes can be used to determine eligibility for shifts, demands, or tasks. In addition, some constraints can be configured to apply to all employees that meet certain attribute requirements. Some good examples of characteristics where it might make sense to use attributes are `,_jsx(_components.code,{children:`departments`}),`, `,_jsx(_components.code,{children:`competences`}),`, or `,_jsx(_components.code,{children:`personnel-groups`}),`.`]}),`\n`,_jsx(_components.p,{children:`Each attribute must have its own unique category indicating what kind of attribute it is. An employee can have multiple values for the same attribute.`}),`\n`,_jsx(_components.p,{children:`Here’s an example of how to specify attributes for an employee:`}),`\n`,_jsxs(Tip,{children:[_jsxs(_components.p,{children:[`The following example shows an employee that is part of the departments `,_jsx(_components.code,{children:`finance`}),` and `,_jsx(_components.code,{children:`hr`}),`, and has the competences `,_jsx(_components.code,{children:`manager`}),` and `,_jsx(_components.code,{children:`accountant`}),`. Finally, they are part of the personnel group `,_jsx(_components.code,{children:`group-1`}),`.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`17`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`17`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"employee-1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"attributes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"category\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"department\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"values\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"finance\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"hr\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"category\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"competence\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"values\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"manager\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"accountant\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"category\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"personnel-group\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"values\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"group-1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),`\n`,_jsx(Heading,{level:`2`,id:`preassigned-shifts`,children:`Preassigned shifts`}),`\n`,_jsxs(_components.p,{children:[`It is possible to start the solver from a partially filled schedule where employees already have some shifts assigned to them. These are specified in `,_jsx(_components.code,{children:`preassignedShifts`}),`. If these pre-assignments are set to `,_jsx(_components.code,{children:`isLocked`}),`, the solver will never change them. The solver therefore considers unlocked preassigned shifts as suggestions.`]}),`\n`,_jsxs(Tip,{children:[_jsxs(_components.p,{children:[`The following example shows an employee that is preassigned to work `,_jsx(_components.code,{children:`shift-1`}),` shifts on each of the first four days of the schedule. These assignments are set as `,_jsx(_components.code,{children:`isLocked`}),` and will not be changed by the solver.`]}),_jsx(CodeBlock,{filename:``,highlight:`[6]`,numberOfLines:`12`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`12`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"employee-1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"preassignedShifts\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"shiftId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"shift-1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line line-highlight`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"isLocked\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"days\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"dayIndices\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),`\n`,_jsx(Heading,{level:`2`,id:`read-only-employees`,children:`Read-only employees`}),`\n`,_jsxs(_components.p,{children:[`You can set an employee to `,_jsx(_components.code,{children:`isReadOnly`}),` to indicate that the solver should only use their preassigned shifts and not assign them to any new shifts. This is useful when you want to preserve certain employee assignments while allowing the solver to optimize the rest of the schedule.`]}),`\n`,_jsxs(_components.p,{children:[`When an employee is marked as `,_jsx(_components.code,{children:`isReadOnly`}),`, the solver will:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Use all their preassigned shifts (regardless of whether they are locked or unlocked)`}),`\n`,_jsx(_components.li,{children:`Not assign the employee to any additional shifts beyond their preassigned ones`}),`\n`]}),`\n`,_jsxs(Tip,{children:[_jsx(_components.p,{children:`The following example shows an employee that is set to read-only. The solver will only use their preassigned shifts and will not assign them to any new shifts.`}),_jsx(CodeBlock,{filename:``,highlight:`[3]`,numberOfLines:`12`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`12`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"employee-1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line line-highlight`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"isReadOnly\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"preassignedShifts\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"shiftId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"shift-1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"days\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"dayIndices\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Employees","description":"Learn how to define the employees that will be used in the roster.","icon":"users","href":"/v1/entities/employees"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Attributes","slug":"attributes","depth":2,"children":[]},{"title":"Preassigned shifts","slug":"preassigned-shifts","depth":2,"children":[]},{"title":"Read-only employees","slug":"read-only-employees","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/automaticrostering/cf28444263d74e9f/v1/api-reference/scripts/schema-to-mintlify.js","/_mintlify/custom/automaticrostering/c99586a9043111f0/v1/api-reference/scripts/strip-deprecated.js","/_mintlify/custom/automaticrostering/91008760a362276f/v1/api-reference/update-api.js","/_mintlify/custom/automaticrostering/2d0dc99d5a8b6ce9/v2/update-api.js"],"subdomain":"automaticrostering","siteName":"Automatic Rostering","title":"Employees - Automatic Rostering","navMaps":{"firstHrefInVersion":{"2.0.0":{"href":"/v2/entities/employees","matchLevel":1},"1.0.0":{"href":"/v1/entities/employees","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-04-23T11:50:03.130Z","originalFileLocation":"v1/entities/employees.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn how to define the employees that will be used in the roster.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Automatic Rostering\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Employees - Automatic Rostering\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how to define the employees that will be used in the roster.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Automatic Rostering\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.automaticrostering.visma.net/v1/entities/employees\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://automaticrostering.mintlify.site/_mintlify/api/og/v2?division=Entities\u0026amp;title=Employees\u0026amp;description=Learn+how+to+define+the+employees+that+will+be+used+in+the+roster.\u0026amp;theme=82f9a5919eb5b34df74de5d7\u0026amp;signature=68c8bc7b4a16592ff17c9348e8705e75ac37072a74f0c3ce1777efbc5b932539\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Employees - Automatic Rostering\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how to define the employees that will be used in the roster.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://automaticrostering.mintlify.site/_mintlify/api/og/v2?division=Entities\u0026amp;title=Employees\u0026amp;description=Learn+how+to+define+the+employees+that+will+be+used+in+the+roster.\u0026amp;theme=82f9a5919eb5b34df74de5d7\u0026amp;signature=68c8bc7b4a16592ff17c9348e8705e75ac37072a74f0c3ce1777efbc5b932539\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Automatic Rostering\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.automaticrostering.visma.net/v1/entities/employees\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v1/entities/employees.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.automaticrostering.visma.net/#organization\",\"name\":\"Automatic Rostering\",\"url\":\"https://docs.automaticrostering.visma.net\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/automaticrostering/geYJCg2PEZLfgAwl/logo/light.png?fit=max\u0026auto=format\u0026n=geYJCg2PEZLfgAwl\u0026q=85\u0026s=184cc1b5d04c48601ba425b95cf1d878\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.automaticrostering.visma.net#website\",\"name\":\"Automatic Rostering\",\"url\":\"https://docs.automaticrostering.visma.net\",\"publisher\":{\"@id\":\"https://docs.automaticrostering.visma.net/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.automaticrostering.visma.net/v1/entities/employees#webpage\",\"url\":\"https://docs.automaticrostering.visma.net/v1/entities/employees\",\"name\":\"Employees\",\"description\":\"Learn how to define the employees that will be used in the roster.\",\"dateModified\":\"2026-04-23T11:50:03.130Z\",\"isPartOf\":{\"@id\":\"https://docs.automaticrostering.visma.net#website\"},\"breadcrumb\":{\"@id\":\"https://docs.automaticrostering.visma.net/v1/entities/employees#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.automaticrostering.visma.net/v1/entities/employees#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Automatic Rostering\",\"item\":\"https://docs.automaticrostering.visma.net\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Employees\",\"item\":\"https://docs.automaticrostering.visma.net/v1/entities/employees\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.automaticrostering.visma.net/v1/entities/employees#article\",\"headline\":\"Employees\",\"name\":\"Employees\",\"description\":\"Learn how to define the employees that will be used in the roster.\",\"url\":\"https://docs.automaticrostering.visma.net/v1/entities/employees\",\"mainEntityOfPage\":{\"@id\":\"https://docs.automaticrostering.visma.net/v1/entities/employees#webpage\"},\"dateModified\":\"2026-04-23T11:50:03.130Z\",\"publisher\":{\"@id\":\"https://docs.automaticrostering.visma.net/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.automaticrostering.visma.net#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Automatic Rostering\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Automatic Rostering\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/v1/entities/employees.md","siteName":"Automatic Rostering","nav":{"global":null,"versions":[{"version":"2.0.0","default":true,"tag":"Latest","pages":[{"title":"2.0.0","href":"/v2/entities/employees"}]},{"version":"1.0.0","tabs":[{"tab":"Guides","groups":[{"group":"Getting started","pages":[{"title":"Introduction","icon":"hand-wave","href":"/v1"},{"title":"Authentication","icon":"key","href":"/v1/getting-started/authentication"},{"title":"Quickstart","icon":"circle-play","href":"/v1/getting-started/quickstart"}]},{"group":"Concepts","pages":[{"title":"Periods","description":"Learn how to define references to periods of time in the roster.","icon":"calendar-week","href":"/v1/concepts/periods"}]},{"group":"Entities","pages":[{"title":"Employees","icon":"users","href":"/v1/entities/employees"},{"title":"Shifts","description":"Learn how to define the shifts that employees can be assigned to cover demand.","icon":"clock","href":"/v1/entities/shifts"},{"title":"Demands","icon":"chart-column","href":"/v1/entities/demands"},{"group":"Constraints","icon":"shield-check","pages":[{"title":"Core concepts","href":"/v1/constraints/index"},{"title":"Employee Availability","href":"/v1/constraints/employee-availability"},{"title":"Employee Utilization","href":"/v1/constraints/employee-utilization"},{"title":"Cooldown","href":"/v1/constraints/cooldown"},{"title":"Consecutive","href":"/v1/constraints/consecutive"},{"title":"Pattern","href":"/v1/constraints/pattern"},{"title":"Periodic Rest","href":"/v1/constraints/periodic-rest"},{"title":"Period Distribution","href":"/v1/constraints/period-distribution"},{"title":"Fairness","href":"/v1/constraints/fairness"}]}]},{"group":"Other","pages":[{"title":"Changelog","href":"/v1/misc/changelog"},{"title":"Migrate from XML to JSON","href":"/v1/misc/migrate"}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/roster/start-job"}]}],"global":{"anchors":[{"anchor":"Documentation","icon":"book-open-cover","href":"/"},{"anchor":"Playground","icon":"code","href":"https://ar-playground-one.vercel.app/"}]}}]},"basePath":"","title":"Employees - Automatic Rostering","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":[],"chunks":[]}