Package google.research.optimization.v1.workforce

אינדקס

הפסקה

תקופה שבה עובד מפסיק את עבודתו במהלך משמרת.

שדות
start_date_time

DateTime

שעת ההתחלה של ההפסקה.

duration_minutes

int32

משך ההפסקה בדקות.

BreakRule

כלל שקובע מתי ההפסקה תתחיל בתוך משמרת, ומהי משך הזמן שלה. הרשימה של כל ההפסקות האפשריות מחושבות במרווחים של rule_increment_minutes. לדוגמה, אם כלל הפסקה יוצר הפסקה של 30 דקות שיכולה להתחיל בין 10:00 ל-11:00, ומשך ההפסקה של כלל ההפסקה הוא 20 דקות, רשימת ההפסקות שנחשבות היא: [10:00, 10:30], [10, 20, 10:10], [10:10], [10:10],

שדות
earliest_start_time

DateTime

שעת ההתחלה המוקדמת ביותר של ההפסקה (כולל). אפשר להגדיר רק את hours ואת minutes.

latest_start_time

DateTime

שעת ההתחלה האחרונה של ההפסקה (כולל). אפשר להגדיר רק את hours ואת minutes.

duration_minutes

int32

משך ההפסקה בדקות.

rule_increment_minutes

int32

[אופציונלי] מרווח זמן בדקות לכל ההפסקות שאפשר להשתמש בהן בכלל ההפסקה הזה. אם המדיניות לא מוגדרת, ברירת המחדל היא duration_minutes.

BudgetRequirement

דרישות התקציב במרווח זמן נתון.

שדות
total_budget

double

התקציב הכולל של המרווח הנתון. צריך לתת תקציב כולל אם העדיפות היא PRIORITY_MANDATORY.

אם המדיניות total_budget לא מוגדרת, העלות הכוללת של לוח הזמנים תמוזער בהתאם לpriority שצוין. לדוגמה, אם priority של התקציב הוא PRIORITY_MEDIUM, הפתרון יצמצם את העלות לפני צמצום של הפרת האילוץ עם עדיפות PRIORITY_LOW.

start_date_time

DateTime

שעת ההתחלה של המועד שבו התקציב הזה ייכנס לתוקף. אם לא מצוינת שעת התחלה, היא מוגדרת כשעת ההתחלה המוקדמת ביותר של כל המשמרות הנתונות.

end_date_time

DateTime

שעת הסיום של המועד שבו התקציב הזה חל. אם לא מצוינת שעת סיום, היא מוגדרת כשעת הסיום האחרונה של כל המשמרות הנתונות.

priority

Priority

רמת עדיפות לעמידה בדרישת התקציב במהלך חלון הזמן שצוין. עדיפות ברירת המחדל היא PRIORITY_LOW. אם העדיפות מוגדרת ל-PRIORITY_MANDATORY, צריך להגדיר total_budget.

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

CoverageRequirement

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

בכל תפקיד ו/או מיומנות, מתמלאים דרישת הכיסוי של לפחות target_employee_count עובדים בכל רגע נתון (או בכל משמרת ב-shift_ids). לעומת זאת, מופרת דרישת הכיסוי אם בשלב כלשהו בחלון הזמן (או בכל אחד מהשינויים בshift_ids), יש פחות מ-target_employee_count עובדים שעובדים במהלך חלון הזמן הזה. יותר עובדים עובדים מאשר target_employee_count עדיין עומדים בדרישה, אבל מפתחי השירות מצמצמים את איוש הסוכנויות המוגזמות.

שדות
start_date_time

DateTime

שעת ההתחלה של דרישת הכיסוי (כולל). אם המדיניות מוגדרת, חובה להשאיר את השדה shift_ids ריק.

end_date_time

DateTime

שעת הסיום של דרישת הכיסוי (לא כולל). אם המדיניות מוגדרת, חובה להשאיר את השדה shift_ids ריק.

location_id

string

המיקום שבו העובדים נדרשים. השדה shift_ids לא ריק, השדה הזה חייב להיות ריק.

