Audit de conformité FrontEnd — ProjetESM¶
Référence :
../spécs/2_REFERENCE_FRONTEND_FINAL.md
Architecture fonctionnelle :20260613_1332_architecture-fonctionnelle.md
Date : 2026-06-16
Résumé exécutif¶
| Zone | Conformité | Détail |
|---|---|---|
Module auth (DDD 4 couches) |
✅ Conforme | Seul module 100 % DDD |
| ThemeProvider + Tailwind | ✅ Conforme | RGB sans virgule, 7 thèmes, caritas par défaut |
| ApiClient (auto-refresh 401) | ✅ Conforme | |
| Router (routes statiques → dynamiques) | ✅ Conforme | |
| 10 autres modules (structure DDD) | ❌ Non-conforme | Structure plate sans 4 couches |
| Sidebar (hiérarchie + RBAC) | ❌ Non-conforme | Menu plat, RBAC 2 niveaux |
| Modules métier manquants | ❌ Incomplet | 5 modules absents de l'architecture |
1. Points conformes ✅¶
1.1 Module auth — 100 % DDD¶
Structure complète des 4 couches :
- domain/ → entities/ (User, Session), value-objects/ (Password, Token), ports/ (IAuthRepository, ISessionRepository, ITwoFactorRepository…)
- application/ → dto/, use-cases/auth/ (Login, Logout, Refresh, Verify2FA), use-cases/profile/, use-cases/sessions/, use-cases/two-factor/
- infrastructure/ → api/, di/container.ts, repositories/, services/ (tokenManager, storage, validation)
- presentation/ → hooks/ (useAuth, use2FA, useSession…), pages/, store/ (authStore, sessionStore)
1.2 ThemeProvider¶
- Couleurs en format RGB sans virgule
"79 70 229"✅ createContextavec valeur par défaut (pas denull) ✅- Persistance
localStorageavec clésesm-theme-slug/esm-theme-custom✅ - 7 thèmes définis : indigo, émeraude, rose, ambre, violet, ardoise, caritas ✅
THEME_DEFAUT = caritasTheme✅
1.3 Tailwind config¶
- Tokens sémantiques via
rgb(var(--color-xxx) / <alpha-value>)✅ - Sidebar tokens :
sidebar.bg/text/active/hover/border✅ - Palette états : success, warning, danger ✅
1.4 ApiClient¶
- Gestion 401 + retry avec refresh automatique ✅
- Alias
@/utilisé partout ✅ async/awaitpartout ✅
2. Non-conformités critiques ❌¶
2.1 — 10 modules sans structure DDD¶
Modules concernés :
enfants, accompagnements, tuteurs, maitresCoraniques, formations, evaluations, administration, rapports, referentiels, tableau-de-bord
Structure actuelle (plate) :
Modules/enfants/
├── api/enfants.api.ts ← fonctions apiClient directes
├── hooks/useEnfants.ts ← useQuery/useMutation appelant api/ directement
├── pages/
├── store/enfantsStore.ts ← Zustand non-persistant, UI only
└── types/enfants.types.ts
Structure attendue (DDD) :
Modules/enfants/
├── domain/
│ ├── entities/Enfant.ts
│ ├── ports/IEnfantsRepository.ts
│ └── value-objects/
├── application/
│ ├── dto/dtos.ts
│ └── use-cases/ListerEnfantsUseCase.ts, ObtenirEnfantUseCase.ts...
├── infrastructure/
│ ├── api/enfants.api.ts
│ ├── repositories/EnfantsRepository.ts
│ └── di/container.ts
└── presentation/
├── hooks/useEnfants.ts ← appelle container.useCase.execute()
├── pages/
└── store/enfantsStore.ts ← persist + createJSONStorage
Conséquences :
- useEnfants appelle directement listerEnfants() au lieu de container.listerEnfantsUseCase.execute()
- Aucun use case, aucune entité domain, aucun port de repository
- Stores Zustand non persistants (pas de persist + createJSONStorage)
- Types dans types/*.types.ts au lieu de application/dto/dtos.ts
2.2 — Sidebar non-conforme¶
Problèmes identifiés :
| Défaut | Détail |
|---|---|
| Menu plat | Aucun sous-menu accordéon — 9 sections avec sous-items attendues |
| RBAC 2 niveaux | Seul ADMIN est filtré ; COORDINATEUR n'existe pas côté FE |
| Sections manquantes | Insertion socio-éco, Mobilisation communautaire, Sécurité & Audit |
| Items hors spec | Evaluations et Import Excel dans le menu principal |
| Lien Profil absent | ProfilePage existe mais n'est accessible que par URL directe |
Visibilité RBAC attendue vs. actuelle :
| Section | Agent | Coordinateur | Admin | Actuel |
|---|---|---|---|---|
| Tableau de bord | ✅ | ✅ | ✅ | ✅ partiel |
| Gestion enfants | ✅ | ✅ | ✅ | ✅ partiel |
| Accompagnements | ✅ | ✅ | ✅ | ✅ partiel |
| Insertion socio-éco | ✅ | ✅ | ✅ | ❌ absent |
| Acteurs de terrain | ✅ | ✅ | ✅ | ⚠️ incomplet |
| Sensibilisation | ❌ | ✅ | ✅ | ⚠️ partiel |
| Mobilisation | ❌ | ✅ | ✅ | ❌ absent |
| Pilotage & Indicateurs | ❌ | ✅ | ✅ | ⚠️ partiel |
| Administration | ❌ | ❌ | ✅ | ✅ |
| Sécurité & Audit | ❌ | ❌ | ✅ | ❌ absent |
2.3 — Modules métier manquants¶
| Module architecture | Fichiers frontend actuels | État |
|---|---|---|
| Module 3 — Parents (acteur) | — | ❌ Absent |
| Module 5 — Insertion socio-éco | — | ❌ Absent |
| Module 6 — Sensibilisation | formations/ partiel |
⚠️ Partiel |
| Module 7 — Mobilisation communautaire | — | ❌ Absent |
| Module 8 — Études & Pilotage | evaluations/ + rapports/ partiels |
⚠️ Partiel |
| Module 9 — Audit applicatif | — | ❌ Absent |
Modules hors architecture (à clarifier) :
- evaluations/ — absent de l'architecture fonctionnelle, à reclasser
- import/ — utilitaire admin non défini, à conserver ou documenter
3. Corrections mineures¶
| Défaut | Fichier | Correction |
|---|---|---|
applyTheme() codé en dur |
ThemeProvider.tsx:18-48 |
Remplacer par boucle camelToKebab() |
RegisterPage hors spec |
presentation/pages/RegisterPage.tsx |
Vérifier si inscription publique prévue |
select: (res) => (res.data as any)?.donnees |
useEnfants.ts:22 |
Typer correctement sans any |
4. Référence module modèle¶
Le module auth est la référence d'implémentation à dupliquer pour tous les autres modules.
Fichier d'entrée : FrontEnd/src/Modules/auth/index.ts
Document généré le 2026-06-16 — à mettre à jour après chaque mission de correction