Method: scheduling.solveShiftScheduling

Çalışanları vardiyalara atayarak, çalışanların belirli bir SolveShiftSchedulingRequest yılındaki sabit vardiya zaman çizelgesi sorununu çözer. Planlama tercihleri en üst düzeye çıkarılır ve planlama kısıtlaması ihlalleri en aza indirilir.

HTTP isteği

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

URL, gRPC Kod Dönüştürme söz dizimini kullanır.

İstek içeriği

İstek gövdesi, aşağıdaki yapıya sahip verileri içerir:

JSON gösterimi
{
  "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)
    }
  ]
}
Alanlar
requestId

string

Sorun veya istek kimliği.

solveParameters

object (SolveParameters)

Sorunun tek bir çözümünü kontrol edecek parametreler.

employees[]

object (Employee)

Müsait olan tüm çalışanlar için zaman planlaması yapılabilir.

shifts[]

object (Shift)

Tüm vardiyaları zaman çizelgesini oluşturmak.

coverageRequirements[]

object (CoverageRequirement)

Planlama döneminin tamamı için kapsam gereksinimleri. Bunlar, bir zaman aralığı veya vardiya kimlikleri listesi süresince her bir rolü yerine getirmesi ya da bir beceriye sahip olması gereken çalışan sayısını belirtir. Tüm kapsam koşulları, zaman aralıkları veya kaydırma kimlikleri listesi (ikisi birden değil) ile belirtilmelidir. Kapsam gereksinimlerinin zaman aralıkları (verilmişse) her bir konum için çakışamaz. Bu kısıtlamaların her biri için varsayılan öncelik düzeyi, rol gereksinimleri için PRIORITY_MANDATORY, beceri gereksinimleri içinse PRIORITY_LOW şeklindedir. Daha fazla bilgi için Priority sıralamasına bakın.

roleIds[]

string

İş gücü genelindeki olası tüm rollerin listesi. Her çalışanın bir vardiya için atanabilecek en az bir rolü olmalıdır. Rol, vardiya sırasında yapılan belirli bir iş atamasını ifade eder (ör.kayıtlı hemşire, şef, garson vb.). Bir çalışan bir vardiyaya atandığında, aynı zamanda tek bir role atanır.

skillIds[]

string

İş gücündeki olası tüm becerilerin listesi. Beceri, bir çalışanın belirli bir atanabilir işle ilgili olmayan (ör. sertifikalar, konuşulan diller) sahip olabileceği tüm ekstra nitelikleri ifade eder. Bu liste boş olabilir. Bir çalışan vardiyaya atandığında, o vardiya için gereken tüm becerileri edinmesi gerekir.

locationIds[]

string

Zaman çizelgesindeki kayma grubu için mümkün olan tüm konumların listesi. Bu liste boş olabilir. Örneğin bir hemşire yöneticisi bir hastanedeki farklı birimlerde çok sayıda hemşire randevusu almak istediğinde veya örneğin bir otel yöneticisi birden fazla otelde çalışanları planlamak istediğinde farklı konumlar belirtmek yararlı olabilir.

budgetRequirements[]

object (BudgetRequirement)

Zaman çizelgesi problemi için bütçe spesifikasyonu. Bu gereksinimlerin her biri için varsayılan öncelik düzeyi PRIORITY_LOW'tir. Daha fazla bilgi için Priority sıralamasına bakın.

assignmentsHint[]

object (ShiftAssignment)

Zaman çizelgesi oluşturma problemine belirsiz bir çözüm (çözüm ipucu) olarak kullanılacak atamaları kaydırın. Atama, atanamayan bir vardiya veya planlama isteğiyle çelişiyorsa atama ipuçları yoksayılır.

Yanıt gövdesi

