WCAG-succescriteria · Level AA

WCAG 3.3.4: Foutpreventie (juridisch, financieel, gegevens)

WCAG 3.3.4 vereist dat webinzendingen waarbij juridische verplichtingen, financiële transacties of gevoelige gegevens betrokken zijn, kunnen worden gecontroleerd, gecorrigeerd of teruggedraaid voordat ze worden afgerond. Dit beschermt alle gebruikers — vooral mensen met cognitieve en motorische beperkingen — tegen onomkeerbare fouten met grote gevolgen.

Wat Deze Regel Betekent

WCAG Succescriterium 3.3.4, getiteld Foutpreventie (Juridisch, Financieel, Gegevens), is een niveau AA-vereiste onder Principe 3 (Begrijpelijk) en Richtlijn 3.3 (Hulp bij invoer). Het is specifiek van toepassing op webpagina’s waarop gebruikers juridische verplichtingen of financiële transacties kunnen aangaan, of waar de gebruiker door hem of haar beheerbare gegevens in een gegevensopslagsysteem wijzigt of verwijdert.

Het criterium schrijft voor dat ten minste één van de volgende drie waarborgen wordt geboden voor elke dergelijke inzending:

  • Omkeerbaar: De inzending kan ongedaan worden gemaakt nadat deze is verzonden. Een bestelling kan bijvoorbeeld binnen een gedefinieerd tijdsvenster worden geannuleerd, of een verwijderd record kan worden hersteld.
  • Gecontroleerd: De door de gebruiker ingevoerde gegevens worden gecontroleerd op invoerfouten, en de gebruiker krijgt de gelegenheid om die fouten te corrigeren voordat de inzending wordt afgerond.
  • Bevestigd: Er wordt een mechanisme geboden om informatie te bekijken, te bevestigen en te corrigeren voordat de definitieve inzending plaatsvindt. Dit neemt doorgaans de vorm aan van een samenvatting of controletap voordat een verzendknop de transactie voltooit.

Belangrijk is dat slechts één van deze drie voorwaarden hoeft te worden vervuld om te slagen. Alleen al een stap voor bekijken-en-bevestigen is voldoende, net als een annuleringsvenster na inzending, of robuuste realtime validatie met een correctiemogelijkheid. Best practice is echter om meerdere waarborgen te combineren.

Reikwijdte van het criterium: De regel is van toepassing op drie categorieën transacties. Ten eerste omvat hij juridische verplichtingen zoals het afsluiten van een abonnement, het aangaan van een contract of het indienen van een bindend juridisch formulier. Ten tweede omvat hij financiële transacties, waaronder aankopen, overboekingen, kredietaanvragen en het betalen van rekeningen. Ten derde omvat hij elke handeling die door de gebruiker beheerbare gegevens in een gegevensopslagsysteem wijzigt of verwijdert — bijvoorbeeld het bijwerken van profielinformatie, het verwijderen van bestanden uit een clouddienst of het bewerken van records in een beheerpaneel.

Een pass ziet er als volgt uit: een e-commerce-checkout die een besteloverzicht toont met een "Bewerken"-link en een knop "Bestelling plaatsen" als laatste stap. Een fail ziet er als volgt uit: een eenpagina-aankoopformulier waarbij klikken op "Nu kopen" direct een kaart belast zonder overzichtsscherm, zonder annuleringsoptie en zonder validatiestap.

Het criterium kent een gedefinieerde uitzondering: het is niet van toepassing op formulieren waarbij het indienen van onjuiste informatie geen gevolgen heeft en de inzending eenvoudig kan worden herhaald. Eenvoudige contactformulieren of inschrijvingen voor nieuwsbrieven vallen over het algemeen buiten de reikwijdte, hoewel goede praktijk nog steeds aanmoedigt om ook op die formulieren validatie toe te passen.

Waarom Het Belangrijk Is

