Method: scheduling.solveShiftScheduling

প্রদত্ত SolveShiftSchedulingRequest থেকে একটি স্থির শিফট শিডিউলিং সমস্যা সমাধান করে যাতে কর্মচারীদের শিফ্টগুলিতে নিয়োগ করা হয় যাতে কর্মচারীদের সময়সূচী পছন্দগুলি সর্বাধিক করা হয় এবং সময়সূচী সীমাবদ্ধতা লঙ্ঘন কম করা হয়।

HTTP অনুরোধ

POST https://optimization.googleapis.com/v1/scheduling:solveShiftScheduling

URL gRPC ট্রান্সকোডিং সিনট্যাক্স ব্যবহার করে।

শরীরের অনুরোধ

অনুরোধের অংশে নিম্নলিখিত কাঠামো সহ ডেটা রয়েছে:

JSON প্রতিনিধিত্ব
{
  "requestId": string,
  "solveParameters": {
    object (SolveParameters)
  },
  "employees": [
    {
      object (Employee)
    }
  ],
  "shifts": [
    {
      object (Shift)
    }
  ],
  "coverageRequirements": [
    {
      object (CoverageRequirement)
    }
  ],
  "roleIds": [
    string
  ],
  "skillIds": [
    string
  ],
  "locationIds": [
    string
  ],
  "budgetRequirements": [
    {
      object (BudgetRequirement)
    }
  ],
  "assignmentsHint": [
    {
      object (ShiftAssignment)
    }
  ]
}
ক্ষেত্র
requestId

string

সমস্যা বা অনুরোধ আইডি.

solveParameters

object ( SolveParameters )

সমস্যার একটি একক সমাধান নিয়ন্ত্রণ করার পরামিতি।

employees[]

object ( Employee )

সমস্ত উপলব্ধ কর্মচারী নির্ধারিত হবে.

shifts[]

object ( Shift )

সময়সূচী গঠনের জন্য সমস্ত পরিবর্তন।

coverageRequirements[]

object ( CoverageRequirement )

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

roleIds[]

string

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

skillIds[]

string

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

locationIds[]

string

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

budgetRequirements[]

object ( BudgetRequirement )

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

assignmentsHint[]

object ( ShiftAssignment )

সময়সূচী সমস্যায় একটি অস্থায়ী সমাধান (ওরফে সমাধান ইঙ্গিত) হিসাবে ব্যবহার করার জন্য অ্যাসাইনমেন্টগুলি স্থানান্তর করুন। অ্যাসাইনমেন্টের ইঙ্গিতগুলি উপেক্ষা করা হয় যদি অ্যাসাইনমেন্টটি অ-অর্পণযোগ্য স্থানান্তর বা সময়সূচীর অনুরোধের বিরোধিতা করে।

প্রতিক্রিয়া শরীর

কর্মশক্তি সময়সূচী API-এর জন্য প্রতিক্রিয়া। প্রতিটি প্রতিক্রিয়ার জন্য, shiftAssignments খালি থাকবে যদি ফেরত দেওয়া solutionStatus NOT_SOLVED_DEADLINE_EXCEEDED বা INFEASIBLE হয়। যদি রিটার্ন করা solutionStatus OPTIMAL বা FEASIBLE , তাহলে একটি বৈধ শিফট অ্যাসাইনমেন্ট shiftAssignments এ ফেরত দেওয়া হয়। একটি বৈধ শিফট অ্যাসাইনমেন্টের জন্য, নিম্নলিখিত বৈশিষ্ট্যগুলি ধারণ করে:

  1. অনুরোধে প্রদত্ত কর্মচারীদের সেটে প্রতিটি কর্মচারী আইডি থাকে।
  2. কর্মচারীকে বরাদ্দ করা প্রতিটি রোল আইডি প্রদত্ত কর্মচারীর জন্য রোল আইডিগুলির সেটে থাকে৷
  3. অনুরোধে প্রদত্ত শিফটের সেটে প্রতিটি শিফট আইডি থাকে।
  4. প্রতিটি শিফট আইডি প্রদত্ত কর্মচারীর জন্য অনির্ধারণযোগ্য শিফট আইডিগুলির একটি নয়৷
  5. একজন কর্মচারীকে কখনই দুটি ওভারল্যাপিং শিফটে নিয়োগ করা হবে না।
  6. প্রদত্ত সময়সূচীর জন্য, অগ্রাধিকার স্তরের PRIORITY_MANDATORY সহ কোনও বাধা বা অনুরোধ লঙ্ঘন করা হয়নি৷