İş gücü planlama API'sinin yanıtı. Döndürülen solutionStatus değeri NOT_SOLVED_DEADLINE_EXCEEDED veya INFEASIBLE ise her yanıt için shiftAssignments boş olur. Döndürülen solutionStatus değeri OPTIMAL veya FEASIBLE ise shiftAssignments içinde geçerli bir vardiya ataması döndürülür. Geçerli bir kaydırma ataması için aşağıdaki özellikler muhafaza edilir:

  1. Her çalışan kimliği, istekte belirtilen çalışan grubunda yer alır.
  2. Çalışana atanan her rol kimliği, söz konusu çalışana ait rol kimlikleri grubunda yer alır.
  3. Her vardiya kimliği, istekte belirtilen kaymalar grubunda yer alır.
  4. Her vardiya kimliği, belirtilen çalışanın atanamayan vardiya kimliklerinden biri değildir.
  5. Bir çalışan hiçbir zaman çakışan iki vardiyaya atanmaz.
  6. Belirtilen zaman planlamasında, öncelik düzeyi PRIORITY_MANDATORY olan kısıtlamaların veya isteklerin hiçbiri ihlal edilmedi.

Başarılı olursa yanıt metni aşağıdaki yapıyla birlikte verileri içerir:

JSON gösterimi
{
  "requestId": string,
  "solutionStatus": enum (SolutionStatus),
  "shiftAssignments": [
    {
      object (ShiftAssignment)
    }
  ],
  "statusMessage": string
}
Alanlar
requestId

string

Bu yanıtın ilişkilendirildiği isteğin kimliği.

solutionStatus

enum (SolutionStatus)

Döndürülen çözümün durumu. Çözüm GEÇİCİ veya OPTİMİZASYON değilse bu protokoldeki diğer alanlar boş olabilir. Durum NOT_SOLVED_DEADLINE_EXCEEDED ise, zaman sınırına, uygulanabilir bir çözüm sunulmadan veya uygulanabilir bir çözüm mevcut olup olmadığı belirlenmeden ulaşılmıştır. ZORUNLU öncelik düzeyi kısıtlamalarının tümü karşılanamıyorsa istekler uygulanabilir olmayabilir.

shiftAssignments[]

object (ShiftAssignment)

Tüm ödevlerin listesi. Her ShiftAssignment; bir çalışanı, atandığı vardiyayı ve bu vardiyada gerçekleştirmek üzere atandığı rolü belirtir.

statusMessage

string

solutionStatus optimum değilse bu alan çözücü hakkında ek bilgiler içerebilir.

SolveParameters

Kaydırma planlama probleminin tek bir çözümünü kontrol eden parametreler.

JSON gösterimi
{
  "timeLimit": string
}
Alanlar
timeLimit

string (Duration format)

Çözme aracının problem üzerinde harcaması gereken maksimum süre. Ayarlanmazsa varsayılan olarak 1 dakika olur.

Bu değer sabit bir sınır değildir ve iletişim ek yükünü hesaba katmaz. Sorunu çözmek için beklenen gecikme, bu değeri biraz aşabilir.

En fazla dokuz kesir basamağı olan ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

Çalışan

Planlanacak bir iş gücü çalışanı.

JSON gösterimi
{
  "id": string,
  "roleIds": [
    string
  ],
  "skillIds": [
    string
  ],
  "shiftPreferences": [
    {
      object (ShiftPreference)
    }
  ],
  "schedulingConstraints": [
    {
      object (SchedulingConstraint)
    }
  ],
  "resourceConstraints": [
    {
      object (ResourceConstraint)
    }
  ],
  "shiftRequests": [
    {
      object (ShiftRequest)
    }
  ],
  "hourlyContract": {
    object (HourlyContract)
  }
}
Alanlar
id

string

Bu çalışana atanan benzersiz kimlik.

roleIds[]

string

Bu çalışanın gerçekleştirebileceği rol kimlikleri. En az bir rol belirtilmelidir. Bir çalışan bir vardiyaya atandığında, kendisi de bu listedeki tek bir role atanır. Çalışan, planlama zaman aralığı boyunca farklı rollere atanabilir.

skillIds[]

string

Bu çalışanın sahip olduğu beceri kimlikleri. Bu liste boş olabilir. Bir çalışan vardiyaya atandığında, burada listelenen becerilerin herhangi bir alt kümesini, atanan vardiya boyunca gereken beceri gereksinimlerini karşılamak için kullanır.

shiftPreferences[]

object (ShiftPreference)

