מוקד יצירת קשר

צריך לקחת בחשבון מרכז אנשי קשר שעבורו רוצים ליצור התאמות, כך הביקוש לעובדים מכוסה. מרכז השירות פועל 24/7, מספר העובדים הנדרשים משתנה עם הזמן. מוקד השירות מאפשר להעסיק עובדים במשרה מלאה וגם עובדים במשרה חלקית.

העובדים במשרה מלאה עורכים משמרות של 9 שעות, עושים הפסקה של שעה אחת של 4 או 5 שעות לאחר תחילת המשמרת, והם יכולים להתחיל במשמרת בכל שלב בין 5:00 ל- 12:00. עובדים במשרה חלקית עורכים משמרות של 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
      },
      ...
    ]
    ...
  }