Fouten tijdens transacties met hoge inzet kunnen ernstige, soms onomkeerbare gevolgen hebben: geld dat naar de verkeerde rekening wordt overgemaakt, een juridische overeenkomst die onder valse voorwendselen wordt ondertekend, medische dossiers die met onjuiste informatie worden bijgewerkt, of een abonnement dat op het verkeerde niveau wordt aangeschaft. Voor gebruikers zonder beperkingen is het vaak eenvoudig om deze fouten op te merken en te corrigeren. Voor veel groepen met een beperking kan dit echter uiterst moeilijk of zelfs onmogelijk zijn zonder de waarborgen die dit criterium vereist.

Gebruikers met cognitieve beperkingen — waaronder mensen met dyslexie, ADHD, geheugenstoornissen of verstandelijke beperkingen — maken vaker invoerfouten en merken die minder snel op voordat ze op verzenden klikken. Een overzichtsscherm geeft hun de tijd en helderheid die ze nodig hebben om fouten te ontdekken. Volgens de Wereldgezondheidsorganisatie leven wereldwijd ongeveer 1 miljard mensen met een vorm van cognitieve, neurologische of psychische aandoening die het dagelijks functioneren beïnvloedt.

Gebruikers met motorische beperkingen die afhankelijk zijn van switch-toegang, oogvolgapparaten of alternatieve toetsenborden, zijn gevoelig voor onbedoelde activeringen en ongewenste toetsaanslagen. Een bevestigingsstap fungeert als een cruciale buffer: zelfs als "Verzenden" per ongeluk wordt geactiveerd, heeft de gebruiker nog een kans om te annuleren voordat de transactie wordt voltooid. Zonder deze waarborg kan één enkele onbedoelde tik een financiële transactie in gang zetten die de gebruiker niet kan terugdraaien.

Schermlezersgebruikers die lange formulieren lineair doorlopen, hebben mogelijk geen holistisch beeld van wat ze hebben ingevoerd. Een gesproken samenvatting in de bevestigingsfase — waarin de ingevoerde waarden worden voorgelezen — stelt hen in staat fouten op te merken waar ze niet visueel naar konden zoeken.

Gebruikers met angstklachten of aandachtsproblemen profiteren enorm van de wetenschap dat er een vangnet is. Onderzoek laat consequent zien dat wanneer gebruikers een proces als fouttolerant ervaren, ze met meer vertrouwen deelnemen en transacties minder vaak afbreken. Dit komt de conversieratio’s en de gebruikerstevredenheid direct ten goede, waardoor naleving van 3.3.4 zowel een zakelijk voordeel als een ethische verplichting is.

Praktijkscenario: Een slechtziende gebruiker in Istanbul boekt een binnenlandse vlucht met een schermlezer. Ze selecteert een datum maar navigeert per ongeluk voorbij het veld voor het aantal passagiers, waardoor dit op de standaardwaarde van twee passagiers blijft staan in plaats van één. Als de boekingssite haar kaart belast op het moment dat ze "Bevestigen" activeert, heeft ze twee tickets gekocht en kan ze te maken krijgen met niet-restitueerbare tariefboetes. Een overzichtsscherm dat hardop voorleest: "1 passagier: Ayşe Yılmaz, Ankara naar Istanbul, 14 maart, Economy — Totaal: ₺850" zou haar in staat stellen de fout onmiddellijk te ontdekken.

Gerelateerde Axe-core-regels