Bu çalışanın tercihlerini değiştirin. Burada belirtilen vardiyalar, çalışanın zaman planlaması sırasında atanmayı tercih ettiği vardiyaları temsil eder. shiftPreferences içinde belirtilen kaydırma kimlikleri benzersiz olmalıdır. Çözücü, ShiftPreference.preference değerlerinin toplamını, sağlanan tüm shiftPreferences üzerinden en üst düzeye çıkarmaya çalışır.

schedulingConstraints[]

object (SchedulingConstraint)

Bu çalışan için zaman çizelgesi kısıtlamaları listesi. Bu kısıtlamaların her biri için varsayılan öncelik düzeyi PRIORITY_MEDIUM şeklindedir. Daha fazla bilgi için Priority sıralamasına bakın.

resourceConstraints[]

object (ResourceConstraint)

schedulingConstraints politikasında belirtilmeyen ek planlama kısıtlamaları buradan resourceConstraints öğesine eklenebilir. ResourceConstraint, bir çalışan için kaynakları kısıtlamayı daha soyut bir şekilde temsil eder. Bu kısıtlamaların her biri için varsayılan öncelik düzeyi PRIORITY_MEDIUM şeklindedir. Daha fazla bilgi için Priority sıralamasına bakın.

shiftRequests[]

object (ShiftRequest)

Çalışan için vardiya isteklerinin listesi. Talep, bir çalışanın belirli vardiyalara atanması veya atanmamış olmasıyla ilgili olabilir. Çalışana yönelik sabit zamanlama atamaları, PRIORITY_MANDATORY önceliğine sahip bir ShiftRequest ile temsil edilebilir. Vardiya kimliği, bu çalışana ait en fazla bir planlama isteğinde görünebilir. Bu isteklerin her biri için varsayılan öncelik düzeyi PRIORITY_LOW'tir. Daha fazla bilgi için Priority sıralamasına bakın.

hourlyContract

object (HourlyContract)

Çalışanın normal ve fazla mesai saatlik ücretlerini belirten sözleşme.

ShiftPreference

Belirli bir vardiya kimliği için sayısal tercih.

JSON gösterimi
{
  "shiftId": string,
  "preference": integer
}
Alanlar
shiftId

string

Tercihin belirtildiği Üst Karakter Kimliği.

preference

integer

Daha büyük tercih değerleri, daha istenen bir değişimi gösterir.

SchedulingConstraint

Belirli bir çalışan için belirli zaman çizelgesi kısıtlaması. Belirtilen kısıtlama yalnızca belirtilen [startDateTime, endDateTime) aralığında uygulanır.

JSON gösterimi
{
  "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.
}
Alanlar
priority

enum (Priority)

Bu planlama kısıtlamasının öncelik düzeyi. Tüm planlama kısıtlamaları için varsayılan öncelik PRIORITY_MEDIUM şeklindedir.

startDateTime

object (DateTime)

Bu planlama kısıtlamasının geçerli olduğu başlangıç zamanı (dahil).

endDateTime

object (DateTime)

Bu planlama kısıtlamasının geçerli olacağı (hariç) bitiş zamanı.

Birleştirme alanı type. Belirtilen kısıtlama türü. Her kısıtlama yalnızca yukarıda belirtilen zaman aralığı içinde uygulanır. type şunlardan yalnızca biri olabilir:
minimumMinutes

integer

Çalışanın çalışabileceği minimum dakika sayısı. Çalışan, zaman aralığıyla (tamamen veya kısmen) çakışan bir vardiyaya atandıysa bu vardiyanın zaman aralığıyla çakıştığı dakika sayısı bu sayıya dahil edilir.

maximumMinutes

integer

Çalışanın zaman aralığında çalışabileceği maksimum dakika sayısı. Çalışan, zaman aralığıyla (tamamen veya kısmen) çakışan bir vardiyaya atandıysa bu vardiyanın zaman aralığıyla çakıştığı dakika sayısı bu sayıya dahil edilir.

minimumConsecutiveWorkDays

integer

Çalışanın art arda çalışabileceği minimum gün sayısı. Bir çalışan, belirli bir gün içinde başlayan bir vardiyaya atanmışsa o gün çalışıyor. İlgili zaman aralığında başlayan ve bir çalışanın atandığı tüm vardiyalar bu sayıya dahil edilir.

