Aller au contenu

Rapport — Extension module Pilotage : TypeIndicateur + désagrégation H/F

Date : 2026-06-21 à 07h50 Périmètre : ProjetESM — module Pilotage (backend + frontend) Objectif : Exploiter l'analyse des 31 indicateurs (20260621_0150_analyse-indicateurs-type-desagregation.md) pour enrichir le module Pilotage existant avec la notion de type d'indicateur et de désagrégation par genre.


1. Contexte

L'analyse préalable a classé les 31 indicateurs du projet ESM en trois catégories :

Type Nb Description
COMPTAGE 20 Entiers (personnes, sessions, supports…)
TAUX 9 Proportion 0–1 (taux de participation, etc.)
TEXTE 2 Référence document / lien

19 indicateurs nécessitent une désagrégation Homme/Femme (personnes directement concernées). 12 ne le sont pas (objets, structures, séances).


2. Modifications Prisma

Fichier : BackEnd/prisma/schema.prisma

enum TypeIndicateur {
  COMPTAGE
  TAUX
  TEXTE
}

Modèle IndicateurSuivi — champs ajoutés : - typeIndicateur TypeIndicateur @default(COMPTAGE) - desagregationGenre Boolean @default(false) - cibleHomme String? - cibleFemme String?

Modèle MesureIndicateur — champs ajoutés : - valeurNumerique Float? - valeurHomme Float? - valeurFemme Float?

Commande exécutée : npx prisma db push ✅ (DB synchronisée en 100ms, Prisma Client régénéré)


3. Seed des 31 indicateurs

Fichier créé : BackEnd/prisma/seed-indicateurs.ts

Upsert sur le champ code (unique) → idempotent, sans doublons.

Chaque indicateur est rattaché à son activité (par ID DB) avec : - typeIndicateur correct (COMPTAGE / TAUX / TEXTE) - desagregationGenre (true/false) - valeurCible quand définie - unite (personnes, séances, comités, %)

Résultat : 31 indicateurs upsertés ✅


4. Modifications backend

4.1 Domain

Fichier Modification
domain/types/PilotageDTO.ts Type TypeIndicateur, nouveaux champs sur IndicateurSuiviDTO, MesureIndicateurDTO, DonneesCreerIndicateur, DonneesModifierIndicateur, DonneesSaisirMesure, IndicateurAvecMesuresDTO, MesureBulkItem
domain/interfaces/repositories/IIndicateurSuiviRepository.ts DonneesCreationIndicateur et DonneesModificationIndicateur étendus
domain/interfaces/repositories/IMesureIndicateurRepository.ts DonneesCreationMesure étendu

4.2 Infrastructure — Schémas Zod

Fichier : infrastructure/schemas/zod/pilotage.schemas.ts

  • Ajout de TypeIndicateurSchema = z.enum(['COMPTAGE', 'TAUX', 'TEXTE'])
  • CreerIndicateurSchema : typeIndicateur, desagregationGenre, cibleHomme, cibleFemme
  • ModifierIndicateurSchema : idem
  • SaisirMesureSchema : valeurNumerique, valeurHomme, valeurFemme

4.3 Infrastructure — Repositories Prisma

Fichier Modification
IndicateurSuiviRepositoryPrisma.ts creer() et modifier() passent les nouveaux champs ; mapToDTO() les retourne
MesureIndicateurRepositoryPrisma.ts Upsert (create + update) et mapToDTO() incluent valeurNumerique/Homme/Femme
ActiviteRepositoryPrisma.ts listerAvecMesuresPourAgent() expose typeIndicateur, desagregationGenre, cibleHomme, cibleFemme dans IndicateurAvecMesuresDTO

4.4 Application — Use Cases

Fichier Modification
CreerIndicateurUseCase.ts Passe typeIndicateur, desagregationGenre, cibleHomme, cibleFemme au repository
ModifierIndicateurUseCase.ts Idem
SaisirMesureUseCase.ts Passe valeurNumerique, valeurHomme, valeurFemme au repository
SaisirMesuresParActiviteUseCase.ts Passe valeurHomme, valeurFemme par item dans la boucle bulk

