Front : suggestions du solveur en tête de liste dans la grille

- Surface API `solver.run(editionId)` (HTTP + mock) et hooks
  `useRunSolver` (mutation, alimente le cache) / `useSolverSuggestions`
  (lecture seule du cache, ne déclenche jamais de calcul).
- Grille des besoins : bouton « Suggestions (solveur) », affiche le
  nombre de suggestions calculées.
- Panneau d'affectation d'un créneau : les bénévoles suggérés par le
  solveur passent en tête de la liste des candidats (avant le tri par
  disponibilité / charge), avec un badge « Suggéré ». Ne pré-affecte
  jamais personne — la coordination choisit et confirme comme avant.
- Mock : portage glouton (par créneau, du plus urgent au moins urgent)
  du scoring du moteur back-end, pour une démonstration cohérente sans
  CP-SAT côté navigateur.

typecheck / lint / build / smoke au vert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uUsRg7XzopkCPWimwg9ZM
This commit is contained in:
AdamThomas
2026-09-11 08:16:29 +02:00
co-authored by Claude Sonnet 5
parent 803db5e9a9
commit e47c29d35b
8 changed files with 251 additions and 8 deletions
+15
View File
@@ -346,6 +346,21 @@ export interface AssignmentValidateResult {
violations: Violation[];
}
// --------------------------------------------------------------------------- //
// Solveur (suggestions, CP-SAT) — ne place jamais personne //
// --------------------------------------------------------------------------- //
export interface SolverSuggestion {
shift_id: string;
/** Bénévoles suggérés pour ce créneau, meilleur en tête. */
volunteer_ids: string[];
}
export interface SolverRunResult {
suggestions: SolverSuggestion[];
shifts_considered: number;
volunteers_considered: number;
}
// --------------------------------------------------------------------------- //
// Matrice poste × créneau //
// --------------------------------------------------------------------------- //