maximumConsecutiveWorkDays

integer

Çalışanın art arda çalışabileceği maksimum gün sayısı. Bir çalışan, belirli bir gün içinde başlayan bir vardiyaya atanmışsa o gün çalışıyor. İlgili zaman aralığında başlayan ve bir çalışanın atandığı tüm vardiyalar bu sayıya dahil edilir.

minimumShiftCount

integer

Bir çalışanın çalışabileceği minimum vardiya sayısı. Çalışanın atandığı zaman aralığıyla tamamen örtüşen tüm vardiyalar bu sayıya dahil edilir.

maximumShiftCount

integer

Bir çalışanın çalışabileceği maksimum vardiya sayısı. Çalışanın atandığı zaman aralığıyla tamamen örtüşen tüm vardiyalar bu sayıya dahil edilir.

minimumRestMinutes

integer

Bir çalışanın bir vardiya bittikten sonra başka bir vardiyaya atanmadan önce dinlenmesi gereken minimum dakika sayısı. Bu kısıtlama, [startDateTime, endDateTime] değerine tam olarak dahil edilen her vardiya çifti için geçerlidir.

Öncelik

Bir çalışanın zaman çizelgesindeki herhangi bir kısıtlama veya kapsam gereksinimleri için öncelik düzeyi. Bunlar arasında SchedulingConstraint, ResourceConstraint, ShiftRequest ve CoverageRequirement bulunmaktadır. Çelişen kısıtlamalar söz konusu olabileceğinden, tüm kısıtlamaları karşılamak her zaman mümkün değildir. Dolayısıyla, her kısıtlama türünün, tam bir zaman çizelgesine verilen tüm kısıtlamaların göreceli önemi hakkında çözücüyü bilgilendiren bir önceliği vardır (kullanıcı tarafından veya varsayılan tarafından verilir).

Sıralamalar
PRIORITY_UNSPECIFIED Bilinmeyen öncelik düzeyi.
PRIORITY_LOW En düşük öncelik düzeyi. Bu önceliğe sahip kısıtlamalar, diğer kısıtlamalardan daha az önemlidir. Uygun bir çözüm bulunamazsa ihlal durumu ilk olarak değerlendirilir.
PRIORITY_MEDIUM Öncelik düzeyi orta. Bu önceliğe sahip kısıtlamalar, PRIORITY_LOW önceliğine sahip kısıtlamalardan daha önemlidir ancak PRIORITY_HIGH öncelikli kısıtlamalardan daha az önemlidir. Tüm kısıtlamalar PRIORITY_LOW önceliğiyle gevşetildikten sonra uygun bir çözüm bulunamazsa bir sonraki ihlalde PRIORITY_MEDIUM önceliğinin kısıtlamaları dikkate alınır.
PRIORITY_HIGH En yüksek öncelik düzeyi. Bu öncelik düzeyiyle yapılan kısıtlamalar en önemlidir. Bunlar, düşük öncelik seviyelerinin kısıtlamaları gevşetildikten sonra uygun bir çözüm bulunamazsa en son ihlal olarak değerlendirileceklerdir.
PRIORITY_MANDATORY Çözme aracı tarafından ihlal edilemeyecek bir şeyi temsil eden öncelik düzeyi. Çözücü SolutionStatus.INFEASIBLE değeri döndürüyorsa bu durum çok fazla PRIORITY_MANDATORY kısıtlamasından kaynaklanıyor olabilir.

ResourceConstraint

Belirli bir "kaynağın" miktarını sınırlandıran genel bir kısıtlama kullanma konusunda karar vermiştir. Bu, daha spesifik SchedulingConstraint özelliğinin kullanıcı için daha esnek olan soyut bir sürümüdür. SchedulingConstraint.type içinde belirtilemeyen birçok planlama kısıtlaması, bunun yerine bu mesaj kullanılarak belirtilebilir.

JSON gösterimi
{
  "priority": enum (Priority),
  "resourceUsages": {
    string: number,
    ...
  },
  "minimumResourceUsage": number,
  "maximumResourceUsage": number
}
Alanlar
priority