সফল হলে, প্রতিক্রিয়া বডিতে নিম্নলিখিত কাঠামোর সাথে ডেটা থাকে:

JSON প্রতিনিধিত্ব
{
  "requestId": string,
  "solutionStatus": enum (SolutionStatus),
  "shiftAssignments": [
    {
      object (ShiftAssignment)
    }
  ],
  "statusMessage": string
}
ক্ষেত্র
requestId

string

অনুরোধের আইডি যেটির সাথে এই প্রতিক্রিয়া যুক্ত।

solutionStatus

enum ( SolutionStatus )

ফিরে আসা সমাধানের অবস্থা। যদি সমাধানটি সম্ভাব্য বা অনুকূল না হয় তবে এই প্রোটোর অন্যান্য ক্ষেত্রগুলি খালি হতে পারে৷ যদি স্ট্যাটাসটি NOT_SOLVED_DEADLINE_EXCEEDED হয়, তাহলে একটি সম্ভাব্য সমাধান খুঁজে না পেয়ে বা একটি সম্ভাব্য সমাধান বিদ্যমান আছে কিনা তা নির্ধারণ না করেই সময়সীমা পৌঁছে গেছে। যদি অগ্রাধিকার স্তরের বাধ্যতামূলক সীমাবদ্ধতাগুলি সমস্ত সন্তুষ্ট না করা যায় তবে অনুরোধগুলি অকার্যকর হতে পারে৷

shiftAssignments[]

object ( ShiftAssignment )

সমস্ত অ্যাসাইনমেন্টের তালিকা। প্রতিটি ShiftAssignment একজন কর্মচারীকে নির্দিষ্ট করে, তারা যে শিফটের জন্য বরাদ্দ করা হয়েছে এবং সেই শিফটের জন্য তাদের যে ভূমিকা অর্পণ করা হয়েছে।

statusMessage

string

যদি solutionStatus সর্বোত্তম না হয়, এই ক্ষেত্রে সমাধানকারী সম্পর্কে অতিরিক্ত তথ্য থাকতে পারে।

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

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

JSON প্রতিনিধিত্ব
{
  "timeLimit": string
}
ক্ষেত্র
timeLimit

string ( Duration format)

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

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

নয়টি পর্যন্ত ভগ্নাংশের সংখ্যা সহ সেকেন্ডে একটি সময়কাল, ' s ' দিয়ে শেষ হয়৷ উদাহরণ: "3.5s"

কর্মচারী

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

JSON প্রতিনিধিত্ব
{
  "id": string,
  "roleIds": [
    string
  ],
  "skillIds": [
    string
  ],
  "shiftPreferences": [
    {
      object (ShiftPreference)
    }
  ],
  "schedulingConstraints": [
    {
      object (SchedulingConstraint)
    }
  ],
  "resourceConstraints": [
    {
      object (ResourceConstraint)
    }
  ],
  "shiftRequests": [
    {
      object (ShiftRequest)
    }
  ],
  "hourlyContract": {
    object (HourlyContract)
  }
}
ক্ষেত্র
id

string

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

roleIds[]

string

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

skillIds[]

string

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

shiftPreferences[]

object ( ShiftPreference )

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

schedulingConstraints[]

object ( SchedulingConstraint )

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

resourceConstraints[]

object ( ResourceConstraint )

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

shiftRequests[]

object ( ShiftRequest )

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

hourlyContract

object ( HourlyContract )

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

শিফট পছন্দ

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

JSON প্রতিনিধিত্ব
{
  "shiftId": string,
  "preference": integer
}
ক্ষেত্র
shiftId

string

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

preference

integer

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

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

একটি নির্দিষ্ট কর্মীর জন্য নির্দিষ্ট সময় নির্ধারণের সীমাবদ্ধতা। নির্দিষ্ট করা সীমাবদ্ধতা শুধুমাত্র প্রদত্ত ব্যবধানে প্রয়োগ করা হয় [startDateTime, endDateTime)

JSON প্রতিনিধিত্ব
{
  "priority": enum (Priority),
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },

  // Union field type can be only one of the following:
  "minimumMinutes": integer,
  "maximumMinutes": integer,
  "minimumConsecutiveWorkDays": integer,
  "maximumConsecutiveWorkDays": integer,
  "minimumShiftCount": integer,
  "maximumShiftCount": integer,
  "minimumRestMinutes": integer
  // End of list of possible types for union field type.
}
ক্ষেত্র
priority

