Skip to main content
Compilation context that creates variables, constraints, and objectives and emits a SolverRequest for the Python CP-SAT solver service.

Constructors

new ModelBuilder(config)

Returns: ModelBuilder

Properties

coverage
CoverageRequirement[]
required
coverageBucketMinutes
number
required
days
string[]
required
employees
SchedulingEmployee[]
required
fairDistribution
boolean
required
options
{ solutionLimit?: number; timeLimitSeconds?: number; } | undefined
required
reporter
ValidationReporter
required
rules
CompilationRule[]
required
shiftPatterns
ShiftPattern[]
required
weekStartsOn
DayOfWeek
required

Methods

addAtMostOne(vars)

  • vars: string[]

addBoolAnd(vars)

  • vars: string[]

addBoolOr(vars)

  • vars: string[]

addExactlyOne(vars)

  • vars: string[]

addImplication(ifVar, thenVar)

  • ifVar: string
  • thenVar: string

addLinear(terms, op, rhs)

  • terms: object[]
  • op: "<=" | ">=" | "=="
  • rhs: number

addNoOverlap(intervals)

  • intervals: string[]

addPenalty(varName, weight)

  • varName: string
  • weight: number

addSoftLinear(terms, op, rhs, penalty, id?)

  • terms: object[]
  • op: "<=" | ">="
  • rhs: number
  • penalty: number
  • id?: string

assignment(employeeId, patternId, day)

  • employeeId: string
  • patternId: string
  • day: string
Returns: string

boolVar(name)

  • name: string
Returns: string

canAssign(employee, pattern)

Returns: boolean

compile()

Returns: CompilationResult

employeesForCoverage(cov)

Returns team members who can satisfy a coverage requirement. Matching logic:
  • If only roleId: must have that role
  • If only skillIds: must have ALL specified skills
  • If both: must have the role AND ALL specified skills
  • cov: CoverageRequirement
Returns: SchedulingEmployee[]

employeesWithRole(roleId)

  • roleId: string
Returns: SchedulingEmployee[]

endMinutes(pattern, day)

Returns: number

intervalVar(name, start, end, size, presenceVar?)

  • name: string
  • start: number
  • end: number
  • size: number
  • presenceVar?: string
Returns: string

intVar(name, min, max)

  • name: string
  • min: number
  • max: number
Returns: string

patternAvailableOnDay(pattern, day)

Checks if a shift pattern can be used on a specific day. Returns false if the pattern has daysOfWeek restrictions that exclude this day. Returns: boolean

patternDuration(patternId)

  • patternId: string
Returns: number

shiftActive(patternId, day)

  • patternId: string
  • day: string
Returns: string

startMinutes(pattern, day)

Returns: number

validateSolution(assignments)

Run post-solve validation on all rules. Call this after solving with the resolved assignments.