shift_ids[]

string

אם הוגדרו, דרישות התפקיד והמיומנות חלות בנפרד על כל מזהה שינוי ברשימה הזו. אם ערכי shift_id לא ריקים, start_date_time, end_date_time ו-location_id חייבים להיות ריקים.

role_requirements[]

RoleRequirement

מספר העובדים הנדרש שיוקצו לתפקידים שצוינו בחלון הזמן. צריך לתת role_requirement אחד לכל היותר לכל מזהה תפקיד. רמת העדיפות שמוגדרת כברירת מחדל לכל אחת מהדרישות היא PRIORITY_MANDATORY. אנחנו מפירים את האילוצים האלה אם מספר העובדים המוקצה לתפקידים שצוינו קטן מ-target_employee_count בכל שלב בחלון הזמן.

skill_requirements[]

SkillRequirement

מספר העובדים הנדרש עם כישורים ספציפיים שהוקצו למשמרות בחלון הזמן. יש לתת skill_requirement אחד לכל היותר לכל מזהה מיומנות. רמת העדיפות שמוגדרת כברירת מחדל לכל אחת מהדרישות היא PRIORITY_LOW. אנחנו מפירים את האילוצים האלה אם פחות מ-target_employee_count עובדים יש את המיומנויות הנתונות בכל שלב בחלון הזמן.

RoleRequirement

מספר העובדים הנדרש שיוקצו לתפקיד שצוין בחלון הזמן.

שדות
role_id

string

מזהה התפקיד של הדרישה.

target_employee_count

int32

המספר הרצוי של העובדים שהוקצו לתפקיד במהלך חלון הזמן.

priority

Priority

רמת העדיפות לאילוץ של הדרישה הזו. עדיפות ברירת המחדל לכל אילוצי המשאבים היא PRIORITY_MANDATORY.

SkillRequirement

מספר העובדים הנדרש שעובדים בחלון הזמן ושיש להם את המיומנות הנדרשת.

שדות
skill_id

string

מזהה המיומנות לדרישה.

target_employee_count

int32

המספר הרצוי של עובדים עם המיומנות הנדרשת שעובדים בחלון הזמן.

priority

Priority

רמת העדיפות לאילוץ של הדרישה הזו. עדיפות ברירת המחדל לכל אילוצי המשאבים היא PRIORITY_LOW.

DemandCoverageViolation

מציינת את ההפרה בכיסוי הביקוש במרווח הנתון. הביקוש של העובדים זהה בכל התקופה שצוינה.

שדות
start_date_time

DateTime

התאריך ושעת ההתחלה של מרווח הביקוש (כולל). הערך הזה מצוין עד לדקה.

end_date_time

DateTime

התאריך ושעת הסיום של תקופת הביקוש (לא כולל). הערך הזה מצוין עד לדקה.

coverage_violation

int32

הפרה של הכיסוי במהלך פרק הזמן שצוין. ערך חיובי מציין שיש עומס יתר בביקוש, וערך שלילי מציין שהביקוש בחסר.

עובד

עובד מצוות העבודה שאמור להיקבע.

שדות
id

string

המזהה הייחודי הוקצה לעובד הזה.

role_ids[]

string

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

skill_ids[]

string

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

shift_preferences[]

ShiftPreference

שינוי ההעדפות של העובד הזה. התנודות שמצוינות כאן מייצגות שינויים שהעובד מעדיפים להיות מקצים להם במהלך החלון לפגישות. מזהי השינויים שמצוינים ב-shift_preferences חייבים להיות ייחודיים. הפותר ינסה להגדיל את הסכום של ערכי ShiftPreference.preference בכל הshift_preferences שנמצאו.

scheduling_constraints[]

SchedulingConstraint

רשימת מגבלות תזמון לעובד הזה. רמת העדיפות שמוגדרת כברירת מחדל לכל אחת מהמגבלות האלה היא PRIORITY_MEDIUM. פרטים נוספים זמינים ב-enum Priority.

resource_constraints[]

