From a5dae7a0176c3d969b1b774313d2d014db508d7a Mon Sep 17 00:00:00 2001 From: Julien Martin Date: Tue, 25 Nov 2025 00:28:35 +0100 Subject: [PATCH] =?UTF-8?q?docs:=20Workflow=20cr=C3=A9ation=20de=20compte?= =?UTF-8?q?=20+=20refonte=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ajout Cahier des Charges v1.3 - Ajout Workflow technique création de compte (v1.0) - Réorganisation docs avec préfixes numériques (00_, 01_, etc.) - Ajout données de test CSV - Modifications principales : * Champ téléphone unique (suppression mobile/fixe) * Inscription sans mot de passe (Parents + AM) * Création MDP par email après validation (7j) * Genre enfant obligatoire (H/F) * Date agrément obligatoire pour AM --- docs/00_INDEX.md | 60 + docs/01_CAHIER-DES-CHARGES.md | 1225 +++++++++ ...DME-ARCHITECTURE.md => 02_ARCHITECTURE.md} | 0 ...{README-DEPLOYMENT.md => 03_DEPLOYMENT.md} | 0 docs/{DATABASE.md => 10_DATABASE.md} | 0 docs/{API.md => 11_API.md} | 0 docs/20_WORKFLOW-CREATION-COMPTE.md | 2288 +++++++++++++++++ docs/{AUDIT.md => 90_AUDIT.md} | 0 docs/README.md | 53 - docs/test-data/README.md | 279 ++ docs/test-data/utilisateurs-test.csv | 11 + docs/test-data/utilisateurs-test.html | 359 +++ 12 files changed, 4222 insertions(+), 53 deletions(-) create mode 100644 docs/00_INDEX.md create mode 100644 docs/01_CAHIER-DES-CHARGES.md rename docs/{README-ARCHITECTURE.md => 02_ARCHITECTURE.md} (100%) rename docs/{README-DEPLOYMENT.md => 03_DEPLOYMENT.md} (100%) rename docs/{DATABASE.md => 10_DATABASE.md} (100%) rename docs/{API.md => 11_API.md} (100%) create mode 100644 docs/20_WORKFLOW-CREATION-COMPTE.md rename docs/{AUDIT.md => 90_AUDIT.md} (100%) delete mode 100644 docs/README.md create mode 100644 docs/test-data/README.md create mode 100644 docs/test-data/utilisateurs-test.csv create mode 100644 docs/test-data/utilisateurs-test.html diff --git a/docs/00_INDEX.md b/docs/00_INDEX.md new file mode 100644 index 0000000..761e751 --- /dev/null +++ b/docs/00_INDEX.md @@ -0,0 +1,60 @@ +# 📚 Index de la Documentation - PtitsPas App + +Bienvenue dans la documentation complète de l'application PtitsPas. + +Ce fichier sert d'index pour naviguer dans toute la documentation du projet. + +## 📖 Table des matières + +### 📋 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 & 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 + +### 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 + +### Workflows Fonctionnels +- [**20 - Workflow Création de Compte**](./20_WORKFLOW-CREATION-COMPTE.md) - Workflow complet de création et validation des comptes utilisateurs + +### 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 + +### Frontend (À créer) +- [**40 - Frontend Flutter**](./40_FRONTEND.md) - Structure de l'application mobile/web + +### Audit & Analyse +- [**90 - Audit du projet YNOV**](./90_AUDIT.md) - Analyse complète du code étudiant et fonctionnalités + +## 🚀 Quick Start + +```bash +# Cloner le projet +git clone ssh://gitea-jmartin/jmartin/app.git ptitspas-app + +# Lancer l'environnement de développement +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 +``` + +## 🔗 Liens utiles + +- **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 : Novembre 2025 + diff --git a/docs/01_CAHIER-DES-CHARGES.md b/docs/01_CAHIER-DES-CHARGES.md new file mode 100644 index 0000000..dcd02f0 --- /dev/null +++ b/docs/01_CAHIER-DES-CHARGES.md @@ -0,0 +1,1225 @@ +--- +title: "P'titsPas - Cahier des Charges Fonctionnel" +author: "Julien MARTIN" +date: "Novembre 2025" +version: "v1.3" +--- + +# P'titsPas – Cahier des Charges Fonctionnel + +> **Objet :** Définir le périmètre fonctionnel, les rôles utilisateurs, les processus métiers et les exigences techniques de la plateforme P'titsPas, destinée à accompagner les collectivités locales dans la gestion de la garde d’enfants. + +--- + +## Historique des versions + +| Version | Date | Auteur | Commentaires | +|---------|------------|----------------|--------------------------------------| +| 1.0 | 15/03/2025 | Julien MARTIN | Version initiale | +| 1.1 | 24/04/2025 | Julien MARTIN | Ajouts : gestion multi-enfants, fin de contrat, tableau de bord étendu | +| 1.2 | 26/05/2025 | Julien MARTIN | Remplacement de "SuperNounou" par "P'titsPas" | +| 1.3 | 24/11/2025 | Julien MARTIN | Correction : retrait photo de profil parent (section 3.1.1) | + +--- + + +# Table des matières – P'titsPas + +## 1. Introduction + +## 2. Typologie des utilisateurs +### 2.1 Rôles +#### 2.1.1 Parents +#### 2.1.2 Assistantes maternelles +#### 2.1.3 Gestionnaires +#### 2.1.4 Administrateurs +### 2.2 Périmètres et responsabilités + +## 3. Création de compte et fiches utilisateur +### 3.1 Création de compte parent +### 3.2 Création de compte assistante maternelle +### 3.3 Création d’un gestionnaire +### 3.4 Création d’un administrateur +### 3.5 Fiche enfant +### 3.6 Authentification et sécurité + +## 4. Tableaux de bord +### 4.1 Vue d’ensemble +### 4.2 Tableau de bord des parents +#### 4.2.1 En-tête +#### 4.2.2 Zone enfants +#### 4.2.3 Événements à venir +#### 4.2.4 Contrats +#### 4.2.5 Messagerie +#### 4.2.6 Notifications +### 4.3 Tableau de bord des assistantes maternelles +#### 4.3.1 En-tête +#### 4.3.2 Dossiers reçus +#### 4.3.3 Enfants accueillis +#### 4.3.4 Agenda +#### 4.3.5 Heures supplémentaires +#### 4.3.6 Messagerie +### 4.4 Tableau de bord des gestionnaires +#### 4.4.1 Comptes à valider +#### 4.4.2 Liste des utilisateurs +#### 4.4.3 Contrats +#### 4.4.4 Messagerie +#### 4.4.5 Événements RPE +#### 4.4.6 Alertes +### 4.5 Tableau de bord des administrateurs +#### 4.5.1 Menu Profil +#### 4.5.2 Gestion des utilisateurs +#### 4.5.3 Gestion des enfants +#### 4.5.4 Paramètres de la plateforme +#### 4.5.5 Statistiques et supervision +#### 4.5.6 Sécurité et conformité +### 4.6 Menus, alertes et raccourcis visuels + +## 5. Workflows +### 5.1 Recherche d’une assistante maternelle +### 5.2 Traitement du dossier +### 5.3 Création du contrat +### 5.4 Avenants +### 5.5 Fin de contrat + +## 6. Outils partagés +### 6.1 Messagerie +### 6.2 Agenda +### 6.3 Fiche enfant +### 6.4 Contrats et avenants + +## 7. Suivi administratif et financier +### 7.1 Fiche de paie +### 7.2 Aide au remplissage Pajemploi +### 7.3 Heures supplémentaires +### 7.4 Historique +### 7.5 Solde de tout compte + +## 8. Administration technique et conformité +### 8.1 Sécurité et accès +### 8.2 Gouvernance multi-admins +### 8.3 Conformité RGPD +### 8.4 Intégration API +### 8.5 Architecture technique + +## 9. Améliorations futures possibles +### 9.1 Modules activables +#### 9.1.1 Blog RPE +#### 9.1.2 IA de reformulation +#### 9.1.3 Connexion Pajemploi +#### 9.1.4 Garde d’enfants “grands” +#### 9.1.5 Pré-remplissage dossiers scolaires +#### 9.1.6 Dossier fratrie unique +### 9.2 Stratégie d’activation + +## 10. Synthèse finale +### 10.1 Objectifs atteints +### 10.2 Couverture fonctionnelle +### 10.3 Valeur ajoutée +### 10.4 Perspectives d’évolution + +# 1. Introduction + +P'titsPas est une plateforme numérique conçue pour accompagner les collectivités dans la gestion des relations entre les parents, les assistantes maternelles et les relais petite enfance (RPE). Elle vise à simplifier, structurer et sécuriser les processus de mise en relation, de contractualisation, de suivi et de communication autour de la garde d’enfants. + +Elle s’inscrit dans une démarche publique fondée sur les valeurs de la République : **égalité**, **neutralité**, **accessibilité** et **transparence**. Contrairement aux plateformes privées, P'titsPas ne fonctionne ni sur la logique de notation, ni de sélection algorithmique opaque. + +## 1.1 Objectifs + +- Faciliter la recherche d’assistantes maternelles par les parents. +- Offrir un cadre clair et sécurisé à la gestion des contrats. +- Fluidifier la communication entre les acteurs (parents, nounous, gestionnaires). +- Permettre aux gestionnaires de suivre l’ensemble des situations. +- Centraliser les démarches dans un outil unique, intuitif et structuré. +- Valoriser le rôle des collectivités locales dans l’accompagnement de la petite enfance. + +## 1.2 Principes fondateurs + +- **Neutralité** : pas de notation, pas de préférence algorithmique. +- **Équité** : chaque parent a les mêmes droits d’accès aux services. +- **Protection des données** : respect strict du RGPD et du droit à l’oubli. +- **Accessibilité** : conçu pour être lisible sur smartphone comme sur ordinateur. + +## 1.3 Usagers concernés + +- **Parents** d’enfants de 0 à 3 ans à la recherche d’un mode de garde. +- **Assistantes maternelles** souhaitant gérer facilement leurs contrats. +- **Responsables de RPE** supervisant les démarches et accompagnant les familles. +- **Administrateurs** municipaux assurant le paramétrage de l’outil. + +## 1.4 Contexte de déploiement + +P'titsPas est destiné à être déployé à l’échelle d’une ou plusieurs communes. Il s’adapte aux réalités locales en permettant une configuration personnalisée (noms des structures, couleurs, logo, etc.). + +Le modèle de gouvernance repose sur une articulation claire entre : + +- Les **parents et assistantes maternelles** (usagers finaux) +- Les **gestionnaires** (opérateurs terrain) +- Les **administrateurs** (services de la mairie ou de la collectivité) + +# 2. Typologie des utilisateurs + +P'titsPas repose sur une structure multi-rôles permettant une répartition claire des responsabilités et des droits d’accès à l’application. Chaque profil a une interface adaptée à ses besoins et à ses fonctions. + +## 2.1 Rôles + +### 2.1.1 Parents + +Les parents sont les usagers finaux de la plateforme. Ils accèdent à un tableau de bord personnel leur permettant de : + +- Rechercher une assistante maternelle +- Créer et suivre des dossiers +- Consulter les informations liées à leurs enfants +- Visualiser et gérer les contrats de garde +- Communiquer avec l'assistante maternelle et le gestionnaire +- Déclarer des absences ou des événements +- Suivre les documents administratifs liés à la garde +- Accéder à des outils d’aide à la paie + +### 2.1.2 Assistantes maternelles + +Les assistantes maternelles peuvent : + +- Recevoir des dossiers de demande de garde +- Accepter ou refuser une proposition +- Fournir leurs disponibilités pour organiser un rendez-vous +- Gérer leurs contrats et leurs avenants +- Suivre les absences des enfants accueillis +- Déclarer des heures supplémentaires +- Participer à des événements organisés par le RPE +- Utiliser la messagerie intégrée + +### 2.1.3 Gestionnaires + +Les gestionnaires (responsables de relais petite enfance) disposent d’un tableau de bord de supervision. Ils peuvent : + +- Valider ou rejeter les demandes de création de compte +- Suivre les mises en relation et les contrats +- Organiser des événements ou des rendez-vous +- Gérer les conflits ou les fins de contrat +- Lancer des sondages ou modérer un blog RPE (si activé) +- Voir les historiques et statistiques liés à leur périmètre + +### 2.1.4 Administrateurs + +Les administrateurs sont les représentants techniques et institutionnels de la collectivité (DSI ou agents désignés). Ils peuvent : + +- Créer ou supprimer des comptes (gestionnaires, parents, assistantes maternelles) +- Personnaliser l’interface (logo, couleurs, nom de la ville) +- Activer ou désactiver des modules complémentaires +- Consulter les statistiques d’usage +- Exporter les données +- Superviser les accès et assurer la conformité RGPD +- Intégrer la plateforme aux SI de la collectivité + +## 2.2 Périmètres et responsabilités + +Chaque rôle dispose d’un périmètre fonctionnel propre, sans empiétement sur celui des autres : + +- Les parents et assistantes maternelles **échangent directement** entre eux via la messagerie, mais ne peuvent modifier les données contractuelles qu’avec accord mutuel. +- Les gestionnaires interviennent en **appui et en arbitrage**, sans être partie prenante dans les contrats. +- Les administrateurs disposent d’un **pouvoir global de paramétrage et de supervision**. + +# 3. Création de compte et fiches utilisateur + +La création de compte dans P'titsPas est structurée par profil, avec des parcours adaptés à chaque rôle. Tous les champs d'identité sont obligatoires, y compris les photos pour les assistantes maternelles et les enfants déjà nés. Le processus d’approbation garantit la sécurité des données et l’implication des acteurs concernés. + +## 3.1 Création de compte parent + +Le parcours de création d’un compte parent s’effectue en plusieurs étapes successives. + +### 3.1.1 Informations parent 1 +- Nom, prénom +- Adresse postale +- Téléphone (obligatoire) +- Adresse e-mail + +**Note** : Le parent 1 ne définit **pas** de mot de passe lors de l'inscription. Il recevra un email avec un lien pour créer son mot de passe après validation du gestionnaire. + +### 3.1.2 Informations parent 2 (facultatif) +- Possibilité d'ajouter un second parent +- Nom, prénom, email, téléphone +- Même adresse que le parent 1 (case à cocher ou champs alternatifs) +- Les deux parents sont ensuite liés dans l'application + +**Note** : Le parent 2 ne définit **pas** de mot de passe lors de l'inscription. Il recevra un email avec un lien pour créer son mot de passe après validation du gestionnaire. Cette approche est particulièrement adaptée aux situations de parents séparés ou divorcés où la communication peut être difficile. + +### 3.1.3 Informations sur l'enfant +- Prénom (facultatif si enfant à naître) +- Nom (hérité des parents) +- Genre (H / F) - obligatoire +- Date de naissance ou **date prévisionnelle de naissance** (si l'enfant n'est pas encore né, un switch modifie le label) +- Photo obligatoire si l'enfant est né +- Rattachement automatique aux deux parents + +### 3.1.4 Présentation du dossier +- Zone de texte libre permettant aux parents de décrire leur situation +- Ce champ peut être rendu obligatoire ou non par l’administrateur + +### 3.1.5 – Acceptation des CGU +- Les utilisateurs doivent cocher la case + « J’ai lu et j’accepte les Conditions Générales d’Utilisation et la Politique de confidentialité ». +- Un lien direct ouvre la version PDF des CGU. +- Le refus bloque la création de compte. + +### 3.1.6 Récapitulatif et validation +- Résumé des données saisies +- Vérification, puis envoi de la demande +- Les comptes parent sont soumis à validation par un gestionnaire avant activation +- Une fois validé, chaque parent (Parent 1 et Parent 2 si renseigné) reçoit un e-mail ou un SMS contenant un lien pour créer son mot de passe +- Le lien est valable pendant 7 jours +- Une fois le mot de passe créé, le parent peut se connecter à son espace + +## 3.2 Création de compte assistante maternelle + +Ce parcours est divisé en deux panneaux. + +### 3.2.1 Panneau 1 – Informations d'identité +- Nom, prénom +- Adresse postale +- Téléphone +- Adresse e-mail +- Photo (obligatoire si l'option *Photo obligatoire* est activée) +- Consentement photo : case à cocher confirmant l'accord pour stocker et afficher la photo (RGPD) + +**Note** : L'assistante maternelle ne définit **pas** de mot de passe lors de l'inscription. Elle recevra un email avec un lien pour créer son mot de passe après validation du gestionnaire. + +### 3.2.2 Panneau 2 – Informations professionnelles +- Date de naissance +- Ville et pays de naissance +- Numéro de Sécurité sociale (NIR) – obligatoire + - Saisi en clair (non masqué) + - Mention : « Utilisé uniquement pour la génération automatique du contrat » +- Numéro d'agrément – obligatoire +- Date d'obtention de l'agrément – obligatoire +- Nombre d'enfants pouvant être accueillis – obligatoire + +### 3.2.3 Présentation +- Champ libre : message à destination du gestionnaire +- Permet de justifier une demande ou d’ajouter des précisions + +### 3.1.4 – Acceptation des CGU +- Les utilisateurs doivent cocher la case + « J’ai lu et j’accepte les Conditions Générales d’Utilisation et la Politique de confidentialité ». +- Un lien direct ouvre la version PDF des CGU. +- Le refus bloque la création de compte. + +### 3.2.5 Récapitulatif et validation +- Résumé des données saisies +- Vérification, puis envoi de la demande +- Validation par un gestionnaire requise avant activation +- Une fois validé, l'assistante maternelle reçoit un e-mail ou un SMS contenant un lien pour créer son mot de passe +- Le lien est valable pendant 7 jours +- Une fois le mot de passe créé, l'assistante maternelle peut se connecter à son espace + +## 3.3 Création d’un gestionnaire + +- Réalisée par un administrateur +- Champs obligatoires : nom, prénom, adresse e-mail, mot de passe +- Affectation à un ou plusieurs relais petite enfance +- Le mot de passe doit être modifié lors de la première connexion + +## 3.4 Création d’un administrateur + +- Seuls les administrateurs existants peuvent créer de nouveaux comptes administrateurs +- Les droits sont équivalents (possibilité de restreindre par périmètre dans une version multi-mairies) +- Obligation de changer le mot de passe à la première connexion + +## 3.5 Fiche enfant + +Chaque enfant est représenté par une fiche : + +- Prénom (facultatif si enfant à naître) +- Nom +- Genre (H / F) - obligatoire +- Date de naissance ou date prévisionnelle +- Photo (obligatoire si l'enfant est né ET si l'option *Photo obligatoire* est activée) +- Consentement photo enregistré : valeur booléenne + horodatage liés à l'accord donné par le parent +- Statut : à naître / actif / scolarisé +- Indication possible : jumeaux, triplés, etc. +- Possibilité de rattacher un enfant à plusieurs parents (garde alternée) + +## 3.6 Authentification et sécurité + +- Tous les comptes utilisent une combinaison adresse e-mail + mot de passe +- Les gestionnaires et administrateurs doivent modifier leur mot de passe à la première connexion +- Des mécanismes de récupération sont disponibles en cas de perte + +Un lien direct vers les **Mentions légales** et la **Politique de confidentialité** est accessible en permanence depuis le pied de page, y compris avant la connexion. + +# 4. Tableaux de bord + +Chaque rôle utilisateur dispose d’un tableau de bord personnalisé, adapté à ses fonctions dans la plateforme. Ces interfaces sont pensées pour être lisibles, fonctionnelles et évolutives. + +## 4.1 Vue d’ensemble + +| Rôle | Accès au tableau de bord | +|------------------------|-------------------------------------------------------------------| +| Parents | Recherche d'assistante maternelle, gestion des enfants, contrat, agenda | +| Assistantes maternelles| Dossiers reçus, enfants accueillis, heures sup, agenda, messagerie| +| Gestionnaires | Validation de comptes, contrats, messagerie, événements RPE | +| Administrateurs | Paramètres globaux, gestion des utilisateurs, statistiques | + +Les tableaux de bord intègrent : +- Une **barre de navigation supérieure** (liens de navigation rapide) +- Une **zone centrale dynamique**, spécifique au rôle +- Une **zone de notifications ou de messagerie** +- Un **menu profil** propre à chaque type d'utilisateur (cf. section 4.6) + +Un système de **bulles d’aide contextuelle** (icône « ? ») doit être présent sur les champs ou boutons complexes ; un clic ouvre un court tooltip explicatif. Aucune base de connaissances complète n’est exigée en V1. + +#### Pied de page commun + +Chaque page de l’application affiche un **pied de page** fixe contenant : + +| Élément | Cible / comportement | +|---------|----------------------| +| **Contact support** | Ouvre une fenêtre de mailto :`support@P'titsPas.local` (adresse configurable dans l’admin). | +| **Signaler un bug** | Ouvre un formulaire modal minimal :
Champ texte, bouton « Envoyer » ⇒ crée une entrée dans la table `bug_report` (ou envoie un e-mail si aucune table n’est prévue). | +| **Mentions légales** | Lien vers la page statique `/legal` : informations éditeur, hébergeur, responsable du traitement. | +| **Politique de confidentialité** | Lien vers la page statique `/privacy` (le texte RGPD détaillé). | + +Le pied de page doit rester visible sur desktop et mobile ; sur écrans étroits, les liens peuvent être regroupés dans un menu « Informations ». + + +## 4.2 Tableau de bord des parents + +Le tableau de bord parent est conçu pour offrir une vue complète de la situation de la famille, avec des entrées rapides vers toutes les fonctionnalités utiles. + +### 4.2.1 En-tête + +- Logo de la ville +- Nom et prénom du parent connecté +- Accès au menu Profil +- Bouton “Rechercher une assistante maternelle” +- Notification si un contrat est en cours ou un dossier en traitement + +### 4.2.2 Zone enfants + +- Encadré pour chaque enfant : prénom, photo, statut +- Bouton “Ajouter un enfant” +- Accès à la fiche de l’enfant (dossiers, agenda, événements) + +### 4.2.3 Événements à venir + +Les événements sont affichés sous forme de **bulles colorées** : +- Vacances parents +- Absence enfant +- Activité RPE (confirmée ou suggérée) +- Congés assistante maternelle +- Pour un **arrêt maladie**, le parent destinataire dispose du bouton **« Arrêt bien reçu »** ; lorsqu’il le clique, l’événement est marqué **Validé** côté assistante maternelle. + +Chaque événement peut être : +- Confirmé ou refusé (si proposé par l’autre partie) +- Modifié par la partie créatrice +- Ajouté manuellement par le parent + +Un bouton “Accéder à l’agenda” ouvre une vue étendue : +- Liste complète des événements (passés et futurs) +- Calendrier annuel, mensuel ou hebdomadaire +- Ajout d’événements : absence, vacances, note personnelle + +### 4.2.4 Contrats + +- Encadré avec état du dossier (brouillon, validé, en cours, en fin) +- Consultation du contrat signé +- Bouton “Proposer un avenant” +- Accès à l’historique des modifications +- Lien vers l’outil d’aide Pajemploi (calculs et déclaration) + +### 4.2.5 Messagerie + +- Historique des conversations +- Possibilité de filtrer par enfant ou par assistante maternelle +- Les deux parents d’un enfant sont toujours intégrés ensemble dans une conversation +- Possibilité d’ajouter le gestionnaire à une conversation existante +- Icône spéciale si le message a été reformulé par IA (si module activé) + +### 4.2.6 Notifications + +- Liste visuelle avec icônes et codes couleur : + - Nouvel événement ajouté par l’assistante maternelle + - Dossier modifié + - Contrat en attente de validation + - Paiement en attente + - Message non lu + +## 4.3 Tableau de bord des assistantes maternelles + +L’assistante maternelle accède à une interface dédiée à la gestion de ses accueils, de ses disponibilités, et de ses échanges avec les familles et le RPE. + +### 4.3.1 En-tête + +- Nom et prénom +- Photo de profil +- Accès au menu Profil +- Message d’information (nouveau dossier reçu, contrat en cours, etc.) + +### 4.3.2 Dossiers reçus + +- Liste des demandes de garde +- Pour chaque dossier : nom de l’enfant, informations des parents, dates souhaitées +- Message personnalisé des parents affiché +- Bouton “Accepter le dossier” → propose ensuite des disponibilités de rendez-vous +- Historique des décisions prises + +### 4.3.3 Enfants accueillis + +- Liste des enfants avec fiche complète : + - Identité + - Contrat associé + - Agenda de garde + - Alertes importantes (allergies, horaires atypiques) + +### 4.3.4 Agenda + +- Vue des absences validées +- Ajout d’absences programmées (vacances, fermeture exceptionnelle) +- Ajout d’un **arrêt maladie** : + 1. L’assistante maternelle saisit la période et clique **« Arrêt transmis aux parents »** ; + 2. Elle sélectionne le parent à qui elle a remis le justificatif papier (Parent 1 ou Parent 2) ; + 3. L’événement passe au statut **« En attente de confirmation parent »** dans les deux agendas. +- Chaque événement peut contenir un commentaire +- Les absences doivent être validées par les parents + +### 4.3.5 Heures supplémentaires + +- Déclaration des jours concernés +- Saisie du nombre d’heures effectuées +- Commentaire facultatif +- Historique et régularisation automatique dans la fiche de paie + +### 4.3.6 Messagerie + +- Conversations avec les parents +- Conversations de groupe avec le gestionnaire (événements RPE) +- Notification lorsqu’un nouveau message est reçu +- Icône indiquant si le message a été reformulé par IA (si activée) + +--- + +## 4.4 Tableau de bord des gestionnaires + +Le gestionnaire RPE dispose d’une vision transversale sur les utilisateurs, les dossiers et les activités de la structure. Son rôle est d'accompagner, superviser, et arbitrer si nécessaire. + +### 4.4.1 Comptes à valider + +- File d’attente des demandes de création de compte +- Détails de chaque demande : parent, assistante maternelle +- Actions possibles : Valider / Refuser / Demander des précisions + +### 4.4.2 Liste des utilisateurs + +- Filtres par rôle, statut, date d’inscription +- Accès rapide aux informations et historiques +- Possibilité de contacter un utilisateur + +### 4.4.3 Contrats + +- Vue consolidée des contrats en cours, en validation, ou en fin de garde +- Historique des avenants +- Accès au détail d’un contrat en cas de besoin d’arbitrage + +> **Responsabilité du gestionnaire RPE** +> Le gestionnaire agit exclusivement comme **tiers de confiance** : +> - il vérifie la cohérence des informations fournies par les parents et l’assistante maternelle ; +> - il valide la conformité formelle du contrat (mentions légales, dates, taux). +> **Il n’est pas partie prenante au contrat de travail** et n’assume aucune responsabilité patrimoniale ou employeur ; son rôle se limite à un contrôle administratif et à la médiation en cas de désaccord. + +### 4.4.4 Messagerie + +- Possibilité d’entrer dans une conversation parent-assistante pour médiation +- Démarrer une nouvelle conversation avec un parent, une assistante maternelle, ou les deux +- Conversations de groupe avec plusieurs assistantes maternelles (organisation d’événements RPE) + +### 4.4.5 Événements RPE + +- Création et suivi des événements collectifs +- Sélection des assistantes concernées +- Confirmation de participation +- Ajout automatique dans les agendas parentaux si l’enfant est inscrit + +### 4.4.6 Alertes + +- Liste visuelle des événements nécessitant attention : + - Conflits signalés + - Absences non validées + - Fin de contrat en désaccord +- Code couleur selon niveau d’urgence +- Accès direct aux dossiers concernés + +##### Délais et relance – absences en attente +- Une absence saisie par la partie A doit être **validée sous 7 jours** par la partie B. +- Relance automatique : J+5 par notification (parent ou assistante maternelle). +- Si non validée au bout de 14 jours, alerte “Urgence” (rouge) dans le panneau Gestionnaire. +- Les délais sont configurables par l’administrateur (paramètre “ABSENCE_GRACE_PERIOD” en jours). + +## 4.5 Tableau de bord des administrateurs + +Le tableau de bord des administrateurs est dédié à la gestion technique et stratégique de la plateforme pour une collectivité. Il centralise tous les outils de supervision, d’administration des comptes et de paramétrage global. + +### 4.5.1 Menu Profil + +Le menu profil de l’administrateur comprend uniquement : +- Mon compte +- Déconnexion + +Toutes les fonctionnalités de gestion sont accessibles via des onglets distincts dans le tableau de bord. + +### 4.5.2 Gestion des utilisateurs + +L’administration des utilisateurs est organisée par panneaux distincts pour chaque type de profil. + +#### a. Gestion des gestionnaires +- Liste des gestionnaires existants +- Création (nom, prénom, e-mail, mot de passe) +- Attribution à un ou plusieurs RPE +- Réinitialisation du mot de passe +- Suppression du compte + +#### b. Gestion des parents +- Liste complète des parents enregistrés +- Recherche par nom, statut, enfants associés +- Modification des informations +- Suppression d’un compte +- Consultation du statut des dossiers liés + +#### c. Gestion des assistantes maternelles +- Liste des assistantes avec numéro d’agrément +- Modification ou suppression d’un compte +- Filtrage par zone géographique ou capacité + +#### d. Gestion des administrateurs +- Création de nouveaux comptes administrateurs +- Suivi des droits +- Obligation de modification du mot de passe à la première connexion + +### 4.5.3 Gestion des enfants + +Deux accès possibles à la gestion des enfants : + +#### a. Par fiche parent +- Consultation et édition des enfants associés à chaque parent + +#### b. Vue globale “Enfants” +- Liste complète avec : + - Nom, prénom, date de naissance ou prévisionnelle + - Statut (à naître, actif, scolarisé) + - Parents associés + - Contrat en cours (si applicable) +- Possibilité de modifier ou supprimer une fiche enfant + +### 4.5.4 Paramètres de la plateforme + +#### a. Modules activables +- Blog RPE +- IA de reformulation de messages +- Aide Pajemploi +- Dossiers scolaires en fin de garde +- Garde d’enfants “grands” +- Dossier fratrie unique + +#### b. Personnalisation visuelle +- Logo de la commune +- Thème couleurs +- Nom de la structure affichée + +#### c. Règles de consentement et médias +- Photo obligatoire (assistante maternelle & enfant) : *On / Off* + - *On* : le champ Photo devient requis pour l'assistante maternelle et l’enfant ; la case Consentement photo s’affiche. + - *Off* : la photo redevient facultative et le champ Consentement photo disparaît. +- Historique des changements avec horodatage et identifiant administrateur. + +### 4.5.5 Statistiques et supervision + +- Nombre de contrats actifs +- Nombre d’enfants enregistrés (par statut) +- Nombre de dossiers ouverts, validés, clôturés +- Utilisation des modules optionnels +- Export CSV disponibles : + - Activité par RPE + - Données sur les enfants + - Historique des absences + +### 4.5.6 Sécurité et conformité + +- Suivi des connexions et accès sensibles +- Politique de confidentialité consultable +- Gestion des consentements +- Interface de suppression/anonymisation des données +- Historique horodaté des actions d’administration + +## 4.6 Menus, alertes et raccourcis visuels + +Chaque type d’utilisateur dispose d’un menu “Profil” spécifique, d’un système d’alertes et de raccourcis permettant une navigation fluide et intuitive. + +### 4.6.1 Menus Profil par rôle + +#### a. Parents +- Mes informations +- Mon compte +- Déconnexion + +#### b. Assistantes maternelles +- Mon profil +- Mes informations professionnelles + - Permet de consulter et modifier : NIR, numéro d’agrément, capacité d’accueil, etc. + - Le NIR n’est accessible qu’à l’assistante maternelle elle-même ; aucun autre rôle ne le voit. +- Mon compte +- Déconnexion + +#### c. Gestionnaires +- Mon compte +- Déconnexion + +#### d. Administrateurs +- Mon compte +- Déconnexion + +### 4.6.2 Alertes visuelles + +Des alertes apparaissent sous forme de bulles ou encadrés colorés dans le tableau de bord : +- Nouvel événement ajouté par une autre partie +- Contrat en attente de validation +- Conflit signalé +- Absence à approuver +- Dossier refusé ou incomplet + +Les gestionnaires disposent d’un **panneau d’alertes consolidées**, codé par couleur : +- Rouge : urgence ou conflit +- Orange : action requise +- Vert : succès ou validation en attente + +### 4.6.3 Raccourcis fonctionnels + +Selon le rôle : +- **Parents** : bouton “Rechercher une assistante maternelle”, accès rapide à l’enfant principal +- **Assistantes maternelles** : “Déclarer une absence”, “Voir les enfants du jour” +- **Gestionnaires** : “Nouveaux comptes”, “Dossiers à traiter”, “Événements RPE” +- **Administrateurs** : accès direct aux sections de gestion des utilisateurs, enfants, et paramètres + +Les raccourcis sont affichés sous forme d’icônes dans la barre supérieure ou la colonne latérale, selon la taille d’écran. + +# 5. Workflows + +Ce chapitre décrit les différents processus métiers (workflows) au cœur de P'titsPas : de la recherche d’une assistante maternelle à la fin du contrat, en passant par le traitement des dossiers, la contractualisation, les avenants, et la séparation. + +## 5.1 Recherche d’une assistante maternelle + +### 5.1.1 Déclenchement + +- Un parent connecté accède à son tableau de bord. +- S’il n’a pas encore d'assistante maternelle, un panneau de recherche s’affiche automatiquement. +- Sinon, il peut cliquer sur le bouton “Rechercher une assistante maternelle”. + +### 5.1.2 Étape 1 – Informations du dossier + +Le parent complète un formulaire : +- Enfant concerné +- Type de contrat : année complète, incomplète, ou temporaire (remplacement) +- Fourniture des repas (oui/non) +- Budget maximum par poste (taux horaire, repas, indemnités) +- Plages horaires souhaitées pour chaque jour + +### 5.1.3 Étape 2 – Texte d’introduction + +Le parent rédige une courte présentation à destination des assistantes maternelles, expliquant sa situation. + +### 5.1.4 Étape 3 – Disponibilités pour un rendez-vous + +Le parent indique ses plages de disponibilité pour une rencontre. + +### 5.1.5 Étape 4 – Recherche et sélection + +- Une liste des assistantes maternelles est proposée, classée par **proximité géographique**. +- Chaque fiche contient des initiales (photo uniquement visible après rencontre). +- Une carte interactive affiche leur localisation. +- Le parent peut sélectionner une ou plusieurs nounous à qui envoyer un dossier. + +### 5.1.6 Étape 5 – Récapitulatif et envoi + +- Le parent valide le dossier complet +- Le dossier est transmis aux assistantes maternelles sélectionnées + +## 5.2 Traitement du dossier + +### 5.2.1 Réception par l'assistante maternelle + +- Le dossier s’affiche dans son tableau de bord +- Elle peut consulter : + - Fiche parent 1 et parent 2 (si existant) + - Fiche enfant + - Texte de présentation + - Informations pratiques et financières + - Plages de disponibilité proposées + +### 5.2.2 Réponse de l’assistante maternelle + +- Elle peut accepter, refuser, ou demander à échanger via messagerie. +- Si elle accepte, elle sélectionne un ou plusieurs créneaux compatibles avec ceux proposés. + +### 5.2.3 Proposition de rendez-vous + +- Le parent reçoit les créneaux suggérés. +- Il peut en choisir un, ou en proposer un autre à partir de l’agenda. +- L'assistante maternelle accepte, refuse ou modifie. +- Ce ping-pong se poursuit jusqu’à accord. + +### 5.2.4 Finalisation du rendez-vous + +- Une fois confirmé, les numéros de téléphone sont échangés. +- Le rendez-vous a lieu hors de la plateforme. + +## 5.3 Création du contrat + +### 5.3.1 Validation mutuelle + +- Après le rendez-vous, l'assistante maternelle et les parents sont invités à confirmer la poursuite du dossier. +- Chacun renseigne : + - Horaires de garde + - Taux horaire + - Indemnités repas et entretien + - Début du contrat + +### 5.3.2 Vérification croisée + +- L’outil compare les informations saisies par les deux parties. +- Si elles diffèrent : + - Nouvelle saisie demandée + - Le gestionnaire peut être notifié pour accompagner + +- Si elles concordent : + - Le contrat est généré automatiquement + +### 5.3.3 Validation finale + +Une fois le contrat généré et validé par le gestionnaire : + +1. **Téléchargement** : chaque partie récupère le PDF. +2. **Signature manuscrite** : les parents (employeurs) et l’assistante maternelle signent physiquement le document. +3. **Confirmation dans la plateforme** : + - Un bouton « J’ai signé » apparaît pour chaque partie. + - (Optionnel) Téléversement du contrat signé scanné ou photographié. +4. Dès que les deux confirmations sont saisies, **le contrat est considéré actif** ; l’application lie définitivement les comptes parent / assistante maternelle à ce contrat. + +> Lors de la génération du contrat, le NIR de l’assistante maternelle est injecté dans le PDF, mais **n’est affiché nulle part dans l’application**. + +## 5.4 Avenants + +### 5.4.1 Initiation + +- Un bouton “Proposer un avenant” est disponible dans le panneau Contrat +- Les deux parties peuvent initier un avenant + +### 5.4.2 Contenu + +- Modification des horaires +- Revalorisation du taux horaire +- Changement de type de contrat (année complète ↔ incomplète) +- Nombre de semaines de garde + +### 5.4.3 Validation + +- Même processus que pour le contrat initial : + - Chaque partie valide + - Vérification de cohérence + - Approbation finale du gestionnaire + +### 5.4.4 Amélioration future possible + +- Numérotation automatique des avenants +- Historique des modifications + +## 5.5 Fin de contrat + +### 5.5.1 Déclaration de fin + +- Initiée par l’une des parties +- Raison de la rupture (texte obligatoire) +- Option “Notifier le gestionnaire” (cas de désaccord) + +### 5.5.2 Intervention du gestionnaire + +- Peut proposer un rendez-vous de conciliation +- Possibilité de laisser des observations + +#### 5.5.2 bis Procédure en cas de désaccord persistant +- Si la médiation du gestionnaire n’aboutit pas : + 1. Création automatique d’un **dossier Litige** (statut “Ouvert”) visible du gestionnaire et des deux parties. + 2. Possibilité d’ajouter des commentaires horodatés et pièces justificatives (non obligatoires). + 3. Génération d’un **rapport PDF** exportable pour saisie d’un conciliateur ou des services juridiques de la mairie. +- Le dossier passe à “Clôturé” : + - par accord écrit des parties, + - ou après 90 jours sans activité (archivage automatique). + +### 5.5.3 Solde de tout compte + +- Calcul automatique du solde : + - Congés restants + - Indemnités + - Heures supplémentaires +- Génération d’un récapitulatif téléchargeable + + +# 6. Outils partagés + +Certains outils de la plateforme sont accessibles à plusieurs profils et favorisent la collaboration entre les utilisateurs tout en assurant la traçabilité des échanges. + +## 6.1 Messagerie + +- Intégrée dans tous les tableaux de bord (parents, assistantes maternelles, gestionnaires) +- Permet les échanges directs entre parents et assistantes maternelles +- Possibilité pour les parents ou l'assistante maternelle d’ajouter le gestionnaire à une conversation existante +- Le gestionnaire peut initier des conversations avec : + - Un parent + - Une assistante maternelle + - Les deux à la fois (en cas de médiation) +- Conversations de groupe possibles entre le gestionnaire et plusieurs assistantes maternelles (organisation d’événements) +- 📌 **Nota** : les parents ne participent jamais à ces groupes collectifs +- ✅ Si deux parents sont déclarés, ils sont **automatiquement intégrés** à toutes les conversations liées à leur enfant + +## 6.2 Agenda + +- Chaque rôle dispose d’un agenda intégré +- Permet d’ajouter, modifier ou valider : + - Absences enfants + - Congés des assistantes maternelles + - Vacances des parents + - Événements RPE +- Un résumé visuel est proposé (vue mois/semaine/année) +- Synchronisation automatique avec les événements validés par l’autre partie +- Récapitulatif hebdomadaire (ou quotidien) envoyé à l’assistante maternelle + +##### Workflow « Arrêt maladie » +- Fonctionne sans stockage de document médical : + 1. L’assistante maternelle clique **Arrêt transmis aux parents**. + 2. Le parent concerné valide via **Arrêt bien reçu**. +- Une fois les deux actions réalisées, l’arrêt maladie est confirmé dans les agendas des deux parties. + + +## 6.3 Fiche enfant + +- Visible et modifiable par les parents +- Consultable par : + - L’assistante maternelle (si liée à un contrat) + - Le gestionnaire (à titre d’information) +- Contient : + - Identité + - Photo (obligatoire si né) + - Statut (à naître / actif / scolarisé) + - Parents associés + - Mention s’il s’agit de jumeaux, triplés, etc. + +## 6.4 Contrats et avenants + +- Partagés entre les parents, l’assistante maternelle, et le gestionnaire +- Contrat actif consultable dans les tableaux de bord +- Avenants consultables dans l’historique +- Contrat généré uniquement après validation mutuelle et approbation du gestionnaire +- L’outil garantit que seules les versions validées sont actives et accessibles + + +# 7. Suivi administratif et financier + +La plateforme P'titsPas intègre plusieurs outils d’accompagnement pour simplifier la gestion administrative et financière des contrats entre parents et assistantes maternelles. + +## 7.1 Fiche de paie + +- Calcul automatique des éléments mensuels à reporter : + - Heures normales rémunérées + - Heures supplémentaires + - Indemnités repas et entretien + - Absences déduites +- Récapitulatif consultable dans l’espace Contrat du parent et de l’assistante maternelle +- Export possible sous format PDF pour usage personnel ou archivage +- Le NIR de l’assistante maternelle est utilisé pour pré-remplir les champs Pajemploi ; il n’est jamais affiché à l’écran. + + +## 7.2 Aide au remplissage Pajemploi + +- Affichage clair et guidé de la **feuille à remplir** sur le site Pajemploi +- P'titsPas préremplit chaque champ avec les valeurs calculées à partir du contrat +- Objectif : faciliter la saisie et éviter les erreurs de déclaration +- 📌 **Nota** : il ne s’agit pas d’une déclaration automatique + +## 7.3 Heures supplémentaires + +- L’assistante maternelle peut déclarer des heures supplémentaires via son tableau de bord : + - Sélection du jour concerné + - Nombre d’heures effectuées au-delà du contrat + - Commentaire facultatif +- Les heures apparaissent ensuite dans le récapitulatif mensuel +- Le tarif des heures supplémentaires est défini dans le contrat initial + +## 7.4 Historique + +- Chaque contrat conserve un historique : + - Avenants + - Déclarations mensuelles + - Modifications validées + - Absences notables +- Accessible aux parents, à l’assistante maternelle, et au gestionnaire + +## 7.5 Solde de tout compte + +- Lors de la fin de contrat, l’outil génère un récapitulatif : + - Jours de congés restants ou à indemniser + - Indemnités éventuelles + - Heures supplémentaires non réglées +- Permet d’établir un **solde de tout compte** clair, limitant les risques de conflit + + +# 8. Administration technique et conformité + +Ce chapitre regroupe les mécanismes garantissant la sécurité, la fiabilité et la conformité légale de la plateforme P'titsPas. Il s’adresse aux administrateurs techniques des collectivités. + +## 8.1 Sécurité et accès + +- Chaque utilisateur possède un identifiant personnel et un mot de passe +- Les administrateurs et gestionnaires doivent changer leur mot de passe à la première connexion +- Journalisation des accès sensibles (historique des connexions, changements de paramètres) +- Sécurisation HTTPS, stockage des mots de passe chiffré +- Limitation des tentatives de connexion frauduleuses (anti-brute-force) +- Chiffrement au repos : le NIR est stocké chiffré (AES-256, clé KMS). +- Accès restreint : seule l’assistante maternelle peut consulter ou modifier son NIR. +- Journalisation : toute modification du NIR est tracée (horodatage, ID utilisateur). +- Aucune pièce jointe médicale n’est conservée ; seules les métadonnées de validation des arrêts maladie (date, utilisateurs) sont journalisées. +- Les rapports créés via « Signaler un bug » sont stockés dans la table `bug_report` avec horodatage et identifiant utilisateur, accessibles uniquement aux administrateurs. + +> 🔗 **Sauvegarde & PRA** +> Les exigences détaillées sont décrites dans le SSS-SAU-001 « Sauvegarde & Plan de Reprise d’Activité ». +> Le présent CDC ne reprend que les objectifs RPO/RTO et la nécessité de tests semestriels. + + +## 8.2 Gouvernance multi-admins + +- Possibilité de créer plusieurs administrateurs par commune +- Droits identiques, sauf si future extension multi-mairies (non implémentée à ce stade) +- Suivi des actions d’administration horodatées pour audit interne + +## 8.3 Conformité RGPD + +- Affichage explicite des consentements lors de la création de compte +- Possibilité pour l’utilisateur de : + - Consulter les données stockées + - Demander la suppression de son compte +- Interface d’anonymisation des données sur demande +- Accès à la politique de confidentialité depuis chaque tableau de bord +- Archivage horodaté des modifications sensibles +- Stockage du consentement photo avec date, heure, utilisateur concerné. +- Retrait de consentement : masque immédiat de la photo, déclenchement d’une suppression définitive sous 30 jours. +- Registre des traitements mis à jour pour la finalité « affichage photo assistante maternelle / enfant ». + +#### 8.3.1 Fondement juridique +- Collecte du NIR fondée sur l’exécution du contrat de travail (art. 6-1-b RGPD). + +#### 8.3.2 Minimisation +- Le NIR est utilisé **exclusivement** pour générer le contrat PDF et la fiche de paie. + +#### 8.3.3 Conservation +- Conservation : 5 ans après la fin du dernier contrat, puis hachage irréversible ou suppression. + +#### 8.3.4 Consentement photo +- Stockage de l’accord avec date, heure, utilisateur. +- Retrait de consentement : masque immédiat, suppression définitive sous 30 jours. +- Registre des traitements mis à jour : finalité « Affichage photo assistante maternelle / enfant ». + +#### 8.3.5 Droits des personnes et suppression de compte +- Les parents et assistantes maternelles peuvent **supprimer** leur compte à tout moment depuis le menu Profil. +- La suppression entraîne : + - désactivation immédiate de l’accès, + - effacement des données personnelles hors obligations légales (contrats archivés 5 ans). +- **Anonymisation totale non applicable** : le lien employeur – salarié impose de conserver certaines informations nominatives dans les contrats et historiques de paie conformément au Code du Travail. + +## 8.4 Intégration API + +- Possibilité future d’intégration aux systèmes d’information municipaux : + - Statistiques + - Données anonymisées d’activité + - Synchronisation éventuelle avec les portails familles ou services petite enfance +- ⚠️ Préparation automatique des déclarations Pajemploi via API non disponible par défaut : + - Cette fonctionnalité nécessite une habilitation spécifique de l’URSSAF + - Elle est donc classée comme amélioration future possible + +### 8.5 Architecture technique + +L’équipe de développement est libre de choisir la pile technologique ; seules les règles suivantes sont impératives. + +> 🔗 Les aspects techniques (sauvegarde, PRA, CI/CD, API, déploiement) sont détaillés dans le document **SSS-001 – Spécification technique & opérationnelle unifiée**. + +#### 8.5.1 Principes directeurs +- **Conformité RGPD** : minimisation, chiffrement au repos et en transit. +- **Sécurité by-design** : respect OWASP Top 10, revue de code, tests de pénétration. +- **Modularité & maintenabilité** : séparation claire frontend / backend / base. +- **Portabilité** : conteneurisation (Docker ou équivalent) pour exécution locale et serveur communal. +- **Traçabilité** : journaux horodatés, corrélables (API, base, authentification). +- **Documentation** : README d’installation, diagrammes d’architecture, description API. + +#### 8.5.2 Contraintes non fonctionnelles _(valeurs indicatives)_ +- Disponibilité mensuelle ≥ **98 %**. +- Temps de réponse **P95 < 500 ms** sur les opérations courantes. +- Capacité de test : **≈ 50 sessions simultanées**. +- Compatibilité navigateurs : Chrome, Edge, Firefox, Safari (versions N, N-1). +- Accessibilité : niveau **RGAA AA**. +- Agenda utilisable hors-ligne ; synchronisation sous 24 h. + +#### 8.5.3 Déploiement (instance communale) +- L’équipe **propose** la méthode de packaging (ex. Docker Compose, VM image, .deb) permettant une installation sur un serveur Linux municipal **en < 1 h**. +- Un **script “update / rollback”** doit être livré (ou procédure équivalente). +- Un **pipeline CI/CD** minimal (tests + build image) est requis ; l’école fournit son dépôt Git / runner. +- Les journaux applicatifs et les métriques doivent pouvoir être branchés sur l’outillage de supervision de la commune (format libre, à documenter). + +#### 8.5.4 Mode faible connectivité +Service Worker : mise en cache des ressources critiques et file d’attente locale (≤ 24 h) pour l’agenda et la messagerie. + +#### 8.5.5 Sécurité technique +TLS 1.3, en-tête HSTS 12 mois, scan d’images conteneurs (CVE > 7 bloquantes), secrets via Vault ou fichier .env chiffré, rotation 90 j. + +# 9. Améliorations futures possibles + +Certaines fonctionnalités ne sont pas prioritaires dans la première version de P'titsPas, mais sont identifiées comme des évolutions possibles à forte valeur ajoutée pour les utilisateurs et les collectivités. + +## 9.1 Modules activables + +Ces modules peuvent être activés ou non par les administrateurs, selon la politique de la mairie ou les ressources disponibles. + +### 9.1.1 Blog RPE + +- Le gestionnaire peut publier des actualités dans un blog visible depuis le tableau de bord des parents et des assistantes maternelles. +- Il peut activer ou désactiver les commentaires. +- Il peut aussi publier des sondages ou cibler certaines publications (parents uniquement, assistantes maternelles uniquement, ou tous). +- La mairie (via l’administrateur) peut également publier dans ce flux. + +### 9.1.2 IA de reformulation + +- Un système d’intelligence artificielle peut proposer une reformulation des messages écrits avant envoi. +- Utile pour clarifier un message contractuel ou technique. +- Le message IA est signalé comme tel. +- Une API externe (ChatGPT, Claude, etc.) peut être configurée par l’administrateur. + +### 9.1.3 Connexion Pajemploi (API URSSAF) + +- Permettrait un envoi automatique des données vers Pajemploi. +- ⚠️ Cette API nécessite une habilitation spécifique par l’URSSAF. +- Requiert un partenariat de confiance entre la collectivité et l’institution. + +### 9.1.4 Garde d’enfants “grands” + +- Permet à une assistante maternelle d’accueillir des enfants scolarisés en périscolaire. +- Requiert un agrément spécifique, indiqué dans le profil. +- Les parents peuvent déclarer un enfant comme scolarisé. + +### 9.1.5 Pré-remplissage des dossiers scolaires + +- À la fin d’un contrat, un rappel automatique peut être envoyé aux parents sur les dates d’inscription à l’école. +- Pièces jointes : formulaire d’inscription, prérempli avec les données de la fiche enfant. + +### 9.1.6 Dossier fratrie unique + +- Un seul dossier pour plusieurs enfants (fratrie simultanée). +- Par défaut, chaque enfant dispose actuellement de son propre dossier. +- Cette fonctionnalité regrouperait les démarches dans un flux unique. +- Contrats séparés, workflow mutualisé + - Un seul **dossier de recherche** et de mise en relation couvre l’ensemble de la fratrie. + - Au moment de la génération, **un contrat distinct** est créé pour chaque enfant (obligations légales inchangées), mais les étapes du workflow (recherche, rendez-vous, validation) ne sont effectuées qu’une fois. + - Les parents et l’assistante maternelle n’ont donc qu’une seule demande à gérer, tandis que la plateforme conserve la granularité nécessaire pour la paie et les déclarations Pajemploi. + - Les écrans doivent afficher un badge « Fratrie » permettant de basculer d’un contrat à l’autre. + +#### 9.1.7 Signature électronique des contrats +- Intégration d’un prestataire de signature qualifiée (eIDAS) pour rendre le processus 100 % dématérialisé. +- Bénéfices : gain de temps, valeur probante renforcée, archivage automatisé. +- Complexité : coûts de licence, vérification d’identité, circuit API. + +#### 9.1.8 Intégration LDAP / SSO (agents municipaux) +- Connexion via annuaire LDAP ou fournisseur SAML 2. +- Les comptes parents / nounous restent sur le login interne. + +#### 9.1.9 Base de données externe PostgreSQL +- Possibilité de connecter l’application à un cluster PostgreSQL déjà géré par la DSI. +- Scripts d’initialisation et de migration fournis (Flyway/Liquibase). + +#### 9.1.10 Offre SaaS mutualisée +- Hébergement centralisé pour les communes sans infrastructure locale. +- Facturation à l’usage ; supervision et sauvegardes opérées par l’éditeur. + +#### 9.1.11 Mise en conformité RGAA (niveau AA) +- Audit complet : contrastes, navigation clavier, rôles ARIA. +- Correctifs design et tests utilisateurs. +- Priorité : **amélioration future**. + +#### 9.1.12 Centre d’aide / support utilisateur +- FAQ consultable + formulaire de ticket. +- Tableau de bord « Support » pour la mairie. +- Possibilité d’intégrer un chatbot d’assistance. +- Priorité : **amélioration future**. + +## 9.2 Stratégie d’activation + +- Chaque module peut être activé depuis le tableau de bord administrateur +- Une section “Modules complémentaires” permet : + - De consulter les modules disponibles + - D’activer/désactiver chaque fonctionnalité + - D’ajouter les API externes nécessaires (IA, URSSAF…) + +- Les modules activés sont ensuite visibles dans l’interface utilisateur concernée (parents, assistantes maternelles, gestionnaires). + +# 10. Synthèse finale + +P'titsPas est bien plus qu’un simple outil de gestion de la garde d’enfants. C’est une plateforme publique, inclusive et responsable, au service des familles, des assistantes maternelles et des collectivités locales. + +## 10.1 Valeurs portées + +P'titsPas s’inscrit dans une démarche de service public, avec des fondements clairs : + +- **Neutralité** : pas de système de notation, pas de mise en concurrence biaisée. +- **Équité** : tous les utilisateurs bénéficient des mêmes droits d’usage. +- **Transparence** : chaque processus est lisible, traçable, et validé par les deux parties. +- **Accessibilité** : l’interface est pensée pour les téléphones comme pour les ordinateurs. + +## 10.2 Bénéfices pour les utilisateurs + +| Acteur | Bénéfices directs | +|-------------------------|---------------------------------------------------------------------------| +| **Parents** | Simplicité de recherche, centralisation des échanges, aide Pajemploi | +| **Assistantes maternelles** | Gain de temps, traçabilité des contrats, autonomie de gestion | +| **Gestionnaires** | Suivi global des situations, outils de médiation, organisation d’événements | +| **Administrateurs** | Supervision complète, gouvernance multi-rôle, contrôle des données | + +## 10.3 Périmètre fonctionnel de la V1 + +Fonctionnalités incluses dès la première version : +- Création de comptes +- Recherche et sélection de nounous +- Suivi des dossiers +- Génération de contrat et avenants +- Messagerie +- Gestion des événements et agenda +- Aide à la paie Pajemploi +- Gestion des heures supplémentaires +- Suivi RGPD et administration + +## 10.4 Perspectives + +La structure du produit permet une montée en charge progressive : +- Activation des modules complémentaires (blog, IA, API Pajemploi) +- Adaptation aux nouvelles attentes des mairies +- Déploiement intercommunal possible +- Intégration avec les portails citoyens des collectivités + +P'titsPas incarne une nouvelle manière de soutenir les parcours de garde dans les territoires. C’est une application qui place **l’humain**, **la clarté** et **le lien de confiance** au cœur du service. + +## 10.5 Propriété intellectuelle et licence de l’application + +- Tout le code source, la marque « P'titsPas » et la documentation associée demeurent la **propriété exclusive de l’éditeur** (Julien). +- Les communes clientes reçoivent une **licence d’utilisation non exclusive, non transférable** : + - droit d’installer et d’exécuter l’application dans leur infrastructure, + - droit d’effectuer les sauvegardes nécessaires à l’exploitation, + - interdiction de distribuer, vendre ou mettre le code à disposition de tiers sans accord écrit. +- Le code source n’est pas publié sous une licence open-source ; il peut être remis **sous clause d’escrow** (tiers séquestre) pour garantir la maintenance en cas de défaillance de l’éditeur. +- Les étudiants ou prestataires contribuant au projet cèdent leurs droits patrimoniaux à l’éditeur via un accord de cession signé avant livraison. +- Toute personnalisation réalisée pour une commune fait partie intégrante du produit et est couverte par la licence ci-dessus, sauf stipulation contraire. + +--- + +*Fin du document* + diff --git a/docs/README-ARCHITECTURE.md b/docs/02_ARCHITECTURE.md similarity index 100% rename from docs/README-ARCHITECTURE.md rename to docs/02_ARCHITECTURE.md diff --git a/docs/README-DEPLOYMENT.md b/docs/03_DEPLOYMENT.md similarity index 100% rename from docs/README-DEPLOYMENT.md rename to docs/03_DEPLOYMENT.md diff --git a/docs/DATABASE.md b/docs/10_DATABASE.md similarity index 100% rename from docs/DATABASE.md rename to docs/10_DATABASE.md diff --git a/docs/API.md b/docs/11_API.md similarity index 100% rename from docs/API.md rename to docs/11_API.md diff --git a/docs/20_WORKFLOW-CREATION-COMPTE.md b/docs/20_WORKFLOW-CREATION-COMPTE.md new file mode 100644 index 0000000..efe024f --- /dev/null +++ b/docs/20_WORKFLOW-CREATION-COMPTE.md @@ -0,0 +1,2288 @@ +# 📋 Documentation Technique - Workflow de Création de Compte + +**Version** : 1.0 +**Date** : 24 Novembre 2025 +**Auteur** : Équipe PtitsPas +**Référence CDC** : Cahier des Charges P'titsPas V1.3 + +--- + +## 📖 Table des matières + +1. [Vue d'ensemble](#vue-densemble) +2. [Acteurs](#acteurs) +3. [Workflow détaillé](#workflow-détaillé) +4. [Diagrammes de séquence](#diagrammes-de-séquence) +5. [Spécifications techniques](#spécifications-techniques) +6. [APIs utilisées](#apis-utilisées) +7. [Modèles de données](#modèles-de-données) +8. [Templates d'emails](#templates-demails) +9. [Tests et validation](#tests-et-validation) + +--- + +## 🎯 Vue d'ensemble + +### Objectif + +Implémenter le workflow complet de création et validation des comptes utilisateurs pour l'application P'titsPas, permettant : +- La création de gestionnaires par le super administrateur +- L'inscription autonome des parents et assistantes maternelles +- La validation des comptes par les gestionnaires +- La notification par email des décisions + +### Périmètre fonctionnel + +Ce workflow couvre la **Phase 1** du projet, correspondant au premier use case critique : +> "Permettre au super admin de créer des gestionnaires, qui pourront ensuite valider les inscriptions des parents et assistantes maternelles." + +### Référence CDC + +**Section 3.1** : Gestion des utilisateurs +**Section 3.2** : Processus de validation +**Section 4.5** : Notifications email + +--- + +## 👥 Acteurs + +### 1. Super Administrateur (`super_admin`) + +**Rôle** : Administrateur système avec tous les droits +**Identifiants initiaux** : +- Email : `admin@ptits-pas.fr` +- Mot de passe : `4dm1n1strateur` + +**Responsabilités** : +- Créer les comptes gestionnaires +- Accéder au panneau d'administration +- Gérer la configuration système + +**Référence** : Table `utilisateurs` avec `role = 'super_admin'` et `statut = 'actif'` + +--- + +### 2. Gestionnaire (`gestionnaire`) + +**Rôle** : Validateur des inscriptions +**Création** : Par le super administrateur uniquement + +**Responsabilités** : +- Consulter les demandes d'inscription en attente +- Valider ou refuser les comptes parents +- Valider ou refuser les comptes assistantes maternelles +- Consulter les informations des demandeurs + +**Référence** : Table `utilisateurs` avec `role = 'gestionnaire'` et `statut = 'actif'` + +--- + +### 3. Parent (`parent`) + +**Rôle** : Utilisateur final cherchant une assistante maternelle +**Création** : Inscription autonome via formulaire public + +**Workflow** : +1. S'inscrit via le formulaire public +2. Statut initial : `en_attente` +3. Attend la validation d'un gestionnaire +4. Reçoit un email de notification (validé/refusé) +5. Si validé : peut se connecter et accéder à l'application + +**Référence** : +- Table `utilisateurs` avec `role = 'parent'` +- Table `parents` (relation 1:1 avec `utilisateurs`) + +--- + +### 4. Assistante Maternelle (`assistante_maternelle`) + +**Rôle** : Professionnelle proposant ses services de garde +**Création** : Inscription autonome via formulaire public + +**Workflow** : Identique aux parents +1. S'inscrit via le formulaire public +2. Statut initial : `en_attente` +3. Attend la validation d'un gestionnaire +4. Reçoit un email de notification (validé/refusé) +5. Si validée : peut se connecter et accéder à l'application + +**Référence** : +- Table `utilisateurs` avec `role = 'assistante_maternelle'` +- Table `assistantes_maternelles` (relation 1:1 avec `utilisateurs`) + +--- + +## ⚠️ Points d'attention - Conformité CDC + +Avant de détailler le workflow, voici les points critiques pour assurer la conformité avec le Cahier des Charges : + +### Inscription Parent (CDC 3.1) +- ✅ **6 étapes obligatoires** : Parent 1, Parent 2 (opt), Enfant, Présentation, CGU, Récapitulatif +- ✅ **Photo obligatoire** si enfant déjà né +- ✅ **Acceptation CGU** avec horodatage +- ✅ **Notification** : Email **OU** SMS après validation + +### Inscription Assistante Maternelle (CDC 3.2) +- ✅ **NIR obligatoire** (Numéro de Sécurité sociale - 15 chiffres) +- ✅ **Photo obligatoire** (si option activée) +- ✅ **Consentement photo** avec horodatage (RGPD) +- ✅ **Date et lieu de naissance** obligatoires +- ✅ **Acceptation CGU** avec horodatage +- ✅ **Notification** : Email **OU** SMS après validation + +### Création Gestionnaire (CDC 3.3) +- ✅ **Changement de mot de passe obligatoire** à la première connexion +- ✅ Créé par un administrateur uniquement + +### Création Administrateur (CDC 3.4) +- ✅ **Changement de mot de passe obligatoire** à la première connexion +- ✅ Créé par un administrateur existant uniquement + +### Champs Base de Données Manquants +Les champs suivants doivent être ajoutés à la base de données : +- `nir_chiffre` (assistantes_maternelles) - **OBLIGATOIRE** +- `ville_naissance` (utilisateurs) +- `pays_naissance` (utilisateurs) +- `date_acceptation_cgu` (utilisateurs) +- `presentation_dossier` (parents ou table dédiée) +- `date_consentement_photo` (utilisateurs) - **Existe déjà** ✅ + +--- + +## 🔄 Workflow détaillé + +### Étape 1 : Initialisation du système + +**Prérequis** : Base de données initialisée avec le super admin + +```sql +-- Seed initial (01_init.sql) +INSERT INTO utilisateurs (email, password, prenom, nom, role, statut) +VALUES ( + 'admin@ptits-pas.fr', + '$2b$12$Fo5ly1YlTj3O6lXf.IUgoeUqEebBGpmoM5zLbzZx.CueorSE7z2E2', -- Hash de "4dm1n1strateur" + 'Admin', + 'Système', + 'super_admin', + 'actif' +); +``` + +**État** : ✅ Implémenté + +--- + +### Étape 2 : Création d'un gestionnaire + +**Acteur** : Super Administrateur +**Interface** : Panneau d'administration - Section "Créer un gestionnaire" + +#### 2.1 Interface utilisateur + +**Écran** : Formulaire ultra-simple avec les champs suivants : + +| Champ | Type | Validation | Obligatoire | +|-------|------|------------|-------------| +| Nom | Text | 2-100 caractères | ✅ | +| Prénom | Text | 2-100 caractères | ✅ | +| Email | Email | Format email valide | ✅ | +| Mot de passe | Password | Min 8 caractères, 1 majuscule, 1 chiffre | ✅ | + +**Bouton** : "Soumettre" + +**Wireframe** : +``` +┌─────────────────────────────────────────┐ +│ Créer un Gestionnaire │ +├─────────────────────────────────────────┤ +│ │ +│ Nom : [________________] │ +│ │ +│ Prénom : [________________] │ +│ │ +│ Email : [________________] │ +│ (personnel ou collectivité)│ +│ │ +│ Mot de passe : [________________] │ +│ │ +│ [ Soumettre ] │ +│ │ +└─────────────────────────────────────────┘ +``` + +#### 2.2 Flux technique + +**Frontend → Backend** + +```typescript +// Frontend (Flutter) +POST /api/v1/gestionnaires +Headers: { + Authorization: Bearer + Content-Type: application/json +} +Body: { + "email": "lucas.moreau@ptits-pas.fr", + "password": "password", + "prenom": "Lucas", + "nom": "MOREAU", + "telephone": "06 87 23 45 67" +} +``` + +**Backend → Database** + +```typescript +// Backend (NestJS) +// 1. Validation du token (AuthGuard) +// 2. Vérification du rôle (RolesGuard - super_admin uniquement) +// 3. Validation des données (DTO) +// 4. Hash du mot de passe (bcrypt, 12 rounds) +// 5. Création de l'utilisateur + +INSERT INTO utilisateurs ( + email, password, prenom, nom, telephone, role, statut, + changement_mdp_obligatoire, cree_le +) VALUES ( + 'lucas.moreau@ptits-pas.fr', + '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewY5iIdYvYvOYvOy', -- Hash bcrypt de "password" + 'Lucas', + 'MOREAU', + '06 87 23 45 67', + 'gestionnaire', + 'actif', -- Statut actif immédiatement + TRUE, -- Changement de mot de passe obligatoire à la première connexion (CDC 3.3) + NOW() +); +``` + +**Réponse** + +```json +{ + "id": "uuid-lucas-moreau", + "email": "lucas.moreau@ptits-pas.fr", + "prenom": "Lucas", + "nom": "MOREAU", + "telephone": "06 87 23 45 67", + "role": "gestionnaire", + "statut": "actif", + "cree_le": "2025-11-24T10:30:00Z" +} +``` + +**État** : 🟠 Backend implémenté, Frontend à créer + +--- + +### Étape 3 : Inscription d'un parent + +**Acteur** : Parent (non authentifié) +**Interface** : Page publique d'inscription parent +**Référence CDC** : Section 3.1 + +Le processus d'inscription parent se déroule en **6 étapes** conformément au cahier des charges. + +#### 3.1 Étape 1 : Informations Parent 1 + +**Écran** : Formulaire d'identité du parent principal + +| Champ | Type | Validation | Obligatoire | +|-------|------|------------|-------------| +| Nom | Text | 2-100 caractères | ✅ | +| Prénom | Text | 2-100 caractères | ✅ | +| Adresse postale | Text | Adresse complète | ✅ | +| Code postal | Text | 5 chiffres | ✅ | +| Ville | Text | 2-150 caractères | ✅ | +| Téléphone | Tel | Format français | ✅ | +| Email | Email | Format email valide | ✅ | + +**Note importante** : Le Parent 1 ne définit **pas** de mot de passe lors de l'inscription. Il recevra un email avec un lien pour créer son mot de passe après validation du gestionnaire. + +**Bouton** : "Suivant" + +--- + +#### 3.2 Étape 2 : Informations Parent 2 (facultatif) + +**Écran** : Ajout d'un co-parent (optionnel) + +**Question** : "Souhaitez-vous ajouter un second parent ?" +- ⭕ Oui +- ⭕ Non + +**Si Oui** : + +| Champ | Type | Validation | Obligatoire | +|-------|------|------------|-------------| +| Nom | Text | 2-100 caractères | ✅ | +| Prénom | Text | 2-100 caractères | ✅ | +| Email | Email | Format email valide | ✅ | +| Téléphone | Tel | Format français | ✅ | +| Même adresse que Parent 1 | Checkbox | - | - | + +**Si "Même adresse" non coché** : Afficher les champs adresse, code postal, ville + +**Note importante** : Le Parent 2 ne définit **pas** de mot de passe lors de l'inscription. Il recevra un email avec un lien pour créer son mot de passe après validation du gestionnaire. Cette approche est particulièrement adaptée aux situations de parents séparés ou divorcés où la communication peut être difficile. + +**Bouton** : "Suivant" + +--- + +#### 3.3 Étape 3 : Informations sur l'enfant + +**Écran** : Fiche enfant + +**Question** : "L'enfant est-il déjà né ?" +- ⭕ Oui → Afficher "Date de naissance" +- ⭕ Non → Afficher "Date prévisionnelle de naissance" + +| Champ | Type | Validation | Obligatoire | +|-------|------|------------|-------------| +| Prénom | Text | 2-100 caractères | ❌ (si à naître) | +| Nom | Text | Hérité des parents | Auto | +| Date de naissance | Date | Format JJ/MM/AAAA | ✅ (si né) | +| Date prévisionnelle | Date | Format JJ/MM/AAAA | ✅ (si à naître) | +| Genre | Select | H / F | ✅ | +| Photo | File | Image (JPEG/PNG), max 5MB | ✅ (si né) | +| Grossesse multiple | Checkbox | Jumeaux, triplés, etc. | ❌ | + +**Bouton** : "Ajouter un autre enfant" (optionnel) +**Bouton** : "Suivant" + +**Note** : Rattachement automatique aux deux parents si Parent 2 renseigné. + +--- + +#### 3.4 Étape 4 : Présentation du dossier + +**Écran** : Zone de texte libre + +| Champ | Type | Validation | Obligatoire | +|-------|------|------------|-------------| +| Présentation | Textarea | Max 2000 caractères | ⚙️ Configurable | + +**Exemple de texte d'aide** : +> "Décrivez votre situation familiale, vos besoins de garde, vos contraintes horaires, etc. Cette présentation sera visible par les assistantes maternelles et le gestionnaire." + +**Bouton** : "Suivant" + +--- + +#### 3.5 Étape 5 : Acceptation des CGU + +**Écran** : Conditions Générales d'Utilisation + +| Élément | Type | Obligatoire | +|---------|------|-------------| +| CGU | Checkbox | ✅ | + +**Texte** : +☐ J'ai lu et j'accepte les [Conditions Générales d'Utilisation](./cgu.pdf) et la [Politique de confidentialité](./privacy.pdf) + +**Comportement** : +- Les liens ouvrent les documents PDF dans un nouvel onglet +- Le refus bloque la création de compte +- La date d'acceptation est enregistrée en base + +**Bouton** : "Suivant" + +--- + +#### 3.6 Étape 6 : Récapitulatif et validation + +**Écran** : Résumé de toutes les informations saisies + +**Sections affichées** : +1. **Parent 1** : Nom, prénom, email, téléphone, adresse +2. **Parent 2** (si renseigné) : Nom, prénom, email, téléphone +3. **Enfant(s)** : Prénom, date de naissance/prévisionnelle, photo +4. **Présentation** : Extrait du texte (100 premiers caractères) + +**Boutons** : +- "Modifier" (retour aux étapes précédentes) +- "Valider et envoyer ma demande" + +**Message de confirmation** : +> "Votre demande d'inscription a été envoyée. Elle sera examinée par un gestionnaire. Vous recevrez un email ou un SMS une fois votre compte validé." + +**Bouton** : "Terminer" + +#### 3.2 Flux technique + +**Frontend → Backend** + +```typescript +// Frontend (Flutter) - Route publique +// Exemple : Claire MARTIN (parent avec triplés) +// Note : Pas de mot de passe lors de l'inscription +POST /api/v1/auth/register +Headers: { + Content-Type: application/json +} +Body: { + "email": "claire.martin@ptits-pas.fr", + "prenom": "Claire", + "nom": "MARTIN", + "telephone": "06 89 56 78 90", + "role": "parent" +} +``` + +**Backend → Database** + +```typescript +// Backend (NestJS) +// 1. Validation des données (DTO) +// 2. Vérification que l'email n'existe pas déjà +// 3. Génération d'un token de création de mot de passe (UUID) +// 4. Transaction : Créer utilisateur + entité métier + +BEGIN TRANSACTION; + +-- Création de l'utilisateur (sans mot de passe) +INSERT INTO utilisateurs ( + email, password, prenom, nom, telephone, role, statut, + adresse, code_postal, ville, profession, situation_familiale, date_naissance, + password_reset_token, password_reset_expires, cree_le +) VALUES ( + 'claire.martin@ptits-pas.fr', + NULL, -- Pas de mot de passe lors de l'inscription + 'Claire', + 'MARTIN', + '06 89 56 78 90', + 'parent', + 'en_attente', -- Statut en attente de validation + '5 Avenue du Général de Gaulle', + '95870', + 'Bezons', + 'Infirmière', + 'Mariée', + '1990-04-03', + gen_random_uuid(), -- Token de création de mot de passe + NOW() + INTERVAL '7 days', -- Expiration du token (7 jours) + NOW() +) RETURNING id; + +-- Création de l'entité métier parent +-- Note : id_co_parent sera renseigné plus tard si Thomas MARTIN s'inscrit +INSERT INTO parents (id_utilisateur, id_co_parent) +VALUES ('uuid-claire-martin', NULL); + +COMMIT; +``` + +**Réponse** + +```json +{ + "message": "Inscription réussie. Votre compte est en attente de validation par un gestionnaire. Vous recevrez un email une fois votre compte validé.", + "userId": "uuid-claire-martin" +} +``` + +**État** : 🔴 À implémenter complètement selon CDC + +--- + +### Étape 3bis : Inscription d'une assistante maternelle + +**Acteur** : Assistante Maternelle (non authentifiée) +**Interface** : Page publique d'inscription assistante maternelle +**Référence CDC** : Section 3.2 + +Le processus d'inscription assistante maternelle se déroule en **5 étapes** avec 2 panneaux principaux. + +#### 3bis.1 Panneau 1 : Informations d'identité + +**Écran** : Formulaire d'identité + +| Champ | Type | Validation | Obligatoire | +|-------|------|------------|-------------| +| Nom | Text | 2-100 caractères | ✅ | +| Prénom | Text | 2-100 caractères | ✅ | +| Adresse postale | Text | Adresse complète | ✅ | +| Code postal | Text | 5 chiffres | ✅ | +| Ville | Text | 2-150 caractères | ✅ | +| Téléphone | Tel | Format français | ✅ | +| Email | Email | Format email valide | ✅ | +| Photo de profil | File | Image (JPEG/PNG), max 5MB | ⚙️ Configurable | + +**Consentement photo** (si photo uploadée) : + +☐ J'autorise le stockage et l'affichage de ma photo sur la plateforme (RGPD) + +**Note importante** : L'assistante maternelle ne définit **pas** de mot de passe lors de l'inscription. Elle recevra un email avec un lien pour créer son mot de passe après validation du gestionnaire. + +**Note** : La date du consentement est enregistrée automatiquement. + +**Bouton** : "Suivant" + +--- + +#### 3bis.2 Panneau 2 : Informations professionnelles + +**Écran** : Informations professionnelles + +| Champ | Type | Validation | Obligatoire | +|-------|------|------------|-------------| +| Date de naissance | Date | Format JJ/MM/AAAA | ✅ | +| Ville de naissance | Text | 2-150 caractères | ✅ | +| Pays de naissance | Select | Liste des pays | ✅ | +| Numéro de Sécurité sociale (NIR) | Text | 15 chiffres | ✅ | +| Numéro d'agrément | Text | Format libre | ✅ | +| Date d'obtention de l'agrément | Date | Format JJ/MM/AAAA | ✅ | +| Nombre d'enfants pouvant être accueillis | Number | 1-6 | ✅ | + +**Note importante affichée** : +> ⚠️ Le numéro de Sécurité sociale (NIR) est saisi en clair et utilisé uniquement pour la génération automatique du contrat. Il est stocké de manière sécurisée et conforme au RGPD. + +**Bouton** : "Suivant" + +--- + +#### 3bis.3 Présentation + +**Écran** : Message au gestionnaire + +| Champ | Type | Validation | Obligatoire | +|-------|------|------------|-------------| +| Présentation | Textarea | Max 2000 caractères | ❌ | + +**Exemple de texte d'aide** : +> "Présentez-vous et expliquez votre démarche. Vous pouvez ajouter des précisions sur votre expérience, votre méthode pédagogique, vos disponibilités, etc." + +**Bouton** : "Suivant" + +--- + +#### 3bis.4 Acceptation des CGU + +**Écran** : Conditions Générales d'Utilisation + +| Élément | Type | Obligatoire | +|---------|------|-------------| +| CGU | Checkbox | ✅ | + +**Texte** : +☐ J'ai lu et j'accepte les [Conditions Générales d'Utilisation](./cgu.pdf) et la [Politique de confidentialité](./privacy.pdf) + +**Comportement** : +- Les liens ouvrent les documents PDF dans un nouvel onglet +- Le refus bloque la création de compte +- La date d'acceptation est enregistrée en base + +**Bouton** : "Suivant" + +--- + +#### 3bis.5 Récapitulatif et validation + +**Écran** : Résumé de toutes les informations saisies + +**Sections affichées** : +1. **Identité** : Nom, prénom, email, téléphone, adresse, photo +2. **Informations professionnelles** : + - Date de naissance, lieu de naissance + - NIR (masqué : XXX XX XX XX XXX 123) + - Numéro d'agrément + - Capacité d'accueil +3. **Présentation** : Extrait du texte (100 premiers caractères) + +**Boutons** : +- "Modifier" (retour aux étapes précédentes) +- "Valider et envoyer ma demande" + +**Message de confirmation** : +> "Votre demande d'inscription a été envoyée. Elle sera examinée par un gestionnaire. Vous recevrez un email ou un SMS une fois votre compte validé." + +**Bouton** : "Terminer" + +**État** : 🔴 À implémenter complètement selon CDC + +--- + +### Étape 4 : Consultation des demandes par le gestionnaire + +**Acteur** : Gestionnaire +**Interface** : Dashboard gestionnaire avec 2 onglets + +#### 4.1 Interface utilisateur + +**Écran** : Dashboard avec navigation par onglets + +``` +┌─────────────────────────────────────────────────────────┐ +│ Dashboard Gestionnaire │ +├─────────────────────────────────────────────────────────┤ +│ [ Parents ] [ Assistantes Maternelles ] │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ 📋 Demandes en attente (3) │ +│ │ +│ ┌─────────────────────────────────────────────────┐ │ +│ │ 👤 Jean MARTIN │ │ +│ │ 📧 jean.martin@example.com │ │ +│ │ 📱 06 01 02 03 04 │ │ +│ │ 📅 Inscrit le : 20/11/2025 │ │ +│ │ │ │ +│ │ [ ✅ Valider ] [ ❌ Refuser ] │ │ +│ └─────────────────────────────────────────────────┘ │ +│ │ +│ ┌─────────────────────────────────────────────────┐ │ +│ │ 👤 Sophie DURAND │ │ +│ │ ... │ │ +│ └─────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +#### 4.2 Flux technique - Liste des parents + +**Frontend → Backend** + +```typescript +// Frontend (Flutter) +GET /api/v1/parents +Headers: { + Authorization: Bearer +} +Query params: { + statut: "en_attente" // Filtrer uniquement les comptes en attente +} +``` + +**Backend → Database** + +```sql +-- Backend (NestJS) +SELECT + u.id, + u.email, + u.prenom, + u.nom, + u.telephone, + u.statut, + u.cree_le, + p.id_co_parent +FROM utilisateurs u +LEFT JOIN parents p ON u.id = p.id_utilisateur +WHERE u.role = 'parent' + AND u.statut = 'en_attente' +ORDER BY u.cree_le DESC; +``` + +**Réponse** + +```json +[ + { + "id": "uuid-claire-martin", + "email": "claire.martin@ptits-pas.fr", + "prenom": "Claire", + "nom": "MARTIN", + "telephone": "06 89 56 78 90", + "ville": "Bezons", + "profession": "Infirmière", + "situation_familiale": "Mariée", + "statut": "en_attente", + "cree_le": "2025-11-20T14:30:00Z" + }, + { + "id": "uuid-david-lecomte", + "email": "david.lecomte@ptits-pas.fr", + "prenom": "David", + "nom": "LECOMTE", + "telephone": "06 45 56 67 78", + "ville": "Bezons", + "profession": "Développeur web", + "situation_familiale": "Père célibataire", + "statut": "en_attente", + "cree_le": "2025-11-21T09:15:00Z" + } +] +``` + +#### 4.3 Flux technique - Liste des assistantes maternelles + +**Frontend → Backend** + +```typescript +// Frontend (Flutter) +GET /api/v1/assistantes-maternelles +Headers: { + Authorization: Bearer +} +Query params: { + statut: "en_attente" +} +``` + +**Backend → Database** + +```sql +-- Backend (NestJS) +SELECT + u.id, + u.email, + u.prenom, + u.nom, + u.telephone, + u.statut, + u.cree_le, + am.numero_agrement, + am.ville_residence +FROM utilisateurs u +LEFT JOIN assistantes_maternelles am ON u.id = am.id_utilisateur +WHERE u.role = 'assistante_maternelle' + AND u.statut = 'en_attente' +ORDER BY u.cree_le DESC; +``` + +**Réponse** + +```json +[ + { + "id": "uuid-marie-dubois", + "email": "marie.dubois@ptits-pas.fr", + "prenom": "Marie", + "nom": "DUBOIS", + "telephone": "06 96 34 56 78", + "ville": "Bezons", + "statut": "en_attente", + "cree_le": "2025-11-22T11:00:00Z", + "numero_agrement": null, + "ville_residence": "Bezons" + }, + { + "id": "uuid-fatima-elmansouri", + "email": "fatima.elmansouri@ptits-pas.fr", + "prenom": "Fatima", + "nom": "EL MANSOURI", + "telephone": "06 75 45 67 89", + "ville": "Bezons", + "statut": "en_attente", + "cree_le": "2025-11-22T15:30:00Z", + "numero_agrement": null, + "ville_residence": "Bezons" + } +] +``` + +**État** : 🟠 Backend implémenté, Frontend à connecter (actuellement en mock) + +--- + +### Étape 5 : Validation d'un compte + +**Acteur** : Gestionnaire +**Action** : Clic sur le bouton "Valider" + +#### 5.1 Flux technique - Validation + +**Frontend → Backend** + +```typescript +// Frontend (Flutter) +PATCH /api/v1/users/{userId}/valider +Headers: { + Authorization: Bearer + Content-Type: application/json +} +Body: { + "comment": "Dossier complet, compte validé" // Optionnel +} +``` + +**Backend → Database** + +```sql +-- Backend (NestJS) +-- Exemple : Lucas MOREAU valide Marie DUBOIS +BEGIN TRANSACTION; + +-- Mise à jour du statut utilisateur +UPDATE utilisateurs +SET statut = 'actif', + modifie_le = NOW() +WHERE id = 'uuid-marie-dubois'; + +-- Enregistrement de la validation +INSERT INTO validations ( + id_utilisateur, + type, + statut, + valide_par, + commentaire, + cree_le +) VALUES ( + 'uuid-marie-dubois', + 'validation_compte', + 'valide', + 'uuid-lucas-moreau', + 'Agrément vérifié - Profil complet', + NOW() +); + +COMMIT; +``` + +**Backend → Service Email** + +```typescript +// Envoi du lien de création de mot de passe pour tous les utilisateurs (Parents et AM) +await this.mailService.sendPasswordCreationLink({ + to: user.email, + prenom: user.prenom, + nom: user.nom, + token: user.password_reset_token, + expiresAt: user.password_reset_expires, + role: user.role // 'parent' ou 'assistante_maternelle' +}); + +// Si Parent 2 existe, envoi du même type d'email +if (user.role === 'parent' && parent2) { + await this.mailService.sendPasswordCreationLink({ + to: parent2.email, + prenom: parent2.prenom, + nom: parent2.nom, + token: parent2.password_reset_token, + expiresAt: parent2.password_reset_expires, + role: 'parent', + isCoParent: true // Indique qu'il s'agit du co-parent + }); +} +``` + +**Réponse** + +```json +{ + "message": "Compte validé avec succès", + "userId": "uuid-marie-dubois", + "emailSent": true +} +``` + +#### 5.2 Flux technique - Refus + +**Frontend → Backend** + +```typescript +// Frontend (Flutter) +PATCH /api/v1/users/{userId}/suspendre +Headers: { + Authorization: Bearer + Content-Type: application/json +} +Body: { + "comment": "Informations incomplètes" // Obligatoire pour un refus +} +``` + +**Backend → Database** + +```sql +-- Backend (NestJS) +-- Exemple : Lucas MOREAU refuse un compte (exemple fictif) +BEGIN TRANSACTION; + +-- Mise à jour du statut utilisateur +UPDATE utilisateurs +SET statut = 'suspendu', + modifie_le = NOW() +WHERE id = 'uuid-utilisateur-refuse'; + +-- Enregistrement du refus +INSERT INTO validations ( + id_utilisateur, + type, + statut, + valide_par, + commentaire, + cree_le +) VALUES ( + 'uuid-utilisateur-refuse', + 'validation_compte', + 'refuse', + 'uuid-lucas-moreau', + 'Informations incomplètes - Documents manquants', + NOW() +); + +COMMIT; +``` + +**Backend → Service Email** + +```typescript +// Envoi de l'email de notification +await this.mailService.sendAccountRejected({ + to: user.email, + prenom: user.prenom, + nom: user.nom, + role: user.role, + reason: comment +}); +``` + +**Réponse** + +```json +{ + "message": "Compte refusé", + "userId": "uuid-utilisateur-refuse", + "emailSent": true +} +``` + +**État** : 🔴 Backend partiellement implémenté (manque envoi email), Frontend à connecter + +--- + +### Étape 6 : Réception de la notification + +**Acteur** : Parent ou Assistante Maternelle +**Canal** : Email **OU** SMS (conformément au CDC 3.1.6 et 3.2.5) + +**Note** : Le choix du canal de notification (email/SMS) peut être : +- Configuré par l'administrateur (paramètre global) +- Choisi par l'utilisateur lors de l'inscription +- Les deux en parallèle pour plus de fiabilité + +#### 6.1 Email de validation - Parents (avec création de mot de passe) + +**Expéditeur** : `no-reply@ptits-pas.fr` +**Destinataire** : Email du parent +**Objet** : `Votre compte P'titsPas a été validé - Créez votre mot de passe ✅` + +**Template Parent 1** : + +```html + + + + + + + +
+
+

