# 📋 DĂ©cisions Projet - P'titsPas **Version** : 1.0 **Date** : 25 Novembre 2025 **Auteur** : Équipe PtitsPas --- ## 🎯 Objectif de ce document Ce document trace toutes les **dĂ©cisions importantes** prises lors de la conception du projet P'titsPas. Il sert de rĂ©fĂ©rence pour comprendre les choix techniques et fonctionnels. --- ## 📊 DĂ©cisions Architecture ### 1. Mono-repo vs Multi-repo **DĂ©cision** : ✅ **Mono-repo** **Justification** : - Code cohĂ©rent dans un seul dĂ©pĂŽt Git - Commits atomiques (frontend + backend + BDD en mĂȘme temps) - CI/CD simplifiĂ© (un seul webhook) - Facilite le travail collaboratif **Structure** : ``` ptitspas-app/ ├── frontend/ # Application Flutter ├── backend/ # API NestJS ├── database/ # Migrations SQL/Prisma ├── api-contracts/ # Contrats OpenAPI + Prisma ├── docs/ # Documentation └── docker-compose.yml # Orchestration ``` --- ### 2. DĂ©ploiement On-Premise **DĂ©cision** : ✅ **Application on-premise avec configuration dynamique** **Justification** : - Chaque collectivitĂ© a son infrastructure (SMTP, domaines, ports) - Autonomie totale (pas de dĂ©pendance Ă  notre infra) - ConformitĂ© aux politiques IT locales - SĂ©curitĂ© (donnĂ©es restent dans le SI de la collectivitĂ©) **Solution technique** : - Table `configuration` en BDD (clĂ©/valeur) - Setup Wizard Ă  la premiĂšre connexion - Configuration SMTP dynamique - Personnalisation (nom app, logo, URL) **RĂ©fĂ©rence** : [21_CONFIGURATION-SYSTEME.md](./21_CONFIGURATION-SYSTEME.md) --- ### 3. Gestion des fichiers uploadĂ©s **DĂ©cision** : ✅ **SystĂšme de fichiers local avec volume Docker** **Justification** : - SimplicitĂ© (pas de S3/MinIO pour on-premise) - Performance (accĂšs direct au disque) - CoĂ»t (pas de service externe) **Solution technique** : - Stockage dans `/uploads/photos/` - Volume Docker persistant - Service Upload avec Multer - Validation taille (depuis config) **Alternatives rejetĂ©es** : - ❌ Base de donnĂ©es (BYTEA) : Mauvaise performance - ❌ S3/MinIO : Overkill pour on-premise --- ### 4. Documents lĂ©gaux (CGU/Privacy) **DĂ©cision** : ✅ **Versioning automatique avec traçabilitĂ© RGPD** **Justification** : - ConformitĂ© juridique (preuve d'acceptation) - FlexibilitĂ© (chaque collectivitĂ© adapte ses CGU) - TraçabilitĂ© (hash SHA-256, IP, User-Agent) - SĂ©curitĂ© juridique (pas de retour en arriĂšre) **Solution technique** : - Table `documents_legaux` (versioning auto-incrĂ©mentĂ©) - Table `acceptations_documents` (traçabilitĂ© RGPD) - Upload PDF par l'admin - Activation manuelle aprĂšs prĂ©visualisation - Documents gĂ©nĂ©riques v1 fournis par dĂ©faut **RĂ©fĂ©rence** : [22_DOCUMENTS-LEGAUX.md](./22_DOCUMENTS-LEGAUX.md) --- ## 🔧 DĂ©cisions Fonctionnelles ### 5. Workflow inscription sans mot de passe **DĂ©cision** : ✅ **Pas de mot de passe lors de l'inscription, lien email aprĂšs validation** **Justification** : - Simplifie l'inscription (moins de friction) - AdaptĂ© aux parents sĂ©parĂ©s/divorcĂ©s (communication difficile) - SĂ©curitĂ© (token UUID avec expiration) - Validation gestionnaire avant activation **Workflow** : 1. Parent/AM s'inscrit (sans MDP) 2. Gestionnaire valide 3. Email envoyĂ© avec lien crĂ©ation MDP (valable 7 jours) 4. Utilisateur crĂ©e son MDP 5. Compte activĂ© **RĂ©fĂ©rence** : [20_WORKFLOW-CREATION-COMPTE.md](./20_WORKFLOW-CREATION-COMPTE.md) --- ### 6. Genre enfant obligatoire (H/F) **DĂ©cision** : ✅ **Genre obligatoire (H/F uniquement)** **Justification** : - Contexte mĂ©tier : Enfants Ă  garder (pas de genre neutre) - ConformitĂ© CDC - SimplicitĂ© **ImplĂ©mentation** : - Champ `genre` ENUM('H', 'F') NOT NULL dans table `enfants` --- ### 7. Suppression champs tĂ©lĂ©phone **DĂ©cision** : ✅ **Un seul champ "TĂ©lĂ©phone" (mobile privilĂ©giĂ©)** **Justification** : - Simplification (plus besoin de "Mobile" et "TĂ©lĂ©phone fixe") - RĂ©alitĂ© terrain : Tout le monde a un mobile - Note dans l'interface : "(mobile privilĂ©giĂ©)" **ImplĂ©mentation** : - Supprimer `mobile` et `telephone_fixe` - Garder uniquement `telephone` --- ### 8. NIR obligatoire pour Assistantes Maternelles **DĂ©cision** : ✅ **NIR (NumĂ©ro de SĂ©curitĂ© sociale) obligatoire** **Justification** : - ConformitĂ© CDC - NĂ©cessaire pour gĂ©nĂ©ration automatique du contrat - Stockage sĂ©curisĂ© (chiffrement recommandĂ©) **ImplĂ©mentation** : - Champ `nir_chiffre` VARCHAR(15) NOT NULL dans `assistantes_maternelles` - Validation : 15 chiffres exactement - Affichage masquĂ© dans l'interface (XXX XX XX XX XXX 123) --- ### 9. Suppression notifications SMS **DĂ©cision** : ✅ **Supprimer les notifications SMS, garder uniquement Email** **Justification** : - Pas de plus-value identifiĂ©e - CoĂ»t supplĂ©mentaire (service SMS) - ComplexitĂ© (intĂ©gration Twilio/OVH) - Email suffit largement **Action** : - Amender le CDC v1.4 - Remplacer "Email OU SMS" par "Email" - Supprimer toute mention de SMS **RĂ©fĂ©rence** : Ticket #57 --- ## đŸš« DĂ©cisions Phase 2 (reportĂ©es) ### 10. Gestion erreurs SMTP (renvoyer email) **DĂ©cision** : ⏞ **Phase 2 ou cas par cas** **Justification** : - Pas prioritaire pour MVP - Downtime SMTP rare (< 24h) - RecrĂ©ation dossier acceptable en phase de test - Peut ĂȘtre ajoutĂ© plus tard si besoin terrain --- ### 11. Sauvegarde & Restauration automatique **DĂ©cision** : ⏞ **Phase finale (quand tout fonctionne)** **Justification** : - Pas bloquant pour dĂ©veloppement - NĂ©cessite application stable - Script `pg_dump` simple Ă  ajouter - Documentation pour admins sys **À faire** : - Script `backup.sh` avec cron - Guide sauvegarde/restauration - Test restauration --- ### 12. RGPD avancĂ© (droit Ă  l'oubli, export donnĂ©es) **DĂ©cision** : ⏞ **Phase 2** **Justification** : - ConformitĂ© de base assurĂ©e (consentement, traçabilitĂ©) - Droit Ă  l'oubli : Peu de demandes en phase test - Export donnĂ©es : Peut ĂȘtre fait manuellement en phase test **À faire** : - API suppression compte (soft delete) - API export donnĂ©es personnelles (JSON) - Anonymisation comptes inactifs --- ### 13. Statistiques dashboard **DĂ©cision** : ⏞ **Phase 2 (besoin d'utilisateurs d'abord)** **Justification** : - Pas de donnĂ©es = pas de statistiques - FonctionnalitĂ© importante pour vente - NĂ©cessite application en production **À faire** : - API statistiques (comptes, enfants, AM, validations) - Widgets dashboard (graphiques) - Export rapports --- ### 14. Migration de donnĂ©es **DĂ©cision** : ❌ **Pas de migration prĂ©vue** **Justification** : - Pas de systĂšme existant Ă  migrer - Application nouvelle - Import CSV peut ĂȘtre ajoutĂ© cas par cas si besoin --- ### 15. Documentation utilisateur **DĂ©cision** : ⏞ **Phase 2 (formation prĂ©sentiel prioritaire)** **Justification** : - Premiers utilisateurs : Formation directe par l'Ă©quipe - Documentation nĂ©cessaire pour scalabilitĂ© - VidĂ©os tutoriels utiles mais pas bloquant **À faire** : - Guide utilisateur gestionnaire - Guide utilisateur parent/AM - FAQ - VidĂ©os tutoriels --- ## 🔐 DĂ©cisions SĂ©curitĂ© ### 16. Chiffrement mots de passe configuration **DĂ©cision** : ✅ **AES-256-CBC pour mots de passe SMTP** **Justification** : - SĂ©curitĂ© (mots de passe SMTP en clair = risque) - ConformitĂ© sĂ©curitĂ© - DĂ©chiffrement uniquement en mĂ©moire **ImplĂ©mentation** : - Type `encrypted` dans table `configuration` - ClĂ© de chiffrement dans `.env` (32 caractĂšres) - Service ConfigService gĂšre chiffrement/dĂ©chiffrement --- ### 17. Hash mots de passe utilisateurs **DĂ©cision** : ✅ **Bcrypt avec 12 rounds** **Justification** : - Standard industrie - RĂ©sistant aux attaques brute-force - Configurable (rounds dans config) --- ### 18. Tokens crĂ©ation mot de passe **DĂ©cision** : ✅ **UUID avec expiration 7 jours** **Justification** : - SĂ©curitĂ© (UUID impossible Ă  deviner) - Expiration (limite fenĂȘtre d'attaque) - DurĂ©e configurable (dans table `configuration`) --- ### 19. JWT sessions **DĂ©cision** : ✅ **JWT avec expiration 24h** **Justification** : - Stateless (pas de session en BDD) - Performance (pas de lookup BDD Ă  chaque requĂȘte) - DurĂ©e configurable --- ## 📊 DĂ©cisions Base de DonnĂ©es ### 20. PostgreSQL vs autres SGBD **DĂ©cision** : ✅ **PostgreSQL 17** **Justification** : - Open-source - Robuste et performant - Support JSON (flexibilitĂ©) - Support UUID natif - CommunautĂ© active --- ### 21. ORM : Prisma vs TypeORM **DĂ©cision** : ✅ **Prisma** (mais TypeORM dĂ©jĂ  en place) **Justification Prisma** : - Type-safety - Migrations claires - GĂ©nĂ©ration client automatique **Note** : Le projet YNOV utilise TypeORM. À Ă©valuer si migration vers Prisma nĂ©cessaire. --- ### 22. Migrations versionnĂ©es **DĂ©cision** : ✅ **Migrations SQL versionnĂ©es** **Justification** : - TraçabilitĂ© des changements schĂ©ma - Rollback possible - DĂ©ploiement automatisĂ© **ImplĂ©mentation** : - Fichiers `XX_nom_migration.sql` - ExĂ©cution via `prisma migrate deploy` - User `app_admin` pour DDL - User `app_user` pour DML (runtime) --- ## đŸ§Ș DĂ©cisions Tests ### 23. StratĂ©gie de tests **DĂ©cision** : ✅ **Tests unitaires + intĂ©gration + E2E** **Justification** : - QualitĂ© code - Confiance dĂ©ploiement - DĂ©tection rĂ©gression **Couverture cible** : - Tests unitaires : > 80% - Tests intĂ©gration : Workflows complets - Tests E2E : Parcours utilisateurs critiques --- ## 📝 DĂ©cisions Documentation ### 24. Structure documentation **DĂ©cision** : ✅ **Documentation centralisĂ©e dans `/docs/` avec numĂ©rotation** **Justification** : - LisibilitĂ© (ordre logique) - Maintenance (tout au mĂȘme endroit) - Versioning (Git) **Structure** : ``` docs/ ├── 00_INDEX.md ├── 01_CAHIER-DES-CHARGES.md ├── 02_ARCHITECTURE.md ├── 03_DEPLOYMENT.md ├── 10_DATABASE.md ├── 11_API.md ├── 20_WORKFLOW-CREATION-COMPTE.md ├── 21_CONFIGURATION-SYSTEME.md ├── 22_DOCUMENTS-LEGAUX.md ├── 23_LISTE-TICKETS.md ├── 24_DECISIONS-PROJET.md (ce document) ├── 90_AUDIT.md └── test-data/ ``` --- ## 🔄 DĂ©cisions Workflow ### 25. Gitea + Webhook + DĂ©ploiement automatique **DĂ©cision** : ✅ **DĂ©ploiement automatique sur push master** **Justification** : - ProductivitĂ© (pas de dĂ©ploiement manuel) - FiabilitĂ© (script testĂ©) - RapiditĂ© (feedback immĂ©diat) **Workflow** : 1. Push sur `master` 2. Webhook Gitea dĂ©clenchĂ© 3. Script `deploy-ptitspas.sh` exĂ©cutĂ© 4. Git pull + Migrations + Docker rebuild + Restart --- ### 26. Branches Git **DĂ©cision** : ✅ **StratĂ©gie simple : master + feature branches** **Justification** : - SimplicitĂ© (petite Ă©quipe) - FlexibilitĂ© **Branches** : - `master` : Production - `archive/*` : Archives (ex: maquette initiale) - `migration/*` : Migrations (ex: intĂ©gration YNOV) - `feature/*` : Nouvelles fonctionnalitĂ©s --- ## đŸŽ« DĂ©cisions Ticketing ### 27. Taille des tickets **DĂ©cision** : ✅ **Tickets relativement petits (2-6h)** **Justification** : - GranularitĂ© (suivi prĂ©cis) - Motivation (tickets terminables rapidement) - Revue de code facilitĂ©e --- ### 28. Organisation tickets **DĂ©cision** : ✅ **1 ticket = 1 fonctionnalitĂ© complĂšte (Front + Back + BDD si nĂ©cessaire)** **Justification** : - CohĂ©rence (toute la feature dĂ©veloppĂ©e ensemble) - Testable (end-to-end immĂ©diatement) - Atomique (livraison de valeur fonctionnelle) **Alternative rejetĂ©e** : - ❌ 1 ticket Front + 1 ticket Back + 1 ticket BDD = DĂ©pendances complexes --- ## 🚀 DĂ©cisions DĂ©ploiement ### 29. Docker Compose vs Kubernetes **DĂ©cision** : ✅ **Docker Compose** **Justification** : - SimplicitĂ© (on-premise petite/moyenne collectivitĂ©) - Pas de besoin de scalabilitĂ© horizontale - Maintenance facile **Alternative rejetĂ©e** : - ❌ Kubernetes : Overkill pour on-premise mono-instance --- ### 30. Traefik comme reverse proxy **DĂ©cision** : ✅ **Traefik** **Justification** : - Configuration automatique (labels Docker) - SSL Let's Encrypt automatique - Dashboard intĂ©grĂ© --- ## 📊 Logs & Monitoring ### 31. SystĂšme de logs **DĂ©cision** : ✅ **Winston avec rotation quotidienne** **Justification** : - Standard NestJS - Rotation automatique (pas de disque plein) - Niveaux de log (info, warn, error) - Transports multiples (console + fichier) **Logs Ă  capturer** : - Logs applicatifs (info, warn, error) - Logs emails (succĂšs/Ă©chec SMTP) - Logs connexions (qui se connecte quand) - Logs validations (qui valide quoi) --- ## 📋 RĂ©sumĂ© des dĂ©cisions critiques | # | DĂ©cision | Statut | Impact | |---|----------|--------|--------| | 1 | Mono-repo | ✅ Phase 1 | Architecture | | 2 | On-premise avec config dynamique | ✅ Phase 1 | DĂ©ploiement | | 3 | SystĂšme de fichiers pour uploads | ✅ Phase 1 | Stockage | | 4 | Versioning documents lĂ©gaux | ✅ Phase 1 | RGPD | | 5 | Inscription sans MDP | ✅ Phase 1 | UX | | 6 | Genre enfant obligatoire (H/F) | ✅ Phase 1 | MĂ©tier | | 7 | Un seul champ tĂ©lĂ©phone | ✅ Phase 1 | Simplification | | 8 | NIR obligatoire AM | ✅ Phase 1 | ConformitĂ© | | 9 | Suppression SMS | ✅ Phase 1 | Simplification | | 10 | Renvoyer email | ⏞ Phase 2 | Nice-to-have | | 11 | Sauvegarde auto | ⏞ Phase finale | Ops | | 12 | RGPD avancĂ© | ⏞ Phase 2 | ConformitĂ© | | 13 | Statistiques | ⏞ Phase 2 | Business | | 14 | Migration donnĂ©es | ❌ RejetĂ© | N/A | | 15 | Doc utilisateur | ⏞ Phase 2 | Formation | | 31 | Logs Winston | ✅ Phase 1 | Monitoring | --- ## 🔄 Historique des modifications | Date | Version | Modifications | |------|---------|---------------| | 25/11/2025 | 1.0 | CrĂ©ation du document - Toutes les dĂ©cisions initiales | --- **DerniĂšre mise Ă  jour** : 25 Novembre 2025 **Version** : 1.0 **Statut** : ✅ Document validĂ©