مرکز تماسی را در نظر بگیرید که میخواهید برای آن تغییراتی ایجاد کنید تا تقاضا برای کارمندان پوشش داده شود. مرکز تماس 24/7 کار می کند و تعداد کارکنان مورد نیاز در طول زمان متفاوت است. مرکز تماس، کارمندان تمام وقت و پاره وقت استخدام می کند.
کارمندان تمام وقت شیفت های 9 ساعته را انجام می دهند، 4 یا 5 ساعت پس از شروع شیفت خود 1 ساعت استراحت دارند و می توانند شیفت خود را هر زمانی بین ساعت 5 صبح تا 12 بعد از ظهر شروع کنند. کارمندان پاره وقت شیفت های 4 ساعته با 15 دقیقه استراحت در پایان ساعت دوم کاری انجام می دهند و می توانند در هر زمانی شیفت خود را شروع کنند. در هر دو مورد، زمانهای شروع شیفت ممکن با افزایش 15 دقیقهای در نظر گرفته میشود.
مرکز تماس با توجه به اینکه حداکثر 20 کارمند تمام وقت و 40 کارمند پاره وقت وجود دارد، علاقه مند به برنامه ریزی نیروی کار مورد نیاز برای دو روز آینده است.
الگوهای شیفت برای کارمندان تمام وقت و پاره وقت
قوانینی که شیفت های معتبر را تعیین می کنند را می توان با یک الگوی شیفت نشان داد. در یک الگوی shift، مفهوم شکست را می توان با یک الگوی رویداد نشان داد. به عنوان مثال، الگوی شیفت برای یک شیفت کارمند تمام وقت به صورت زیر نمایش داده می شود:
{
"id": "full-time",
"earliestStartTime": {
"hours": 5
},
"latestStartTime": {
"hours": 12
},
"durationMinutes": 540,
"startTimeIncrementMinutes": 15,
"eventTemplates": [
{
"id": "full-time-break",
"minimumMinutesAfterShiftStart": 240,
"maximumMinutesAfterShiftStart": 300,
"durationMinutes": 60,
"startTimeIncrementMinutes": 60
}
],
"maximumEmployeeCount": 20
}
به طور مشابه، الگوی شیفت برای یک شیفت کارمند پاره وقت به صورت زیر نمایش داده می شود:
{
"id": "part-time",
"earliestStartTime": {},
"latestStartTime": {
"hours": 23,
"minutes": 59
},
"durationMinutes": 240,
"startTimeIncrementMinutes": 15,
"eventTemplates": [
{
"id": "part-time-break",
"minimumMinutesAfterShiftStart": 120,
"maximumMinutesAfterShiftStart": 120,
"durationMinutes": 15,
"startTimeIncrementMinutes": 0
}
],
"maximumEmployeeCount": 40
}
تقاضای کارکنان در طول زمان
تقاضا برای کارمندان با لیستی از EmployeeDemand
نشان داده می شود که در آن هر یک از این عناصر با فاصله زمانی و تعداد کارمندان مشخص می شود. در این مثال، تقاضا بین 4 تا 13 کارمند در بازه زمانی دو روز در نوسان است و به صورت زیر نمایش داده می شود:
{
...
"employeeDemands": [
{
"startDateTime": {
"year": 2024,
"month": 5,
"day": 20
},
"endDateTime": {
"year": 2024,
"month": 5,
"day": 20,
"hours": 12
},
"employeeCount": 8
},
{
"startDateTime": {
"year": 2024,
"month": 5,
"day": 20,
"hours": 12
},
"endDateTime": {
"year": 2024,
"month": 5,
"day": 20,
"hours": 20
},
"employeeCount": 12
},
{
"startDateTime": {
"year": 2024,
"month": 5,
"day": 20,
"hours": 20
},
"endDateTime": {
"year": 2024,
"month": 5,
"day": 21,
"hours": 6
},
"employeeCount": 4
},
{
"startDateTime": {
"year": 2024,
"month": 5,
"day": 21,
"hours": 6
},
"endDateTime": {
"year": 2024,
"month": 5,
"day": 22,
"hours": 0
},
"employeeCount": 13
}
]
}
نمونه ای از یک درخواست کامل
{
"solverConfig": {
"timeLimit": "30s"
},
"shiftTemplates": [
{
"id": "full-time",
"earliestStartTime": {
"hours": 5
},
"latestStartTime": {
"hours": 12
},
"durationMinutes": 540,
"startTimeIncrementMinutes": 15,
"eventTemplates": [
{
"id": "full-time-break",
"minimumMinutesAfterShiftStart": 240,
"maximumMinutesAfterShiftStart": 300,
"durationMinutes": 60,
"startTimeIncrementMinutes": 60
}
],
"maximumEmployeeCount": 20
},
{
"id": "part-time",
"earliestStartTime": {},
"latestStartTime": {
"hours": 23,
"minutes": 59
},
"durationMinutes": 240,
"startTimeIncrementMinutes": 15,
"eventTemplates": [
{
"id": "part-time-break",
"minimumMinutesAfterShiftStart": 120,
"maximumMinutesAfterShiftStart": 120,
"durationMinutes": 15,
"startTimeIncrementMinutes": 0
}
],
"maximumEmployeeCount": 40
}
],
"employeeDemands": [
{
"startDateTime": {
"year": 2024,
"month": 5,
"day": 20
},
"endDateTime": {
"year": 2024,
"month": 5,
"day": 20,
"hours": 12
},
"employeeCount": 8
},
{
"startDateTime": {
"year": 2024,
"month": 5,
"day": 20,
"hours": 12
},
"endDateTime": {
"year": 2024,
"month": 5,
"day": 20,
"hours": 20
},
"employeeCount": 12
},
{
"startDateTime": {
"year": 2024,
"month": 5,
"day": 20,
"hours": 20
},
"endDateTime": {
"year": 2024,
"month": 5,
"day": 21,
"hours": 6
},
"employeeCount": 4
},
{
"startDateTime": {
"year": 2024,
"month": 5,
"day": 21,
"hours": 6
},
"endDateTime": {
"year": 2024,
"month": 5,
"day": 22,
"hours": 0
},
"employeeCount": 13
}
]
}
نمونه پاسخ
پاسخ حل کننده شامل لیستی از برنامه های کارمندان با تعداد کارمندان مورد نیاز آنها است. در صورتی که پوشش تقاضا به طور دقیق امکان پذیر نباشد، پاسخ همچنین موارد تخلف را در هر بازه زمانی مربوطه فهرست می کند.
مثال زیر یکی از برنامه های کارمند تولید شده برای یک کارمند تمام وقت را نشان می دهد:
{
"solutionStatus": "SHIFT_GENERATION_SOLVED",
"employeeSchedules": [
{
"shiftTemplateId": "full-time",
"shifts": [
{
"startDateTime": {
"year": 2024,
"month": 5,
"day": 21,
"hours": 7,
"minutes": 30
},
"endDateTime": {
"year": 2024,
"month": 5,
"day": 21,
"hours": 16,
"minutes": 30
},
"events": [
{
"startDateTime": {
"year": 2024,
"month": 5,
"day": 21,
"hours": 12,
"minutes": 30
},
"endDateTime": {
"year": 2024,
"month": 5,
"day": 21,
"hours": 13,
"minutes": 30
},
"eventTemplateId": "full-time-break"
}
]
}
],
"employeeCount": 1
},
...
]
...
}