Set rules for how many periods (marked by labels) an employee can work.
Define rules to improve the distribution of inconvenient periods among employees.
Rule schema
object
Used to define targets and limits for the distribution of periods (like weekends, holidays, nights).
Show properties
string
required
Unique identifier for the rule.
array of string
Labels for the rule. Labels can be used to group rules together. For example, if multiple rules are related to the same shift type, they can all be labeled with the same label.
string (enum: NONE | VERY_LOW | LOW | MEDIUM | HIGH | ...)
required
The importance of the rule. The higher the importance, the more it will be taking the rule into account. Under strict importance, the rule may never be violated.
object
Filters to determine the scope of the rule. Used to indicate what the rule should be applied to (which employees, which shifts, etc). Leaving this empty means that the rule always applies.
Show filters – properties
object
Filters entities by id and label.
Show employees – properties
array of string
Entity ids to match.
array of string
Entity labels to match.
object
Show matchTypes – properties
string (enum: NONE | ANY | ALL)
Used to indicate how to apply the id filters. For example, if set to NONE, entities with the specified ids will be excluded. Default: “ANY”.
string (enum: NONE | ANY | ALL)
Used to indicate how to apply the label filters. For example, if set to ANY, entities that have any of the specified labels will be included. Default: “ANY”.
object
Filters entities by id and label.
Show shifts – properties
array of string
Entity ids to match.
array of string
Entity labels to match.
object
Show matchTypes – properties
string (enum: NONE | ANY | ALL)
Used to indicate how to apply the id filters. For example, if set to NONE, entities with the specified ids will be excluded. Default: “ANY”.
string (enum: NONE | ANY | ALL)
Used to indicate how to apply the label filters. For example, if set to ANY, entities that have any of the specified labels will be included. Default: “ANY”.
object
required
Defines targets and limits on the distribution of worked periods.
Show targets – properties
integer
The minimum amount of periods in which the employee should work. This is treated as a target instead of a strict limit.
integer
The maximum amount of periods in which the employee can work.
integer
The maximum amount of consecutive periods in which the employee can work.
integer
The minimum amount of non-worked periods both before and after a worked period.
object
Additional options for how the rule should be applied.
Show options – properties
object
Specifies overlap thresholds that a shift must meet with the rule’s periods in order for it to be counted as relevant for the rule.
Show overlapSettings – properties
integer
The minimum number of hours that a shift must overlap with the rule in order to be counted as relevant for this rule.
integer
The minimum percentage of the shift that must overlap with the rule in order to be counted as relevant for this rule.
object
List of periods in the schedule. Periods can be defined explicitly or through a recurrent definition (for example, to generate weeks).
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.
Show startDay – properties
string (date)
Date specified in ISO8601 format (YYYY-MM-DD). Only available in CALENDAR schedules.
integer
Day index relative to the horizon start day (starts at 0). Only available in RECURRING schedules.
object
Describes one day in the schedule.
Show endDay – properties
string (date)
Date specified in ISO8601 format (YYYY-MM-DD). Only available in CALENDAR schedules.
integer
Day index relative to the horizon start day (starts at 0). Only available in RECURRING schedules.
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.
Show startDay – properties
string (date)
Date specified in ISO8601 format (YYYY-MM-DD). Only available in CALENDAR schedules.
integer
Day index relative to the horizon start day (starts at 0). Only available in RECURRING schedules.
object
Describes one day in the schedule.
Show endDay – properties
string (date)
Date specified in ISO8601 format (YYYY-MM-DD). Only available in CALENDAR schedules.
integer
Day index relative to the horizon start day (starts at 0). Only available in RECURRING schedules.
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.
Explanation
Within the context of this rule, a period is considered ‘worked’ for an employee if they work any shift during that period, and
‘free’ if they do not. The rule allows you to set targets for how many periods an employee can work, how many they can work in succession,
and how many free periods they must have surrounding a working period.Often seen use cases are the distribution of weekends, holidays, or other inconvenient periods among employees.
Maximum worked periods
An easy use case is to limit how many worked periods an employee can have.
The rule below makes it undesirable for employees to work more than 2 weekends. Notice that working a shift is only considered
as working a period if it overlaps for at least 6 hours with the period, as configured in options.overlapSettings.To work with labels on periods, make sure you have defined the period label in the extensions.labeling part of the payload.
Alternatively, the rule can be used to encourage a minimum amount of worked periods for an employee.
The rule below sets a target for the minimum number of weekends during which the employee works any shift.
minWorkedPeriods is never treated as a strict lower bound, but rather as a target that the solver will try to reach.
Alternatively, the rule can be used to limit how many undesirable periods an employee can work in succession.
The rule below makes it strictly forbidden for an employee to work 3 holidays in a row. Notice that with the way periods are defined,
working both days of Christmas still only counts as working one period. If the days of Christmas should count as working separate holidays,
you would need to define them as separate periods.
The rule can also be used to enforce a minimum number of free periods surrounding a worked period.Note that it is currently not supported to use the minSurroundingFreePeriods property in combination with the maxConsecutiveWorkedPeriods property.
The rule below makes it strictly required for an employee to have at least 1 free weekend surrounding each worked weekend.
The following status metrics are available for tracking on Period Distribution rules:
Metric key
Description
PERIOD_DISTRIBUTION.WORKED_PERIODS
Number of periods with at least one assignment.
PERIOD_DISTRIBUTION.MISSING_WORKED_PERIODS
Total number of required worked periods that are missing.
PERIOD_DISTRIBUTION.EXCESSIVE_WORKED_PERIODS
Total number of worked periods above configured maximums.
PERIOD_DISTRIBUTION.MAX_CONSECUTIVE_VIOLATIONS
Total amount by which consecutive worked-period groups exceed their maximum.
PERIOD_DISTRIBUTION.MIN_SURROUNDING_VIOLATIONS
Total number of required surrounding free periods that are missing.
{"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":"v2/rules/period-distribution","slug":"/v2/rules/period-distribution","pageMetadata":{"title":"Period Distribution","description":"Set rules for how many periods (marked by labels) an employee can work.","href":"/v2/rules/period-distribution"},"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: \"Set rules for how many periods (marked by labels) an employee can work.\"\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];const PeriodDistributionMetricRows=()=>_jsxs(_Fragment,{children:[_jsxs(`tr`,{children:[_jsx(`td`,{children:_jsx(`code`,{className:`mint-whitespace-nowrap`,children:`PERIOD_DISTRIBUTION.WORKED_PERIODS`})}),_jsx(`td`,{children:`Number of periods with at least one assignment.`})]}),_jsxs(`tr`,{children:[_jsx(`td`,{children:_jsx(`code`,{className:`mint-whitespace-nowrap`,children:`PERIOD_DISTRIBUTION.MISSING_WORKED_PERIODS`})}),_jsx(`td`,{children:`Total number of required worked periods that are missing.`})]}),_jsxs(`tr`,{children:[_jsx(`td`,{children:_jsx(`code`,{className:`mint-whitespace-nowrap`,children:`PERIOD_DISTRIBUTION.EXCESSIVE_WORKED_PERIODS`})}),_jsx(`td`,{children:`Total number of worked periods above configured maximums.`})]}),_jsxs(`tr`,{children:[_jsx(`td`,{children:_jsx(`code`,{className:`mint-whitespace-nowrap`,children:`PERIOD_DISTRIBUTION.MAX_CONSECUTIVE_VIOLATIONS`})}),_jsx(`td`,{children:`Total amount by which consecutive worked-period groups exceed their maximum.`})]}),_jsxs(`tr`,{children:[_jsx(`td`,{children:_jsx(`code`,{className:`mint-whitespace-nowrap`,children:`PERIOD_DISTRIBUTION.MIN_SURROUNDING_VIOLATIONS`})}),_jsx(`td`,{children:`Total number of required surrounding free periods that are missing.`})]})]});function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{Card,CodeBlock,Expandable,Heading,ResponseField,Tip,_MdxComponentBoundary}=_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);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Define rules to improve the distribution of inconvenient periods among employees.`}),`\n`,_jsx(Card,{title:`Rule schema`,children:_jsxs(ResponseField,{name:`periodDistributionRule`,type:`object`,id:`param-period-distribution-rule`,children:[_jsx(_components.p,{children:`Used to define targets and limits for the distribution of periods (like weekends, holidays, nights).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(ResponseField,{name:`id`,type:`string`,required:true,id:`param-id`,children:_jsx(_components.p,{children:`Unique identifier for the rule.`})}),_jsx(ResponseField,{name:`labels`,type:`array of string`,id:`param-labels`,children:_jsx(_components.p,{children:`Labels for the rule. Labels can be used to group rules together. For example, if multiple rules are related to the same shift type, they can all be labeled with the same label.`})}),_jsx(ResponseField,{name:`importance`,type:`string (enum: NONE | VERY_LOW | LOW | MEDIUM | HIGH | ...)`,required:true,id:`param-importance`,children:_jsx(_components.p,{children:`The importance of the rule. The higher the importance, the more it will be taking the rule into account. Under strict importance, the rule may never be violated.`})}),_jsx(ResponseField,{name:`filters`,type:`object`,id:`param-filters`,children:_jsx(_components.p,{children:`Filters to determine the scope of the rule. Used to indicate what the rule should be applied to (which employees, which shifts, etc). Leaving this empty means that the rule always applies.`})}),_jsxs(Expandable,{title:`filters – properties`,children:[_jsx(ResponseField,{name:`employees`,type:`object`,id:`param-employees`,children:_jsx(_components.p,{children:`Filters entities by id and label.`})}),_jsxs(Expandable,{title:`employees – properties`,children:[_jsx(ResponseField,{name:`ids`,type:`array of string`,id:`param-ids`,children:_jsx(_components.p,{children:`Entity ids to match.`})}),_jsx(ResponseField,{name:`labels`,type:`array of string`,id:`param-labels-1`,children:_jsx(_components.p,{children:`Entity labels to match.`})}),_jsx(ResponseField,{name:`matchTypes`,type:`object`,id:`param-match-types`}),_jsxs(Expandable,{title:`matchTypes – properties`,children:[_jsx(ResponseField,{name:`ids`,type:`string (enum: NONE | ANY | ALL)`,id:`param-ids-1`,children:_jsx(_components.p,{children:`Used to indicate how to apply the id filters. For example, if set to NONE, entities with the specified ids will be excluded. Default: “ANY”.`})}),_jsx(ResponseField,{name:`labels`,type:`string (enum: NONE | ANY | ALL)`,id:`param-labels-2`,children:_jsx(_components.p,{children:`Used to indicate how to apply the label filters. For example, if set to ANY, entities that have any of the specified labels will be included. Default: “ANY”.`})})]})]}),_jsx(ResponseField,{name:`shifts`,type:`object`,id:`param-shifts`,children:_jsx(_components.p,{children:`Filters entities by id and label.`})}),_jsxs(Expandable,{title:`shifts – properties`,children:[_jsx(ResponseField,{name:`ids`,type:`array of string`,id:`param-ids-2`,children:_jsx(_components.p,{children:`Entity ids to match.`})}),_jsx(ResponseField,{name:`labels`,type:`array of string`,id:`param-labels-3`,children:_jsx(_components.p,{children:`Entity labels to match.`})}),_jsx(ResponseField,{name:`matchTypes`,type:`object`,id:`param-match-types-1`}),_jsxs(Expandable,{title:`matchTypes – properties`,children:[_jsx(ResponseField,{name:`ids`,type:`string (enum: NONE | ANY | ALL)`,id:`param-ids-3`,children:_jsx(_components.p,{children:`Used to indicate how to apply the id filters. For example, if set to NONE, entities with the specified ids will be excluded. Default: “ANY”.`})}),_jsx(ResponseField,{name:`labels`,type:`string (enum: NONE | ANY | ALL)`,id:`param-labels-4`,children:_jsx(_components.p,{children:`Used to indicate how to apply the label filters. For example, if set to ANY, entities that have any of the specified labels will be included. Default: “ANY”.`})})]})]})]}),_jsx(ResponseField,{name:`targets`,type:`object`,required:true,id:`param-targets`,children:_jsx(_components.p,{children:`Defines targets and limits on the distribution of worked periods.`})}),_jsxs(Expandable,{title:`targets – properties`,children:[_jsx(ResponseField,{name:`minWorkedPeriods`,type:`integer`,id:`param-min-worked-periods`,children:_jsx(_components.p,{children:`The minimum amount of periods in which the employee should work. This is treated as a target instead of a strict limit.`})}),_jsx(ResponseField,{name:`maxWorkedPeriods`,type:`integer`,id:`param-max-worked-periods`,children:_jsx(_components.p,{children:`The maximum amount of periods in which the employee can work.`})}),_jsx(ResponseField,{name:`maxConsecutiveWorkedPeriods`,type:`integer`,id:`param-max-consecutive-worked-periods`,children:_jsx(_components.p,{children:`The maximum amount of consecutive periods in which the employee can work.`})}),_jsx(ResponseField,{name:`minSurroundingFreePeriods`,type:`integer`,id:`param-min-surrounding-free-periods`,children:_jsx(_components.p,{children:`The minimum amount of non-worked periods both before and after a worked period.`})})]}),_jsx(ResponseField,{name:`options`,type:`object`,id:`param-options`,children:_jsx(_components.p,{children:`Additional options for how the rule should be applied.`})}),_jsxs(Expandable,{title:`options – properties`,children:[_jsx(ResponseField,{name:`overlapSettings`,type:`object`,id:`param-overlap-settings`,children:_jsx(_components.p,{children:`Specifies overlap thresholds that a shift must meet with the rule’s periods in order for it to be counted as relevant for the rule.`})}),_jsxs(Expandable,{title:`overlapSettings – properties`,children:[_jsx(ResponseField,{name:`minOverlapHours`,type:`integer`,id:`param-min-overlap-hours`,children:_jsx(_components.p,{children:`The minimum number of hours that a shift must overlap with the rule in order to be counted as relevant for this rule.`})}),_jsx(ResponseField,{name:`minOverlapPercentage`,type:`integer`,id:`param-min-overlap-percentage`,children:_jsx(_components.p,{children:`The minimum percentage of the shift that must overlap with the rule in order to be counted as relevant for this rule.`})})]})]}),_jsx(ResponseField,{name:`periods`,type:`object`,id:`param-periods`,children:_jsx(_components.p,{children:`List of periods in the schedule. Periods can be defined explicitly or through a recurrent definition (for example, to generate weeks).`})}),_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.`})}),_jsxs(Expandable,{title:`startDay – properties`,children:[_jsx(ResponseField,{name:`date`,type:`string (date)`,id:`param-date`,children:_jsx(_components.p,{children:`Date specified in ISO8601 format (YYYY-MM-DD). Only available in CALENDAR schedules.`})}),_jsx(ResponseField,{name:`dayIndex`,type:`integer`,id:`param-day-index`,children:_jsx(_components.p,{children:`Day index relative to the horizon start day (starts at 0). Only available in RECURRING schedules.`})})]}),_jsx(ResponseField,{name:`endDay`,type:`object`,id:`param-end-day`,children:_jsx(_components.p,{children:`Describes one day in the schedule.`})}),_jsxs(Expandable,{title:`endDay – properties`,children:[_jsx(ResponseField,{name:`date`,type:`string (date)`,id:`param-date-1`,children:_jsx(_components.p,{children:`Date specified in ISO8601 format (YYYY-MM-DD). Only available in CALENDAR schedules.`})}),_jsx(ResponseField,{name:`dayIndex`,type:`integer`,id:`param-day-index-1`,children:_jsx(_components.p,{children:`Day index relative to the horizon start day (starts at 0). Only available in RECURRING schedules.`})})]}),_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.`})}),_jsxs(Expandable,{title:`startDay – properties`,children:[_jsx(ResponseField,{name:`date`,type:`string (date)`,id:`param-date-2`,children:_jsx(_components.p,{children:`Date specified in ISO8601 format (YYYY-MM-DD). Only available in CALENDAR schedules.`})}),_jsx(ResponseField,{name:`dayIndex`,type:`integer`,id:`param-day-index-2`,children:_jsx(_components.p,{children:`Day index relative to the horizon start day (starts at 0). Only available in RECURRING schedules.`})})]}),_jsx(ResponseField,{name:`endDay`,type:`object`,id:`param-end-day-1`,children:_jsx(_components.p,{children:`Describes one day in the schedule.`})}),_jsxs(Expandable,{title:`endDay – properties`,children:[_jsx(ResponseField,{name:`date`,type:`string (date)`,id:`param-date-3`,children:_jsx(_components.p,{children:`Date specified in ISO8601 format (YYYY-MM-DD). Only available in CALENDAR schedules.`})}),_jsx(ResponseField,{name:`dayIndex`,type:`integer`,id:`param-day-index-3`,children:_jsx(_components.p,{children:`Day index relative to the horizon start day (starts at 0). Only available in RECURRING schedules.`})})]}),_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-5`,children:_jsx(_components.p,{children:`Provide labels to re-use periods that were defined in the configuration.`})})]})]})]})}),`\n`,_jsx(Heading,{level:`2`,id:`explanation`,children:`Explanation`}),`\n`,_jsx(_components.p,{children:`Within the context of this rule, a period is considered ‘worked’ for an employee if they work any shift during that period, and\n‘free’ if they do not. The rule allows you to set targets for how many periods an employee can work, how many they can work in succession,\nand how many free periods they must have surrounding a working period.`}),`\n`,_jsx(_components.p,{children:`Often seen use cases are the distribution of weekends, holidays, or other inconvenient periods among employees.`}),`\n`,_jsx(Heading,{level:`2`,id:`maximum-worked-periods`,children:`Maximum worked periods`}),`\n`,_jsx(_components.p,{children:`An easy use case is to limit how many worked periods an employee can have.`}),`\n`,_jsxs(Tip,{children:[_jsxs(_components.p,{children:[`The rule below makes it undesirable for employees to work more than 2 weekends. Notice that working a shift is only considered\nas working a period if it overlaps for at least 6 hours with the period, as configured in `,_jsx(_components.code,{children:`options.overlapSettings`}),`.`]}),_jsxs(_components.p,{children:[`To work with `,_jsx(_components.code,{children:`labels`}),` on periods, make sure you have defined the period label in the `,_jsx(_components.code,{children:`extensions.labeling`}),` part of the payload.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`15`,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:`15`,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:`\"pd-max-weekends\"`}),_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:` \"importance\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"MEDIUM\"`}),_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:` \"targets\"`}),_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:` \"maxWorkedPeriods\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`})]}),`\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:` \"options\"`}),_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:` \"overlapSettings\"`}),_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:` \"minOverlapHours\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`6`})]}),`\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:` \"periods\"`}),_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:` \"labels\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"WEEKENDS\"`}),_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:`minimum-worked-periods`,children:`Minimum worked periods`}),`\n`,_jsx(_components.p,{children:`Alternatively, the rule can be used to encourage a minimum amount of worked periods for an employee.`}),`\n`,_jsxs(Tip,{children:[_jsxs(_components.p,{children:[`The rule below sets a target for the minimum number of weekends during which the employee works any shift.\n`,_jsx(_components.code,{children:`minWorkedPeriods`}),` is never treated as a strict lower bound, but rather as a target that the solver will try to reach.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`9`,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:`9`,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:`\"pd-min-weekends\"`}),_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:` \"targets\"`}),_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:` \"minWorkedPeriods\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3`})]}),`\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:` \"periods\"`}),_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:` \"labels\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"WEEKENDS\"`}),_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:`maximum-consecutive-worked-periods`,children:`Maximum consecutive worked periods`}),`\n`,_jsx(_components.p,{children:`Alternatively, the rule can be used to limit how many undesirable periods an employee can work in succession.`}),`\n`,_jsxs(Tip,{children:[_jsxs(_components.p,{children:[`The rule below makes it strictly forbidden for an employee to work 3 holidays in a row. Notice that with the way periods are defined,\nworking both days of Christmas still only counts as working `,_jsx(_components.strong,{children:`one`}),` period. If the days of Christmas should count as working separate holidays,\nyou would need to define them as separate periods.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`27`,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:`27`,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:`\"pd-max-consecutive-holidays\"`}),_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:` \"importance\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"STRICT\"`}),_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:` \"targets\"`}),_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:` \"maxConsecutiveWorkedPeriods\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`})]}),`\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:` \"periods\"`}),_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:` \"customDefinitions\"`}),_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:` \"startDay\"`}),_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:` \"date\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2024-12-25\"`})]}),`\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:` \"endDay\"`}),_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:` \"date\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2024-12-26\"`})]}),`\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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"startDay\"`}),_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:` \"date\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2024-12-31\"`})]}),`\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:` \"endDay\"`}),_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:` \"date\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2024-12-31\"`})]}),`\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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),`\n`,_jsx(Heading,{level:`2`,id:`minimum-surrounding-free-periods`,children:`Minimum surrounding free periods`}),`\n`,_jsx(_components.p,{children:`The rule can also be used to enforce a minimum number of free periods surrounding a worked period.`}),`\n`,_jsxs(_components.p,{children:[`Note that it is currently not supported to use the `,_jsx(_components.code,{children:`minSurroundingFreePeriods`}),` property in combination with the `,_jsx(_components.code,{children:`maxConsecutiveWorkedPeriods`}),` property.`]}),`\n`,_jsxs(Tip,{children:[_jsx(_components.p,{children:`The rule below makes it strictly required for an employee to have at least 1 free weekend surrounding each worked weekend.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`10`,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:`10`,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:`\"pd-min-surrounding-free-weekends\"`}),_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:` \"importance\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"STRICT\"`}),_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:` \"targets\"`}),_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:` \"minSurroundingFreePeriods\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`})]}),`\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:` \"periods\"`}),_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:` \"labels\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"WEEKENDS\"`}),_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:`metrics`,children:`Metrics`}),`\n`,_jsxs(_components.p,{children:[`The following `,_jsx(_components.a,{href:`/v2/concepts/metrics`,children:`status metrics`}),` are available for tracking on Period Distribution rules:`]}),`\n`,_jsxs(`table`,{children:[_jsx(`thead`,{children:_jsxs(`tr`,{children:[_jsx(`th`,{children:`Metric key`}),_jsx(`th`,{children:`Description`})]})}),_jsx(`tbody`,{children:_jsx(_MdxComponentBoundary,{name:`PeriodDistributionMetricRows`,children:_jsx(PeriodDistributionMetricRows,{})})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{PeriodDistributionMetricRows,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":"Period Distribution","description":"Set rules for how many periods (marked by labels) an employee can work.","href":"/v2/rules/period-distribution"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Explanation","slug":"explanation","depth":2,"children":[]},{"title":"Maximum worked periods","slug":"maximum-worked-periods","depth":2,"children":[]},{"title":"Minimum worked periods","slug":"minimum-worked-periods","depth":2,"children":[]},{"title":"Maximum consecutive worked periods","slug":"maximum-consecutive-worked-periods","depth":2,"children":[]},{"title":"Minimum surrounding free periods","slug":"minimum-surrounding-free-periods","depth":2,"children":[]},{"title":"Metrics","slug":"metrics","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"],"dynamicCss":".mint-whitespace-nowrap {\n white-space: nowrap\n}","subdomain":"automaticrostering","siteName":"Automatic Rostering","title":"Period Distribution - Automatic Rostering","navMaps":{"firstHrefInVersion":{"2.0.0":{"href":"/v2/rules/period-distribution","matchLevel":0},"1.0.0":{"href":"/v1/entities/employees","matchLevel":2}},"firstHrefInLanguage":{}},"lastModified":"2026-09-04T09:17:01.302Z","originalFileLocation":"v2/rules/period-distribution.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=\"Set rules for how many periods (marked by labels) an employee can work.\">\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=\"Period Distribution - Automatic Rostering\">\u003cmeta data-mint-head property=\"og:description\" content=\"Set rules for how many periods (marked by labels) an employee can work.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Automatic Rostering\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.automaticrostering.visma.net/v2/rules/period-distribution\">\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=Rules\u0026amp;title=Period+Distribution\u0026amp;description=Set+rules+for+how+many+periods+%28marked+by+labels%29+an+employee+can+work.\u0026amp;theme=82f9a5919eb5b34df74de5d7\u0026amp;signature=1372af988c4e72a50d13da71399dfea948a94fed697fa5aa5dfe43110081bb94\">\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=\"Period Distribution - Automatic Rostering\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Set rules for how many periods (marked by labels) an employee can work.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://automaticrostering.mintlify.site/_mintlify/api/og/v2?division=Rules\u0026amp;title=Period+Distribution\u0026amp;description=Set+rules+for+how+many+periods+%28marked+by+labels%29+an+employee+can+work.\u0026amp;theme=82f9a5919eb5b34df74de5d7\u0026amp;signature=1372af988c4e72a50d13da71399dfea948a94fed697fa5aa5dfe43110081bb94\">\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/v2/rules/period-distribution\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v2/rules/period-distribution.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/v2/rules/period-distribution#webpage\",\"url\":\"https://docs.automaticrostering.visma.net/v2/rules/period-distribution\",\"name\":\"Period Distribution\",\"description\":\"Set rules for how many periods (marked by labels) an employee can work.\",\"dateModified\":\"2026-09-04T09:17:01.302Z\",\"isPartOf\":{\"@id\":\"https://docs.automaticrostering.visma.net#website\"},\"breadcrumb\":{\"@id\":\"https://docs.automaticrostering.visma.net/v2/rules/period-distribution#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.automaticrostering.visma.net/v2/rules/period-distribution#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Entities\",\"item\":\"https://docs.automaticrostering.visma.net/v2/entities/employees\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rules\",\"item\":\"https://docs.automaticrostering.visma.net/v2/rules\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Period Distribution\",\"item\":\"https://docs.automaticrostering.visma.net/v2/rules/period-distribution\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.automaticrostering.visma.net/v2/rules/period-distribution#article\",\"headline\":\"Period Distribution\",\"name\":\"Period Distribution\",\"description\":\"Set rules for how many periods (marked by labels) an employee can work.\",\"url\":\"https://docs.automaticrostering.visma.net/v2/rules/period-distribution\",\"mainEntityOfPage\":{\"@id\":\"https://docs.automaticrostering.visma.net/v2/rules/period-distribution#webpage\"},\"dateModified\":\"2026-09-04T09:17:01.302Z\",\"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":"/v2/rules/period-distribution.md","siteName":"Automatic Rostering","nav":{"global":null,"versions":[{"version":"2.0.0","default":true,"tag":"Latest","tabs":[{"tab":"Guides","groups":[{"group":"Getting started","pages":[{"title":"Introduction","icon":"hand-wave","href":"/v2"},{"title":"Authentication","icon":"key","href":"/v2/getting-started/authentication"},{"title":"Quickstart","icon":"circle-play","href":"/v2/getting-started/quickstart"},{"title":"Migrate from v1","icon":"arrows-left-right","href":"/v2/getting-started/migrate-from-v1"}]},{"group":"Entities","pages":[{"title":"Employees","icon":"users","href":"/v2/entities/employees"},{"title":"Shifts","icon":"clock","href":"/v2/entities/shifts"},{"title":"Demands","icon":"chart-column","href":"/v2/entities/demands"},{"group":"Rules","icon":"shield-check","pages":[{"title":"Basic rule concepts","icon":"shield-exclamation","href":"/v2/rules/index"},{"title":"Availability","href":"/v2/rules/availability"},{"title":"Utilization","href":"/v2/rules/utilization"},{"title":"Cooldown","href":"/v2/rules/cooldown"},{"title":"Consecutive","href":"/v2/rules/consecutive"},{"title":"Pattern","href":"/v2/rules/pattern"},{"title":"Periodic Rest","description":"Set targets for the minimum rest an employee should receive in each period","href":"/v2/rules/periodic-rest"},{"title":"Period Distribution","href":"/v2/rules/period-distribution"},{"title":"Fairness","description":"Improve the fairness among employees of (in)conveniences from other rules.","href":"/v2/rules/fairness"}]}]},{"group":"Concepts","pages":[{"title":"Periods","icon":"calendar-week","href":"/v2/concepts/periods"},{"group":"Extensions","pages":[{"title":"Shift templates","icon":"wand-magic-sparkles","href":"/v2/concepts/extensions/shift-templates"}]}]},{"group":"Reasoning","pages":[{"title":"Basics","icon":"message","href":"/v2/reasoning/basics"},{"title":"Analyzer","icon":"magnifying-glass","href":"/v2/reasoning/analyzer"}]},{"group":"Status updates","pages":[{"title":"Overview","icon":"signal","mode":"wide","href":"/v2/concepts/status"},{"title":"Metrics","icon":"gauge-high","mode":"wide","href":"/v2/concepts/metrics"},{"title":"Messages","icon":"message","mode":"wide","href":"/v2/concepts/status-messages"}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/roster/start-a-job"}]}],"global":{"anchors":[{"anchor":"Documentation","icon":"book-open-cover","href":"/"},{"anchor":"Hub","icon":"code","href":"https://hub.automaticrostering.visma.net/"}]}},{"version":"1.0.0","pages":[{"title":"1.0.0","href":"/v1/entities/employees"}]}]},"basePath":"","title":"Period Distribution - Automatic Rostering","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":[],"chunks":[]}