diff --git a/docs/00_INDEX.md b/docs/00_INDEX.md index 7e5b9f6..6d96158 100644 --- a/docs/00_INDEX.md +++ b/docs/00_INDEX.md @@ -1,94 +1,77 @@ -# 📚 Index de la Documentation - PtitsPas App +# Index de la documentation — P'titsPas -Bienvenue dans la documentation complĂšte de l'application PtitsPas. +Index de navigation du dĂ©pĂŽt. DerniĂšre rĂ©vision : **septembre 2026** (clĂŽture doc 0.1.0). -Ce fichier sert d'index pour naviguer dans toute la documentation du projet. +## Produit & versions -## 📖 Table des matiĂšres +| Doc | Contenu | +|-----|---------| +| [01 — Cahier des charges](./01_CAHIER-DES-CHARGES.md) | CDC actuel (V1.3) — amendement via **#117** | +| [EVOLUTIONS_CDC.md](./EVOLUTIONS_CDC.md) | Écarts CDC → app (intrant amendement) | +| [05 — Versions & milestones](./05_VERSIONS-ET-MILESTONES.md) | Semver Gitea + bilans | +| [29 — Bilan version 0.1.0](./29_BILAN-VERSION-0.1.0.md) | Tickets livrĂ©s 0.1.0 + thĂšmes | +| [04 — Roadmap gĂ©nĂ©rale](./04_ROADMAP-GENERALE.md) | Vision phases long terme | +| [28 — Évolution famille / responsables](./28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md) | ModĂšle dossier / foyer | -### 📋 Cahier des Charges -- [**01 - Cahier des Charges**](./01_CAHIER-DES-CHARGES.md) - Cahier des charges complet du projet P'titsPas (V1.3 - 24/11/2025) +## Architecture & infra -### Architecture & Infrastructure -- [**02 - Architecture**](./02_ARCHITECTURE.md) - Vue d'ensemble de l'architecture mono-repo et multi-conteneurs -- [**03 - DĂ©ploiement**](./03_DEPLOYMENT.md) - Guide complet de dĂ©ploiement et configuration CI/CD +| Doc | Contenu | +|-----|---------| +| [02 — Architecture](./02_ARCHITECTURE.md) | Mono-repo, conteneurs | +| [03 — DĂ©ploiement](./03_DEPLOYMENT.md) | Deploy / CI-CD | +| [10 — Database](./10_DATABASE.md) | SchĂ©ma BDD | +| [11 — API](./11_API.md) | Endpoints REST | +| [21 — Configuration systĂšme](./21_CONFIGURATION-SYSTEME.md) | Config on-premise | +| [99 — RĂšgles de codage](./99_REGLES-CODAGE.md) | Conventions | -### Planification -- [**04 - Roadmap GĂ©nĂ©rale**](./04_ROADMAP-GENERALE.md) - Roadmap complĂšte du projet (Phases 1 Ă  5+) +## Workflows & mĂ©tier -### DĂ©veloppement -- [**10 - Database Schema**](./10_DATABASE.md) - SchĂ©ma de la base de donnĂ©es et modĂšles -- [**11 - API Documentation**](./11_API.md) - Documentation complĂšte des endpoints REST -- [**14 - Note backend config setup**](./14_NOTE-BACKEND-CONFIG-SETUP.md) - Setup configuration -- [**92 - Note backend gestionnaires**](./92_NOTE-BACKEND-GESTIONNAIRES.md) - Gestionnaires -- [**99 - RĂšgles de codage**](./99_REGLES-CODAGE.md) - Conventions de code +| Doc | Contenu | +|-----|---------| +| [20 — Workflow crĂ©ation de compte](./20_WORKFLOW-CREATION-COMPTE.md) | Inscription / validation | +| [juridique/](./juridique/README.md) | CGU / CGC / privacy + [22 technique](./juridique/22_DOCUMENTS-LEGAUX.md) | +| [CHARTE_GRAPHIQUE.md](./CHARTE_GRAPHIQUE.md) | Charte UI | -### Workflows Fonctionnels -- [**20 - Workflow CrĂ©ation de Compte**](./20_WORKFLOW-CREATION-COMPTE.md) - Workflow complet de crĂ©ation et validation des comptes utilisateurs -- [**21 - Configuration SystĂšme**](./21_CONFIGURATION-SYSTEME.md) - Configuration on-premise dynamique -- [**22 - Documents LĂ©gaux**](./juridique/22_DOCUMENTS-LEGAUX.md) - Gestion CGU/Privacy avec versioning +## Projet & outillage -### Juridique (sources & technique) -- [**Dossier juridique**](./juridique/README.md) - Index : CGU/CGC en Markdown, - export PDF, lien vers la doc technique n°22 +| Doc | Contenu | +|-----|---------| +| [23 — Suivi tickets](./23_SUIVI-TICKETS.md) | Pointeur Gitea (plus de liste figĂ©e) | +| [24 — DĂ©cisions projet](./24_DECISIONS-PROJET.md) | ADR / dĂ©cisions | +| [26 — API Gitea](./26_GITEA-API.md) | Issues, PR, milestones | +| [27 — Briefing frontend](./27_BRIEFING-FRONTEND.md) | AccĂšs Git, prioritĂ©s | -### Projet & suivi (Gitea / tickets) -- [**23 - Liste des Tickets**](./23_LISTE-TICKETS.md) - 61 tickets Phase 1 dĂ©taillĂ©s -- [**24 - DĂ©cisions Projet**](./24_DECISIONS-PROJET.md) - DĂ©cisions architecturales et fonctionnelles -- [**25 - Backlog Phase 2**](./25_PHASE-2-BACKLOG.md) - FonctionnalitĂ©s techniques reportĂ©es -- [**28 - Évolution famille et responsables**](./28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md) - ModĂšle dossier/famille, recompositions, v1.0.0 vs post-1.0.0 -- [**26 - API Gitea**](./26_GITEA-API.md) - ProcĂ©dure d'utilisation de l'API Gitea (issues, PR, branches, labels) -- [**27 - Briefing frontend**](./27_BRIEFING-FRONTEND.md) - AccĂšs Git, prioritĂ©s, scripts Gitea (token) +## Audit -### Archive & convention de nommage -- [**Dossier archive**](./archive/README.md) - Fichiers **sans** `NN_` dĂ©placĂ©s - (temporaires, obsolĂštes) ; rĂšgles de rangement et suppression -- Pointeur : [PROCEDURE-API-GITEA.md](./PROCEDURE-API-GITEA.md) → voir **26** +| Doc | Contenu | +|-----|---------| +| [90 — Audit YNOV](./90_AUDIT.md) | Analyse code Ă©tudiant | -### Exceptions de nommage (racine `docs/`) -Fichiers **sans prĂ©fixe numĂ©rique** encore Ă  la racine par **hĂ©ritage** ou -rĂ©fĂ©rences outils (`.cursorrules`, etc.) — **Ă  renommer** en `NN_` quand -possible : -- `CHARTE_GRAPHIQUE.md` -- [`EVOLUTIONS_CDC.md`](./EVOLUTIONS_CDC.md) — Ă©carts CDC / app ; voir aussi [**28 - Évolution famille**](./28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md) -- `SuperNounou_Cahier_Des_Charges_Complet_V1.1.md` -- `SuperNounou_SSS-001.md` +## Archive -### Administration (À crĂ©er) -- [**30 - Guide d'administration**](./30_ADMIN.md) - Gestion des utilisateurs, accĂšs PgAdmin, logs -- [**31 - Troubleshooting**](./31_TROUBLESHOOTING.md) - RĂ©solution des problĂšmes courants +| Emplacement | Usage | +|-------------|--------| +| [archive/](./archive/README.md) | Obsolete / temporaires | +| [archive/obsolete/](./archive/obsolete/) | CDC SuperNounou, ancienne liste tickets, backlog Phase 2 figĂ©, notes ponctuelles | -### Frontend (À crĂ©er) -- [**40 - Frontend Flutter**](./40_FRONTEND.md) - Structure de l'application mobile/web +## DonnĂ©es de test -### Audit & Analyse -- [**90 - Audit du projet YNOV**](./90_AUDIT.md) - Analyse complĂšte du code Ă©tudiant et fonctionnalitĂ©s +| Doc | Contenu | +|-----|---------| +| [test-data/](./test-data/README.md) | Jeux utilisateurs test | -## 🚀 Quick Start +## Quick start ```bash -# Cloner le projet -git clone ssh://gitea-jmartin/jmartin/app.git ptitspas-app - -# Lancer l'environnement de dĂ©veloppement +git clone 
 ptitspas-app cd ptitspas-app docker compose up -d - -# AccĂ©der aux services -Frontend: https://app.ptits-pas.fr -API: https://app.ptits-pas.fr/api -PgAdmin: https://app.ptits-pas.fr/pgadmin +# Front https://app.ptits-pas.fr — API /api — PgAdmin /pgadmin ``` -## 🔗 Liens utiles +## Liens -- **Gitea** : https://git.ptits-pas.fr -- **Production** : https://app.ptits-pas.fr -- **Mail** : https://mail.ptits-pas.fr - -## 📝 Maintenance - -Cette documentation est maintenue par Julien Martin (julien.martin@ptits-pas.fr). - -DerniĂšre mise Ă  jour : Juin 2026 +- Gitea : https://git.ptits-pas.fr/jmartin/petitspas +- Prod : https://app.ptits-pas.fr +Mainteneur : Julien Martin (julien.martin@ptits-pas.fr). diff --git a/docs/04_ROADMAP-GENERALE.md b/docs/04_ROADMAP-GENERALE.md index 35c587d..2a00c50 100644 --- a/docs/04_ROADMAP-GENERALE.md +++ b/docs/04_ROADMAP-GENERALE.md @@ -44,22 +44,21 @@ Les **Phases 2, 3, 4+** sont des **Ă©bauches indicatives** qui seront affinĂ©es - ✅ Logging & Monitoring - ✅ Tests & Documentation -### Versions incrĂ©mentales +### Versions incrĂ©mentales (semver / Gitea) -| Version | Objectif | Tickets | Estimation | -|---------|----------|---------|------------| -| **0.1.0** | MVP Fonctionnel | ~21 | ~45h | -| **0.2.0** | SĂ©curitĂ© & RGPD | ~10 | ~35h | -| **0.3.0** | Interfaces ComplĂštes | ~17 | ~52h | -| **0.4.0** | Tests & Documentation | ~6 | ~24h | -| **0.5.0** | Monitoring & Optimisations | ~7 | ~17h | -| **1.0.0** | 🎉 **Release Phase 1** | **61** | **~173h** | +La table historique « ~21 tickets / 0.1.0 » est **obsolĂšte**. +État rĂ©el des milestones, bilans et tag : **[05_VERSIONS-ET-MILESTONES.md](./05_VERSIONS-ET-MILESTONES.md)**. -### Livrable +| Version | Statut (sept. 2026) | +|---------|---------------------| +| **0.1.0** | **TerminĂ©e** — [bilan](./29_BILAN-VERSION-0.1.0.md) (48 tickets fermĂ©s) | +| **0.2.0+** | Ouvertes — voir Gitea + doc 05 | -Application installable avec crĂ©ation et validation de comptes utilisateurs. +### Livrable Phase 1 (visĂ©e) -**RĂ©fĂ©rence** : [23_LISTE-TICKETS.md](./23_LISTE-TICKETS.md) +Application installable avec crĂ©ation et validation de comptes utilisateurs, puis enrichissements dashboard / dossiers (0.1.0 livrĂ©). + +**Tickets** : Gitea — pointeur [23_SUIVI-TICKETS.md](./23_SUIVI-TICKETS.md). --- @@ -216,7 +215,7 @@ Suivi quotidien des enfants + FonctionnalitĂ©s complĂ©mentaires. Application mature, optimisĂ©e et riche en fonctionnalitĂ©s. -**RĂ©fĂ©rence** : [25_PHASE-2-BACKLOG.md](./25_PHASE-2-BACKLOG.md) (anciennes fonctionnalitĂ©s techniques) +**RĂ©fĂ©rence** : [archive/obsolete/25_PHASE-2-BACKLOG.md](./archive/obsolete/25_PHASE-2-BACKLOG.md) (figĂ©) + [05_VERSIONS-ET-MILESTONES.md](./05_VERSIONS-ET-MILESTONES.md) --- @@ -317,9 +316,10 @@ Exemples : - [00_INDEX.md](./00_INDEX.md) - Index gĂ©nĂ©ral de la documentation - [01_CAHIER-DES-CHARGES.md](./01_CAHIER-DES-CHARGES.md) - Cahier des charges v1.3 - [20_WORKFLOW-CREATION-COMPTE.md](./20_WORKFLOW-CREATION-COMPTE.md) - Workflow crĂ©ation de comptes -- [23_LISTE-TICKETS.md](./23_LISTE-TICKETS.md) - Liste des 61 tickets Phase 1 +- [23_SUIVI-TICKETS.md](./23_SUIVI-TICKETS.md) / [29_BILAN-VERSION-0.1.0.md](./29_BILAN-VERSION-0.1.0.md) — suivi Gitea + bilan 0.1.0 - [24_DECISIONS-PROJET.md](./24_DECISIONS-PROJET.md) - DĂ©cisions architecturales -- [25_PHASE-2-BACKLOG.md](./25_PHASE-2-BACKLOG.md) - Anciennes fonctionnalitĂ©s techniques +- [05_VERSIONS-ET-MILESTONES.md](./05_VERSIONS-ET-MILESTONES.md) — milestones Gitea +- [archive/obsolete/25_PHASE-2-BACKLOG.md](./archive/obsolete/25_PHASE-2-BACKLOG.md) — backlog Phase 2 figĂ© --- diff --git a/docs/05_VERSIONS-ET-MILESTONES.md b/docs/05_VERSIONS-ET-MILESTONES.md new file mode 100644 index 0000000..1855284 --- /dev/null +++ b/docs/05_VERSIONS-ET-MILESTONES.md @@ -0,0 +1,56 @@ +# Versions & milestones — P'titsPas + +**Source de vĂ©ritĂ© tickets** : Gitea [`jmartin/petitspas`](https://git.ptits-pas.fr/jmartin/petitspas) +**Bilans de version** : documents `29_BILAN-
