Contexte business
La Représentation Équilibrée (repeq, loi Rixain du 24/12/2021, art. L.1142-11 du Code du travail) impose aux entreprises de >= 1000 salariés (pendant 3 exercices consécutifs) de publier annuellement les écarts de représentation femmes/hommes parmi :
- les cadres dirigeants (art. L.3111-2)
- les membres des instances dirigeantes (art. L.23-12-1)
La V1 dispose déjà d'un parcours repeq fonctionnel mais disjoint de la déclaration d'index (URLs séparées, recherche publique dédiée, UX vieillissante, nombreux écarts RGAA recensés lors de l'audit Figma). La V2 unifie l'expérience : repeq devient une déclaration de premier rang accessible depuis mon-espace, dans le même pattern UX que la déclaration d'index rémunération V2 (panneau latéral d'entrée, funnel /etape/[step], persistance DB, transmission avec email + PDF).
Cette epic porte la feature complète côté déclaration. La recherche publique et la page info "À propos des écarts" sont hors scope pour cette itération.
Parcours utilisateur complet
- Entrée — L'utilisateur connecté (ProConnect) consulte
mon-espace. Pour chaque entreprise rattachée, un panneau latéral "Représentation équilibrée" (même pattern que le panneau rémunération) expose l'état courant (non commencée / en cours / transmise / modifiable jusqu'au JJ/MM/AAAA). Clic sur "Déclarer" / "Reprendre" / "Modifier" → entrée dans le funnel.
- Vérification d'assujettissement (automatique, sans écran) — Au démarrage du funnel, contrôle auto sur les données entreprise :
- Effectif >=
REPEQ_MIN_HEADCOUNT (par défaut 1000)
- Nombre d'exercices consécutifs d'assujettissement >=
REPEQ_MIN_CONSECUTIVE_YEARS (par défaut 3)
- Si NON assujettie → écran bloquant avec message explicatif, lien retour
mon-espace, pas de possibilité de forcer la déclaration
- Si assujettie → l'écran de vérification est skippé, entrée directe à l'étape 1
- Étape 1 — Période de référence — Saisie de la date de fin de la période (DatePicker DSFR accessible, format attendu annoncé au lecteur d'écran). Mise en exergue de la période choisie.
- Étape 2 — Écarts cadres dirigeants — Deux cas :
- Calculable : saisie du nombre de femmes / nombre d'hommes → calcul automatique des pourcentages, annoncé au lecteur d'écran
- Non calculable : choix d'un motif (libellés repris tels quels de master)
- Étape 3 — Écarts instances dirigeantes — Mêmes cas que l'étape 2 (calculable / non calculable, libellés master). Le texte statique remplace l'ancienne liste déroulante à 1 choix.
- Étape 4 — Récap & transmission — Récapitulatif + date et modalité de publication intégrées au récap (pas d'exergue redondante). Bouton "Transmettre" unique (max 1 primaire par page). Liens "Modifier" contextuels pour chaque section avec label explicite.
- Transmission — Accusé de réception par email + PDF téléchargeable (migration techno V2, contenu identique master). Retour
mon-espace avec statut "Transmise - modifiable jusqu'au JJ/MM/AAAA".
- Modification avant deadline — Accès direct depuis le panneau latéral
mon-espace (sans devoir rouvrir le récap d'abord). Deadline = repeqModificationDeadline (configurable, même pattern que decl1ModificationDeadline).
- Après deadline — Panneau latéral en lecture seule, bouton "Modifier" désactivé/absent.
- Consultation — Route
/representation-equilibree/[siren]/[year] permet à l'utilisateur connecté de consulter le récap public de ses déclarations passées (lecture seule). Recherche publique hors scope.
Scénarios PO
S1 — Entrée depuis mon-espace (entreprise assujettie)
- Étant donné un utilisateur connecté avec une entreprise assujettie et aucune déclaration en cours
- Quand il clique sur "Déclarer" dans le panneau latéral "Représentation équilibrée"
- Alors il est redirigé vers l'étape 1 du funnel (l'écran d'assujettissement est skippé)
S2 — Blocage entreprise non-assujettie (< 1000 salariés)
- Étant donné un utilisateur connecté avec une entreprise <
REPEQ_MIN_HEADCOUNT salariés
- Quand il tente d'entrer dans le funnel repeq
- Alors un écran bloquant affiche un message explicatif avec les seuils, aucun bouton pour forcer la déclaration, lien retour vers
mon-espace
S3 — Blocage entreprise non-assujettie (< 3 exercices consécutifs)
- Étant donné un utilisateur connecté avec une entreprise >=
REPEQ_MIN_HEADCOUNT mais < REPEQ_MIN_CONSECUTIVE_YEARS exercices consécutifs
- Quand il tente d'entrer dans le funnel repeq
- Alors le même écran bloquant s'affiche avec le message adapté
S4 — Étape 1 : saisie période de référence (DatePicker accessible)
- Étant donné l'utilisateur à l'étape 1
- Quand il ouvre le DatePicker DSFR pour la date de fin
- Alors le lecteur d'écran annonce le format attendu (JJ/MM/AAAA)
- Et après saisie, la période choisie est mise en exergue
- Et "Continuer" le mène à l'étape 2
S5 — Étape 2 : écarts cadres dirigeants (cas calculable)
- Étant donné l'utilisateur à l'étape 2, cas "calculable"
- Quand il saisit nombre de femmes et nombre d'hommes
- Alors les % calculés s'affichent et sont annoncés au lecteur d'écran via
aria-live
- Et les champs % sont des champs calculés (lecture seule mais focusables)
S6 — Étape 2 : écarts cadres dirigeants (cas non calculable)
- Étant donné l'utilisateur à l'étape 2
- Quand il coche "non calculable" et sélectionne un motif (libellés master)
- Alors les champs de saisie F/H sont masqués et "Continuer" le mène à l'étape 3
S7 — Étape 3 : écarts instances dirigeantes (cas calculable)
- Mêmes règles que S5, appliquées au MID
- Le texte statique remplace l'ancienne liste déroulante à 1 choix
S8 — Étape 3 : écarts instances dirigeantes (cas non calculable)
- Mêmes règles que S6, appliquées au MID
S9 — Étape 4 : récap & transmission
- Étant donné l'utilisateur ayant rempli les étapes 1 à 3
- Quand il arrive sur l'étape 4
- Alors il voit le récap complet, avec la date et la modalité de publication intégrées au récap
- Et chaque section a un lien "Modifier" avec label explicite
- Et la hiérarchie de headings est correcte (
<h3> pour les sections)
- Et un seul bouton primaire "Transmettre" est présent
S10 — Transmission : accusé email + PDF
- Étant donné l'utilisateur ayant cliqué "Transmettre"
- Quand la transmission réussit
- Alors un email d'accusé de réception est envoyé à l'utilisateur
- Et un PDF récap est téléchargeable depuis la page de confirmation
- Et le statut de la déclaration passe à "Transmise" dans
mon-espace
- Note : contenu PDF identique à master, génération via la techno V2
S11 — Modification avant deadline (accès direct)
- Étant donné une déclaration transmise, deadline
repeqModificationDeadline non dépassée
- Quand l'utilisateur clique "Modifier" dans le panneau latéral
mon-espace
- Alors il entre directement à l'étape 1 du funnel (sans passer par le récap)
- Et ses réponses précédentes sont pré-remplies
S12 — Blocage modification après deadline
- Étant donné une déclaration transmise, deadline dépassée
- Quand l'utilisateur consulte son panneau latéral
mon-espace
- Alors le statut affiche "Transmise" en lecture seule, aucun bouton "Modifier"
- Et toute tentative d'accès direct au funnel redirige vers la page récap en lecture seule
S13 — Consultation récap (utilisateur connecté, sa propre déclaration)
- Étant donné un utilisateur connecté ayant une déclaration transmise pour une année N
- Quand il navigue vers
/representation-equilibree/[siren]/N
- Alors il voit le récap en lecture seule, avec option "Télécharger le PDF"
S14 — Accessibilité champs de calcul % (critique RGAA N°37)
- Étant donné un lecteur d'écran actif
- Quand l'utilisateur saisit nombre F / nombre H à l'étape 2 ou 3
- Alors les pourcentages calculés sont annoncés via
aria-live ou équivalent
- Et les champs % sont focusables au clavier (accessibles à la lecture)
- Et les libellés sont reformulés pour lever l'ambiguïté
Points d'attention RGAA pour architect (à intégrer aux tickets)
Global (tous tickets UI)
- En-tête connectée (N°3bis) — Header DSFR V2 standard avec session ProConnect
- Info bulle pictogramme non DSFR (N°6) — composant tooltip DSFR
- Liens nouvelle fenêtre sans
title (N°30) — <NewTabNotice /> systématiquement
- Champs obligatoires harmonisation (N°34) — convention DSFR unique
Étape 1
- Mise en exergue période (N°8) — composant callout/highlight DSFR après saisie
- DatePicker DSFR (N°9, N°36) — format attendu annoncé au lecteur d'écran (bloquant a11y)
Étape 2 + Étape 3
- Champs calcul % H/F (N°37 CRITIQUE) —
aria-live, champs calculés focusables, libellés reformulés
- Liste déroulante MID à 1 choix (N°22) — texte statique à l'étape 3
Étape 4 (récap)
- Carte récap — typo & hiérarchie (N°10, N°11, N°12, N°13, N°13bis) — convention DSFR
- Sémantique
<p> → <h3> (N°39) — sections du récap avec headings
- Mise en exergue récap à supprimer (N°16) — intégrer date/modalité publication dans le récap
- Liens "Modifier" vides (N°40) — labels explicites
- Boutons primaires trop nombreux (N°14bis P2) — max 1 primaire, "Transmettre" seul
- Bouton "Modifier" trop bas + accès via récap (N°15, N°17) — accès direct depuis
mon-espace
- Bouton télécharger récap bug (N°17bis P2) — vérifier PDF
Bandeau global
- Bandeau d'alerte marges/titres (N°5, N°18, N°33) — marges DSFR
fr-alert standard
Contraintes techniques
- Authentification obligatoire —
protectedProcedure sur toutes les mutations ; SIREN lu en session (ProConnect)
- Année courante — via
getCurrentYear() / getRepeqYear() depuis ~/modules/domain
- Seuils d'assujettissement configurables — constantes
REPEQ_MIN_HEADCOUNT (1000) et REPEQ_MIN_CONSECUTIVE_YEARS (3) dans ~/modules/domain/constants.ts (à trancher par architect selon les patterns existants)
- Deadline de modification configurable —
repeqModificationDeadline, même pattern que decl1ModificationDeadline
- Nouvelle table DB — à trancher par architect, indexée
(siren, year) unique
- Zod schemas — dans
~/modules/representationEquilibree/schemas.ts, partagés forms + tRPC
- Pattern funnel — même que rémunération V2 :
/representation-equilibree/etape/[step], DeclarationLayout, persistance à chaque étape
- Audit logging — nouvelles mutations →
PROCEDURE_TO_ACTION + AUDIT_ACTIONS.*
- PDF V2 — migration techno : contenu identique master, génération via techno V2 (à trancher par architect selon ce qui est en place pour rémunération)
- Email d'accusé — template V2 à créer, même techno Brevo que rémunération
Référence à l'audit Figma
L'audit RGAA/UX des écrans repeq V1 a été réalisé sur Figma : https://www.figma.com/board/1wdScpvL7dgzl7hvOmxQ8e/AUDIT-DSFR_EGAPRO-Repr%C3%A9sentation-%C3%A9quilibr%C3%A9e?node-id=0-1&p=f&t=VRtJtn576cMuCr9i-0
Cet audit recense 23 points DSFR + 13 a11y + 3 UX, filtrés pour ne garder que ceux pertinents après la nouvelle archi V2. Cet audit est la source de vérité pour tous les écarts RGAA — chaque ticket UI référencera les N° correspondants.
Contexte business
La Représentation Équilibrée (repeq, loi Rixain du 24/12/2021, art. L.1142-11 du Code du travail) impose aux entreprises de >= 1000 salariés (pendant 3 exercices consécutifs) de publier annuellement les écarts de représentation femmes/hommes parmi :
La V1 dispose déjà d'un parcours repeq fonctionnel mais disjoint de la déclaration d'index (URLs séparées, recherche publique dédiée, UX vieillissante, nombreux écarts RGAA recensés lors de l'audit Figma). La V2 unifie l'expérience : repeq devient une déclaration de premier rang accessible depuis
mon-espace, dans le même pattern UX que la déclaration d'index rémunération V2 (panneau latéral d'entrée, funnel/etape/[step], persistance DB, transmission avec email + PDF).Cette epic porte la feature complète côté déclaration. La recherche publique et la page info "À propos des écarts" sont hors scope pour cette itération.
Parcours utilisateur complet
mon-espace. Pour chaque entreprise rattachée, un panneau latéral "Représentation équilibrée" (même pattern que le panneau rémunération) expose l'état courant (non commencée / en cours / transmise / modifiable jusqu'au JJ/MM/AAAA). Clic sur "Déclarer" / "Reprendre" / "Modifier" → entrée dans le funnel.REPEQ_MIN_HEADCOUNT(par défaut 1000)REPEQ_MIN_CONSECUTIVE_YEARS(par défaut 3)mon-espace, pas de possibilité de forcer la déclarationmon-espaceavec statut "Transmise - modifiable jusqu'au JJ/MM/AAAA".mon-espace(sans devoir rouvrir le récap d'abord). Deadline =repeqModificationDeadline(configurable, même pattern quedecl1ModificationDeadline)./representation-equilibree/[siren]/[year]permet à l'utilisateur connecté de consulter le récap public de ses déclarations passées (lecture seule). Recherche publique hors scope.Scénarios PO
S1 — Entrée depuis mon-espace (entreprise assujettie)
S2 — Blocage entreprise non-assujettie (< 1000 salariés)
REPEQ_MIN_HEADCOUNTsalariésmon-espaceS3 — Blocage entreprise non-assujettie (< 3 exercices consécutifs)
REPEQ_MIN_HEADCOUNTmais <REPEQ_MIN_CONSECUTIVE_YEARSexercices consécutifsS4 — Étape 1 : saisie période de référence (DatePicker accessible)
S5 — Étape 2 : écarts cadres dirigeants (cas calculable)
aria-liveS6 — Étape 2 : écarts cadres dirigeants (cas non calculable)
S7 — Étape 3 : écarts instances dirigeantes (cas calculable)
S8 — Étape 3 : écarts instances dirigeantes (cas non calculable)
S9 — Étape 4 : récap & transmission
<h3>pour les sections)S10 — Transmission : accusé email + PDF
mon-espaceS11 — Modification avant deadline (accès direct)
repeqModificationDeadlinenon dépasséemon-espaceS12 — Blocage modification après deadline
mon-espaceS13 — Consultation récap (utilisateur connecté, sa propre déclaration)
/representation-equilibree/[siren]/NS14 — Accessibilité champs de calcul % (critique RGAA N°37)
aria-liveou équivalentPoints d'attention RGAA pour architect (à intégrer aux tickets)
Global (tous tickets UI)
title(N°30) —<NewTabNotice />systématiquementÉtape 1
Étape 2 + Étape 3
aria-live, champs calculés focusables, libellés reformulésÉtape 4 (récap)
<p>→<h3>(N°39) — sections du récap avec headingsmon-espaceBandeau global
fr-alertstandardContraintes techniques
protectedProceduresur toutes les mutations ; SIREN lu en session (ProConnect)getCurrentYear()/getRepeqYear()depuis~/modules/domainREPEQ_MIN_HEADCOUNT(1000) etREPEQ_MIN_CONSECUTIVE_YEARS(3) dans~/modules/domain/constants.ts(à trancher par architect selon les patterns existants)repeqModificationDeadline, même pattern quedecl1ModificationDeadline(siren, year)unique~/modules/representationEquilibree/schemas.ts, partagés forms + tRPC/representation-equilibree/etape/[step],DeclarationLayout, persistance à chaque étapePROCEDURE_TO_ACTION+AUDIT_ACTIONS.*Référence à l'audit Figma
L'audit RGAA/UX des écrans repeq V1 a été réalisé sur Figma : https://www.figma.com/board/1wdScpvL7dgzl7hvOmxQ8e/AUDIT-DSFR_EGAPRO-Repr%C3%A9sentation-%C3%A9quilibr%C3%A9e?node-id=0-1&p=f&t=VRtJtn576cMuCr9i-0
Cet audit recense 23 points DSFR + 13 a11y + 3 UX, filtrés pour ne garder que ceux pertinents après la nouvelle archi V2. Cet audit est la source de vérité pour tous les écarts RGAA — chaque ticket UI référencera les N° correspondants.