WCAG 3.3.4 vereist handmatig testen. Er is geen geautomatiseerde axe-core-regel die direct op dit criterium aansluit, omdat de vereiste waarborgen — omkeerbaarheid, validatie met correctiemogelijkheid en bevestigingsstappen — zaken zijn van applicatiestroom en businesslogica, niet van markupstructuur of DOM-attributen. Geautomatiseerde tools kunnen HTML en ARIA analyseren, maar ze kunnen niet bepalen of een "Nu betalen"-knop een onomkeerbare afschrijving triggert, of er een annuleringsbeleid bestaat, of dat de gegevens die in een overzichtsscherm worden getoond, de ingevoerde gegevens correct weerspiegelen.

  • Waarom automatisering dit niet kan detecteren: Een geautomatiseerde scanner ziet een <button>-element met de tekst "Submit" en geldige markup. Hij heeft geen manier om te weten of het activeren van die knop een bindende financiële transactie start, of er een bevestigingsdialoog volgt, of dat de transactie achteraf kan worden teruggedraaid. Dit zijn architecturale en UX-beslissingen die boven het niveau van individuele DOM-nodes liggen en een menselijke tester vereisen die de volledige gebruikersreis begrijpt.
  • Gedeeltelijke signalen om naar te zoeken tijdens geautomatiseerde scans: Hoewel axe-core 3.3.4-schendingen niet direct markeert, gebruiken auditors axe soms om gerelateerde problemen te identificeren die het risico vergroten — zoals ontbrekende autocomplete-attributen op betalingsvelden (relevant voor 1.3.5), ontbrekende foutmeldingen (relevant voor 3.3.1 en 3.3.3), of ontbrekende labels op formulierelementen (relevant voor 1.3.1 en 4.1.2). Deze gerelateerde fouten maken foutpreventie nog moeilijker te realiseren.
  • Aanbevolen handmatige auditbenadering: Testers moeten elke gebruikersreis in kaart brengen die een juridische, financiële of gegevenswijzigende inzending omvat, en vervolgens elke reis beoordelen aan de hand van de drie criteria: Is er een manier om het ongedaan te maken? Is er inline validatie met een correctiemogelijkheid? Is er een stap voor bekijken-en-bevestigen? Als alle drie ontbreken in een dergelijke reis, is er sprake van een 3.3.4-fout.

Hoe te Testen

  1. Inventariseer formulieren met hoge inzet: Maak voordat het testen begint een lijst van elk formulier of elke interactieve workflow op de site die financiële transacties omvat (checkout, betaling, facturatie), juridische verplichtingen (contractondertekening, abonnementinschrijving, toestemmingsformulieren) of gegevenswijziging/-verwijdering (profielbewerking, bestandsverwijdering, accountverwijdering). Dit zijn de enige flows die binnen de reikwijdte van 3.3.4 vallen.
  2. Voer een geautomatiseerde scan uit voor gerelateerde problemen: Gebruik axe DevTools of Lighthouse om toegankelijkheidsfouten op formulierniveau op elke pagina binnen de reikwijdte te identificeren. Hoewel deze tools 3.3.4 niet direct markeren, zorgt het oplossen van problemen zoals ontbrekende labels, ontbrekende autocomplete-attributen en ontbrekende foutaankondigingen voor een basisniveau van formulierkwaliteit voordat de foutpreventiewaarborg wordt beoordeeld.
  3. Test de "Gecontroleerd"-waarborg: Dien elk formulier binnen de reikwijdte opzettelijk in met fouten — verwisselde cijfers in een kaartnummer, een ongeldige datum, een niet-overeenkomend e-mailbevestigingsveld. Observeer of het systeem de inzending stopt, de specifieke fout identificeert, beschrijft hoe deze kan worden opgelost (conform 3.3.3) en de gebruiker op het formulier laat om correcties aan te brengen. Als het formulier stilzwijgend wordt verzonden of alleen een algemene fout toont zonder aan te geven welk veld is mislukt, wordt aan deze waarborg niet voldaan.
  4. Test de "Bevestigd"-waarborg: Vul elk formulier binnen de reikwijdte met geldige gegevens in en doorloop de volledige flow. Kijk of er een overzichtsstap wordt gepresenteerd vóór de definitieve inzending. Controleer of de overzichtsstap alle ingevoerde gegevens in een leesbaar formaat toont, een mechanisme bevat om terug te gaan en te bewerken, en een bewuste laatste handeling vereist om de inzending te voltooien. Navigeer met NVDA en Firefox en met JAWS en Chrome deze overzichtsstap met een schermlezer om te bevestigen dat alle waarden worden aangekondigd en dat de bewerk- en bevestigingsbedieningen met het toetsenbord bereikbaar zijn.
  5. Test de "Omkeerbaar"-waarborg: Voltooi een inzending en probeer deze vervolgens ongedaan te maken. Zoek bij e-commerce naar een annuleringslink in de bevestigingsmail of op de pagina met bestelgeschiedenis. Zoek bij gegevensverwijdering naar een herstel- of prullenbakmechanisme. Beoordeel of het omkeerbare tijdsvenster duidelijk aan de gebruiker wordt gecommuniceerd vóórdat hij of zij indient, en niet pas erna.
  6. Schermlezer-walkthrough (VoiceOver + Safari op macOS/iOS): Navigeer de volledige checkout- of inzendingsflow met alleen het toetsenbord en VoiceOver. Bevestig dat het overzichtsscherm alle ingevoerde waarden in een logische volgorde voorleest, dat bewerklinks met voldoende context worden aangekondigd (bijv. "Verzendadres bewerken" in plaats van alleen "Bewerken") en dat het doel van de definitieve bevestigingsknop ondubbelzinnig is.
  7. Controle van cognitieve belasting: Beoordeel of de overzichtsstap in duidelijke taal wordt gepresenteerd. Een samenvatting die ruwe databasenaamvelden opsomt of juridisch jargon gebruikt zonder uitleg, kan technisch gezien als overzichtsscherm gelden, maar in de praktijk falen voor gebruikers met cognitieve beperkingen.

