# Cadre de Cohérence Technique
## Produits numériques des ministères sociaux
*Version 1.0 - Draft*
---
## 1. Introduction et enjeux
### 1.1 Contexte
Les ministères sociaux (Travail, Santé, Solidarités) développent de nombreux produits numériques à destination des citoyens, des professionnels et des agents. Ces développements, nécessitent un cadre technique commun pour garantir :
- **Cohérence** : éviter l'hétérogénéité technologique génératrice de dette technique
- **Sécurité** : protection des données sensibles (santé, situation sociale, professionnelle)
- **Efficacité** : mutualisation des bonnes pratiques et réduction des coûts
- **Interopérabilité** : faciliter les échanges entre systèmes et services
### 1.2 Public cible
Ce cadre s'adresse aux :
- **Startups d'État** incubées à la Fabrique numérique
- **Prestataires externes** développant pour les ministères sociaux
- **Équipes internes** en charge du maintien en condition opérationnelle (MCO)
- **Product owners** et **responsables techniques** des produits
### 1.3 Principes directeurs
- **Pragmatisme** : ne pas tout imposer, mais baliser les choix techniques
- **Simplicité** : privilégier les solutions éprouvées et maintenues
- **Conformité** : respect des référentiels nationaux (RGS, RGPD, RGAA, RGI, RGESN)
- **Évolutivité** : adapter les exigences selon la maturité du produit
- **Sécurité by design** : intégrer la sécurité dès la conception
---
## 2. Architecture et technologies
### 2.1 Langages et runtimes
**Recommandé**
- **Node.js** : stack de référence pour sa cohérence avec l'écosystème DNUM, rapidité de développement, facilité de recrutement
**Alternatives**
- **Java Spring Boot** : pour les backends nécessitant une forte montée en charge (>10k utilisateurs simultanés)
**Critères de choix**
- **Node.js** : applications web, API, prototypage rapide, équipes JavaScript
- **Java Spring Boot** : trafic massif, contraintes performance critiques, threading avancé
### 2.2 Frameworks frontend
**Recommandé**
- **Next.js** : framework de référence React avec SSR, SSG, API routes, compatibilité DSFR native
**Alternatives**
- **Angular Universal** ou **Nuxt.js** : uniquement si contraintes métier fortes avec justification obligatoire
**Critères de choix**
- **Next.js** : développement standard, équipe React, intégration DSFR
- **Alternatives** : contraintes techniques spécifiques non couvertes par Next.js
### 2.3 Frameworks backend
**Recommandé**
- **Express** : framework simple et léger, standard de facto Node.js
**Alternatives**
- **NestJS** : structure enterprise, decorators, inspiration Angular
- **Fastify** : performance optimisée, alternative moderne à Express
**Critères de choix**
- **Express** : simplicité, écosystème mature, équipes débutantes Node.js
- **NestJS** : applications complexes, équipes Angular, scalabilité enterprise
- **Fastify** : besoins performance critiques, APIs haute charge
**Cohérence technologique**
- **NestJS + Angular** : même philosophie (decorators, DI, modules), même créateur
- **Express + React** : simplicité, flexibilité, apprentissage rapide
### 2.4 Plateformes backend intégrées
**Solutions complètes**
- **Strapi** : CMS headless avec interface admin, génération APIs automatique
- **Supabase** : backend-as-a-service avec base données, auth, storage
**Critères de choix**
- **Strapi** : gestion contenu, équipes non-techniques, prototypage rapide
- **Supabase** : POC/MVP ultra-rapide, authentification intégrée
- **Frameworks custom** : besoins spécifiques, contrôle total, scalabilité
### 2.5 Design et interface
**Standard obligatoire**
- **DSFR** : système de design officiel de l'État, garantit conformité RGAA via `@codegouvfr/react-dsfr`
**Compléments autorisés**
- **TailwindCSS** : accélération du développement CSS
- **Shadcn/ui** : composants modernes complémentaires
### 2.6 Applications mobiles
**Recommandé**
- **React Native** : cohérence stack JavaScript/TypeScript, Expo CLI (prototypage) / React Native CLI (production)
**Alternatives**
- **Applications natives** : Swift (iOS), Kotlin (Android) pour performances critiques uniquement
**Critères de choix**
- **React Native** : cohérence équipe web, développement multiplateforme
- **Natif** : performances critiques, intégration OS profonde
### 2.7 Applications desktop
**Recommandé**
- **Electron** : cohérence stack web Node.js/React/TypeScript, réutilisation code existant
**Alternatives**
- **Tauri** : backend Rust + frontend web, binaires légers, performances optimisées
**Critères de choix**
- **Electron** : équipe web existante, prototypage rapide
- **Tauri** : contraintes performance, optimisation ressources, compétences Rust disponibles
### 2.8 Données et stockage
**Base de données recommandée**
- **PostgreSQL** : standard pour toutes nouvelles applications
**Alternatives base de données**
- **Bases existantes** : intégrations legacy uniquement
- **Redis** : cache, sessions, données temporaires
**Accès aux données recommandé**
- **SQL natif** : équipes expérimentées, contrôle total
- **Knex.js** : query builder, compromis performance/productivité
**Alternatives accès données (ORM)**
- **Prisma** : ORM moderne Node.js, génération types automatique
- **TypeORM** : ORM avec decorators, intégration native NestJS
- **Drizzle** : ORM type-safe léger, SQL-like syntax
- **Hibernate** : ORM de référence Java Spring Boot
**Critères de choix**
- **SQL natif/Knex** : équipe SQL experte, requêtes complexes, performance critique
- **Prisma** : développement rapide, équipes TypeScript, génération automatique
- **TypeORM** : projets NestJS, équipes Angular (même approche decorators)
- **Drizzle** : type-safety maximale, contrôle SQL, performance
### 2.9 APIs et interfaces
**Standards recommandés**
- **REST** : standard par défaut avec OpenAPI/Swagger obligatoire
**Alternatives**
- **GraphQL** : justification métier forte uniquement
- **gRPC** : communication inter-services haute performance
**Standards obligatoires**
- **Versioning** : obligatoire dès mise en production
- **Documentation** : OpenAPI/Swagger systématique
- **Authentification** : tokens JWT avec expiration courte
**Critères de choix**
- **REST** : simplicité, documentation automatique, standard industrie
- **GraphQL** : besoins requêtes complexes, optimisation réseau, frontend flexible
- **gRPC** : microservices, performance critique, typage strict
---
## 3. Sécurité et conformité
### 3.1 Authentification et autorisation
**Standards obligatoires**
- **FranceConnect** : authentification citoyens avec FranceConnect+ pour données sensibles
- **ProConnect** : authentification agents et professionnels des ministères sociaux
**Alternatives techniques**
- **OAuth 2.0/OIDC** : authentification APIs
- **SAML** : intégration SI existants uniquement
- **JWT** : tokens avec expiration courte (<1h) + refresh tokens
**Critères de choix**
- **FranceConnect** : services citoyens, démarches administratives personnelles
- **ProConnect** : applications internes, agents ministères sociaux, outils professionnels
- **OAuth 2.0** : APIs, authentification machine-to-machine
- **SAML** : contrainte d'intégration SI legacy existants
### 3.2 Protection des données
**Conformité RGPD obligatoire**
- **Privacy by design** : protection dès conception
- **Minimisation** : collecte données strictement nécessaires
- **Consentement** : mécanismes clairs et révocables
- **Droit oubli** : processus suppression automatisés
**Standards applicatifs obligatoires**
- **Logs sans données personnelles** : jamais de PII dans les logs applicatifs
- **Validation inputs** : sanitization systématique des données entrantes
- **Headers sécurité** : CSP, HSTS, X-Frame-Options obligatoires
- **Gestion erreurs** : messages sans exposition données sensibles
- **Sessions sécurisées** : durée appropriée, invalidation propre
### 3.3 Anonymisation et pseudonymisation
**Obligations légales**
- **Environnements développement** : données anonymisées uniquement
- **Analytics** : suppression identifiants personnels
- **Échanges inter-services** : pseudonymisation systématique
**Outils recommandés**
- **Faker.js** : génération données test
- **K-anonymat** : jeux données statistiques
**Alternatives outils**
- **Suppression sélective** : champs sensibles ciblés
- **Pseudonymisation cryptographique** : clés dédiées
**Standards processus**
- **Pipelines automatisés** : génération données test
- **Audit trails** : traçabilité processus
- **Validation** : équipes métier et juridiques
**Critères de choix**
- **Faker.js** : développement rapide, données réalistes
- **K-anonymat** : analyses statistiques, conformité recherche
- **Suppression** : données ultra-sensibles, sécurité maximale
- **Pseudonymisation** : traçabilité nécessaire, réversibilité contrôlée
### 3.4 Sécurité applicative
**Standards obligatoires**
- **OWASP Top 10** : vérification systématique
- **SonarQube** : analyse statique avec règles sécurité
- **Tests pénétration** : obligatoires avant mise production
**DevSecOps obligatoire**
- **Scans vulnérabilités** : intégrés pipelines CI/CD
- **Secrets management** : jamais en dur dans code
- **Container scanning** : images sécurisées
**Critères d'application**
- **OWASP Top 10** : toutes applications web
- **Tests pénétration** : applications critiques, données sensibles
- **Container scanning** : tous déploiements conteneurisés
- **Secrets externes** : tous environnements production
---
## 4. Standards de développement et qualité
### 4.1 Langages et standards
**Standard obligatoire**
- **TypeScript** : obligatoire pour tout développement JavaScript, strict mode activé
**Outils obligatoires**
- **ESLint** : règles strictes + spécifiques sécurité
- **Prettier** : formatage automatique
- **Husky** : hooks Git validation pré-commit
**Critères d'application**
- **TypeScript** : tous nouveaux projets JavaScript, améliore maintenabilité
- **ESLint strict** : projets production, détection erreurs précoce
- **Prettier** : tous projets, cohérence formatage équipe
### 4.2 Tests et couverture
**Standards par phase**
- **MVP/POC** : tests critiques uniquement (>50% couverture)
- **Stabilisation** : couverture minimale 70%
- **Production** : couverture >80% avec tests E2E
**Outils recommandés**
- **Jest** : tests unitaires et intégration
- **Playwright** : tests end-to-end
- **Testing Library** : tests composants React
**Critères de choix**
- **Jest** : écosystème JavaScript, intégration simple
- **Playwright** : tests E2E modernes, multi-navigateurs
- **>80% couverture** : applications critiques, données sensibles
- **>50% couverture** : prototypage, validation concept
### 4.3 Qualité et métriques
**Standard obligatoire**
- **SonarQube** : intégration obligatoire avec seuils définis
**Seuils qualité obligatoires**
- **Bugs** : 0 toléré
- **Vulnérabilités** : 0 tolérée
- **Code Smells** : < 100 (nouveaux projets)
- **Duplication** : < 3%
- **Maintainability** : A ou B
**Critères d'application**
- **Seuils stricts** : tous projets production
- **Seuils assouplis** : prototypage, exploration technique
### 4.4 Observabilité et monitoring
**Standards obligatoires**
- **Sentry** : monitoring erreurs obligatoire
- **Logs structurés** : format JSON avec corrélation requêtes
**Outils recommandés**
- **Prometheus/Grafana** : métriques applicatives et infrastructure
- **APM** : monitoring performances applicatives
**Critères de choix**
- **Sentry** : toutes applications, alertes temps réel
- **Prometheus** : monitoring avancé, métriques business
- **APM** : applications critiques, optimisation performance
- **Logs JSON** : tous environnements, facilite debugging
---
## 5. Infrastructure et déploiement
### 5.1 Orchestration
**Standard obligatoire**
- **Kubernetes** : orchestrateur unique, déploiements rootless, namespaces isolation
**Configuration obligatoire**
- **RBAC** : contrôle accès granulaire
- **Images légères** : Alpine Linux ou Distroless
- **Multi-stage builds** : optimisation taille
- **Registry sécurisé** : scan vulnérabilités
**Critères d'application**
- **Kubernetes** : tous déploiements production
- **Images légères** : optimisation ressources, sécurité
- **RBAC** : isolation équipes, sécurité renforcée
### 5.2 Environnements
**Standards obligatoires**
- **Développement** : déploiement automatique sur merge
- **Staging** : réplique production pour tests complets
- **Production** : haute disponibilité avec monitoring renforcé
**Gestion configuration obligatoire**
- **Variables environnement** : configuration externalisée
- **Secrets externes** : Kubernetes Secrets ou solutions dédiées
- **Pas de configuration en dur** : jamais dans images
**Critères d'application**
- **3 environnements minimum** : séparation développement/staging/production
- **Secrets externes** : tous environnements, sécurité
- **Monitoring renforcé** : production uniquement
### 5.3 CI/CD
**Pipeline standard obligatoire**
1. **Tests** : unitaires, intégration, sécurité
2. **Build** : compilation et création artefacts
3. **Scan** : vulnérabilités et qualité code
4. **Deploy** : déploiement automatisé avec rollback
**Outils recommandés**
- **GitLab CI** ou **GitHub Actions** : automatisation
- **ArgoCD** : déploiement GitOps
- **Helm** : gestion configurations Kubernetes
**Critères de choix**
- **GitLab CI** : intégration GitLab, pipeline complexes
- **GitHub Actions** : écosystème GitHub, simplicité
- **ArgoCD** : déploiements GitOps, visibilité
- **Rollback automatique** : tous déploiements production
### 5.4 Continuité
**Standards sauvegarde**
- **Bases données** : sauvegarde quotidienne, rétention 30j
- **Données critiques** : sauvegarde temps réel avec réplication
- **Tests restauration** : mensuels avec documentation
**Plan reprise activité**
- **RTO** : <4h services critiques
- **RPO** : <1h données critiques
- **Procédures** : documentation et tests réguliers
**Critères d'application**
- **RTO/RPO stricts** : applications critiques
- **Tests mensuels** : toutes applications production
- **Documentation à jour** : procédures opérationnelles
---
## 6. Gouvernance et processus
### 6.1 Décisions techniques
**Standards obligatoires**
- **Architecture Decision Records (ADR)** : documentation obligatoire choix techniques majeurs
- **Revue de code** : minimum 1 reviewer par PR/MR
**Format ADR obligatoire**
- **Contexte** : problème et contraintes
- **Décision** : solution retenue et justification
- **Conséquences** : impacts techniques et organisationnels
- **Révision** : au moins annuelle
**Critères revue de code**
- **Fonctionnalité** : respect spécifications
- **Sécurité** : conformité standards
- **Performance** : optimisation requise
- **Maintenabilité** : qualité code
### 6.2 Documentation
**Standards obligatoires**
- **README** : installation, utilisation, contribution
- **API** : documentation OpenAPI/Swagger automatique
- **Base de données** : diagramme entité-relation/MCD
- **Architecture** : schéma fonctionnel simple des composants principaux
**Maintenance obligatoire**
- **Synchronisation** : à jour avec le code
- **Accessibilité** : plateforme centralisée (GitLab/GitHub Pages)
- **Versioning** : avec le code source
**Critères d'application**
- **Documentation complète** : tous projets production
- **Documentation minimale** : prototypage, README + API docs
- **Mise à jour automatique** : APIs via OpenAPI/Swagger
---
## 7. Mise en œuvre et temporalité
### 7.1 Phase MVP/POC
**Objectif**
- **Validation concept** : validation rapide du concept métier
**Stack minimale obligatoire**
- **Node.js + Next.js + PostgreSQL** : stack de base
- **DSFR** : interface utilisateur
- **Kubernetes/Docker Compose** : hébergement
- **Sentry** : monitoring de base
**Exigences allégées**
- **Tests critiques** : >50% couverture uniquement
- **Sécurité de base** : HTTPS, authentification simple
- **Anonymisation basique** : environnements développement
### 7.2 Phase Stabilisation
**Objectif**
- **Consolidation** : amélioration continue du produit
**Ajouts obligatoires**
- **Tests** : couverture >70%
- **SonarQube** : métriques qualité
- **Pipeline CI/CD** : automatisation complète
- **Monitoring avancé** : Prometheus/Grafana
- **Anonymisation industrialisée** : processus automatisés
**Standards appliqués**
- **Revue code** : systématique
- **Documentation** : technique complète
- **Tests charge** : si nécessaire
### 7.3 Phase Industrialisation
**Objectif**
- **Production robuste** : service industriel
**Durcissement requis**
- **Audit sécurité** : complet et validé
- **Tests pénétration** : obligatoires
- **Plan reprise activité** : testé et documenté
- **Conformité RGAA** : niveau AA
- **Certification HDS** : si données santé
**Processus matures**
- **ADR** : toute évolution majeure
- **Formation équipes** : continue
- **Métriques SLA** : performance et disponibilité
### 7.4 Critères passage entre phases
**MVP → Stabilisation**
- **Validation métier** : concept prouvé
- **Utilisateurs actifs** : >100 utilisateurs
- **Architecture stable** : technique validée
- **Financement** : pérennisé
**Stabilisation → Industrialisation**
- **Tests charge** : validés
- **Processus qualité** : en place
- **Équipe autonome** : formée
- **Documentation** : complète
- **Métriques production** : satisfaisantes
---
## 8. Retours d'expérience
### 8.1 Technologies à succès
**Succès confirmés**
- **Next.js** : adoption rapide, écosystème riche
- **PostgreSQL** : simplicité, robustesse, performances
- **DSFR** : accessibilité, conformité design
- **Docker/Kubernetes** : standardisation déploiements
**Bénéfices identifiés**
- **TypeScript** : réduction bugs production
- **Revue code** : qualité et partage connaissances
- **Tests automatisés** : détection précoce régressions
### 8.2 Difficultés rencontrées
**Problèmes techniques**
- **ORM multiples** : maintenance complexe, compétences dispersées
- **Stratégies test variables** : qualité inégale
- **Configurations diverses** : complexité opérationnelle
**Problèmes organisationnels**
- **Gestion secrets** : pratiques hétérogènes
- **Anonymisation** : processus manuels
- **Monitoring** : alerting insuffisant
**Solutions appliquées**
- **Standardisation progressive** : migration outils recommandés
- **Formation ciblée** : montée compétences
- **Outillage mutualisé** : templates partagés
---
## Annexes
### Ressources et références
- **DSFR** : https://www.systeme-de-design.gouv.fr/
- **RGS** : Référentiel général de sécurité
- **RGPD** : Règlement général sur la protection des données
- **RGAA** : Référentiel général d'amélioration de l'accessibilité
- **OWASP** : https://owasp.org/
---
*Ce document évolue en fonction des retours d'expérience et des évolutions technologiques. Version maintenue par l'équipe architecture de la DNUM des ministères sociaux.*