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

문제 또는 요청 ID

solveParameters

object (SolveParameters)

문제의 단일 해결을 제어하는 매개변수입니다.

employees[]

object (Employee)

예약 가능한 모든 직원이 있습니다.

shifts[]

object (Shift)

모든 교대 근무자는 일정을 형성합니다.

coverageRequirements[]

object (CoverageRequirement)

전체 계획 범위의 적용 범위 요구사항. 특정 기간 또는 교대 근무 ID 목록 중에 각 역할을 수행하거나 기술을 보유해야 하는 직원 수를 지정합니다. 모든 적용 범위 요구사항은 기간 또는 근무 시간 ID 목록 중 하나로 지정해야 합니다 (둘 다 지정할 수는 없음). 서비스 지역 요구사항 (지정된 경우)은 각 위치에서 겹칠 수 없습니다. 이러한 각 제약조건의 기본 우선순위 수준은 역할 요구사항에서 PRIORITY_MANDATORY이고 기술 요구사항에서 PRIORITY_LOW입니다. 자세한 내용은 Priority enum을 참고하세요.

roleIds[]

string

인력 전반에서 가능한 모든 역할 목록입니다. 각 직원은 교대 근무에서 할당할 수 있는 역할이 하나 이상 있어야 합니다. 역할은 교대 근무 중 특정 직무 (예: 공인 간호사, 임원 요리사, 웨이터 등)를 의미합니다. 직원에게 교대 근무가 할당되면 해당 직원에게도 특정한 단일 역할이 할당됩니다.

skillIds[]

string

인력 전반에 걸쳐 가능한 모든 기술의 목록입니다. 기술이란 할당 가능한 특정 직무와 관련이 없는 직원에게 부여될 수 있는 추가 자격 (자격증, 사용하는 언어 등)을 의미합니다. 이 목록은 비워 둘 수 있습니다. 직원을 교대 근무에 할당하면 해당 교대 근무에 필요한 모든 기술을 충족해야 합니다.

locationIds[]

string

일정에 있는 교대 근무 세트의 가능한 모든 위치의 목록입니다. 이 목록은 비워 둘 수 있습니다. 여러 위치를 지정하는 것이 유용할 수 있습니다. 예를 들어 간호사 관리자가 병원의 여러 부서에서 여러 간호사의 일정을 정하려는 경우, 또는 호텔 관리자가 여러 호텔에 걸쳐 직원의 일정을 예약하려는 경우 등이 있습니다.

budgetRequirements[]

object (BudgetRequirement)

일정 문제에 대한 예산 사양입니다. 각 요구사항의 기본 우선순위 수준은 PRIORITY_LOW입니다. 자세한 내용은 Priority enum을 참고하세요.

assignmentsHint[]

object (ShiftAssignment)

일정 예약 문제에 대한 잠정적인 솔루션 (솔루션 힌트라고도 함)으로 사용할 할당을 전환합니다. 할당이 할당할 수 없는 교대 근무 또는 일정 예약 요청과 충돌하는 경우 과제 힌트가 무시됩니다.

응답 본문

직원 예약 API에 대한 응답입니다. 반환된 solutionStatusNOT_SOLVED_DEADLINE_EXCEEDED 또는 INFEASIBLE인 경우 각 응답에서 shiftAssignments는 비어 있습니다. 반환된 solutionStatusOPTIMAL 또는 FEASIBLE이면 유효한 교대 근무 할당이 shiftAssignments에 반환됩니다. 유효한 교대 근무 할당의 경우 다음 속성이 유지됩니다.

  1. 각 직원 ID는 요청에 지정된 직원 집합에 포함됩니다.
  2. 직원에게 할당된 각 역할 ID는 해당 직원의 역할 ID 집합에 포함됩니다.
  3. 각 교대 근무 ID는 요청에 지정된 교대 근무 세트에 포함되어 있습니다.
  4. 각 교대 근무 ID는 해당 직원에게 할당할 수 없는 교대 근무 ID 중 하나가 아닙니다.
  5. 직원 한 명이 두 번의 교대 근무에 배정되지 않습니다.
  6. 지정된 일정에서 우선순위 수준이 PRIORITY_MANDATORY인 제약조건 또는 요청이 위반되지 않았습니다.

