export interface ShiftAssignment { employee_id: string employee_name: string shift_id: string shift_name: string period_id: string date: string // ISO date start_time: string end_time: string } export interface SolveResult { status: 'solved' | 'infeasible' | 'error' assignments: ShiftAssignment[] objective_value?: number duration_ms?: number infeasibility_hints?: Array<{ constraint_id?: string; description: string }> } export interface SolveInput { organization_id: string period_start: string period_end: string framework: { periods: Period[] shifts: Shift[] } employees: Employee[] constraints: Array<{ id: string; constraint_json: import('./constraint').ConstraintJSON; hard: boolean; weight?: number }> } export interface Period { id: string name: string start_time: string end_time: string color: string } export interface Shift { id: string period_id: string name: string duration_hours: number workers_required: number days_applicable: number[] // 0=Mon...6=Sun, empty = all days } export interface Employee { id: string name: string roles: string[] skills: string[] employment_type: 'full_time' | 'part_time' | 'mini_job' weekly_hours_target: number max_weekly_hours: number available_periods: string[] unavailable_dates: string[] }