ResourceConstraint

אם יש מגבלות תזמון נוספות שלא צוינו ב-scheduling_constraints, אפשר להוסיף כאן אל resource_constraints. ResourceConstraint הוא ייצוג מופשט יותר של הגבלת המשאבים של העובד. רמת העדיפות שמוגדרת כברירת מחדל לכל אחת מהמגבלות האלה היא PRIORITY_MEDIUM. פרטים נוספים זמינים ב-enum Priority.

shift_requests[]

ShiftRequest

רשימת בקשות למשמרת עבור העובד. הבקשה יכולה להיות מצב שבו עובד יוקצה או לא יוקצה למשמרות ספציפיות. אפשר לייצג מטלות עם תזמון קבוע של העובד באמצעות ShiftRequest עם עדיפות PRIORITY_MANDATORY. מזהה משמרת יכול להופיע בבקשה אחת לתזמון לכל היותר עבור העובד הזה. רמת העדיפות שמוגדרת כברירת מחדל לכל אחת מהבקשות האלה היא PRIORITY_LOW. פרטים נוספים זמינים ב-enum Priority.

hourly_contract

HourlyContract

חוזה שמציין תעריפים קבועים ושעות נוספות לעובד בכל שעה.

EmployeeDemand

מציינת את מספר העובדים שנדרשים כדי לכסות את הביקוש בפרק הזמן הנתון של DateTime.

שדות
start_date_time

DateTime

תחילת פרק הזמן של הביקוש הנתון (כולל). הערכים האלה נקראים עד הדקה. המערכת מתעלמת משניות וכל היחידות הקטנות יותר.

end_date_time

DateTime

סיום פרק הזמן של הדרישה הנתונה (לא כולל). הערכים האלה נקראים עד הדקה. המערכת מתעלמת משניות וכל היחידות הקטנות יותר.

employee_count

int32

מספר העובדים שנדרשים כדי לכסות את הביקוש למרווח הזה.

EmployeeSchedule

רשימה ממוינת של משמרות התואם ל-ShiftTemplate בודד שיוקצה למספר עובדים.

שדות
shift_template_id

string

מזהה התבנית ששימשה ליצירת קבוצת השינויים הזו.

shifts[]

ShiftWithEvents

רשימת משמרות שאליהן מוקצה מספר עובדים אחד (employee_count). התנודות והאירועים שנבחרו עבור לוח הזמנים נוצרו מתבנית אחת. ההתאמות ממוינות בסדר כרונולוגי ולא חופפות. אם הערך של SolverConfig.multi_day_schedule הוא True, יום חופשה מיוצג במרומז על ידי היעדר שינוי שיתחיל מאותו יום.

employee_count

int32

מספר העובדים שצריך להקצות לקבוצת המשמרות הזו כדי לכסות את הביקוש.

ShiftWithEvents

מציין את תאריך ההתחלה ותאריך הסיום יחד עם רשימת אירועים קבועים של שינוי שנוצר על ידי הפותר.

שדות
start_date_time

DateTime

התאריך ושעת ההתחלה של המשמרת. הערך הזה מצוין עד לדקה. שניות ויחידות קטנות יותר לא ניתנות.

end_date_time

DateTime

התאריך ושעת הסיום של המשמרת. הערך הזה מצוין עד לדקה. שניות ויחידות קטנות יותר לא ניתנות.

events[]

Event

רשימת אירועים הכלולים בשינוי הזה, ממופים בדיוק אל אותם אירועי 'ShiftTemplate.Event' ובאותו סדר. אם הערך של SolverConfig.shift_events_can_change הוא True, זמני ההתחלה והסיום של האירועים עשויים להשתנות בכל ShiftWithEvents בלוח הזמנים הזה.

אירוע

מציין את תאריכי ההתחלה והסיום של אירוע ספציפי במשמרת שנוצרה על ידי הפותר.

שדות
event_template_id

string

המזהה של התבנית ששימשה ליצירת האירוע הזה.

start_date_time

DateTime

