Method: scheduling.solveShiftScheduling

कर्मचारियों को इस तरह की शिफ़्ट में असाइन करके, दिए गए SolveShiftSchedulingRequest से तय शिफ़्ट शेड्यूलिंग से जुड़े सवाल को हल करता है शेड्यूल करने की प्राथमिकताएं बढ़ा दी गई हैं. साथ ही, शेड्यूल करने की सीमाओं का उल्लंघन कम किया गया है.

एचटीटीपी अनुरोध

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

यह यूआरएल 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 की एनम देखें.

roleIds[]

string

कर्मचारी की सभी संभावित भूमिकाओं की सूची. हर कर्मचारी के पास कम से कम एक ऐसी भूमिका होनी चाहिए जो उसे शिफ़्ट में असाइन की जा सके. भूमिका का मतलब है, शिफ़्ट के दौरान दिए गए किसी काम को असाइन करना. जैसे, रजिस्टर की गई नर्स, एक्ज़ीक्यूटिव शेफ़, वेटर वगैरह. जब किसी कर्मचारी को शिफ़्ट में असाइन किया जाता है, तो उसे भी एक खास भूमिका असाइन की जाती है.

skillIds[]

string

कर्मचारी के लिए सभी संभावित स्किल की सूची. स्किल का मतलब है, किसी कर्मचारी की ऐसी अतिरिक्त योग्यता जो किसी असाइन की जाने वाली नौकरी से जुड़ी नहीं है. जैसे, सर्टिफ़िकेट, भाषाएं वगैरह. यह सूची खाली हो सकती है. जब किसी कर्मचारी को शिफ़्ट के लिए असाइन किया जाता है, तो उसे उस शिफ़्ट के लिए ज़रूरी सभी कौशल पूरे करने होते हैं.

locationIds[]

string

शेड्यूल में शिफ़्ट के सेट के लिए सभी संभावित जगहों की सूची. यह सूची खाली हो सकती है. अलग-अलग जगहों की जानकारी देना तब फ़ायदेमंद हो सकता है, जब कोई नर्स मैनेजर अलग-अलग यूनिट में कई नर्सों को अस्पताल में शेड्यूल करना चाहता हो या दूसरे उदाहरण के लिए, कोई होटल मैनेजर एक से ज़्यादा होटलों में कर्मचारियों के काम शेड्यूल करना चाहता हो.

budgetRequirements[]

object (BudgetRequirement)

शेड्यूल करने से जुड़ी समस्या के लिए बजट की जानकारी. इन ज़रूरी शर्तों में से हर एक के लिए, प्राथमिकता का डिफ़ॉल्ट लेवल PRIORITY_LOW है. ज़्यादा जानकारी के लिए, Priority की एनम देखें.

assignmentsHint[]

object (ShiftAssignment)

असाइनमेंट को शेड्यूल करने से जुड़ी समस्या के समाधान (यानी समाधान संकेत) के तौर पर इस्तेमाल करने के लिए शिफ़्ट करें. अगर कोई असाइनमेंट, असाइन न किए जा सकने वाले शिफ़्ट या शेड्यूल करने के अनुरोध से मेल नहीं खाता है, तो असाइनमेंट के संकेतों को अनदेखा कर दिया जाता है.

जवाब का मुख्य भाग

Workforce शेड्यूलिंग API के लिए रिस्पॉन्स. अगर solutionStatus, NOT_SOLVED_DEADLINE_EXCEEDED या INFEASIBLE है, तो हर जवाब के लिए shiftAssignments खाली होगा. अगर 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 सही नहीं है, तो इस फ़ील्ड में सॉल्वर के बारे में ज़्यादा जानकारी मौजूद हो सकती है.

SolveParameters

ऐसे पैरामीटर जो शिफ़्ट शेड्यूलिंग की समस्या के एक ही समाधान को कंट्रोल करते हैं.

JSON के काेड में दिखाना
{
  "timeLimit": string
}
फ़ील्ड
timeLimit

string (Duration format)

वह ज़्यादा से ज़्यादा समय जो सॉल्वर को समस्या पर बिताना चाहिए. अगर यह नीति सेट नहीं है, तो डिफ़ॉल्ट रूप से एक मिनट होता है.

इस वैल्यू के लिए कोई तय सीमा नहीं है. साथ ही, इसमें कम्यूनिकेशन का ओवरहेड शामिल नहीं होता. इस समस्या को हल करने में लगने वाला अनुमानित समय, वैल्यू से थोड़ा ज़्यादा हो सकता है.