✅ Compte validé

+
+
+

Bonjour {{prenom}} {{nom}},

+ +

Bonne nouvelle ! Votre compte P'titsPas a été validé par notre équipe.

+ +

Pour finaliser votre inscription et accéder à votre espace parent, veuillez créer votre mot de passe en cliquant sur le bouton ci-dessous :

+ +

+ Créer mon mot de passe +

+ +
+ ⏰ Attention : Ce lien est valable pendant 7 jours (jusqu'au {{expires_date}}). +
+ +

Votre identifiant : {{email}}

+ +

Si vous avez des questions, n'hésitez pas à nous contacter à contact@ptits-pas.fr.

+ +

À très bientôt sur P'titsPas !

+ +

L'équipe P'titsPas

+
+ +
+ + +``` + +**Template Parent 2 (Co-parent)** : + +```html + + + + + + + +
+
+

✅ Bienvenue sur P'titsPas

+
+
+

Bonjour {{prenom}} {{nom}},

+ +

Votre co-parent vous a ajouté sur la plateforme P'titsPas et votre compte a été validé par notre équipe.

+ +

Pour accéder à votre espace parent et consulter les informations de vos enfants, veuillez créer votre mot de passe en cliquant sur le bouton ci-dessous :

+ +

+ Créer mon mot de passe +

+ +
+ ⏰ Attention : Ce lien est valable pendant 7 jours (jusqu'au {{expires_date}}). +
+ +

Votre identifiant : {{email}}

+ +

Si vous avez des questions ou si vous n'êtes pas à l'origine de cette inscription, contactez-nous à contact@ptits-pas.fr.

+ +

À très bientôt sur P'titsPas !

+ +

L'équipe P'titsPas

+
+ +
+ + +``` + +#### 6.2 Email de validation - Assistantes Maternelles (avec création de mot de passe) + +**Expéditeur** : `no-reply@ptits-pas.fr` +**Destinataire** : Email de l'assistante maternelle +**Objet** : `Votre compte P'titsPas a été validé - Créez votre mot de passe ✅` + +**Template** : + +```html + + + + + + + +
+
+

✅ Compte validé

+
+
+

Bonjour {{prenom}} {{nom}},

+ +

Bonne nouvelle ! Votre compte P'titsPas a été validé par notre équipe.

+ +

Pour finaliser votre inscription et accéder à votre espace assistante maternelle, veuillez créer votre mot de passe en cliquant sur le bouton ci-dessous :

+ +

+ Créer mon mot de passe +

+ +
+ ⏰ Attention : Ce lien est valable pendant 7 jours (jusqu'au {{expires_date}}). +
+ +

Votre identifiant : {{email}}

+ +

Si vous avez des questions, n'hésitez pas à nous contacter à contact@ptits-pas.fr.

+ +

À très bientôt sur P'titsPas !

+ +

L'équipe P'titsPas

+
+ +
+ + +``` + +#### 6.3 Email de refus + +**Expéditeur** : `no-reply@ptits-pas.fr` +**Destinataire** : Email de l'utilisateur +**Objet** : `Votre demande d'inscription P'titsPas` + +**Template** : + +```html + + + + + + + +
+
+

Votre demande d'inscription

+
+
+

Bonjour {{prenom}} {{nom}},

+ +

Nous avons bien reçu votre demande d'inscription sur P'titsPas.

+ +

Malheureusement, nous ne pouvons pas valider votre compte pour le moment.

+ +

Motif : {{reason}}

+ +

Si vous pensez qu'il s'agit d'une erreur ou si vous souhaitez plus d'informations, n'hésitez pas à nous contacter à contact@ptits-pas.fr.

+ +

Cordialement,

+ +

L'équipe P'titsPas

+
+ +
+ + +``` + +**État** : 🔴 À implémenter + +--- + +#### 6.3 SMS de validation (optionnel) + +**Expéditeur** : P'titsPas (nom court configurable) +**Destinataire** : Numéro de téléphone de l'utilisateur + +**Template SMS** : + +``` +P'titsPas : Votre compte a été validé ! Créez votre mot de passe : https://app.ptits-pas.fr/create-password?token={{token}} (valable 7 jours) +``` + +**Contraintes** : +- Maximum 160 caractères (SMS standard) +- Lien court pour l'URL +- Message clair et concis + +--- + +#### 6.4 SMS de refus (optionnel) + +**Expéditeur** : P'titsPas +**Destinataire** : Numéro de téléphone de l'utilisateur + +**Template SMS** : + +``` +P'titsPas : Votre demande d'inscription n'a pas pu être validée. Motif : {{reason_court}}. Contactez-nous : contact@ptits-pas.fr +``` + +**Contraintes** : +- Maximum 160 caractères +- Motif abrégé si nécessaire +- Contact pour plus d'informations + +**État** : 🔴 À implémenter (Service SMS à configurer : Twilio, OVH, etc.) + +--- + +### Étape 7 : Création du mot de passe + +**Acteur** : Parent (Parent 1 ou Parent 2) ou Assistante Maternelle +**Interface** : Page de création de mot de passe (lien reçu par email) + +#### 7.1 Flux technique + +**Frontend → Backend** + +```typescript +// Frontend (Flutter/Web) +// L'utilisateur clique sur le lien reçu par email +// URL : https://app.ptits-pas.fr/create-password?token= + +GET /api/v1/auth/verify-token?token= +// Vérification que le token est valide et non expiré + +// Si valide, affichage du formulaire de création de mot de passe +POST /api/v1/auth/create-password +Headers: { + Content-Type: application/json +} +Body: { + "token": "", + "password": "NouveauMotDePasse123!", + "password_confirmation": "NouveauMotDePasse123!" +} +``` + +**Backend → Database** + +```typescript +// Backend (NestJS) +// 1. Vérification du token (existe, non expiré, non utilisé) +// 2. Validation du mot de passe (min 8 caractères, 1 majuscule, 1 chiffre) +// 3. Hash du mot de passe (bcrypt, 12 rounds) +// 4. Mise à jour de l'utilisateur + +UPDATE utilisateurs +SET password = '$2b$12$...', -- Hash bcrypt du nouveau mot de passe + password_reset_token = NULL, -- Suppression du token + password_reset_expires = NULL, + statut = 'actif', -- Activation du compte + modifie_le = NOW() +WHERE password_reset_token = '' + AND password_reset_expires > NOW() + AND password IS NULL; -- Sécurité : uniquement si pas de mot de passe existant +``` + +**Réponse** + +```json +{ + "message": "Mot de passe créé avec succès. Vous pouvez maintenant vous connecter.", + "userId": "uuid-claire-martin" +} +``` + +**Frontend** : Redirection automatique vers la page de connexion avec un message de succès. + +**État** : 🔴 À implémenter (Frontend + Backend) + +--- + +### Étape 8 : Connexion de l'utilisateur validé + +**Acteur** : Parent ou Assistante Maternelle (compte validé et mot de passe défini) +**Interface** : Page de connexion + +#### 7.1 Flux technique + +**Frontend → Backend** + +```typescript +// Frontend (Flutter) +// Exemple : Claire MARTIN se connecte après validation +POST /api/v1/auth/login +Headers: { + Content-Type: application/json +} +Body: { + "email": "claire.martin@ptits-pas.fr", + "password": "Test1234!" +} +``` + +**Backend → Database** + +```sql +-- Backend (NestJS) +SELECT + id, email, password, prenom, nom, role, statut +FROM utilisateurs +WHERE email = 'jean.martin@example.com'; + +-- Vérification : +-- 1. L'utilisateur existe +-- 2. Le mot de passe correspond (bcrypt.compare) +-- 3. Le statut est 'actif' (sinon erreur 403) +``` + +**Réponse - Succès** + +```json +{ + "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "user": { + "id": "uuid-claire-martin", + "email": "claire.martin@ptits-pas.fr", + "role": "parent", + "prenom": "Claire", + "nom": "MARTIN", + "statut": "actif" + } +} +``` + +**Réponse - Compte en attente** + +```json +{ + "statusCode": 403, + "message": "Votre compte est en attente de validation. Vous recevrez un email une fois votre compte validé.", + "error": "Forbidden" +} +``` + +**Réponse - Compte refusé** + +```json +{ + "statusCode": 403, + "message": "Votre compte a été refusé. Contactez contact@ptits-pas.fr pour plus d'informations.", + "error": "Forbidden" +} +``` + +#### 7.2 Redirection après connexion + +**Parent validé** → Dashboard parent (page simple : "Vous êtes connecté") +**Assistante Maternelle validée** → Dashboard AM (page simple : "Vous êtes connecté") + +**État** : ✅ Backend implémenté, Frontend à adapter + +--- + +## 📊 Diagrammes de séquence + +### Diagramme 1 : Création d'un gestionnaire + +```mermaid +sequenceDiagram + participant SA as Super Admin
(Frontend) + participant API as Backend API
(NestJS) + participant Auth as AuthGuard
+ RolesGuard + participant DB as PostgreSQL + + SA->>API: POST /gestionnaires
{nom, prenom, email, password} + API->>Auth: Vérifier token JWT + Auth->>Auth: Vérifier role = super_admin + Auth-->>API: ✅ Autorisé + + API->>API: Valider DTO (CreateGestionnaireDto) + API->>API: Hash password (bcrypt, 12 rounds) + + API->>DB: INSERT INTO utilisateurs
(role='gestionnaire', statut='actif') + DB-->>API: ✅ Utilisateur créé (id, email, ...) + + API-->>SA: 201 Created
{id, email, prenom, nom, role} + + SA->>SA: Afficher message de succès +``` + +--- + +### Diagramme 2 : Inscription d'un parent + +```mermaid +sequenceDiagram + participant P as Parent
(Frontend) + participant API as Backend API
(NestJS) + participant DB as PostgreSQL + + P->>API: POST /auth/register
{email, password, prenom, nom, role='parent'} + + API->>API: Valider DTO (RegisterDto) + + API->>DB: SELECT * FROM utilisateurs
WHERE email = ? + DB-->>API: ❌ Aucun résultat + + API->>API: Hash password (bcrypt, 12 rounds) + + API->>DB: BEGIN TRANSACTION + + API->>DB: INSERT INTO utilisateurs
(role='parent', statut='en_attente') + DB-->>API: ✅ id_utilisateur + + API->>DB: INSERT INTO parents
(id_utilisateur) + DB-->>API: ✅ Parent créé + + API->>DB: COMMIT + + API-->>P: 201 Created
{message, userId} + + P->>P: Afficher message:
"Inscription réussie.
Votre compte est en attente
de validation." +``` + +--- + +### Diagramme 3 : Validation d'un compte par le gestionnaire + +```mermaid +sequenceDiagram + participant G as Gestionnaire
(Frontend) + participant API as Backend API
(NestJS) + participant Auth as AuthGuard
+ RolesGuard + participant DB as PostgreSQL + participant Mail as Service Email
(Nodemailer) + participant SMTP as Serveur SMTP
(mail.ptits-pas.fr) + participant U as Utilisateur
(Email) + + G->>API: GET /parents?statut=en_attente + API->>Auth: Vérifier token + role gestionnaire + Auth-->>API: ✅ Autorisé + API->>DB: SELECT * FROM utilisateurs
WHERE role='parent' AND statut='en_attente' + DB-->>API: Liste des parents en attente + API-->>G: 200 OK
[{id, email, prenom, nom, ...}] + + G->>G: Afficher liste + G->>G: Clic sur "Valider" + + G->>API: PATCH /users/{id}/valider
{comment: "Dossier complet"} + API->>Auth: Vérifier token + role gestionnaire + Auth-->>API: ✅ Autorisé + + API->>DB: BEGIN TRANSACTION + API->>DB: UPDATE utilisateurs
SET statut='actif'
WHERE id=? + DB-->>API: ✅ 1 row updated + + API->>DB: INSERT INTO validations
(type, statut, valide_par, ...) + DB-->>API: ✅ Validation enregistrée + + API->>DB: COMMIT + + API->>Mail: sendAccountValidated(user) + Mail->>Mail: Générer HTML depuis template + Mail->>SMTP: SMTP SEND
From: no-reply@ptits-pas.fr
To: user.email
Subject: Compte validé + SMTP->>U: 📧 Email de validation + SMTP-->>Mail: ✅ Email envoyé + Mail-->>API: ✅ emailSent: true + + API-->>G: 200 OK
{message, userId, emailSent} + + G->>G: Retirer l'utilisateur de la liste
Afficher notification de succès + + U->>U: 📧 Reçoit l'email + U->>U: Clic sur "Se connecter" +``` + +--- + +### Diagramme 4 : Connexion d'un utilisateur validé + +```mermaid +sequenceDiagram + participant U as Utilisateur
(Frontend) + participant API as Backend API
(NestJS) + participant DB as PostgreSQL + + U->>API: POST /auth/login
{email, password} + + API->>DB: SELECT * FROM utilisateurs
WHERE email = ? + DB-->>API: Utilisateur trouvé + + API->>API: bcrypt.compare(password, hash) + API->>API: ✅ Mot de passe correct + + API->>API: Vérifier statut + + alt Statut = 'actif' + API->>API: Générer JWT
(access_token + refresh_token) + API-->>U: 200 OK
{access_token, refresh_token, user} + U->>U: Stocker tokens + U->>U: Redirection vers dashboard + else Statut = 'en_attente' + API-->>U: 403 Forbidden
"Compte en attente de validation" + U->>U: Afficher message d'attente + else Statut = 'suspendu' + API-->>U: 403 Forbidden
"Compte refusé" + U->>U: Afficher message + contact + end +``` + +--- + +## 🔧 Spécifications techniques + +### Architecture Backend + +**Framework** : NestJS 10.x +**Langage** : TypeScript 5.x +**ORM** : TypeORM 0.3.x +**Validation** : class-validator + class-transformer +**Authentication** : JWT (jsonwebtoken + @nestjs/jwt) +**Password Hashing** : bcrypt (12 rounds) +**Email** : Nodemailer (à installer) + +### Architecture Frontend + +**Framework** : Flutter 3.19.0 +**Langage** : Dart 3.x +**State Management** : Provider / Riverpod +**HTTP Client** : Dio / http +**Storage** : flutter_secure_storage (tokens) + +### Architecture Database + +**SGBD** : PostgreSQL 17 +**Schema** : Voir [DATABASE.md](./DATABASE.md) +**Tables concernées** : +- `utilisateurs` (table principale) +- `parents` (extension pour parents) +- `assistantes_maternelles` (extension pour AM) +- `validations` (historique des validations) + +### Configuration Email + +**Serveur SMTP** : `mail.ptits-pas.fr` +**Port** : 25 (STARTTLS) +**Expéditeur** : `no-reply@ptits-pas.fr` +**Authentification** : Aucune (serveur interne) + +--- + +## 📡 APIs utilisées + +### API 1 : Créer un gestionnaire + +**Endpoint** : `POST /api/v1/gestionnaires` +**Authentification** : Bearer Token (super_admin uniquement) +**Référence** : [API.md - Gestionnaires](./API.md#post-gestionnaires) + +**Request** : +```json +{ + "email": "lucas.moreau@ptits-pas.fr", + "password": "password", + "prenom": "Lucas", + "nom": "MOREAU" +} +``` + +**Response 201** : +```json +{ + "id": "uuid-lucas-moreau", + "email": "lucas.moreau@ptits-pas.fr", + "role": "gestionnaire", + "prenom": "Lucas", + "nom": "MOREAU" +} +``` + +**Errors** : +- `401 Unauthorized` : Token manquant ou invalide +- `403 Forbidden` : Rôle insuffisant (pas super_admin) +- `409 Conflict` : Email déjà utilisé +- `400 Bad Request` : Données invalides + +--- + +### API 2 : Inscription (parent ou AM) + +**Endpoint** : `POST /api/v1/auth/register` +**Authentification** : Aucune (route publique) +**Référence** : [API.md - Authentification](./API.md#post-authregister) + +**Request** : +```json +{ + "email": "claire.martin@ptits-pas.fr", + "password": "password", + "prenom": "Claire", + "nom": "MARTIN", + "telephone": "01 39 98 89 01", + "role": "parent" +} +``` + +**Response 201** : +```json +{ + "message": "Inscription réussie. Votre compte est en attente de validation.", + "userId": "uuid-claire-martin" +} +``` + +**Errors** : +- `409 Conflict` : Email déjà utilisé +- `400 Bad Request` : Données invalides + +--- + +### API 3 : Liste des parents en attente + +**Endpoint** : `GET /api/v1/parents` +**Authentification** : Bearer Token (gestionnaire ou super_admin) +**Référence** : [API.md - Parents](./API.md#get-parents) + +**Query Params** : +``` +?statut=en_attente +``` + +**Response 200** : +```json +[ + { + "id": "uuid", + "email": "parent@example.com", + "prenom": "Jean", + "nom": "Martin", + "telephone": "0601020304", + "statut": "en_attente", + "cree_le": "2025-11-20T14:30:00Z" + } +] +``` + +**Errors** : +- `401 Unauthorized` : Token manquant ou invalide +- `403 Forbidden` : Rôle insuffisant + +--- + +### API 4 : Liste des assistantes maternelles en attente + +**Endpoint** : `GET /api/v1/assistantes-maternelles` +**Authentification** : Bearer Token (gestionnaire ou super_admin) +**Référence** : [API.md - Assistantes Maternelles](./API.md#get-assistantes-maternelles) + +**Query Params** : +``` +?statut=en_attente +``` + +**Response 200** : +```json +[ + { + "id": "uuid", + "email": "am@example.com", + "prenom": "Marie", + "nom": "Leblanc", + "telephone": "0698765432", + "statut": "en_attente", + "cree_le": "2025-11-22T11:00:00Z" + } +] +``` + +--- + +### API 5 : Valider un compte + +**Endpoint** : `PATCH /api/v1/users/{id}/valider` +**Authentification** : Bearer Token (gestionnaire, administrateur ou super_admin) +**Référence** : [API.md - Utilisateurs](./API.md#patch-usersidvalider) + +**Request** : +```json +{ + "comment": "Dossier complet, compte validé" +} +``` + +**Response 200** : +```json +{ + "message": "Compte validé avec succès", + "userId": "uuid", + "emailSent": true +} +``` + +**Errors** : +- `401 Unauthorized` : Token manquant ou invalide +- `403 Forbidden` : Rôle insuffisant +- `404 Not Found` : Utilisateur introuvable +- `400 Bad Request` : ID invalide + +--- + +### API 6 : Refuser un compte + +**Endpoint** : `PATCH /api/v1/users/{id}/suspendre` +**Authentification** : Bearer Token (gestionnaire, administrateur ou super_admin) +**Référence** : [API.md - Utilisateurs](./API.md#patch-usersidsuspendre) + +**Request** : +```json +{ + "comment": "Informations incomplètes" +} +``` + +**Response 200** : +```json +{ + "message": "Compte suspendu", + "userId": "uuid", + "emailSent": true +} +``` + +--- + +### API 7 : Connexion + +**Endpoint** : `POST /api/v1/auth/login` +**Authentification** : Aucune (route publique) +**Référence** : [API.md - Authentification](./API.md#post-authlogin) + +**Request** : +```json +{ + "email": "parent@example.com", + "password": "MotDePasse123" +} +``` + +**Response 200** : +```json +{ + "access_token": "eyJhbGc...", + "refresh_token": "eyJhbGc...", + "user": { + "id": "uuid", + "email": "parent@example.com", + "role": "parent", + "prenom": "Jean", + "nom": "Martin", + "statut": "actif" + } +} +``` + +**Errors** : +- `401 Unauthorized` : Email ou mot de passe incorrect +- `403 Forbidden` : Compte en attente ou suspendu + +--- + +## 🗄️ Modèles de données + +### Utilisateur + +**Table** : `utilisateurs` +**Référence** : [DATABASE.md - Table utilisateurs](./DATABASE.md#1-utilisateurs) + +```typescript +interface Utilisateur { + id: UUID; // Identifiant unique + email: string; // Email (unique) + password: string; // Hash bcrypt + prenom: string; // Prénom + nom: string; // Nom + genre?: 'H' | 'F' | 'Autre'; // Genre (optionnel) + role: RoleType; // Rôle (voir enum ci-dessous) + statut: StatutUtilisateurType; // Statut (voir enum ci-dessous) + telephone?: string; // Téléphone + adresse?: string; // Adresse complète + photo_url?: string; // URL photo de profil + consentement_photo: boolean; // Consentement photo + date_consentement_photo?: Date; // Date du consentement + changement_mdp_obligatoire: boolean; // Force changement MDP + cree_le: Date; // Date de création + modifie_le: Date; // Dernière modification + ville?: string; // Ville + code_postal?: string; // Code postal + telephone?: string; // Téléphone + profession?: string; // Profession + situation_familiale?: string; // Situation familiale + date_naissance?: Date; // Date de naissance +} +``` + +**Enums** : + +```typescript +enum RoleType { + PARENT = 'parent', + GESTIONNAIRE = 'gestionnaire', + SUPER_ADMIN = 'super_admin', + ASSISTANTE_MATERNELLE = 'assistante_maternelle', + ADMINISTRATEUR = 'administrateur' +} + +enum StatutUtilisateurType { + EN_ATTENTE = 'en_attente', + ACTIF = 'actif', + SUSPENDU = 'suspendu' +} +``` + +--- + +### Parent + +**Table** : `parents` +**Référence** : [DATABASE.md - Table parents](./DATABASE.md#3-parents) + +```typescript +interface Parent { + id_utilisateur: UUID; // FK → utilisateurs(id) + id_co_parent?: UUID; // FK → utilisateurs(id) - Co-parent optionnel +} +``` + +**Relation** : 1:1 avec `utilisateurs` + +--- + +### Assistante Maternelle + +**Table** : `assistantes_maternelles` +**Référence** : [DATABASE.md - Table assistantes_maternelles](./DATABASE.md#2-assistantes_maternelles) + +```typescript +interface AssistanteMaternelle { + id_utilisateur: UUID; // FK → utilisateurs(id) + numero_agrement?: string; // Numéro d'agrément + nir_chiffre?: string; // NIR (15 caractères) + nb_max_enfants?: number; // Capacité maximale + biographie?: string; // Présentation + disponible: boolean; // Disponibilité + ville_residence?: string; // Ville + date_agrement?: Date; // Date d'agrément + annee_experience?: number; // Années d'expérience + specialite?: string; // Spécialités + place_disponible?: number; // Places disponibles +} +``` + +**Relation** : 1:1 avec `utilisateurs` + +--- + +### Validation + +**Table** : `validations` +**Référence** : [DATABASE.md - Table validations](./DATABASE.md#14-validations) + +```typescript +interface Validation { + id: UUID; // Identifiant unique + id_utilisateur: UUID; // FK → utilisateurs(id) + type: string; // Type de validation (ex: 'validation_compte') + statut: StatutValidationType; // Statut (voir enum ci-dessous) + cree_le: Date; // Date de demande + modifie_le: Date; // Dernière modification + valide_par?: UUID; // FK → utilisateurs(id) - Validateur + commentaire?: string; // Commentaire du validateur +} +``` + +**Enum** : + +```typescript +enum StatutValidationType { + EN_ATTENTE = 'en_attente', + VALIDE = 'valide', + REFUSE = 'refuse' +} +``` + +--- + +## 📧 Templates d'emails + +### Configuration Nodemailer + +**Installation** : +```bash +npm install nodemailer +npm install -D @types/nodemailer +``` + +**Configuration** (`backend/src/mail/mail.config.ts`) : + +```typescript +import { MailerOptions } from '@nestjs-modules/mailer'; +import { HandlebarsAdapter } from '@nestjs-modules/mailer/dist/adapters/handlebars.adapter'; + +export const mailConfig: MailerOptions = { + transport: { + host: 'mail.ptits-pas.fr', + port: 25, + secure: false, + tls: { + rejectUnauthorized: false + } + }, + defaults: { + from: '"P\'titsPas" ', + }, + template: { + dir: __dirname + '/templates', + adapter: new HandlebarsAdapter(), + options: { + strict: true, + }, + }, +}; +``` + +### Service Email + +**Fichier** : `backend/src/mail/mail.service.ts` + +```typescript +import { Injectable } from '@nestjs/common'; +import { MailerService } from '@nestjs-modules/mailer'; + +@Injectable() +export class MailService { + constructor(private mailerService: MailerService) {} + + async sendAccountValidated(user: { + email: string; + prenom: string; + nom: string; + role: string; + }): Promise { + try { + const roleLabel = user.role === 'parent' ? 'Parent' : 'Assistante Maternelle'; + + await this.mailerService.sendMail({ + to: user.email, + subject: 'Votre compte P\'titsPas a été validé ✅', + template: './account-validated', + context: { + prenom: user.prenom, + nom: user.nom, + email: user.email, + role_label: roleLabel, + }, + }); + + return true; + } catch (error) { + console.error('Error sending validation email:', error); + return false; + } + } + + async sendAccountRejected(user: { + email: string; + prenom: string; + nom: string; + role: string; + reason: string; + }): Promise { + try { + await this.mailerService.sendMail({ + to: user.email, + subject: 'Votre demande d\'inscription P\'titsPas', + template: './account-rejected', + context: { + prenom: user.prenom, + nom: user.nom, + reason: user.reason, + }, + }); + + return true; + } catch (error) { + console.error('Error sending rejection email:', error); + return false; + } + } +} +``` + +### Templates Handlebars + +**Fichier** : `backend/src/mail/templates/account-validated.hbs` + +Voir le template HTML dans la section [Étape 6.1](#61-email-de-validation) + +**Fichier** : `backend/src/mail/templates/account-rejected.hbs` + +Voir le template HTML dans la section [Étape 6.2](#62-email-de-refus) + +--- + +## ✅ Tests et validation + +### Tests unitaires (Backend) + +**Framework** : Jest + +**Fichiers de test** : +- `backend/src/routes/auth/auth.service.spec.ts` +- `backend/src/routes/user/user.service.spec.ts` +- `backend/src/mail/mail.service.spec.ts` + +**Scénarios de test** : + +1. **Création de gestionnaire** + - ✅ Création réussie avec données valides + - ❌ Échec si email déjà existant + - ❌ Échec si utilisateur non super_admin + - ❌ Échec si données invalides + +2. **Inscription** + - ✅ Inscription parent réussie + - ✅ Inscription AM réussie + - ✅ Création de l'entité métier (parent/AM) + - ❌ Échec si email déjà existant + - ❌ Échec si mot de passe trop faible + +3. **Validation de compte** + - ✅ Validation réussie + changement statut + - ✅ Email envoyé + - ✅ Enregistrement dans table validations + - ❌ Échec si utilisateur non gestionnaire + - ❌ Échec si utilisateur déjà validé + +4. **Refus de compte** + - ✅ Refus réussi + changement statut + - ✅ Email envoyé avec motif + - ✅ Enregistrement dans table validations + - ❌ Échec si commentaire manquant + +5. **Connexion** + - ✅ Connexion réussie si compte actif + - ❌ Échec si compte en attente + - ❌ Échec si compte suspendu + - ❌ Échec si mot de passe incorrect + +### Tests d'intégration (Backend) + +**Framework** : Supertest + Jest + +**Scénarios de test** : + +1. **Workflow complet - Parent** + ```typescript + it('should complete full parent workflow', async () => { + // 1. Super admin crée un gestionnaire + const gestionnaire = await createGestionnaire(); + + // 2. Parent s'inscrit + const parent = await registerParent(); + + // 3. Gestionnaire liste les parents en attente + const pendingParents = await getPendingParents(gestionnaire.token); + expect(pendingParents).toContainEqual(expect.objectContaining({ + email: parent.email, + statut: 'en_attente' + })); + + // 4. Gestionnaire valide le parent + await validateUser(gestionnaire.token, parent.id); + + // 5. Parent se connecte + const loginResponse = await loginUser(parent.email, parent.password); + expect(loginResponse.access_token).toBeDefined(); + }); + ``` + +2. **Workflow complet - Assistante Maternelle** + - Identique au workflow parent + +3. **Workflow refus** + ```typescript + it('should handle account rejection', async () => { + const gestionnaire = await createGestionnaire(); + const parent = await registerParent(); + + await rejectUser(gestionnaire.token, parent.id, 'Informations incomplètes'); + + const loginResponse = await loginUser(parent.email, parent.password); + expect(loginResponse.statusCode).toBe(403); + }); + ``` + +### Tests E2E (Frontend + Backend) + +**Framework** : Flutter Integration Tests + Mockito + +**Scénarios de test** : + +1. **Création gestionnaire (UI)** + - Remplir le formulaire + - Soumettre + - Vérifier le message de succès + - Vérifier que le gestionnaire peut se connecter + +2. **Inscription parent (UI)** + - Remplir le formulaire d'inscription + - Soumettre + - Vérifier le message "en attente de validation" + - Vérifier que la connexion est refusée + +3. **Dashboard gestionnaire (UI)** + - Se connecter en tant que gestionnaire + - Vérifier l'affichage des 2 onglets + - Vérifier l'affichage des comptes en attente + - Cliquer sur "Valider" + - Vérifier que le compte disparaît de la liste + +4. **Réception email (Manuel)** + - Vérifier la réception de l'email de validation + - Vérifier le contenu de l'email + - Cliquer sur le lien de connexion + - Vérifier la redirection vers l'application + +### Checklist de validation + +**Phase 1 : Backend** +- [ ] Endpoint création gestionnaire fonctionne +- [ ] Flag `changement_mdp_obligatoire` = TRUE pour gestionnaires/admins +- [ ] Endpoint inscription parent fonctionne (6 étapes) + - [ ] Création Parent 1 + - [ ] Création Parent 2 (optionnel) + - [ ] Création Enfant(s) + - [ ] Enregistrement présentation + - [ ] Enregistrement acceptation CGU avec horodatage + - [ ] Récapitulatif +- [ ] Endpoint inscription AM fonctionne (5 étapes) + - [ ] Panneau 1 : Identité + Photo + Consentement photo + - [ ] Panneau 2 : NIR + Agrément + Infos pro + - [ ] Présentation + - [ ] Acceptation CGU + - [ ] Récapitulatif +- [ ] Entité métier créée lors de l'inscription +- [ ] Endpoint validation fonctionne +- [ ] Endpoint refus fonctionne +- [ ] Email de validation envoyé +- [ ] Email de refus envoyé +- [ ] SMS de validation envoyé (optionnel) +- [ ] SMS de refus envoyé (optionnel) +- [ ] Connexion bloquée si compte en attente +- [ ] Connexion autorisée si compte actif +- [ ] Changement de mot de passe forcé à la première connexion (gestionnaires/admins) + +**Phase 2 : Frontend** +- [ ] Écran création gestionnaire implémenté +- [ ] Formulaire d'inscription parent implémenté (6 étapes) + - [ ] Étape 1 : Informations Parent 1 + - [ ] Étape 2 : Informations Parent 2 (optionnel) + - [ ] Étape 3 : Informations Enfant(s) avec upload photo + - [ ] Étape 4 : Présentation du dossier + - [ ] Étape 5 : Acceptation CGU (liens PDF) + - [ ] Étape 6 : Récapitulatif +- [ ] Formulaire d'inscription AM implémenté (5 étapes) + - [ ] Panneau 1 : Identité + Upload photo + Consentement + - [ ] Panneau 2 : NIR + Date/lieu naissance + Agrément + - [ ] Présentation + - [ ] Acceptation CGU (liens PDF) + - [ ] Récapitulatif +- [ ] Dashboard gestionnaire avec 2 onglets +- [ ] Liste des parents en attente affichée (avec enfants) +- [ ] Liste des AM en attente affichée (avec NIR masqué) +- [ ] Boutons Valider/Refuser fonctionnels +- [ ] Messages de feedback utilisateur +- [ ] Gestion des erreurs +- [ ] Écran de changement de mot de passe forcé (première connexion) + +**Phase 3 : Intégration** +- [ ] Workflow complet parent testé +- [ ] Workflow complet AM testé +- [ ] Workflow refus testé +- [ ] Emails reçus et corrects +- [ ] Connexion après validation OK +- [ ] Redirection vers dashboard OK + +--- + +## 📚 Références + +### Documentation interne + +- [API.md](./API.md) - Documentation complète des endpoints +- [DATABASE.md](./DATABASE.md) - Schéma de la base de données +- [AUDIT.md](./AUDIT.md) - Audit du projet YNOV +- [README-ARCHITECTURE.md](./README-ARCHITECTURE.md) - Architecture du projet +- [README-DEPLOYMENT.md](./README-DEPLOYMENT.md) - Guide de déploiement + +### Documentation externe + +- [NestJS Documentation](https://docs.nestjs.com/) +- [TypeORM Documentation](https://typeorm.io/) +- [Flutter Documentation](https://flutter.dev/docs) +- [PostgreSQL Documentation](https://www.postgresql.org/docs/) +- [Nodemailer Documentation](https://nodemailer.com/) + +### Cahier des Charges + +**Section 3.1** : Gestion des utilisateurs +**Section 3.2** : Processus de validation +**Section 4.5** : Notifications email + +--- + +## 📋 Résumé des modifications (Conformité CDC) + +Ce document a été mis à jour pour être conforme au **Cahier des Charges v1.3** (Section 3). + +### Principales modifications + +#### Inscription Parent +- ✅ Passage de 1 formulaire simple à **6 étapes complètes** +- ✅ Ajout de la gestion du **Parent 2** (co-parent) +- ✅ Ajout de la création des **enfants** lors de l'inscription +- ✅ Ajout du champ **Présentation du dossier** +- ✅ Ajout de l'**Acceptation des CGU** avec horodatage +- ✅ Ajout d'un **Récapitulatif** avant validation + +#### Inscription Assistante Maternelle +- ✅ Passage de 1 formulaire simple à **5 étapes avec 2 panneaux** +- ✅ Ajout du **NIR** (Numéro de Sécurité sociale) - **OBLIGATOIRE** +- ✅ Ajout de la **Photo obligatoire** (si option activée) +- ✅ Ajout du **Consentement photo** avec horodatage (RGPD) +- ✅ Ajout de la **Date et lieu de naissance** +- ✅ Ajout de l'**Acceptation des CGU** avec horodatage +- ✅ Ajout d'un **Récapitulatif** avant validation + +#### Création Gestionnaire/Administrateur +- ✅ Ajout du **Changement de mot de passe obligatoire** à la première connexion + +#### Notifications +- ✅ Ajout de la possibilité d'envoi par **SMS** en plus de l'email + +### Champs Base de Données à Ajouter + +```sql +-- Table utilisateurs +ALTER TABLE utilisateurs ADD COLUMN ville_naissance VARCHAR(150); +ALTER TABLE utilisateurs ADD COLUMN pays_naissance VARCHAR(100); +ALTER TABLE utilisateurs ADD COLUMN date_acceptation_cgu TIMESTAMPTZ; + +-- Table assistantes_maternelles +-- Le champ nir_chiffre existe déjà mais doit être rendu OBLIGATOIRE +ALTER TABLE assistantes_maternelles ALTER COLUMN nir_chiffre SET NOT NULL; + +-- Table parents ou nouvelle table +-- Option 1 : Ajouter à la table parents +ALTER TABLE parents ADD COLUMN presentation_dossier TEXT; + +-- Option 2 : Créer une table dédiée +CREATE TABLE dossiers_inscription ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE, + presentation TEXT, + cree_le TIMESTAMPTZ DEFAULT now() +); +``` + +--- + +**Dernière mise à jour** : 24 Novembre 2025 +**Version** : 1.0 +**Statut** : ✅ Document validé - Conforme CDC v1.3 + diff --git a/docs/AUDIT.md b/docs/90_AUDIT.md similarity index 100% rename from docs/AUDIT.md rename to docs/90_AUDIT.md diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 0d05d77..0000000 --- a/docs/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# 📚 Documentation PtitsPas App - -Bienvenue dans la documentation complète de l'application PtitsPas. - -## 📖 Table des matières - -### Architecture & Infrastructure -- [**Architecture**](./README-ARCHITECTURE.md) - Vue d'ensemble de l'architecture mono-repo et multi-conteneurs -- [**Déploiement**](./README-DEPLOYMENT.md) - Guide complet de déploiement et configuration CI/CD - -### Développement -- [**API Documentation**](./API.md) - Documentation complète des endpoints REST -- [**Database Schema**](./DATABASE.md) - Schéma de la base de données et modèles -- [**Workflow de développement**](./WORKFLOW.md) - Process Git, branches et déploiement - -### Administration -- [**Guide d'administration**](./ADMIN.md) - Gestion des utilisateurs, accès PgAdmin, logs -- [**Troubleshooting**](./TROUBLESHOOTING.md) - Résolution des problèmes courants - -### Audit & Analyse -- [**Audit du projet YNOV**](./AUDIT.md) - Analyse complète du code étudiant et fonctionnalités - -### Frontend -- [**Frontend Flutter**](./FRONTEND.md) - Structure de l'application mobile/web - -## 🚀 Quick Start - -```bash -# Cloner le projet -git clone ssh://gitea-jmartin/jmartin/app.git ptitspas-app - -# Lancer l'environnement de développement -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 -``` - -## 🔗 Liens utiles - -- **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 : Novembre 2025 - diff --git a/docs/test-data/README.md b/docs/test-data/README.md new file mode 100644 index 0000000..7908a9e --- /dev/null +++ b/docs/test-data/README.md @@ -0,0 +1,279 @@ +# 📊 Données de Test + +Ce dossier contient les jeux de données de test pour l'application P'titsPas. + +## 📁 Fichiers + +### `utilisateurs-test.csv` + +Fichier CSV contenant les utilisateurs de test pour valider le workflow de création de compte. + +**Format** : CSV avec en-tête +**Encodage** : UTF-8 +**Séparateur** : Virgule (`,`) + +--- + +## 👥 Utilisateurs de test + +### 1. Administrateur + +| Nom | Prénom | Email | Téléphone | Mobile | +|-----|--------|-------|-----------|--------| +| BERNARD | Sophie | sophie.bernard@ptits-pas.fr | 01 39 98 45 67 | 06 78 12 34 56 | + +**Rôle** : `administrateur` +**Notes** : Responsable direction générale - Ancienneté 8 ans + +--- + +### 2. Gestionnaire + +| Nom | Prénom | Email | Téléphone | Mobile | +|-----|--------|-------|-----------|--------| +| MOREAU | Lucas | lucas.moreau@ptits-pas.fr | 01 39 98 56 78 | 06 87 23 45 67 | + +**Rôle** : `gestionnaire` +**Notes** : Service gestion administrative - Ancienneté 3 ans + +--- + +### 3. Assistantes Maternelles (2) + +#### Marie DUBOIS + +| Nom | Prénom | Email | Téléphone | Mobile | +|-----|--------|-------|-----------|--------| +| DUBOIS | Marie | marie.dubois@ptits-pas.fr | 01 39 98 67 89 | 06 96 34 56 78 | + +**Rôle** : `assistante_maternelle` +**Spécialité** : Bébés 0-18 mois +**Agrément** : 4 enfants +**Places disponibles** : 2 + +#### Fatima EL MANSOURI + +| Nom | Prénom | Email | Téléphone | Mobile | +|-----|--------|-------|-----------|--------| +| EL MANSOURI | Fatima | fatima.elmansouri@ptits-pas.fr | 01 39 98 78 90 | 06 75 45 67 89 | + +**Rôle** : `assistante_maternelle` +**Spécialité** : 1-3 ans +**Agrément** : 3 enfants +**Places disponibles** : 1 + +--- + +### 4. Parents (5) + +#### Couple MARTIN (avec triplés) + +**Claire MARTIN** + +| Nom | Prénom | Email | Téléphone | Mobile | +|-----|--------|-------|-----------|--------| +| MARTIN | Claire | claire.martin@ptits-pas.fr | 01 39 98 89 01 | 06 89 56 78 90 | + +**Profession** : Infirmière +**Situation** : Mariée - triplés + +**Thomas MARTIN** + +| Nom | Prénom | Email | Téléphone | Mobile | +|-----|--------|-------|-----------|--------| +| MARTIN | Thomas | thomas.martin@ptits-pas.fr | 01 39 98 89 01 | 06 78 45 67 89 | + +**Profession** : Ingénieur +**Situation** : Marié - triplés + +**Enfants** : +- Emma MARTIN (née le 15/02/2023, 8 mois) +- Noah MARTIN (né le 15/02/2023, 8 mois) +- Léa MARTIN (née le 15/02/2023, 8 mois) + +**Notes** : Couple avec triplés - Besoin garde multiple + +--- + +#### Couple divorcé DURAND/ROUSSEAU + +**Amélie DURAND** + +| Nom | Prénom | Email | Téléphone | Mobile | +|-----|--------|-------|-----------|--------| +| DURAND | Amélie | amelie.durand@ptits-pas.fr | 01 39 98 90 12 | 06 67 78 89 90 | + +**Profession** : Comptable +**Situation** : Divorcée + +**Julien ROUSSEAU** + +| Nom | Prénom | Email | Téléphone | Mobile | +|-----|--------|-------|-----------|--------| +| ROUSSEAU | Julien | julien.rousseau@ptits-pas.fr | 01 39 98 01 23 | 06 56 67 78 89 | + +**Profession** : Commercial +**Situation** : Divorcé + +**Enfants** (en commun) : +- Chloé ROUSSEAU (née le 20/04/2022, 2 ans) +- Hugo ROUSSEAU (né le 10/03/2024, 6 mois) + +**Notes** : +- Amélie : Garde principale des enfants +- Julien : Garde alternée 1 weekend/2 + +--- + +#### Père célibataire + +**David LECOMTE** + +| Nom | Prénom | Email | Téléphone | Mobile | +|-----|--------|-------|-----------|--------| +| LECOMTE | David | david.lecomte@ptits-pas.fr | 01 39 98 12 34 | 06 45 56 67 78 | + +**Profession** : Développeur web +**Situation** : Père célibataire + +**Enfants** : +- Maxime LECOMTE (né le 15/04/2023, 1 an 5 mois) + +**Notes** : Garde complète - Contact urgence : grand-mère paternelle + +--- + +## 🧪 Utilisation pour les tests + +### Scénarios de test + +#### Scénario 1 : Création de gestionnaire + +```typescript +// Créer Lucas MOREAU en tant que gestionnaire +POST /api/v1/gestionnaires +{ + "email": "lucas.moreau@ptits-pas.fr", + "password": "Test1234!", + "prenom": "Lucas", + "nom": "MOREAU" +} +``` + +#### Scénario 2 : Inscription assistante maternelle + +```typescript +// Marie DUBOIS s'inscrit +POST /api/v1/auth/register +{ + "email": "marie.dubois@ptits-pas.fr", + "password": "Test1234!", + "prenom": "Marie", + "nom": "DUBOIS", + "telephone": "01 39 98 67 89", + "mobile": "06 96 34 56 78", + "role": "assistante_maternelle" +} +``` + +#### Scénario 3 : Inscription parent + +```typescript +// Claire MARTIN s'inscrit +POST /api/v1/auth/register +{ + "email": "claire.martin@ptits-pas.fr", + "password": "Test1234!", + "prenom": "Claire", + "nom": "MARTIN", + "telephone": "01 39 98 89 01", + "mobile": "06 89 56 78 90", + "role": "parent" +} +``` + +#### Scénario 4 : Validation par gestionnaire + +```typescript +// Lucas MOREAU valide Marie DUBOIS +PATCH /api/v1/users/{marie_id}/valider +Authorization: Bearer {lucas_token} +{ + "comment": "Agrément vérifié - Profil complet" +} +``` + +#### Scénario 5 : Cas complexe - Triplés + +Test du workflow complet avec le couple MARTIN ayant des triplés : +1. Claire et Thomas s'inscrivent séparément +2. Chacun déclare les 3 enfants +3. Validation par le gestionnaire +4. Recherche d'assistante maternelle avec capacité pour 3 enfants + +#### Scénario 6 : Cas complexe - Garde alternée + +Test du workflow avec le couple divorcé DURAND/ROUSSEAU : +1. Amélie et Julien s'inscrivent séparément +2. Chacun déclare les 2 enfants en commun +3. Gestion de la garde alternée +4. Coordination entre les 2 parents + +--- + +## 📧 Emails de test + +Tous les emails de test utilisent le domaine `@ptits-pas.fr`. + +**Pour les tests en local**, vous pouvez utiliser : +- [Mailtrap](https://mailtrap.io/) pour capturer les emails +- [MailHog](https://github.com/mailhog/MailHog) pour un serveur SMTP local +- [Thunderbird](https://www.thunderbird.net/) pour consulter les emails + +**Configuration Thunderbird** : +- Serveur IMAP : `mail.ptits-pas.fr` +- Port : 993 (SSL/TLS) +- Serveur SMTP : `mail.ptits-pas.fr` +- Port : 587 (STARTTLS) + +--- + +## 🔐 Mots de passe de test + +**Par défaut pour tous les utilisateurs de test** : `password` + +**Note** : Ce mot de passe simple est utilisé uniquement pour les tests. En production, les règles suivantes s'appliquent : +- Minimum 8 caractères +- Au moins 1 majuscule +- Au moins 1 chiffre +- Au moins 1 caractère spécial (recommandé) + +--- + +## 🗄️ Script d'import + +Un script d'import sera créé pour charger automatiquement ces données de test en base. + +**Fichier** : `backend/src/scripts/seed-test-data.ts` + +**Utilisation** : +```bash +cd backend +npm run seed:test +``` + +--- + +## ⚠️ Avertissement + +**Ces données sont uniquement pour les tests !** + +- Ne jamais utiliser en production +- Les emails sont fictifs mais utilisent le domaine réel `@ptits-pas.fr` +- Les numéros de téléphone sont fictifs +- Les adresses sont à Bezons (95870) mais peuvent être fictives + +--- + +**Dernière mise à jour** : 24 Novembre 2025 + diff --git a/docs/test-data/utilisateurs-test.csv b/docs/test-data/utilisateurs-test.csv new file mode 100644 index 0000000..c93a0ae --- /dev/null +++ b/docs/test-data/utilisateurs-test.csv @@ -0,0 +1,11 @@ +Type,Nom,Prenom,Email,Telephone,Mobile,Date_naissance,Adresse,Code_postal,Ville,Profession,Situation_familiale,Enfant_1_nom,Enfant_1_naissance,Enfant_1_age,Enfant_2_nom,Enfant_2_naissance,Enfant_2_age,Enfant_3_nom,Enfant_3_naissance,Enfant_3_age,Notes_particulieres +ADMINISTRATEUR,BERNARD,Sophie,sophie.bernard@ptits-pas.fr,01 39 98 45 67,06 78 12 34 56,15/03/1978,"12 Avenue Gabriel Péri",95870,Bezons,Responsable administrative,Mariée,,,,,,,,,,Responsable direction générale - Ancienneté 8 ans +GESTIONNAIRE,MOREAU,Lucas,lucas.moreau@ptits-pas.fr,01 39 98 56 78,06 87 23 45 67,22/09/1985,"8 Rue Jean Jaurès",95870,Bezons,Gestionnaire des placements,Célibataire,,,,,,,,,,Service gestion administrative - Ancienneté 3 ans +ASSISTANTE_MATERNELLE,DUBOIS,Marie,marie.dubois@ptits-pas.fr,01 39 98 67 89,06 96 34 56 78,08/06/1980,"25 Rue de la République",95870,Bezons,Assistante maternelle,Mariée,,,,,,,,,,Agrément 4 enfants - Spécialité bébés 0-18 mois - 2 places disponibles +ASSISTANTE_MATERNELLE,EL MANSOURI,Fatima,fatima.elmansouri@ptits-pas.fr,01 39 98 78 90,06 75 45 67 89,12/11/1975,"17 Boulevard Aristide Briand",95870,Bezons,Assistante maternelle,Mariée,,,,,,,,,,Agrément 3 enfants - Spécialité 1-3 ans - 1 place disponible +PARENT,MARTIN,Claire,claire.martin@ptits-pas.fr,01 39 98 89 01,06 89 56 78 90,03/04/1990,"5 Avenue du Général de Gaulle",95870,Bezons,Infirmière,Mariée - triplés,Emma MARTIN,15/02/2023,8 mois,Noah MARTIN,15/02/2023,8 mois,Léa MARTIN,15/02/2023,8 mois,Couple avec triplés - Besoin garde multiple +PARENT,MARTIN,Thomas,thomas.martin@ptits-pas.fr,01 39 98 89 01,06 78 45 67 89,18/07/1988,"5 Avenue du Général de Gaulle",95870,Bezons,Ingénieur,Marié - triplés,Emma MARTIN,15/02/2023,8 mois,Noah MARTIN,15/02/2023,8 mois,Léa MARTIN,15/02/2023,8 mois,Couple avec triplés - Besoin garde multiple +PARENT,DURAND,Amélie,amelie.durand@ptits-pas.fr,01 39 98 90 12,06 67 78 89 90,14/12/1987,"23 Rue Victor Hugo",95870,Bezons,Comptable,Divorcée,Chloé ROUSSEAU,20/04/2022,2 ans,Hugo ROUSSEAU,10/03/2024,6 mois,,,,"Garde principale des enfants - Ex-conjoint : Julien ROUSSEAU - Nom de jeune fille : DURAND" +PARENT,ROUSSEAU,Julien,julien.rousseau@ptits-pas.fr,01 39 98 01 23,06 56 67 78 89,29/08/1985,"14 Rue Pasteur",95870,Bezons,Commercial,Divorcé,Chloé ROUSSEAU,20/04/2022,2 ans,Hugo ROUSSEAU,10/03/2024,6 mois,,,,"Garde alternée 1 weekend/2 - Ex-conjointe : Amélie DURAND (née DURAND)" +PARENT,LECOMTE,David,david.lecomte@ptits-pas.fr,01 39 98 12 34,06 45 56 67 78,07/10/1992,"31 Rue Émile Zola",95870,Bezons,Développeur web,Père célibataire,Maxime LECOMTE,15/04/2023,1 an 5 mois,,,,,,"Garde complète - Contact urgence : grand-mère paternelle" + diff --git a/docs/test-data/utilisateurs-test.html b/docs/test-data/utilisateurs-test.html new file mode 100644 index 0000000..13231a0 --- /dev/null +++ b/docs/test-data/utilisateurs-test.html @@ -0,0 +1,359 @@ + + + + + + Fiches d'identification - Utilisateurs de test + + + +
+

🏡 Fiches d'identification - Utilisateurs de test

+

Système de gestion des assistantes maternelles - Bezons (95870)

+

Mot de passe universel : password

+
+ + +
+
+
Sophie BERNARD
+
ADMINISTRATEUR
+
+
+
+
Informations personnelles
+

Email : sophie.bernard@ptits-pas.fr

+

Téléphone : 01 39 98 45 67

+

Téléphone mobile : 06 78 12 34 56

+

Date de naissance : 15/03/1978

+
+
+
Adresse
+

12 Avenue Gabriel Péri
+ 95870 Bezons
+ France

+
+
+
Fonction
+

Poste : Responsable administrative

+

Service : Direction générale

+

Ancienneté : 8 ans

+
+
+
+ + +
+
+
Lucas MOREAU
+
GESTIONNAIRE
+
+
+
+
Informations personnelles
+

Email : lucas.moreau@ptits-pas.fr

+

Téléphone : 01 39 98 56 78

+

Téléphone mobile : 06 87 23 45 67

+

Date de naissance : 22/09/1985

+
+
+
Adresse
+

8 Rue Jean Jaurès
+ 95870 Bezons
+ France

+
+
+
Fonction
+

Poste : Gestionnaire des placements

+

Service : Gestion administrative

+

Ancienneté : 3 ans

+
+
+
+ + +
+
+
Marie DUBOIS
+
ASSISTANTE MATERNELLE
+
+
+
+
Informations personnelles
+

Email : marie.dubois@ptits-pas.fr

+

Téléphone : 01 39 98 67 89

+

Téléphone mobile : 06 96 34 56 78

+

Date de naissance : 08/06/1980

+
+
+
Adresse
+

25 Rue de la République
+ 95870 Bezons
+ France

+
+
+
Profession
+

Agrément : 4 enfants max

+

Expérience : 12 ans

+

Spécialité : Bébés 0-18 mois

+

Places disponibles : 2

+
+
+
+ + +
+
+
Fatima EL MANSOURI
+
ASSISTANTE MATERNELLE
+
+
+
+
Informations personnelles
+

Email : fatima.elmansouri@ptits-pas.fr

+

Téléphone : 01 39 98 78 90

+

Téléphone mobile : 06 75 45 67 89

+

Date de naissance : 12/11/1975

+
+
+
Adresse
+

17 Boulevard Aristide Briand
+ 95870 Bezons
+ France

+
+
+
Profession
+

Agrément : 3 enfants max

+

Expérience : 15 ans

+

Spécialité : Enfants 1-3 ans

+

Places disponibles : 1

+
+
+
+ + +
+
+
Claire & Thomas MARTIN
+
PARENTS - TRIPLÉS
+
+
+
+
Informations Claire
+

Email : claire.martin@ptits-pas.fr

+

Téléphone : 06 89 56 78 90

+

Date de naissance : 03/04/1990

+

Profession : Infirmière

+
+
+
Informations Thomas
+

Email : thomas.martin@ptits-pas.fr

+

Téléphone : 06 78 45 67 89

+

Date de naissance : 18/07/1988

+

Profession : Ingénieur

+
+
+
Adresse commune
+

5 Avenue du Général de Gaulle
+ 95870 Bezons
+ France
+ Tél. fixe : 01 39 98 89 01

+
+
+
+
👶 Leurs enfants (Triplés)
+
Emma MARTIN - Née le 15/02/2023 (8 mois)
+
Noah MARTIN - Né le 15/02/2023 (8 mois)
+
Léa MARTIN - Née le 15/02/2023 (8 mois)
+
+
+ + +
+
+
Amélie DURAND
+
PARENT - MÈRE
+
+
+
+
Informations personnelles
+

Email : amelie.durand@ptits-pas.fr

+

Téléphone : 06 67 78 89 90

+

Date de naissance : 14/12/1987

+

Profession : Comptable

+

Situation : Divorcée (nom de jeune fille : DURAND)

+
+
+
Adresse
+

23 Rue Victor Hugo
+ 95870 Bezons
+ France
+ Tél. fixe : 01 39 98 90 12

+
+
+
+
👶 Ses enfants
+
Chloé ROUSSEAU - Née le 20/04/2022 (2 ans)
+
Hugo ROUSSEAU - Né le 10/03/2024 (6 mois)
+
+
+ +
+
+
Julien ROUSSEAU
+
PARENT - PÈRE
+
+
+
+
Informations personnelles
+

Email : julien.rousseau@ptits-pas.fr

+

Téléphone : 06 56 67 78 89

+

Date de naissance : 29/08/1985

+

Profession : Commercial

+

Situation : Divorcé

+
+
+
Adresse
+

14 Rue Pasteur
+ 95870 Bezons
+ France
+ Tél. fixe : 01 39 98 01 23

+
+
+
+
👶 Ses enfants (garde alternée)
+
Chloé ROUSSEAU - Née le 20/04/2022 (2 ans) - 1 weekend/2
+
Hugo ROUSSEAU - Né le 10/03/2024 (6 mois) - 1 weekend/2
+

Ex-conjointe : Amélie DURAND (née DURAND)

+
+
+ + +
+
+
David LECOMTE
+
PARENT - PÈRE SEUL
+
+
+
+
Informations personnelles
+

Email : david.lecomte@ptits-pas.fr

+

Téléphone : 06 45 56 67 78

+

Date de naissance : 07/10/1992

+

Profession : Développeur web

+

Situation : Père célibataire

+
+
+
Adresse
+

31 Rue Émile Zola
+ 95870 Bezons
+ France
+ Tél. fixe : 01 39 98 12 34

+
+
+
Situation familiale
+

Garde : Complète

+

Contact d'urgence : Grand-mère paternelle

+

Besoin : Garde temps plein

+
+
+
+
👶 Son enfant
+
Maxime LECOMTE - Né le 15/04/2023 (1 an et 5 mois)
+
+
+ +
+ 🔐 Tous les comptes utilisent le mot de passe : password
+ 📧 Accès webmail : mail.ptits-pas.fr +
+ + + +