התאריך ושעת ההתחלה של האירוע. הערך הזה מצוין עד לדקה. שניות ויחידות קטנות יותר לא ניתנות.

end_date_time

DateTime

התאריך ושעת הסיום של האירוע. הערך הזה מצוין עד לדקה. שניות ויחידות קטנות יותר לא ניתנות.

EventTemplate

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

שדות
id

string

המזהה הייחודי של התבנית הזו.

minimum_minutes_after_shift_start

int32

מספר הדקות המינימלי שהאירוע יכול להתחיל אחרי תחילת השינוי.

maximum_minutes_after_shift_start

int32

מספר הדקות המקסימלי אחרי תחילת השינוי שהאירוע הזה יכול להתחיל.

duration_minutes

int32

משך זמן קבוע בדקות של האירוע.

start_time_increment_minutes

int32

מרווח הזמן (בדקות) ששימש ליצירת הקבוצה של זמני ההתחלה האפשריים של אירועים בין minimum_minutes_after_shift_start ל-maximum_minutes_after_shift_start. לדוגמה, אם מספר הדקות המינימלי לאחר התחלת המשמרת הוא 30 דקות, מספר הדקות המקסימלי לאחר התחלת המשמרת הוא 45 ומרווח זמן ההתחלה הוא 5 דקות, האירוע יכול להתרחש 30, 35, 40 או 45 דקות לאחר תחילת המשמרת.

HourlyContract

מציינת תעריף בסיס לשעת, הפרשי שערים ומכפילי זמן מסך כדי לקבוע את התגמול לעובד. חשוב לשים לב לתקנות במקומות שונים עשויה להיות דרישה לחישוב שונה של פיצוי על תוספת זמן. הפיצוי מעריך את התגמול על תוספת זמן כדי למזער את הערך היחסי של העלות הכוללת או לעמוד בתקציב (ראו BudgetRequirement). הוא לא מיועד ככלי לחישוב השכר.

שדות
base_hourly_rate

double

התגמול עבור עבודה בשעות שלא טופלו. אם חלים על העובד כמה תעריפים, הפרשי התעריפים יחולו ביחס לתעריף הבסיסי השעתי. בנוסף, אם יש כמה תעריפים, התעריף השעתי הבסיסי צריך להיות המינימלי של התעריפים האלה.

hourly_rate_shift_differentials

map<string, double>

הפרש התעריף לפי שעה, ששולם בנוסף ל-base_hourly_rate. לדוגמה, אם התעריף הבסיסי לשעה הוא 30 $לשעה, מתבצע תשלום של 'shift_1' לפי תעריף של 40 $לשעה ו-'shift_2' משולם בתעריף של $45 לשעה, הייצוג ב-Proto הוא: base_hourly_rate: 30 hourly_rate_shift_differentials {key: "shift_1" value: 10} hourly_rate_shift_differentials {key: "shift_2" value: 15}.

overtime_periods[]

OvertimePeriod

רשימה של כל התקופות שעבורן צריך לחשב זמן נוסף. התקופות האלה לא יכולות להיות חופפות.

OvertimePeriod

תקופה קבועה וקבועה באופן קבוע (בדרך כלל 168 שעות או שבע תקופות רצופות של 24 שעות) שמשמשת לקביעת סכום הפיצויים על שעות נוספות. לכל תקופה יש מכפיל של זמן נוסף (למשל, 1.5) ביחס לbase_hourly_rate ומגבלה על מספר השעות שנחשבות לעבודה רגילה (לא בשעות נוספות). כל שינוי שחופף לחלון הזמן של start_date_time (כולל) ושל end_date_time (לא כולל) ייחשב כחלק ממספר שעות העבודה הכולל במהלך התקופה. אם החפיפה היא חלקית, רק השעות החופפות ייספרו.

שדות
overtime_multiplier

double

