# 🎫 Liste Complète des Tickets - Projet P'titsPas

**Version** : 1.9
**Date** : 23 Avril 2026
**Auteur** : Équipe PtitsPas  
**Estimation totale** : ~220h

---

## 🔗 Liste des tickets Gitea

**Les numéros de section dans ce document = numéros d’issues Gitea** (ticket #14 = issue Gitea #14, etc.). Le **numéro d’une nouvelle issue** n’est pas choisi dans ce fichier : il est **attribué par Gitea** (champ `number` dans la réponse JSON du `POST` création d’issue, ou affiché dans l’UI après création). Procédure : [**26_GITEA-API.md**](./26_GITEA-API.md) (§ 2 authentification, § 3.2 issues). Source dépôt : `jmartin/petitspas` (état au 25 mars 2026 ; #106, #107, #109, #119 fermés via API).

| Gitea # | Titre (dépôt) | Statut |
|--------|----------------|--------|
| 3 | [BDD] Ajout champs manquants conformité CDC | ✅ Fermé |
| 4 | [BDD] Ajout table/champ présentation dossier parent | ✅ Fermé |
| 5 | [BDD] Ajout gestion tokens création mot de passe | ✅ Fermé |
| 6 | [BDD] Ajout champ genre obligatoire enfants | ✅ Fermé |
| 7 | [BDD] Supprimer champs obsolètes | ✅ Fermé |
| 8 | [BDD] Table configuration système | ✅ Fermé |
| 9 | [BDD] Tables documents légaux & acceptations | ✅ Fermé |
| 10 | [Backend] Service Configuration | ✅ Fermé |
| 11 | [Backend] API Configuration | ✅ Fermé |
| 12 | [Backend] Guard Configuration Initiale | ✅ Fermé |
| 13 | [Backend] Adaptation MailService pour config dynamique | ✅ Fermé |
| 14 | [Frontend] Panneau Paramètres / Configuration (première config + accès permanent) | Ouvert |
| 15 | [Frontend] Écran Paramètres (accès permanent) / Intégration panneau | Ouvert |
| 16 | [Doc] Documentation configuration on-premise | Ouvert |
| 17 | [Backend] API Création gestionnaire | ✅ Terminé |
| 18 | [Backend] API Inscription Parent - REFONTE (Workflow complet 6 étapes) | ✅ Terminé |
| 19 | [Backend] API Inscription Parent (étape 2 - Parent 2) | ✅ Terminé |
| 20 | [Backend] API Inscription Parent (étape 3 - Enfants) | ✅ Terminé |
| 21 | [Backend] API Inscription Parent (étape 4-6 - Finalisation) | ✅ Terminé |
| 24 | [Backend] API Création mot de passe | Ouvert |
| 25 | [Backend] API Liste comptes en attente | ✅ Fermé (obsolète, couvert #103-#111) |
| 26 | [Backend] API Validation/Refus comptes | ✅ Fermé (obsolète, couvert #103-#111) |
| 27 | [Backend] Service Email - Installation Nodemailer | ✅ Fermé (obsolète, couvert #103-#111) |
| 28 | [Backend] Templates Email - Validation | Ouvert |
| 29 | [Backend] Templates Email - Refus | ✅ Fermé (obsolète, couvert #103-#111) |
| 30 | [Backend] Connexion - Vérification statut | ✅ Fermé (obsolète, couvert #103-#111) |
| 31 | [Backend] Changement MDP obligatoire première connexion | ✅ Terminé |
| 32 | [Backend] Service Documents Légaux | Ouvert |
| 33 | [Backend] API Documents Légaux | Ouvert |
| 34 | [Backend] Traçabilité acceptations documents | Ouvert |
| 35 | [Frontend] Écran Création Gestionnaire | Ouvert |
| 36 | [Frontend] Inscription Parent - Étape 1 (Parent 1) | ✅ Terminé |
| 37 | [Frontend] Inscription Parent - Étape 2 (Parent 2) | Ouvert |
| 38 | [Frontend] Inscription Parent - Étape 3 (Enfants) | ✅ Terminé |
| 39 | [Frontend] Inscription Parent - Étapes 4-6 (Finalisation) | ✅ Terminé |
| 40 | [Frontend] Inscription AM - Panneau 1 (Identité) | ✅ Terminé |
| 41 | [Frontend] Inscription AM - Panneau 2 (Infos pro) | ✅ Terminé |
| 42 | [Frontend] Inscription AM - Finalisation | ✅ Terminé |
| 43 | [Frontend] Écran Création Mot de Passe | Ouvert |
| 44 | [Frontend] Dashboard Gestionnaire - Structure | ✅ Terminé |
| 45 | [Frontend] Dashboard Gestionnaire - Liste Parents | ✅ Fermé (obsolète, couvert #103-#111) |
| 46 | [Frontend] Dashboard Gestionnaire - Liste AM | ✅ Fermé (obsolète, couvert #103-#111) |
| 47 | [Frontend] Écran Changement MDP Obligatoire | ✅ Fermé |
| 48 | [Frontend] Gestion Erreurs & Messages | Ouvert |
| 49 | [Frontend] Écran Gestion Documents Légaux (Admin) | Ouvert |
| 50 | [Frontend] Affichage dynamique CGU lors inscription | Ouvert |
| 51 | [Frontend] Écran Logs Admin (optionnel v1.1) | Ouvert |
| 52 | [Tests] Tests unitaires Backend | Ouvert |
| 53 | [Tests] Tests intégration Backend | Ouvert |
| 54 | [Tests] Tests E2E Frontend | Ouvert |
| 55 | [Doc] Documentation API OpenAPI/Swagger | Ouvert |
| 56 | [Backend] Service Upload & Stockage fichiers | Ouvert |
| 58 | [Backend] Service Logging (Winston) | Ouvert |
| 59 | [Infra] Volume Docker pour uploads | Ouvert |
| 60 | [Infra] Volume Docker pour documents légaux | Ouvert |
| 61 | [Doc] Guide installation & configuration | Ouvert |
| 62 | [Doc] Amendement CDC v1.4 - Suppression SMS | Ouvert |
| 63 | [Doc] Rédaction CGU/Privacy génériques v1 | Ouvert |
| 78 | [Frontend] Refonte Infrastructure Formulaires Multi-modes | ✅ Terminé |
| 79 | [Frontend] Renommer "Nanny" en "Assistante Maternelle" (AM) | ✅ Terminé |
| 81 | [Frontend] Corrections suite refactoring widgets | ✅ Terminé |
| 83 | [Frontend] Adapter RegisterChoiceScreen pour mobile | ✅ Terminé |
| 86 / 88 | Doublons fermés (voir #12, #14, #15) | ✅ Fermé |
| 89 | Log des appels API en mode debug | Ouvert |
| 91 | [Frontend] Inscription AM – Branchement soumission formulaire à l'API | Ouvert |
| 92 | [Frontend] Dashboard Admin - Données réelles et branchement API | ✅ Terminé |
| 93 | [Frontend] Panneau Admin - Homogénéisation des onglets | ✅ Fermé |
| 94 | [Backend] Relais - Modèle, API CRUD et liaison gestionnaire | ✅ Terminé |
| 95 | [Frontend] Admin - Gestion des Relais et rattachement gestionnaire | ✅ Fermé |
| 96 | [Frontend] Admin - Création administrateur via modale (sans relais) | ✅ Terminé |
| 97 | [Backend] Harmoniser API création administrateur avec le contrat frontend | ✅ Terminé |
| 101 | [Frontend] Inscription Parent – Branchement soumission formulaire à l'API | Ouvert |
| 103 | Numéro de dossier – backend | Ouvert |
| 104 | Numéro de dossier – frontend | Ouvert |
| 105 | Statut « refusé » | Ouvert |
| 106 | Liste familles en attente | ✅ Fermé |
| 107 | Onglet « À valider » + listes | ✅ Fermé |
| 108 | Validation dossier famille | Ouvert |
| 109 | Modale de validation | ✅ Fermé |
| 110 | Refus sans suppression | Ouvert |
| 111 | Reprise après refus – backend | Ouvert |
| 112 | Reprise après refus – frontend | Ouvert |
| 113 | Doublons à l'inscription | Ouvert |
| 114 | Doublons – alerte gestionnaire | Ouvert |
| 115 | Rattachement parent – backend | Ouvert |
| 116 | Rattachement parent – frontend | Ouvert |
| 117 | Évolution du cahier des charges | Ouvert |
| 119 | Endpoint unifié GET /dossiers/:numeroDossier (AM ou famille) | ✅ Fermé |
| 120 | [Full-stack] Inscription AM — photo, API et UX alignés sur les parents (suite #91) | ✅ Fermé |
| 127 | [Full-stack] Mot de passe oublié — flux complet (demande, e-mail, réinitialisation) | ✅ Fermé · **milestone 0.1.0** + label **v0.1.0** (Gitea) |

*Gitea #1 et #2 = anciens tickets de test (fermés). Liste complète : https://git.ptits-pas.fr/jmartin/petitspas/issues*

*Tickets #103 à #117 = périmètre « Validation des nouveaux comptes par le gestionnaire » (voir plan de spec).*

---

## 📊 Vue d'ensemble

### Répartition par priorité

| Priorité | Nombre | Estimation | Description |
|----------|--------|------------|-------------|
| **P0** | 7 tickets | ~5h | Amendements BDD (BLOQUANT) |
| **P1** | 7 tickets | ~22h | Configuration système (BLOQUANT) |
| **P2** | 18 tickets | ~50h | Backend métier |
| **P3** | 23 tickets | ~83h | Frontend |
| **P4** | 4 tickets | ~24h | Tests & Documentation |
| **CRITIQUES** | 6 tickets | ~13h | Upload, Logs, Infra, CDC |
| **JURIDIQUE** | 1 ticket | ~8h | Rédaction CGU/Privacy |
| **TOTAL** | **66 tickets** | **~220h** | |

---

## 🔴 PRIORITÉ 0 : Amendements Base de Données (BLOQUANT)

### Ticket #3 : [BDD] Ajout champs manquants conformité CDC
**Estimation** : 1h  
**Labels** : `bdd`, `p0-bloquant`, `cdc`

**Description** :
Ajouter les champs manquants dans la base de données pour être conforme au Cahier des Charges v1.3.

**Tâches** :
- [ ] Ajouter `ville_naissance` VARCHAR(150) dans `utilisateurs`
- [ ] Ajouter `pays_naissance` VARCHAR(100) dans `utilisateurs`
- [ ] Ajouter `date_acceptation_cgu` TIMESTAMPTZ dans `utilisateurs`
- [ ] Rendre `nir_chiffre` NOT NULL dans `assistantes_maternelles`
- [ ] Ajouter `date_obtention_agrement` DATE dans `assistantes_maternelles`
- [ ] Créer migration Prisma
- [ ] Tester migration sur BDD de dev

---

### Ticket #4 : [BDD] Ajout table/champ présentation dossier parent
**Estimation** : 30min  
**Labels** : `bdd`, `p0-bloquant`, `cdc`

**Description** :
Ajouter un champ pour stocker la présentation du dossier parent (étape 4 de l'inscription).

**Tâches** :
- [ ] Ajouter `presentation_dossier` TEXT dans table `parents`
- [ ] Créer migration Prisma
- [ ] Tester migration

---

### Ticket #5 : [BDD] Ajout gestion tokens création mot de passe ✅
**Estimation** : 30min  
**Labels** : `bdd`, `p0-bloquant`, `security`  
**Statut** : ✅ TERMINÉ (Fermé le 2025-11-28)

**Description** :
Ajouter les champs nécessaires pour gérer les tokens de création de mot de passe (workflow sans MDP lors inscription).

**Tâches** :
- [x] Ajouter `password_reset_token` UUID dans `utilisateurs`
- [x] Ajouter `password_reset_expires` TIMESTAMPTZ dans `utilisateurs`
- [x] Créer migration Prisma
- [x] Tester migration

---

### Ticket #6 : [BDD] Ajout champ genre obligatoire enfants ✅
**Estimation** : 30min  
**Labels** : `bdd`, `p0-bloquant`, `cdc`  
**Statut** : ✅ TERMINÉ (Fermé le 2025-11-28)

**Description** :
Ajouter le champ `genre` obligatoire (H/F) dans la table `enfants`.

**Tâches** :
- [x] Ajouter `genre` ENUM('H', 'F') NOT NULL dans `enfants`
- [x] Créer migration Prisma
- [x] Tester migration

---

### Ticket #7 : [BDD] Supprimer champs obsolètes
**Estimation** : 30min  
**Labels** : `bdd`, `p0-bloquant`, `cleanup`

**Description** :
Supprimer les champs obsolètes identifiés lors de l'audit.

**Tâches** :
- [ ] Supprimer `mobile` dans `utilisateurs` (remplacé par `telephone`)
- [ ] Supprimer `telephone_fixe` dans `utilisateurs`
- [ ] Supprimer `annee_experience` dans `assistantes_maternelles`
- [ ] Supprimer `specialite` dans `assistantes_maternelles`
- [ ] Créer migration Prisma
- [ ] Tester migration

---

### Ticket #8 : [BDD] Table configuration système
**Estimation** : 1h  
**Labels** : `bdd`, `p0-bloquant`, `on-premise`

**Description** :
Créer la table `configuration` pour stocker les paramètres système (SMTP, app, sécurité).

**Tâches** :
- [ ] Créer table `configuration` (clé/valeur/type/catégorie)
- [ ] Créer index sur `cle` et `categorie`
- [ ] Seed valeurs par défaut (SMTP localhost, ports, etc.)
- [ ] Créer migration Prisma
- [ ] Tester migration

**Référence** : [21_CONFIGURATION-SYSTEME.md](./21_CONFIGURATION-SYSTEME.md)

---

### Ticket #9 : [BDD] Tables documents légaux & acceptations ✅
**Estimation** : 2h  
**Labels** : `bdd`, `p0-bloquant`, `rgpd`, `juridique`  
**Statut** : ✅ TERMINÉ (Fermé le 2025-11-30 - Ticket #68 sur Gitea)

**Description** :
Créer les tables pour gérer les versions des documents légaux (CGU/Privacy) et tracer les acceptations utilisateurs.

**Tâches** :
- [ ] Créer table `documents_legaux` (versioning + hash SHA-256)
- [ ] Créer table `acceptations_documents` (traçabilité RGPD)
- [ ] Modifier table `utilisateurs` (colonnes version acceptée)
- [ ] Créer index
- [ ] Seed documents génériques v1
- [ ] Créer migration Prisma
- [ ] Tester migration

**Référence** : [22_DOCUMENTS-LEGAUX.md](./juridique/22_DOCUMENTS-LEGAUX.md)

---

## 🟠 PRIORITÉ 1 : Configuration Système (BLOQUANT)

### Ticket #10 : [Backend] Service Configuration
**Estimation** : 4h  
**Labels** : `backend`, `p1-bloquant`, `on-premise`

**Description** :
Créer le service de configuration avec cache en mémoire et chiffrement AES-256.

**Tâches** :
- [ ] Créer `ConfigService` avec cache Map
- [ ] Implémenter `get(key, defaultValue)`
- [ ] Implémenter `set(key, value, userId)`
- [ ] Implémenter `getByCategory(category)`
- [ ] Implémenter chiffrement/déchiffrement AES-256
- [ ] Implémenter conversion de types (string/number/boolean/json)
- [ ] Implémenter `loadCache()` au démarrage
- [ ] Tests unitaires (mock repository)

**Référence** : [21_CONFIGURATION-SYSTEME.md](./21_CONFIGURATION-SYSTEME.md#service-configuration)

---

### Ticket #11 : [Backend] API Configuration
**Estimation** : 3h  
**Labels** : `backend`, `p1-bloquant`, `on-premise`

**Description** :
Créer les endpoints REST pour gérer la configuration système.

**Tâches** :
- [ ] `GET /api/v1/configuration/:category` (super_admin only)
- [ ] `PATCH /api/v1/configuration/bulk` (mise à jour multiple)
- [ ] `POST /api/v1/configuration/test-smtp` (test connexion + envoi email)
- [ ] Guards (super_admin only)
- [ ] Validation DTO
- [ ] Tests unitaires

**Référence** : [21_CONFIGURATION-SYSTEME.md](./21_CONFIGURATION-SYSTEME.md#apis-configuration)

---

### Ticket #12 : [Backend] Guard Configuration Initiale
**Estimation** : 2h  
**Labels** : `backend`, `p1-bloquant`, `on-premise`

**Description** :
Créer un Guard/Middleware qui détecte si la configuration initiale est incomplète. Le frontend affiche alors directement le panneau Configuration du dashboard et bloque la navigation jusqu'à sauvegarde (pas de page dédiée `/admin/setup`).

**Tâches** :
- [ ] Créer `SetupGuard`
- [ ] Vérifier `setup_completed` dans ConfigService
- [ ] Si false : autoriser accès au dashboard et aux APIs configuration (le frontend gère l’affichage du panneau Config et le blocage des onglets)
- [ ] Exemption pour routes publiques (login, register) et pour les APIs `/api/v1/configuration`
- [ ] Tests unitaires

**Référence** : [21_CONFIGURATION-SYSTEME.md](./21_CONFIGURATION-SYSTEME.md#workflow-setup-initial)

*Issue Gitea #86 fermée en doublon ; ce ticket (#12) est la référence.*

---

### Ticket #13 : [Backend] Adaptation MailService pour config dynamique
**Estimation** : 3h  
**Labels** : `backend`, `p1-bloquant`, `on-premise`, `email`

**Description** :
Adapter le service email pour utiliser la configuration dynamique depuis la BDD au lieu de variables d'environnement hardcodées.

**Tâches** :
- [ ] Remplacer `mail.ptits-pas.fr` hardcodé par `ConfigService.get('smtp_host')`
- [ ] Lecture config SMTP depuis BDD (host, port, secure, auth, user, pass)
- [ ] Lecture expéditeur depuis BDD (from_name, from_address)
- [ ] Recréation du transport Nodemailer dynamique
- [ ] Tests unitaires (mock ConfigService)

**⚠️ IMPORTANT** : Ce ticket corrige tous les hardcoding de `mail.ptits-pas.fr` dans le code.

---

### Ticket #14 : [Frontend] Panneau Paramètres / Configuration (première config + accès permanent)
**Estimation** : 5h  
**Labels** : `frontend`, `p1-bloquant`, `on-premise`

**Description** :
Un seul panneau **Paramètres / Configuration** dans le dashboard admin, avec **3 sections** sur une même page (pas d’onglets dédiés au formulaire : Email, Personnalisation, Avancé). Utilisé à la fois pour la **première configuration** (au déploiement, par un opérateur) et pour l’**accès permanent** (menu ou onglet Configuration). Lorsque `setup_completed` est false, le dashboard affiche directement ce panneau et **bloque la navigation** (autres onglets désactivés) jusqu’à sauvegarde.

**Tâches** :
- [ ] Panneau Configuration dans le dashboard admin (onglet ou entrée de menu dédiée)
- [ ] Une seule page avec 3 sections : **Email (SMTP)** ; **Personnalisation** (nom app, URL, logo) ; **Avancé** (durées token MDP, JWT, taille max upload)
- [ ] Bouton "Tester la connexion SMTP" (appel API + feedback)
- [ ] Validation côté client
- [ ] Sauvegarde : `PATCH /configuration/bulk` puis `POST /configuration/setup/complete` si première config
- [ ] Si `setup_completed` false au chargement : afficher ce panneau par défaut et bloquer les autres onglets jusqu’à sauvegarde
- [ ] Message succès ; après première config, déblocage de la navigation

**Référence** : [21_CONFIGURATION-SYSTEME.md](./21_CONFIGURATION-SYSTEME.md#interface-admin)

*Issue Gitea #87 fermée en doublon de #14.*

---

### Ticket #15 : [Frontend] Écran Paramètres (accès permanent) / Intégration panneau
**Estimation** : 1h  
**Labels** : `frontend`, `p1-bloquant`, `on-premise`

**Description** :
S’assurer que le panneau Paramètres (décrit en #14) est accessible en permanence depuis le dashboard admin (onglet « Configuration » ou « Paramètres »). Même interface que pour la première config ; affichage des valeurs actuelles, modification et sauvegarde sans blocage de navigation.

**Tâches** :
- [ ] Onglet ou entrée menu « Configuration » / « Paramètres » dans le dashboard admin pointant vers le même panneau que #14
- [ ] Chargement des valeurs actuelles (GET `/configuration` ou par catégorie)
- [ ] Modification et sauvegarde (PATCH bulk) sans appel à `setup/complete`

*Issue Gitea #88 fermée en doublon ; ce ticket (#15) est la référence.*

---

### Ticket #16 : [Doc] Documentation configuration on-premise
**Estimation** : 2h  
**Labels** : `documentation`, `p1-bloquant`, `on-premise`

**Description** :
Rédiger la documentation pour aider les collectivités à configurer l'application.

**Tâches** :
- [ ] Guide d'installation pour collectivités
- [ ] Liste des paramètres SMTP courants (Office 365, Gmail, serveurs locaux)
- [ ] Exemples de configuration
- [ ] Troubleshooting SMTP
- [ ] Variables `.env` requises
- [ ] Génération secrets (JWT, encryption key)

**Référence** : [21_CONFIGURATION-SYSTEME.md](./21_CONFIGURATION-SYSTEME.md)

---

### Ticket #86 / #88 : Doublons fermés
*#86* fermé en doublon de **#12** (Guard). *#88* fermé en doublon de **#15** (Intégration panneau). Voir les tickets #12, #14 et #15 pour le travail à faire.

---

## 🟢 PRIORITÉ 2 : Backend - Authentification & Gestion Comptes

### Ticket #17 : [Backend] API Création gestionnaire ✅
**Estimation** : 3h  
**Labels** : `backend`, `p2`, `auth`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-23)

**Description** :
Créer l'endpoint pour permettre au super admin de créer des gestionnaires.

**Tâches** :
- [x] Endpoint `POST /api/v1/gestionnaires`
- [x] Validation DTO
- [x] Hash bcrypt
- [x] Flag `changement_mdp_obligatoire = TRUE`
- [x] Guards (super_admin only)
- [x] Email de notification (utiliser MailService avec config dynamique)
- [x] Tests unitaires

**Référence** : [20_WORKFLOW-CREATION-COMPTE.md](./20_WORKFLOW-CREATION-COMPTE.md#étape-2--création-dun-gestionnaire)

---

### Ticket #18 : [Backend] API Inscription Parent (étape 1 - Parent 1)
**Estimation** : 4h  
**Labels** : `backend`, `p2`, `auth`, `cdc`

**Description** :
Créer l'endpoint d'inscription Parent (étape 1/6 : informations Parent 1).

**Tâches** :
- [ ] Endpoint `POST /api/v1/auth/register/parent`
- [ ] Validation DTO (sans mot de passe)
- [ ] Génération token création MDP (UUID)
- [ ] Durée token : Lire depuis `ConfigService.get('password_reset_token_expiry_days')`
- [ ] Création utilisateur + entité parent
- [ ] Statut `en_attente`
- [ ] Tests unitaires

**Référence** : [20_WORKFLOW-CREATION-COMPTE.md](./20_WORKFLOW-CREATION-COMPTE.md#étape-3--inscription-dun-parent)

---

### Ticket #19 : [Backend] API Inscription Parent (étape 2 - Parent 2)
**Estimation** : 2h  
**Labels** : `backend`, `p2`, `auth`, `cdc`

**Description** :
Ajouter la gestion du co-parent (Parent 2) dans l'endpoint d'inscription.

**Tâches** :
- [ ] Ajout gestion co-parent dans endpoint
- [ ] Relation `id_co_parent` dans table `parents`
- [ ] Génération token pour Parent 2
- [ ] Tests unitaires

---

### Ticket #18 : [Backend] API Inscription Parent - REFONTE (Workflow complet 6 étapes) ✅
**Estimation** : 4h  
**Labels** : `backend`, `p2`, `auth`, `cdc`, `upload`  
**Statut** : ✅ TERMINÉ (Fermé le 2025-12-01)

**Description** :
Refonte complète de l'API d'inscription parent pour gérer le workflow complet en 6 étapes dans une seule transaction.

**Tâches** :
- [ ] Endpoint `POST /api/v1/enfants`
- [ ] Upload photo (Multer)
- [ ] Taille max : Lire depuis `ConfigService.get('max_upload_size_mb')`
- [ ] Validation genre obligatoire (H/F)
- [ ] Gestion enfant à naître vs né
- [ ] Rattachement aux 2 parents (si Parent 2 existe)
- [ ] Tests unitaires

---

### Ticket #19 : [Backend] API Inscription Parent (étape 2 - Parent 2) ✅
**Estimation** : 2h  
**Labels** : `backend`, `p2`, `auth`, `cdc`  
**Statut** : ✅ TERMINÉ (Fermé le 2025-12-01)

**Description** :
Gestion du co-parent (Parent 2) dans l'endpoint d'inscription (intégré dans la refonte #18).

**Tâches** :
- [ ] Enregistrement présentation dossier
- [ ] Enregistrement acceptation CGU avec horodatage
- [ ] Endpoint récapitulatif
- [ ] Tests unitaires

---

### Ticket #20 : [Backend] API Inscription Parent (étape 3 - Enfants) ✅
**Estimation** : 4h  
**Labels** : `backend`, `p2`, `auth`, `cdc`, `upload`  
**Statut** : ✅ TERMINÉ (Fermé le 2025-12-01)

**Description** :
Gestion des enfants dans l'endpoint d'inscription (intégré dans la refonte #18).

**Tâches** :
- [ ] Endpoint `POST /api/v1/auth/register/am`
- [ ] Upload photo (Multer)
- [ ] Taille max : Lire depuis ConfigService
- [ ] Consentement photo avec horodatage
- [ ] Génération token création MDP
- [ ] Tests unitaires

**Référence** : [20_WORKFLOW-CREATION-COMPTE.md](./20_WORKFLOW-CREATION-COMPTE.md#étape-3bis--inscription-dune-assistante-maternelle)

---

### Ticket #21 : [Backend] API Inscription Parent (étape 4-6 - Finalisation) ✅
**Estimation** : 3h  
**Labels** : `backend`, `p2`, `auth`, `cdc`  
**Statut** : ✅ TERMINÉ (Fermé le 2025-12-01)

**Description** :
Finalisation de l'inscription parent (présentation, CGU, récapitulatif - intégré dans la refonte #18).

**Tâches** :
- [ ] Validation NIR (15 chiffres obligatoire)
- [ ] Date/lieu de naissance
- [ ] Numéro agrément + date obtention
- [ ] Capacité accueil
- [ ] Tests unitaires

---

### Ticket #24 : [Backend] API Création mot de passe ✅
**Estimation** : 3h  
**Labels** : `backend`, `p2`, `auth`, `security`  
**Statut** : ✅ TERMINÉ (livré sur `develop` + `master`, févr. 2026 — aligné ticket Gitea **#123** durcissement token)

**Description** :
Créer les endpoints pour permettre aux utilisateurs de créer leur mot de passe via le lien reçu par email.

**Tâches** :
- [x] Endpoint `GET /api/v1/auth/verify-token?token=<uuid>`
- [x] Endpoint `POST /api/v1/auth/create-password` (body : `token`, `password`, `password_confirmation`)
- [x] Validation token (existe, non expiré, non utilisé) + invalidation explicite si expiré
- [x] Hash bcrypt + suppression token (usage unique atomique côté SQL)
- [x] Activation compte (`statut = actif`, `changement_mdp_obligatoire = false`)
- [ ] Tests unitaires / e2e (hors périmètre immédiat ; suite Jest actuelle à corriger séparément)

**Référence** : [20_WORKFLOW-CREATION-COMPTE.md](./20_WORKFLOW-CREATION-COMPTE.md#étape-7--création-du-mot-de-passe)  
**Suite** : alignement **frontend** → ticket **#43** (appels explicites ci-dessous).

---

### Ticket #25 : [Backend] API Liste comptes en attente
**Estimation** : 2h  
**Labels** : `backend`, `p2`, `gestionnaire`

**Description** :
Créer les endpoints pour lister les comptes en attente de validation.

**Tâches** :
- [ ] Endpoint `GET /api/v1/parents?statut=en_attente`
- [ ] Endpoint `GET /api/v1/assistantes-maternelles?statut=en_attente`
- [ ] Guards (gestionnaire/admin only)
- [ ] Filtres + pagination
- [ ] Tests unitaires

**Référence** : [20_WORKFLOW-CREATION-COMPTE.md](./20_WORKFLOW-CREATION-COMPTE.md#étape-4--consultation-des-demandes-par-le-gestionnaire)

---

### Ticket #26 : [Backend] API Validation/Refus comptes
**Estimation** : 3h  
**Labels** : `backend`, `p2`, `gestionnaire`

**Description** :
Créer les endpoints pour valider ou refuser les comptes en attente.

**Tâches** :
- [ ] Endpoint `PATCH /api/v1/users/{id}/valider`
- [ ] Endpoint `PATCH /api/v1/users/{id}/suspendre`
- [ ] Création entrée table `validations`
- [ ] Guards (gestionnaire/admin only)
- [ ] Tests unitaires

**Référence** : [20_WORKFLOW-CREATION-COMPTE.md](./20_WORKFLOW-CREATION-COMPTE.md#étape-5--validation-dun-compte)

---

### Ticket #27 : [Backend] Service Email - Installation Nodemailer
**Estimation** : 2h  
**Labels** : `backend`, `p2`, `email`

**Description** :
Installer et configurer Nodemailer pour l'envoi d'emails.

**Tâches** :
- [ ] Installation Nodemailer + types
- [ ] Configuration de base
- [ ] Service `MailService` avec méthodes de base
- [ ] Tests unitaires (mock SMTP)

---

### Ticket #28 : [Backend] Templates Email - Validation ✅
**Estimation** : 3h  
**Labels** : `backend`, `p2`, `email`  
**Statut** : ✅ TERMINÉ

**Description** :
Créer les templates d'emails pour la validation des comptes (avec lien création MDP).

**Tâches** :
- [x] Template **Parent** (création MDP, parent principal ou co-parent) — `account-validated-parent.hbs`
- [x] URL app : Lire depuis `ConfigService.get('app_url')` (lien `/create-password?token=…`)
- [x] Nom app : Lire depuis `ConfigService.get('app_name')`
- [x] Expéditeur : via `sendEmail` (email_from_name / email_from_address)
- [x] Template AM (création MDP) — `account-validated-am.hbs`
- [x] Intégration Handlebars + copie `.hbs` dans `dist` (`nest-cli.json` assets)
- [x] Envoi déclenché dans `UserService.validateUser` (parent / AM sans mot de passe) + renouvellement expiration token
- [x] Tests unitaires (`mail.service.spec.ts`, mock `sendEmail`)

**Référence** : [20_WORKFLOW-CREATION-COMPTE.md](./20_WORKFLOW-CREATION-COMPTE.md#étape-6--réception-de-la-notification)

---

### Ticket #29 : [Backend] Templates Email - Refus
**Estimation** : 1h  
**Labels** : `backend`, `p2`, `email`

**Description** :
Créer le template d'email pour le refus de compte.

**Tâches** :
- [ ] Template refus générique
- [ ] Variables dynamiques : Nom app, URL, expéditeur depuis ConfigService
- [ ] Intégration dans endpoint suspendre
- [ ] Tests d'envoi

---

### Ticket #30 : [Backend] Connexion - Vérification statut
**Estimation** : 2h  
**Labels** : `backend`, `p2`, `auth`

**Description** :
Modifier l'endpoint de connexion pour bloquer les comptes en attente ou suspendus.

**Tâches** :
- [ ] Modifier endpoint `POST /api/v1/auth/login`
- [ ] Bloquer si `statut = en_attente`
- [ ] Bloquer si `statut = suspendu`
- [ ] Messages d'erreur explicites
- [ ] Tests unitaires

**Référence** : [20_WORKFLOW-CREATION-COMPTE.md](./20_WORKFLOW-CREATION-COMPTE.md#étape-8--connexion-de-lutilisateur-validé)

---

### Ticket #31 : [Backend] Changement MDP obligatoire première connexion ✅
**Estimation** : 2h  
**Labels** : `backend`, `p2`, `auth`, `security`  
**Statut** : ✅ TERMINÉ

**Description** :
Implémenter le changement de mot de passe obligatoire pour les gestionnaires/admins à la première connexion.

**Tâches** :
- [x] Endpoint `POST /api/v1/auth/change-password-required`
- [x] Vérification flag `changement_mdp_obligatoire`
- [x] Mise à jour flag après changement
- [ ] Tests unitaires

---

### Ticket #32 : [Backend] Service Documents Légaux
**Estimation** : 4h  
**Labels** : `backend`, `p2`, `juridique`, `rgpd`

**Description** :
Créer le service de gestion des documents légaux (CGU/Privacy) avec versioning.

**Tâches** :
- [ ] `DocumentsLegauxService` complet
- [ ] Upload avec versioning auto-incrémenté
- [ ] Calcul hash SHA-256
- [ ] Activation/désactivation versions
- [ ] Méthode `getDocumentsActifs()`
- [ ] Méthode `uploadNouvelleVersion()`
- [ ] Méthode `activerVersion()`
- [ ] Méthode `listerVersions()`
- [ ] Tests unitaires

**Référence** : [22_DOCUMENTS-LEGAUX.md](./juridique/22_DOCUMENTS-LEGAUX.md#service-documents-légaux)

---

### Ticket #33 : [Backend] API Documents Légaux
**Estimation** : 3h  
**Labels** : `backend`, `p2`, `juridique`, `rgpd`

**Description** :
Créer les endpoints REST pour gérer les documents légaux.

**Tâches** :
- [ ] `GET /api/v1/documents-legaux/actifs` (public)
- [ ] `GET /api/v1/documents-legaux/:type/versions` (admin)
- [ ] `POST /api/v1/documents-legaux` (upload, admin only)
- [ ] `PATCH /api/v1/documents-legaux/:id/activer` (admin only)
- [ ] `GET /api/v1/documents-legaux/:id/download` (public)
- [ ] Guards + validation
- [ ] Tests unitaires

**Référence** : [22_DOCUMENTS-LEGAUX.md](./juridique/22_DOCUMENTS-LEGAUX.md#apis)

---

### Ticket #34 : [Backend] Traçabilité acceptations documents
**Estimation** : 2h  
**Labels** : `backend`, `p2`, `rgpd`

**Description** :
Enregistrer les acceptations de documents légaux lors de l'inscription (traçabilité RGPD).

**Tâches** :
- [ ] Enregistrement dans `acceptations_documents` lors inscription
- [ ] Capture IP + User-Agent
- [ ] API `GET /api/v1/users/:id/acceptations` (admin)
- [ ] Tests unitaires

**Référence** : [22_DOCUMENTS-LEGAUX.md](./juridique/22_DOCUMENTS-LEGAUX.md#workflow-acceptation-utilisateur)

---

### Ticket #94 : [Backend] Relais - Modèle, API CRUD et liaison gestionnaire ✅
**Estimation** : 4h
**Labels** : `backend`, `p2`, `admin`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-21)

**Description** :
Le back-office admin doit gérer des Relais avec des données réelles en base, et permettre une liaison simple avec les gestionnaires.

**Tâches** :
- [x] Créer le modèle `Relais` (nom, adresse, horaires, téléphone, actif, notes)
- [x] Exposer les endpoints admin CRUD pour les relais (`GET`, `POST`, `PATCH`, `DELETE`)
- [x] Ajouter la liaison : un gestionnaire peut être rattaché à un relais principal (`relais_id` dans `users` ?)
- [x] Validations (champs requis, format horaires)

---

### Ticket #97 : [Backend] Harmoniser API création administrateur avec le contrat frontend ✅
**Estimation** : 3h
**Labels** : `backend`, `p2`, `auth`, `admin`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-24)

**Description** :
Rendre l'API de création administrateur cohérente et stable avec le besoin frontend (modale simplifiée), en définissant un contrat clair et minimal.

**Tâches** :
- [ ] Introduire un DTO dédié `CreateAdministrateurDto`
- [ ] Champs autorisés : nom, prenom, email, password, telephone
- [ ] Champs exclus : adresse, ville, photo, etc.
- [ ] Rôle forcé à `ADMINISTRATEUR`
- [ ] Validation stricte

---

## 🟢 PRIORITÉ 3 : Frontend - Interfaces

### Ticket #35 : [Frontend] Écran Création Gestionnaire
**Estimation** : 3h  
**Labels** : `frontend`, `p3`, `auth`

**Description** :
Créer l'écran de création de gestionnaire (super admin uniquement).

**Tâches** :
- [ ] Formulaire (nom, prénom, email, MDP)
- [ ] Validation côté client
- [ ] Appel API `POST /gestionnaires`
- [ ] Messages succès/erreur

---

### Ticket #36 : [Frontend] Inscription Parent - Étape 1 (Parent 1) ✅
**Estimation** : 3h  
**Labels** : `frontend`, `p3`, `auth`, `cdc`  
**Statut** : ✅ TERMINÉ (PR #73 mergée le 2025-12-01)

**Description** :
Créer le formulaire d'inscription parent - étape 1/6 (informations Parent 1).

**Tâches** :
- [x] Formulaire identité Parent 1
- [x] Validation côté client
- [x] Pas de champ mot de passe
- [x] Navigation vers étape 2
- [x] Améliorations visuelles (labels 22px, champs 20px, espacement 32px)
- [x] Correction indicateur étape 1/6

---

### Ticket #37 : [Frontend] Inscription Parent - Étape 2 (Parent 2)
**Estimation** : 3h  
**Labels** : `frontend`, `p3`, `auth`, `cdc`

**Description** :
Créer le formulaire d'inscription parent - étape 2/6 (informations Parent 2 optionnel).

**Tâches** :
- [ ] Question "Ajouter un second parent ?"
- [ ] Formulaire identité Parent 2 (conditionnel)
- [ ] Checkbox "Même adresse"
- [ ] Navigation vers étape 3
- [ ] Pas de champ mot de passe
- [ ] Améliorations visuelles (mêmes que Step1)
- [ ] Correction indicateur étape 2/6

---

### Ticket #38 : [Frontend] Inscription Parent - Étape 3 (Enfants) ✅
**Estimation** : 4h
**Labels** : `frontend`, `p3`, `auth`, `cdc`, `upload`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-07)

**Description** :
Créer le formulaire d'inscription parent - étape 3/6 (informations enfants).

**Tâches** :
- [x] Question "Enfant déjà né ?"
- [x] Formulaire enfant (prénom, date, genre H/F obligatoire)
- [x] Upload photo (si né)
- [x] Validation taille (5MB)
- [x] Bouton "Ajouter un autre enfant"
- [x] Navigation vers étape 4

---

### Ticket #39 : [Frontend] Inscription Parent - Étapes 4-6 (Finalisation) ✅
**Estimation** : 4h
**Labels** : `frontend`, `p3`, `auth`, `cdc`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-07)

**Description** :
Créer les étapes finales de l'inscription parent (présentation, CGU, récapitulatif).

**Tâches** :
- [x] Étape 4 : Textarea présentation
- [x] Étape 5 : Checkbox CGU + liens PDF
- [x] Étape 6 : Récapitulatif complet
- [x] Bouton "Modifier" / "Valider"
- [x] Appel API final
- [x] Message confirmation

---

### Ticket #40 : [Frontend] Inscription AM - Panneau 1 (Identité) ✅
**Estimation** : 3h
**Labels** : `frontend`, `p3`, `auth`, `cdc`, `upload`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-07)

**Description** :
Créer le formulaire d'inscription AM - panneau 1/5 (identité).

**Tâches** :
- [x] Formulaire identité
- [x] Upload photo
- [x] Checkbox consentement photo
- [x] Pas de champ mot de passe
- [x] Navigation vers panneau 2

---

### Ticket #41 : [Frontend] Inscription AM - Panneau 2 (Infos pro) ✅
**Estimation** : 3h
**Labels** : `frontend`, `p3`, `auth`, `cdc`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-07)

**Description** :
Créer le formulaire d'inscription AM - panneau 2/5 (informations professionnelles).

**Tâches** :
- [x] Formulaire infos pro
- [x] Champ NIR (15 chiffres, validation)
- [x] Date/lieu naissance
- [x] Agrément + date obtention
- [x] Navigation vers présentation

---

### Ticket #42 : [Frontend] Inscription AM - Finalisation ✅
**Estimation** : 3h
**Labels** : `frontend`, `p3`, `auth`, `cdc`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-07)

**Description** :
Créer les étapes finales de l'inscription AM (présentation, CGU, récapitulatif).

**Tâches** :
- [x] Textarea présentation
- [x] Checkbox CGU + liens PDF
- [x] Récapitulatif (NIR masqué)
- [x] Appel API final
- [x] Message confirmation

---

### Ticket #43 : [Frontend] Écran Création Mot de Passe
**Estimation** : 3h  
**Labels** : `frontend`, `p3`, `auth`

**Description** :
Créer l'écran de création de mot de passe (lien reçu par email).

**Dépendance backend** : ticket **#24** / **#123** — routes disponibles sous préfixe global `api/v1` (voir `backend/src/main.ts`).

**Tâches** :
- [ ] Page `/create-password?token=<uuid>` (lecture du `token` en query)
- [ ] Au chargement (ou avant affichage formulaire) : `GET /api/v1/auth/verify-token?token=<uuid>` — si 404, message neutre type « lien invalide ou expiré »
- [ ] Formulaire MDP + confirmation
- [ ] Validation côté client (alignée backend : min 8 car., 1 maj., 1 chiffre — même règle que `change-password-required`)
- [ ] Soumission : `POST /api/v1/auth/create-password` avec JSON `{ "token", "password", "password_confirmation" }` ; gérer 400 (ex. confirmation) / 404 (token)
- [ ] Succès → redirection vers login + message de succès

---

### Ticket #127 : [Full-stack] Mot de passe oublié — flux complet (demande, e-mail, réinitialisation)
**Issue Gitea** : https://git.ptits-pas.fr/jmartin/petitspas/issues/127 (créée le 2026-04-23 via API, voir [26_GITEA-API.md](./26_GITEA-API.md)). **Version** : **milestone Gitea `0.1.0`** (périmètre release) ; en complément, label **`v0.1.0`** pour le filtrage. Roadmap : [04_ROADMAP-GENERALE.md](./04_ROADMAP-GENERALE.md) § versions incrémentales.

**Estimation** : 12h  
**Labels** : `full-stack`, `p2`, `p3`, `auth`, `security`, `cdc`

**Description** :
Couvrir **tout** le parcours « Mot de passe oublié » : distinct du flux **création** de mot de passe post-inscription (#24 / #43 / `GET verify-token` + `POST create-password`). Aujourd’hui, le lien sur l’écran de connexion (`frontend/lib/screens/auth/login_screen.dart`) envoie vers `/create-password`, ce qui est incorrect pour un utilisateur déjà enregistré qui a oublié son mot de passe.

**Tâches — Backend** :
- [ ] Analyse : réutiliser `password_reset_token` / `password_reset_expires` (et config type `password_reset_token_expiry_days`) **ou** introduire des champs / flux séparés si le même couple token/expiry sert encore à l’inscription — documenter le choix
- [ ] `POST` (ex.) `/api/v1/auth/forgot-password` : body `{ "email" }` ; toujours réponse **neutre** (ex. 204 ou message identique que l’e-mail existe ou non) pour limiter l’énumération
- [ ] Génération token, persistance, expiration ; invalidation après usage ou rotation
- [ ] Envoi e-mail via MailService (template Handlebars dédié « réinitialisation »)
- [ ] `POST` (ex.) `/api/v1/auth/reset-password` : `{ "token", "password", "password_confirmation" }` — règles de complexité alignées sur `create-password` / changement MDP
- [ ] Rate limiting / throttling par IP et/ou par e-mail
- [ ] Tests unitaires / intégration ; entrées OpenAPI

**Tâches — Frontend** :
- [ ] Écran ou bottom sheet « Saisir votre e-mail » + appel forgot-password + message générique de confirmation
- [ ] Route dédiée « nouveau mot de passe » (ex. `/reset-password?token=`) **distincte** de `/create-password` ; vérification token si endpoint dédié
- [ ] Corriger le `onPressed` du lien « Mot de passe oublié ? » sur le login : ne plus naviguer vers `/create-password` pour ce cas
- [ ] Gestion erreurs (token expiré / invalide) avec libellés neutres

**Tâches — transverses** :
- [ ] Mise à jour doc CDC / évolutions si besoin ; E2E ou scénario de test manuel référencé

**Synchronisation doc** : pour toute **nouvelle** issue à l’avenir, le numéro vient de la réponse Gitea (§ 3.2 [26_GITEA-API.md](./26_GITEA-API.md)) ou du script `bash ./scripts/create-gitea-issue.sh "Titre" "Corps"`.

---

### Ticket #44 : [Frontend] Dashboard Gestionnaire - Structure ✅
**Estimation** : 2h  
**Labels** : `frontend`, `p3`, `gestionnaire`

**Description** :
Créer la structure du dashboard gestionnaire avec 2 onglets.

**Tâches** :
- [x] Dashboard gestionnaire = même shell que admin (sans onglet Paramètres), libellé « Gestionnaire »
- [x] Réutilisation du widget UserManagementPanel (ex-AdminUserManagementPanel) avec 3 onglets (Gestionnaires, Parents, Assistantes maternelles) ; onglet Administrateurs masqué
- [x] Redirection login rôle `gestionnaire` vers `/gestionnaire-dashboard`
- [ ] État vide dédié ("Aucune demande") — optionnel, contenu actuel = listes existantes

---

### Ticket #45 : [Frontend] Dashboard Gestionnaire - Liste Parents
**Estimation** : 4h  
**Labels** : `frontend`, `p3`, `gestionnaire`

**Description** :
Créer la liste des parents en attente de validation.

**Tâches** :
- [ ] Appel API `GET /parents?statut=en_attente`
- [ ] Affichage liste avec cartes
- [ ] Boutons Valider/Refuser
- [ ] Modale confirmation
- [ ] Rafraîchissement après action

---

### Ticket #46 : [Frontend] Dashboard Gestionnaire - Liste AM
**Estimation** : 4h  
**Labels** : `frontend`, `p3`, `gestionnaire`

**Description** :
Créer la liste des assistantes maternelles en attente de validation.

**Tâches** :
- [ ] Appel API `GET /assistantes-maternelles?statut=en_attente`
- [ ] Affichage liste avec cartes
- [ ] NIR masqué
- [ ] Boutons Valider/Refuser
- [ ] Modale confirmation
- [ ] Rafraîchissement après action

---

### Ticket #47 : [Frontend] Écran Changement MDP Obligatoire
**Estimation** : 2h  
**Labels** : `frontend`, `p3`, `auth`, `security`

**Description** :
Créer l'écran de changement de mot de passe obligatoire (première connexion gestionnaire/admin).

**Tâches** :
- [ ] Détection flag `changement_mdp_obligatoire`
- [ ] Modale bloquante après login
- [ ] Formulaire MDP actuel + nouveau MDP
- [ ] Appel API
- [ ] Redirection vers dashboard

---

### Ticket #48 : [Frontend] Gestion Erreurs & Messages
**Estimation** : 2h  
**Labels** : `frontend`, `p3`, `ux`

**Description** :
Créer un système de gestion des erreurs et messages utilisateur.

**Tâches** :
- [ ] Intercepteur HTTP pour erreurs API
- [ ] Snackbars/Toasts pour succès/erreurs
- [ ] Messages explicites (compte en attente, refusé, etc.)

---

### Ticket #49 : [Frontend] Écran Gestion Documents Légaux (Admin)
**Estimation** : 5h  
**Labels** : `frontend`, `p3`, `juridique`, `admin`

**Description** :
Créer l'écran de gestion des documents légaux (CGU/Privacy) pour l'admin.

**Tâches** :
- [ ] Onglets CGU / Privacy
- [ ] Affichage version active
- [ ] Upload nouvelle version (PDF uniquement)
- [ ] Prévisualisation PDF
- [ ] Activation version
- [ ] Historique versions

**Référence** : [22_DOCUMENTS-LEGAUX.md](./juridique/22_DOCUMENTS-LEGAUX.md#interface-admin)

---

### Ticket #92 : [Frontend] Dashboard Admin - Données réelles et branchement API ✅
**Estimation** : 8h  
**Labels** : `frontend`, `p3`, `admin`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-17)

**Description** :
Le dashboard admin (onglets Gestionnaires | Parents | Assistantes maternelles | Administrateurs) affiche actuellement des données en dur (mock). Remplacer par des appels API pour afficher les vrais utilisateurs et permettre les actions de gestion (voir, modifier, valider/refuser). Référence : [90_AUDIT.md](./90_AUDIT.md).

**Fichiers concernés** :
- `gestionnaire_management_widget.dart` — liste actuellement 5 cartes "Dupont" en dur
- `parent_managmant_widget.dart` — 2 parents simulés
- `assistante_maternelle_management_widget.dart` — 2 AM simulées

**Tâches** :
- [ ] S'assurer que les endpoints backend existent (liste users par rôle)
- [ ] Onglet Gestionnaires : appel API, affichage dynamique, recherche, lien "Créer gestionnaire"
- [ ] Onglet Parents : appel API, affichage dynamique, recherche/filtres, actions Voir/Modifier/Valider/Refuser
- [ ] Onglet Assistantes maternelles : appel API, affichage dynamique, filtres, actions
- [ ] Onglet Administrateurs : liste ou placeholder documenté
- [ ] Gestion états (chargement, erreur, liste vide) et rafraîchissement après actions

**Références** : #44, #45, #46 (dashboard Gestionnaire), #25, #26 (API liste/validation), #17, #35 (création gestionnaire)

---

### Ticket #50 : [Frontend] Affichage dynamique CGU lors inscription
**Estimation** : 2h  
**Labels** : `frontend`, `p3`, `juridique`

**Description** :
Afficher dynamiquement les CGU/Privacy lors de l'inscription (avec numéro de version).

**Tâches** :
- [ ] Appel API `GET /documents-legaux/actifs`
- [ ] Liens vers PDF avec numéro de version
- [ ] Envoi version acceptée lors inscription

---

### Ticket #51 : [Frontend] Écran Logs Admin (optionnel v1.1)
**Estimation** : 4h  
**Labels** : `frontend`, `p3`, `admin`, `logs`

**Description** :
Créer l'écran de consultation des logs système (optionnel pour v1.1).

**Tâches** :
- [ ] Appel API logs
- [ ] Filtres (date, niveau, utilisateur)
- [ ] Pagination
- [ ] Export CSV

---

### Ticket #78 : [Frontend] Refonte Infrastructure Formulaires Multi-modes ✅
**Estimation** : 8h
**Labels** : `frontend`, `p3`, `refactoring`, `ux`
**Statut** : ✅ TERMINÉ (Fermé le 2026-01-27)

**Description** :
Créer une infrastructure générique pour gérer les formulaires en modes multiples (Editable / Readonly / Mobile / Desktop) afin d'harmoniser l'UI et faciliter la maintenance.

**Tâches** :
- [x] Créer `DisplayConfig` et `DisplayMode` (editable, readonly)
- [x] Créer `FormFieldWrapper` pour affichage uniforme readonly
- [x] Migrer `PersonalInfoFormScreen` (Parents/AM)
- [x] Migrer `ChildCardWidget` (Enfants)
- [x] Migrer `ProfessionalInfoFormScreen` (AM)
- [x] Migrer `PresentationFormScreen` (Motivation/CGU)
- [x] Implémenter layout "Vintage" (2:1) pour Desktop Readonly
- [x] Implémenter layout adaptatif pour Mobile Readonly
- [x] Harmoniser styles (champs beiges, polices)

---

### Ticket #79 : [Frontend] Renommer "Nanny" en "Assistante Maternelle" (AM) ✅
**Estimation** : 2h
**Labels** : `frontend`, `p3`, `refactoring`, `cdc`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-07)

**Description** :
Renommage complet de "Nanny" en "AM" dans le frontend pour cohérence avec le CDC.

**Tâches** :
- [x] Modèles : nanny_registration_data.dart -> am_registration_data.dart
- [x] Écrans : nanny_register_*.dart -> am_register_*.dart
- [x] Routes : /nanny-register -> /am-register
- [x] Suppression fichiers obsolètes

---

### Ticket #81 : [Frontend] Corrections suite refactoring widgets ✅
**Estimation** : 2h
**Labels** : `frontend`, `p3`, `bugfix`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-07)

**Description** :
Corrections et ajustements suite au refactoring des widgets.

**Corrections :**
- [x] Erreurs compilation (updateParent1/2, updateIdentityInfo)
- [x] Routes obsolètes supprimées
- [x] Toggles Parent Step 2 (2 côte à côte)
- [x] Positionnement éléments dans cartes

---

### Ticket #83 : [Frontend] Adapter RegisterChoiceScreen pour mobile ✅
**Estimation** : 3h
**Labels** : `frontend`, `p3`, `responsive`, `ux`
**Statut** : ✅ TERMINÉ (Fermé le 2026-01-27)

**Description** :
Adapter l'écran de choix Parent/AM pour une meilleure expérience mobile et cohérence avec les autres écrans.

**Tâches :**
- [x] Implémentation responsive avec LayoutBuilder (mobile < 900px)
- [x] Mode mobile : titre au-dessus, carte pleine largeur (ratio 2/3), boutons verticaux
- [x] Mode desktop : chevron haut-gauche, layout texte/carte côte à côte
- [x] Extraction logique carte dans ChoiceCardWidget réutilisable
- [x] Bouton "Précédent" mobile avec CustomNavigationButton + HoverReliefWidget
- [x] Tailles icônes augmentées (140px mobile, 170px desktop)

---

### Ticket #91 : [Frontend] Inscription AM – Branchement soumission formulaire à l'API
**Estimation** : 3h
**Labels** : `frontend`, `p3`, `auth`, `cdc`

**Description** :
Branchement du formulaire d'inscription AM (étape 4) à l'endpoint d'inscription.

**Tâches** :
- [ ] Construire le body (DTO) à partir de `AmRegistrationData`
- [ ] Appel HTTP `POST /api/v1/auth/register/am`
- [ ] Gestion réponse (201 : succès + redirection ; 4xx : erreur)
- [ ] Conversion photo en base64 si nécessaire

---

### Ticket #101 : [Frontend] Inscription Parent – Branchement soumission formulaire à l'API
**Estimation** : 4h
**Labels** : `frontend`, `p3`, `auth`, `cdc`

**Description** :
Branchement du formulaire d'inscription parent (étape 5, récapitulatif) à l'endpoint d'inscription. Aujourd'hui la soumission n'appelle pas l'API : elle affiche uniquement une modale de confirmation puis redirige vers le login. Ce ticket vise à envoyer les données collectées (Parent 1, Parent 2 optionnel, enfants, présentation, CGU) à l'API.

**Tâches** :
- [ ] Créer un service ou méthode (ex. `AuthService.registerParent` ou `UserService`) appelant `POST /api/v1/auth/register/parent`
- [ ] Construire le body (DTO) à partir de `UserRegistrationData` (parent1, parent2, children, motivationText, CGU acceptée, etc.) en cohérence avec le contrat backend (voir ticket #18 refonte)
- [ ] Dans `ParentRegisterStep5Screen`, au clic « Soumettre » : appel API puis en cas de succès afficher la modale et redirection vers `/login` ; en cas d'erreur afficher le message (SnackBar/dialog)
- [ ] Gestion des photos enfants (base64 ou multipart selon API)
- [ ] Optionnel : réinitialiser ou conserver `UserRegistrationData` après succès (selon UX)

**Référence** : [20_WORKFLOW-CREATION-COMPTE.md](./20_WORKFLOW-CREATION-COMPTE.md#étape-3--inscription-dun-parent), backend #18 (refonte API inscription parent).

**Création** : issue Gitea #101 créée. Pour recréer ou script : `node backend/scripts/create-gitea-issue-parent-api.js` (token dans `.gitea-token` ou voir [26_GITEA-API.md](./26_GITEA-API.md)).

---

### Ticket #93 : [Frontend] Panneau Admin - Homogénéisation des onglets ✅
**Estimation** : 4h
**Labels** : `frontend`, `p3`, `admin`, `ux`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-24)

**Description** :
Uniformiser l'UI/UX des 4 onglets du dashboard admin (Gestionnaires, Parents, AM, Admins).

**Tâches** :
- [ ] Standardiser le header de liste (Recherche, Filtres, Bouton Action)
- [ ] Standardiser les cartes utilisateurs (`ListTile` uniforme)
- [ ] Standardiser les états (Loading, Erreur, Vide)
- [ ] Factoriser les composants partagés

---

### Ticket #95 : [Frontend] Admin - Gestion des Relais et rattachement gestionnaire ✅
**Estimation** : 5h
**Labels** : `frontend`, `p3`, `admin`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-24)

**Description** :
Interface de gestion des Relais dans le dashboard admin et rattachement des gestionnaires.

**Tâches** :
- [ ] Section Relais avec 2 sous-onglets : Paramètres techniques / Paramètres territoriaux
- [ ] Liste, Création, Édition, Activation/Désactivation des relais
- [ ] Champs UI : nom, adresse, horaires, téléphone, statut, notes
- [ ] Onglet Gestionnaires : Ajout contrôle de rattachement au relais principal

---

### Ticket #96 : [Frontend] Admin - Création administrateur via modale (sans relais) ✅
**Estimation** : 3h
**Labels** : `frontend`, `p3`, `admin`
**Statut** : ✅ TERMINÉ (Fermé le 2026-02-24)

**Description** :
Permettre la création d'un administrateur via une modale simple depuis le dashboard admin.

**Tâches** :
- [x] Bouton "Créer administrateur" dans l'onglet Administrateurs
- [x] Modale avec formulaire simplifié (Nom, Prénom, Email, MDP, Téléphone)
- [x] Appel API `POST /users` (ou endpoint dédié si #97 implémenté)
- [x] Gestion succès/erreur et rafraîchissement liste

---

## 🔵 PRIORITÉ 4 : Tests & Documentation

### Ticket #52 : [Tests] Tests unitaires Backend
**Estimation** : 8h  
**Labels** : `tests`, `p4`, `backend`

**Description** :
Créer les tests unitaires pour tous les services et controllers backend.

**Tâches** :
- [ ] Tests services (auth, user, mail, config, documents)
- [ ] Tests controllers
- [ ] Couverture > 80%
- [ ] Mocks (repository, ConfigService, MailService)

---

### Ticket #53 : [Tests] Tests intégration Backend
**Estimation** : 5h  
**Labels** : `tests`, `p4`, `backend`

**Description** :
Créer les tests d'intégration pour les workflows complets.

**Tâches** :
- [ ] Workflow complet Parent
- [ ] Workflow complet AM
- [ ] Workflow refus
- [ ] Workflow configuration initiale

---

### Ticket #54 : [Tests] Tests E2E Frontend
**Estimation** : 8h  
**Labels** : `tests`, `p4`, `frontend`

**Description** :
Créer les tests end-to-end pour les parcours utilisateurs.

**Tâches** :
- [ ] Workflow configuration initiale
- [ ] Workflow création gestionnaire
- [ ] Workflow inscription parent
- [ ] Workflow inscription AM
- [ ] Workflow dashboard gestionnaire

---

### Ticket #55 : [Doc] Documentation API OpenAPI/Swagger
**Estimation** : 3h  
**Labels** : `documentation`, `p4`, `api`

**Description** :
Générer et documenter l'API avec Swagger/OpenAPI.

**Tâches** :
- [ ] Génération Swagger depuis NestJS
- [ ] Documentation tous les endpoints
- [ ] Exemples de requêtes/réponses
- [ ] Schémas DTO

---

## ⚠️ CRITIQUES : Upload, Emails, Infra, Doc

### Ticket #56 : [Backend] Service Upload & Stockage fichiers
**Estimation** : 3h  
**Labels** : `backend`, `critique`, `upload`

**Description** :
Créer le service de gestion des uploads de fichiers (photos).

**Tâches** :
- [ ] Multer pour upload
- [ ] Validation (type MIME, taille max depuis config)
- [ ] Stockage dans `/uploads/photos/`
- [ ] Nettoyage fichiers orphelins
- [ ] Tests unitaires

---

### Ticket #54 : [Backend] API Téléchargement photos sécurisé
**Estimation** : 2h  
**Labels** : `backend`, `critique`, `upload`, `security`

**Description** :
Créer l'endpoint sécurisé pour télécharger les photos.

**Tâches** :
- [ ] Endpoint `GET /api/v1/files/:id`
- [ ] Vérification droits (parent voit ses enfants, AM voit son profil, gestionnaire voit tout)
- [ ] Stream fichier
- [ ] Tests unitaires

---

### Ticket #58 : [Backend] Service Logging (Winston)
**Estimation** : 3h  
**Labels** : `backend`, `critique`, `monitoring`

**Description** :
Mettre en place un système de logs centralisé avec Winston pour faciliter le debugging et le monitoring.

**Tâches** :
- [ ] Installation Winston + transports
- [ ] Configuration (console + fichier avec rotation daily)
- [ ] Logs applicatifs (info, warn, error)
- [ ] Logs emails (succès/échec SMTP avec détails)
- [ ] Logs connexions (qui se connecte quand, IP)
- [ ] Logs validations (qui valide quoi, timestamp)
- [ ] Rotation des logs (daily, max 30 jours)
- [ ] Tests

---

### Ticket #89 : Log des appels API en mode debug
**Estimation** : 2h
**Labels** : `backend`, `monitoring`

**Description** :
Ajouter des logs détaillés pour les appels API en mode debug pour faciliter le diagnostic.

**Tâches** :
- [ ] Middleware ou Intercepteur pour logger les requêtes entrantes (méthode, URL, body)
- [ ] Logger les réponses (status, temps d'exécution)
- [ ] Activable via variable d'environnement `DEBUG=true` ou niveau de log

---

### Ticket #51 (réf.) : [Frontend] Écran Logs Admin (optionnel v1.1)
**Estimation** : 4h  
**Labels** : `frontend`, `p3`, `monitoring`, `admin`

**Description** :
Créer un écran pour consulter les logs depuis l'interface admin (optionnel Phase 1.1).

**Tâches** :
- [ ] Page `/admin/logs` (super_admin only)
- [ ] Filtres (date, niveau, type)
- [ ] Pagination
- [ ] Recherche
- [ ] Export CSV

**Note** : Peut être fait en Phase 1.1 si le temps le permet

---

### Ticket #59 : [Infra] Volume Docker pour uploads
**Estimation** : 30min  
**Labels** : `infra`, `critique`, `docker`

**Description** :
Ajouter un volume Docker pour persister les fichiers uploadés.

**Tâches** :
- [ ] Ajout volume `/uploads` dans `docker-compose.yml`
- [ ] Persistance des fichiers uploadés
- [ ] Test redémarrage conteneur

---

### Ticket #60 : [Infra] Volume Docker pour documents légaux
**Estimation** : 30min  
**Labels** : `infra`, `critique`, `docker`

**Description** :
Ajouter un volume Docker pour persister les documents légaux (CGU/Privacy).

**Tâches** :
- [ ] Ajout volume `/documents/legaux` dans `docker-compose.yml`
- [ ] Persistance des PDF
- [ ] Test redémarrage conteneur

---

### Ticket #61 : [Doc] Guide installation & configuration
**Estimation** : 3h  
**Labels** : `documentation`, `critique`, `on-premise`

**Description** :
Rédiger le guide complet d'installation et de configuration pour les collectivités.

**Tâches** :
- [ ] Variables `.env` requises
- [ ] Génération secrets (JWT, encryption)
- [ ] Configuration SMTP courante
- [ ] Troubleshooting
- [ ] Commandes Docker Compose
- [ ] Backup/Restauration

---

## 📚 JURIDIQUE & CDC

### Ticket #62 : [Doc] Amendement CDC v1.4 - Suppression SMS
**Estimation** : 30min  
**Labels** : `documentation`, `cdc`

**Description** :
Amender le Cahier des Charges pour supprimer la mention des notifications SMS (pas de plus-value identifiée).

**Tâches** :
- [ ] Modifier CDC Section 3.1.6 (Notifications parent)
- [ ] Modifier CDC Section 3.2.5 (Notifications AM)
- [ ] Remplacer "Email OU SMS" par "Email"
- [ ] Supprimer toute mention de SMS
- [ ] Incrémenter version → v1.4
- [ ] Ajouter changelog : "Suppression notifications SMS (Email uniquement)"

---

### Ticket #63 : [Doc] Rédaction CGU/Privacy génériques v1
**Estimation** : 8h  
**Labels** : `documentation`, `juridique`, `rgpd`

**Description** :
Rédiger les documents légaux génériques (CGU et Politique de confidentialité) conformes RGPD.

**Tâches** :
- [ ] Rédaction CGU génériques (avec aide juriste)
- [ ] Rédaction Privacy génériques (RGPD compliant)
- [ ] Conversion en PDF
- [ ] Placement dans `/documents/legaux/`
- [ ] Calcul hash SHA-256

**⚠️ IMPORTANT** : Nécessite l'intervention d'un juriste.

---

## 📊 Résumé final

**Total** : 72 tickets  
**Estimation** : ~208h de développement

### Par priorité
- **P0 (Bloquant BDD)** : 7 tickets (~5h)
- **P1 (Bloquant Config)** : 7 tickets (~22h)
- **P2 (Backend)** : 19 tickets (~54h)
- **P3 (Frontend)** : 25 tickets (~83h)
- **P4 (Tests/Doc)** : 4 tickets (~24h)
- **Critiques** : 6 tickets (~13h)
- **Juridique** : 1 ticket (~8h)

### Par domaine
- **BDD** : 7 tickets
- **Backend** : 24 tickets
- **Frontend** : 25 tickets
- **Tests** : 3 tickets
- **Documentation** : 5 tickets
- **Infra** : 2 tickets
- **Juridique** : 1 ticket

### Modifications par rapport à la version initiale
- ✅ **v1.5** : Ajout tickets #91, #93, #94, #95. Ticket #92 terminé.
- ✅ **v1.4** : Numéros de section du doc = numéros Gitea (Ticket #n = issue #n). Tableau et sections renumérotés. Doublons #86, #87, #88 fermés sur Gitea (#86→#12, #87→#14, #88→#15) ; tickets sources #12, #14, #15 mis à jour (doc + body Gitea).
- ✅ **Concept v1.3** : Configuration initiale = un seul panneau Paramètres (3 sections) dans le dashboard ; plus de page dédiée « Setup Wizard » ; navigation bloquée jusqu’à sauvegarde au premier déploiement. Tickets #10, #12, #13 alignés.
- ❌ **Supprimé** : Tickets "Renvoyer email validation" (backend + frontend) - Pas prioritaire
- ✅ **Ajouté** : Ticket #55 "Service Logging Winston" - Monitoring essentiel
- ✅ **Ajouté** : Ticket #56 "Écran Logs Admin" - Optionnel Phase 1.1
- ✅ **Ajouté** : Ticket #78 "Refonte Infrastructure Formulaires" - Harmonisation UI/UX
- ✅ **Ajouté** : Ticket #79 "Renommer Nanny en AM" - Cohérence CDC
- ✅ **Ajouté** : Ticket #81 "Corrections refactoring" - Bugfixes
- ✅ **Ajouté** : Ticket #83 "RegisterChoiceScreen Mobile" - Responsive UX
- ✅ **Fermé** : Ticket #82 "Écran Login mobile" - Merge develop + master

---

**Dernière mise à jour** : 25 Février 2026
**Version** : 1.6
**Statut** : ✅ Aligné avec le dépôt Gitea (tickets #103-#117 créés)