सेकंड में कुल नौ दशमलव अंक, जो '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 में दिए गए shift आईडी यूनीक होने चाहिए. सॉल्वर, ShiftPreference.preference की वैल्यू को बढ़ाने की कोशिश करेगा. हालांकि, ऐसा उन सभी shiftPreferences वैल्यू के लिए होगा जो संतुष्ट हैं.

schedulingConstraints[]

object (SchedulingConstraint)

इस कर्मचारी के लिए शेड्यूलिंग प्रतिबंधों की सूची. इनमें से हर एक कंस्ट्रेंट के लिए, प्राथमिकता का डिफ़ॉल्ट लेवल PRIORITY_MEDIUM है. ज़्यादा जानकारी के लिए, Priority की एनम देखें.

resourceConstraints[]

object (ResourceConstraint)

शेड्यूल करने से जुड़ी जिन अतिरिक्त पाबंदियों की जानकारी schedulingConstraints में नहीं दी गई है उन्हें यहां resourceConstraints में जोड़ा जा सकता है. ResourceConstraint, किसी कर्मचारी के लिए संसाधनों को सीमित तौर पर दिखाने का एक छोटा सा तरीका है. इनमें से हर एक कंस्ट्रेंट के लिए, प्राथमिकता का डिफ़ॉल्ट लेवल PRIORITY_MEDIUM है. ज़्यादा जानकारी के लिए, Priority की एनम देखें.

shiftRequests[]

object (ShiftRequest)

कर्मचारी के लिए, शिफ़्ट के अनुरोधों की सूची. यह अनुरोध किसी कर्मचारी को असाइन किए जाने या किसी खास शिफ़्ट में नहीं असाइन किए जाने के लिए भी हो सकता है. कर्मचारी के लिए, तय शेड्यूल किए गए किसी भी असाइनमेंट को ShiftRequest प्राथमिकता के साथ PRIORITY_MANDATORY के साथ दिखाया जा सकता है. इस कर्मचारी के लिए, शेड्यूल करने के ज़्यादा से ज़्यादा एक अनुरोध में शिफ़्ट आईडी दिख सकता है. इनमें से हर अनुरोध के लिए, डिफ़ॉल्ट प्राथमिकता लेवल PRIORITY_LOW है. ज़्यादा जानकारी के लिए, Priority की एनम देखें.

hourlyContract

object (HourlyContract)

कॉन्ट्रैक्ट में, कर्मचारी के लिए हर घंटे के हिसाब से सामान्य और ओवरटाइम के हिसाब से शुल्क तय किया जाता है.

ShiftPreference

शिफ़्ट आईडी के लिए अंकों वाली प्राथमिकता.

JSON के काेड में दिखाना
{
  "shiftId": string,
  "preference": integer
}
फ़ील्ड
shiftId

string

Shift आईडी जिसके लिए प्राथमिकता दी गई है.

preference

integer

'प्राथमिकता' की बड़ी वैल्यू, ज़्यादा ज़रूरी बदलाव दिखाती है.

SchedulingConstraint

किसी विशेष कर्मचारी के लिए शेड्यूल करने की खास सीमा. बताया गया कंस्ट्रेंट सिर्फ़ दिए गए इंटरवल [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 कंस्ट्रेंट की वजह से हो सकता है.

ResourceConstraint

एक सामान्य कंस्ट्रेंट, जो कुछ "रिसॉर्स" की मात्रा को सीमित करता है किसी कर्मचारी ने कैसे इस्तेमाल किया. यह उस 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)

अनुरोध का टाइप, जैसे कि शिफ़्ट के सेट के लिए अनुरोध असाइन किया गया है या नहीं.

WorkStatus

कोई कर्मचारी काम कर रहा है या नहीं.

Enums
WORK_STATUS_UNSPECIFIED काम की स्थिति की जानकारी नहीं है.
STATUS_WORK कामकाजी कर्मचारी का स्टेटस.
STATUS_NOT_WORK गैर-काम करने वाले कर्मचारी का स्टेटस.

HourlyContract

किसी कर्मचारी को मिलने वाले मुआवज़े का पता लगाने के लिए, हर घंटे के हिसाब से मूल दर, दर में अंतर, और ओवरटाइम की संख्या में मल्टीप्लायर की जानकारी देता है. ध्यान दें कि अलग-अलग जगहों पर लागू नियमों के तहत, ओवरटाइम मुआवज़े का हिसाब अलग तरीके से लगाना पड़ सकता है. सॉल्वर ओवरटाइम मुआवज़े का अनुमान लगाता है, ताकि कुल लागत की प्रॉक्सी को कम किया जा सके या बजट को पूरा किया जा सके (BudgetRequirement देखें). इसका इस्तेमाल पेरोल का हिसाब लगाने के टूल के तौर पर नहीं किया गया है.