מכפיל כדי לחשב את התעריף השעתי לאורך זמן (חייב להיות שווה ל-1.0 או גדול ממנו). התעריף לשעה נוספת מחושב בדרך כלל כ-base_hourly_rate * overtime_multiplier. אם יש כמה תעריפים שניתנים דרך hourly_rate_shift_differentials, הפותר מחשב את התעריף השעתי לאורך זמן עם ממוצע פשוט של התעריפים שרלוונטיים לתקופת הזמן לאורך זמן. הערה: תקנות במקומות שונים עשויות לדרוש חישוב שונה של פיצוי על תוספת זמן. הפותר מעריך את התגמול על תוספת זמן כדי למזער עלות בפועל לאלף חשיפות או לעמוד בתקציב, אבל הוא לא מיועד ככלי לחישוב השכר.

start_date_time

DateTime

שעת ההתחלה בתקופת הזמן הנוספת. אם יש שינוי או חפיפה באותו זמן, השעות של שינוי כזה ייספרו החל מ-start_date_time.

end_date_time

DateTime

שעת הסיום עבור תקופת הזמן הנוספת. אם יש שינוי או חפיפה באותו זמן, השעות של שינוי כזה ייספרו עד end_date_time.

maximum_regular_hours

double

המספר המקסימלי של שעות עבודה שהתשלום עליהן מתבצע לפי תעריף קבוע (לא זמן ארוך). הכמות חייבת להיות מספר חיובי.

עדיפות

רמת העדיפות של כל מגבלה על לוח הזמנים של העובד או הדרישות לגבי הכיסוי. למשל: SchedulingConstraint, ResourceConstraint, ShiftRequest ו-CoverageRequirement. מכיוון שיכולות להיות אילוצים מתנגשים, לא תמיד אפשר לעמוד בכל האילוץ. לכן, לכל סוג של אילוץ יש עדיפות (שנקבעת על ידי המשתמש או ברירת מחדל) כדי ליידע את הפתרון לגבי החשיבות היחסית של כל המגבלות שהוגדרו ללוח זמנים מלא.

טיפוסים בני מנייה (enum)
PRIORITY_UNSPECIFIED רמת עדיפות לא ידועה.
PRIORITY_LOW רמת העדיפות הנמוכה ביותר. המגבלות עם העדיפות הזו פחות חשובות מהמגבלות האחרות. אם לא ניתן למצוא פתרון ישים, מדובר בהפרה הראשונה של המדיניות.
PRIORITY_MEDIUM אמצעי הגעה לאתר ברמת העדיפות. מגבלות עם העדיפות הזו חשובות יותר ממגבלות עם עדיפות PRIORITY_LOW אבל פחות חשובות ממגבלות עם עדיפות PRIORITY_HIGH. אם לא ניתן למצוא פתרון אפשרי לאחר הורדת כל המגבלות באמצעות עדיפות של PRIORITY_LOW, אילוצים של עדיפות של PRIORITY_MEDIUM יישקלו בשלב הבא עקב הפרה.
PRIORITY_HIGH רמת העדיפות הגבוהה ביותר. המגבלות עם רמת העדיפות הזו הן החשובות ביותר. ניתן להתחשב בהם בהפרה האחרונה, אם לא ניתן למצוא פתרון ישים לאחר הקלה במגבלות של רמות העדיפות הנמוכות יותר.
PRIORITY_MANDATORY רמת עדיפות שמייצגת משהו שהפותר לא יכול להפר. אם הפותר מחזיר SolutionStatus.INFEASIBLE, יכול להיות שהסיבה היא מגבלות רבות מדי של PRIORITY_MANDATORY.

ResourceConstraint

מגבלה כללית שמגבילה את הכמות של 'משאב' מסוים שמשמש את העובד. זוהי גרסה מופשטת של SchedulingConstraint הספציפית יותר והיא גמישה יותר עבור המשתמש. במקום זאת, אפשר להשתמש בהודעה הזו כדי לציין אילוצים רבים של תזמון שלא ניתן לציין ב-SchedulingConstraint.type.

שדות
priority

Priority

רמת העדיפות של אילוץ המשאב הזה. עדיפות ברירת המחדל לכל אילוצי המשאבים היא PRIORITY_MEDIUM.