enum (Priority)

Bu kaynak kısıtlamasının öncelik düzeyi. Tüm kaynak kısıtlamaları için varsayılan öncelik PRIORITY_MEDIUM şeklindedir.

resourceUsages

map (key: string, value: number)

Vardiyalarda kullanılan kaynak miktarı. Örneğin, bu kısıtlama bir çalışanın belirli bir hafta içinde çalıştığı minimum ve maksimum saatler için geçerliyse bu harita, o hafta gerçekleşen kaymaları ve her bir vardiyanın saat cinsinden uzunluğunu içerir.

"key": value çiftlerinin listesini içeren bir nesne. Örnek: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

minimumResourceUsage

number

Bir kaynak kısıtlamasının karşılanması için minimum kaynak kullanımı.

maximumResourceUsage

number

Bir kaynak kısıtlamasının karşılanması için maksimum kaynak kullanımı.

ShiftRequest

Bir çalışanın belirli bir vardiyaya atanması veya atanmaması isteği.

JSON gösterimi
{
  "priority": enum (Priority),
  "shiftIds": [
    string
  ],
  "type": enum (WorkStatus)
}
Alanlar
priority

enum (Priority)

Bu planlama isteğinin öncelik düzeyi. Tüm planlama istekleri için varsayılan öncelik PRIORITY_LOW şeklindedir.

shiftIds[]

string

Planlama isteğinin değiştirme kimlikleri.

type

enum (WorkStatus)

İstek türü (ör. isteğin vardiya grubuna atanıp atanmadığı).

WorkStatus

Bir çalışanın çalışıp çalışmadığı.

Sıralamalar
WORK_STATUS_UNSPECIFIED Çalışma durumu bilinmiyor.
STATUS_WORK Çalışan bir çalışanı temsil eden durum.
STATUS_NOT_WORK Çalışmayan bir çalışanı temsil eden durum.

HourlyContract

Bir çalışana ödenecek ücreti belirlemek için taban saatlik ücreti, ücret farklarını ve fazla mesai çarpanlarını belirtir. Farklı yerlerdeki düzenlemelerde, fazla mesai ücretinin farklı şekilde hesaplanması gerekebilir. Çözücü, toplam maliyetin bir temsilini en aza indirmek veya bütçeyi karşılamak için fazla mesai ücretini tahmin eder (bkz. BudgetRequirement). Maaşları hesaplamak için bir araç olarak tasarlanmamıştır.

JSON gösterimi
{
  "baseHourlyRate": number,
  "hourlyRateShiftDifferentials": {
    string: number,
    ...
  },
  "overtimePeriods": [
    {
      object (OvertimePeriod)
    }
  ]
}
Alanlar
baseHourlyRate

number

Fazla mesai dışında bir saat çalışmanın ücreti. Çalışan için birden fazla ücret geçerliyse bu taban saatlik ücrete göre ücret farkı uygulanır. Ayrıca, birden fazla ücret varsa taban saatlik ücret bu ücretlerin minimum değeri olmalıdır.

hourlyRateShiftDifferentials

map (key: string, value: number)

baseHourlyRate üzerine ödenen saatlik ücret farkı. Örneğin, taban saatlik ücret 30 TL/saat ise "shift_1" saat 40 ABD doları üzerinden ve "shift_2" ile ödeniyor. saatlik 45 ABD doları üzerinden ödeniyorsa, prototip temsili şu şekilde olacaktır: baseHourlyRate: 30 hourlyRateShiftDifferentials {key: "shift_1" value: 10} hourlyRateShiftDifferentials {key: "shift_2" value: 15}.

"key": value çiftlerinin listesini içeren bir nesne. Örnek: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

overtimePeriods[]

object (OvertimePeriod)

Fazla mesai sayısının hesaplanması gereken tüm dönemlerin listesi. Bu dönemler çakışmamalıdır.

OvertimePeriod

