Méthodologie

D'où vient le score de risque de procédure.

Chaque résultat dans votre rapport de scan porte un score de 0 à 100. Cette page explique précisément comment ce score est calculé, quelles sources il utilise, et — point crucial — ce qu'il ne peut pas vous dire.

Le score en un paragraphe

Un heuristique de priorisation, pas un avis juridique.

Issu du croisement de trois corps de données : (1) bases de données de procédures 2025-2026, (2) analyse de la fréquence des mises en demeure, (3) la décision FTC d'avril 2025 contre AccessiBe. Mis à jour à chaque publication de rapport annuel ou de contentieux significatif.

Tranche de scoreSignification
90 – 100Cité verbatim de manière routinière dans les mises en demeure
70 – 89Présent dans > 40 % des plaintes destinées aux consommateurs
40 – 69Cité mais pas central dans la plupart des plaintes
0 – 39Règles techniques rarement invoquées dans les contentieux

Top 10 règles déclenchantes

Les règles axe-core que nous priorisons — et pourquoi.

Extraites de notre module de classement du risque interne, mis à jour à chaque publication annuelle de données.

ID de règleScoreWCAG SCNom en clairRaison de la citation
image-alt951.1.1Texte alternatif manquant sur les imagesViolation la plus citée dans les mises en demeure web 2025-2026 (ADA + EAA)
link-name902.4.4Texte de lien ambigu ou videDeuxième barrière la plus citée dans les rapports de plaignants utilisant un lecteur d'écran
button-name884.1.2Bouton sans libellé (paiement, panier, envoi de formulaire)Cité de façon récurrente dans les mises en demeure spécifiques au commerce électronique
color-contrast801.4.3Rapport de contraste insuffisant entre le texte et l'arrière-planRésultat automatisé le plus signalé dans les rapports d'experts côté plaignant
label781.3.1 / 4.1.2Champ de formulaire sans libellé programmatiqueCité dans les plaintes relatives aux barrières à la création de compte et au paiement
document-title602.4.2Titre de page manquant ou videCité dans les mises en demeure génériques ; moins central que les violations visuelles
html-has-lang553.1.1Attribut lang manquant sur l'élément HTMLCitation occasionnelle ; argument de mauvaise prononciation par les AT
page-has-heading-one501.3.1Page sans titre h1Présent dans les mises en demeure génériques ; rarement la demande principale
region451.3.6Contenu non contenu dans une région landmarkMentionné dans les plaintes mais rarement la barrière centrale
landmark-one-main451.3.1Page sans landmark main uniqueCitation accessoire ; schéma de navigation structurelle

L'écart de 25–57 %

Ce que les scans automatisés ne peuvent pas détecter.

Plusieurs études évaluées par des pairs, la documentation Deque et le rapport WebAIM Million indiquent de façon constante que les outils automatisés détectent 25 à 57 % des violations WCAG sur une page donnée. Les échecs restants nécessitent un jugement humain.

  • Complétude de la navigation au clavier

    Chaque élément interactif peut-il être atteint, actionné et quitté avec uniquement le clavier ? Les outils automatisés détectent le tabindex manquant mais ne peuvent pas vérifier le flux de navigation complet.

  • Qualité de la sortie du lecteur d'écran

    VoiceOver ou NVDA lit-il la page dans un ordre logique et compréhensible ? L'analyse du DOM peut signaler des rôles manquants mais ne peut pas tester l'expérience audio.

  • Pertinence du texte alternatif

    Les outils détectent le alt manquant (score 95 ci-dessus) mais ne peuvent pas juger si le alt présent est exact. « Image d'une chaussure rouge » est techniquement présent ; « Nike Air Max 90 rouge université » est pertinent.

  • Charge cognitive et langage clair

    Les orientations WCAG 3.2 sur le contenu compréhensible n'ont pas de signal automatisé.

  • Widgets interactifs personnalisés

    Carrousels, modales, sélecteurs de date et champs d'autocomplétion nécessitent des tests manuels au clavier et avec les AT pour vérifier le comportement des régions ARIA live.

  • Tests avec utilisateurs de technologies d'assistance

    Les utilisateurs réels de lecteurs d'écran, de commandes de switch, de contrôle vocal et de loupe révèlent des barrières qu'aucune analyse statique ne peut prédire.

Liste de contrôle pour la revue manuelle (incluse dans chaque PDF Defense)

  1. 01Navigation au clavier — tous les éléments interactifs accessibles et actionnables sans souris
  2. 02Indicateur de focus — anneau de focus visible sur tous les éléments focusés
  3. 03Test lecteur d'écran — NVDA/VoiceOver lit tout le contenu dans un ordre logique
  4. 04Sous-titres vidéo — toutes les vidéos pré-enregistrées ont des sous-titres précis
  5. 05Descriptions audio — toutes les vidéos pré-enregistrées ont une audiodescription ou une alternative textuelle
  6. 06Avertissements d'expiration — les sessions qui expirent donnent au moins 20 secondes d'avertissement
  7. 07Identification des erreurs — les erreurs de formulaire identifient le champ et décrivent le problème en texte
  8. 08Navigation cohérente — la nav apparaît dans le même ordre sur toutes les pages
  9. 09Au focus / à la saisie — aucun changement de contexte déclenché uniquement par le focus ou la saisie
  10. 10Langue des parties — le texte en langue étrangère inline utilise l'attribut lang