resource_usages

map<string, double>

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

minimum_resource_usage

double

צריכת המשאבים המינימלית הדרושה כדי לעמוד באילוץ של משאב.

maximum_resource_usage

double

ניצול מקסימלי של המשאבים במסגרת אילוץ משאבים.

SchedulingConstraint

מגבלה ספציפית על לוח הזמנים של עובד מסוים. האילוץ שצוין חל רק במהלך המרווח הנתון [start_date_time, end_date_time).

שדות
priority

Priority

רמת העדיפות של מגבלת התזמון הזו. עדיפות ברירת המחדל לכל מגבלות התזמון היא PRIORITY_MEDIUM.

start_date_time

DateTime

שעת ההתחלה שבה חלה מגבלת התזמון הזו (כולל).

end_date_time

DateTime

שעת הסיום של המועד שבו חלה מגבלת התזמון הזו (לא כולל).

שדה איחוד type. סוג האילוץ שצוין. כל אילוץ מוחל רק במסגרת חלון הזמן שצוין למעלה. type יכול להיות רק אחת מהאפשרויות הבאות:
minimum_minutes

int32

מספר הדקות המינימלי שהעובד יכול לעבוד. אם לעובד מוקצה משמרת שחופפת (באופן מלא או חלקי) לחלון הזמן, מספר הדקות שבהן ההתאמה חופפת לחלון הזמן נכלל בספירה הזו.

maximum_minutes

int32

מספר הדקות המקסימלי שהעובד יכול לעבוד בחלון הזמן הזה. אם לעובד מוקצה משמרת שחופפת (באופן מלא או חלקי) לחלון הזמן, מספר הדקות שבהן ההתאמה חופפת לחלון הזמן נכלל בספירה הזו.

minimum_consecutive_work_days

int32

המספר המינימלי של ימים רצופים שבהם העובד יכול לעבוד. עובד עובד ביום מסוים אם הוא מקבל משמרת שמתחילה באותו יום. כל שינוי שמוקצה לעובד ומתחיל בחלון הזמן נכלל בספירה הזו.

maximum_consecutive_work_days

int32

המספר המקסימלי של ימים רצופים שהעובד יכול לעבוד. עובד עובד ביום מסוים אם הוא מקבל משמרת שמתחילה באותו יום. כל שינוי שמוקצה לעובד ומתחיל בחלון הזמן נכלל בספירה הזו.

minimum_shift_count

int32

מספר המשמרות המינימלי שהעובד יכול לעבוד בו. כל שינוי שמוקצה לעובד שחופף באופן מלא לחלון הזמן נכלל בספירה הזו.

maximum_shift_count

int32

מספר המשמרות המקסימלי שהעובד יכול לעבוד בו. כל שינוי שמוקצה לעובד שחופף באופן מלא לחלון הזמן נכלל בספירה הזו.

minimum_rest_minutes

int32

מספר הדקות המינימלי שהעובד צריך לנוח אחרי סיום משמרת אחת לפני שהוא יוקצה למשמרת אחרת. האילוץ הזה חל על כל צמד משמרות שכלולות באופן מלא בפונקציה [start_date_time, end_date_time].

Shift

שינוי מציין חלון זמן קבוע שבו העובדים יכולים לעבוד.

שדות
id

string

המזהה הייחודי הוקצה למשמרת הזו.

location_id

string

מזהה המיקום שממנו השינוי הזה עובד. השדה הזה יכול להיות ריק.

start_date_time

DateTime

שעת ההתחלה של השינוי (כולל).

end_date_time

DateTime

שעת הסיום של ההחלפה (לא כולל). בשלב הזה, הפותר מאפשר רק התאמות שאורכן פחות מ-24 שעות.

break_rules[]

BreakRule

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

ShiftAssignment

עובד שיטפל בהקצאת תפקידים.

שדות
employee_id

string

מזהה העובד שרוצים להקצות.

shift_id

string

שינוי מזהה שהוקצה לעובד.

role_id

string

מזהה התפקיד שהעובד הוקצה לו לצורך המשמרת.

