AdamThomasandClaude Sonnet 5 64e2f86647 Solveur : retire le plafond de cumul journalier, ajoute un malus de chaînage
- Retiré : le solveur ne pénalise plus un bénévole qui dépasserait 8 h sur
  la journée (`_daily_overage_minutes`/`_DAILY_OVERAGE_PENALTY_PER_MIN`,
  côté back et mock). Seule la validation le signale encore, à la
  confirmation (`DAILY_HOURS_EXCEEDED`, inchangée). `SolverInput.day_parts`
  et son chargement sont retirés au passage : ils ne servaient qu'à ça.
- Ajouté : malus (-40) si le bénévole a déjà (affectation décidée) le
  créneau précédent de ce même poste, le même jour
  (`SolverShift.predecessor_shift_id`, calculé par le loader à partir de
  tous les créneaux du poste — pas seulement ceux à compléter). Favorise la
  rotation plutôt que d'enchaîner toujours la même personne sur un poste.
  Reste un malus, pas une exclusion : le seul candidat pour un créneau
  urgent est quand même proposé.
- Miroir côté mock (`runSolver`) pour que la démonstration se comporte pareil.
- CLAUDE.md à jour (§4).

Tests : remplacé le test du plafond journalier par un test de non-régression
explicite (le cumul n'est plus pénalisé) + un test isolant le repos (qui,
lui, reste vérifié) ; ajouté 3 tests pour le chaînage (préfère un bénévole
frais, reste proposé si c'est le seul candidat urgent, un créneau existant
non-prédécesseur ne déclenche pas le malus).

Vérifié : 183 tests backend, ruff, alembic check ; typecheck/lint/build/smoke
frontend.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uUsRg7XzopkCPWimwg9ZM
2026-09-15 21:12:30 +02:00

Gestion des bénévoles

Application web de gestion des bénévoles pour un festival associatif. Backend FastAPI + PostgreSQL, frontend React (à venir), déploiement Docker Compose auto-hébergé.

Voir CLAUDE.md pour le vocabulaire du domaine, l'arborescence et les conventions.

Démarrage rapide

make demo     # base + backend + frontend, jeu de démonstration chargé
make blank    # idem, mais édition vierge + 1er compte coordination

Chaque commande construit les images, applique les migrations, prépare les données, bascule le frontend sur l'API réelle (.env) et affiche les identifiants de connexion.

make blank accepte des paramètres :

make blank EMAIL=moi@festival.fr PASSWORD=mon-mot-de-passe-solide \
          NAME="Festival 2026" START=2026-07-01 END=2026-07-04

Le jeu de démo : 120 bénévoles fictifs, 15 postes, 4 jours. L'édition vierge : une édition + un compte coordination (mot de passe) + 3 créneaux types.

Tests

docker compose run --rm backend uv run pytest

La base de test (benevoles_test) est créée automatiquement au premier démarrage du conteneur PostgreSQL.

Structure

Dossier Rôle
backend/ API FastAPI, modèle SQLModel, migrations Alembic
frontend/ Interface React + Vite + TS + Tailwind (service frontend)
deploy/ Configuration de déploiement production (compose, Caddy, runbook)
.gitlab-ci.yml Chaîne CI/CD (tests → build → SSH sur le VPS)
S
Description
No description provided
Readme
1.8 MiB
Languages
Python 51.8%
TypeScript 47.6%
JavaScript 0.2%
Makefile 0.2%
Dockerfile 0.1%