Employee shift assignment feasibility check
Employee-assigned-to-shift-covers-demand-check
This process evaluates if employee shifts, in any combination, can meet specified demand intervals.
If some demands cannot be met, the feasibility report will include the unfulfilled demand intervals as warnings.
Consider this as a simplified rostering problem solution, designed for quick execution to highlight potential issues.
Warning Response Schema
title required | string Enum: "Employee-availability-check" "Demand-weekend-covered-by-employees-check" "Employee-minutes-weekly-check" "Employee-minutes-entire-roster-check" "Demand-covered-by-shift-templates-check" "Shift-is-covered-by-demand-check" "Employee-assigned-to-shift-covers-demand-check" "Shift-Templates-are-demand-relevant-check" "Shift-utilization-minimum-occurrence-check" "Locked-shift-task-requirements-check" |
category required | string This category is always set to WARNING |
description required | string |
required | Array of objects (violation) |
{- "title": "Employee-availability-check",
- "category": "string",
- "description": "string",
- "violations": [
- {
- "day": 0,
- "date": "2019-08-24",
- "demandSegment": {
- "startTime": 0,
- "endTime": 0,
- "minDemand": 0,
- "timestamp": "string"
}, - "shift": {
- "name": "string"
}, - "weekendNumber": 0,
- "requiredEmployees": 0,
- "missingEmployees": 0,
- "missingEmployeesDueToWeekendDistribution": 0,
- "employeeNumber": "string",
- "requiredMinutes": 0,
- "achievableMinutes": 0,
- "startTime": "string",
- "endTime": "string",
- "personnelGroup": "string",
- "assignment": "string",
- "taskId": "string",
- "competencies": [
- "string"
], - "workType": "string",
- "numberOfEmployees": 0,
- "missingMinutes": 0,
- "totalMinutes": 0,
- "constraintId": "string",
- "lockedShiftName": "string",
- "employeeId": "string",
- "violatedProperties": [
- "MIN"
]
}
]
}
The following fields are used in the "violation" object:
- day
- startTime
- endTime
- workType
- numberOfEmployees
- missingMinutes
In this scenario, we consider four employees and four shifts. The shifts are:
- Shift 1: 09:00 to 14:00
- Shift 2: 12:00 to 15:00
- Shift 3: 16:00 to 18:00
- Shift 4: 17:00 to 21:00
The demands are:
- Demand 1: Two employees from 09:00 to 15:00
- Demand 2: Three employees from 17:00 to 21:00
These demands occur across different days:
- Days 1 and 3: Demand 1
- Days 2, 4, 5, 6, and 7: Demand 2
Given that Shift 1 covers the demand from 09:00-14:00 (outperforming Shift 2), it means Shift 2 can never be used, as the interval goes from 12:00, and not from 14:00, the demand can never be covered from 14-15 (The remainder of the demand from when Shift 1 ends).
- Payload
- Response
{
"jobInfo": {
"id": "xxx",
"organisationId": "xxx",
"scheduleType": "RECURRING",
"demandType": "TIME_DEMAND",
"planningHorizon": {
"startDate": "2022-01-01",
"nrOfWeeks": 1,
}
},
"shifts": [
{
"id": "Shift1",
"shiftTypes": [
"Day"
],
"intervals": [
{
"startTime": "09:00",
"endTime": "14:00",
"dayIndicator": 0,
"workTypeId": "1",
"breakMinutes": 30,
"assignmentId": "Assignment1",
"taskId": "Task1"
}
]
},
{
"id": "Shift2",
"shiftTypes": [
"Day"
],
"intervals": [
{
"startTime": "12:00",
"endTime": "15:00",
"dayIndicator": 0,
"workTypeId": "1",
"breakMinutes": 0,
"assignmentId": "Assignment1",
"taskId": "Task1"
}
]
},
{
"id": "Shift3",
"shiftTypes": [
"Evening"
],
"intervals": [
{
"startTime": "16:00",
"endTime": "18:00",
"dayIndicator": 0,
"workTypeId": "1",
"breakMinutes": 0
}
]
},
{
"id": "Shift4",
"shiftTypes": [
"Evening"
],
"intervals": [
{
"startTime": "17:00",
"endTime": "21:00",
"dayIndicator": 0,
"workTypeId": "1",
"breakMinutes": 0
}
]
}
],
"employees": [
{
"id": "1",
"attributes": [
{
"id": "personnel-group",
"values": ["PerGrpId1"]
}
],
"workTime": {
"weekHoursRules": {
"minWeekHours": 12,
"maxWeekHours": 40
}
},
"attributes": [
{
"id": "competences",
"values": ["Competence1", "Competence2", "Competence3"]
}
]
},
{
"id": "2",
"attributes": [
{
"id": "personnel-group",
"values": ["PerGrpId1"]
}
],
"workTime": {
"weekHoursRules": {
"minWeekHours": 12,
"maxWeekHours": 40
}
},
"attributes": [
{
"id": "competences",
"values": ["Competence1", "Competence2", "Competence3"]
}
]
},
{
"id": "3",
"attributes": [
{
"id": "personnel-group",
"values": ["PerGrpId1"]
}
],
"workTime": {
"weekHoursRules": {
"minWeekHours": 12,
"maxWeekHours": 40
}
},
"attributes": [
{
"id": "competences",
"values": ["Competence1", "Competence2", "Competence3"]
}
]
},
{
"id": "4",
"attributes": [
{
"id": "personnel-group",
"values": ["PerGrpId1"]
}
],
"workTime": {
"weekHoursRules": {
"minWeekHours": 12,
"maxWeekHours": 40
}
},
"attributes": [
{
"id": "competences",
"values": ["Competence1", "Competence2", "Competence3"]
}
]
}
],
"timeSlots": [
{
"id": "time-slot-1",
"startTime": "09:00",
"endTime": "15:00",
"workTypeId": "1",
"attributeRequirements": [
{
"id": "personnel-group",
"values": ["PerGrpId1"]
}
],
"assignmentId": "Assignment1",
"taskId": "Task1",
"attributeRequirements": [
{
"id": "competences",
"values": ["Competence1", "Competence2"]
}
]
},
{
"id": "time-slot-2",
"startTime": "17:00",
"endTime": "21:00",
"workTypeId": "1",
"attributeRequirements": [
{
"id": "personnel-group",
"values": ["PerGrpId1"]
}
],
}
],
"demands": [
{
"days": {
"dayIndexes": [
0,
2
]
},
"timeDemands": [
{
"timeSlotId": "time-slot-1",
"ideal": 2
}
"DemandId1"
]
},
{
"days": {
"dayIndexes": [
1,
3,
4,
5,
6
]
},
"timeDemands": [
{
"timeSlotId": "time-slot-2",
"ideal": 3
}
]
}
],
"configuration": {
"workTypes": [
{
"id": "1",
"name": "WORK",
"factor": 1.0
}
],
"tasks": [
{
"id": "Task1",
"name": "Intern revision"
}
]
}
}
{
"title":"Employee-assigned-to-shift-covers-demand-check",
"category":"WARNING",
"description":"If, by any combination of shifts, some demand can not have it's 'minimum' fulfilled, then the demand intervals that can't be satisfied will be returned.",
"violations":[
{
"day":0,
"startTime":"14:00",
"endTime":"15:00",
"personnelGroups":[
"PerGrpId1"
],
"assignment":"Assignment1",
"taskId":"Task1",
"competencies":[
"Competence1",
"Competence2"
],
"workType":"WORK",
"numberOfEmployees":2,
"missingMinutes":120
},
{
"day":2,
"startTime":"14:00",
"endTime":"15:00",
"personnelGroups":[
"PerGrpId1"
],
"assignment":"Assignment1",
"taskId":"Task1",
"competencies":[
"Competence1",
"Competence2"
],
"workType":"WORK",
"numberOfEmployees":2,
"missingMinutes":120
}
],
"totalMinutes":240
}