breaks[]

Break

רשימת ההפסקות למטלה הזו.

ShiftGenerationSolutionStatus

סטטוס הפתרון שסופק בתשובה של פותר.

טיפוסים בני מנייה (enum)
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED סטטוס התגובה לא צוין.
SHIFT_GENERATION_SOLVED הפותר מצא פתרון במגבלת הזמן שצוינה.
SHIFT_GENERATION_NOT_SOLVED בעיה מנעה מהפותר ליצור שינויים.
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED לא ניתן היה ליצור התאמות כדי לכסות את הביקוש במסגרת הזמן שצוינה.

ShiftPreference

העדפה מספרית למזהה שינוי ספציפי.

שדות
shift_id

string

מזהה Shift שעבורו צוינה ההעדפה.

preference

int32

ערכי העדפה גדולים יותר מציינים שינוי רצוי יותר.

ShiftRequest

בקשה של עובד להקצות או לא להקצות אותו למשמרות ספציפיות.

שדות
priority

Priority

רמת העדיפות של הבקשה לתזמון הזו. עדיפות ברירת המחדל לכל הבקשות לתזמון היא PRIORITY_LOW.

shift_ids[]

string

מזהי השינוי של הבקשה לתזמון.

type

WorkStatus

סוג הבקשה, למשל אם הבקשה מוקצית או לא מוקצית לקבוצת המשמרות.

ShiftTemplate

