ضع في اعتبارك مركز الاتصال الذي تريد إنشاء ورديات له بحيث والطلب للموظفين. يعمل مركز الاتصال على مدار 24 ساعة طوال أيام الأسبوع، يختلف عدد الموظفين المطلوبين بمرور الوقت. يوظف مركز الاتصال الموظفين بدوام كامل وبدوام جزئي.
الموظفون بدوام كامل يجرون نوبات عمل لمدة 9 ساعات، ويأخذون استراحة لمدة ساعة واحدة من 4 إلى 5 ساعات. بعد بدء مناوبته، ويمكنه بدء مناوبته في أي وقت بين الساعة 5 صباحًا 12 ظهرًا. يقوم الموظفون بدوام جزئي بإجراء نوبات لمدة 4 ساعات مع استراحة لمدة 15 دقيقة في نهاية ساعة العمل الثانية، ويمكنه بدء مناوبته في أي وقت. في كليهما الحالات، يتم النظر في أوقات بدء الوردية المحتملة بزيادات تبلغ 15 دقيقة.
يهتم مركز الاتصال بالتخطيط لمتطلبات القوى العاملة اليومين المقبلين من الخدمة، مع الأخذ في الاعتبار أنه قد يكون هناك 20 موظفًا بدوام كامل موظفًا و40 موظفًا بدوام جزئي.
نماذج نوبات العمل للموظفين بدوام كامل وجزئي
يمكن تمثيل القواعد التي تحدد الورديات الصالحة بواسطة shift نموذجك. داخل قالب shift، يمكن تمثيل مفهوم الفاصل باستخدام نموذج فعالية. على سبيل المثال، نموذج 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
},
...
]
...
}