enum ( Priority )

এই সময়সূচী সীমাবদ্ধতার জন্য অগ্রাধিকার স্তর। সমস্ত সময় নির্ধারণের সীমাবদ্ধতার জন্য ডিফল্ট অগ্রাধিকার হল PRIORITY_MEDIUM

startDateTime

object ( DateTime )

যখন এই সময়সূচী সীমাবদ্ধতা প্রযোজ্য হবে তার জন্য শুরুর সময় (অন্তর্ভুক্ত)।

endDateTime

object ( DateTime )

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

ইউনিয়ন ক্ষেত্রের type । সীমাবদ্ধতার ধরন নির্দিষ্ট করা হচ্ছে। প্রতিটি সীমাবদ্ধতা শুধুমাত্র উপরে নির্দিষ্ট সময় উইন্ডোর মধ্যে প্রয়োগ করা হয়। type নিম্নলিখিতগুলির মধ্যে একটি হতে পারে:
minimumMinutes

integer

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

maximumMinutes

integer

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

minimumConsecutiveWorkDays

integer

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

maximumConsecutiveWorkDays

integer

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

minimumShiftCount

integer

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

maximumShiftCount

integer

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

minimumRestMinutes

integer

ন্যূনতম সংখ্যক মিনিট কর্মচারীকে অন্য শিফটে বরাদ্দ করার আগে একটি শিফট শেষ হওয়ার পরে বিশ্রাম নিতে হবে। এই সীমাবদ্ধতা প্রতিটি জোড়া শিফটের ক্ষেত্রে প্রযোজ্য যা সম্পূর্ণরূপে [ startDateTime , endDateTime ]-এ অন্তর্ভুক্ত।

অগ্রাধিকার

একজন কর্মচারীর সময়সূচী বা কভারেজ প্রয়োজনীয়তার উপর কোন বাধার জন্য অগ্রাধিকার স্তর। এর মধ্যে রয়েছে 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 এ নির্দিষ্ট করা যায় না এই বার্তাটি ব্যবহার করে নির্দিষ্ট করা যেতে পারে।

JSON প্রতিনিধিত্ব
{
  "priority": enum (Priority),
  "resourceUsages": {
    string: number,
    ...
  },
  "minimumResourceUsage": number,
  "maximumResourceUsage": number
}
ক্ষেত্র
priority

enum ( Priority )

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

resourceUsages

map (key: string, value: number)

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

"key": value জোড়া। উদাহরণ: { "name": "wrench", "mass": "1.3kg", "count": "3" }

minimumResourceUsage

number

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

maximumResourceUsage

number

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

ShiftRequest

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

JSON প্রতিনিধিত্ব
{
  "priority": enum (Priority),
  "shiftIds": [
    string
  ],
  "type": enum (WorkStatus)
}
ক্ষেত্র
priority

enum ( Priority )

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

shiftIds[]

string

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

type

enum ( WorkStatus )

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

কাজের অবস্থা

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

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

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

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

JSON প্রতিনিধিত্ব
{
  "baseHourlyRate": number,
  "hourlyRateShiftDifferentials": {
    string: number,
    ...
  },
  "overtimePeriods": [
    {
      object (OvertimePeriod)
    }
  ]
}
ক্ষেত্র
baseHourlyRate

number

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

hourlyRateShiftDifferentials

map (key: string, value: number)

ঘণ্টার হারের পার্থক্য, baseHourlyRate উপরে দেওয়া হয়। উদাহরণস্বরূপ, যদি বেস আওয়ারলি রেট $30/ঘন্টা হয়, "shift_1" কে $40/hr হারে এবং "shift_2" কে $45/hr হারে প্রদান করা হয়, তাহলে প্রোটো উপস্থাপনা হল: baseHourlyRate: 30 hourlyRateShiftDifferentials {key: "shift_1" value: 10} hourlyRateShiftDifferentials {key: "shift_2" value: 15}

"key": value জোড়া। উদাহরণ: { "name": "wrench", "mass": "1.3kg", "count": "3" }

overtimePeriods[]

object ( OvertimePeriod )

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

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

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

JSON প্রতিনিধিত্ব
{
  "overtimeMultiplier": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "maximumRegularHours": number
}
ক্ষেত্র
overtimeMultiplier

number

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

startDateTime

object ( DateTime )