JSON के काेड में दिखाना
{
  "baseHourlyRate": number,
  "hourlyRateShiftDifferentials": {
    string: number,
    ...
  },
  "overtimePeriods": [
    {
      object (OvertimePeriod)
    }
  ]
}
फ़ील्ड
baseHourlyRate

number

नॉन-ओवरटाइम घंटे काम करने के लिए मिलने वाला मुआवज़ा. अगर कर्मचारी पर एक से ज़्यादा दरें लागू होती हैं, तो दर में अंतर, इस आधार पर घंटे के हिसाब से दर के हिसाब से लागू किया जाता है. इसके अलावा, अगर एक से ज़्यादा दरें लागू होती हैं, तो हर घंटे के हिसाब से मूल दर, इन दरों से कम होनी चाहिए.

hourlyRateShiftDifferentials

map (key: string, value: number)

हर घंटे के हिसाब से दर का अंतर, जो baseHourlyRate में दिखाया जाता है. उदाहरण के लिए, अगर हर घंटे के हिसाब से बेस की दर 30 डॉलर/घंटा है, तो "shift_1" $40/घंटे की दर से पेमेंट किया जाता है और "shift_2" 45 डॉलर/घंटे की दर से पेमेंट किया जाता है, तो प्रोटो प्रज़ेंटेशन यह है: 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)

उन सभी अवधियों की सूची जिनके लिए ओवरटाइम का हिसाब लगाना है. ये अवधि ओवरलैप नहीं होनी चाहिए.

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

काम के घंटों की ज़्यादा से ज़्यादा संख्या, जिनका भुगतान नियमित (नॉन-ओवरटाइम) दर पर किया जाता है. यह संख्या पॉज़िटिव होनी चाहिए.

Shift

शिफ़्ट एक तय समयावधि को दिखाती है, जिसमें कर्मचारी काम कर सकते हैं.

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

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 होती है.

CoverageRequirement

कवरेज से जुड़ी शर्त से यह पता चलता है कि किसी तय समयावधि में और दी गई जगह पर, कुछ भूमिकाओं और/या कौशल के लिए, कितने कर्मचारियों की ज़रूरत होती है. किसी खास जगह के तारीख और समय के अंतराल ओवरलैप नहीं कर सकते. इसके अलावा, टाइम विंडो और जगह के बजाय, शिफ़्ट आईडी की सूची दी जा सकती है. इस शर्त को सिर्फ़ वे कर्मचारी पूरा कर सकते हैं जिन्हें कोई खास भूमिका असाइन की जा सकती है या जिनके पास कोई खास स्किल है.

