Aller au contenu

20260612 1747 Analyse croisée du Cadre Logique et Modèle schéma

Excellent. J'ai maintenant une vue complète des trois documents. Voici mon analyse structurée.


Analyse du modèle Prisma face au cadre logique

Vue d'ensemble

Le schéma est globalement bien aligné avec le projet. La majorité des domaines métiers du cadre logique y sont couverts. Mais il y a des lacunes réelles, quelques redondances, et des incohérences structurelles à corriger.


✅ Ce qui est bien couvert

Domaine métier Tables concernées
Gestion des enfants (ESM) Enfant, MaitreCoranique, Tuteur, Parent
Accompagnement & suivi individuel Accompagnement, TypeAccompagnement, SuiviAccompagnement
Prise en charge holistique PriseEnChargeHolistique
Parcours d'insertion professionnelle ParcoursInsertion
Formations & sensibilisations FormationSensibilisation, ParticipationFormation
Comités villageois de veille ComiteVillageois, MembreComite, ReunionComite
Cadres de concertation CadreConcertation, SessionConcertation
Étude diagnostique EtudeDiagnostique
Supports de communication SupportCommunication, DistributionSupport
Émissions radio EmissionRadio
Sessions de parole/jeunes SessionParoleJeunes
Sécurité & authentification Session, AuditLog, SecurityLog, etc.

❌ Tables manquantes

1. IndicateurSuivicritique

Le cadre logique est entièrement structuré autour d'indicateurs objectivement vérifiables (IOV) avec des valeurs de référence (SR) et des cibles (C). Il n'existe aucune table pour enregistrer les valeurs mesurées dans le temps, les comparer aux cibles, ou produire des rapports de suivi-évaluation. C'est le cœur du M&E (Monitoring & Evaluation).

model IndicateurSuivi {
  id            String   @id @default(cuid())
  code          String   @unique  // ex: "1.1.1.1"
  libelle       String
  resultatRef   String   // R1.1, R2.1, etc.
  valeurRef     String?  // SR
  valeurCible   String?  // C
  unite         String?  // %, nombre, rapport...
  mesures       MesureIndicateur[]
}

model MesureIndicateur {
  id            String   @id @default(cuid())
  indicateurId  String
  valeur        String
  dateMesure    DateTime
  sourceVerif   String?  // rapport d'activité, photos...
  periode       String?  // T1-2025, S2-2024...
  idUtilisateur String
  indicateur    IndicateurSuivi @relation(fields: [indicateurId], references: [id])
}

2. RapportActiviteimportant

Les sources de vérification citent systématiquement des "rapports d'activités". Aucune table ne structure ces rapports ni ne les lie aux activités, résultats et indicateurs.

3. EducateurPair → lien ParticipationFormation manquant

La table EducateurPair existe mais n'est pas reliée à ParticipationFormation. Le participantId de cette dernière est une simple String non typée — cela empêche de savoir si le participant est un maître coranique, un membre de comité, un éducateur pair, ou un acteur communautaire.

4. CasOrienteimportant pour l'indicateur 2.1.2

L'indicateur 2.1.2 mesure le "nombre de cas d'enfants mendiants orientés". Il n'y a pas de table pour tracer les orientations (vers GUPS, services sociaux, etc.) distinctement des accompagnements.

5. MicroSubvention / PlanAffaires — à externaliser

Ces données sont enfouies dans ParcoursInsertion sous forme de champs scalaires. Vu que les indicateurs 3.1.4.2, 3.1.4.3 et 3.1.4.4 les mesurent séparément, ils méritent des entités distinctes pour un suivi fin.


⚠️ Tables redondantes ou en surplomb

1. ActionAudit et RessourceAuditinutiles en l'état

Ces deux tables ne sont pas reliées à AuditLog. Elles flottent sans usage. Soit il faut les relier (remplacer les champs action: String et ressource: String de AuditLog par des FK), soit les supprimer.

2. Tuteur vs Parentredondance structurelle