Formules détaillées

Comment chaque score est calculé — formules exactes.

Vous trouverez ci-dessous les calculs réels derrière chaque métrique affichée dans l'application et dans le PDF Defense. Aucune formule n'est modifiée lors du scan — cette page documente simplement ce qui tourne déjà en production.

  • Score d'accessibilité (0–100)

    Score unifié affiché en bandeau. Ratio pondéré passes axe vs défauts ouverts — user-status-aware : marquer une issue traitée fait monter le score sans rescan.

    weighted_passes   = nodes_passed_total × 3
    weighted_failures = Σ count_open(impact) × poids(impact)
      poids : critique=10 / sérieux=5 / modéré=2 / mineur=1
    accessibility_score = round(100 × weighted_passes / (weighted_passes + weighted_failures))
    Renvoie null si dénominateur = 0 (scan dégénéré).
    • Seules les issues ouvertes (statut = open) contribuent aux weighted_failures. Les issues marquées traitées (done) ou ignorées sont exclues — le tri améliore directement le score.
    • nodes_passed_total est le total cumulé de nœuds DOM ayant passé une règle axe, capturé au moment du scan.
    • Le coefficient passes (×3) approxime le poids moyen de sévérité d'un test passant. Calibré empiriquement sur des scans de référence.
    • Score unique exposé. Les scans historiques antérieurs au déploiement affichent null jusqu'au prochain recompute (déclenché par un triage manuel d'issue).
  • Sous-scores par principe WCAG (Perceptible / Utilisable / Compréhensible / Robuste)

    Quatre taux de conformité par principe, dérivés des issues trouvées et mappés via WCAG SC → principe.

    sous_score(principe) = 1 − (issues_failed_du_principe / règles_testables_du_principe)
    où failed exclut manual_required et needs_review
    • Une issue taguée avec plusieurs principes WCAG (ex. une issue mappée à la fois sur 1.3.1 Perceptible et 4.1.2 Robuste) incrémente chaque principe indépendamment. La somme des quatre sous-scores peut donc dépasser 100 % du total d'issues — c'est voulu.
    • manual_required et needs_review sont exclus du compte failed pour ne pas pénaliser des critères que le moteur ne peut pas trancher.
    • Utilisé pour les radars diagnostiques uniquement — pas pour le score de conformité affiché en bandeau.
  • Risque de procédure — Score de probabilité (0-100, par issue)

    Score de probabilité par issue combinant impact × multiplicateur WCAG × boost jurisprudence quand des données de contentieux existent pour cette règle.

    base = impact_base[issue.impact] × max(wcag_multiplier[tag] pour tag dans issue.wcag_tags)
    si rule_id dans RULE_JURISPRUDENCE_TABLE :
      settlements_boost = min(SETTLEMENTS_BOOST_CAP, count_settlements / DIVISOR)
      median_boost      = min(MEDIAN_BOOST_CAP, median_usd / DIVISOR)
      score = round(base × (1 + settlements_boost + median_boost))
    sinon :
      score = base
    score = clamp(score, 0, 100)
    • Affiché dans l'application et dans le PDF Defense (colonne priorité par issue).
    • Ce n'est PAS une estimation en USD — c'est un classement relatif de probabilité pour trier quelles issues corriger en premier.
    • Les règles absentes de la table jurisprudence retombent sur la formule legacy impact × WCAG uniquement.

    Source : RULE_JURISPRUDENCE_TABLE issue de UsableNet ADA Web Lawsuit Trends 2025 + Seyfarth ADA Title III FY2024.

  • Risque de procédure — Estimation en USD (PDF Defense uniquement)

    Estimation de l'exposition monétaire. Affichée UNIQUEMENT dans le PDF Defense, jamais en chiffre isolé dans le dashboard, pour éviter qu'elle soit lue comme une prédiction.

    raw = sum_issues( litigation_weight(rule) × impact_multiplier × volume_factor(nodes) )
    exposure_usd = raw × BASE_SETTLEMENT_USD × jurisdiction_multiplier
    exposure_usd = clamp(exposure_usd, LAWSUIT_RISK_MIN_USD, LAWSUIT_RISK_MAX_USD)
    # BASE_SETTLEMENT_USD = 55 000 $
    # jurisdiction_multiplier vaut 1.0 (US) par défaut
    # Caps appliqués : plancher 20 k$ (scan unique), plafond 150 k$ (scan unique)
    # Hard cap 500 k$ uniquement sur les bandes de scénarios optimistic/pessimistic
    • BASE_SETTLEMENT_USD (55 000 $) = midpoint de la fourchette médiane 25 k$-75 k$ rapportée par le Seyfarth ADA Title III Year-End FY2024 pour les settlements digitaux ADA pre-litigation.
    • Les caps ramènent le résultat dans la bande statistique observée en 2024-2025 (plancher 20 k$ et plafond 150 k$ sur l'estimation single-scan ; hard cap 500 k$ sur les bandes de scénarios). Les valeurs aberrantes ne sont PAS extrapolées.
    • Le jurisdiction_multiplier est 1.0 (US) par défaut. Les juridictions hors-US ne sont pas encore calibrées — à lire comme US-only.
    • Ce chiffre est indicatif, pas un avis juridique. À ré-évaluer chaque année à publication du rapport Seyfarth suivant.

    Source : Seyfarth Shaw LLP — ADA Title III Federal Lawsuits Year-End Report FY2024.

  • Quick wins — gain_points

    Liste de triage des issues à fort impact et faible effort. La valeur `gain_points` est un nombre d'unités de templating à corriger, PAS un delta de score.

    gain_points = nombre_d_emplacements_template_uniques_à_corriger
    • Ne PAS interpréter gain_points comme « points ajoutés au score si je corrige cette issue ». C'est un compte de patches distincts à appliquer sur les templates / composants.
    • Un seul fix de template peut résoudre des dizaines d'occurrences au niveau page (ex. un fix image-alt dans un composant fiche produit).
  • Effort de correction (heures par issue)

    Estimation indicative du temps de correction par règle axe-core, utilisée pour classer les quick wins. Estimations internes basées sur l'historique des fixes.

    effort = FIX_EFFORT_HOURS.get(rule_id, FIX_EFFORT_HOURS_DEFAULT)
    # Plage observée : 0,1 h - 4 h par règle. Défaut = 1,0 h.
    • Les estimations sont PAR EMPLACEMENT DE TEMPLATE UNIQUE, pas par occurrence au niveau page.
    • Ces valeurs sont des calibrations issues de l'historique du projet. Elles ne couvrent ni la QA, ni le déploiement, ni les tests de régression.
  • Avertissement écart viewport (desktop vs mobile)

    Signale les scans où les scores de densité desktop et mobile divergent significativement, indice de défaillances responsive uniquement.

    viewport_gap_warning = abs(desktop_score − mobile_score) > VIEWPORT_GAP_WARNING_THRESHOLD
    # VIEWPORT_GAP_WARNING_THRESHOLD = 15 (seuil empirique projet)
    • Le seuil de 15 points est empirique (calibration projet). Ce n'est pas une valeur dérivée du WCAG.
    • Quand il se déclenche, le rapport ajoute un bloc de recommandation spécifique au viewport — mais ne pénalise pas le score principal.
  • Détection de régression (vs scan précédent)

    Compare le scan courant au scan précédent dont les références légales correspondent, en remontant les règles qui échouent à nouveau.

    régression = (delta_failed de la règle ≥ DEFAULT_REGRESSION_MIN_FAILED_DELTA)
    # DEFAULT_REGRESSION_MIN_FAILED_DELTA = 1
    • Un delta de 1 est volontairement agressif — un seul nouveau nœud en échec déclenche le flag de régression.
    • La comparaison est filtrée sur les références légales correspondantes entre scans (fix issue #211). Un scan sur un référentiel différent ne sera pas comparé en régression.
  • Cohérence multi-page — amplification

    Quand la même règle échoue sur plusieurs pages, la pénalité est amplifiée pour refléter le défaut de template récurrent.

    penalty += SCORE_WEIGHT_SERIOUS × pages_affected
    # Pas de cap aujourd'hui — itération future.
    • Une issue affectant 10 pages contribue 10× le poids SERIOUS, indépendamment du niveau d'impact propre de l'issue. Logique : un défaut de template récurrent est par nature sérieux.
    • Aucun cap supérieur sur pages_affected pour l'instant — les sites très volumineux avec des défauts de template généralisés peuvent voir le score principal saturer à 0.

Sources

Fondé sur des citations — public, daté, vérifiable.

Pourquoi cela diffère d'un avis juridique

C'est un heuristique, pas un conseil juridique.

Le score de risque de procédure priorise les violations à corriger en premier selon leur fréquence statistique dans les dépôts de contentieux. Il ne prédit pas si un site particulier sera poursuivi, quel serait l'issue d'une procédure, ou si une violation donnée constitue une infraction légale à l'EAA, au RGAA, ou à toute autre loi.

Déterminer si un site est légalement accessible en vertu de l'EAA ou du RGAA est une question factuelle et juridique qui nécessite l'avis d'un avocat, des tests manuels d'accessibilité, et souvent des tests avec des utilisateurs de technologies d'assistance. Les scans et les PDF de ScanAccess sont des outils permettant de documenter une démarche de conformité de bonne foi — ce ne sont pas des avis juridiques et ils ne doivent pas être présentés comme tels.

Scan automatisé WCAG 2.2 AA via axe-core 4.10. Les outils automatisés détectent environ 25 à 57 % des violations d'accessibilité. Ce n'est pas une garantie de conformité légale. C'est la preuve d'une démarche documentée et récurrente de bonne foi.

GitHub Action