ওভারটাইম সময়ের জন্য শুরু সময়। যদি এই সময় একটি শিফট ওভারল্যাপ হয়, তাহলে এই ধরনের শিফটের ঘন্টা startDateTime থেকে গণনা করা হয়।

endDateTime

object ( DateTime )

ওভারটাইম সময়ের জন্য শেষ সময়। যদি এই সময় একটি শিফট ওভারল্যাপ হয়, তাহলে এই ধরনের একটি শিফটের ঘন্টা endDateTime পর্যন্ত গণনা করা হয়।

maximumRegularHours

number

নিয়মিত (অ-ওভারটাইম) হারে প্রদান করা কর্মঘন্টার সর্বাধিক সংখ্যা। এই পরিমাণ ইতিবাচক হতে হবে।

শিফট

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

JSON প্রতিনিধিত্ব
{
  "id": string,
  "locationId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "breakRules": [
    {
      object (BreakRule)
    }
  ]
}
ক্ষেত্র
id

string

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

locationId

string

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

startDateTime

object ( DateTime )

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

endDateTime

object ( DateTime )

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

breakRules[]

object ( BreakRule )

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

BreakRule

একটি নিয়ম যা নির্ধারণ করে কখন বিরতি একটি শিফট এবং এর সময়কালের মধ্যে শুরু হতে পারে। বিবেচিত সমস্ত সম্ভাব্য বিরতির তালিকা ruleIncrementMinutes বৃদ্ধিতে নির্ধারিত হয়। উদাহরণস্বরূপ, যদি একটি বিরতির নিয়ম একটি 30-মিনিটের বিরতির মডেলিং হয় যা 10:00 থেকে 11:00 এর মধ্যে শুরু হতে পারে এবং নিয়ম বৃদ্ধি 20 মিনিটের হয়, তাহলে বিবেচিত বিরতির তালিকা হল: [10:00, 10 :30], [10:20, 10:50], [10:40, 11:10], [11:00, 11:30]।

JSON প্রতিনিধিত্ব
{
  "earliestStartTime": {
    object (DateTime)
  },
  "latestStartTime": {
    object (DateTime)
  },
  "durationMinutes": integer,
  "ruleIncrementMinutes": integer
}
ক্ষেত্র
earliestStartTime

object ( DateTime )

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

latestStartTime

object ( DateTime )

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

durationMinutes

integer

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

ruleIncrementMinutes

integer

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

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

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

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

JSON প্রতিনিধিত্ব
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "locationId": string,
  "shiftIds": [
    string
  ],
  "roleRequirements": [
    {
      object (RoleRequirement)
    }
  ],
  "skillRequirements": [
    {
      object (SkillRequirement)
    }
  ]
}
ক্ষেত্র
startDateTime

object ( DateTime )

কভারেজ প্রয়োজনীয়তার জন্য শুরুর সময় (অন্তর্ভুক্ত)। সেট করা থাকলে, shiftIds খালি থাকতে হবে।

endDateTime

object ( DateTime )

কভারেজ প্রয়োজনীয়তার জন্য শেষ সময় (একচেটিয়া)। সেট করা থাকলে, shiftIds খালি থাকতে হবে।

locationId

string

যে অবস্থানে কর্মীদের প্রয়োজন। shiftIds খালি নয়, এই ক্ষেত্রটি অবশ্যই খালি হতে হবে।

shiftIds[]

string

সেট করা থাকলে, এই তালিকার প্রতিটি শিফট আইডিতে ভূমিকা এবং দক্ষতার প্রয়োজনীয়তা পৃথকভাবে প্রয়োগ করা হয়। যদি shiftIds খালি না থাকে, তাহলে startDateTime , endDateTime , এবং locationId খালি থাকতে হবে৷

roleRequirements[]

object ( RoleRequirement )

টাইম উইন্ডোর সময় নির্দিষ্ট ভূমিকার জন্য প্রয়োজনীয় সংখ্যক কর্মচারী নিয়োগ করা হবে। প্রতিটি রোল আইডির জন্য সর্বাধিক একটি role_requirement দিতে হবে। প্রতিটি প্রয়োজনীয়তার জন্য ডিফল্ট অগ্রাধিকার স্তর হল PRIORITY_MANDATORY ৷ এই সীমাবদ্ধতাগুলি লঙ্ঘন করা হয় যদি টাইম উইন্ডো চলাকালীন যে কোনও সময়ে নির্দিষ্ট ভূমিকার জন্য targetEmployeeCount সংখ্যার কম কর্মী নিয়োগ করা হয়।

