20260612 1759 Analyse croisée du Cadre Logique et Modèle schémaV2
Maintenant j'ai tout. Je vais faire une analyse complète, point par point.Voici mon analyse complète après lecture directe des deux fichiers sources.
Verdict global : l'analyse est largement correcte, mais incomplète sur plusieurs points importants¶
✅ Points confirmés à 100%¶
Module M&E absent — confirmé. Mais le schéma soumis inclut déjà IndicateurSuivi et MesureIndicateur à la fin du fichier. Ce qui signifie que l'analyse a été faite sur une version antérieure du schéma. Ces deux modèles sont présents dans le fichier actuel, bien que sans @map(...), sans createdAt/updatedAt sur IndicateurSuivi, et sans lien vers Utilisateur sur les deux.
Tuteur vs Parent redondance — confirmé et plus grave que décrit. En lisant le schéma : Tuteur a un champ maitreCoranId String? mais aucune @relation déclarée vers MaitreCoranique. Parent n'a aucune relation vers Enfant non plus. Les deux tables flottent sans FK Prisma valide.
Enfant.tuteurId sans @relation — confirmé et critique. Le champ tuteurId String? est déclaré dans Enfant, mais il n'y a aucune clause @relation correspondante ni de champ inverse dans Tuteur. Prisma refusera cette migration.
animateurId dans FormationSensibilisation — confirmé. C'est un String? nu, sans @relation. La table PersonneRessource existe pourtant dans le schéma.
ActionAudit et RessourceAudit orphelines — confirmé. Ces deux tables ont une structure autonome (slug, isActive) mais ne sont liées à AuditLog par aucune FK. AuditLog utilise encore action String et ressource String.
❌ Points infirmés ou à corriger dans l'analyse¶
1. IndicateurSuivi/MesureIndicateur signalés comme absents — FAUX dans le schéma actuel
Ces deux modèles sont présents en bas du fichier. L'analyse était probablement faite sur une version précédente. Ce qu'il reste à corriger sur ces modèles :
- IndicateurSuivi n'a pas de createdAt, updatedAt, @map(...), ni idUtilisateur
- MesureIndicateur n'a pas de @relation inverse explicite ni de @map(...)
- Aucune contrainte d'unicité sur (indicateurId, periode) pour éviter les doublons de saisie
2. PriseEnChargeHolistique décrite comme sans relation vers Enfant — FAUX
La relation enfant Enfant @relation(fields: [enfantId], references: [id]) est bien présente.
3. ParcoursInsertion décrite comme sans relation vers Enfant — FAUX
La relation est présente : enfant Enfant @relation(fields: [enfantId], references: [id]).
⚠️ Lacunes réelles non signalées dans l'analyse¶
1. Enfant n'a pas de relation inverse vers PriseEnChargeHolistique ni ParcoursInsertion
Ces deux modèles ont enfantId avec @relation, mais le modèle Enfant ne déclare pas les champs inverses (priseEnCharge PriseEnChargeHolistique[] et parcoursInsertion ParcoursInsertion[]). Prisma va rejeter ça à la génération du client.
2. Enfant n'a pas de relation vers Parent
La table Parent existe mais n'est reliée à aucun Enfant. Aucun parentId dans Enfant, aucun enfantId dans Parent. Le lien enfant↔parent est totalement absent du schéma.
3. MaitreCoranique sans champ genre
Le cadre logique mesure des indicateurs ventilés par genre (nb filles, nb garçons). MaitreCoranique a nbFilles et nbGarcons mais aucun champ genre propre au maître.
4. EducateurPair sans updatedAt
Incohérence avec le reste du schéma.
5. Modèles de la section additionnelle sans @map(...)
EtudeDiagnostique, SupportCommunication, DistributionSupport, EducateurPair, EmissionRadio, ComiteVillageois, MembreComite, ReunionComite, CadreConcertation, SessionConcertation, PriseEnChargeHolistique, ParcoursInsertion, SessionParoleJeunes — aucun n'a de directive @@map(...). Les tables seront nommées par Prisma en PascalCase brut, incohérent avec les snake_case du reste du schéma.
6. MembreComite sans updatedAt ni idUtilisateur
Impossible de savoir qui a ajouté un membre et quand la donnée a été modifiée.
7. Indicateur 1.2.2.3 — activités de cohésion sociale non couverts
Le cadre logique mentionne des activités de cohésion sociale distinctes des sensibilisations (indicateur 1.2.2.3). Aucune table ne les trace.
8. Lien CasOriente confirmé manquant
L'indicateur 2.1.2 mesure les cas orientés vers les GUPS. Accompagnement ne permet pas de distinguer une orientation formelle (vers service social extérieur) d'un suivi interne. La table CasOriente manque bien.
Tableau récapitulatif---¶
Priorités de correction avant migration¶
Bloquants Prisma (la génération du client échoue) :
- Enfant.tuteurId sans @relation + champ inverse manquant dans Tuteur
- Enfant sans priseEnCharge PriseEnChargeHolistique[] et parcoursInsertion ParcoursInsertion[]
- Tuteur.maitreCoranId sans @relation vers MaitreCoranique
- Parent totalement déconnectée de Enfant
Fonctionnels critiques :
- Ajouter @@map(...) sur les 13 modèles de la section additionnelle
- Compléter IndicateurSuivi / MesureIndicateur (timestamps, idUtilisateur, @map, unicité)
- Créer CasOriente pour l'indicateur 2.1.2
À planifier :
- Extraire MicroSubvention et PlanAffaires de ParcoursInsertion en entités distinctes
- Décider du sort de Tuteur/Parent (fusion en PersonneProche ou maintien avec FKs correctes)
- Créer ParticipationSession pour SessionParoleJeunes