Hoe te Herstellen

Checkout in één stap zonder overzicht — Onjuist

<!-- Problematisch: klikken op "Complete Purchase" belast de kaart onmiddellijk -->
<form action='/checkout/complete' method='post'>
  <input type='hidden' name='cart_id' value='abc123'>
  <input type='hidden' name='payment_token' value='tok_xyz'>
  <button type='submit'>Complete Purchase</button>
</form>

Checkout in één stap met toegevoegde overzichtsstap — Juist

<!-- Stap 1: formulier verzamelt gegevens, verzendt naar overzichtspagina (niet definitief) -->
<form action='/checkout/review' method='post'>
  <!-- betalings- en verzendvelden -->
  <button type='submit'>Review Order</button>
</form>

<!-- Stap 2: overzichtspagina vat alle ingevoerde gegevens samen en biedt bewerklinks -->
<section aria-labelledby='review-heading'>
  <h2 id='review-heading'>Review Your Order</h2>
  <dl>
    <dt>Delivery address</dt>
    <dd>Atatürk Cad. No:5, Kadıköy, Istanbul</dd>
    <dd><a href='/checkout/edit-address'>Edit delivery address</a></dd>
    <dt>Total</dt>
    <dd>₺1,249.00</dd>
  </dl>
  <form action='/checkout/complete' method='post'>
    <input type='hidden' name='order_token' value='tok_abc'>
    <!-- Definitieve knop is duidelijk gelabeld als de bindende handeling -->
    <button type='submit'>Place Order and Pay ₺1,249.00</button>
  </form>
</section>

Onomkeerbare gegevensverwijdering zonder bevestiging — Onjuist

<!-- Problematisch: verwijderknop post direct zonder bevestigingsdialoog -->
<form action='/account/delete-profile' method='post'>
  <button type='submit'>Delete My Account</button>
</form>

Onomkeerbare gegevensverwijdering met bevestigingsdialoog — Juist

<!-- Triggerknop opent een bevestigingsdialoog, niet de destructieve actie -->
<button type='button' aria-haspopup='dialog' aria-controls='confirm-delete-dialog'>
  Delete My Account
</button>

<dialog id='confirm-delete-dialog' aria-labelledby='dialog-title' aria-describedby='dialog-desc'>
  <h2 id='dialog-title'>Permanently Delete Account?</h2>
  <p id='dialog-desc'>
    This will permanently remove all your data. This action cannot be undone.
    Your subscription will be cancelled immediately.
  </p>
  <form action='/account/delete-profile' method='post'>
    <button type='submit'>Yes, permanently delete my account</button>
    <button type='button' onclick='this.closest("dialog").close()'>Cancel</button>
  </form>
</dialog>

Financieel formulier zonder inline validatie — Onjuist

<!-- Problematisch: geen validatie, verkeerde IBAN wordt stilzwijgend geaccepteerd -->
<form action='/transfer/submit' method='post'>
  <label for='iban'>Recipient IBAN</label>
  <input type='text' id='iban' name='iban'>
  <label for='amount'>Amount (TRY)</label>
  <input type='number' id='amount' name='amount'>
  <button type='submit'>Transfer</button>