skillRequirements[]

object ( SkillRequirement )

নির্দিষ্ট দক্ষতা সহ প্রয়োজনীয় সংখ্যক কর্মচারী যা সময় উইন্ডোর সময় শিফটে বরাদ্দ করা হয়। প্রতিটি দক্ষতা আইডির জন্য সর্বাধিক একটি skill_requirement দিতে হবে। প্রতিটি প্রয়োজনীয়তার জন্য ডিফল্ট অগ্রাধিকার স্তর হল PRIORITY_LOW ৷ এই সীমাবদ্ধতাগুলি লঙ্ঘন করা হয় যদি টাইম উইন্ডো চলাকালীন যে কোনও সময়ে targetEmployeeCount সংখ্যার কম কর্মচারীর প্রদত্ত দক্ষতা থাকে।

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

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

JSON প্রতিনিধিত্ব
{
  "roleId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
ক্ষেত্র
roleId

string

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

targetEmployeeCount

integer

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

priority

enum ( Priority )

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

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

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

JSON প্রতিনিধিত্ব
{
  "skillId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
ক্ষেত্র
skillId

string

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

targetEmployeeCount

integer

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

priority

enum ( Priority )

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

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

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

JSON প্রতিনিধিত্ব
{
  "totalBudget": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "priority": enum (Priority)
}
ক্ষেত্র
totalBudget

number

প্রদত্ত ব্যবধানের জন্য মোট বাজেট। অগ্রাধিকার PRIORITY_MANDATORY হলে মোট বাজেট দিতে হবে।

যদি totalBudget সেট করা না থাকে, তাহলে নির্দিষ্ট priority অনুযায়ী সময়সূচীর মোট খরচ কম করা হয়। উদাহরণস্বরূপ, যদি বাজেটের priority PRIORITY_MEDIUM হয়, তাহলে সমাধানকারী অগ্রাধিকার PRIORITY_LOW দিয়ে কোনো বাধা লঙ্ঘন কমানোর আগে খরচ কমিয়ে দেবে।

startDateTime

object ( DateTime )

এই বাজেট কখন প্রযোজ্য হবে তার জন্য শুরুর সময়। যদি একটি শুরুর সময় নির্দিষ্ট করা না থাকে, তবে এটি সমস্ত প্রদত্ত শিফটের প্রথম দিকের শুরুর সময় হিসাবে সেট করা হয়৷

endDateTime

object ( DateTime )

এই বাজেট কখন প্রযোজ্য হবে তার শেষ সময়। যদি একটি শেষ সময় নির্দিষ্ট করা না থাকে, তবে এটি সমস্ত প্রদত্ত শিফটের সর্বশেষ শেষ সময় হিসাবে সেট করা হয়৷

priority

enum ( Priority )

নির্দিষ্ট সময় উইন্ডোতে বাজেটের প্রয়োজনীয়তা পূরণের জন্য অগ্রাধিকার স্তর। ডিফল্ট অগ্রাধিকার হল PRIORITY_LOW । যদি অগ্রাধিকার PRIORITY_MANDATORY তে সেট করা হয়, তাহলে totalBudget অবশ্যই সেট করতে হবে৷

মনে রাখবেন যে যদি এই অগ্রাধিকারটি অন্যান্য সীমাবদ্ধতার অগ্রাধিকারের চেয়ে বেশি হয় এবং যদি totalBudget টাইট হয়, তাহলে ফলাফলের সময়সূচী উল্লেখযোগ্যভাবে কর্মচারী সীমাবদ্ধতা বা কভারেজ প্রয়োজনীয়তা উভয়ই লঙ্ঘন করতে পারে।

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

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

JSON প্রতিনিধিত্ব
{
  "employeeId": string,
  "shiftId": string,
  "roleId": string,
  "breaks": [
    {
      object (Break)
    }
  ]
}
ক্ষেত্র
employeeId

string

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

shiftId

string

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

roleId

string

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

breaks[]

object ( Break )

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

বিরতি

একটি সময়কাল যেখানে একজন কর্মচারী একটি শিফটের সময় তাদের কাজে বাধা দেয়।

JSON প্রতিনিধিত্ব
{
  "startDateTime": {
    object (DateTime)
  },
  "durationMinutes": integer
}
ক্ষেত্র
startDateTime

object ( DateTime )

বিরতির শুরুর সময়।

durationMinutes

integer

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

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

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

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