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:40, 11:10], [11:00, 11:30]।

ক্ষেত্র
earliest_start_time

DateTime

বিরতির প্রথম শুরুর সময় (অন্তর্ভুক্ত)। শুধুমাত্র hours এবং minutes সেট করা যেতে পারে।

latest_start_time

DateTime

বিরতির সর্বশেষ শুরুর সময় (অন্তর্ভুক্ত)। শুধুমাত্র hours এবং minutes সেট করা যেতে পারে।

duration_minutes

int32

মিনিটে বিরতির সময়কাল।

rule_increment_minutes

int32

[ঐচ্ছিক] এই বিরতির নিয়মে বিবেচনা করা যেতে পারে এমন সমস্ত বিরতির জন্য মিনিটে সময় বৃদ্ধি। সেট করা না থাকলে, duration_minutes এ ডিফল্ট।

বাজেটের প্রয়োজনীয়তা

প্রদত্ত ব্যবধানের জন্য বাজেটের প্রয়োজনীয়তা।

ক্ষেত্র
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 টাইট হয়, তাহলে ফলাফলের সময়সূচী উল্লেখযোগ্যভাবে কর্মচারী সীমাবদ্ধতা বা কভারেজ প্রয়োজনীয়তা উভয়ই লঙ্ঘন করতে পারে।

কভারেজের প্রয়োজনীয়তা

একটি কভারেজ প্রয়োজনীয়তা নির্দিষ্ট সময় উইন্ডোতে এবং একটি নির্দিষ্ট অবস্থানে ভূমিকা এবং/অথবা দক্ষতার সেটের জন্য প্রয়োজনীয় কর্মচারীর সংখ্যা নির্দিষ্ট করে। একটি নির্দিষ্ট স্থানে তারিখ সময়ের ব্যবধান ওভারল্যাপ করতে পারে না। বিকল্পভাবে, একটি সময় উইন্ডো এবং অবস্থানের পরিবর্তে শিফট আইডিগুলির একটি তালিকা প্রদান করা যেতে পারে। শুধুমাত্র যে কর্মচারীদের নির্দিষ্ট ভূমিকার জন্য নিযুক্ত করা যেতে পারে (বা নির্দিষ্ট দক্ষতার অধিকারী) তারা এই প্রয়োজনীয়তা পূরণ করতে পারে।

