RGAA Audit Report - SocialGouv/egapro GitHub Wiki


Rapport RGAA — Egapro

Dernier audit : 2026-04-15 | Commit : 940034d | URL : https://egapro-alpha.ovh.fabrique.social.gouv.fr | Pages : 12


Résumé

Sévérité Violations
🔴 Critique 0
🟠 Sérieuse 0
🟡 Modérée 10
🔵 Mineure 4
Total 14

2 pages sans aucune violation : Accueil (/) et Connexion (/login).


Actions prioritaires

1. 🟡 region — Contenu hors landmarks (7 pages)

Règle axe-core : region | Impact : Modéré | WCAG : 2.4.1 | RGAA : Thème 12 (Navigation)

Pages concernées :

  • Déclaration — Introduction (/declaration-remuneration/etape/1)
  • Déclaration — Étape 1 (/declaration-remuneration/etape/1)
  • Déclaration — Étape 2 (/declaration-remuneration/etape/2)
  • Déclaration — Étape 3 (/declaration-remuneration/etape/3)
  • Déclaration — Étape 4 (/declaration-remuneration/etape/4)
  • Déclaration — Étape 5 (/declaration-remuneration/etape/5)
  • Déclaration — Étape 6 (/declaration-remuneration/etape/6)

Élément CSS ciblé :

.fr-py-3w > .fr-container > .fr-grid-row--middle.fr-grid-row--gutters.fr-grid-row

Description : La grille de contenu principal du formulaire de déclaration n'est pas encapsulée dans un landmark ARIA (<main>, <nav>, <section aria-label="...">, etc.). Les lecteurs d'écran ne peuvent pas naviguer directement vers ce contenu.