성공할 경우 응답 본문에 다음 구조의 데이터가 포함됩니다.

JSON 표현
{
  "requestId": string,
  "solutionStatus": enum (SolutionStatus),
  "shiftAssignments": [
    {
      object (ShiftAssignment)
    }
  ],
  "statusMessage": string
}
필드
requestId

string

이 응답이 연결된 요청의 ID입니다.

solutionStatus

enum (SolutionStatus)

반환된 솔루션의 상태입니다. 솔루션이 FEASIBLE 또는 OPTIMAL이 아닌 경우 이 proto의 다른 필드는 비어 있을 수 있습니다. 상태가 NOT_SOLVED_DEADLINE_EXCEEDED인 경우 실행 가능한 솔루션을 찾지 못하거나 실행 가능한 솔루션이 있는지 확인하지 않고 시간 제한에 도달한 것입니다. 우선순위 수준 MANDATORY의 제약 조건을 모두 충족할 수 없는 경우 요청이 실행되지 않을 수 있습니다.

shiftAssignments[]

object (ShiftAssignment)

모든 할당 목록 각 ShiftAssignment는 직원, 특정 교대 근무자, 해당 교대 근무에서 수행하도록 할당된 역할을 지정합니다.

statusMessage

string

solutionStatus가 최적이 아닌 경우 이 필드에 솔버에 관한 추가 정보가 포함될 수 있습니다.

SolveParameters

교대 근무 일정 예약 문제의 단일 해답을 제어하는 매개변수입니다.

JSON 표현
{
  "timeLimit": string
}
필드
timeLimit

string (Duration format)

문제 해결사가 문제에 소비해야 하는 최대 시간입니다. 설정하지 않으면 기본값은 1분입니다.

이 값은 엄격한 제한이 아니며 통신 오버헤드를 고려하지 않습니다. 문제를 해결하기 위한 예상 지연 시간이 이 값을 약간 초과할 수도 있습니다.

소수점 아래가 최대 9자리까지이고 '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

이 직원에게 할당된 고유 ID입니다.

roleIds[]

string

이 직원이 수행할 수 있는 역할 ID입니다. 역할이 1개 이상 지정되어야 합니다. 직원에게 교대 근무가 할당되면 이 목록에서도 하나의 역할이 할당됩니다. 일정 예약 기간 동안 직원이 다른 역할에 할당될 수 있습니다.

skillIds[]

string

이 직원이 소유한 기술 ID입니다. 이 목록은 비워 둘 수 있습니다. 직원이 교대 근무에 할당되면 여기에 나열된 기술 중 일부를 사용하여 할당된 교대 근무 기간 동안 기술 요구사항을 처리합니다.

shiftPreferences[]

object (ShiftPreference)

이 직원의 환경설정을 변경합니다. 여기에 지정된 교대 근무 수는 해당 직원이 일정 예약 기간에 배정되기를 원하는 교대 근무를 나타냅니다. shiftPreferences에 지정된 교대 근무 ID는 고유해야 합니다. 문제 해결사는 충족되는 모든 shiftPreferences에 대해 ShiftPreference.preference 값의 합계를 최대화하려고 시도합니다.

schedulingConstraints[]

object (SchedulingConstraint)

이 직원의 일정 제약 조건 목록입니다. 이러한 각 제약조건의 기본 우선순위 수준은 PRIORITY_MEDIUM입니다. 자세한 내용은 Priority enum을 참고하세요.

resourceConstraints[]

object (ResourceConstraint)

schedulingConstraints에 지정되지 않은 추가 예약 제약 조건을 여기에서 resourceConstraints에 추가할 수 있습니다. ResourceConstraint은 직원의 리소스를 제한하기 위한 좀 더 추상적인 표현입니다. 이러한 각 제약조건의 기본 우선순위 수준은 PRIORITY_MEDIUM입니다. 자세한 내용은 Priority enum을 참고하세요.

shiftRequests[]