একটি প্রদত্ত ভূমিকা এবং/অথবা দক্ষতার জন্য, কভারেজের প্রয়োজনীয়তা পূরণ করা হয় যখন টাইম উইন্ডোতে (অথবা shift_ids এ প্রতিটি শিফটের জন্য) কমপক্ষে target_employee_count সংখ্যক কর্মচারী কাজ করে। বিপরীতে, কভারেজের প্রয়োজনীয়তা লঙ্ঘন করা হয় যদি টাইম উইন্ডোতে (অথবা 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_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 সংখ্যক কর্মচারীর প্রদত্ত দক্ষতা থাকে।

ভূমিকার প্রয়োজনীয়তা

টাইম উইন্ডোর সময় নির্দিষ্ট ভূমিকার জন্য প্রয়োজনীয় সংখ্যক কর্মচারী নিয়োগ করা হবে।

ক্ষেত্র
role_id

string

প্রয়োজনের জন্য ভূমিকা আইডি।

target_employee_count

int32

সময় উইন্ডোর সময় ভূমিকার জন্য নির্ধারিত সংখ্যক কর্মচারী।

priority

Priority

এই প্রয়োজনীয়তা সীমাবদ্ধতার জন্য অগ্রাধিকার স্তর। সমস্ত সংস্থান সীমাবদ্ধতার জন্য ডিফল্ট অগ্রাধিকার হল PRIORITY_MANDATORY

দক্ষতার প্রয়োজনীয়তা

প্রয়োজনীয় সংখ্যক কর্মচারী যারা সময় উইন্ডোতে কাজ করছেন এবং নির্দিষ্ট দক্ষতার অধিকারী।

ক্ষেত্র
skill_id

string

প্রয়োজনের জন্য স্কিল আইডি।

target_employee_count

int32

প্রদত্ত দক্ষতা সহ কাঙ্ক্ষিত সংখ্যক কর্মচারী যারা সময় উইন্ডোতে কাজ করছেন।

priority

Priority

এই প্রয়োজনীয়তা সীমাবদ্ধতার জন্য অগ্রাধিকার স্তর। সমস্ত সংস্থান সীমাবদ্ধতার জন্য ডিফল্ট অগ্রাধিকার হল PRIORITY_LOW

চাহিদা কভারেজ লঙ্ঘন

প্রদত্ত ব্যবধানের জন্য চাহিদা কভারেজ লঙ্ঘন নির্দিষ্ট করে। পুরো নির্দিষ্ট ব্যবধানে কর্মচারীর চাহিদা একই থাকে।

ক্ষেত্র
start_date_time

DateTime

চাহিদা ব্যবধানের শুরুর তারিখ এবং সময় (অন্তর্ভুক্ত)। এই মানটি মিনিট পর্যন্ত নির্দিষ্ট করা হয়েছে।

end_date_time

DateTime

চাহিদা ব্যবধানের শেষ তারিখ এবং সময় (একচেটিয়া)। এই মানটি মিনিট পর্যন্ত নির্দিষ্ট করা হয়েছে।

coverage_violation

int32

নির্দিষ্ট ব্যবধানে কভারেজ লঙ্ঘন। একটি ইতিবাচক মান নির্দেশ করে যে চাহিদা ওভারকভার করা হয়েছে, এবং একটি নেতিবাচক মান নির্দেশ করে যে চাহিদা আড়াল করা হয়েছে।

কর্মচারী

কর্মশক্তি থেকে একজন কর্মচারীকে নির্ধারিত করা হবে।

ক্ষেত্র
id

string

এই কর্মচারীকে অনন্য আইডি বরাদ্দ করা হয়েছে।

role_ids[]

string

ভূমিকা আইডি যা এই কর্মচারী সম্পাদন করতে পারেন। অন্তত একটি ভূমিকা নির্দিষ্ট করা আবশ্যক. যখন একজন কর্মচারীকে একটি শিফটে নিয়োগ করা হয়, তখন তাদের এই তালিকা থেকে একটি একক ভূমিকাতেও বরাদ্দ করা হয়। শিডিউলিং উইন্ডোর সময় কর্মচারীকে বিভিন্ন ভূমিকাতে নিয়োগ করা হতে পারে।

skill_ids[]

string

এই কর্মচারীর স্কিল আইডি আছে। এই তালিকা খালি হতে পারে. যখন একজন কর্মচারীকে একটি শিফটে নিযুক্ত করা হয়, তখন তারা নির্ধারিত শিফটের সময়কাল জুড়ে দক্ষতার প্রয়োজনীয়তাগুলি কভার করার জন্য এখানে তালিকাভুক্ত দক্ষতার যেকোনো উপসেট ব্যবহার করে।

shift_preferences[]

ShiftPreference

এই কর্মচারীর পছন্দ পরিবর্তন করুন। এখানে নির্দিষ্ট করা শিফটগুলি সেই শিফটগুলিকে প্রতিনিধিত্ব করে যা কর্মচারী শিডিউলিং উইন্ডোর সময় বরাদ্দ করা পছন্দ করবে৷ shift_preferences এ উল্লেখ করা শিফট আইডি অবশ্যই অনন্য হতে হবে। সমাধানকারী সন্তুষ্ট সমস্ত shift_preferences থেকে ShiftPreference.preference মানগুলির যোগফল সর্বাধিক করার চেষ্টা করবে।

scheduling_constraints[]

SchedulingConstraint

এই কর্মচারীর জন্য সময় নির্ধারণের সীমাবদ্ধতার তালিকা। এই সীমাবদ্ধতার প্রতিটির জন্য ডিফল্ট অগ্রাধিকার স্তর হল PRIORITY_MEDIUM ৷ আরো বিস্তারিত জানার জন্য Priority enum দেখুন.

resource_constraints[]

ResourceConstraint

scheduling_constraints এ নির্দিষ্ট করা না থাকা কোনো অতিরিক্ত সময় নির্ধারণের সীমাবদ্ধতা এখানে resource_constraints এ যোগ করা যেতে পারে। ResourceConstraint হল একজন কর্মচারীর জন্য সম্পদ সীমিত করার জন্য আরও বিমূর্ত উপস্থাপনা। এই সীমাবদ্ধতার প্রতিটির জন্য ডিফল্ট অগ্রাধিকার স্তর হল PRIORITY_MEDIUM ৷ আরো বিস্তারিত জানার জন্য Priority enum দেখুন.

shift_requests[]

ShiftRequest

কর্মচারীর জন্য শিফট অনুরোধের তালিকা। অনুরোধটি হতে পারে একজন কর্মচারীকে নিয়োগের জন্য বা নির্দিষ্ট শিফটে বরাদ্দ না করার জন্য। কর্মচারীর জন্য যে কোনো নির্দিষ্ট সময়সূচী নিয়োগ অগ্রাধিকার PRIORITY_MANDATORY সহ একটি ShiftRequest এর মাধ্যমে উপস্থাপন করা যেতে পারে। এই কর্মচারীর জন্য সর্বাধিক একটি সময়সূচী অনুরোধে একটি শিফট আইডি উপস্থিত হতে পারে। এই অনুরোধগুলির প্রতিটির জন্য ডিফল্ট অগ্রাধিকার স্তর হল PRIORITY_LOW ৷ আরো বিস্তারিত জানার জন্য Priority enum দেখুন.

hourly_contract

HourlyContract

চুক্তি যা কর্মচারীর জন্য নিয়মিত এবং ওভারটাইম ঘন্টার হার নির্দিষ্ট করে।

কর্মচারীর চাহিদা

প্রদত্ত তারিখ সময়ের ব্যবধানে চাহিদা পূরণের জন্য প্রয়োজনীয় কর্মচারীর সংখ্যা নির্দিষ্ট করে৷

ক্ষেত্র
start_date_time

DateTime

প্রদত্ত চাহিদার জন্য সময়ের ব্যবধানের শুরু (অন্তর্ভুক্ত)। এই মানগুলি মিনিটে পড়া হয়; সেকেন্ড এবং সমস্ত ছোট ইউনিট উপেক্ষা করা হয়।

end_date_time

DateTime

প্রদত্ত চাহিদার জন্য সময়ের ব্যবধানের সমাপ্তি (একচেটিয়া)। এই মানগুলি মিনিটে পড়া হয়; সেকেন্ড এবং সমস্ত ছোট ইউনিট উপেক্ষা করা হয়।

employee_count

int32

এই ব্যবধানের চাহিদা পূরণের জন্য প্রয়োজনীয় কর্মচারীর সংখ্যা।

কর্মচারী শিডিউল

একটি একক 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 s. SolverConfig.shift_events_can_change সত্য হলে, এই সময়সূচীর সমস্ত ShiftWithEvents জুড়ে ইভেন্টের শুরু এবং শেষের সময় পরিবর্তিত হতে পারে।

ঘটনা

সমাধানকারী দ্বারা উত্পন্ন একটি শিফটে একটি নির্দিষ্ট ইভেন্টের শুরু এবং শেষের তারিখ নির্দিষ্ট করে৷

ক্ষেত্র
event_template_id

string

এই ইভেন্ট তৈরি করতে ব্যবহৃত টেমপ্লেটের আইডি।

start_date_time

DateTime

অনুষ্ঠান শুরুর তারিখ এবং সময়। এই মানটি মিনিটে নির্দিষ্ট করা হয়েছে; সেকেন্ড এবং ছোট ইউনিট দেওয়া হয় না।

end_date_time

DateTime

ইভেন্টের শেষ তারিখ এবং সময়। এই মানটি মিনিটে নির্দিষ্ট করা হয়েছে; সেকেন্ড এবং ছোট ইউনিট দেওয়া হয় না।

ইভেন্ট টেমপ্লেট

একটি শিফটের সময় ঘটে এমন একটি একক ইভেন্ট তৈরি করার নিয়ম নির্দিষ্ট করে টেমপ্লেট৷ একটি ইভেন্ট একটি মিটিং, বিরতি, মধ্যাহ্নভোজ ইত্যাদি প্রতিনিধিত্ব করতে পারে।

ক্ষেত্র
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 মিনিট পরে ঘটতে পারে .

আওয়ারলি কন্ট্রাক্ট

একজন কর্মচারীর জন্য ক্ষতিপূরণ নির্ধারণ করতে একটি বেস ঘন্টায় হার, হারের পার্থক্য এবং ওভারটাইম গুণক নির্দিষ্ট করে। বিভিন্ন জায়গায় নোট প্রবিধানের জন্য ওভারটাইম ক্ষতিপূরণের আলাদা গণনার প্রয়োজন হতে পারে। সমাধানকারী ওভারটাইম ক্ষতিপূরণ আনুমানিক হয় মোট খরচের একটি প্রক্সি কমাতে বা একটি বাজেট পূরণ করতে (দেখুন BudgetRequirement )। বেতন গণনা করার একটি হাতিয়ার হিসেবে এটির উদ্দেশ্য নয়।

ক্ষেত্র
base_hourly_rate

double

ওভারটাইম ছাড়া এক ঘন্টা কাজ করার জন্য ক্ষতিপূরণ। যদি একাধিক হার কর্মচারীর জন্য প্রযোজ্য হয়, তাহলে এই বেস ঘন্টায় হারের তুলনায় হারের পার্থক্য প্রয়োগ করা হয়। উপরন্তু, যদি একাধিক হার থাকে, তাহলে বেস ঘন্টার হার এই হারগুলির সর্বনিম্ন হওয়া উচিত।

hourly_rate_shift_differentials

map<string, double>

base_hourly_rate উপরে প্রদত্ত ঘণ্টার হারের পার্থক্য। উদাহরণস্বরূপ, যদি বেস ঘন্টায় হার হয় $30/ঘন্টা, "shift_1" কে $40/hr হারে এবং "shift_2" কে $45/hr হারে প্রদান করা হয়, তাহলে প্রোটো উপস্থাপনা হল: 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

যে সমস্ত সময়ের জন্য ওভারটাইম গণনা করতে হবে তার একটি তালিকা। এই সময়সীমা ওভারল্যাপ করা উচিত নয়.

ওভারটাইম পিরিয়ড

একটি নির্দিষ্ট এবং নিয়মিত পুনরাবৃত্ত সময়কাল (সাধারণত 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 । যেহেতু পরস্পরবিরোধী সীমাবদ্ধতা থাকতে পারে, তাই প্রতিটি সীমাবদ্ধতা পূরণ করা সবসময় সম্ভব হয় না। যেমন, প্রতিটি ধরনের সীমাবদ্ধতার একটি অগ্রাধিকার রয়েছে (ব্যবহারকারী বা ডিফল্ট দ্বারা প্রদত্ত) যা সমাধানকারীকে একটি সম্পূর্ণ সময়সূচীতে দেওয়া সমস্ত সীমাবদ্ধতার আপেক্ষিক গুরুত্ব সম্পর্কে অবহিত করে।

Enums
PRIORITY_UNSPECIFIED অজানা অগ্রাধিকার স্তর।
PRIORITY_LOW সর্বনিম্ন অগ্রাধিকার স্তর। এই অগ্রাধিকারের সাথে সীমাবদ্ধতাগুলি অন্যান্য সীমাবদ্ধতার চেয়ে কম গুরুত্বপূর্ণ। একটি সম্ভাব্য সমাধান খুঁজে না পাওয়া গেলে তারাই প্রথম লঙ্ঘনের জন্য বিবেচিত হবে।
PRIORITY_MEDIUM অগ্রাধিকার স্তরের মাধ্যম। এই অগ্রাধিকারের সীমাবদ্ধতাগুলি PRIORITY_LOW অগ্রাধিকারের সীমাবদ্ধতার চেয়ে বেশি গুরুত্বপূর্ণ কিন্তু PRIORITY_HIGH অগ্রাধিকারের সীমাবদ্ধতার চেয়ে কম গুরুত্বপূর্ণ৷ PRIORITY_LOW অগ্রাধিকার সহ সমস্ত সীমাবদ্ধতা শিথিল করার পরে যদি একটি সম্ভাব্য সমাধান খুঁজে না পাওয়া যায়, তাহলে লঙ্ঘনের জন্য পরবর্তী PRIORITY_MEDIUM অগ্রাধিকারের সীমাবদ্ধতাগুলি বিবেচনা করা হয়৷
PRIORITY_HIGH সর্বোচ্চ অগ্রাধিকার স্তর। এই অগ্রাধিকার স্তরের সাথে সীমাবদ্ধতাগুলি সবচেয়ে গুরুত্বপূর্ণ। নিম্ন অগ্রাধিকার স্তরের সীমাবদ্ধতাগুলি শিথিল করার পরে যদি একটি সম্ভাব্য সমাধান খুঁজে না পাওয়া যায় তবে তারা লঙ্ঘনের জন্য সর্বশেষ বিবেচনা করা হবে।
PRIORITY_MANDATORY অগ্রাধিকার স্তর যা এমন কিছুর প্রতিনিধিত্ব করে যা সমাধানকারী দ্বারা লঙ্ঘন করা যায় না। যদি সমাধানকারী SolutionStatus.INFEASIBLE ফেরত দেয়, তবে এটি অনেক বেশি PRIORITY_MANDATORY সীমাবদ্ধতার কারণে হতে পারে৷

সম্পদের সীমাবদ্ধতা

একটি সাধারণ সীমাবদ্ধতা যা একজন কর্মচারী দ্বারা ব্যবহৃত একটি নির্দিষ্ট "সম্পদ" এর পরিমাণকে সীমিত করে। এটি আরও নির্দিষ্ট SchedulingConstraint একটি বিমূর্ত সংস্করণ যা ব্যবহারকারীর জন্য আরও নমনীয়। অনেক সময়সূচী সীমাবদ্ধতা যা SchedulingConstraint.type এ নির্দিষ্ট করা যায় না এই বার্তাটি ব্যবহার করে নির্দিষ্ট করা যেতে পারে।

ক্ষেত্র
priority

Priority

এই সম্পদ সীমাবদ্ধতা অগ্রাধিকার স্তর. সমস্ত সংস্থান সীমাবদ্ধতার জন্য ডিফল্ট অগ্রাধিকার হল PRIORITY_MEDIUM

resource_usages

map<string, double>

শিফট দ্বারা ব্যবহৃত সম্পদের পরিমাণ। উদাহরণস্বরূপ, যদি এই সীমাবদ্ধতাটি একটি নির্দিষ্ট সপ্তাহে একজন কর্মচারীর দ্বারা কাজ করা সর্বনিম্ন এবং সর্বাধিক ঘন্টার ক্ষেত্রে প্রযোজ্য হয়, তাহলে এই মানচিত্রে সেই সপ্তাহে হওয়া শিফট এবং ঘন্টায় প্রতিটি শিফটের দৈর্ঘ্য থাকবে।

minimum_resource_usage

double

একটি সম্পদ সীমাবদ্ধতা সন্তুষ্ট করার জন্য ন্যূনতম সম্পদ ব্যবহার।

maximum_resource_usage

double

একটি সম্পদ সীমাবদ্ধতা সন্তুষ্ট করার জন্য সর্বাধিক সম্পদ ব্যবহার।

সময়সূচী সীমাবদ্ধতা

একটি নির্দিষ্ট কর্মীর জন্য নির্দিষ্ট সময় নির্ধারণের সীমাবদ্ধতা। নির্দিষ্ট করা সীমাবদ্ধতা শুধুমাত্র প্রদত্ত ব্যবধানে প্রয়োগ করা হয় [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 ]-এ সম্পূর্ণরূপে অন্তর্ভুক্ত করা প্রতিটি জোড়া শিফটের ক্ষেত্রে এই সীমাবদ্ধতা প্রযোজ্য।

শিফট

একটি শিফট একটি নির্দিষ্ট সময় উইন্ডো নির্দিষ্ট করে যেখানে কর্মচারীরা কাজ করতে পারে।

ক্ষেত্র
id

string

এই শিফটে অনন্য আইডি বরাদ্দ করা হয়েছে।

location_id

string

লোকেশন আইডি যেখানে এই শিফটে কাজ করা হয়। এই খালি হতে পারে.

start_date_time

DateTime

শিফটের শুরুর সময় (অন্তর্ভুক্ত)।

end_date_time

DateTime

শিফটের শেষ সময় (এক্সক্লুসিভ)। বর্তমানে, সমাধানকারী শুধুমাত্র 24 ঘন্টার কম দৈর্ঘ্যের পরিবর্তনের জন্য অনুমতি দেয়।

break_rules[]

BreakRule

শিফটের সময় ঘটে যাওয়া বিরতির নিয়মগুলির একটি তালিকা৷ এই শিফটে কর্মরত কর্মচারীদের প্রতি break_rule এ একটি বিরতি দেওয়া হয়, যে সময়ে তারা যে ভূমিকা পালন করছে তার চাহিদা পূরণ করে না। প্রতিটি BreakRule টাইম উইন্ডো অবশ্যই এই শিফটের টাইম উইন্ডোর মধ্যে সম্পূর্ণরূপে অন্তর্ভুক্ত করতে হবে।

শিফট অ্যাসাইনমেন্ট

শিফট-রোল অ্যাসাইনমেন্টের জন্য একজন কর্মচারী।

ক্ষেত্র
employee_id

string

কর্মচারী আইডি বরাদ্দ করা হচ্ছে।

shift_id

string

শিফট আইডি কর্মচারীকে বরাদ্দ করা হয়েছে।

role_id

string

শিফটের জন্য কর্মচারীকে যে রোল আইডি দেওয়া হয়েছে।

breaks[]

Break

এই শিফট অ্যাসাইনমেন্টের জন্য বিরতির তালিকা।

শিফট জেনারেশনসলিউশন স্ট্যাটাস

সমাধানকারীর প্রতিক্রিয়ায় দেওয়া সমাধানের স্থিতি।

Enums
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED প্রতিক্রিয়া জন্য অনির্দিষ্ট অবস্থা.
SHIFT_GENERATION_SOLVED সমাধানকারী প্রদত্ত সময়সীমার মধ্যে একটি সমাধান খুঁজে পেয়েছে।
SHIFT_GENERATION_NOT_SOLVED একটি সমস্যা সমাধানকারীকে শিফট জেনারেট করতে বাধা দেয়।
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED প্রদত্ত সময়ের মধ্যে চাহিদা মেটাতে শিফট তৈরি করা যায়নি।

শিফট পছন্দ

একটি নির্দিষ্ট শিফট আইডির জন্য একটি সংখ্যাগত পছন্দ।

ক্ষেত্র
shift_id

string

শিফট আইডি যার জন্য পছন্দ নির্দিষ্ট করা আছে।

preference

int32

পছন্দের বৃহত্তর মানগুলি আরও পছন্দসই পরিবর্তনকে নির্দেশ করে৷

ShiftRequest

নির্দিষ্ট শিফটে বরাদ্দ করা বা না করার জন্য একজন কর্মচারীর অনুরোধ।

ক্ষেত্র
priority

Priority

এই সময়সূচী অনুরোধের অগ্রাধিকার স্তর. সমস্ত সময় নির্ধারণের অনুরোধের জন্য ডিফল্ট অগ্রাধিকার হল PRIORITY_LOW

shift_ids[]

string

সময়সূচী অনুরোধের শিফট আইডি।

type

WorkStatus

অনুরোধের ধরন, যেমন, শিফটের সেটে অনুরোধটি বরাদ্দ করা হবে বা না করা হবে।

শিফট টেমপ্লেট

টেমপ্লেট শিফট জেনারেট করার নিয়ম উল্লেখ করে। একটি শিফট হল কাজের একটি ইউনিট যা একটি শুরুর সময়, শেষ সময় নির্দিষ্ট করে এবং এতে ইভেন্ট থাকতে পারে (যেমন লাঞ্চ, বিরতি, ইত্যাদি)। প্রতিক্রিয়ায় একটি নির্দিষ্ট তারিখে একটি স্থানান্তর বরাদ্দ করা হবে।

ক্ষেত্র
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

এই টেমপ্লেট দ্বারা উত্পন্ন সমস্ত শিফটে সর্বাধিক সংখ্যক কর্মচারী নিয়োগ করা যেতে পারে৷

সমাধান অবস্থা

সমাধান (অর্থাৎ, একটি সময়সূচী) স্থিতি একটি সমাধানকারীর প্রতিক্রিয়ায় প্রদত্ত।

Enums
SOLUTION_STATUS_UNSPECIFIED প্রতিক্রিয়া জন্য অনির্দিষ্ট অবস্থা.
FEASIBLE প্রত্যাবর্তিত সময়সূচী সম্ভাব্য, কিন্তু সর্বোত্তম নাও হতে পারে।
OPTIMAL প্রত্যাবর্তিত সময়সূচী সর্বোত্তম.
INFEASIBLE প্রদত্ত সীমাবদ্ধতার জন্য কোন সম্ভাব্য সময়সূচী বিদ্যমান নেই। অগ্রাধিকার স্তর PRIORITY_MANDATORY সহ সীমাবদ্ধতার কোনো উপসেট সন্তুষ্ট না হলে সমাধানকারী এই মানটি ফেরত দিতে পারে৷
NOT_SOLVED কোনো শিডিউল পাওয়া যায়নি।
NOT_SOLVED_DEADLINE_EXCEEDED প্রদত্ত সময়সীমার মধ্যে কোন সময়সূচী পাওয়া যায়নি।

সমাধান প্যারামিটার

পরামিতি যা শিফট শিডিউলিং সমস্যার একটি একক সমাধান নিয়ন্ত্রণ করে।

ক্ষেত্র
time_limit

Duration

সমস্যার সমাধানকারীর সর্বোচ্চ সময় ব্যয় করা উচিত। সেট না থাকলে, ডিফল্ট 1 মিনিট।

এই মানটি একটি কঠিন সীমা নয় এবং এটি যোগাযোগের ওভারহেডের জন্য অ্যাকাউন্ট করে না। সমস্যা সমাধানের প্রত্যাশিত বিলম্ব এই মানটিকে সামান্য অতিক্রম করতে পারে।

SolverConfig

শিফট জেনারেশন সমস্যা সমাধানের জন্য অতিরিক্ত প্যারামিটার নির্দিষ্ট করে।

ক্ষেত্র
time_limit

Duration

সমস্যার সমাধানকারীর সর্বোচ্চ সময় ব্যয় করা উচিত। সেট না থাকলে, ডিফল্ট 1 মিনিট। একটি সময়সীমার পছন্দ সমস্যার আকারের উপর নির্ভর করে। একটি উদাহরণ দেওয়ার জন্য, 2টি ShiftTemplates দিয়ে 7-দিনের উদাহরণ সমাধান করার সময়, প্রতিটিতে ~20 সম্ভাব্য শুরুর সময় এবং ~30 সম্ভাব্য শুরুর সময় সহ 2টি ইভেন্ট রাখা এবং প্রতি সপ্তাহে দুই দিন ছুটি, প্রস্তাবিত মানগুলি হল: দ্রুত সমাধানের জন্য <10s (এবং সম্ভবত সাবঅপ্টিমাল), ভাল মানের সমাধানের জন্য (10s, 300s), এবং একটি সম্পূর্ণ অনুসন্ধানের জন্য >300s। বড় দৃষ্টান্তগুলির জন্য দীর্ঘ সময়ের সীমার প্রয়োজন হতে পারে।

এই মানটি একটি কঠিন সীমা নয় এবং এটি যোগাযোগের ওভারহেডের জন্য অ্যাকাউন্ট করে না। সমস্যা সমাধানের প্রত্যাশিত বিলম্ব এই মানটিকে সামান্য অতিক্রম করতে পারে।

multi_day_schedule

bool

সত্য হলে, সমাধানকারী EmployeeSchedule তৈরি করে যার মধ্যে বেশ কিছু শিফট অন্তর্ভুক্ত থাকে (যেমন, সপ্তাহব্যাপী সময়সূচী তৈরি করতে)। অন্যথায়, প্রতিটি EmployeeSchedule ঠিক একটি শিফট অন্তর্ভুক্ত থাকে। বহু-দিনের সময়সূচী অনুমান করে যে শিফটের শুরুর সময় দিন জুড়ে একই, এবং এই ধরনের সময়সূচীতে কত দিন ছুটি থাকে তা শিফট টেমপ্লেট দ্বারা নির্ধারিত হয়। ডিফল্ট মিথ্যা.

shift_events_can_change

bool

সত্য হলে, বহু-দিনের EmployeeSchedule এমন শিফট অন্তর্ভুক্ত থাকতে পারে যার জন্য তাদের ইভেন্টের শুরু এবং শেষের সময় সমস্ত দিন জুড়ে পরিবর্তিত হয়। অন্যথায়, একটি নির্দিষ্ট EmployeeSchedule সমস্ত শিফটে একই ইভেন্টের শুরু এবং শেষের সময় থাকতে হবে। উভয় ক্ষেত্রেই, বহু-দিনের সময়সূচীর সমস্ত শিফটের শুরু এবং শেষের সময় একই থাকে। multi_day_schedule মিথ্যা হলে এই প্যারামিটারটি উপেক্ষা করা হয়। এই প্যারামিটারটিকে সত্য হিসাবে সেট করার ফলে সমাধানের সময় দীর্ঘ হতে পারে। ডিফল্ট মিথ্যা.

কাজের অবস্থা

একজন কর্মচারী কাজ করছে কি না।

Enums
WORK_STATUS_UNSPECIFIED অজানা কাজের অবস্থা।
STATUS_WORK কর্মরত কর্মচারীর প্রতিনিধিত্বকারী অবস্থা।
STATUS_NOT_WORK একজন অ-কর্মরত কর্মচারীর প্রতিনিধিত্বকারী অবস্থা।