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:50]، [10:10، 0.30]، [10:10، 11].

الحقول
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). وفي المقابل، يتم انتهاك متطلبات التغطية في حال وجود عدد أقل من target_employee_count من الموظفين الذين يعملون خلال هذه الفترة الزمنية في أي وقت من الفترة الزمنية (أو لأي من الورديات في shift_ids). لا يزال عدد الموظفين العاملين أكثر من target_employee_count يفي بهذا الشرط، ولكن أداة الحلّ تقلِّل من المبالغة في عدد الموظفين.

الحقول
start_date_time

DateTime

وقت بدء متطلبات التغطية (شامل) وفي حال ضبطها، يجب أن يكون shift_ids فارغًا.

end_date_time

DateTime

وقت انتهاء متطلّبات التغطية (غير شاملة) وفي حال ضبطها، يجب أن يكون shift_ids فارغًا.

location_id

string

يشير ذلك المصطلح إلى الموقع الجغرافي الذي يوجد فيه الموظفون. الحقل "shift_ids" غير فارغ، يجب أن يكون فارغًا.

shift_ids[]

string

وفي حال ضبطها، سيتم تطبيق متطلبات الدور والمهارة بشكلٍ فردي على كل رقم تعريف نوبة عمل في هذه القائمة. إذا كانت قيم shift_ids غير فارغة، يجب أن تكون قيم 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. يُرجى الاطّلاع على تعداد Priority للحصول على مزيد من التفاصيل.

resource_constraints[]

ResourceConstraint

يمكن إضافة أي قيود إضافية لم يتم تحديدها في scheduling_constraints هنا إلى resource_constraints. وتمثّل السمة ResourceConstraint تمثيلاً تجريديًا للحد من الموارد لدى الموظف. مستوى الأولوية التلقائي لكل من هذه القيود هو PRIORITY_MEDIUM. يُرجى الاطّلاع على تعداد Priority للحصول على مزيد من التفاصيل.

shift_requests[]

ShiftRequest

قائمة بطلبات نوبات العمل للموظف يمكن أن يكون الطلب هو تعيين أحد الموظفين أو عدم تعيينه لنوبات محددة. يمكن تمثيل أي مهام جدولة ثابتة للموظف باستخدام ShiftRequest بالأولوية PRIORITY_MANDATORY. قد يظهر رقم تعريف الوردية في طلب جدولة واحد كحد أقصى لهذا الموظف. مستوى الأولوية التلقائي لكل من هذه الطلبات هو PRIORITY_LOW. يُرجى الاطّلاع على تعداد Priority للحصول على مزيد من التفاصيل.

hourly_contract

HourlyContract

عقد يحدد معدلات العمل المنتظم والإضافي بالساعة للموظف.

EmployeeDemand

تحدِّد هذه السمة عدد الموظفين المطلوبين لتغطية الطلب في الفترة الزمنية المحدّدة التي تشمل التاريخ والوقت.

الحقول
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 صحيحة، يتم تمثيل يوم عطلة ضمنيًا بعدم وجود تغيير بدءًا من ذلك اليوم.

employee_count

int32

عدد الموظفين الذين يجب تعيينهم لهذه المجموعة من الورديات لتغطية الطلب.

ShiftWithEvents

تُحدِّد تاريخَي البدء والانتهاء بالإضافة إلى قائمة بالأحداث الثابتة للوردية التي أنشأتها أداة الحلّ.

الحقول
start_date_time

DateTime

تاريخ بدء الوردية ووقتها. ويتم تحديد هذه القيمة وصولاً إلى الدقيقة، ولا يتم تحديد الثواني أو الوحدات الأصغر.

end_date_time

DateTime

تاريخ انتهاء الوردية ووقته. ويتم تحديد هذه القيمة وصولاً إلى الدقيقة، ولا يتم تحديد الثواني أو الوحدات الأصغر.

events[]

Event

قائمة الأحداث المضمَّنة في هذا التغيير، والتي تم ربطها بدقة بـ "ShiftTemplate.Event" وبالترتيب نفسه الذي تم تحقيقها فيه. إذا تم ضبط السياسة SolverConfig.shift_events_can_change على "صحيح"، قد يختلف وقتَا بدء الأحداث وانتهائها على مستوى 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

يشير ذلك المصطلح إلى الحد الأقصى لعدد ساعات العمل التي يتم دفعها بمعدل منتظم (بدون وقت إضافي). يجب أن تكون هذه الكمية موجبة.

Priority

مستوى الأولوية لأي قيد على جدول الموظف أو متطلبات التغطية. ويشمل ذلك SchedulingConstraint وResourceConstraint وShiftRequest وCoverageRequirement. نظرًا لإمكانية وجود قيود متضاربة، فليس من الممكن دائمًا تلبية كل قيد. على هذا النحو، فإن لكل نوع من القيد أولوية (يمنحها المستخدم أو افتراضية) تخبر أداة الحلّ بالأهمية النسبية لجميع القيود المعطاة لجدول زمني كامل.

عمليات التعداد
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>