Fazla mesai ücretinin belirlenmesinde kullanılan sabit ve düzenli olarak yinelenen bir süre (genellikle 168 saat veya art arda 24 saatlik yedi dönem). Her dönemin bir fazla mesai çarpanı vardır (ör. 1.5) baseHourlyRate ile göreli (uzun süreli olmayan) çalışma olarak kabul edilen saat sayısına ilişkin bir sınırlama ile birlikte. startDateTime (dahil) ve endDateTime (hariç) zaman aralığıyla çakışan tüm değişimler, söz konusu dönemde çalışılan toplam saat sayısına dahil edilir. Çakışma kısmiyse yalnızca çakışan saatler sayılır.

JSON gösterimi
{
  "overtimeMultiplier": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "maximumRegularHours": number
}
Alanlar
overtimeMultiplier

number

Fazla mesai saatlik ücreti hesaplamak için kullanılan çarpan (1,0'dan büyük veya eşit olmalıdır). Fazla mesai saatlik ücreti genellikle baseHourlyRate * overtimeMultiplier olarak hesaplanır. hourlyRateShiftDifferentials üzerinden birden fazla oran sağlanırsa çözücü, fazla mesai süresince geçerli olan ücretlerin basit bir ortalamasını kullanarak fazla mesai saatlik ücreti tahmin eder. Not: Farklı yerlerdeki düzenlemelerde, fazla mesai ücretinin farklı şekilde hesaplanması gerekebilir. Çözme aracı, fazla mesai tazminatını ya toplam maliyetin bir proxy'sini en aza indirmek ya da bütçeyi karşılamak için tahmin eder, ancak maaşları hesaplamak için bir araç olarak tasarlanmamıştır.

startDateTime

object (DateTime)

Uzatma süresinin başlangıç zamanı. Bu saatteki bir değişim çakışırsa söz konusu değişimin bulunduğu saatler startDateTime tarihinden itibaren sayılır.

endDateTime

object (DateTime)

Uzatma süresinin bitiş zamanı. Bu saatteki bir değişim çakışırsa böyle bir değişimin olduğu saatler endDateTime değerine kadar sayılır.

maximumRegularHours

number

Düzenli olarak (fazla mesai dışı) ödenen maksimum çalışma saati sayısı. Bu miktar pozitif olmalıdır.

üst karakter

Vardiya, çalışanların çalışabilecekleri sabit bir zaman aralığını belirtir.

JSON gösterimi
{
  "id": string,
  "locationId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "breakRules": [
    {
      object (BreakRule)
    }
  ]
}
Alanlar
id

string

Bu varlığa atanan benzersiz kimlik.

locationId

string

Bu geçişin gerçekleştirildiği konumun kimliği. Bu alan boş olabilir.

startDateTime

object (DateTime)

Vardiyanın başlangıç zamanı (dahil).

endDateTime

object (DateTime)

Vardiyanın bitiş zamanı (hariç). Çözücü şu anda yalnızca 24 saatten kısa olan değişimlere izin vermektedir.

breakRules[]

object (BreakRule)

Kaydırma sırasında oluşan kesme kurallarının listesi. Bu değişimi yapan çalışanlara break_rule başına bir ara atanır. Bu aralar, tamamladıkları pozisyonla ilgili talebi karşılamaz. Her BreakRule zaman aralığı, bu vardiyanın zaman aralığına tam olarak dahil edilmelidir.

BreakRule

Bir vardiya dahilinde bir aranın ne zaman başlayabileceğini ve bu aranın süresini belirleyen kural. Dikkate alınan tüm olası araların listesi ruleIncrementMinutes'lik artışlarla belirlenir. Örneğin, bir ara kuralı 10:00 ile 11:00 arasında başlayabilecek 30 dakikalık bir arayı modelliyorsa ve kural artımı 20 dakikaysa dikkate alınacak aralar listesi şu şekildedir: [10:00, 10:30], [10:20, 10:50], [10:1:1, 1, 0:1, 1, 1,0:10, 1].

JSON gösterimi
{
  "earliestStartTime": {
    object (DateTime)
  },
  "latestStartTime": {
    object (DateTime)
  },
  "durationMinutes": integer,
  "ruleIncrementMinutes": integer
}
Alanlar
earliestStartTime

object (DateTime)

Aranın en erken başlangıç zamanı (dahil). Yalnızca hours ve minutes ayarlanabilir.

latestStartTime

object (DateTime)