object (ShiftRequest)

직원의 교대 근무 요청 목록입니다. 특정 교대 근무자를 배정받기 위한 요청일 수도 있고 특정 교대 근무에 배정되지 않을 수도 있습니다. 직원의 고정 일정 할당은 우선순위가 PRIORITY_MANDATORYShiftRequest로 표시할 수 있습니다. 교대 근무 ID는 이 직원의 최대 한 개의 일정 요청에 표시될 수 있습니다. 각 요청의 기본 우선순위 수준은 PRIORITY_LOW입니다. 자세한 내용은 Priority enum을 참고하세요.

hourlyContract

object (HourlyContract)

직원에 대한 정규 및 초과 근무 시간 요금을 지정하는 계약입니다.

ShiftPreference

특정 Shift ID의 숫자 환경설정입니다.

JSON 표현
{
  "shiftId": string,
  "preference": integer
}
필드
shiftId

string

환경설정이 지정된 Shift ID입니다.

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가 포함됩니다. 충돌하는 제약 조건이 있을 수 있으므로 모든 제약 조건을 만족하는 것이 항상 가능하지는 않습니다. 따라서 각 유형의 제약조건에는 전체 일정에 지정된 모든 제약조건의 상대적 중요도를 해결사에게 알려주는 우선순위 (사용자 또는 기본값이 지정)가 있습니다.

열거형
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

예약 요청의 교대 근무 ID입니다.

type

enum (WorkStatus)

요청 유형(예: 요청이 교대 근무에 할당되는지 여부)

WorkStatus

직원의 근무 여부

