Fase 1a: Platformkern
36 user stories, 13 scenario’s + 5 edge cases.
S-1a.1 Volledige klant onboarding
Section titled “S-1a.1 Volledige klant onboarding”Een nieuwe klant doorloopt de complete 3-stappen onboarding na registratie.
Dekt: 1a.1.1, 1a.1.2, 1a.1.3, 1a.1.4, 1a.1.5, 1a.1.6, 1a.1.7, 1a.1.8, 1a.1.9
Voorwaarden: Klant net geregistreerd, redirect naar /onboarding
- Check voortgangsbalk bovenaan met 3 stappen.
- Stap 1 “Jouw gegevens”: vul voornaam, achternaam, telefoonnummer, WhatsApp nummer (optioneel), adres, stad, noodcontact naam, noodcontact telefoon en notities (optioneel) in.
- Probeer door te gaan met lege verplichte velden. Check inline foutmeldingen per veld (bijv. “Voornaam is verplicht”).
- Vul een ongeldig telefoonnummer in. Check foutmelding “Voer een geldig telefoonnummer in.”
- Vul een WhatsApp nummer in met geldig internationaal format.
- Vul alle velden correct in, klik “Volgende”.
- Check dat gegevens worden opgeslagen via
PATCH /api/clients/:id. - Stap 2 “Je hond(en)”: vul basisgegevens in: naam, ras, geboortedatum, geslacht (Reu/Teef), gewicht (kg), kleur. Optioneel: gesteriliseerd/gecastreerd, microchipnummer, hondenpaspoort nummer, foto.
- Vul dierenarts in: naam dierenarts (verplicht), naam kliniek (optioneel), telefoonnummer (verplicht).
- Vul voedingsschema in: voedingsmerk, hoeveelheid, tijden (alle verplicht), bijzonderheden (optioneel).
- Vul medische info in: medische aandoeningen, medicijnen, allergieen (alle optioneel), verzekerd checkbox.
- Beschrijf gedrag in vrij tekstveld (optioneel).
- Upload vaccinaties (DHLPP, Bordetella, Rabies): per vaccin datum toegediend, vervaldatum en document (alle verplicht per vaccin).
- Check dat
verified_by_adminstandaardfalseis bij elke vaccinatie. - Check dat onderaan het formulier een knop “Nog een hond toevoegen” staat. Klik erop en controleer dat een leeg hondformulier verschijnt.
- Klik “Volgende” om naar stap 3 te gaan.
- Stap 3 “Voorwaarden”: check twee scrollbare tekstvakken (algemene voorwaarden/huisregels en aansprakelijkheidsverklaring).
- Probeer op “Afronden” te klikken zonder checkbox. Check foutmelding “Je moet akkoord gaan met de voorwaarden om verder te gaan.”
- Scroll naar beneden in beide tekstvakken. Vink checkbox aan: “Ik heb de algemene voorwaarden en huisregels gelezen en ga hiermee akkoord.”
- Klik “Afronden”. Check dat
terms_accepted_atenonboarding_completed = trueworden opgeslagen. - Check dat een welkomstmail wordt verstuurd via Resend.
- Check redirect naar
/dashboard.
Resultaat: Alle gegevens opgeslagen, vaccinaties wachten op admin verificatie, voorwaarden geaccepteerd, welkomstmail verstuurd, onboarding voltooid.
S-1a.2 Tweede hond toevoegen na onboarding
Section titled “S-1a.2 Tweede hond toevoegen na onboarding”Een bestaande klant voegt een extra hond toe buiten de onboarding.
Dekt: 1a.1.10
Voorwaarden: Klant heeft onboarding voltooid
- Ga naar
/dogs. Check knop “Hond toevoegen” bovenaan. - Klik op “Hond toevoegen”, navigeert naar
/dogs/new. - Vul alle hondgegevens in (zelfde velden als onboarding stap 2).
- Upload vaccinaties.
- Klik opslaan. Check
POST /api/dogsenPOST /api/vaccinations. - Check redirect naar
/dogsmet succesmelding “Hond toegevoegd.” - Tweede hond verschijnt in de hondenlijst.
Resultaat: Tweede hond verschijnt in hondenlijst, vaccinaties wachten op verificatie.
S-1a.3 Hondprofielen en vaccinaties beheren
Section titled “S-1a.3 Hondprofielen en vaccinaties beheren”Klant bekijkt en bewerkt hondprofielen en uploadt nieuwe vaccinaties.
Dekt: 1a.2.1, 1a.2.2, 1a.2.3, 1a.2.4
Voorwaarden: Klant heeft minstens 1 hond met vaccinaties
- Ga naar
/dogs. Check overzicht met per hond een kaart: foto (of placeholder als geen foto geupload), naam, ras, leeftijd (berekend uit geboortedatum). - Check vaccinatiestatus-indicator per hond: geldig (groen), bijna verlopen (oranje, binnen 30 dagen), verlopen (rood).
- Klik op een hond, navigeert naar
/dogs/[id]. - Check profiel in readonly modus: alle gegevens gegroepeerd (basis, dierenarts, voeding, medisch, gedrag).
- Check vaccinatielijst per vaccin: status, datum, vervaldatum, geupload document.
- Check bezoekhistorie: de laatste 5 boekingen van deze hond.
- Klik “Vaccinatie uploaden” bij een vaccin. Check modal/inline formulier met datum, vervaldatum en document upload.
- Upload een vaccinatiebewijs. Check dat het verschijnt met status “In afwachting van goedkeuring” (
verified_by_admin = false). - Klik “Bewerken”, navigeert naar
/dogs/[id]/edit. - Bewerk een veld (bijv. gewicht), klik opslaan via
PATCH /api/dogs/:id. - Check redirect naar
/dogs/[id]met succesmelding en gewijzigde waarde.
Resultaat: Hondenlijst toont correcte status en placeholder foto, profiel readonly met bewerkmogelijkheid, vaccinaties uploadbaar.
S-1a.4 Klant dashboard
Section titled “S-1a.4 Klant dashboard”Klant bekijkt dashboard met boekingen, facturen en vaccinatiestatus.
Dekt: 1a.3.1, 1a.3.2
Voorwaarden: Klant heeft boekingen, facturen en honden
- Ga naar
/dashboard. - Check blok “Aankomende boekingen”: max 3 getoond met hond(en), dienst, datum, status.
- Als geen boekingen: check melding “Geen aankomende boekingen” met link naar “Nieuwe boeking” (
/bookings/new). - Check blok “Openstaande facturen”: per factuur factuurnummer, bedrag, status. Totaalbedrag bovenaan als er openstaande facturen zijn. Link “Alle facturen” naar
/invoices. - Check blok “Vaccinatiestatus”: honden met verlopen of bijna verlopen vaccinaties, per hond naam + welk vaccin aandacht nodig heeft, link naar hondprofiel.
- Check snelkoppeling “Nieuwe boeking” navigeert naar
/bookings/new. - Check snelkoppeling “Facturen betalen” navigeert naar
/invoices(gefilterd op openstaand).
Resultaat: Dashboard toont relevante info in vier blokken, snelkoppelingen werken, vaccinatiestatus zichtbaar.
S-1a.5 Factuur aanmaken en berekening
Section titled “S-1a.5 Factuur aanmaken en berekening”Systeem maakt een factuur aan met correcte berekeningen inclusief meerdere diensten.
Dekt: 1a.4.1, 1a.4.2, 1a.4.3, 1a.4.4, 1a.4.8
Voorwaarden: Boeking bevestigd
- Bevestig een boeking. Systeem maakt factuur aan.
- Check factuurnummer format:
jaarXXXXXX(auto-increment). - Check factuurregels: per hond per dienst een regel met beschrijving, eenheid, aantal, bedrag.
- Maak een boeking met meerdere diensten voor dezelfde hond. Check dat elke dienst een eigen factuurregel heeft.
- Check subtotaal.
- Check BBO (6%) en BAZV (1.5%) apart uitgesplitst onder het subtotaal.
- Check totaalbedrag (subtotaal + BBO + BAZV).
- Check bankgegevens Dog Hotel Aruba op de factuur.
- Check klantgegevens op de factuur.
- Wijzig de prijs van een dienst in instellingen.
- Controleer dat de bestaande factuur de oude prijs behoudt (snapshot). Nieuwe boekingen gebruiken de nieuwe prijs.
Resultaat: Factuurnummer correct, factuurregels per hond per dienst, BBO en BAZV apart getoond, bankgegevens aanwezig, prijssnapshot werkt.
S-1a.6 Klant bekijkt facturen
Section titled “S-1a.6 Klant bekijkt facturen”Klant filtert en bekijkt eigen facturen.
Dekt: 1a.4.5
Voorwaarden: Klant heeft meerdere facturen (betaald + openstaand)
- Ga naar
/invoices. - Check filters (tabs of dropdown): Alle, Openstaand, Betaald, Verlopen.
- Bij filter “Openstaand”: check totaal openstaande bedrag bovenaan.
- Per factuur in de lijst: factuurnummer, datum, bedrag (incl. BBO en BAZV), status-badge (openstaand geel, betaald groen, verlopen rood).
- Filter op “Betaald”, alleen betaalde facturen zichtbaar.
- Filter op “Openstaand”, alleen openstaande zichtbaar.
- Filter op “Verlopen”, facturen voorbij betaaltermijn.
- Klik op een factuur, navigeert naar
/invoices/[id]. - Check factuurdetail: factuurnummer, factuurdatum, vervaldatum, hotelgegevens, klantgegevens, factuurregels, subtotaal, BBO, BAZV, totaalbedrag, betaalstatus.
- Bij openstaande factuur: check knop “Betalen” en knop “PDF downloaden”.
- Bij betaalde factuur: alleen “PDF downloaden” zichtbaar.
Resultaat: Filters werken correct, juiste facturen getoond, detail toont volledige factuurinfo.
S-1a.7 Admin factuuroverzicht en PDF
Section titled “S-1a.7 Admin factuuroverzicht en PDF”Admin bekijkt alle facturen en genereert een PDF.
Dekt: 1a.4.6, 1a.4.7
Voorwaarden: Facturen bestaan in het systeem
- Log in als admin.
- Ga naar
/admin/invoices. - Check filters: openstaand, betaald, verlopen.
- Check totaalbedragen per filtergroep bovenaan.
- Check tabel: factuurnummer, klant, datum, bedrag, status.
- Check knop “PDF genereren” per factuur.
- Check CSV export knop (voor de boekhouder).
- Klik “PDF genereren” op een factuur. Check dat PDF correct opent met alle factuurgegevens (via Forme PDF / Rust WASM op CF Workers).
- Open factuurdetail
/admin/invoices/[id]. Check dezelfde info als klant ziet plus extra acties. - Check knop “Herinnering sturen” bij openstaande/verlopen facturen. Stuurt herinneringsmail met betaallink.
Resultaat: Admin ziet alle facturen, filters werken, totaalbedragen per groep, PDF genereert correct, CSV export beschikbaar.
S-1a.8 Online betalen via Sentoo
Section titled “S-1a.8 Online betalen via Sentoo”Klant betaalt een factuur online via Sentoo, webhook verwerkt betaling.
Dekt: 1a.5.1, 1a.5.2, 1a.5.3
Voorwaarden: Openstaande factuur
- Klant opent factuur op
/invoices/[id], klikt op “Betalen”. - Check dat
POST /api/invoices/:id/paywordt aangeroepen. API roept Sentoo aan en retourneertpayment_urlen QR code. - Check tussenpagina: te betalen bedrag, QR code (voor mobiel bankieren), knop “Ga naar betalen”.
- Klik “Ga naar betalen”. Redirect naar Sentoo betaalpagina.
- Kies bank (Aruba Bank / CMB / Banco di Caribe).
- Voltooi betaling in bankapp.
- Sentoo stuurt webhook naar
POST /api/payments/webhook. - Check signature verificatie (
x-sentoo-signatureheader metSENTOO_WEBHOOK_SECRET). - Check dat factuur automatisch als “betaald” gemarkeerd wordt.
- Check dat bevestigingsmail naar klant wordt verstuurd.
- Stuur dezelfde webhook nogmaals. Check idempotentie (geen dubbele verwerking, factuur al betaald).
- Klant keert terug naar portaal en ziet factuur als “Betaald”.
Resultaat: Betaallink werkt, tussenpagina toont bedrag en QR, webhook verwerkt correct, idempotent, factuur gemarkeerd als betaald, bevestigingsmail verstuurd.
S-1a.9 Admin markeert handmatige betaling
Section titled “S-1a.9 Admin markeert handmatige betaling”Admin markeert een factuur als betaald bij cash/pin betaling via een modal.
Dekt: 1a.5.4, 1a.5.5
Voorwaarden: Openstaande factuur, klant betaalt ter plekke
- Log in als admin, ga naar
/admin/invoices. - Open een openstaande factuur op
/admin/invoices/[id]. - Klik “Markeer als betaald”.
- Check dat een modal verschijnt met: keuze betaalmethode (Cash / PIN) en het bedrag ter bevestiging.
- Selecteer “Cash” en bevestig.
- Check
PATCH /api/admin/invoices/:id/mark-paidmet methode, tijdstip en medewerker-ID. - Check dat de factuur nu als “betaald” gemarkeerd is.
- Check dat de klant een bevestigingsmail ontvangt.
- Ga naar factuuroverzicht, filter op betaald. Check dat de factuur daar staat.
Resultaat: Handmatige betaling geregistreerd via modal met methode-keuze en bedragbevestiging, tijdstip en medewerker vastgelegd, bevestigingsmail verstuurd.
S-1a.10 Email notificaties
Section titled “S-1a.10 Email notificaties”Systeem verstuurt emails op de juiste momenten in de juiste taal.
Dekt: 1a.6.1, 1a.6.2, 1a.6.3, 1a.6.4, 1a.6.5
Voorwaarden: Resend geconfigureerd, React Email templates aanwezig
- Registreer een nieuwe klant en rond onboarding af. Check welkomstmail met link naar het portaal.
- Check dat de link in de welkomstmail het juiste domein heeft (productie of staging).
- Maak een boeking. Check boekingsbevestigingsmail met boekingsdetails, datum, hond(en) en betaallink.
- Betaal de factuur. Check betaalbevestigingsmail met factuurnummer en bedrag.
- Controleer dat admin een notificatie ontvangt bij nieuwe boeking (met link naar de boeking).
- Wissel taal naar EN in klantprofiel. Trigger een nieuwe email. Check dat de email in het Engels is.
- Wissel terug naar NL, trigger email. Check dat de email in het Nederlands is.
- Controleer dat templates variabelen correct vullen (naam, bedrag, datum etc.).
Resultaat: Alle trigger-emails worden verstuurd in de juiste taal met correcte data en werkende links.
S-1a.11 Admin beheert klanten en honden
Section titled “S-1a.11 Admin beheert klanten en honden”Admin zoekt klanten, bekijkt profielen en beheert hondgegevens.
Dekt: 1a.7.1, 1a.7.2, 1a.7.3, 1a.7.4, 1a.7.5
Voorwaarden: Meerdere klanten en honden in het systeem
- Ga naar
/admin/clients. Check zoekbalk bovenaan. - Zoek op naam, vind klant. Zoek op email, zelfde klant. Zoek op telefoon, zelfde klant.
- Check klanttabel: naam, aantal honden, laatste boeking, status (actief / onboarding niet voltooid).
- Open klantprofiel op
/admin/clients/[id]. - Check secties: persoonsgegevens (bewerkbaar via “Bewerken” knop), honden met vaccinatiestatus, boekingshistorie (nieuwste eerst), factuuroverzicht met totaal openstaand.
- Bewerk een klantgegeven, klik “Opslaan”. Check
PATCH /api/admin/clients/:iden succesmelding. - Ga naar
/admin/dogs. Check zoekbalk (hondnaam of eigenaar) en filter op vaccinatiestatus. - Check hondentabel: naam, ras, eigenaar, vaccinatiestatus.
- Open een hondprofiel op
/admin/dogs/[id]. - Bewerk gegevens, opslaan.
- Check veld “Bijzonderheden” (
special_notes). Vul tekst in en sla op. - Check dat
special_notesNIET zichtbaar is voor de klant in het klantportaal. - Check dat
special_notesWEL getoond wordt bij de volgende check-in van die hond. - Ga naar vaccinaties. Klik “Goedkeuren” bij een vaccinatie. Check
PATCH /api/admin/vaccinations/:idmetverified_by_admin = true. - Check dat de vaccinatiestatus direct bijwerkt in de UI.
- Voeg handmatig een vaccinatie toe via “Vaccinatie toevoegen” (voor fysiek meegebrachte bewijzen).
Resultaat: Zoeken werkt op naam, email en telefoon, profiel toont volledige info, special_notes alleen admin-zichtbaar en beschikbaar bij check-in, vaccinaties verificeerbaar.
S-1a.12 Admin instellingen
Section titled “S-1a.12 Admin instellingen”Admin beheert diensten, contactgegevens en medewerkers.
Dekt: 1a.8.1, 1a.8.2, 1a.8.3
Voorwaarden: Admin ingelogd
- Ga naar
/admin/settings. - Open tab/sectie “Diensten”. Check tabel: naam, type (single/bundle/subscription), prijs, eenheid, actief/inactief.
- Klik “Nieuwe dienst”. Vul naam, beschrijving, prijs, eenheid (per dag/nacht/les/maand), type in. Check
POST /api/admin/services. - Nieuwe dienst verschijnt in de lijst.
- Toggle een dienst naar “inactief”. Check dat die dienst niet meer zichtbaar is voor klanten.
- Bewerk een prijs via “Dienst bewerken”, opslaan. Check
PATCH /api/admin/services/:id. - Open tab “Contactgegevens”. Vul hotelnaam, upload logo, adres, telefoonnummer, email in. Check
PATCH /api/admin/settings. - Check dat deze gegevens op facturen en in emails verschijnen.
- Open tab “Medewerkers”. Check lijst met naam, email, rol.
- Klik “Medewerker toevoegen”. Vul naam, email en rol (admin / medewerker / trainer) in. Check
POST /api/admin/users. - Check dat de medewerker een uitnodigingsmail ontvangt met link om wachtwoord in te stellen.
- Log in als medewerker met rol “trainer”. Check dat trainer lessen kan inplannen en notities kan toevoegen bij trainingen.
- Check dat trainer GEEN toegang heeft tot
/admin/settings(instellingen) en financieel overzicht. - Deactiveer een medewerker. Check dat die niet meer kan inloggen.
Resultaat: Diensten beheerbaar met types en eenheden, deactivatie werkt, contactgegevens op facturen, medewerkerrollen correct: trainer kan lessen beheren maar geen instellingen wijzigen.
S-1a.13 Klant accountbeheer
Section titled “S-1a.13 Klant accountbeheer”Klant bewerkt persoonlijke gegevens en instellingen.
Dekt: 1a.9.1, 1a.9.2, 1a.9.3
Voorwaarden: Klant ingelogd
- Ga naar
/account. - Check sectie “Persoonlijke gegevens”: dezelfde velden als stap 1 van de onboarding, voorgevuld.
- Bewerk naam, klik “Opslaan”. Check
PATCH /api/clients/:iden succesmelding “Gegevens opgeslagen.” - Bewerk adres en telefoon, opslaan.
- Check sectie “Wachtwoord wijzigen”: velden huidig wachtwoord, nieuw wachtwoord (min. 8 karakters), bevestig nieuw wachtwoord.
- Wijzig wachtwoord. Log uit. Log in met nieuw wachtwoord. Werkt.
- Probeer wachtwoord te wijzigen met fout huidig wachtwoord. Check foutmelding “Het huidige wachtwoord is onjuist.”
- Vul twee nieuwe wachtwoorden in die niet overeenkomen. Check foutmelding “Wachtwoorden komen niet overeen.”
- Vul nieuw wachtwoord in korter dan 8 tekens. Check foutmelding “Wachtwoord moet minimaal 8 karakters zijn.”
- Check sectie “Taalvoorkeur”: keuze NL/EN.
- Wijzig naar EN. Check dat de hele UI direct wisselt naar Engels en de voorkeur wordt opgeslagen.
- Wijzig terug naar NL.
Resultaat: Alle gegevens bewerkbaar, wachtwoord wijzigen werkt met correcte foutmeldingen, taalvoorkeur persistent en direct toegepast.
Edge cases
Section titled “Edge cases”EC-2 Onboarding afbreken en hervatten
Section titled “EC-2 Onboarding afbreken en hervatten”Klant stopt halverwege de onboarding en logt opnieuw in.
Versterkt: S-1a.1
- Start onboarding op
/onboarding, vul stap 1 in, sluit browser zonder stap 2. - Log opnieuw in. Check redirect naar
/onboarding(niet naar/dashboard). - Controleer dat stap 1 gegevens bewaard zijn (geen dubbele invoer).
- Rond stap 2 en 3 af.
onboarding_completed = true. - Log opnieuw in. Nu wel redirect naar
/dashboard(niet meer naar onboarding). - Probeer handmatig naar
/onboardingte navigeren. Check redirect naar/dashboard.
Resultaat: State persistent over sessies, geen dubbele data, onboarding is eenmalig.
EC-3 Upload validatie (foto’s en documenten)
Section titled “EC-3 Upload validatie (foto’s en documenten)”Foute bestanden uploaden bij hondprofiel en vaccinaties.
Versterkt: S-1a.1, S-1a.3
- Upload hondfoto groter dan max grootte. Foutmelding met limiet.
- Upload bestand met verkeerd formaat (bijv. .exe als foto). Geweigerd.
- Upload vaccinatiedocument groter dan limiet. Foutmelding.
- Upload vaccinatie met vervaldatum in het verleden. Waarschuwing (status meteen “verlopen”).
- Upload vaccinatie zonder vervaldatum. Verplicht veld fout.
- Controleer dat bestandsnaam gesanitiseerd wordt (geen path traversal).
- Ga naar
/dogs. Check dat een hond zonder geuploadde foto een placeholder afbeelding toont. - Upload een nieuw vaccinatiedocument voor een vaccin dat al een document heeft. Check dat het oude document wordt overschreven (re-upload).
- Check dat na re-upload het document weer op “In afwachting van goedkeuring” staat.
Resultaat: Alle uploads gevalideerd op type en grootte, placeholder bij ontbrekende foto, re-upload overschrijft correct en reset verificatie.
EC-4 Vaccinatie grensgevallen
Section titled “EC-4 Vaccinatie grensgevallen”Testen van vaccinatiestatus op grensmomenten.
Versterkt: S-1a.3, S-2.7
- Vaccinatie die vandaag verloopt. Status “verlopen” of “geldig”? (definitie vastleggen)
- Vaccinatie die morgen verloopt. Status “bijna verlopen”.
- Vaccinatie exact 30 dagen voor verval. Reminder verstuurd.
- Vaccinatie 31 dagen voor verval. Nog geen reminder.
- Hond met 1 van 3 vaccinaties verlopen. Vaccinatiestatus hond = “verlopen” (striktste).
- Admin keurt vaccinatie goed (
verified_by_admin = true). Klant uploadt daarna een nieuw document voor hetzelfde vaccin. Check datverified_by_adminreset naarfalse. - Check dat de admin opnieuw moet goedkeuren na de reset.
Resultaat: Grensgevallen consistent behandeld, striktste vaccin bepaalt hondstatus, nieuwe upload reset altijd de verificatiestatus.
EC-5 Belastingberekening en afrondingsfouten
Section titled “EC-5 Belastingberekening en afrondingsfouten”Correcte AWG berekeningen bij oneven bedragen.
Versterkt: S-1a.5
- Dienst met prijs 33 AWG. BBO (6%) = 1,98. BAZV (1,5%) = 0,495. Check afronding.
- Meerdere factuurregels. Belasting per regel of over totaal? (consistentie)
- Factuur met korting. Belasting over bedrag NA korting.
- Factuurnummer: check dat nummering geen gaten heeft na een geannuleerde factuur.
- Twee facturen snel na elkaar aanmaken. Geen duplicaat factuurnummers (race condition).
Resultaat: Consistente afronding, belasting altijd na korting, geen gaten in nummering.
EC-6 Sentoo betalingsfouten
Section titled “EC-6 Sentoo betalingsfouten”Alle foutpaden bij Sentoo betalingen.
Versterkt: S-1a.8
- Klant start betaling maar breekt af bij de bank. Factuur blijft “openstaand”.
- Sentoo stuurt webhook met ongeldige signature. 401, niet verwerkt.
- Sentoo stuurt webhook voor onbekende factuur. Gelogd, geen crash.
- Sentoo stuurt webhook met status “failed”. Factuur blijft openstaand, klant geinformeerd.
- Netwerk timeout tijdens webhook verwerking. Sentoo retry, idempotent afgehandeld.
- Betaallink verlopen. Klant ziet melding “Deze betaallink is verlopen.” en kan een nieuwe aanvragen.
- Dubbele webhook (retry door Sentoo). Geen dubbele betaalmarkering.
- Klant sluit browser tijdens betaling. Webhook komt alsnog binnen als betaling gelukt is, factuurstatus wordt bijgewerkt.
Resultaat: Geen enkele betaalfout leidt tot inconsistente data of crashes.