# 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`)