열거형
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의 요율로 지불되는 경우 Proto 표현은 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시간 7시간)입니다. 각 기간에는 초과 근무 배율이 적용됩니다 (예: 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

이 교대 근무에 할당된 고유 ID입니다.

locationId

string

이 교대 근무가 적용되는 위치 ID입니다. 비워 둘 수 있습니다.

startDateTime

object (DateTime)

이동 시작 시간 (해당 시간 포함)입니다.

endDateTime

object (DateTime)

이동 종료 시간입니다 (제외). 현재 문제 해결사는 24시간 미만의 교대 근무만 허용합니다.

breakRules[]

object (BreakRule)

근무 시간 중에 발생한 휴식 규칙 목록입니다. 이러한 교대 근무를 수행하는 직원에게는 break_rule마다 휴식 시간이 할당되며, 이 시간 동안 수행 중인 직무에 대한 수요를 충당하지 못합니다. 각 BreakRule 기간은 이 시프트 기간 내에 완전히 포함되어야 합니다.

BreakRule

교대 근무 및 근무 시간 내에 휴식이 시작될 수 있는 시점을 결정하는 규칙입니다. 고려되는 모든 가능한 광고 시점 목록은 ruleIncrementMinutes 단위로 결정됩니다. 예를 들어 광고 시점 규칙이 10:00에서 11:00 사이에 시작할 수 있는 30분 광고 시간을 모델링하고 규칙 증분이 20분인 경우 고려되는 광고 시점 목록은 [10:00, 10:30], [10:20, 10:50], [10:40, 11:10], 11:10, 11:10입니다.

JSON 표현
{
  "earliestStartTime": {
    object (DateTime)
  },
  "latestStartTime": {
    object (DateTime)
  },
  "durationMinutes": integer,
  "ruleIncrementMinutes": integer
}
필드
earliestStartTime

object (DateTime)

광고 시점의 가장 이른 시작 시간입니다 (해당 시간 포함). hoursminutes만 설정할 수 있습니다.

latestStartTime

object (DateTime)

가장 늦은 광고 시점 시작 시간입니다 (해당 시간 포함). hoursminutes만 설정할 수 있습니다.

durationMinutes

integer

휴식 시간(분)입니다.

ruleIncrementMinutes

integer

[선택사항] 이 광고 시점 규칙에서 고려할 수 있는 모든 광고 시점의 시간 증가분(분)입니다. 설정하지 않으면 기본값은 durationMinutes입니다.

CoverageRequirement

적용 범위 요구사항은 특정 기간 동안 지정된 위치에서 일련의 역할 또는 기술에 필요한 직원 수를 지정합니다. 특정 위치의 DateTime 간격은 겹칠 수 없습니다. 또는 시간 및 위치 대신 교대 근무 ID 목록을 제공할 수 있습니다. 특정 역할을 할당할 수 있는 직원 또는 특정 기술을 보유한 직원만 이 요건을 충족할 수 있습니다.

주어진 역할 또는 기술의 보장 범위 요구사항은 특정 기간 중 매 순간 (또는 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

설정하면 역할 및 기술 요구사항이 이 목록의 모든 교대 근무 ID에 개별적으로 적용됩니다. ShiftId가 비어 있지 않은 경우 startDateTime, endDateTime, locationId는 비어 있어야 합니다.

roleRequirements[]

object (RoleRequirement)

특정 기간 동안 지정된 역할에 할당되는 필수 직원 수입니다. 각 역할 ID에 최대 하나의 role_requirement를 제공해야 합니다. 각 요구사항의 기본 우선순위 수준은 PRIORITY_MANDATORY입니다. 특정 기간 중 지정된 역할에 할당된 직원이 targetEmployeeCount명 미만이면 이 제약조건을 위반합니다.

skillRequirements[]

object (SkillRequirement)

특정 기간 동안 교대 근무에 할당되는 특정 기술을 보유한 필수 직원 수입니다. 각 기술 ID에 최대 1개의 skill_requirement를 제공해야 합니다. 각 요구사항의 기본 우선순위 수준은 PRIORITY_LOW입니다. 특정 기간 중 특정 기술을 보유한 직원이 targetEmployeeCount명 미만인 경우 이러한 제약 조건이 위반됩니다.

RoleRequirement

특정 기간 동안 지정된 역할에 할당되는 필수 직원 수입니다.

JSON 표현
{
  "roleId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
필드
roleId

string

요구사항의 역할 ID입니다.

targetEmployeeCount

integer

특정 기간 동안 역할에 할당되기를 원하는 직원 수

priority

enum (Priority)

이 요구사항 제약조건의 우선순위 수준입니다. 모든 리소스 제약조건의 기본 우선순위는 PRIORITY_MANDATORY입니다.

SkillRequirement

특정 기간 동안 작업하며 지정된 기술을 보유한 필수 직원 수입니다.

JSON 표현
{
  "skillId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
필드
skillId

string

요구사항의 기술 ID입니다.

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에 따라 일정의 총 비용이 최소화됩니다. 예를 들어 예산의 priorityPRIORITY_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

할당되는 직원 ID입니다.

shiftId

string

직원에게 할당된 Shift ID입니다.

roleId

string

해당 교대 근무를 위해 직원에게 할당된 역할 ID입니다.

breaks[]

object (Break)

이 교대 근무 배정의 휴식 목록입니다.

휴식 시간

직원이 교대 근무 중에 업무를 중단하는 기간입니다.

JSON 표현
{
  "startDateTime": {
    object (DateTime)
  },
  "durationMinutes": integer
}
필드
startDateTime

object (DateTime)

광고 시점의 시작 시간입니다.

durationMinutes

integer

휴식 시간(분)입니다.

SolutionStatus

문제 해결사의 응답에 제공된 솔루션 (즉, 일정) 상태입니다.

열거형
SOLUTION_STATUS_UNSPECIFIED 응답의 상태가 지정되지 않았습니다.
FEASIBLE 반환된 일정은 실행할 수 있지만 최적이 아닐 수 있습니다.
OPTIMAL 반환된 일정이 최적입니다.
INFEASIBLE 지정된 제약조건에 실행 가능한 일정이 없습니다. 우선순위 수준이 PRIORITY_MANDATORY인 제약 조건의 하위 집합을 충족할 수 없는 경우 솔버에서 이 값을 반환할 수 있습니다.
NOT_SOLVED 일정을 찾을 수 없습니다.
NOT_SOLVED_DEADLINE_EXCEEDED 지정된 제한 시간 내에 일정을 찾을 수 없습니다.