Exécution — Refonte du module Accompagnements (suivi générique + orientations)¶
Chantier clos. Détail technique complet. Pour le contexte, l'usage et la justification métier, voir ProjetESM/Documents/20260710_1344_refonte-module-accompagnements-suivi-orientations.
Origine¶
Discussion partie d'une question simple de Bernard sur ce qu'affiche la section « Prise en charge
holistique » de la fiche enfant, qui a mené à examiner ce que recouvre concrètement
« Accompagnement » dans ce projet. Vérification contre la transcription intégrale du cadre
logique (ProjetESM/Documents/20260709_1130_transcription-sous-activites-donnees-indicateurs)
: aucune des 37 sous-activités officielles ne correspond au module Accompagnement générique, et
son sous-module « Orientations » prétendait alimenter l'indicateur 2.1.2 qui concerne en réalité
la formation des maîtres coraniques (déjà résolu par un tout autre modèle,
ActionCommunautaireMaitreCoranique, lors du chantier
ProjetESM/debug/execution-sous-activites-indicateurs). Conclusion partagée avec l'utilisateur :
le module n'a pas de raison d'être sous sa forme actuelle. Décision validée : retirer le
générique, garder le suivi (repensé en modèle générique par cible) et les orientations (rattachées
à l'Enfant).
Vérification préalable (avant toute suppression)¶
accompagnements, suivis_accompagnement, cas_orientes : 0 ligne en production.
types_accompagnement : 11 lignes, uniquement du référentiel de seed, aucune donnée utilisateur.
Confirmé par requêtes directes avant de toucher au schéma — retrait sans perte de donnée réelle.
Schéma Prisma¶
- Supprimés :
Accompagnement,TypeAccompagnement,SuiviAccompagnement, enumStatutAccompagnement. Relations retirées surUtilisateuretEnfant. CasOriente:accompagnementId→enfantId(relation versEnfantau lieu d'Accompagnement).- Nouveau modèle
Suivi+ enumCibleSuivi(HOLISTIQUE/MICRO_SUBVENTION/INSTALLATION) — exactement une des 3 FK (enfantId/microSubventionId/installationCQMId) renseignée selon la cible. Pas destatutValidation(entrée de journal append-only, comme l'ancienSuiviAccompagnement). MicroSubvention/InstallationCQM: relation inversesuivis Suivi[]ajoutée.- Appliqué en base via
prisma db push --accept-data-loss(perte acceptée = les 11 lignes de seedtypes_accompagnement, actées ci-dessus).
Backend — fichiers touchés par module¶
Modules/Accompagnements (le plus gros volume) :
- Supprimés (~23 fichiers) : toute la chaîne CRUD Accompagnement (entity, DTO, exceptions,
interfaces/usecases/controllers/handlers Creer/Modifier/Obtenir/Lister/ChangerStatut,
repository Prisma).
- Réécrits sur enfantId (au lieu d'accompagnementId) : toute la chaîne CasOriente
(5 usecases, 5 controllers inchangés, 5 handlers ajustés) + nouveau ICasOrienteRepository/
CasOrienteRepositoryPrisma.
- Réécrits en générique (cible/cibleId au lieu d'accompagnementId) : toute la chaîne Suivi
(3 usecases Creer/Lister/Supprimer, pas de Modifier — même choix que l'ancien) + nouveau
ISuiviRepository/SuiviRepositoryPrisma.
- 4 volets holistiques (AppuiAlimentaire, SoutienPsychologique, PriseEnChargeSanitaire,
SeanceAlphabetisation) : non touchés, déjà rattachés à Enfant directement.
- AccompagnementsModule.ts (DI, 995 lignes) réécrit intégralement : repositories/usecases/
controllers Accompagnement retirés, CasOriente/Suivi rebranchés sur les nouveaux repositories.
- Routes : /accompagnements/:id/suivis → /accompagnements/suivis (générique, cible+cibleId
en query/body) ; /accompagnements/:id/cas-orientes →
/accompagnements/enfants/:enfantId/cas-orientes (même convention que les volets).
- Permissions réutilisées telles quelles (ACCOMPAGNEMENT_LIRE/ACCOMPAGNEMENT_CREER/
SUIVI_CREER) — simples chaînes internes, pas de valeur ajoutée à les renommer.
Modules/Referentiels : retrait complet du CRUD TypeAccompagnement (11 fichiers) — plus
aucune raison d'être une fois Accompagnement disparu.
Modules/Rapports : TableauDeBordDTO.accompagnements → casOrientes: { total } ;
KPIsPeriodeDTO.accompagnementsDebutes → casOrientesCrees ; FicheEnfantDTO.accompagnements
→ casOrientes (champs alignés sur le nouveau modèle) ; obtenirRepartitionAccompagnement
retourne désormais [] avec commentaire explicatif (pas de notion de « type » à répartir côté
CasOriente, endpoint jamais consommé côté frontend).
Modules/Administration : compterDonnees() (comptage avant suppression d'un utilisateur)
basculé de accompagnement/suiviAccompagnement vers casOriente/suivi.
Modules/Synchronisation : les cas ACCOMPAGNEMENT/SUIVI du type EntiteSync (offline
sync mobile) passés en no-op (return null / break), même traitement que EVALUATION déjà
inexistant — pas de sync offline recréée pour les nouveaux CasOriente/Suivi, hors scope de ce
chantier.
shared/infrastructure/config/dependencies.ts : config DI legacy (parallèle à
l'auto-discovery, toujours utilisée au démarrage réel) — getAccompagnementsModuleControllers()
et getReferentielsModuleControllers() nettoyées des handlers retirés. Cause du premier échec
de démarrage serveur après la première vague d'édits : ce fichier n'apparaît dans aucun grep
« routes » évident, à vérifier systématiquement pour tout retrait de handler à l'avenir.
Frontend — fichiers touchés¶
Modules/accompagnements: pagesAccompagnementsPage.tsx/AccompagnementDetailPage.tsxsupprimées (1700 lignes), entitéAccompagnement, use-cases/repository/store associés.ICasOrienteRepository/CasOrienteRepositoryetISuiviRepository/SuiviRepositorycréés (sans cache offline Dexie pour ces deux-là, contrairement à l'ancien — mêmes limites que côté sync backend).PriseEnChargeHolistiqueSection.tsx(4 volets) : non touché.Modules/enfants/pages/EnfantDetailPage.tsx: nouvelles sectionsSectionSuiviHolistique(cible=HOLISTIQUE) etSectionOrientations, remplacent l'ancienneSectionAccompagnements.Modules/insertionSocioEconomique/.../InsertionDetailPage.tsx: composant partagéSuiviInlineWidget(repliable, cible+cibleId en prop) monté sur chaque ligneLigneSubvention/LigneInstallation.app/Router.tsx+shared/components/layout/Sidebar.tsx: routes et section de menu « Accompagnements » retirées (les 4 volets et le nouveau suivi n'ont jamais eu d'entrée de menu dédiée — cohérent avec le fait qu'ils s'affichent en ligne sur la fiche enfant).
Tests¶
Supprimés (fonctionnalité disparue, pas de valeur à corriger) : 7 tests unitaires + 1 e2e du
module Accompagnements (Creer/Modifier/Lister/ChangerStatut Accompagnement, ancien
Creer/SupprimerSuivi basé sur accompagnementId), 2 tests unitaires Referentiels
(Creer/ListerTypeAccompagnement).
Adaptés (fonctionnalité conservée sous nouvelle forme) : referentiels.e2e.test.ts (Scénario
TypeAccompagnement retiré, Communes conservées) ; rapports.fiche-enfant.test.ts et
rapports.kpis-periode.test.ts (champs renommés accompagnements→casOrientes,
accompagnementsDebutes→casOrientesCrees).
Non touchés et vérifiés stables : synchronisation.*.test.ts (3 suites, 34 tests, tous passants
— les tests mockent au niveau de l'interface ISynchronisationRepository, insensibles au
changement d'implémentation interne).
Vérifications finales¶
- Backend :
npx tsc --noEmit→ 0 erreur. Démarrage serveur à froid → 282 routes actives, aucune erreur (après correction dedependencies.ts, voir ci-dessus). - Frontend :
npx tsc --noEmit→ 0 erreur.npm run build→ OK, bundle légèrement plus petit qu'avant (1536 Ko vs 1575 Ko — code mort effectivement retiré). - Jest ciblé (Referentiels, Rapports, Synchronisation) : suites directement concernées passantes
après correction. Échecs résiduels ailleurs (Enfants, Administration) confirmés pré-existants
et sans rapport via
git status(fichiers non touchés par ce chantier). - 1 commit sur
main(ec7447f, 149 fichiers), non poussé sur le dépôt distant.
Liens connexes¶
- ProjetESM/Documents/20260710_1344_refonte-module-accompagnements-suivi-orientations — contexte, usage, justification métier
- ProjetESM/debug/execution-sous-activites-indicateurs — chantier qui a résolu l'indicateur 2.1.2.2 via
ActionCommunautaireMaitreCoranique, référence pour comprendre le vrai rattachement de cet indicateur - ProjetESM/Documents/20260709_1917_carte-menu-saisie-sous-activites
- ProjetESM/index