תבנית שמגדירה כללים ליצירת שינויים. משמרת היא יחידת עבודה שמציינת שעת התחלה ושעת סיום, ועשויה להכיל אירועים (לדוגמה, ארוחת צהריים, הפסקות וכו'). שינוי יוקצה לתאריך ספציפי בתשובה.

שדות
id

string

המזהה הייחודי של התבנית הזו.

earliest_start_time

TimeOfDay

השעה המוקדמת ביותר ביום שבה יכולה להתחיל משמרת. הערך הזה מצוין עם שעות ודקות. המערכת מתעלמת משניות ומיחידות ננו.

latest_start_time

TimeOfDay

השעה המאוחרת ביותר ביום שבה יכולה להתחיל משמרת. הערך הזה מצוין עם שעות ודקות. המערכת מתעלמת משניות ומיחידות ננו. אם הערך הזה קטן מהערך earliest_start_time, שינוי שייווצר באמצעות התבנית הזו עשוי להתחיל לפני חצות או אחריה.

duration_minutes

int32

משך זמן קבוע של החלפה שנוצרה על ידי התבנית הזו.

start_time_increment_minutes

int32

מרווח הזמן (בדקות) ששימש ליצירת הקבוצה של זמני ההתחלה האפשריים בין earliest_start_time ל-latest_start_time. לדוגמה, אם שעת ההתחלה המוקדמת ביותר היא 8:00, שעת ההתחלה האחרונה היא 8:30 ושעת ההתחלה היא 10 דקות, אז כל זמני ההתחלה האפשריים של תבנית ההחלפה הזו הם: 8:00, 8:10, 8:20 ו-8:30.

days_off_count_per_week

int32

מספר קבוע של ימי הנחה בשבוע. אם עובד מסוים לא תוקצה למשמרת שמתחילה באותו יום, יש לו יום חופשה נתון. שבוע הוא 7 ימים ומתחיל ביום ראשון.

event_templates[]

EventTemplate

כללים ליצירת אירועים לכל משמרת. אירוע אחד בדיוק ייכלל בכל שינוי עבור כל אירוע שצוין.

minimum_interevent_gap_minutes

int32

מספר הדקות המינימלי בין סוף אירוע אחד לבין תחילת האירוע הבא.

maximum_employee_count

int32

המספר המקסימלי של עובדים שאפשר להקצות לכל המשמרות שנוצרו באמצעות התבנית הזו.

SolutionStatus

סטטוס הפתרון (כלומר, לוח זמנים) שסופק בתגובה של פותר.

טיפוסים בני מנייה (enum)
SOLUTION_STATUS_UNSPECIFIED סטטוס התגובה לא צוין.
FEASIBLE לוח הזמנים שהוחזר הוא מעשי, אבל ייתכן שהוא לא אופטימלי.
OPTIMAL לוח הזמנים שמוחזר הוא אופטימלי.
INFEASIBLE אין לוח זמנים מעשי למגבלות הנתונות. הפותר יכול להחזיר את הערך הזה אם לא ניתן לעמוד באחת מקבוצות המשנה של המגבלות ברמת העדיפות PRIORITY_MANDATORY.
NOT_SOLVED לא נמצא לוח זמנים.
NOT_SOLVED_DEADLINE_EXCEEDED לא נמצא לוח זמנים בטווח הזמן הנתון.

SolveParameters

פרמטרים ששולטים בפתרון יחיד יכולים לפתור את הבעיה של תזמון השינוי.

שדות
time_limit

Duration

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

הערך הזה הוא לא מגבלה קשיחה והוא לא מביא בחשבון את תקורת התקשורת. זמן האחזור הצפוי לפתרון הבעיה עשוי מעט לחרוג מהערך הזה.

SolverConfig

מציינת פרמטרים נוספים לפתרון הבעיה של Shift Generation.

שדות
time_limit

Duration

משך הזמן המקסימלי שצריך להמתין לפתרון הבעיה. אם לא מגדירים את ברירת המחדל, ברירת המחדל היא דקה. בחירת מגבלת הזמן צריכה להשתנות בהתאם לגודל הבעיה. דוגמה: כשרוצים לפתור בעיה של מופע של 7 ימים עם 2 ShiftTemplates, כשבכל אחת יש כ-20 שעות התחלה אפשריות ומתקיים 2 אירועים עם כ-30 שעות התחלה אפשריות, ויומיים הנחה בשבוע, הערכים המומלצים הם: פחות מ-10 שניות לפתרונות מהירים (וסביר להניח שהם לא אופטימליים), (10 שניות, 300 שניות) לפתרונות באיכות טובה, ויותר מ-300 שניות לחיפוש מקיף. בתרחישים גדולים יותר, יכול להיות שיהיה צורך במגבלות זמן ארוכות יותר.

הערך הזה הוא לא מגבלה קשיחה והוא לא מביא בחשבון את תקורת התקשורת. זמן האחזור הצפוי לפתרון הבעיה עשוי מעט לחרוג מהערך הזה.

multi_day_schedule

bool

אם הערך הוא True, הפתרון יוצר פעולות EmployeeSchedule שכוללות כמה התאמות (למשל, כדי ליצור לוח זמנים למשך שבוע). אחרת, כל EmployeeSchedule כולל רק שינוי אחד. בלוחות זמנים של כמה ימים, שעת ההתחלה של השינוי זהה בימים שונים, ומספר ימי החופשה בלוח זמנים כזה נקבע על ידי תבניות ההשתנות. ברירת המחדל היא False.

shift_events_can_change

bool

אם True, ימי EmployeeSchedule מרובים עשויים לכלול שינויים שבהם שעת ההתחלה ושעת הסיום של האירועים שלהם משתנות בכל הימים. אחרת, לכל השינויים של EmployeeSchedule מסוים חייבים להיות אותם זמני התחלה וסיום של אותו אירוע. בכל מקרה, שעת ההתחלה ושעת הסיום זהות לכל המשמרות של לוח זמנים מרובה ימים. לכן, אם הערך של multi_day_schedule הוא False, המערכת תתעלם מהפרמטר הזה. אם מגדירים את הפרמטר הזה כ-True, זמני פתרון ארוכים יותר. ברירת המחדל היא False.

WorkStatus

האם העובד עובד או לא.

טיפוסים בני מנייה (enum)
WORK_STATUS_UNSPECIFIED סטטוס העבודה לא ידוע.
STATUS_WORK סטטוס שמייצג עובד עבודה.
STATUS_NOT_WORK סטטוס שמייצג עובד שאינו עובד.