Rozważmy centrum obsługi, dla którego chcesz generować zmiany, tak aby i popyt na pracowników. Centrum obsługi klienta działa 24 godziny na dobę, 7 dni w tygodniu, wymagana liczba pracowników zmienia się w czasie. Centrum obsługi zatrudnia pracowników zatrudnionych na pełny etat i pół etatu.
Pracownicy pełnoetatowi wykonują 9-godzinne zmiany i mają godzinną przerwę na 4 lub 5 godzin po rozpoczęciu zmiany i mogą zacząć pracę w dowolnym momencie między 5:00 a 5:00 12:00. Osoby zatrudnione w niepełnym wymiarze godzin wykonują 4-godzinne zmiany z 15-minutową przerwą w na koniec drugiej godziny pracy i mogą w dowolnym momencie rozpocząć zmianę. W obu możliwe godziny rozpoczęcia zmiany są podawane w odstępach 15-minutowych.
Centrum obsługi klienta chce zaplanować wymagania dotyczące zatrudnienia z zachowaniem przez kolejne dwa dni, biorąc pod uwagę, że może być maksymalnie 20 pracowników pełnoetatowych i 40 pracowników zatrudnionych na niepełny etat.
Zmiana szablonów dla pracowników zatrudnionych w pełnym i niepełnym wymiarze godzin
Reguły określające prawidłowe przesunięcia można przedstawić za pomocą funkcji shift . W szablonie zmiany może być przedstawiona koncepcja przerwy. za pomocą szablonu zdarzenia. Na przykład szablon zmian dla pracowników pełnoetatowych zmiana pracowników jest prezentowana jako:
{
"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
}
Podobnie szablon zmiany w przypadku zmiany w niepełnym wymiarze godzin jest przedstawiany jako:
{
"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
}
Zapotrzebowanie pracowników w czasie
Zapotrzebowanie na pracowników jest podane na liście EmployeeDemand
,
Każdy z tych elementów charakteryzuje się przedziałem czasu i pracownikiem,
. W tym przykładzie popyt waha się od 4 do 13 pracowników
obejmuje dwa dni i jest przedstawiany jako:
{
...
"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
}
]
}
Przykład kompletnego żądania
{
"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
}
]
}
Przykładowa odpowiedź
Odpowiedź rozwiązania zawiera listę harmonogramów pracowników wraz z ich odpowiednią liczbę wymaganych pracowników. Jeśli zaspokajanie popytu dokładnie nie jest możliwe, ale w odpowiedzi znajdą się też informacje o naruszeniach w każdym odpowiednim momencie interwału.
Poniższy przykład pokazuje jeden z wygenerowanych harmonogramów pracowników w przypadku pracownik pełnoetatowy:
{
"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
},
...
]
...
}