Étape 9 : suppression du statut d'affectation (plus de confirmation)
Une affectation est valide dès sa création ; la retirer = supprimer la ligne.
- Modèle : suppression de AssignmentStatus, ACTIVE_ASSIGNMENT_STATUSES et de
Assignment.status ; migration 0003 (drop_column, alembic check vert)
- Loader de validation : toutes les affectations du bénévole comptent, plus de
filtre par statut
- API : AssignmentCreate/Update/Read sans status ; création → validation
toujours exécutée (blocage si violation bloquante) ; PATCH ne porte plus que
source/locked
- Matrice : MatrixShift.{confirmed, proposed} → {assigned} (compte unique)
- Seed : affectations sans statut, résumé « Affectations » (260)
- Tests mis à jour (matrice, loader, modèle, API) ; 128 tests au total
- CLAUDE.md : glossaire, modèle, sémantique de validation, périmètre
Frontend : les références au statut (propositions, badges confirmé/proposé,
écran de confirmation mobile, mock, schema.ts) restent à retirer séparément.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uUsRg7XzopkCPWimwg9ZM
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
8a879ca5c3
commit
464635656a
@@ -31,7 +31,6 @@ colonne, route et variable utilise la colonne « Code / base ».
|
||||
|
||||
| Métier | Code |
|
||||
|------------------------------------|-----------------------------------------------|
|
||||
| Statut d'affectation | `PROPOSED` / `CONFIRMED` / `DECLINED` / `CANCELLED` |
|
||||
| Origine d'affectation | `SOLVER` / `MANUAL` |
|
||||
| Verrouillée | `Assignment.locked: bool` |
|
||||
| Rôle | `COORDINATOR` / `LEAD` / `VOLUNTEER` |
|
||||
@@ -74,10 +73,10 @@ les tables sauf les tables d'association.
|
||||
lendemain), `min_staff`, `ideal_staff`, compétences requises (N-N `Skill`).
|
||||
- **`Availability`** : `volunteer_id`, `date`, `day_part_id`, `status`
|
||||
(`AvailabilityStatus`). Unique (`volunteer_id`, `date`, `day_part_id`).
|
||||
- **`Assignment`** : `volunteer_id`, `shift_id`, `status`
|
||||
(`AssignmentStatus`, défaut `PROPOSED`), `source` (`AssignmentSource`,
|
||||
- **`Assignment`** : `volunteer_id`, `shift_id`, `source` (`AssignmentSource`,
|
||||
défaut `MANUAL`), `locked` (défaut `false`). Unique (`volunteer_id`,
|
||||
`shift_id`).
|
||||
`shift_id`). **Pas de statut** : l'affectation est valide dès sa création
|
||||
(aucune étape de confirmation) ; la retirer, c'est supprimer la ligne.
|
||||
- **`Account`** : `email` (unique par édition), `role` (`Role`), `edition_id`,
|
||||
`volunteer_id` (nullable, unique).
|
||||
- **`MagicLinkToken`** : `account_id`, `token_hash` (unique), `expires_at`,
|
||||
@@ -164,8 +163,8 @@ traduction se fait via `locales/fr.json`).
|
||||
|
||||
Sémantique figée :
|
||||
|
||||
- Statuts pris en compte pour chevauchement / cumul / repos :
|
||||
`PROPOSED` + `CONFIRMED`. `DECLINED` et `CANCELLED` sont ignorés.
|
||||
- Toutes les affectations du bénévole comptent pour chevauchement / cumul /
|
||||
repos (une affectation = une décision, toujours active).
|
||||
- « Journée » (cumul 8 h) : du début du premier `DayPart` du jour au début du
|
||||
premier `DayPart` du lendemain.
|
||||
- Cumul : `> 8 h 00` strict (8 h 00 pile passe).
|
||||
@@ -190,7 +189,7 @@ Sémantique figée :
|
||||
3. API CRUD sur `Position`, `Shift`, `Volunteer`, `Assignment`.
|
||||
4. Moteur de validation (section 3).
|
||||
5. Endpoint matrice d'une édition :
|
||||
`[{ position, shifts: [{ shift, min_staff, ideal_staff, confirmed, proposed }] }]`.
|
||||
`[{ position, shifts: [{ shift, min_staff, ideal_staff, assigned }] }]`.
|
||||
6. Jeu de données de démonstration : 120 bénévoles, 15 postes, 4 jours,
|
||||
quelques trous d'effectif, 2–3 avertissements actifs.
|
||||
|
||||
@@ -308,7 +307,8 @@ Aucune dépendance locale requise hors Docker.
|
||||
| 5 | API CRUD (Position, Shift, Volunteer, Assignment) + matrice + validation branchée | validée |
|
||||
| 6 | Jeu de données de démonstration (`app/seed.py`) | validée |
|
||||
| 7 | Authentification : lien magique + JWT + application des rôles | validée |
|
||||
| 8 | Second système : connexion mot de passe (bcrypt) pour la coordination | à valider |
|
||||
| 8 | Second système : connexion mot de passe (bcrypt) pour la coordination | validée |
|
||||
| 9 | Suppression du statut d'affectation (plus d'étape de confirmation) | à valider |
|
||||
|
||||
Premier incrément backend + authentification terminés. **Reste hors
|
||||
périmètre** (modèle prêt à les accueillir) : envoi réel d'emails/SMS (le lien
|
||||
|
||||
Reference in New Issue
Block a user