Caller flow
1. Build DomainInput 2. compileDomain(input) 3. solve(solveInput) 4. if infeasible, buildRegroupingContext(input) 5. regroupToDomainExplanations(result, context)
Feasible example
Use this when you want to confirm that a site or plant has enough qualified and available candidates to fill all demand units.
- one or more shifts
- roles with exact qualifications
- assigned candidates returned as a complete set
Infeasible example
Use this when you want a domain-facing explanation for why a staffing plan cannot be completed.
- availability conflicts
- missing qualifications
- coverage rule conflicts
- regrouped explanations centered on failed needs