Correction suggérée : S'assurer que le contenu de chaque étape est bien enfant d'un <main id="content"> (cible du lien d'évitement DSFR). Le DSFR génère automatiquement un lien "Aller au contenu" (#content) dans le layout — il faut s'assurer que l'élément .fr-py-3w est à l'intérieur du <main id="content"> et non dans un <div> non sémantique.

<!-- Avant (problématique) -->
<div class="fr-py-3w">
  <div class="fr-container">
    <div class="fr-grid-row fr-grid-row--middle fr-grid-row--gutters">
      <!-- contenu de l'étape -->
    </div>
  </div>
</div>

<!-- Après (conforme) -->
<main id="content" class="fr-py-3w">
  <div class="fr-container">
    <div class="fr-grid-row fr-grid-row--middle fr-grid-row--gutters">
      <!-- contenu de l'étape -->
    </div>
  </div>
</main>

2. 🔵 empty-table-header — En-têtes de tableau vides (4 pages)

Règle axe-core : empty-table-header | Impact : Mineur | WCAG : 1.3.1 | RGAA : Thème 5 (Tableaux)

Pages concernées :

  • Déclaration — Introduction (/declaration-remuneration/etape/1) — th:nth-child(1)
  • Déclaration — Étape 1 (/declaration-remuneration/etape/1) — th:nth-child(1)
  • Déclaration — Étape 4 (/declaration-remuneration/etape/4) — 2 tableaux de quartiles (Step4QuartileDistribution)
  • Déclaration — Étape 5 (/declaration-remuneration/etape/5) — .Step5EmployeeCategories-module-scss-module__-_Cola__nameColumnHeader

Description : Des éléments <th> dans les tableaux de l'application ne contiennent pas de texte perceptible par les lecteurs d'écran.

Correction suggérée : Selon la documentation DSFR Tableau, utiliser un <span class="fr-sr-only"> pour fournir un texte accessible hors-écran :

<thead>
  <tr>
    <th scope="col">
      <span class="fr-sr-only">Catégorie</span>
    </th>
    <th scope="col">Valeur 1</th>
    <th scope="col">Valeur 2</th>
  </tr>
</thead>

3. 🟡 page-has-heading-one — Absence de titre h1 (2 pages)

Règle axe-core : page-has-heading-one | Impact : Modéré | WCAG : 2.4.6 | RGAA : Thème 9 (Structure de l'information)

Pages concernées :

  • Mon espace (/mon-espace)
  • Mes entreprises (/mon-espace/mes-entreprises)

Description : Ces pages ne contiennent pas de titre de niveau 1 (<h1>).

Correction suggérée :

// Mon espace
<h1 className="fr-h1">Mon espace</h1>

// Mes entreprises
<h1 className="fr-h1">Mes entreprises</h1>

4. 🟡 heading-order — Hiérarchie des titres invalide (1 page)

Règle axe-core : heading-order | Impact : Modéré | WCAG : 2.4.6 | RGAA : Thème 9 (Structure de l'information)

Pages concernées :

  • 404 Not Found (/page-inexistante)

Élément ciblé :

.fr-col-md-4.fr-col-12:nth-child(1) > .fr-tile.fr-tile--horizontal.fr-tile--sm > .fr-tile__body > .fr-tile__content > h3

Description : Un <h3> apparaît dans les tuiles de la page 404 sans <h2> précédent (saut h1 → h3).

Correction suggérée :

// Ajouter un h2 intermédiaire ou utiliser titleAs="h2" sur les tuiles DSFR
<Tile titleAs="h2" ... />

Détail par page

Accueil (/)

✅ 44 règles passées | ⚠️ 1 incomplète | ❌ 0 violations

Aucune violation détectée.


Connexion (/login)

✅ 40 règles passées | ⚠️ 1 incomplète | ❌ 0 violations

Aucune violation détectée.


404 Not Found (/page-inexistante)

✅ 40 règles passées | ⚠️ 1 incomplète | ❌ 1 violation

Règle Sévérité WCAG RGAA Élément Description Correction suggérée
heading-order 🟡 Modérée 2.4.6 Thème 9 .fr-tile__content > h3 Saut de niveau h1→h3 titleAs="h2" sur les tuiles DSFR

Déclaration — Introduction (/declaration-remuneration/etape/1)

✅ 47 règles passées | ⚠️ 1 incomplète | ❌ 2 violations

Règle Sévérité WCAG RGAA Élément Description Correction suggérée
empty-table-header 🔵 Mineure 1.3.1 Thème 5 th:nth-child(1) En-tête sans texte accessible <span class="fr-sr-only">Label</span> dans le <th>
region 🟡 Modérée 2.4.1 Thème 12 .fr-grid-row--middle.fr-grid-row--gutters Contenu hors landmark Encapsuler dans <main id="content">

Déclaration — Étape 1 (/declaration-remuneration/etape/1)

✅ 47 règles passées | ⚠️ 1 incomplète | ❌ 2 violations

Règle Sévérité WCAG RGAA Élément Description Correction suggérée
empty-table-header 🔵 Mineure 1.3.1 Thème 5 th:nth-child(1) En-tête sans texte accessible <span class="fr-sr-only">Label</span> dans le <th>
region 🟡 Modérée 2.4.1 Thème 12 .fr-grid-row--middle.fr-grid-row--gutters Contenu hors landmark Encapsuler dans <main id="content">

Déclaration — Étape 2 (/declaration-remuneration/etape/2)

✅ 47 règles passées | ⚠️ 1 incomplète | ❌ 1 violation

Règle Sévérité WCAG RGAA Élément Description Correction suggérée
region 🟡 Modérée 2.4.1 Thème 12 .fr-grid-row--middle.fr-grid-row--gutters Contenu hors landmark Encapsuler dans <main id="content">

Déclaration — Étape 3 (/declaration-remuneration/etape/3)

✅ 47 règles passées | ⚠️ 1 incomplète | ❌ 1 violation

Règle Sévérité WCAG RGAA Élément Description Correction suggérée
region 🟡 Modérée 2.4.1 Thème 12 .fr-grid-row--middle.fr-grid-row--gutters Contenu hors landmark Encapsuler dans <main id="content">

Déclaration — Étape 4 (/declaration-remuneration/etape/4)

✅ 47 règles passées | ⚠️ 1 incomplète | ❌ 2 violations

Règle Sévérité WCAG RGAA Élément Description Correction suggérée
empty-table-header 🔵 Mineure 1.3.1 Thème 5 Step4QuartileDistribution … th:nth-child(1) (×2) En-têtes vides tableaux quartiles <span class="fr-sr-only">Catégorie</span>
region 🟡 Modérée 2.4.1 Thème 12 .fr-grid-row--middle.fr-grid-row--gutters Contenu hors landmark Encapsuler dans <main id="content">

Déclaration — Étape 5 (/declaration-remuneration/etape/5)

✅ 48 règles passées | ⚠️ 1 incomplète | ❌ 2 violations

Règle Sévérité WCAG RGAA Élément Description Correction suggérée
empty-table-header 🔵 Mineure 1.3.1 Thème 5 .Step5EmployeeCategories…__nameColumnHeader En-tête colonne nom sans texte <span class="fr-sr-only">Nom de la catégorie</span>
region 🟡 Modérée 2.4.1 Thème 12 .fr-grid-row--middle.fr-grid-row--gutters Contenu hors landmark Encapsuler dans <main id="content">

Déclaration — Étape 6 (/declaration-remuneration/etape/6)

✅ 39 règles passées | ⚠️ 1 incomplète | ❌ 1 violation

Règle Sévérité WCAG RGAA Élément Description Correction suggérée
region 🟡 Modérée 2.4.1 Thème 12 .fr-grid-row--gutters.fr-grid-row--middle Contenu hors landmark Encapsuler dans <main id="content">

Mon espace (/mon-espace)

✅ 43 règles passées | ⚠️ 1 incomplète | ❌ 1 violation

Règle Sévérité WCAG RGAA Élément Description Correction suggérée
page-has-heading-one 🟡 Modérée 2.4.6 Thème 9 html Page sans <h1> Ajouter <h1 className="fr-h1">Mon espace</h1>

Mes entreprises (/mon-espace/mes-entreprises)

✅ 41 règles passées | ⚠️ 1 incomplète | ❌ 1 violation

Règle Sévérité WCAG RGAA Élément Description Correction suggérée
page-has-heading-one 🟡 Modérée 2.4.6 Thème 9 html Page sans <h1> Ajouter <h1 className="fr-h1">Mes entreprises</h1>

Méthodologie

  • Outil : axe-core 4.11 via Playwright
  • Moteur : Playwright 1.59.1
  • Pages auditées : 12 (3 publiques + 9 authentifiées)
  • Norme de référence : RGAA 4.1 / WCAG 2.1 AA
  • Incomplètes : 1 règle incomplète par page (vérification manuelle requise pour les contrastes de couleur dynamiques)

Rapport généré automatiquement le 2026-04-15 depuis le commit 940034d.

⚠️ **GitHub.com Fallback** ⚠️