Aranın en geç başlangıç zamanı (dahil). Yalnızca hours ve minutes ayarlanabilir.

durationMinutes

integer

Aranın dakika cinsinden süresi.

ruleIncrementMinutes

integer

[İsteğe bağlı] Bu ara kuralında dikkate alınabilecek tüm aralar için dakika cinsinden süre artımı. Ayarlanmazsa varsayılan olarak durationMinutes olur.

CoverageRequirement

Kapsam şartı, belirli bir zaman dilimi süresince ve belli bir konumdaki bir dizi rol ve/veya beceri için gereken çalışan sayısını belirtir. Belirli bir konumdaki DateTime aralıkları çakışamaz. Alternatif olarak, zaman aralığı ve konum yerine değiştirme kimlikleri listesi sağlanabilir. Yalnızca belirli bir pozisyona atanabilen (veya belirli bir beceriye sahip olan) çalışanlar bu şartı karşılayabilir.

Belirli bir pozisyon ve/veya beceri için, kapsam şartını, belirli bir zaman aralığındaki (veya shiftIds bölgesindeki her vardiyada) en az targetEmployeeCount sayıda çalışan çalıştığında karşılar. Buna karşın, zaman aralığı içinde herhangi bir noktada (veya shiftIds ayındaki herhangi bir değişiklikte) söz konusu zaman aralığı içinde çalışan sayısı targetEmployeeCount değerinden azsa kapsam şartı ihlal edilir. Çalışan sayısı, targetEmployeeCount olan kişiden daha fazla olduğunda da şartı karşılar ancak aşırı personel sayısı, çözücü tarafından en aza indirilir.

JSON gösterimi
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "locationId": string,
  "shiftIds": [
    string
  ],
  "roleRequirements": [
    {
      object (RoleRequirement)
    }
  ],
  "skillRequirements": [
    {
      object (SkillRequirement)
    }
  ]
}
Alanlar
startDateTime

object (DateTime)

Kapsam koşulu için başlangıç zamanı (dahil). Ayarlanırsa shiftIds boş olmalıdır.

endDateTime

object (DateTime)

Kapsam şartının bitiş zamanı (hariç). Ayarlanırsa shiftIds boş olmalıdır.

locationId

string

Çalışanların gerekli olduğu konum. shiftIds alanı boş değildir, bu alan da boş olmalıdır.

shiftIds[]

string

Ayarlandığı takdirde rol ve beceri gereksinimleri bu listedeki her vardiya kimliğine ayrı ayrı uygulanır. ShiftId'ler boş değilse startDateTime, endDateTime ve locationId boş bırakılmalıdır.

roleRequirements[]

object (RoleRequirement)

İlgili zaman aralığı içinde, belirlenen rollere atanması gereken çalışan sayısı. Her rol kimliği için en fazla bir role_requirement sağlanmalıdır. Koşulların her biri için varsayılan öncelik düzeyi PRIORITY_MANDATORY şeklindedir. İlgili zaman aralığının herhangi bir noktasında belirtilen pozisyonlara targetEmployeeCount taneden az çalışan atanırsa bu kısıtlamalar ihlal edilmiş olur.

skillRequirements[]

object (SkillRequirement)

Belirtilen zaman aralığı içinde vardiyalara atanan, belirli becerilere sahip gerekli çalışan sayısı. Her beceri kimliği için en fazla bir skill_requirement sağlanmalıdır. Koşulların her biri için varsayılan öncelik düzeyi PRIORITY_LOW şeklindedir. İlgili zaman aralığının herhangi bir noktasında belirli becerilere sahip olan çalışan sayısı targetEmployeeCount veya daha azsa bu kısıtlamalar ihlal edilmiş olur.

RoleRequirement

Belirtilen süre içinde belirli bir pozisyona atanacak çalışan sayısının zorunlu olması.

