Skip to main content
type CoverageRequirement = RoleBasedCoverageRequirement | SkillBasedCoverageRequirement;
Defines staffing needs for a specific time period. This is a discriminated union that enforces at compile time that at least one of roleIds or skillIds must be provided:
  • Role-based: { roleIds: ["waiter"], ... } - anyone with ANY of these roles (OR logic)
  • Role + skill: { roleIds: ["waiter"], skillIds: ["senior"], ... } - role AND skills
  • Skill-only: { skillIds: ["keyholder"], ... } - any role with ALL skills (AND logic)

Examples

// Need 2 waiters during lunch (role-based)
{ day: "2024-01-01", startTime: { hours: 11 }, endTime: { hours: 14 }, roleIds: ["waiter"], targetCount: 2, priority: "MANDATORY" }
// Need 1 manager OR supervisor during service (OR logic on roles)
{ day: "2024-01-01", startTime: { hours: 11 }, endTime: { hours: 22 }, roleIds: ["manager", "supervisor"], targetCount: 1, priority: "MANDATORY" }
// Need 1 keyholder for opening (skill-only, any role)
{ day: "2024-01-01", startTime: { hours: 6 }, endTime: { hours: 8 }, skillIds: ["keyholder"], targetCount: 1, priority: "MANDATORY" }
// Need 1 senior waiter for training shift (role + skill filter)
{ day: "2024-01-01", startTime: { hours: 9 }, endTime: { hours: 17 }, roleIds: ["waiter"], skillIds: ["senior"], targetCount: 1, priority: "HIGH" }