` (et suivants) + +Ce fichier remplace, pour le **semver / milestones**, les anciennes tables figĂ©es de la roadmap Phase 1. + +--- + +## État des milestones + +| Milestone | RĂŽle | Statut | +|-----------|------|--------| +| **0.1.0** | MVP opĂ©rable (auth, inscription, dashboard dossiers/fiches, suppressions, cleanups) | **TerminĂ©e** — [bilan](./29_BILAN-VERSION-0.1.0.md) | +| **0.2.0** | Suite produit (ex. recherche / Ă©changes — sans contrat) | Ouverte | +| **0.3.0** | Contrat + planning | Ouverte | +| **0.4.0** | Carnet de liaison | Ouverte | +| **0.9.0** | Hors pĂ©rimĂštre cleanup 0.1.0 (doublons, upload, tech auth/photos, UX erreurs
) | Ouverte | +| **1.0.0** | Release majeure Phase 1 (critĂšres PO) | RĂ©serve | +| **Backlog transverse** | Doc Ă©tendue, CI/tests, RGPD avancĂ©, monitoring — hors semver dĂ©diĂ© | Ouverte | + +Liens Gitea : [milestones](https://git.ptits-pas.fr/jmartin/petitspas/milestones). + +--- + +## Bilans + +| Version | Document | +|---------|----------| +| 0.1.0 | [29_BILAN-VERSION-0.1.0.md](./29_BILAN-VERSION-0.1.0.md) | + +--- + +## Relation avec la roadmap phases + +La vision long terme (Phases 2–5 : mise en relation, contrats, carnet
) reste dans [04_ROADMAP-GENERALE.md](./04_ROADMAP-GENERALE.md). +Les **jalons livrables** se gĂšrent ici + dans Gitea. + +Ancien backlog « Phase 2 » technique ([archive](./archive/obsolete/25_PHASE-2-BACKLOG.md)) : Ă  croiser avec les milestones ci-dessus ; ne plus maintenir en double. + +--- + +## Suivi des tickets + +- **CrĂ©ation / Ă©tat** : Gitea uniquement. +- **MĂ©moire d’une version livrĂ©e** : bilan `29_
` (pas de re-copie exhaustive dans un fichier tickets). +- Ancienne liste figĂ©e Phase 1 : [archive/obsolete/23_LISTE-TICKETS.md](./archive/obsolete/23_LISTE-TICKETS.md). +- Pointeur court : [23_SUIVI-TICKETS.md](./23_SUIVI-TICKETS.md). + +--- + +## Tag Git + +| Tag | Condition | +|-----|-----------| +| `v0.1.0` | Milestone 0.1.0 fermĂ©e + bilan mergĂ© sur `master` | diff --git a/docs/22_DOCUMENTS-LEGAUX.md b/docs/22_DOCUMENTS-LEGAUX.md deleted file mode 100644 index c213372..0000000 --- a/docs/22_DOCUMENTS-LEGAUX.md +++ /dev/null @@ -1,8 +0,0 @@ -# Fichier dĂ©placĂ© - -La documentation **Documents lĂ©gaux** a Ă©tĂ© dĂ©placĂ©e vers : - -**[juridique/22_DOCUMENTS-LEGAUX.md](./juridique/22_DOCUMENTS-LEGAUX.md)** - -Voir aussi le dossier **[juridique/](./juridique/)** pour les sources **CGU** -et **CGC** en Markdown. diff --git a/docs/23_SUIVI-TICKETS.md b/docs/23_SUIVI-TICKETS.md new file mode 100644 index 0000000..6ad743b --- /dev/null +++ b/docs/23_SUIVI-TICKETS.md @@ -0,0 +1,12 @@ +# Suivi des tickets — P'titsPas + +**Source de vĂ©ritĂ©** : [Gitea — issues](https://git.ptits-pas.fr/jmartin/petitspas/issues) +**Milestones / versions** : [05_VERSIONS-ET-MILESTONES.md](./05_VERSIONS-ET-MILESTONES.md) +**API Gitea** : [26_GITEA-API.md](./26_GITEA-API.md) + +Ne plus maintenir de catalogue exhaustif des tickets dans le dĂ©pĂŽt : l’état (ouvert / fermĂ© / milestone) change dans Gitea. + +Pour une **version livrĂ©e**, lire le bilan correspondant (ex. [29_BILAN-VERSION-0.1.0.md](./29_BILAN-VERSION-0.1.0.md)). + +Archive historique (liste Phase 1 figĂ©e, avril 2026) : +[archive/obsolete/23_LISTE-TICKETS.md](./archive/obsolete/23_LISTE-TICKETS.md). diff --git a/docs/24_DECISIONS-PROJET.md b/docs/24_DECISIONS-PROJET.md index cf38376..32d16ae 100644 --- a/docs/24_DECISIONS-PROJET.md +++ b/docs/24_DECISIONS-PROJET.md @@ -423,31 +423,30 @@ ptitspas-app/ - Maintenance (tout au mĂȘme endroit) - Versioning (Git) -**Structure** : +**Structure** (sept. 2026) : ``` docs/ ├── 00_INDEX.md ├── 01_CAHIER-DES-CHARGES.md ├── 02_ARCHITECTURE.md ├── 03_DEPLOYMENT.md +├── 04_ROADMAP-GENERALE.md +├── 05_VERSIONS-ET-MILESTONES.md ├── 10_DATABASE.md ├── 11_API.md ├── 20_WORKFLOW-CREATION-COMPTE.md ├── 21_CONFIGURATION-SYSTEME.md -├── 22_DOCUMENTS-LEGAUX.md # pointeur → juridique/ -├── 27_BRIEFING-FRONTEND.md -├── PROCEDURE-API-GITEA.md # pointeur → 26_GITEA-API.md -├── juridique/ -│ ├── README.md -│ ├── cgu.md -│ ├── cgc.md -│ └── 22_DOCUMENTS-LEGAUX.md -├── archive/ -│ ├── README.md -│ ├── temporaires/ -│ └── obsolete/ -├── 23_LISTE-TICKETS.md +├── 23_SUIVI-TICKETS.md ├── 24_DECISIONS-PROJET.md (ce document) +├── 26_GITEA-API.md +├── 27_BRIEFING-FRONTEND.md +├── 28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md +├── 29_BILAN-VERSION-0.1.0.md +├── 99_REGLES-CODAGE.md +├── EVOLUTIONS_CDC.md +├── CHARTE_GRAPHIQUE.md +├── juridique/ # CGU + 22_DOCUMENTS-LEGAUX.md +├── archive/ # obsolete / temporaires ├── 90_AUDIT.md └── test-data/ ``` diff --git a/docs/28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md b/docs/28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md index b8cbfbe..170bc93 100644 --- a/docs/28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md +++ b/docs/28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md @@ -3,7 +3,7 @@ **Version** : 1.1 **Date** : 16 juin 2026 **Statut** : RĂ©flexions produit / architecture — complĂ©ment au [CDC](./01_CAHIER-DES-CHARGES.md) -**Documents liĂ©s** : [EVOLUTIONS_CDC.md](./EVOLUTIONS_CDC.md), [24_DECISIONS-PROJET.md](./24_DECISIONS-PROJET.md), [23_LISTE-TICKETS.md](./23_LISTE-TICKETS.md) +**Documents liĂ©s** : [EVOLUTIONS_CDC.md](./EVOLUTIONS_CDC.md), [24_DECISIONS-PROJET.md](./24_DECISIONS-PROJET.md), [23_SUIVI-TICKETS.md](./23_SUIVI-TICKETS.md), [29_BILAN-VERSION-0.1.0.md](./29_BILAN-VERSION-0.1.0.md) --- diff --git a/docs/29_BILAN-VERSION-0.1.0.md b/docs/29_BILAN-VERSION-0.1.0.md new file mode 100644 index 0000000..2d831e6 --- /dev/null +++ b/docs/29_BILAN-VERSION-0.1.0.md @@ -0,0 +1,197 @@ +# Bilan — Version 0.1.0 + +**Statut** : terminĂ©e +**Milestone Gitea** : [0.1.0](https://git.ptits-pas.fr/jmartin/petitspas/milestone/10) +**DĂ©pĂŽt** : `jmartin/petitspas` +**Tag prĂ©vu** : `v0.1.0` (sur `master` aprĂšs merge de cette doc) + +Ce document est la **mĂ©moire produit** de la version 0.1.0 : ce qui a Ă©tĂ© livrĂ©, ticket par ticket, et ce qui a Ă©tĂ© reportĂ©. + +--- + +## 1. PĂ©rimĂštre produit livrĂ© + +La 0.1.0 couvre le **MVP opĂ©rable** pour une collectivitĂ© : + +- Authentification, crĂ©ation / oubli de mot de passe, e-mails associĂ©s +- Inscription parent & AM, validation / refus gestionnaire, reprise aprĂšs refus +- Dashboard staff (admin + gestionnaire) : listes, fiches, rattachements +- Onglet **Dossiers** + wizards crĂ©ation / Ă©dition (famille & AM) +- Suppressions mĂ©tier (droits, confirms, cascades API) +- Cleanups structurels (prĂ©fixe `Admin*`, panels dashboard, modale staff, retrait `est_multiple`) + +**Hors 0.1.0** (reportĂ©) : doublons avancĂ©s, famille N responsables, statut enfant gardĂ©/sans garde, combobox RPE AM, chantier CDC (#117), tickets tech/observabilitĂ© — voir §4 et [05_VERSIONS-ET-MILESTONES.md](./05_VERSIONS-ET-MILESTONES.md). + +--- + +## 2. ThĂšmes livrĂ©s + +### 2.1 Auth, mot de passe, e-mails + +| # | Titre | LivrĂ© | +|---|-------|--------| +| 24 | API CrĂ©ation mot de passe | Endpoints token → crĂ©ation MDP post-validation | +| 28 | Templates Email — Validation | Mails validation avec lien MDP | +| 30 | Connexion — VĂ©rification statut | Blocage comptes pending / suspendus Ă  la connexion | +| 43 | Écran CrĂ©ation Mot de Passe | UI lien e-mail crĂ©ation MDP | +| 47 | Écran Changement MDP Obligatoire | PremiĂšre connexion staff | +| 50 | Affichage dynamique CGU | CGU/Privacy versionnĂ©es Ă  l’inscription | +| 118 | Page crĂ©ation mot de passe (Front + API) | Alignement front/API du flux lien e-mail | +| 123 | Durcissement token crĂ©ation MDP | TTL, usage unique, contrĂŽles API | +| 127 | Mot de passe oubliĂ© | Demande → e-mail → rĂ©initialisation (flux distinct de #24/#43) | + +### 2.2 Inscription, numĂ©ros de dossier, reprise + +| # | Titre | LivrĂ© | +|---|-------|--------| +| 104 | NumĂ©ro de dossier — frontend | Affichage listes / mails / modales ; format AAAA-
 | +| 112 | Reprise aprĂšs refus — frontend | Lien e-mail `/reprise` + reprise par n° dossier | +| 120 | Inscription AM — photo & UX | ChaĂźne photo / API / UX alignĂ©e parents | +| 144 | Consentement photo enfant | Persistance du consentement Ă  l’inscription | + +### 2.3 Dashboard — fiches, listes, rattachements + +| # | Titre | LivrĂ© | +|---|-------|--------| +| 115 | Rattachement enfants — backend | Attach/detach parent↔enfant et AM↔enfant | +| 116 | Rattachement enfants — frontend | UI fiches parent / AM | +| 130 | UserService — APIs mĂ©tier | Branchement parents / AM / enfants cĂŽtĂ© front | +| 131 | Édition fiche parent + AM | Modales Ă©dition dashboard | +| 132 | CrĂ©ation enfant (onglet Enfants) | CrĂ©ation + rattachement foyer | +| 136 | API enfants — droits & liste | Droits gestionnaire + enrichissement liste | +| 137 | Onglet Enfants — liste globale | Panneau liste dashboard | +| 138 | Fiche enfant + liste dans parent | Fiche enfant ; enfants dans fiche parent | +| 140 | Epic fiche parent / affiliation | Livraison regroupĂ©e dashboard admin/gestionnaire | +| 142 | Clic carte → modale | Ouverture fiche depuis les listes | +| 145 | Lien co-parent cliquable | Navigation fiche parent → co-parent | +| 146 | Modale sĂ©lection enfant | UX rattacher enfant (AM + parent) | +| 147 | Modale sĂ©lection AM | UX rattacher AM depuis fiche enfant | +| 148 | CapacitĂ© max AM | DĂ©sactivation rattachement si capacitĂ© atteinte | +| 149 | Case libre AM → rattacher | Clic emplacement vide pour rattacher | +| 151 | GET /relais pour gestionnaire | Combo relais dans modale staff | +| 157 | Enfant sans responsable | DĂ©tachement dernier parent + alerte liste | +| 158 | Affiliation foyer (pivot + co-parent) | Attach/detach cohĂ©rents sur le foyer | + +### 2.4 Dossiers staff (crĂ©ation, Ă©dition, liste) + +| # | Titre | LivrĂ© | +|---|-------|--------| +| 129 | CrĂ©ation dossier parent | Wizard + API staff famille | +| 135 | Édition dossier + 2ᔉ parent | Mode edit wizards + `POST 
