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

costContext
CostContext | undefined
required
Shared context for cost rules. Set by minimizeCost(), read by modifiers.
coverage
CoverageRequirement[]
required
coverageBucketMinutes
number
required
days
string[]
required
fairDistribution
boolean
required
members
SchedulingMember[]
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(memberId, patternId, day)

  • memberId: string
  • patternId: string
  • day: string
Returns: string

boolVar(name)

  • name: string
Returns: string

canAssign(member, pattern)

Returns: boolean

compile()

Returns: CompilationResult

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

membersForCoverage(cov)

Returns team members who can satisfy a coverage requirement. Matching logic:
  • If only roles: must have ANY of those roles (OR)
  • If only skills: must have ALL specified skills (AND)
  • If both: must have a matching role AND ALL specified skills
  • cov: CoverageRequirement
Returns: SchedulingMember[]

membersWithRole(roleId)

  • roleId: string
Returns: SchedulingMember[]

patternAvailableOnDay(pattern, day)

Checks if a shift pattern can be used on a specific day. Returns false if the pattern has dayOfWeek 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.