किसी दी गई भूमिका और/या स्किल के लिए कवरेज से जुड़ी ज़रूरी शर्त तब पूरी होती है, जब एक टाइम विंडो में कम से कम targetEmployeeCount कर्मचारी हर शिफ़्ट में काम कर रहे हों या shiftIds की हर शिफ़्ट में काम कर रहे हों. इसके उलट, टाइम विंडो में किसी भी समय (या 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

अगर सेट किया गया है, तो इस सूची में मौजूद हर शिफ़्ट आईडी पर भूमिका और स्किल से जुड़ी ज़रूरी शर्तें अलग-अलग लागू होती हैं. अगर shiftId खाली नहीं हैं, तो startDateTime, endDateTime, और locationId खाली होने चाहिए.

roleRequirements[]

object (RoleRequirement)

समयावधि के दौरान, तय की गई भूमिकाओं के लिए असाइन किए जाने वाले कर्मचारियों की ज़रूरी संख्या. हर भूमिका आईडी के लिए, ज़्यादा से ज़्यादा एक role_requirement दिया जाना चाहिए. हर ज़रूरी शर्त के लिए, प्राथमिकता का डिफ़ॉल्ट लेवल PRIORITY_MANDATORY है. अगर समयावधि के दौरान किसी भी समय targetEmployeeCount से कम कर्मचारियों को तय भूमिकाओं के लिए असाइन किया गया हो, तो इन पाबंदियों का उल्लंघन किया जाता है.

skillRequirements[]

object (SkillRequirement)

समय विंडो के दौरान शिफ़्ट में असाइन किए गए खास कौशल वाले कर्मचारियों की ज़रूरी संख्या. हर स्किल आईडी के लिए, ज़्यादा से ज़्यादा एक skill_requirement देना ज़रूरी है. हर ज़रूरी शर्त के लिए, प्राथमिकता का डिफ़ॉल्ट लेवल PRIORITY_LOW है. अगर टाइम विंडो के दौरान किसी भी समय targetEmployeeCount से कम कर्मचारियों के पास दिया गया कौशल है, तो इन पाबंदियों का उल्लंघन होता है.

RoleRequirement

समयावधि के दौरान, तय की गई भूमिका में असाइन किए जाने वाले कर्मचारियों की ज़रूरी संख्या.

JSON के काेड में दिखाना
{
  "roleId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
फ़ील्ड
roleId

string

ज़रूरी शर्त के लिए रोल आईडी.

targetEmployeeCount

integer

समयावधि के दौरान, भूमिका के लिए असाइन किए गए कर्मचारियों की संख्या.

priority

enum (Priority)

इस ज़रूरी शर्त के लिए प्राथमिकता का लेवल. सभी संसाधन कंस्ट्रेंट के लिए डिफ़ॉल्ट प्राथमिकता PRIORITY_MANDATORY है.

SkillRequirement

ऐसे कर्मचारियों की आवश्यक संख्या जो समयावधि के दौरान काम कर रहे हैं और जो खास कौशल रखते हैं.

JSON के काेड में दिखाना
{
  "skillId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
फ़ील्ड
skillId

string

ज़रूरी शर्त के लिए स्किल आईडी.

targetEmployeeCount

integer

दिए गए कौशल वाले उन कर्मचारियों की संख्या जो तय समय के दौरान काम कर रहे हैं.

priority

enum (Priority)

इस ज़रूरी शर्त के लिए प्राथमिकता का लेवल. सभी संसाधन कंस्ट्रेंट के लिए डिफ़ॉल्ट प्राथमिकता PRIORITY_LOW है.

BudgetRequirement

किसी दिए गए इंटरवल के लिए बजट की शर्तें.

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 में सख्ती बरती गई है, तो इससे बनने वाले शेड्यूल से, कर्मचारियों से जुड़ी पाबंदियों या कवरेज से जुड़ी ज़रूरी शर्तों का उल्लंघन हो सकता है.

ShiftAssignment

एक कर्मचारी को बदला जा रहा है.

JSON के काेड में दिखाना
{
  "employeeId": string,
  "shiftId": string,
  "roleId": string,
  "breaks": [
    {
      object (Break)
    }
  ]
}
फ़ील्ड
employeeId

string

असाइन किया जा रहा कर्मचारी आईडी.

shiftId

string

कर्मचारी को असाइन किया गया Shift आईडी.

roleId

string

वह रोल आईडी जिसे शिफ़्ट के लिए कर्मचारी को असाइन किया गया है.

breaks[]

object (Break)

शिफ़्ट के इस असाइनमेंट के लिए ब्रेक की सूची.

ब्रेक

वह समयावधि जिसमें कर्मचारी शिफ़्ट के दौरान अपने काम में रुकावट डालता है.

JSON के काेड में दिखाना
{
  "startDateTime": {
    object (DateTime)
  },
  "durationMinutes": integer
}
फ़ील्ड
startDateTime

object (DateTime)

ब्रेक के शुरू होने का समय.

durationMinutes

integer

ब्रेक का कुल समय, मिनट में.

SolutionStatus

किसी सॉल्वर से मिले जवाब में मौजूद सलूशन (यानी कि शेड्यूल) का स्टेटस.

Enums
SOLUTION_STATUS_UNSPECIFIED जवाब की स्थिति की जानकारी नहीं है.
FEASIBLE वापस किया गया शेड्यूल संभव है, लेकिन हो सकता है कि यह बेहतर न हो.
OPTIMAL वापस भेजा गया शेड्यूल सबसे बेहतर है.
INFEASIBLE दिए गए कंस्ट्रेंट के लिए कोई संभव शेड्यूल मौजूद नहीं है. अगर प्राथमिकता लेवल PRIORITY_MANDATORY वाले कंस्ट्रेंट का कोई सबसेट पूरा नहीं हो पाता है, तो सॉल्वर यह वैल्यू दिखा सकता है.
NOT_SOLVED कोई शेड्यूल नहीं मिला.
NOT_SOLVED_DEADLINE_EXCEEDED दी गई समयसीमा में कोई शेड्यूल नहीं मिला.