/co-parent` | +| 153 | Onglet Dossiers | Liste unifiĂ©e + Ă  valider (sans crĂ©ation dans l’onglet) | +| 156 | CrĂ©ation dossier AM | Wizard + API staff AM | + +### 2.5 Suppressions & droits staff + +| # | Titre | LivrĂ© | +|---|-------|--------| +| 133 | Suppression parent + AM (UI) | PremiĂšre vague UI (complĂ©tĂ©e par #160) | +| 134 | Droits « Ajouter gestionnaire » | VisibilitĂ© / API selon rĂŽle | +| 143 | Bug supprimer sa propre fiche | Masquage / interdiction auto-suppression | +| 154 | Epic suppressions | Cadrage rĂšgles mĂ©tier suppressions | +| 159 | Suppressions mĂ©tier — backend | Cascades, garde-fous, droits API | +| 160 | Suppressions dashboard — frontend | Poubelles + dialogues de confirmation | +| 161 | Admin crĂ©ation staff 403 | Admin peut crĂ©er gestionnaire et administrateur | + +### 2.6 Cleanups structure & UX + +| # | Titre | LivrĂ© | +|---|-------|--------| +| 25 | API Liste comptes en attente | Historique ; couvert par flux dossiers / validation | +| 26 | API Validation / Refus | Historique ; couvert par flux dossiers / validation | +| 152 | Retrait `est_multiple` | Suppression full stack (BDD, API, front, docs) | +| 155 | Rename prĂ©fixe `Admin*` | Widgets partagĂ©s sans prĂ©fixe Admin (option C) | +| 162 | Panels → `widgets/dashboard/` | Suite #155 — panels staff sous dashboard | +| 164 | Modale staff uniformisĂ©e | `StaffUserFormModal` (shell 930, champs contrĂŽlĂ©s) | + +--- + +## 3. Inventaire exhaustif (48 tickets fermĂ©s, milestone 0.1.0) + +| # | Titre | +|---|-------| +| 24 | [Backend] API CrĂ©ation mot de passe | +| 25 | [Backend] API Liste comptes en attente | +| 26 | [Backend] API Validation/Refus comptes | +| 28 | [Backend] Templates Email - Validation | +| 30 | [Backend] Connexion - VĂ©rification statut | +| 43 | [Frontend] Écran CrĂ©ation Mot de Passe | +| 47 | [Frontend] Écran Changement MDP Obligatoire | +| 50 | [Frontend] Affichage dynamique CGU lors inscription | +| 104 | NumĂ©ro de dossier – frontend | +| 112 | Reprise aprĂšs refus – frontend | +| 115 | [Backend] Rattachement enfants — parent et AM | +| 116 | [Frontend] Rattachement enfants — parent et AM | +| 118 | Page crĂ©ation mot de passe (lien email) – Front + API | +| 120 | [Full-stack] Inscription AM — photo, API et UX alignĂ©s sur les parents | +| 123 | [Tech] Durcissement token crĂ©ation MDP | +| 127 | [Full-stack] Mot de passe oubliĂ© — flux complet | +| 129 | CrĂ©ation dossier parent (wizard + API staff) | +| 130 | [Frontend] UserService — brancher APIs parents, AM et enfants | +| 131 | [Frontend] Édition fiche parent + AM | +| 132 | CrĂ©ation enfant depuis l’onglet Enfants | +| 133 | [Frontend] Suppression compte parent + AM | +| 134 | Droits bouton « Ajouter gestionnaire » | +| 135 | Mode Ă©dition dossier (+ ajout 2ᔉ parent) | +| 136 | [Backend] API enfants — droits gestionnaire + enrichissement liste | +| 137 | [Frontend] Onglet Enfants — liste globale | +| 138 | [Frontend] Fiche enfant + liste enfants dans fiche parent | +| 140 | Dashboard admin — fiche parent, enfants et affiliation | +| 142 | Clic sur carte → ouvrir la modale | +| 143 | Bug — Gestionnaire Supprimer sur sa propre fiche | +| 144 | Bug — Consentement photo enfant non sauvegardĂ© | +| 145 | Lien co-parent cliquable | +| 146 | UX — modale sĂ©lection d'enfant | +| 147 | UX — modale sĂ©lection d'AM | +| 148 | Bug — capacitĂ© max AM | +| 149 | Fiche AM — clic case libre pour rattacher | +| 151 | Bug — GET /relais gestionnaire | +| 152 | Cleanup — supprimer `est_multiple` | +| 153 | Onglet permanent « Dossiers » | +| 154 | Epic — suppressions utilisateurs / dossiers / enfants / AM | +| 155 | Cleanup — renommer prĂ©fixe Admin* | +| 156 | CrĂ©ation dossier AM (wizard + API staff) | +| 157 | Enfant sans responsable | +| 158 | Affiliation enfant au foyer (pivot + co-parent) | +| 159 | Backend suppressions mĂ©tier (#154) | +| 160 | Frontend suppressions dashboard (#154) | +| 161 | Bug — Admin crĂ©ation gestionnaire / administrateur | +| 162 | Cleanup — panels vers `widgets/dashboard/` | +| 164 | Uniformisation modale staff + champs contrĂŽlĂ©s | + +Issues : https://git.ptits-pas.fr/jmartin/petitspas/issues?q=&type=all&state=closed&labels=&milestone=10&assignee=0 + +--- + +## 4. ReportĂ© hors 0.1.0 + +| # | Titre | Destination typique | +|---|-------|---------------------| +| 113 / 114 | Doublons inscription / alerte gestionnaire | 0.9.0 | +| 117 | Évolution du cahier des charges | Doc (amendement CDC post-0.1.0) | +| 121–122, 124–125 | Tech auth / photos / DB | 0.9.0 | +| 126 | Upload documents lĂ©gaux 500 | 0.9.0 | +| 128 | Audit / traçabilitĂ© modifications | 0.9.0 | +| 139 | Famille complexe N responsables | Post-0.1.0 / epic | +| 141 | Statut enfant gardĂ© / sans garde | Post-0.1.0 | +| 150 | Combobox rattachement RPE (AM) | 0.2.0 | + +Voir aussi [05_VERSIONS-ET-MILESTONES.md](./05_VERSIONS-ET-MILESTONES.md). + +--- + +## 5. Suite documentaire + +1. **Amendement CDC** — ticket **#117** : intĂ©grer les Ă©carts rĂ©ellement livrĂ©s (dossiers staff, onglet Enfants, suppressions, retrait naissance multiple, etc.) Ă  partir de ce bilan, [EVOLUTIONS_CDC.md](./EVOLUTIONS_CDC.md) et [28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md](./28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md). +2. **Tag** `v0.1.0` sur `master` lorsque milestone fermĂ©e + ce bilan mergĂ©. +3. EnchaĂźner les milestones **0.2.0+** selon [05_VERSIONS-ET-MILESTONES.md](./05_VERSIONS-ET-MILESTONES.md). + +--- + +## 6. RĂ©fĂ©rences code (points d’entrĂ©e) + +- Modale staff : `frontend/lib/widgets/dashboard/staff_user_form_modal.dart` +- Fiches : `parent_edit_modal.dart`, `am_edit_modal.dart`, `child_detail_modal.dart` +- Wizards dossiers : `parent_dossier_wizard.dart`, `am_dossier_wizard.dart` +- RĂšgles suppressions : tickets #154 / #159 / #160 +- Cleanup `est_multiple` : #152 diff --git a/docs/EVOLUTIONS_CDC.md b/docs/EVOLUTIONS_CDC.md index 98b57b6..75b7b42 100644 --- a/docs/EVOLUTIONS_CDC.md +++ b/docs/EVOLUTIONS_CDC.md @@ -2,7 +2,9 @@ Ce document liste les modifications Ă  apporter au cahier des charges original pour le rendre conforme Ă  l'application dĂ©veloppĂ©e. -> **Document complĂ©mentaire (juin 2026)** — rĂ©flexions sur le **modĂšle famille / numĂ©ro de dossier**, familles recomposĂ©es, tuteurs et responsables lĂ©gaux : voir **[28 - Évolution famille et responsables](./28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md)**. +> **Intrant pour #117** (amendement CDC post-0.1.0). ComplĂ©ter avec le [bilan 0.1.0](./29_BILAN-VERSION-0.1.0.md) et **[28 - Évolution famille et responsables](./28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md)**. + +> **ObsolĂšte depuis #152** : ne plus proposer de champ « naissance multiple / `est_multiple` » — retirĂ© de l’app (BDD, API, front). ## 1. Gestion des Enfants @@ -11,7 +13,6 @@ Ce document liste les modifications Ă  apporter au cahier des charges original p #### Situation actuelle dans le CDC : - Mentionne uniquement la collecte d'informations sur l'enfant - Ne prĂ©cise pas la possibilitĂ© d'ajouter plusieurs enfants -- Ne mentionne pas la gestion des naissances multiples - Ne mentionne pas la gestion des enfants Ă  naĂźtre #### Modifications proposĂ©es : @@ -22,17 +23,18 @@ Ajouter le paragraphe suivant aprĂšs la description de la collecte d'information Les parents peuvent ajouter autant d'enfants que nĂ©cessaire. Pour chaque enfant, les informations suivantes sont collectĂ©es : - PrĂ©nom - Date de naissance (ou date prĂ©vue pour les enfants Ă  naĂźtre) +- Genre - Photo (optionnelle) - Consentement pour l'utilisation de la photo -- Indication si l'enfant fait partie d'une naissance multiple (jumeaux, triplĂ©s, etc.) Les parents peuvent : - Ajouter un nouvel enfant Ă  tout moment - Supprimer un enfant ajoutĂ© - Modifier les informations d'un enfant existant - Indiquer si l'enfant est Ă  naĂźtre -- Indiquer si l'enfant fait partie d'une naissance multiple - Donner ou retirer leur consentement pour l'utilisation de la photo de l'enfant + +Note : le concept de « naissance multiple » / jumeaux n'est pas gĂ©rĂ© par un champ dĂ©diĂ© (retirĂ© en 0.1.0, #152). ``` ### Modifications Ă  apporter dans la section "Workflow de crĂ©ation de compte" @@ -50,9 +52,9 @@ Remplacer l'Ă©tape 3 par : - Pour chaque enfant : * Saisie du prĂ©nom * Saisie de la date de naissance (ou date prĂ©vue) + * Genre * Option d'ajout d'une photo * Option de consentement photo - * Indication si naissance multiple * Indication si enfant Ă  naĂźtre - PossibilitĂ© de modifier ou supprimer un enfant ``` diff --git a/docs/PROCEDURE-API-GITEA.md b/docs/PROCEDURE-API-GITEA.md deleted file mode 100644 index fcae5a0..0000000 --- a/docs/PROCEDURE-API-GITEA.md +++ /dev/null @@ -1,8 +0,0 @@ -# Fichier dĂ©placĂ© / fusionnĂ© - -La procĂ©dure **API Gitea** est dĂ©sormais documentĂ©e sous : - -**[26_GITEA-API.md](./26_GITEA-API.md)** - -L’ancienne copie `PROCEDURE-API-GITEA.md` est archivĂ©e dans -`docs/archive/obsolete/` (doublon). diff --git a/docs/archive/README.md b/docs/archive/README.md index 794b038..674fdbc 100644 --- a/docs/archive/README.md +++ b/docs/archive/README.md @@ -1,30 +1,19 @@ # Archive documentation · P'titsPas -Ce dossier regroupe les fichiers **sans prĂ©fixe numĂ©rique** Ă  la racine de -`docs/` qui ne sont plus des **rĂ©fĂ©rences actives**, ou qui sont des -**brouillons / temporaires**. +Fichiers **hors rĂ©fĂ©rences actives** : brouillons livrĂ©s, CDC historiques, listes figĂ©es. ## RĂšgle de nommage (racine `docs/`) -- Les documents **normatifs** Ă  la racine portent un prĂ©fixe **`NN_`** - (deux chiffres), ex. `23_LISTE-TICKETS.md`. -- **Exceptions** (hĂ©ritage ou outillage) listĂ©es dans - [**00_INDEX.md**](../00_INDEX.md#exceptions-de-nommage) : charte, CDC - historique, Ă©volutions — **cible** : les renommer progressivement en `NN_` - et mettre Ă  jour `.cursorrules` / liens. +- Documents **normatifs** : prĂ©fixe **`NN_`**. +- Exceptions hĂ©ritage listĂ©es dans [00_INDEX.md](../00_INDEX.md) (`CHARTE_GRAPHIQUE.md`, `EVOLUTIONS_CDC.md`). -## Sous-dossiers ici +## Sous-dossiers | Dossier | Usage | |---------|--------| -| [**temporaires/**](./temporaires/) | Notes jetables, exports de travail. - **Supprimables** quand la tĂąche associĂ©e est close. | -| [**obsolete/**](./obsolete/) | Ancienne doc **remplacĂ©e** ou **doublon** - (conservĂ©e un temps pour historique). **Supprimer** aprĂšs bascule confirmĂ©e - si plus aucune rĂ©fĂ©rence. | +| [**temporaires/**](./temporaires/) | Brouillons jetables. **Vider** dĂšs livraison. | +| [**obsolete/**](./obsolete/) | Doc remplacĂ©e (CDC SuperNounou, ancienne liste tickets, notes ponctuelles, backlog Phase 2 figĂ©). | -## Hors `docs/` racine +## Politique `tmp/` -Les dossiers thĂ©matiques (**`juridique/`**, **`test-data/`**, etc.) peuvent -contenir des fichiers sans `NN_` : la rĂšgle `NN_` s’applique surtout aux -fichiers **directement** sous `docs/`. +Le dossier `docs/tmp/` **n’est plus utilisĂ©**. Les mini-specs de tickets livrĂ©s sont purgĂ©s ; la mĂ©moire produit = bilans de version (`29_
`) + tickets Gitea. diff --git a/docs/14_NOTE-BACKEND-CONFIG-SETUP.md b/docs/archive/obsolete/14_NOTE-BACKEND-CONFIG-SETUP.md similarity index 100% rename from docs/14_NOTE-BACKEND-CONFIG-SETUP.md rename to docs/archive/obsolete/14_NOTE-BACKEND-CONFIG-SETUP.md diff --git a/docs/23_LISTE-TICKETS.md b/docs/archive/obsolete/23_LISTE-TICKETS.md similarity index 100% rename from docs/23_LISTE-TICKETS.md rename to docs/archive/obsolete/23_LISTE-TICKETS.md diff --git a/docs/25_PHASE-2-BACKLOG.md b/docs/archive/obsolete/25_PHASE-2-BACKLOG.md similarity index 100% rename from docs/25_PHASE-2-BACKLOG.md rename to docs/archive/obsolete/25_PHASE-2-BACKLOG.md diff --git a/docs/92_NOTE-BACKEND-GESTIONNAIRES.md b/docs/archive/obsolete/92_NOTE-BACKEND-GESTIONNAIRES.md similarity index 100% rename from docs/92_NOTE-BACKEND-GESTIONNAIRES.md rename to docs/archive/obsolete/92_NOTE-BACKEND-GESTIONNAIRES.md diff --git a/docs/archive/obsolete/README.md b/docs/archive/obsolete/README.md index ade8bb1..707373b 100644 --- a/docs/archive/obsolete/README.md +++ b/docs/archive/obsolete/README.md @@ -4,11 +4,13 @@ Ancienne documentation **dĂ©placĂ©e** depuis `docs/` : | Fichier | Motif | |---------|--------| -| `PROCEDURE-API-GITEA.md` | Doublon fonctionnel de - [**26_GITEA-API.md**](../../26_GITEA-API.md). | -| `ARCHITECTURE_TECHNIQUE.md` | Non rĂ©fĂ©rencĂ© ; la vue d’ensemble est dans - [**02_ARCHITECTURE.md**](../../02_ARCHITECTURE.md). | -| `STATUS-APPLICATION.md` | InstantanĂ© datĂ© ; non tenu comme doc vivante. | +| `PROCEDURE-API-GITEA.md` | Doublon de [26_GITEA-API.md](../../26_GITEA-API.md) | +| `ARCHITECTURE_TECHNIQUE.md` | RemplacĂ© par [02_ARCHITECTURE.md](../../02_ARCHITECTURE.md) | +| `STATUS-APPLICATION.md` | InstantanĂ© datĂ© | +| `23_LISTE-TICKETS.md` | Liste Phase 1 figĂ©e (avr. 2026) — suivi = Gitea + bilans | +| `25_PHASE-2-BACKLOG.md` | Backlog technique figĂ© — voir [05_VERSIONS
](../../05_VERSIONS-ET-MILESTONES.md) | +| `SuperNounou_*` | CDC / SSS historiques | +| `14_NOTE-BACKEND-CONFIG-SETUP.md` | Note ticket ponctuelle | +| `92_NOTE-BACKEND-GESTIONNAIRES.md` | Note ticket ponctuelle | -AprĂšs vĂ©rification qu’aucun lien externe ne pointe encore vers ces chemins, on -peut **supprimer** ce sous-dossier ou ne garder que des pointeurs minimalistes. +MĂ©moire produit des versions livrĂ©es : [29_BILAN-VERSION-0.1.0.md](../../29_BILAN-VERSION-0.1.0.md). diff --git a/docs/SuperNounou_Cahier_Des_Charges_Complet_V1.1.md b/docs/archive/obsolete/SuperNounou_Cahier_Des_Charges_Complet_V1.1.md similarity index 100% rename from docs/SuperNounou_Cahier_Des_Charges_Complet_V1.1.md rename to docs/archive/obsolete/SuperNounou_Cahier_Des_Charges_Complet_V1.1.md diff --git a/docs/SuperNounou_SSS-001.md b/docs/archive/obsolete/SuperNounou_SSS-001.md similarity index 100% rename from docs/SuperNounou_SSS-001.md rename to docs/archive/obsolete/SuperNounou_SSS-001.md diff --git a/docs/archive/temporaires/131-fiche-parent-co-parent-header.md b/docs/archive/temporaires/131-fiche-parent-co-parent-header.md deleted file mode 100644 index 6f8a3c8..0000000 --- a/docs/archive/temporaires/131-fiche-parent-co-parent-header.md +++ /dev/null @@ -1,127 +0,0 @@ -# #131 — En-tĂȘte fiche parent : co-parent (note front → back) - -**Ticket :** #131 (fiche parent dashboard, doc `28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md` §6.1) -**Date :** 2026-06-01 -**Statut front :** livrĂ© (en-tĂȘte dynamique) -**Modif backend demandĂ©e :** **aucune fonctionnelle** — ce document fixe le contrat attendu ; le back valide `co_parent` et masque les champs sensibles. - ---- - -## 1. Comportement UI (front) - -Dans la modale **fiche parent** (`AdminParentEditModal`) : - -| Zone | Contenu | -|------|---------| -| **Titre** | `prenom` + `nom` du parent affichĂ© (plus le libellĂ© fixe « Fiche parent ») | -| **Sous-titre** | `Co-parent : {prenom} {nom}` — affichĂ© **uniquement** si un co-parent est connu | - -Le titre se met Ă  jour en direct pendant l’édition des champs nom/prĂ©nom. -Le sous-titre provient du co-parent **chargĂ© depuis l’API** (pas saisi Ă  la main dans la modale). - ---- - -## 2. Endpoints consommĂ©s - -| MĂ©thode | Route | Usage front | -|---------|-------|-------------| -| `GET` | `/api/v1/parents` | Liste parents (onglet Parents) | -| `GET` | `/api/v1/parents/:userId` | Rechargement fiche aprĂšs rattachement/dĂ©tachement enfant | -| `PATCH` | `/api/v1/parents/:userId/fiche` | Sauvegarde identitĂ© + statut (inchangĂ©) | - -RĂŽles : `super_admin`, `gestionnaire`, `administrateur` (selon route). - ---- - -## 3. Contrat JSON attendu pour `co_parent` - -Le front parse `ParentModel.fromJson` avec la clĂ© **`co_parent`** (snake_case), objet utilisateur imbriquĂ©. - -### Champs minimum utilisĂ©s pour le sous-titre - -| ClĂ© JSON | Usage | -|----------|--------| -| `co_parent` | Objet ou absent/`null` | -| `co_parent.id` | Identifiant (futur lien cliquable Ă©ventuel) | -| `co_parent.prenom` | Affichage | -| `co_parent.nom` | Affichage | - -Affichage front : `'{prenom} {nom}'.trim()` → libellĂ© `Co-parent : 
`. - -### Exemple de fragment de rĂ©ponse (`GET /parents/:id`) - -```json -{ - "user_id": "33333333-3333-3333-3333-333333333333", - "numero_dossier": "2026-000042", - "user": { - "id": "33333333-3333-3333-3333-333333333333", - "email": "parent1@example.com", - "prenom": "Paul", - "nom": "PARENT", - "statut": "actif", - "telephone": "0601020304" - }, - "co_parent": { - "id": "44444444-4444-4444-4444-444444444444", - "email": "coparent1@example.com", - "prenom": "Clara", - "nom": "COPARENT", - "role": "parent", - "statut": "actif" - }, - "parentChildren": [] -} -``` - -> **Note :** le front lit `user` (pas `utilisateur`). La doc `11_API.md` § Parents mentionne encore `utilisateur` / `id_co_parent` seul — le contrat **effectif** cĂŽtĂ© Nest/TypeORM est l’entitĂ© `Parents` sĂ©rialisĂ©e (`user`, `co_parent`, `parentChildren`, 
). - ---- - -## 4. État backend - -### Relations (dĂ©jĂ  en place) - -- `findAll()` et `findOne(user_id)` chargent **`co_parent`** ; -- FK : `parents.id_co_parent` → `utilisateurs.id` ; -- inscription couple : les deux sens renseignĂ©s en principe (`auth.service.ts`). - -### Livraison back (#131) - -- `mapParentForApi` / `sanitizeUserForApi` : rĂ©ponses `GET/PATCH/POST/DELETE` parents **sans** `password`, `token_creation_mdp`, `password_reset_*` sur `user` et `co_parent`. - -**Checklist validation :** - -- [x] `GET /parents/:id` renvoie `co_parent` peuplĂ© quand `id_co_parent` est non null -- [x] `GET /parents` (liste) inclut `co_parent` -- [x] `prenom` / `nom` du co-parent prĂ©sents -- [x] Pas de fuite `password` / tokens sur `user` ni `co_parent` - ---- - -## 5. Points d’attention (hors pĂ©rimĂštre immĂ©diat) - -| Sujet | DĂ©tail | -|-------|--------| -| **Lien inverse** | Si B est co-parent de A (`A.id_co_parent = B`) mais `B.id_co_parent` est `null`, le sous-titre **ne s’affichera pas** sur la fiche de B. Pas de rĂ©solution inverse cĂŽtĂ© front. | -| **Familles > 2 adultes** | Sous-titre = co-parent direct (`id_co_parent`) uniquement. | -| **Trou AM ↔ enfants en garde** | Pas de lien AM–enfant aujourd’hui (Ă  documenter / traiter plus tard). | - ---- - -## 6. Fichiers back concernĂ©s - -| Fichier | RĂŽle | -|---------|------| -| `backend/src/routes/parents/parents.service.ts` | `findOne`, `findAll` + relations | -| `backend/src/routes/parents/parents.controller.ts` | `mapParentForApi` sur les rĂ©ponses | -| `backend/src/routes/parents/parents.mapper.ts` | SĂ©rialisation API | -| `backend/src/common/utils/sanitize-user-for-api.ts` | Masquage secrets | -| `backend/src/entities/parents.entity.ts` | relation `co_parent` | - ---- - -## 7. RĂ©fĂ©rences - -- `docs/28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md` §6.1 -- Ticket Gitea **#131** diff --git a/docs/archive/temporaires/POINT_TICKETS_FRONT_API.txt b/docs/archive/temporaires/POINT_TICKETS_FRONT_API.txt deleted file mode 100644 index fac0b2d..0000000 --- a/docs/archive/temporaires/POINT_TICKETS_FRONT_API.txt +++ /dev/null @@ -1,36 +0,0 @@ -# ArchivĂ© docs/archive/temporaires/ — export jetable, supprimer si inutile. -Point tickets frontend (API Gitea) - 27/01/2026 -================================================ - -Issues avec label "frontend" : 20 (ouvertes: 12, fermees: 8) - -Num | Etat | Titre -----+--------+-------------------------------------------------------- - 35 | open | [Frontend] Écran CrĂ©ation Gestionnaire - 36 | closed | [Frontend] Inscription Parent - Étape 1 (Parent 1) - 37 | closed | [Frontend] Inscription Parent - Étape 2 (Parent 2) - 38 | closed | [Frontend] Inscription Parent - Étape 3 (Enfants) - 39 | closed | [Frontend] Inscription Parent - Étapes 4-6 (Finalisatio - 40 | closed | [Frontend] Inscription AM - Panneau 1 (IdentitĂ©) - 41 | closed | [Frontend] Inscription AM - Panneau 2 (Infos pro) - 42 | closed | [Frontend] Inscription AM - Finalisation - 43 | open | [Frontend] Écran CrĂ©ation Mot de Passe - 44 | closed | [Frontend] Dashboard Gestionnaire - Structure - 45 | open | [Frontend] Dashboard Gestionnaire - Liste Parents - 46 | open | [Frontend] Dashboard Gestionnaire - Liste AM - 47 | open | [Frontend] Écran Changement MDP Obligatoire - 48 | open | [Frontend] Gestion Erreurs & Messages - 49 | open | [Frontend] Écran Gestion Documents LĂ©gaux (Admin) - 50 | open | [Frontend] Affichage dynamique CGU lors inscription - 51 | open | [Frontend] Écran Logs Admin (optionnel v1.1) - 54 | open | [Tests] Tests E2E Frontend - 82 | closed | [Frontend] Adapter ïżœcran Login pour mobile - 83 | closed | [Frontend] Adapter ïżœcran Choix Inscription pour mobile - -Suivi doc 23_LISTE-TICKETS (Gitea #73,78,79,81,82,83): - #73 closed labels=[] - #78 closed labels=[] - #79 closed labels=[] - #81 closed labels=[] - #82 closed (Ă©cran Login mobile) - #83 closed labels=['frontend', 'p3', 'phase-1', 'ux'] diff --git a/docs/archive/temporaires/README.md b/docs/archive/temporaires/README.md index bde6fa3..ecc5dc2 100644 --- a/docs/archive/temporaires/README.md +++ b/docs/archive/temporaires/README.md @@ -1,10 +1,11 @@ # Temporaires -Fichiers **non numĂ©rotĂ©s** de travail (brouillons, listes de tickets exportĂ©es, -alignements UI en cours, etc.). +Dossier **vide** aprĂšs clĂŽture 0.1.0 (purge sept. 2026). -- PrĂ©fixe conseillĂ© pour les nouveaux fichiers jetables : **`TEMP_`** ou - **`WIP_`** dans ce dossier. -- **Suppression** : dĂšs que la fonctionnalitĂ© est livrĂ©e ou le sujet clos, - supprimer le fichier (ou le dĂ©placer vers `obsolete/` si une trace utile - reste nĂ©cessaire). +Si un brouillon de travail est nĂ©cessaire un temps : + +- le placer ici avec prĂ©fixe `TEMP_` / `WIP_` ; +- le **supprimer** dĂšs livraison (ne pas laisser pourrir) ; +- pour une trace utile durable → bilan de version ou archive `obsolete/`. + +Ne plus utiliser `docs/tmp/`. diff --git a/docs/archive/temporaires/TEMP_112-back-reprise-alignement-front.md b/docs/archive/temporaires/TEMP_112-back-reprise-alignement-front.md deleted file mode 100644 index 65eff55..0000000 --- a/docs/archive/temporaires/TEMP_112-back-reprise-alignement-front.md +++ /dev/null @@ -1,244 +0,0 @@ -# #112 — Alignement front aprĂšs Ă©volution back (reprise dossier complet) - -**Branche dĂ©ployĂ©e :** `feature/112-reprise-apres-refus-front` -**Commit back :** `d70577b1` — `feat(#112): reprise aprĂšs refus — dossier complet GET/PATCH` -**Date :** 2026-06-16 - -Ce document dĂ©crit le **contrat API rĂ©el** aprĂšs extension du back, et ce que le front doit encore brancher pour exploiter le dossier complet (au-delĂ  de l’identitĂ© seule). - ---- - -## 1. Endpoints (inchangĂ©s cĂŽtĂ© URL) - -| MĂ©thode | Route | Auth | -|---------|-------|------| -| `GET` | `/api/v1/auth/reprise-dossier?token={uuid}` | Public | -| `PATCH` | `/api/v1/auth/reprise-resoumettre` | Public | -| `POST` | `/api/v1/auth/reprise-identify` | Public (inchangĂ©) | - -> **Note :** le ticket #111 parlait de `PUT` ; l’implĂ©mentation reste en **`PATCH`** (comme avant). - ---- - -## 2. `GET /auth/reprise-dossier` — rĂ©ponse enrichie - -### Champs communs (toujours prĂ©sents) - -Identiques Ă  avant : `id`, `email`, `prenom`, `nom`, `telephone`, `adresse`, `ville`, `code_postal`, `numero_dossier`, `role`, `photo_url`, `genre`, `situation_familiale`. - -### RĂŽle `parent` (+ champs #119) - -AlignĂ©s sur `DossierFamilleCompletDto` : - -```json -{ - "parents": [ - { - "user_id": "uuid", - "email": "
", - "prenom": "
", - "nom": "
", - "telephone": "
", - "adresse": "
", - "ville": "
", - "code_postal": "
", - "statut": "refuse", - "co_parent_id": "uuid-parent-entity" - } - ], - "enfants": [ - { - "id": "uuid-enfant", - "first_name": "Emma", - "last_name": "MARTIN", - "genre": "F", - "status": "actif", - "birth_date": "2023-02-15T00:00:00.000Z", - "due_date": null, - "photo_url": "/uploads/photos/
", - "consent_photo": true, - "est_multiple": false - } - ], - "texte_motivation": "Nous recherchons
" -} -``` - -**Mapping front suggĂ©rĂ© :** - -| JSON back | ModĂšle / wizard parent | -|-----------|-------------------------| -| `parents[]` | `UserRegistrationData.parent1` + `parent2` (matcher par `email` ou ordre : titulaire = `id` du GET racine) | -| `enfants[].first_name` / `last_name` | `ChildData.firstName` / `lastName` | -| `enfants[].birth_date` | `ChildData.birthDate` (ISO → `DateTime`) | -| `enfants[].due_date` | `ChildData.dueDate` (enfant `a_naitre`) | -| `enfants[].status` | `actif` = nĂ©, `a_naitre` = Ă  naĂźtre | -| `enfants[].photo_url` | `ApiConfig.absoluteMediaUrl()` + conserver pour reprise sans re-upload | -| `enfants[].id` | **Obligatoire** pour le PATCH (update par id) | -| `enfants[].est_multiple` | `grossesse_multiple` si utilisĂ© | -| `texte_motivation` | Ă©tape prĂ©sentation / motivation | - -Si `numero_dossier` absent : pas de `parents[]` / `enfants[]` / `texte_motivation` (identitĂ© seule). - -### RĂŽle `assistante_maternelle` - -Champs racine + fiche pro (structure **aplatie**, pas de sous-objet `user`) : - -```json -{ - "consentement_photo": true, - "date_naissance": "1985-03-12T00:00:00.000Z", - "lieu_naissance_ville": "Paris", - "lieu_naissance_pays": "France", - "numero_agrement": "AGR-2024-12345", - "nir": "123456789012345", - "date_agrement": "2024-06-01T00:00:00.000Z", - "nb_max_enfants": 4, - "place_disponible": 2, - "biographie": "
" -} -``` - -**Mapping `AmRegistrationData` :** - -| JSON back | Champ front | -|-----------|-------------| -| `nb_max_enfants` | `capaciteAccueil` | -| `place_disponible` | `placesDisponibles` | -| `numero_agrement` | `numeroAgrement` | -| `biographie` | `biographie` / prĂ©sentation | -| `photo_url` | dĂ©jĂ  gĂ©rĂ© via `RepriseSession.photoUrl` | - ---- - -## 3. `PATCH /auth/reprise-resoumettre` — body Ă©tendu - -### Commun - -```json -{ "token": "uuid-reprise" } -``` - -### Parent — champs Ă  envoyer depuis le wizard - -| Champ PATCH | Source wizard | Notes | -|-------------|---------------|-------| -| `prenom`, `nom`, `telephone`, `adresse`, `ville`, `code_postal` | Parent 1 (titulaire token) | Champs racine | -| `co_parent_prenom`, `co_parent_nom`, `co_parent_telephone` | Parent 2 | | -| `co_parent_meme_adresse`, `co_parent_adresse`, `co_parent_code_postal`, `co_parent_ville` | Parent 2 adresse | | -| `texte_motivation` **ou** `presentation_dossier` | Étape motivation | Les deux alias acceptĂ©s | -| `enfants[]` | Liste enfants | Voir ci-dessous | - -**Structure `enfants[]` (miroir inscription + `id` obligatoire) :** - -```json -{ - "id": "uuid-enfant-existant", - "prenom": "Emma", - "nom": "MARTIN", - "date_naissance": "2023-02-15", - "date_previsionnelle_naissance": null, - "genre": "F", - "photo_base64": "data:image/jpeg;base64,
", - "photo_filename": "emma.jpg", - "grossesse_multiple": false -} -``` - -- **v1 back :** update par `id` uniquement — pas de crĂ©ation/suppression d’enfant. -- Si `id` inconnu pour ce dossier → **400** `Enfant inconnu pour ce dossier : {id}`. -- Sans nouvelle photo : ne pas envoyer `photo_base64` (l’existant est conservĂ©). - -### AM — champs Ă  envoyer - -| Champ PATCH | Source | -|-------------|--------| -| IdentitĂ© + `photo_url` ou `photo_base64` + `photo_filename` | Étapes 1–2 | -| `consentement_photo`, `date_naissance`, `lieu_naissance_ville`, `lieu_naissance_pays` | IdentitĂ© | -| `numero_agrement`, `nir`, `date_agrement` | Pro | -| `capacite_accueil`, `places_disponibles` | Pro | -| `biographie` | PrĂ©sentation | - -Validation NIR identique Ă  l’inscription si `nir` fourni. - -### RĂ©ponse succĂšs (nouveau format) - -```json -{ - "message": "Dossier resoumis avec succĂšs. Il est de nouveau en attente de validation.", - "statut": "en_attente", - "user_id": "uuid", - "numero_dossier": "2026-000021" -} -``` - -Code HTTP : **200** (pas de corps `Users` brut comme l’ancien back). - -### Effet mĂ©tier - -- **Parent :** tous les users `role=parent` avec le mĂȘme `numero_dossier` passent en `en_attente` ; `token_reprise` invalidĂ© sur **tous** (symĂ©trique refus #110). -- **AM :** un seul user. - -### E-mail accusĂ© resoumission (parent) - -AprĂšs `PATCH` rĂ©ussi, un e-mail est envoyĂ© Ă  **chaque parent** du dossier (`sendResoumissionPendingEmail`) : -- confirmation de resoumission ; -- rappel du **numĂ©ro de dossier** ; -- mention « en attente de validation ». - -Échec SMTP : loguĂ©, **ne bloque pas** la resoumission (mĂȘme rĂšgle que l'inscription initiale). - ---- - -## 4. Fichiers front Ă  modifier (checklist) - -### ModĂšles - -- [ ] `lib/models/reprise_dossier.dart` — parser `parents[]`, `enfants[]`, `texte_motivation`, champs AM -- [ ] RĂ©utiliser ou mapper vers `DossierFamilleEnfant` / structures existantes (#119 admin) si possible - -### Session / prĂ©remplissage - -- [ ] `lib/services/reprise_session.dart` - - `applyToParent` : remplir parent1/parent2 depuis `parents[]`, enfants, motivation - - `applyToAm` : remplir tous les champs AM - -### API - -- [ ] `lib/services/auth_service.dart` — `resoumettreReprise()` : accepter body complet (parent + AM), pas seulement identitĂ© -- [ ] Étendre `UserRegistrationData` / `AmRegistrationData` helpers `toReprisePatchBody()` si utile - -### Écrans fin de parcours - -- [ ] `parent_register_step5_screen.dart` — PATCH avec co-parent, enfants, motivation -- [ ] `am_register_step4_screen.dart` — PATCH avec fiche AM complĂšte - -### Hors scope back (inchangĂ©) - -RIB / IBAN / attestation CAF (Ă©tape 5 wizard parent) : **non persistĂ©s** — rien Ă  envoyer en reprise. - -### Non implĂ©mentĂ© front (ticket #112 initial) - -- [ ] Modale login « J’ai un numĂ©ro de dossier » → `POST /auth/reprise-identify` (back prĂȘt, front absent) - ---- - -## 5. Tests manuels suggĂ©rĂ©s - -1. Refuser un dossier parent complet (≄1 enfant + co-parent + motivation). -2. Ouvrir le lien mail `/reprise?token=
`. -3. VĂ©rifier dans DevTools que le GET contient `enfants[]` et `texte_motivation`. -4. AprĂšs branchement front : wizard prĂ©rempli sur toutes les Ă©tapes. -5. Resoumettre → statut `en_attente` pour les deux parents ; dossier visible file validation admin (#119). - ---- - -## 6. RĂ©fĂ©rences code back - -``` -backend/src/routes/auth/dto/reprise-dossier.dto.ts -backend/src/routes/auth/dto/resoumettre-reprise.dto.ts -backend/src/routes/auth/dto/enfant-reprise.dto.ts -backend/src/routes/auth/auth.service.ts → getRepriseDossier, resoumettreReprise -backend/src/routes/parents/dto/dossier-famille-complet.dto.ts -``` diff --git a/docs/archive/temporaires/TEMP_131-back-fiche-am-enfants.md b/docs/archive/temporaires/TEMP_131-back-fiche-am-enfants.md deleted file mode 100644 index 870ef51..0000000 --- a/docs/archive/temporaires/TEMP_131-back-fiche-am-enfants.md +++ /dev/null @@ -1,132 +0,0 @@ -# #131 — Fiche AM Ă©ditable + affiliation enfants (note front → back) - -**Ticket :** #131 (partie AM, doc `28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md` §6.1) -**Date :** 2026-06-01 -**Statut front :** modale livrĂ©e (2 onglets) — **API affiliation AM↔enfant Ă  implĂ©menter** - ---- - -## 1. Comportement UI (front) - -Modale `AdminAmEditModal` — mĂȘme shell que la fiche parent (~930 px) : - -| Onglet | Contenu | -|--------|---------| -| **IdentitĂ© & professionnel** | `IdentityBlock` Ă©ditable + grille pro (agrĂ©ment, ville rĂ©sidence, capacitĂ©, places, NIR/agrĂ©ment date en lecture seule, biographie, switch disponible) + gĂ©lule statut | -| **Enfants accueillis** | Liste cartes enfants (rĂ©utilise `AdminChildrenAffiliationPanel` / `AdminEnfantUserCard`) + rattacher / dĂ©tacher | - -En-tĂȘte : prĂ©nom nom · sous-titre `Zone · AgrĂ©ment · Dossier`. - ---- - -## 2. Endpoints consommĂ©s - -### DĂ©jĂ  existants (partiels) - -| MĂ©thode | Route | Usage | -|---------|-------|-------| -| `GET` | `/api/v1/assistantes-maternelles` | Liste AM | -| `GET` | `/api/v1/assistantes-maternelles/:userId` | DĂ©tail (403 possible pour `administrateur` → fallback liste) | -| `PATCH` | `/api/v1/users/:userId` | IdentitĂ© + statut (admin / super_admin uniquement) | -| `PATCH` | `/api/v1/assistantes-maternelles/:userId` | Champs pro (gestionnaire / super_admin) | - -### À crĂ©er (recommandĂ© — miroir parent #131 / #115) - -| MĂ©thode | Route | RĂŽle | -|---------|-------|------| -| `PATCH` | `/api/v1/assistantes-maternelles/:userId/fiche` | Mise Ă  jour unifiĂ©e identitĂ© + pro + statut (`super_admin`, `gestionnaire`, `administrateur`) | -| `POST` | `/api/v1/assistantes-maternelles/:userId/enfants/:enfantId` | Rattacher un enfant | -| `DELETE` | `/api/v1/assistantes-maternelles/:userId/enfants/:enfantId` | DĂ©tacher un enfant | -| `GET` | `/api/v1/assistantes-maternelles/:userId` | Inclure `amChildren[]` (relation enfant) | - -Le front appelle dĂ©jĂ  ces routes ; en l’absence de `PATCH 
/fiche`, il tente un fallback `PATCH users` + `PATCH assistantes-maternelles` (Ă©choue selon le rĂŽle connectĂ©). - ---- - -## 3. ModĂšle de donnĂ©es affiliation AM ↔ enfant - -**À dĂ©finir cĂŽtĂ© BDD** (pas de table dĂ©diĂ©e aujourd’hui, contrairement Ă  `enfants_parents`) : - -Proposition alignĂ©e parent : - -```sql --- Piste : enfants_assistantes_maternelles -CREATE TABLE enfants_assistantes_maternelles ( - id_am UUID NOT NULL REFERENCES utilisateurs(id) ON DELETE CASCADE, - id_enfant UUID NOT NULL REFERENCES enfants(id) ON DELETE CASCADE, - PRIMARY KEY (id_am, id_enfant) -); -``` - -RĂ©ponse API attendue sur `GET /assistantes-maternelles/:id` : - -```json -{ - "user_id": "uuid-am", - "user": { "id": "
", "prenom": "Claire", "nom": "MARTIN", "statut": "actif" }, - "approval_number": "AGR-2024-12345", - "residence_city": "Bezons", - "max_children": 4, - "places_available": 2, - "available": true, - "amChildren": [ - { - "child": { - "id": "uuid-enfant", - "first_name": "Emma", - "last_name": "MARTIN", - "status": "actif", - "birth_date": "2023-02-15" - } - } - ] -} -``` - -Le front parse `amChildren` / `am_children` / `assistanteChildren` (mĂȘme logique que `parentChildren`). - ---- - -## 4. Body `PATCH 
/fiche` suggĂ©rĂ© - -```json -{ - "nom": "MARTIN", - "prenom": "Claire", - "email": "claire@example.com", - "telephone": "0612345678", - "adresse": "5 place Bellecour", - "ville": "Lyon", - "code_postal": "69002", - "statut": "actif", - "approval_number": "AGR-2024-12345", - "residence_city": "Lyon", - "max_children": 4, - "places_available": 2, - "biography": "
", - "available": true -} -``` - -NIR et date d’agrĂ©ment : lecture seule dans la modale (modification hors pĂ©rimĂštre admin v1). - ---- - -## 5. Fichiers front concernĂ©s - -| Fichier | RĂŽle | -|---------|------| -| `frontend/lib/widgets/admin/common/admin_am_edit_modal.dart` | Modale 2 onglets | -| `frontend/lib/widgets/admin/common/admin_children_affiliation_panel.dart` | Liste enfants partagĂ©e parent/AM | -| `frontend/lib/widgets/admin/common/admin_status_capsule.dart` | GĂ©lule statut partagĂ©e | -| `frontend/lib/models/assistante_maternelle_model.dart` | Parse champs pro + `amChildren` | -| `frontend/lib/services/user_service.dart` | `getAssistanteMaternelle`, `updateAmFiche`, `attachEnfantToAm`, `detachEnfantFromAm` | -| `frontend/lib/widgets/admin/assistante_maternelle_management_widget.dart` | Ouverture modale au clic Modifier | - ---- - -## 6. RĂ©fĂ©rences - -- Fiche parent : `PATCH /parents/:id/fiche`, `POST|DELETE /parents/:id/enfants/:enfantId` -- Ticket Gitea **#131**, **#115** -- `docs/archive/temporaires/TEMP_131-back-fiche-parent-co-parent.md` diff --git a/docs/archive/temporaires/TEMP_131-back-fiche-parent-co-parent.md b/docs/archive/temporaires/TEMP_131-back-fiche-parent-co-parent.md deleted file mode 100644 index 43ac761..0000000 --- a/docs/archive/temporaires/TEMP_131-back-fiche-parent-co-parent.md +++ /dev/null @@ -1,124 +0,0 @@ -# #131 — En-tĂȘte fiche parent : co-parent (note front → back) - -**Ticket :** #131 (fiche parent dashboard, doc `28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md` §6.1) -**Date :** 2026-06-01 -**Statut front :** livrĂ© (en-tĂȘte dynamique) -**Modif backend demandĂ©e :** **aucune** — ce document fixe le contrat attendu et invite Ă  valider que l’existant le couvre. - ---- - -## 1. Comportement UI (front) - -Dans la modale **fiche parent** (`AdminParentEditModal`) : - -| Zone | Contenu | -|------|---------| -| **Titre** | `prenom` + `nom` du parent affichĂ© (plus le libellĂ© fixe « Fiche parent ») | -| **Sous-titre** | `Co-parent : {prenom} {nom}` — affichĂ© **uniquement** si un co-parent est connu | - -Le titre se met Ă  jour en direct pendant l’édition des champs nom/prĂ©nom. -Le sous-titre provient du co-parent **chargĂ© depuis l’API** (pas saisi Ă  la main dans la modale). - ---- - -## 2. Endpoints consommĂ©s - -| MĂ©thode | Route | Usage front | -|---------|-------|-------------| -| `GET` | `/api/v1/parents` | Liste parents (onglet Parents) | -| `GET` | `/api/v1/parents/:userId` | Rechargement fiche aprĂšs rattachement/dĂ©tachement enfant | -| `PATCH` | `/api/v1/parents/:userId/fiche` | Sauvegarde identitĂ© + statut (inchangĂ©) | - -RĂŽles : `super_admin`, `gestionnaire`, `administrateur` (selon route). - ---- - -## 3. Contrat JSON attendu pour `co_parent` - -Le front parse `ParentModel.fromJson` avec la clĂ© **`co_parent`** (snake_case), objet utilisateur imbriquĂ©. - -### Champs minimum utilisĂ©s pour le sous-titre - -| ClĂ© JSON | Usage | -|----------|--------| -| `co_parent` | Objet ou absent/`null` | -| `co_parent.id` | Identifiant (futur lien cliquable Ă©ventuel) | -| `co_parent.prenom` | Affichage | -| `co_parent.nom` | Affichage | - -Affichage front : `'{prenom} {nom}'.trim()` → libellĂ© `Co-parent : 
`. - -### Exemple de fragment de rĂ©ponse (`GET /parents/:id`) - -```json -{ - "user_id": "33333333-3333-3333-3333-333333333333", - "numero_dossier": "2026-000042", - "user": { - "id": "33333333-3333-3333-3333-333333333333", - "email": "parent1@example.com", - "prenom": "Paul", - "nom": "PARENT", - "statut": "actif", - "telephone": "0601020304" - }, - "co_parent": { - "id": "44444444-4444-4444-4444-444444444444", - "email": "coparent1@example.com", - "prenom": "Clara", - "nom": "COPARENT", - "role": "parent", - "statut": "actif" - }, - "parentChildren": [] -} -``` - -> **Note :** le front lit `user` (pas `utilisateur`). La doc `11_API.md` § Parents mentionne encore `utilisateur` / `id_co_parent` seul — le contrat **effectif** cĂŽtĂ© Nest/TypeORM est l’entitĂ© `Parents` sĂ©rialisĂ©e (`user`, `co_parent`, `parentChildren`, 
). - ---- - -## 4. État backend (Ă  valider, pas Ă  refaire) - -D’aprĂšs le code actuel (`parents.service.ts`) : - -- `findAll()` et `findOne(user_id)` chargent dĂ©jĂ  la relation **`co_parent`** ; -- la FK mĂ©tier est `parents.id_co_parent` → `utilisateurs.id` ; -- Ă  l’inscription couple, les deux sens sont en principe renseignĂ©s (`auth.service.ts`). - -**Checklist validation back :** - -- [ ] `GET /parents/:id` renvoie bien `co_parent` peuplĂ© quand `id_co_parent` est non null -- [ ] `GET /parents` (liste) inclut aussi `co_parent` (sous-titre disponible dĂšs l’ouverture sans re-fetch) -- [ ] Les champs `prenom` / `nom` du co-parent sont prĂ©sents dans la rĂ©ponse JSON - -Si ces trois points passent en recette, **aucun changement backend n’est nĂ©cessaire** pour cette fonctionnalitĂ©. - ---- - -## 5. Points d’attention (hors pĂ©rimĂštre immĂ©diat) - -| Sujet | DĂ©tail | -|-------|--------| -| **Lien inverse** | Si le parent B est le co-parent de A (`A.id_co_parent = B`) mais que `B.id_co_parent` est `null`, le sous-titre **ne s’affichera pas** sur la fiche de B. Le front ne fait pas de rĂ©solution inverse. À traiter cĂŽtĂ© back **seulement si** des donnĂ©es legacy ont un lien Ă  sens unique. | -| **Familles > 2 adultes** | Le sous-titre n’affiche que le co-parent direct (`id_co_parent`). Les autres responsables liĂ©s uniquement via `enfants_parents` ne sont pas listĂ©s ici (cf. doc 28 §6). | -| **DonnĂ©es sensibles** | VĂ©rifier que la sĂ©rialisation de `co_parent` n’expose pas `password` / tokens (mĂȘme remarque que pour `user`). | - ---- - -## 6. Fichiers front concernĂ©s - -| Fichier | RĂŽle | -|---------|------| -| `frontend/lib/models/parent_model.dart` | Parse `co_parent` → `AppUser? coParent` | -| `frontend/lib/widgets/admin/common/admin_parent_edit_modal.dart` | Titre + sous-titre | -| `frontend/lib/services/user_service.dart` | `getParents()` / `getParent()` | - ---- - -## 7. RĂ©fĂ©rences - -- `docs/28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md` §6.1 -- `backend/src/routes/parents/parents.service.ts` — `findOne`, `findAll` -- `backend/src/entities/parents.entity.ts` — relation `co_parent` -- Ticket Gitea **#131** diff --git a/docs/archive/temporaires/TEMP_FRONT_alignement_AM.md b/docs/archive/temporaires/TEMP_FRONT_alignement_AM.md deleted file mode 100644 index 21f2eed..0000000 --- a/docs/archive/temporaires/TEMP_FRONT_alignement_AM.md +++ /dev/null @@ -1,46 +0,0 @@ -# TEMP — Alignement front / API (inscription AM & validation gestionnaire) - -> **ArchivĂ©** (`docs/archive/temporaires/`) — **fichier temporaire** ; Ă  -> **supprimer** une fois le front livrĂ© ou le sujet clos (voir -> `docs/archive/temporaires/README.md`). - -Ce document dĂ©crit les changements **cĂŽtĂ© API** et ce que **Flutter** doit faire pour rester alignĂ©. Aucune modification front n’a Ă©tĂ© faite dans le chantier backend associĂ©. - -## 1. `POST /auth/register/am` — lieu de naissance obligatoire - -- **`lieu_naissance_ville`** et **`lieu_naissance_pays`** sont **obligatoires** (non vides aprĂšs trim, min. **2 caractĂšres** chacun, max 100). -- RĂ©ponses **400** si manquants ou invalides (messages class-validator). -- **Action front** : champs obligatoires dans le parcours AM (Ă©tapes identitĂ© / naissance), validation UI avant envoi ; afficher les erreurs renvoyĂ©es par l’API. - -## 2. RĂ©ponse `GET /dossiers/:numeroDossier` (type `am`) - -Sous `dossier.user`, l’API peut inclure : - -| ClĂ© JSON | Description | -|----------|-------------| -| `date_naissance` | Date (si renseignĂ©e Ă  l’inscription) | -| `lieu_naissance_ville` | Ville de naissance | -| `lieu_naissance_pays` | Pays de naissance | -| `consentement_photo` | BoolĂ©en (exposĂ© dans `dossier.user`) | - -À la **racine** de `dossier` (objet AM), champs dĂ©jĂ  renvoyĂ©s par le backend : `disponible`, `annees_experience`, `specialite`, `nb_max_enfants`, `place_disponible`, etc. - -**Action front** : - -- Étendre **`AppUser.fromJson` / `toJson`** (`lib/models/user.dart`) pour mapper `date_naissance`, `lieu_naissance_ville`, `lieu_naissance_pays`, `consentement_photo`. -- Étendre **`DossierAM.fromJson`** (`lib/models/dossier_unifie.dart`) pour parser `disponible`, `annees_experience`, `specialite` Ă  la racine du dossier (noms snake_case comme dans la rĂ©ponse JSON Nest). - -## 3. `ValidationAmWizard` (admin) - -Afficher pour cohĂ©rence avec le formulaire d’inscription : - -- **Informations personnelles** : date de naissance, ville / pays de naissance, consentement photo (Oui/Non). -- **Informations professionnelles** : disponibilitĂ©, annĂ©es d’expĂ©rience, spĂ©cialitĂ© (afficher « – » si `null`). - -## 4. `place_disponible` Ă  l’inscription - -- Le backend initialise **`place_disponible`** sur la fiche AM Ă  la **mĂȘme valeur** que **`capacite_accueil`** Ă  la crĂ©ation. Le wizard peut donc afficher une valeur cohĂ©rente avec la capacitĂ© sans champ sĂ©parĂ© cĂŽtĂ© public. - ---- - -*DerniĂšre mise Ă  jour : alignement backend branche `feature/120-inscription-am-photo-backend`.* diff --git a/docs/tmp/112-back-reprise-alignement-front.md b/docs/tmp/112-back-reprise-alignement-front.md deleted file mode 100644 index 65eff55..0000000 --- a/docs/tmp/112-back-reprise-alignement-front.md +++ /dev/null @@ -1,244 +0,0 @@ -# #112 — Alignement front aprĂšs Ă©volution back (reprise dossier complet) - -**Branche dĂ©ployĂ©e :** `feature/112-reprise-apres-refus-front` -**Commit back :** `d70577b1` — `feat(#112): reprise aprĂšs refus — dossier complet GET/PATCH` -**Date :** 2026-06-16 - -Ce document dĂ©crit le **contrat API rĂ©el** aprĂšs extension du back, et ce que le front doit encore brancher pour exploiter le dossier complet (au-delĂ  de l’identitĂ© seule). - ---- - -## 1. Endpoints (inchangĂ©s cĂŽtĂ© URL) - -| MĂ©thode | Route | Auth | -|---------|-------|------| -| `GET` | `/api/v1/auth/reprise-dossier?token={uuid}` | Public | -| `PATCH` | `/api/v1/auth/reprise-resoumettre` | Public | -| `POST` | `/api/v1/auth/reprise-identify` | Public (inchangĂ©) | - -> **Note :** le ticket #111 parlait de `PUT` ; l’implĂ©mentation reste en **`PATCH`** (comme avant). - ---- - -## 2. `GET /auth/reprise-dossier` — rĂ©ponse enrichie - -### Champs communs (toujours prĂ©sents) - -Identiques Ă  avant : `id`, `email`, `prenom`, `nom`, `telephone`, `adresse`, `ville`, `code_postal`, `numero_dossier`, `role`, `photo_url`, `genre`, `situation_familiale`. - -### RĂŽle `parent` (+ champs #119) - -AlignĂ©s sur `DossierFamilleCompletDto` : - -```json -{ - "parents": [ - { - "user_id": "uuid", - "email": "
", - "prenom": "
", - "nom": "
", - "telephone": "
", - "adresse": "
", - "ville": "
", - "code_postal": "
", - "statut": "refuse", - "co_parent_id": "uuid-parent-entity" - } - ], - "enfants": [ - { - "id": "uuid-enfant", - "first_name": "Emma", - "last_name": "MARTIN", - "genre": "F", - "status": "actif", - "birth_date": "2023-02-15T00:00:00.000Z", - "due_date": null, - "photo_url": "/uploads/photos/
", - "consent_photo": true, - "est_multiple": false - } - ], - "texte_motivation": "Nous recherchons
" -} -``` - -**Mapping front suggĂ©rĂ© :** - -| JSON back | ModĂšle / wizard parent | -|-----------|-------------------------| -| `parents[]` | `UserRegistrationData.parent1` + `parent2` (matcher par `email` ou ordre : titulaire = `id` du GET racine) | -| `enfants[].first_name` / `last_name` | `ChildData.firstName` / `lastName` | -| `enfants[].birth_date` | `ChildData.birthDate` (ISO → `DateTime`) | -| `enfants[].due_date` | `ChildData.dueDate` (enfant `a_naitre`) | -| `enfants[].status` | `actif` = nĂ©, `a_naitre` = Ă  naĂźtre | -| `enfants[].photo_url` | `ApiConfig.absoluteMediaUrl()` + conserver pour reprise sans re-upload | -| `enfants[].id` | **Obligatoire** pour le PATCH (update par id) | -| `enfants[].est_multiple` | `grossesse_multiple` si utilisĂ© | -| `texte_motivation` | Ă©tape prĂ©sentation / motivation | - -Si `numero_dossier` absent : pas de `parents[]` / `enfants[]` / `texte_motivation` (identitĂ© seule). - -### RĂŽle `assistante_maternelle` - -Champs racine + fiche pro (structure **aplatie**, pas de sous-objet `user`) : - -```json -{ - "consentement_photo": true, - "date_naissance": "1985-03-12T00:00:00.000Z", - "lieu_naissance_ville": "Paris", - "lieu_naissance_pays": "France", - "numero_agrement": "AGR-2024-12345", - "nir": "123456789012345", - "date_agrement": "2024-06-01T00:00:00.000Z", - "nb_max_enfants": 4, - "place_disponible": 2, - "biographie": "
" -} -``` - -**Mapping `AmRegistrationData` :** - -| JSON back | Champ front | -|-----------|-------------| -| `nb_max_enfants` | `capaciteAccueil` | -| `place_disponible` | `placesDisponibles` | -| `numero_agrement` | `numeroAgrement` | -| `biographie` | `biographie` / prĂ©sentation | -| `photo_url` | dĂ©jĂ  gĂ©rĂ© via `RepriseSession.photoUrl` | - ---- - -## 3. `PATCH /auth/reprise-resoumettre` — body Ă©tendu - -### Commun - -```json -{ "token": "uuid-reprise" } -``` - -### Parent — champs Ă  envoyer depuis le wizard - -| Champ PATCH | Source wizard | Notes | -|-------------|---------------|-------| -| `prenom`, `nom`, `telephone`, `adresse`, `ville`, `code_postal` | Parent 1 (titulaire token) | Champs racine | -| `co_parent_prenom`, `co_parent_nom`, `co_parent_telephone` | Parent 2 | | -| `co_parent_meme_adresse`, `co_parent_adresse`, `co_parent_code_postal`, `co_parent_ville` | Parent 2 adresse | | -| `texte_motivation` **ou** `presentation_dossier` | Étape motivation | Les deux alias acceptĂ©s | -| `enfants[]` | Liste enfants | Voir ci-dessous | - -**Structure `enfants[]` (miroir inscription + `id` obligatoire) :** - -```json -{ - "id": "uuid-enfant-existant", - "prenom": "Emma", - "nom": "MARTIN", - "date_naissance": "2023-02-15", - "date_previsionnelle_naissance": null, - "genre": "F", - "photo_base64": "data:image/jpeg;base64,
", - "photo_filename": "emma.jpg", - "grossesse_multiple": false -} -``` - -- **v1 back :** update par `id` uniquement — pas de crĂ©ation/suppression d’enfant. -- Si `id` inconnu pour ce dossier → **400** `Enfant inconnu pour ce dossier : {id}`. -- Sans nouvelle photo : ne pas envoyer `photo_base64` (l’existant est conservĂ©). - -### AM — champs Ă  envoyer - -| Champ PATCH | Source | -|-------------|--------| -| IdentitĂ© + `photo_url` ou `photo_base64` + `photo_filename` | Étapes 1–2 | -| `consentement_photo`, `date_naissance`, `lieu_naissance_ville`, `lieu_naissance_pays` | IdentitĂ© | -| `numero_agrement`, `nir`, `date_agrement` | Pro | -| `capacite_accueil`, `places_disponibles` | Pro | -| `biographie` | PrĂ©sentation | - -Validation NIR identique Ă  l’inscription si `nir` fourni. - -### RĂ©ponse succĂšs (nouveau format) - -```json -{ - "message": "Dossier resoumis avec succĂšs. Il est de nouveau en attente de validation.", - "statut": "en_attente", - "user_id": "uuid", - "numero_dossier": "2026-000021" -} -``` - -Code HTTP : **200** (pas de corps `Users` brut comme l’ancien back). - -### Effet mĂ©tier - -- **Parent :** tous les users `role=parent` avec le mĂȘme `numero_dossier` passent en `en_attente` ; `token_reprise` invalidĂ© sur **tous** (symĂ©trique refus #110). -- **AM :** un seul user. - -### E-mail accusĂ© resoumission (parent) - -AprĂšs `PATCH` rĂ©ussi, un e-mail est envoyĂ© Ă  **chaque parent** du dossier (`sendResoumissionPendingEmail`) : -- confirmation de resoumission ; -- rappel du **numĂ©ro de dossier** ; -- mention « en attente de validation ». - -Échec SMTP : loguĂ©, **ne bloque pas** la resoumission (mĂȘme rĂšgle que l'inscription initiale). - ---- - -## 4. Fichiers front Ă  modifier (checklist) - -### ModĂšles - -- [ ] `lib/models/reprise_dossier.dart` — parser `parents[]`, `enfants[]`, `texte_motivation`, champs AM -- [ ] RĂ©utiliser ou mapper vers `DossierFamilleEnfant` / structures existantes (#119 admin) si possible - -### Session / prĂ©remplissage - -- [ ] `lib/services/reprise_session.dart` - - `applyToParent` : remplir parent1/parent2 depuis `parents[]`, enfants, motivation - - `applyToAm` : remplir tous les champs AM - -### API - -- [ ] `lib/services/auth_service.dart` — `resoumettreReprise()` : accepter body complet (parent + AM), pas seulement identitĂ© -- [ ] Étendre `UserRegistrationData` / `AmRegistrationData` helpers `toReprisePatchBody()` si utile - -### Écrans fin de parcours - -- [ ] `parent_register_step5_screen.dart` — PATCH avec co-parent, enfants, motivation -- [ ] `am_register_step4_screen.dart` — PATCH avec fiche AM complĂšte - -### Hors scope back (inchangĂ©) - -RIB / IBAN / attestation CAF (Ă©tape 5 wizard parent) : **non persistĂ©s** — rien Ă  envoyer en reprise. - -### Non implĂ©mentĂ© front (ticket #112 initial) - -- [ ] Modale login « J’ai un numĂ©ro de dossier » → `POST /auth/reprise-identify` (back prĂȘt, front absent) - ---- - -## 5. Tests manuels suggĂ©rĂ©s - -1. Refuser un dossier parent complet (≄1 enfant + co-parent + motivation). -2. Ouvrir le lien mail `/reprise?token=
`. -3. VĂ©rifier dans DevTools que le GET contient `enfants[]` et `texte_motivation`. -4. AprĂšs branchement front : wizard prĂ©rempli sur toutes les Ă©tapes. -5. Resoumettre → statut `en_attente` pour les deux parents ; dossier visible file validation admin (#119). - ---- - -## 6. RĂ©fĂ©rences code back - -``` -backend/src/routes/auth/dto/reprise-dossier.dto.ts -backend/src/routes/auth/dto/resoumettre-reprise.dto.ts -backend/src/routes/auth/dto/enfant-reprise.dto.ts -backend/src/routes/auth/auth.service.ts → getRepriseDossier, resoumettreReprise -backend/src/routes/parents/dto/dossier-famille-complet.dto.ts -``` diff --git a/docs/tmp/129-contrat-api-staff-parent.md b/docs/tmp/129-contrat-api-staff-parent.md deleted file mode 100644 index b07e681..0000000 --- a/docs/tmp/129-contrat-api-staff-parent.md +++ /dev/null @@ -1,89 +0,0 @@ -# Mini-spec API — POST /parents/dossier (#129) - -Contrat pour le **plan front** (wizard crĂ©ation dossier famille staff). - -Miroir de **#156** (`POST /assistantes-maternelles/dossier`). - -## Endpoint - -| | | -|--|--| -| **MĂ©thode** | `POST` | -| **URL** | `{base}/parents/dossier` | -| **Auth** | Bearer JWT | -| **RĂŽles** | `gestionnaire`, `administrateur`, `super_admin` | -| **Content-Type** | `application/json` | - -Ne **pas** appeler `POST /auth/register/parent` depuis le dashboard. - -## Body (JSON) - -AlignĂ© `RegisterParentCompletDto`, **sans** CGU/privacy obligatoires (acceptĂ©es serveur). - -### Parent 1 (obligatoire) - -| Champ | Type | Obligatoire | Notes | -|-------|------|-------------|--------| -| `email` | string | oui | unique | -| `prenom` | string | oui | | -| `nom` | string | oui | | -| `telephone` | string | oui | `0X
` ou `+33
` | -| `adresse` | string | non | | -| `code_postal` | string | non | | -| `ville` | string | non | | - -### Co-parent (optionnel) - -`co_parent_email`, `co_parent_prenom`, `co_parent_nom`, `co_parent_telephone`, -`co_parent_meme_adresse`, `co_parent_adresse`, `co_parent_code_postal`, `co_parent_ville`. - -Si co-parent fourni : e-mail distinct ; mĂȘmes rĂšgles tĂ©lĂ©phone / adresse que register. - -### Enfants (≄ 1) - -| Champ | Type | Notes | -|-------|------|--------| -| `enfants` | `EnfantInscriptionDto[]` | `prenom`, `nom`, `date_naissance` / `date_previsionnelle_naissance`, `genre`, `photo_base64`, `photo_filename`, etc. | - -### PrĂ©sentation - -| Champ | Type | Obligatoire | -|-------|------|-------------| -| `presentation_dossier` | string | non (max 2000) | - -## RĂ©ponses - -### 201 Created - -```json -{ - "message": "Dossier famille créé et validĂ©. Un e-mail de crĂ©ation de mot de passe a Ă©tĂ© envoyĂ©.", - "numero_dossier": "2026-000043", - "parent_user_id": "uuid-pivot", - "co_parent_user_id": "uuid-ou-null", - "statut": "actif", - "enfant_ids": ["uuid", "..."] -} -``` - -Effets serveur : user(s) parent **actif**, fiches `parents`, enfants + foyer, n° dossier, -**e-mail crĂ©ation MDP** pour chaque compte sans MDP (pas d’accusĂ© « en attente »). - -### Erreurs - -| Code | Cas | -|------|-----| -| 400 | Validation DTO / mĂ©tier (enfants vides, dates, etc.) | -| 401 | Token manquant / invalide | -| 403 | RĂŽle non staff | -| 409 | Conflit e-mail (pivot et/ou co-parent) | - -## Front - -- `UserService.createParentDossier(body)` → cet endpoint -- Wizard create basĂ© sur `ValidationFamilyWizard` -- Ne pas envoyer `acceptation_cgu` / `acceptation_privacy` (optionnels) - -## Branche - -`feature/129-creation-dossier-parent` diff --git a/docs/tmp/135-contrat-api-ajout-co-parent.md b/docs/tmp/135-contrat-api-ajout-co-parent.md deleted file mode 100644 index dd47421..0000000 --- a/docs/tmp/135-contrat-api-ajout-co-parent.md +++ /dev/null @@ -1,73 +0,0 @@ -# Mini-spec API — POST /parents/:id/co-parent (#135) - -Contrat back pour l’ajout d’un **2ᔉ parent** sur un foyer mono-parent (staff). - -## Endpoint - -| | | -|--|--| -| **MĂ©thode** | `POST` | -| **URL** | `{base}/api/v1/parents/{parentUserId}/co-parent` | -| **Auth** | Bearer JWT | -| **RĂŽles** | `gestionnaire`, `administrateur`, `super_admin` | -| **SuccĂšs** | **201** | - -`parentUserId` = UUID du **parent pivot** (dĂ©jĂ  dans le dossier). - -Ne **pas** appeler `POST /auth/register/parent` ni `POST /parents/dossier`. - ---- - -## Body (JSON) - -| Champ | Type | Obligatoire | Notes | -|-------|------|-------------|--------| -| `email` | string | oui | unique | -| `prenom` | string | oui | | -| `nom` | string | oui | | -| `telephone` | string | oui | `0X
` ou `+33
` | -| `meme_adresse` | bool | non | dĂ©faut **true** → copie adresse du pivot | -| `adresse` | string | si `meme_adresse=false` | | -| `code_postal` | string | si `meme_adresse=false` | | -| `ville` | string | si `meme_adresse=false` | | - ---- - -## Comportement 201 - -- User co-parent **actif** + token crĂ©ation MDP -- Fiche `parents` + liens pivot ↔ co-parent + mĂȘme `numero_dossier` -- Enfants du foyer rattachĂ©s au co-parent -- E-mail **crĂ©ation MDP** (pas mail « en attente ») - -```json -{ - "message": "Co-parent ajoutĂ© au foyer. Un e-mail de crĂ©ation de mot de passe a Ă©tĂ© envoyĂ©.", - "numero_dossier": "2026-000043", - "parent_user_id": "uuid-pivot", - "co_parent_user_id": "uuid-co", - "statut": "actif" -} -``` - -## Erreurs - -| Code | Cas | -|------|-----| -| 400 | DĂ©jĂ  un co-parent / 2 responsables / validation adresse | -| 401 | Token invalide | -| 403 | RĂŽle non staff | -| 404 | Pivot introuvable | -| 409 | Email dĂ©jĂ  pris | - -## RĂ©emploi Ă©dition identitĂ© - -| Endpoint | Usage | -|----------|--------| -| `GET /dossiers/:numero` | PrĂ©remplir wizard edit | -| `PATCH /parents/:id/fiche` | Sauver identitĂ© pivot / co-parent existant | -| `PATCH /assistantes-maternelles/:id/fiche` | Édition AM | - -## Branche - -`feature/135-edition-dossier` diff --git a/docs/tmp/135-mini-spec-front-edition-dossier.md b/docs/tmp/135-mini-spec-front-edition-dossier.md deleted file mode 100644 index f20113b..0000000 --- a/docs/tmp/135-mini-spec-front-edition-dossier.md +++ /dev/null @@ -1,83 +0,0 @@ -# Mini-spec front — Mode Ă©dition dossier + ajout 2ᔉ parent (#135) - -Branche : `feature/135-edition-dossier` -Ticket : **#135** (full-stack) - -PrĂ©requis : **#153** (liste Dossiers) livrĂ©. - ---- - -## Objectif - -1. Clic sur un dossier (liste #153) → ouvrir le wizard en mode **`edit`** -2. Foyer **mono-parent** : page co-parent → **switch** ajouter un 2ᔉ parent -3. Sauvegarder les champs via APIs existantes + nouvel endpoint co-parent - ---- - -## Modes wizard - -| Mode | Famille | AM | -|------|---------|-----| -| `review` | dĂ©jĂ  | dĂ©jĂ  | -| `create` | dĂ©jĂ  (#129) | dĂ©jĂ  (#156) | -| **`edit`** | **Ă  faire** | **Ă  faire** | - -Factories : `ParentDossierWizard.edit(...)` / `AmDossierWizard.edit(...)` -PrĂ©remplir via `UserService.getDossierByNumero(numero)`. - ---- - -## APIs - -| Action | Endpoint | -|--------|----------| -| Charger | `GET /dossiers/:numero` | -| Sauver parent | `PATCH /parents/:id/fiche` | -| Sauver AM | `PATCH /assistantes-maternelles/:id/fiche` | -| **Ajouter co-parent** | **`POST /parents/:pivotUserId/co-parent`** — voir `docs/tmp/135-contrat-api-ajout-co-parent.md` | - -Body co-parent : - -```json -{ - "email": "thomas@
", - "prenom": "Thomas", - "nom": "MARTIN", - "telephone": "0678456789", - "meme_adresse": true -} -``` - -`UserService.addCoParent(pivotUserId, body)` → cet endpoint. - ---- - -## UX - -- Depuis `DossiersManagementWidget` / carte liste : clic → edit (plus seulement review pending) -- Pending : garder validation (review) ; dossiers actifs → edit -- Mono-parent : switch « Ajouter un co-parent » (comme create) → au save, `POST 
/co-parent` si nouveau -- DĂ©jĂ  2 parents : Ă©diter les deux fiches ; pas de 3ᔉ -- Pas de bouton crĂ©er dans l’onglet Dossiers - ---- - -## Hors scope - -- Famille N responsables (#139) -- Suppressions (#154) -- CrĂ©ation dossier initial (#129 / #156) - ---- - -## CritĂšres d’acceptation - -- [ ] Clic dossier actif → wizard edit prĂ©rempli -- [ ] PATCH fiche enregistre les modifs -- [ ] Mono-parent + switch → co-parent créé (actif + mail MDP) -- [ ] review / create inchangĂ©s - -## Branche - -`feature/135-edition-dossier` diff --git a/docs/tmp/152-mini-spec-front-est-multiple.md b/docs/tmp/152-mini-spec-front-est-multiple.md deleted file mode 100644 index 0576312..0000000 --- a/docs/tmp/152-mini-spec-front-est-multiple.md +++ /dev/null @@ -1,65 +0,0 @@ -# Mini-spec — Suppression complĂšte grossesse multiple / `est_multiple` - -**Ticket** : **#152** — https://git.ptits-pas.fr/jmartin/petitspas/issues/152 -**Branche** : `feature/152-remove-est-multiple` (depuis `develop`) -**PĂ©rimĂštre** : **full stack** — BDD + back + front + scripts + docs. **Aucun fantĂŽme.** - ---- - -## DĂ©cision - -On **supprime tout**. Pas de DTO « ignorĂ©s », pas de compat payload. - -`forbidNonWhitelisted: true` ⇒ back et front **partent ensemble** (mĂȘme feature / mĂȘme dĂ©ploiement). - ---- - -## Alias retirĂ©s - -`est_multiple` · `is_multiple` · `grossesse_multiple` · `multipleBirth` · `estMultiple` · `isMultiple` · `jumeau_multiple` - ---- - -## Back / BDD (fait sur la branche) - -- [x] Migration `database/migrations/2026_drop_enfants_est_multiple.sql` -- [x] `BDD.sql`, seeds, CSV test -- [x] Entity `Children` sans colonne -- [x] DTO create/inscription/rĂ©ponse/dossier famille **sans** le champ -- [x] Services auth / enfants / parents : plus de mapping -- [x] Prisma legacy `isMultiple` retirĂ© - -## Front (fait sur la branche) - -- [x] ModĂšles admin / dossier / inscription -- [x] Payloads inscription + reprise -- [x] Modale enfant + wizard dossier famille -- [x] Step3 inscription parent - -## Scripts / docs - -- [x] `tests/scripts/register-parent-*.mjs` -- [x] `docs/10_DATABASE.md`, `docs/99_REGLES-CODAGE.md` -- Docs tmp/archive #112 : mentions historiques OK (archive) - ---- - -## DĂ©ploiement - -1. Appliquer la migration SQL sur la BDD vivante -2. Deploy back **et** front de cette branche -3. Smoke : crĂ©ation enfant staff, inscription parent, reprise, wizard famille - -## VĂ©rif - -```bash -rg -n 'est_multiple|is_multiple|grossesse_multiple|multipleBirth|estMultiple|isMultiple|jumeau_multiple' \ - backend/src frontend/lib database tests/scripts docs/10_DATABASE.md docs/99_REGLES-CODAGE.md -``` -→ **0** hit (hors ce fichier mini-spec / archives). - -## Hors scope - -- MĂ©tier futur « fratrie / jumeaux » → nouveau ticket -- #155 rename Admin* -- Ticket modales staff diff --git a/docs/tmp/153-contrat-api-liste-dossiers.md b/docs/tmp/153-contrat-api-liste-dossiers.md deleted file mode 100644 index b427a7f..0000000 --- a/docs/tmp/153-contrat-api-liste-dossiers.md +++ /dev/null @@ -1,77 +0,0 @@ -# Mini-spec API — GET /dossiers (#153) - -Contrat pour le **plan front** (onglet permanent Dossiers). - -## Endpoint - -| | | -|--|--| -| **MĂ©thode** | `GET` | -| **URL** | `{base}/api/v1/dossiers` | -| **Auth** | Bearer JWT | -| **RĂŽles** | `gestionnaire`, `administrateur`, `super_admin` | -| **Query** | `q` (optionnel) — recherche n° / libellĂ© / email | - -ComplĂšte `GET /dossiers/:numeroDossier` (#119) dĂ©jĂ  existant. - ---- - -## RĂ©ponse 200 - -Tableau de lignes (1 entrĂ©e = 1 `numero_dossier`) : - -```json -[ - { - "type": "famille", - "numero_dossier": "2026-000043", - "libelle": "Claire MARTIN & Thomas MARTIN", - "emails": ["claire@test.fr", "thomas@test.fr"], - "user_ids": ["uuid-pivot", "uuid-co"], - "statut": "actif", - "a_valider": false, - "date_reference": "2026-01-12T10:00:00.000Z" - }, - { - "type": "assistante_maternelle", - "numero_dossier": "2026-000042", - "libelle": "Marie DUPONT", - "emails": ["marie@test.fr"], - "user_ids": ["uuid-am"], - "statut": "en_attente", - "a_valider": true, - "date_reference": "2026-02-01T08:00:00.000Z" - } -] -``` - -### Champs - -| Champ | Notes | -|-------|--------| -| `type` | `famille` \| `assistante_maternelle` | -| `numero_dossier` | ClĂ© d’unitĂ© | -| `libelle` | Noms formatĂ©s (foyer : `A & B`) | -| `emails` / `user_ids` | Membres du foyer ou AM | -| `statut` | AgrĂ©gĂ© : `en_attente` si au moins un user pending | -| `a_valider` | `true` si pending → section haute UI | -| `date_reference` | `MIN(cree_le)` des users | - -**Tri** : `a_valider` d’abord, puis `numero_dossier` dĂ©croissant. - -**Famille** : dĂ©dupliquĂ©e par `numero_dossier` (pivot + co-parent = 1 ligne). - ---- - -## Front - -- `UserService.getDossiers({ q? })` → cet endpoint -- Section haute : filtrer `a_valider == true` **ou** continuer pending APIs existantes -- Section basse : liste complĂšte (ou hors pending selon rĂšgle UX) -- Clic → `GET /dossiers/:numero` (dĂ©tail) / validation review - -Composition client `getParents`+`getAM` **plus nĂ©cessaire** si cet endpoint est dĂ©ployĂ©. - -## Branche - -`feature/153-onglet-dossiers` diff --git a/docs/tmp/153-mini-spec-front-dossiers.md b/docs/tmp/153-mini-spec-front-dossiers.md deleted file mode 100644 index 9e4f8f6..0000000 --- a/docs/tmp/153-mini-spec-front-dossiers.md +++ /dev/null @@ -1,167 +0,0 @@ -# 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`) diff --git a/docs/tmp/154-matrice-suppression.md b/docs/tmp/154-matrice-suppression.md deleted file mode 100644 index fc1da2f..0000000 --- a/docs/tmp/154-matrice-suppression.md +++ /dev/null @@ -1,35 +0,0 @@ -# Matrice suppression — #154 / back **#159** / front **#160** - -**Statut** : cadrage PO validĂ© (sept. 2026) -**Milestone** : 0.1.0 -**Email** : pas d’email de suppression (cas rare) - -## Droits - -| Cible | Qui peut supprimer | -|-------|-------------------| -| Dossier / parent / enfant / AM | `GESTIONNAIRE`, `ADMINISTRATEUR`, `SUPER_ADMIN` | -| Gestionnaire (user) | `ADMINISTRATEUR`, `SUPER_ADMIN` | -| Administrateur (user) | Autre admin OK ; **self interdit** ; **dernier admin** = `SUPER_ADMIN` only ; `SUPER_ADMIN` non supprimable | - -## Matrice mĂ©tier - -| Point d’entrĂ©e | Action | Effet | -|----------------|--------|--------| -| Dossiers | Delete dossier **famille** | Tous **parents** + tous **enfants** ; clore placements AM des enfants | -| Dossiers / AM | Delete dossier **AM** ou compte AM | **Compte AM + dossier AM** ; enfants **conservĂ©s** ; placements **clos** | -| Parents | Co-parent (autre parent reste) | Compte parent seul ; dossier + enfants restent | -| Parents | Dernier parent | Parent + **enfants** rattachĂ©s | -| Enfants | Pas dernier | Enfant seul (retirĂ© du dossier) | -| Enfants | Dernier + `deleteDossier=true` | Cascade dossier famille (parents + enfants) | -| Enfants | Dernier + `deleteDossier=false` | Enfant seul ; dossier peut apparaĂźtre **`sans_enfant`** | -| Pending / validĂ© | — | **MĂȘmes rĂšgles** (pas de diffĂ©renciation) | - -## Warning - -- `sans_enfant` sur liste `GET /dossiers` (dossier famille sans enfant liĂ©). -- Miroir de `sans_responsable` (#157) cĂŽtĂ© enfants. - -## Hors scope - -Soft-delete RGPD, audit (#128), famille N (#139), restriction admin-only mĂ©tier (plus tard). diff --git a/docs/tmp/154-mini-spec-front-suppression.md b/docs/tmp/154-mini-spec-front-suppression.md deleted file mode 100644 index 271b26d..0000000 --- a/docs/tmp/154-mini-spec-front-suppression.md +++ /dev/null @@ -1,169 +0,0 @@ -# Mini-spec front — Suppressions dashboard - -**Ticket front** : **#160** — https://git.ptits-pas.fr/jmartin/petitspas/issues/160 -**Ticket back** : **#159** — https://git.ptits-pas.fr/jmartin/petitspas/issues/159 -**Epic** : #154 (complĂšte #133) -**Branche back** : `feature/159-suppressions-backend` -**Doc matrice** : [154-matrice-suppression.md](./154-matrice-suppression.md) - -Travail **en parallĂšle** : ce contrat est la source de vĂ©ritĂ© UI ↔ API. - ---- - -## UX commune - -Sur chaque ligne / carte des listes : - -- IcĂŽne **poubelle** en bout de ligne -- Clic → **dialog de confirmation** (texte d’impact) → DELETE → **refresh** liste -- Pending = **mĂȘmes** rĂšgles que validĂ©s -- **Pas** d’email - -| Liste | Poubelle visible si | -|-------|---------------------| -| Dossiers, Parents, Enfants, AM | gestionnaire **ou** admin | -| Gestionnaires | **admin** only | -| Administrateurs | admin+ ; **pas** sur sa propre ligne ; dernier admin : UI warning + rĂ©servĂ© super_admin | - ---- - -## Contrat API - -Base : auth Bearer. Erreurs : `400` / `403` / `404` / `409` avec `message` FR. - -### 1. `DELETE /dossiers/:numeroDossier` - -- **Famille** → supprime tous parents + enfants du n° ; clos placements AM des enfants. -- **AM** → compte AM + dossier AM ; enfants gardĂ©s ; placements clos. - -**RĂ©ponse 200** (exemple) : - -```json -{ - "type": "famille", - "numero_dossier": "2026-000043", - "deleted_user_ids": ["
"], - "deleted_enfant_ids": ["
"], - "message": "Dossier famille supprimĂ©." -} -``` - -ou - -```json -{ - "type": "assistante_maternelle", - "numero_dossier": "2026-000015", - "deleted_user_ids": ["
"], - "deleted_enfant_ids": [], - "message": "Dossier assistante maternelle supprimĂ©." -} -``` - -**Dialog UI** : lister libellĂ© + n° + « X parent(s), Y enfant(s) » (ou « compte AM, enfants conservĂ©s »). - ---- - -### 2. `DELETE /users/:id` - -Comportement selon le **rĂŽle** de la cible : - -| Cible | Effet | -|-------|--------| -| Parent **co-parent** | Delete ce user seul | -| Parent **dernier** du dossier | Delete user + enfants du foyer | -| AM | Delete user AM + dossier AM ; enfants conservĂ©s ; placements clos | -| Gestionnaire | Admin only ; self → 403 | -| Administrateur | Self → 403 ; dernier admin → super_admin only sinon 403 ; super_admin → 403 | - -**RĂ©ponse 200** : - -```json -{ - "deleted_user_ids": ["
"], - "deleted_enfant_ids": ["
"], - "message": "
" -} -``` - -**Dialogs** : - -- Co-parent : « Ce parent sera retirĂ© / supprimĂ© du dossier {n°}. Les enfants restent avec le co-parent. » -- Dernier parent : « Dernier parent du dossier {n°}. Les enfants rattachĂ©s seront aussi supprimĂ©s. » -- AM : « Le compte et le dossier AM seront supprimĂ©s. Les enfants accueillis ne seront pas supprimĂ©s. » - -Optionnel (si exposĂ©) : `GET /users/:id/suppression-impact` — sinon calculer depuis donnĂ©es dĂ©jĂ  en liste / dĂ©tail dossier. - ---- - -### 3. `DELETE /enfants/:id?deleteDossier=true|false` - -- Pas dernier enfant → delete enfant (`deleteDossier` ignorĂ© ou false). -- Dernier enfant + `deleteDossier=false` → delete enfant ; dossier famille peut passer `sans_enfant`. -- Dernier enfant + `deleteDossier=true` → cascade dossier famille (parents + enfants). - -**RĂ©ponse 200** : - -```json -{ - "deleted_enfant_ids": ["
"], - "deleted_user_ids": ["
"], - "dossier_supprime": false, - "message": "
" -} -``` - -**Dialog** : - -- Standard : « L’enfant sera supprimĂ© du dossier de {famille} ({n°}). » -- Dernier : proposer **deux actions** : - 1. Supprimer l’enfant seulement (`deleteDossier=false`) - 2. Supprimer aussi le dossier / parents (`deleteDossier=true`) - -Pour savoir si dernier : compter enfants du `numero_dossier` (dĂ©tail dossier ou champ impact API). - ---- - -### 4. `GET /dossiers` — flag `sans_enfant` - -Chaque item famille peut exposer : - -```json -"sans_enfant": true -``` - -- `true` si dossier **famille** sans enfant liĂ©. -- AM : `false` ou omis. - -**UI** : badge / warning vigilance (comme `sans_responsable` / alertes AM). - ---- - -## UserService (Flutter) — signatures cibles - -```dart -Future deleteDossier(String numeroDossier); -Future> deleteUser(String userId); -Future> deleteEnfant(String enfantId, {bool deleteDossier = false}); -``` - -(Adapter le parsing au JSON rĂ©el une fois le back mergĂ© ; en parallĂšle, stubber sur ce contrat.) - ---- - -## Fichiers front probables - -- Cartes listes : `admin_user_card.dart`, `admin_enfant_user_card.dart`, cartes dossiers -- Listes : `dossiers_management_widget.dart`, `parent_managmant_widget.dart`, `enfant_management_widget.dart`, `assistante_maternelle_management_widget.dart`, `gestionnaire_management_widget.dart`, `admin_management_widget.dart` -- `user_service.dart` - ---- - -## CritĂšres front (#160) - -- [ ] Poubelle selon droits -- [ ] Confirmations avec impact -- [ ] Refresh aprĂšs succĂšs -- [ ] Dernier enfant : choix dossier oui/non -- [ ] Warning `sans_enfant` -- [ ] Self-admin / dernier admin gĂ©rĂ©s cĂŽtĂ© UI (masquer ou message 403) diff --git a/docs/tmp/155-mini-spec-rename-admin-prefix.md b/docs/tmp/155-mini-spec-rename-admin-prefix.md deleted file mode 100644 index afe3c4f..0000000 --- a/docs/tmp/155-mini-spec-rename-admin-prefix.md +++ /dev/null @@ -1,54 +0,0 @@ -# Mini-spec — Rename prĂ©fixe `Admin*` dashboard partagĂ© (#155) - -**Ticket** : **#155** -**Branche** : `feature/155-rename-admin-prefix-dashboard` (depuis `develop`) -**DĂ©cision naming** : **option C** — dossier neutre `widgets/dashboard/` + noms **sans** prĂ©fixe `Admin`. - ---- - -## Principe - -Les widgets partagĂ©s **admin + gestionnaire** ne doivent plus s’appeler `Admin*`. -On garde `Admin*` seulement lĂ  oĂč c’est vraiment le rĂŽle administrateur. - -## GardĂ© `Admin*` (hors rename) - -| ÉlĂ©ment | Raison | -|---------|--------| -| `AdminManagementWidget` | Onglet **Administrateurs** | -| `screens/administrateurs/*` | `AdminDashboardScreen`, `AdminCreateDialog`, `AdminUserFormDialog` | -| `EnfantAdminModel` | ModĂšle API (pas un widget) — hors scope ticket | - -## Renames faits - -| Avant | AprĂšs | -|-------|--------| -| `widgets/admin/common/admin_child_detail_modal.dart` → `AdminChildDetailModal` | `widgets/dashboard/child_detail_modal.dart` → `ChildDetailModal` | -| `admin_am_edit_modal` → `AdminAmEditModal` | `am_edit_modal` → `AmEditModal` | -| `admin_parent_edit_modal` → `AdminParentEditModal` | `parent_edit_modal` → `ParentEditModal` | -| `admin_user_card` → `AdminUserCard` | `user_card` → `UserCard` | -| `admin_enfant_user_card` → `AdminEnfantUserCard` | `enfant_user_card` → `EnfantUserCard` | -| `admin_am_photo_frame` → `AdminAmPhotoFrame` | `am_photo_frame` → `AmPhotoFrame` | -| `admin_am_children_capacity_grid` | `am_children_capacity_grid` → `AmChildrenCapacityGrid` | -| `admin_children_affiliation_panel` | `children_affiliation_panel` → `ChildrenAffiliationPanel` | -| `admin_select_*` / `AdminSelect*` / `AdminFamilleFoyer` | `select_*` / `Select*` / `FamilleFoyer` | -| `admin_status_capsule` | `status_capsule` → `StatusCapsule` | -| `admin_list_state` → `AdminListState` | `user_list_state` → `UserListState` | -| `admin_detail_modal` → `AdminDetailModal` / `AdminDetailField` | `detail_modal` → `DetailModal` / `DetailField` | -| `dashboard_admin.dart` | `user_management_sub_bar.dart` (`DashboardUserManagementSubBar` inchangĂ©) | - -Dossier `widgets/admin/` conserve encore les panels mĂ©tier (`user_management_panel`, wizards, etc.) + `AdminManagementWidget`. - -**Phase 2** (mĂȘme ticket #155) : dĂ©placer ces panels → `widgets/dashboard/` — voir [155-suite-move-admin-panels-to-dashboard.md](./155-suite-move-admin-panels-to-dashboard.md). - -## Hors scope - -- Refonte UX modales (ticket dĂ©diĂ©) -- Rename API / back -- DĂ©placer tout `widgets/admin/` → `widgets/dashboard/` (panels) — possible follow-up - -## CritĂšres - -- [x] Plus de prĂ©fixe `Admin` sur les composants **partagĂ©s** listĂ©s -- [ ] Build Flutter / recette dashboard admin + gestionnaire OK -- [x] Pas de changement comportemental (rename mĂ©canique) diff --git a/docs/tmp/155-suite-move-admin-panels-to-dashboard.md b/docs/tmp/155-suite-move-admin-panels-to-dashboard.md deleted file mode 100644 index e5a86db..0000000 --- a/docs/tmp/155-suite-move-admin-panels-to-dashboard.md +++ /dev/null @@ -1,203 +0,0 @@ -# Mini-spec — DĂ©placer les panels `widgets/admin/` → `widgets/dashboard/` - -**Ticket** : **#155** (phase 2 — mĂȘme ticket que le rename `Admin*`) -**Phase 1** : widgets `Admin*` → `widgets/dashboard/` (dĂ©jĂ  sur `feature/155-rename-admin-prefix-dashboard`) -**Branche** : poursuivre / rebaser `feature/155-rename-admin-prefix-dashboard` (ou nouvelle branche depuis `develop` aprĂšs merge phase 1) -**Nature** : rename / move mĂ©canique — **zĂ©ro** changement UX / mĂ©tier - ---- - -## Contexte - -AprĂšs la phase 1 (#155), la situation est **hybride** : - -| Emplacement | Contenu | -|-------------|---------| -| `widgets/dashboard/` | Composants partagĂ©s sans prĂ©fixe `Admin*` (modales, cartes, selects, sub-bar
) | -| `widgets/admin/` | **Panels** du dashboard staff (listes, wizards, validation, shell `UserManagementPanel`
) + `AdminManagementWidget` | - -Le dossier `admin/` laisse encore croire « rĂ©servĂ© administrateur », alors que **gestionnaire** consomme les mĂȘmes panels (`GestionnaireDashboardScreen` → `UserManagementPanel`). - -Ce ticket **termine l’option C** au niveau dossier : tout le dashboard staff vit sous `widgets/dashboard/`, sauf ce qui est **vraiment** rĂŽle admin. - ---- - -## Objectif - -``` -frontend/lib/widgets/admin/ - ↓ git mv + update imports -frontend/lib/widgets/dashboard/
 -``` - -CritĂšre : un nouveau dev ne doit plus ouvrir `widgets/admin/` pour du code partagĂ© admin+gestionnaire. - ---- - -## Cible d’arborescence (proposĂ©e) - -``` -widgets/dashboard/ - ├── (dĂ©jĂ  lĂ  #155) child_detail_modal.dart, am_edit_modal.dart, user_card.dart, 
 - ├── user_management_panel.dart ← shell onglets - ├── user_management_sub_bar.dart ← dĂ©jĂ  dĂ©placĂ© #155 - ├── dossiers_management_widget.dart - ├── dossier_list_card.dart - ├── parent_management_widget.dart ← corriger le typo managmant au passage ? - ├── enfant_management_widget.dart - ├── assistante_maternelle_management_widget.dart - ├── gestionnaire_management_widget.dart - ├── pending_validation_widget.dart - ├── parent_dossier_create_modal.dart - ├── parent_dossier_wizard.dart - ├── am_dossier_create_modal.dart - ├── am_dossier_wizard.dart - ├── validation_*.dart ← family/am wizards, refus, theme, confirm - ├── parametres_panel.dart ← utilisĂ© par Ă©cran admin (OK dans dashboard) - ├── relais_management_panel.dart - ├── common/ ← sous-dossier optionnel - │ ├── suppression_confirm_dialog.dart - │ ├── user_list.dart - │ └── validation_detail_section.dart - └── 
 - -widgets/admin/ ← mince, rĂŽle admin seulement - └── admin_management_widget.dart ← onglet Administrateurs -``` - -### Variante B (plus stricte) - -`AdminManagementWidget` + Ă©ventuels helpers purement admin → -`screens/administrateurs/widgets/` -et **suppression** du dossier `widgets/admin/`. - -**Reco** : **variante A** (garder `widgets/admin/` minimal avec seulement `AdminManagementWidget`) — moins de churn screens, clair. - ---- - -## Inventaire Ă  dĂ©placer (Ă©tat actuel) - -### Racine `widgets/admin/` → `widgets/dashboard/` - -| Fichier actuel | Notes | -|----------------|--------| -| `user_management_panel.dart` | Shell partagĂ© admin + gestionnaire | -| `dossiers_management_widget.dart` | | -| `dossier_list_card.dart` | | -| `parent_managmant_widget.dart` | Typo historique `managmant` — **option** : renommer → `parent_management_widget.dart` dans le mĂȘme ticket ou ticket typo sĂ©parĂ© | -| `enfant_management_widget.dart` | | -| `assistante_maternelle_management_widget.dart` | | -| `gestionnaire_management_widget.dart` | | -| `pending_validation_widget.dart` | | -| `parent_dossier_create_modal.dart` | | -| `parent_dossier_wizard.dart` | | -| `am_dossier_create_modal.dart` | | -| `am_dossier_wizard.dart` | | -| `validation_am_wizard.dart` | | -| `validation_family_wizard.dart` | | -| `validation_dossier_modal.dart` | | -| `validation_modal_theme.dart` | | -| `validation_refus_form.dart` | | -| `validation_valider_confirm_dialog.dart` | | -| `parametres_panel.dart` | Écran admin seulement, mais pas prĂ©fixĂ© Admin — OK dashboard | -| `relais_management_panel.dart` | | - -### `widgets/admin/common/` → `widgets/dashboard/common/` (ou plat) - -| Fichier | Notes | -|---------|--------| -| `suppression_confirm_dialog.dart` | PartagĂ© (y compris `screens/administrateurs/creation/*`) | -| `user_list.dart` | | -| `validation_detail_section.dart` | | - -### **Ne pas** dĂ©placer - -| Fichier | Destination | -|---------|-------------| -| `admin_management_widget.dart` | Reste `widgets/admin/` (ou variante B → screens) | - -### DĂ©jĂ  fait (#155) — ne pas retraiter - -Tout ce qui est dĂ©jĂ  sous `widgets/dashboard/` (`child_detail_modal`, `am_edit_modal`, `user_card`, `select_*`, `user_management_sub_bar`, 
). - ---- - -## Consommateurs d’imports (Ă  mettre Ă  jour) - -### Screens -- `screens/administrateurs/admin_dashboardScreen.dart` — `UserManagementPanel`, `ParametresPanel` -- `screens/gestionnaire/gestionnaire_dashboard_screen.dart` — `UserManagementPanel` -- `screens/administrateurs/creation/admin_create.dart` — `suppression_confirm_dialog` -- `screens/administrateurs/creation/gestionnaires_create.dart` — idem - -### Widgets dĂ©jĂ  en `dashboard/` -- `am_edit_modal`, `child_detail_modal`, `parent_edit_modal`, `select_*` — imports vers `widgets/admin/common/*` ou panels - -### Divers -- `widgets/common/identity_block.dart` (si import admin) -- Tous les fichiers **dĂ©placĂ©s** entre eux (imports relatifs / package) - -### Hors scope rename classes -Sauf dĂ©cision explicite sur le typo `parent_managmant_widget` → pas de rename de **classes** mĂ©tier dans ce ticket (seulement chemins de fichiers + imports). -`AdminManagementWidget` **conserve** son nom. - ---- - -## Plan d’exĂ©cution - -1. Partir de `feature/155-rename-admin-prefix-dashboard` (phase 1) **ou** `develop` si phase 1 dĂ©jĂ  mergĂ©e -2. `git mv` fichiers selon inventaire -3. Remplacer globalement - `package:p_tits_pas/widgets/admin/` → `package:p_tits_pas/widgets/dashboard/` - **sauf** `
/widgets/admin/admin_management_widget.dart` -4. Corriger imports relatifs cassĂ©s -5. Grep de contrĂŽle (ci-dessous) -6. Build Flutter web (Docker) + smoke dashboard admin **et** gestionnaire -7. Merge → squash master si flux habituel - ---- - -## VĂ©rifs - -```bash -# Plus de panels partagĂ©s sous admin (seul AdminManagement attendu) -find frontend/lib/widgets/admin -name '*.dart' - -# Plus d’imports panels vers l’ancien chemin (sauf AdminManagement) -rg -n "widgets/admin/(user_management|dossiers_|parent_|enfant_|assistante|gestionnaire|pending|validation_|parametres|relais|am_dossier|parent_dossier|dossier_list|common/)" frontend/lib - -# Screens OK -rg -n "widgets/admin/" frontend/lib/screens -``` - -Attendu screens : **0** hit vers panels ; Ă©ventuellement plus aucun hit `widgets/admin/` sauf si import explicite `AdminManagementWidget` depuis `user_management_panel` (chemin `widgets/admin/admin_management_widget.dart`). - ---- - -## Hors scope - -- Refonte UX des modales / panels (ticket dĂ©diĂ© annoncĂ©) -- Rename `EnfantAdminModel` -- Rename `screens/administrateurs/` -- Rename `AdminUserFormDialog` / `AdminCreateDialog` -- Changement API / back -- #152 (`est_multiple`) — autre branche - ---- - -## CritĂšres d’acceptation - -- [ ] Inventaire dĂ©placĂ© selon tableau -- [ ] `widgets/admin/` ne contient plus que `admin_management_widget.dart` (variante A) -- [ ] Imports screens + widgets Ă  jour -- [ ] Build Flutter OK -- [ ] Recette : dashboard **administrateur** et **gestionnaire** (listes, ouverture fiches, validation, crĂ©ation dossier) sans rĂ©gression -- [ ] Aucun changement comportemental volontaire - ---- - -## Risques / notes - -- **Conflits de merge** si d’autres features touchent les panels → faire ce ticket quand la surface dashboard est calme (fin 0.1.0 OK) -- Typo `parent_managmant_widget` : soit inclus (bonus), soit ticket cleanup 1-ligne sĂ©parĂ© -- Docs d’archive citant `widgets/admin/
` : pas obligatoire de mettre Ă  jour ; `docs/27_BRIEFING-FRONTEND.md` oui si encore listĂ© diff --git a/docs/tmp/156-contrat-api-staff-am.md b/docs/tmp/156-contrat-api-staff-am.md deleted file mode 100644 index 312e148..0000000 --- a/docs/tmp/156-contrat-api-staff-am.md +++ /dev/null @@ -1,75 +0,0 @@ -# Mini-spec API — POST /assistantes-maternelles/dossier (#156) - -Contrat pour le **plan front** (wizard crĂ©ation AM staff). - -## Endpoint - -| | | -|--|--| -| **MĂ©thode** | `POST` | -| **URL** | `{base}/assistantes-maternelles/dossier` | -| **Auth** | Bearer JWT | -| **RĂŽles** | `gestionnaire`, `administrateur`, `super_admin` | -| **Content-Type** | `application/json` | - -Ne **pas** appeler `POST /auth/register/am` depuis le dashboard. - -## Body (JSON) - -AlignĂ© inscription AM publique, **sans** CGU/privacy obligatoires (acceptĂ©es serveur). - -| Champ | Type | Obligatoire | Notes | -|-------|------|-------------|--------| -| `email` | string | oui | unique | -| `prenom` | string | oui | | -| `nom` | string | oui | | -| `telephone` | string | oui | `0X
` ou `+33
` | -| `adresse` | string | non | | -| `code_postal` | string | non | | -| `ville` | string | non | | -| `photo_base64` | string | non | data-URL `data:image/
;base64,
` | -| `photo_filename` | string | non | hint nom fichier | -| `consentement_photo` | bool | oui | | -| `date_naissance` | date ISO | non | `YYYY-MM-DD` | -| `lieu_naissance_ville` | string | oui | | -| `lieu_naissance_pays` | string | oui | | -| `nir` | string | oui | 15 car. (Corse 2A/2B OK) | -| `numero_agrement` | string | oui | unique | -| `date_agrement` | date ISO | non | | -| `capacite_accueil` | int | oui | 1–10 | -| `places_disponibles` | int | oui | 0–10, ≀ capacitĂ© | -| `biographie` | string | non | max 2000 | - -## RĂ©ponses - -### 201 Created - -```json -{ - "message": "Dossier AM créé et validĂ©. Un e-mail de crĂ©ation de mot de passe a Ă©tĂ© envoyĂ©.", - "user_id": "uuid", - "statut": "actif", - "numero_dossier": "2026-000042" -} -``` - -Effets serveur : user AM **actif**, fiche `assistantes_maternelles`, n° dossier, **e-mail crĂ©ation MDP** (pas d’accusĂ© « en attente »). - -### Erreurs - -| Code | Cas | -|------|-----| -| 400 | Validation / NIR / places > capacitĂ© | -| 403 | RĂŽle non staff | -| 409 | Email, NIR ou agrĂ©ment dĂ©jĂ  pris | -| 401 | Token manquant / invalide | - -## Front - -- `UserService.createAmDossier(body)` → cet endpoint -- AprĂšs 201 : refresh liste AM ; snackbar OK -- Wizard create : ne pas envoyer `acceptation_cgu` / `acceptation_privacy` (optionnels) - -## Branche - -`feature/156-creation-dossier-am` diff --git a/docs/tmp/164-staff-modal-uniformisation-mini-spec.md b/docs/tmp/164-staff-modal-uniformisation-mini-spec.md deleted file mode 100644 index f035ca8..0000000 --- a/docs/tmp/164-staff-modal-uniformisation-mini-spec.md +++ /dev/null @@ -1,14 +0,0 @@ -# Mini-spec — Uniformisation modale staff (Gestionnaire / Administrateur) - -**Ticket** : **#164** — https://git.ptits-pas.fr/jmartin/petitspas/issues/164 -**Branche** : `feature/164-staff-modal-uniformisation` (depuis `develop`) -**PĂ©rimĂštre** : **front only** — pas d’API / BDD -**Milestone** : **0.1.0** - -Voir le corps du ticket #164 pour la spec complĂšte. - -## LivrĂ© - -- `frontend/lib/widgets/dashboard/staff_user_form_modal.dart` → `StaffUserFormModal` -- Ancien `AdminUserFormDialog` / `gestionnaires_create.dart` retirĂ© -- Imports : `user_management_panel`, `gestionnaire_management_widget`, `admin_management_widget`