</form>

Financieel formulier met validatie en overzicht — Juist

<!-- Inline validatie met aria-describedby voor foutassociatie -->
<form action='/transfer/review' method='post' novalidate>
  <div>
    <label for='iban'>Recipient IBAN</label>
    <input
      type='text'
      id='iban'
      name='iban'
      aria-describedby='iban-hint iban-error'
      aria-required='true'
      autocomplete='off'
      pattern='[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}'
    >
    <p id='iban-hint'>Enter a valid TR IBAN starting with TR followed by 24 digits.</p>
    <p id='iban-error' role='alert' aria-live='assertive' hidden>
      Invalid IBAN format. Please check the number and try again.
    </p>
  </div>
  <!-- Verzendt naar overzichtspagina, niet directe uitvoering -->
  <button type='submit'>Review Transfer</button>
</form>

Veelvoorkomende Fouten

  • Een tooltip gebruiken als "overzichts"-mechanisme: Het tonen van ingevoerde waarden in een hover-tooltip vóór de verzendknop vormt geen overzichtsstap, omdat tooltips niet toegankelijk zijn voor toetsenbordgebruikers of schermlezers en verdwijnen voordat de gebruiker kan handelen.
  • De definitieve knop "Doorgaan" noemen in plaats van de handeling te beschrijven: Een knop met de tekst "Doorgaan" op een overzichtspagina maakt niet duidelijk dat erop klikken een financiële transactie zal voltooien. De knop moet de bindende handeling ondubbelzinnig beschrijven, zoals "Bestelling plaatsen en ₺850 betalen" of "Contract ondertekenen".
  • Alleen in de servicevoorwaarden een annuleringsbeleid opnemen: Het verbergen van het omkeermechanisme in een gelinkt juridisch document dat de meeste gebruikers niet zullen lezen, voldoet niet aan de omkeerbaarheidsvereiste. De mogelijkheid om te annuleren en het tijdsvenster waarin dat kan, moeten in de transactiestroom zelf worden gecommuniceerd.
  • window.confirm() gebruiken als enige bevestigingsmechanisme: Browser-eigen bevestigingsdialogen worden slecht ondersteund door sommige ondersteunende technologieën, kunnen niet voor leesbaarheid worden gestileerd en worden in bepaalde browserconfiguraties geblokkeerd. Ze mogen niet als enige waarborg voor inzendingen met hoge inzet worden gebruikt.
  • Het formulier resetten bij validatiefout zonder geldige veldwaarden te behouden: Wanneer een formulier de validatie niet doorstaat, dwingt het leegmaken van alle velden gebruikers — vooral mensen met motorische beperkingen — om alle gegevens opnieuw in te voeren. Alleen het ongeldige veld mag worden geleegd of gemarkeerd; alle geldige invoer moet behouden blijven.
  • De "Bewerken"-link op de overzichtspagina plaatsen zonder programmatische associatie: Een "Bewerken"-link naast elke gegevengroep moet een beschrijvende toegankelijke naam hebben (bijv. aria-label='Edit billing address'). Een kale "Bewerken" die meerdere keren wordt herhaald, is dubbelzinnig voor schermlezersgebruikers die op links navigeren.
  • De overzichtsstap niet aankondigen aan schermlezers: Als de overzichtspagina laadt zonder de focus naar de kop of een samenvattingsregio te verplaatsen, merken schermlezersgebruikers mogelijk niet dat ze zich op een overzichtspagina bevinden en activeren ze de verzendknop zonder de samenvatting te lezen.
  • Het criterium alleen op betalingspagina’s van toepassing achten: De reikwijdte omvat elke juridische verplichting (abonnementinschrijving, toestemmingsformulieren, contractacceptatie) en elke gebruikersgegevenswijziging (bestanden verwijderen, medische dossiers bijwerken, accountinstellingen wijzigen). Ontwikkelaars vergeten vaak beheerpaneel- en instellingenpagina’s.
  • Alleen omkering via telefoon of e-mail aanbieden: Als annulering alleen mogelijk is door een hulplijn te bellen, kunnen gebruikers met spraak- of gehoorbeperkingen mogelijk geen gebruikmaken van het omkeermechanisme. Het omkeerpad moet zelf toegankelijk zijn — bij voorkeur een annuleringsflow binnen de app.
  • Het criterium overslaan voor mobiele webviews: Sommige teams implementeren een overzichtsstap op desktop maar gebruiken een compacte flow in één stap op mobiel om schermruimte te besparen. Het criterium is in gelijke mate van toepassing op alle viewportgroottes en mag niet worden weggelaten in responsieve of mobiele webimplementaties.