Les deux tables ont une structure quasi-identique (nom, prénom, téléphone, commune, genre, niveau instruction, activité, participation sensibilisation). La seule différence est TypeLienTuteur vs TypeLienParent. Il vaudrait mieux une seule table PersonneProche avec un champ typeRelation (enum fusionné), et une relation vers Enfant pour lever l'ambiguïté.

De plus, Enfant a un champ tuteurId (FK non déclarée dans le schéma Prisma — bug : aucune relation @relation n'existe vers Tuteur).

3. FormationSensibilisation.animateurIdréférence orpheline

Le commentaire dit "PersonneRessource qui anime" mais le champ est un String? sans @relation. Soit c'est une FK vers PersonneRessource, soit vers Utilisateur. À corriger.


🔧 Incohérences à corriger

Problème Localisation Correction
Enfant.tuteurId déclaré mais sans @relation ni table liée model Enfant Ajouter tuteur Tuteur? @relation(...)
ParticipationFormation.participantId est une String non typée model ParticipationFormation Créer un polymorphisme ou une union via une table Participant
EtudeDiagnostique sans @map(...) ni relation vers Commune (utilise String[]) model EtudeDiagnostique Remplacer communes String[] par une table de liaison
SupportCommunication sans createdAt, idUtilisateur, @map plusieurs modèles de la section additionnelle Harmoniser avec le reste du schéma
SessionParoleJeunes non reliée aux Enfant participants model SessionParoleJeunes Ajouter une table ParticipationSession

📋 Cas d'utilisation par domaine métier

Domaine 1 — Identification & enregistrement des ESM

  • Enregistrer un enfant identifié avec son dossier individuel complet
  • Rattacher un enfant à son maître coranique et à son tuteur/parent
  • Suivre le statut d'enregistrement (ACTIF, SORTI, PERDU_DE_VUE)

Domaine 2 — Prise en charge holistique

  • Créer un plan de prise en charge (alimentaire, psychologique, sanitaire, alphabétisation)
  • Enregistrer les séances de suivi avec observations
  • Mesurer le taux de couverture des 4 volets par enfant

Domaine 3 — Insertion socioprofessionnelle

  • Inscrire un enfant en formation professionnelle (courte/longue durée)
  • Enregistrer le plan d'affaires et la micro-subvention AGR
  • Suivre l'obtention du CQM et l'installation effective

Domaine 4 — Formation & sensibilisation des acteurs

  • Planifier une formation pour maîtres coraniques, leaders religieux ou acteurs communaux
  • Enregistrer les présences et calculer les taux de participation
  • Tracer l'engagement post-formation des maîtres coraniques comme acteurs communautaires

Domaine 5 — Comités villageois de veille

  • Créer ou dynamiser un comité villageois
  • Enregistrer les membres, leurs formations reçues et leurs rôles
  • Journaliser les réunions, le nombre de présents et les décisions actées

Domaine 6 — Cadres de concertation

  • Planifier les sessions trimestrielles (pilotage), semestrielles (communal) et annuelles (interdépartemental)
  • Enregistrer le taux de participation et les décisions appliquées

Domaine 7 — Suivi-évaluation (M&E) ← non couvert actuellement

  • Saisir les valeurs mesurées pour chaque IOV par période
  • Comparer automatiquement les valeurs réelles aux cibles
  • Générer un tableau de bord des indicateurs par résultat et par objectif spécifique

Domaine 8 — Supports de communication & médias

  • Gérer la production des boîtes à images, affiches, roll-up et banderoles
  • Tracer leur distribution par commune et type de destinataire
  • Enregistrer les émissions radio avec contrat et thème

Domaine 9 — Sécurité & administration système

  • Authentification à deux facteurs, gestion des sessions, audit des actions

Synthèse

Le modèle est solide pour la gestion opérationnelle (enfants, accompagnements, formations, comités). La lacune la plus critique est l'absence totale de module M&E pour saisir et suivre les indicateurs — ce qui est pourtant le mécanisme central d'un cadre logique. Les redondances Tuteur/Parent et les FK orphelines (tuteurId, animateurId) sont à corriger avant toute migration.