Backend TypeScript : 0 erreur ✅


5. Modifications frontend

5.1 DTOs

Fichier : FrontEnd/src/Modules/pilotage/application/dto/dtos.ts

  • Type TypeIndicateur = 'COMPTAGE' | 'TAUX' | 'TEXTE'
  • IndicateurDTO : typeIndicateur, desagregationGenre, cibleHomme, cibleFemme
  • MesureDTO : valeurNumerique, valeurHomme, valeurFemme
  • CreateIndicateurForm / UpdateIndicateurForm : nouveaux champs
  • IndicateurAvecMesuresDTO : typeIndicateur, desagregationGenre, cibleHomme, cibleFemme
  • MesureBulkItem : valeurHomme, valeurFemme

5.2 PilotagePage.tsx

IndicateurFormModal — nouveaux champs : - Sélecteur typeIndicateur (Comptage / Taux / Texte) - Case à cocher desagregationGenre - Champs cibleHomme / cibleFemme (conditionnels, visibles si désagrégation activée)

ModalSaisieActivite — saisie adaptative :

Condition Rendu
typeIndicateur === 'TEXTE' Input texte libre (titre ou lien document)
desagregationGenre === true Grille H / F + champ Total calculé automatiquement (H+F)
COMPTAGE sans désagrégation Input numérique entier (step=1)
TAUX sans désagrégation Input numérique décimal (step=0.01, max=1), placeholder Ex : 0.75 (= 75%)

Les valeurs H et F sont transmises à l'API via valeurHomme / valeurFemme dans MesureBulkItem.

Frontend TypeScript : 0 erreur ✅


6. Chaîne de validation complète

Formulaire (PilotagePage)
  → MesureBulkItem { valeur, valeurHomme?, valeurFemme? }
  → PilotageRepository.saisirMesuresParActivite() — POST JSON
  → SaisirMesuresParActiviteUseCase (backend)
  → DonneesCreationMesure { valeur, valeurHomme, valeurFemme }
  → MesureIndicateurRepositoryPrisma.saisir() — upsert Prisma
  → DB : MesureIndicateur { valeur, valeurNumerique, valeurHomme, valeurFemme }

7. Fichiers créés ou modifiés

Créés

  • BackEnd/prisma/seed-indicateurs.ts

Modifiés (backend)

  • BackEnd/prisma/schema.prisma
  • BackEnd/src/Modules/Pilotage/domain/types/PilotageDTO.ts
  • BackEnd/src/Modules/Pilotage/domain/interfaces/repositories/IIndicateurSuiviRepository.ts
  • BackEnd/src/Modules/Pilotage/domain/interfaces/repositories/IMesureIndicateurRepository.ts
  • BackEnd/src/Modules/Pilotage/infrastructure/schemas/zod/pilotage.schemas.ts
  • BackEnd/src/Modules/Pilotage/infrastructure/repositories/prisma/IndicateurSuiviRepositoryPrisma.ts
  • BackEnd/src/Modules/Pilotage/infrastructure/repositories/prisma/MesureIndicateurRepositoryPrisma.ts
  • BackEnd/src/Modules/Pilotage/infrastructure/repositories/prisma/ActiviteRepositoryPrisma.ts
  • BackEnd/src/Modules/Pilotage/application/usecases/CreerIndicateurUseCase.ts
  • BackEnd/src/Modules/Pilotage/application/usecases/ModifierIndicateurUseCase.ts
  • BackEnd/src/Modules/Pilotage/application/usecases/SaisirMesureUseCase.ts
  • BackEnd/src/Modules/Pilotage/application/usecases/SaisirMesuresParActiviteUseCase.ts

Modifiés (frontend)

  • FrontEnd/src/Modules/pilotage/application/dto/dtos.ts
  • FrontEnd/src/Modules/pilotage/presentation/pages/PilotagePage.tsx