Relatie met de Toegankelijkheidsregelgeving van Turkije

De Turkse Presidential Circular 2025/10, gepubliceerd in het Staatsblad nr. 32933 op 21 juni 2025, stelt een uitgebreid nationaal toegankelijkheidskader vast dat WCAG 2.2 als technische standaard hanteert. De circulaire schrijft voor dat digitale diensten ten minste aan WCAG 2.2 niveau AA moeten voldoen, waaronder WCAG 3.3.4 Foutpreventie (Juridisch, Financieel, Gegevens).

De entiteiten die expliciet onder de circulaire vallen, bestrijken een breed scala aan sectoren. Overheidsinstellingen en -agentschappen moeten alle op burgers gerichte digitale diensten toegankelijk maken, waaronder online aanvragen, e-overheidsportalen en digitale identiteitsdiensten — die vaak juridische verplichtingen en gegevenswijziging omvatten. Banken en financiële instellingen die onder toezicht staan van de BDDK (Banking Regulation and Supervision Agency) moeten voldoen, waardoor 3.3.4 direct relevant is voor elke online banktransactie, overboeking en kredietaanvraag die zij aanbieden. Ziekenhuizen en zorginstellingen die digitale patiëntenportalen, afsprakensystemen en elektronische medische dossiers exploiteren, moeten ervoor zorgen dat elke gegevensinvoer of -wijziging in die systemen aan de foutpreventiestandaarden voldoet. Telecomaanbieders met 200,000 of meer abonnees — waaronder Turkcell, Vodafone TR en Türk Telekom — moeten ervoor zorgen dat abonnementsbeheer, wijziging van bundels en betalingsflows worden gedekt. E-commerceplatforms, reisagentschappen, particuliere vervoersbedrijven en particuliere scholen die door het Ministerie van Nationaal Onderwijs (MoNE) zijn gemachtigd vallen eveneens binnen de reikwijdte, waarmee een aanzienlijk deel van de webdiensten met hoge transactievolumes op de Turkse markt wordt gedekt.

Naleving van 3.3.4 is binnen dit kader niet slechts een technisch afvinkpunt. Organisaties die het Erişilebilirlik Logosu (Toegankelijkheidslogo) van het Ministerie van Gezin en Sociale Diensten willen verkrijgen, moeten volledige WCAG 2.2 AA-conformiteit aantonen. Het logo fungeert als een publiek vertrouwenssignaal en wordt in toenemende mate verwacht door consumenten en aanbestedende diensten. Het niet implementeren van foutpreventiewaarborgen in financiële of juridische workflows kan zowel leiden tot weigering van het logo als tot mogelijke bestuurlijke maatregelen onder de handhavingsbepalingen van de circulaire.

Voor Turkse organisaties in de e-commerce- en fintechsector sluit 3.3.4 specifiek nauw aan bij bestaande consumentenbeschermingsvereisten onder het Turkse recht. De Wet op de Consumentenbescherming (nr. 6502) en bijbehorende e-commerceregelgeving vereisen nu al duidelijke precontractuele informatie en annuleringsrechten voor overeenkomsten op afstand. Het implementeren van een WCAG 3.3.4-conforme stap voor bekijken-en-bevestigen voldoet tegelijkertijd aan zowel de toegankelijkheidsvereiste als de consumentenrechtelijke verplichting om bestelsamenvattingen te tonen voordat een koper wordt gebonden. Deze dubbele naleving maakt investeren in een goede foutpreventie-UX een inspanning met hoge waarde en weinig doublures voor Turkse digitale dienstverleners.