diff --git a/docs/tmp/153-mini-spec-front-dossiers.md b/docs/tmp/153-mini-spec-front-dossiers.md new file mode 100644 index 0000000..9e4f8f6 --- /dev/null +++ b/docs/tmp/153-mini-spec-front-dossiers.md @@ -0,0 +1,167 @@ +# Mini-spec front — Onglet permanent « Dossiers » (#153) + +Branche Git (front + back) : `feature/153-onglet-dossiers` +Ticket Gitea : **#153** (ticket normal, plus epic) + +> Suite prévue : **#135** = au clic, mode **édition** wizard + ajout 2ᵉ parent. +> **#153** = onglet + listes + navigation / validation pending. **Pas** de création, **pas** d’édition complète. + +--- + +## Contexte / objectif + +Remplacer l’onglet conditionnel **« À valider »** (apparaît/disparaît selon pending) par un onglet **permanent « Dossiers »** dans le dashboard admin/gestionnaire. + +Quand on ouvre **Dossiers** : + +1. **En haut** — section **Dossiers à valider** (AM + familles pending) +2. **En dessous** — liste de **tous les dossiers** (familles **et** AM), 1 ligne = 1 `numero_dossier` +3. Différenciation visuelle famille vs AM : **couleur + icône** +4. **Barre de recherche** (n° dossier, nom, email…) + +**Pas** de bouton « Créer un dossier » ici (création via **+ Parents** #129 / **+ Asmat** #156). + +--- + +## UX cible + +### Onglets dashboard (`UserManagementPanel`) + +| Avant (#107) | Après (#153) | +|--------------|--------------| +| « À valider » **conditionnel** si pending | **« Dossiers » toujours visible** (admin + gestionnaire) | +| Contenu = seulement pending | Pending **en haut** + liste complète **en bas** | + +Ordre suggéré des onglets : + +`Dossiers` | `Parents` | `Enfants` | `Assistantes maternelles` | `Gestionnaires` | (`Administrateurs`) + +### Section haute — À valider + +- Réutiliser / adapter `PendingValidationWidget` (ou extraire la liste dans un sous-widget). +- Sources déjà branchées : + - `UserService.getPendingUsers(role: 'assistante_maternelle')` + - `UserService.getPendingFamilies()` +- Clic ligne pending → **`ValidationDossierModal`** / wizards `.review` (inchangé). +- Si section vide : ne pas afficher de gros vide ; masquer la section ou message court « Aucun dossier en attente ». + +### Section basse — Tous les dossiers + +1 ligne = **1 dossier** (`numero_dossier`), type : + +| Type | Libellé UI | Couleur (suggestion) | +|------|------------|----------------------| +| `famille` | Famille / Parents | teinte existante parents (ex. violet / rose dashboard) | +| `assistante_maternelle` | AM | teinte existante AM (ex. teal / bleu) | + +Colonnes / infos utiles (cartes style `AdminUserCard` ou lignes type pending) : + +- n° dossier +- type (pastille couleur + icône) +- libellé (noms parents ou AM) +- email(s) principal(aux) +- statut user / dossier si dispo (`actif`, `en_attente`, …) +- date utile si dispo + +**Déduplication** : un foyer (pivot + co-parent) = **une** ligne famille (même `numero_dossier`). Idem AM. + +### Recherche + +- La search bar du panel (aujourd’hui désactivée / hint « pas de recherche » sur À valider) doit **filtrer la liste unifiée** (et idéalement aussi le pending affiché). +- Critères **minimum** : `numero_dossier`, nom, prénom, email. +- Harmoniser le hint : `Rechercher un dossier (n°, nom, email)…` + +### État vide liste complète + +Aide optionnelle : *« Pour créer un dossier → onglet Parents (+ Parents) ou Assistantes maternelles (+ Asmat) »*. + +### Clic sur un dossier de la liste complète (#153) + +| Cas | Comportement #153 | +|-----|-------------------| +| Pending | Ouvrir validation (review) — déjà en place | +| Dossier **actif** / non pending | Ouvrir consultation via `GET /dossiers/:numeroDossier` (`UserService.getDossierByNumero`) en **lecture / review** si possible **sans** save édition | + +**Ne pas** implémenter le mode `edit` ni le switch 2ᵉ parent → **#135**. + +Si l’ouverture « review » d’un dossier actif est trop lourde pour ce ticket : clic peut temporairement no-op / snackbar *« Édition dossier : prochainement (#135) »* — **à éviter** si `getDossierByNumero` + wizard review marche déjà pour les deux types. + +--- + +## Données / APIs (front) + +### Déjà disponibles (préférer composer côté front pour #153) + +| Besoin | API / service | +|--------|----------------| +| Pending AM | `getPendingUsers(role: assistante_maternelle)` | +| Pending familles | `getPendingFamilies()` | +| Parents (avec `numero_dossier`) | `getParents()` | +| AM (avec `numero_dossier`) | `getAssistantesMaternelles()` | +| Détail unifié | `getDossierByNumero(numero)` → `GET /dossiers/:numeroDossier` | + +**Pas d’endpoint `GET /dossiers` liste** aujourd’hui. Pour #153 : + +- Construire la liste unifiée **côté client** à partir de `getParents()` + `getAssistantesMaternelles()` (group by `numero_dossier`). +- Exclure ou marquer les pending déjà dans la section haute (éviter doublons visuels, ou les laisser dans les deux avec badge « à valider » — **préférence** : pending **uniquement** en haut ; liste basse = tous **hors** pending **ou** tous avec badge ; choisir une règle claire et documenter dans le PR). + +**Règle recommandée** : +- Haut = pending only +- Bas = **tous** les dossiers ayant un `numero_dossier` (y compris pending) **OU** bas = non-pending only +→ **Recommandation produit** : bas = **tous** (vision complète), pending aussi en haut pour action rapide. Si doublon gênant : bas = non-pending only. + +### Si le back ajoute plus tard `GET /dossiers` + +Brancher `UserService.getDossiers()` — hors scope bloquant #153 front si composition client OK. + +--- + +## Fichiers front probables + +| Fichier | Rôle | +|---------|------| +| `frontend/lib/widgets/admin/user_management_panel.dart` | Onglet permanent **Dossiers** ; retirer logique conditionnelle À valider ; search sur cet onglet | +| `frontend/lib/widgets/admin/pending_validation_widget.dart` | Réemploi section haute (ou refactor léger) | +| **Nouveau** `…/dossiers_management_widget.dart` (nom libre) | Shell onglet : pending + liste unifiée + refresh | +| **Nouveau** modèle léger `DossierListItem` (type, numero, libelle, emails, statut…) | Mapping parents/AM → ligne | +| `user_service.dart` / `api_config.dart` | Seulement si helper `getDossiersUnified()` côté client (pas forcément nouvel endpoint) | +| `validation_dossier_modal.dart` | Réemploi ouverture pending / détail | + +Réutiliser look & feel cartes / hover « Ouvrir » de `_PendingValidationRow` / `AdminUserCard`. + +--- + +## Hors scope (#153) + +- Bouton créer dossier +- Mode `edit` wizard + ajout 2ᵉ parent → **#135** +- Suppressions → **#154** +- Famille N responsables → **#139** +- Changer les onglets Parents / AM / Enfants (restent) + +--- + +## Critères d’acceptation front + +- [ ] Onglet **Dossiers** toujours visible (même 0 pending) +- [ ] Plus d’onglet conditionnel **« À valider »** +- [ ] Section haute pending si non vide ; validation au clic OK +- [ ] Liste unifiée familles + AM en dessous ; 1 ligne / `numero_dossier` +- [ ] Couleur + icône différencient famille / AM +- [ ] Recherche filtre (n° + nom + email minimum) +- [ ] **Aucun** bouton créer dans cet onglet +- [ ] Pas de régression validation pending (valider / refuser) + +--- + +## Back (info — Cursor back séparé si besoin) + +- Liste unifiée : **pas bloquante** si composition front +- Optionnel : `GET /api/v1/dossiers` (liste) pour perf / pagination plus tard +- `GET /dossiers/:numero` déjà là (#119) + +--- + +## Branche + +`feature/153-onglet-dossiers` (depuis `develop`)