JSON gösterimi
{
  "roleId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
Alanlar
roleId

string

Koşulun rol kimliği.

targetEmployeeCount

integer

Belirli bir zaman aralığında ilgili pozisyona atanan, istenen çalışan sayısı.

priority

enum (Priority)

Bu koşul kısıtlaması için öncelik düzeyidir. Tüm kaynak kısıtlamaları için varsayılan öncelik PRIORITY_MANDATORY şeklindedir.

SkillRequirement

Söz konusu zaman aralığı boyunca çalışan ve belirtilen becerilere sahip olan gerekli çalışan sayısı.

JSON gösterimi
{
  "skillId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
Alanlar
skillId

string

Koşul için beceri kimliği.

targetEmployeeCount

integer

Belirli bir beceriye sahip, istenen zaman aralığında çalışan, istenen sayıda çalışan.

priority

enum (Priority)

Bu koşul kısıtlaması için öncelik düzeyidir. Tüm kaynak kısıtlamaları için varsayılan öncelik PRIORITY_LOW şeklindedir.

BudgetRequirement

Belirli bir aralık için bütçe gereksinimleri.

JSON gösterimi
{
  "totalBudget": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "priority": enum (Priority)
}
Alanlar
totalBudget

number

Verilen aralık için toplam bütçe. Öncelik PRIORITY_MANDATORY ise toplam bütçe sağlanmalıdır.

totalBudget ayarlanmazsa planlamanın toplam maliyeti, belirtilen priority değerine göre en aza indirilir. Örneğin, bütçenin priority değeri PRIORITY_MEDIUM ise çözücü, PRIORITY_LOW önceliğiyle kısıtlama ihlallerini azaltmadan önce maliyeti en aza indirir.

startDateTime

object (DateTime)

Bu bütçenin geçerli olduğu başlangıç zamanı. Bir başlangıç zamanı belirtilmemişse, verilen tüm vardiyaların en erken başlangıç zamanı olarak ayarlanır.

endDateTime

object (DateTime)

Bu bütçenin geçerli olduğu bitiş zamanı. Bir bitiş zamanı belirtilmezse belirlenen tüm vardiyaların en geç bitiş zamanı olarak ayarlanır.

priority

enum (Priority)

Belirtilen zaman aralığında bütçe koşulunu karşılamaya yönelik öncelik düzeyi. Varsayılan öncelik PRIORITY_LOW şeklindedir. Öncelik PRIORITY_MANDATORY olarak ayarlanırsa totalBudget ayarlanmalıdır.

Bu öncelik diğer kısıtlama önceliklerinden daha yüksekse ve totalBudget sıkışıksa, sonuçta ortaya çıkan zaman çizelgesi hem çalışan kısıtlamalarını hem de kapsam şartlarını önemli ölçüde ihlal edebilir.

ShiftAssignment

Rol ataması yapmak için bir çalışan.

JSON gösterimi
{
  "employeeId": string,
  "shiftId": string,
  "roleId": string,
  "breaks": [
    {
      object (Break)
    }
  ]
}
Alanlar
employeeId

string

Atanan çalışan kimliği.

shiftId

string

Çalışana atanan vardiya kimliği.

roleId

string

Çalışanın vardiya için atandığı rol kimliği.

breaks[]

object (Break)

Bu vardiya ataması için araların listesi.

Ara

Bir çalışanın mesai süresince işine ara verdiği bir dönem.

JSON gösterimi
{
  "startDateTime": {
    object (DateTime)
  },
  "durationMinutes": integer
}
Alanlar
startDateTime

object (DateTime)

Aranın başlangıç zamanı.

durationMinutes

integer

Aranın dakika cinsinden süresi.

SolutionStatus

Çözücünün yanıtında sağlanan çözüm (zaman çizelgesi) durumu.

Sıralamalar
SOLUTION_STATUS_UNSPECIFIED Yanıt için belirtilmemiş durum.
FEASIBLE Döndürülen zaman çizelgesi uygun ancak optimum olmayabilir.
OPTIMAL Döndürülen program optimum durumda.
INFEASIBLE Verilen kısıtlamalar için uygun bir zaman çizelgesi yok. Çözücü, PRIORITY_MANDATORY öncelik düzeyine sahip kısıtlamaların herhangi bir alt kümesi karşılanamazsa bu değeri döndürebilir.
NOT_SOLVED Program bulunamadı.
NOT_SOLVED_DEADLINE_EXCEEDED Belirtilen zaman sınırı dahilinde program bulunamadı.