مقدار الموارد التي تستخدمها نوبات العمل. على سبيل المثال، إذا كان هذا القيد ينطبق على الحد الأدنى والأقصى لساعات العمل التي يقوم بها الموظف في أسبوع معين، فستحتوي هذه الخريطة على نوبات العمل التي تحدث في هذا الأسبوع وطول كل نوبة عمل بالساعات.

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

حالة الحلّ المقدَّمة في الردّ على أداة الحلّ

عمليات التعداد
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

أرقام تعريف Shift لطلب الجدولة.

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

حالة الحل (أي الجدول الزمني) المقدَّمة في الردّ على أداة الحلّ

عمليات التعداد
SOLUTION_STATUS_UNSPECIFIED حالة الردّ غير محدّدة.
FEASIBLE الجدول الزمني المعروض ممكن، ولكنه قد لا يكون مثاليًا.
OPTIMAL الجدول الزمني المعروض هو الأمثل.
INFEASIBLE لا يوجد جدول عملي للقيود المحددة. قد تعرض أداة الحلّ هذه القيمة في حال تعذّر استيفاء أي مجموعة فرعية من القيود ذات مستوى الأولوية PRIORITY_MANDATORY.
NOT_SOLVED لم يتم العثور على أي جدول زمني.
NOT_SOLVED_DEADLINE_EXCEEDED لم يتم العثور على أي جدول زمني خلال الحد الزمني المحدد.

SolveParameters

المَعلمات التي تتحكّم في حل واحد لمشكلة جدولة نوبات العمل

الحقول
time_limit

Duration

الحد الأقصى للوقت الذي يجب أن تقضيه أداة الحلّ في المسألة وفي حال ترك هذه السياسة بدون ضبط، سيتم ضبط القيمة التلقائية على دقيقة واحدة.

هذه القيمة ليست حدًا صارمًا ولا تأخذ في الاعتبار النفقات العامة للاتصال. قد يتجاوز وقت الاستجابة المتوقّع لحل المشكلة هذه القيمة قليلاً.

SolverConfig

تُحدِّد مَعلمات إضافية لحل مشكلة إنشاء ملفات Shift.

الحقول
time_limit

Duration

الحد الأقصى للوقت الذي يجب أن تقضيه أداة الحلّ في المسألة وفي حال ترك هذه السياسة بدون ضبط، سيتم ضبط القيمة التلقائية على دقيقة واحدة. يجب أن يعتمد اختيار حد زمني على حجم المشكلة. على سبيل المثال، عند حلّ مثيل من 7 أيام يحتوي على 2 ShiftTemplates، ولكل منها 20 مرة بدء محتمَلة تقريبًا، وعقد حدثَين بمدة بدء محتملة تبلغ 30 مرة تقريبًا، ويومان عطلة في الأسبوع، القيم المقترَحة هي: <10 ثوانٍ للحلول السريعة (وعلى الأرجح دون المستوى الأمثل) (10 ثوانٍ و300 ثانية) للحصول على حلول عالية الجودة، وأكثر من 300 مرة لطلب بحث شامل. قد تتطلب الأجهزة الافتراضية الأكبر حجمًا حدودًا زمنية أطول.

هذه القيمة ليست حدًا صارمًا ولا تأخذ في الاعتبار النفقات العامة للاتصال. قد يتجاوز وقت الاستجابة المتوقّع لحل المشكلة هذه القيمة قليلاً.

multi_day_schedule

bool

في حال كانت القيمة صحيحة، تُنشئ أداة الحلّ EmployeeSchedule تتضمّن عدة ورديات (على سبيل المثال، لإنشاء جدول زمني لمدة أسبوع). وبخلاف ذلك، تحتوي كل EmployeeSchedule على وردية واحدة فقط. تفترض الجداول الزمنية المتعددة الأيام أن وقت بدء الوردية هو نفسه عبر الأيام، ويتم تحديد عدد أيام الإجازة في هذا الجدول بواسطة نماذج الوردية. القيمة التلقائية هي "خطأ".

shift_events_can_change

bool

في حال كان هذا صحيحًا، قد تتضمّن EmployeeSchedule الممتدة لعدة أيام نوبات يختلف فيها وقت بدء الأحداث وانتهائها على مدار جميع الأيام. وبخلاف ذلك، يجب أن يتم تحديد وقت بدء الحدث وانتهائه لجميع الورديات في حدث EmployeeSchedule معيّن. وفي كلتا الحالتين، يكون لجميع التحولات في جدول زمني متعدد الأيام وقت البدء والانتهاء نفسه. وبالتالي، يتم تجاهل هذه المَعلمة إذا كانت السمة multi_day_schedule خطأ. قد يؤدّي ضبط هذه المَعلمة على "صحيح" إلى إطالة أوقات الحل. القيمة التلقائية هي "خطأ".

WorkStatus

ما إذا كان الموظف يعمل أم لا.

عمليات التعداد
WORK_STATUS_UNSPECIFIED حالة العمل غير معروفة.
STATUS_WORK الحالة التي تمثّل موظّفًا موظفًا
STATUS_NOT_WORK حالة تمثّل موظفًا غير عامل.