Fase 1b: Trainingen
10 user stories, 4 scenario’s + 1 edge case.
S-1b.1 Klant boekt een training
Section titled “S-1b.1 Klant boekt een training”Een klant doorloopt de volledige trainingsboekingsflow: kiezen, hond selecteren, betalen.
Dekt: 1b.1.1, 1b.1.2, 1b.1.3, 1b.1.4, 1b.1.5
Voorwaarden: Klant onboarding voltooid, hond met geldige vaccinaties, trainingen beschikbaar
Groepstraining
Section titled “Groepstraining”- Ga naar
/bookings/new, kies dienst “Training” - Check dat alleen trainingen met beschikbare plekken worden getoond (bijv. “4/12 beschikbaar”)
- Check dat volle trainingen (12/12) niet in de lijst staan
- Selecteer “Puppy/Basic”
- Selecteer hond. Systeem checkt vaccinaties en leeftijd.
- Probeer een hond die exact 3 maanden oud is. Moet selecteerbaar zijn (grens is “jonger dan 3 maanden”).
- Probeer een hond van 2 maanden en 29 dagen. Geblokkeerd met melding: “Je hond moet minimaal 3 maanden oud zijn voor training.”
- Selecteer een hond met een vaccinatie die binnen 30 dagen verloopt. Waarschuwing verschijnt: “Let op: vaccinatie verloopt binnenkort.” Hond is wel selecteerbaar.
- Selecteer een hond met verlopen vaccinatie. Geblokkeerd met melding: “Vaccinaties verlopen. Upload een nieuw bewijs via Mijn honden.”
- Selecteer een geschikte hond, klik “Volgende”
- Bekijk overzicht. Check dat de volgende regels apart getoond worden: training, hond(en), prijs per hond, BBO (6%), BAZV (1,5%), totaal inclusief belasting.
- Klik “Bevestigen en betalen”. Boeking wordt aangemaakt met status
pending. - Factuur wordt aangemaakt (100% vooraf). Sentoo betaallink en QR code verschijnen.
- Betaal via Sentoo. Webhook markeert factuur als betaald.
- Boekingsstatus blijft
pendingtot admin bevestigt. - Ga naar
/bookings. Check dat de training verschijnt onder tab “Aankomend” met status “wacht op bevestiging” (zolang pending).
Prive trainingen
Section titled “Prive trainingen”- Ga naar
/bookings/new, kies dienst “Training” - Selecteer “Prive 1 les”. Check prijs. Bevestig en betaal.
- Herhaal voor “Prive 3 lessen” en “Prive 5 lessen”. Check dat prijs per pakket verschilt.
- Check dat prive trainingen altijd beschikbaar zijn (geen plekken limiet).
Resultaat: Boekingsflow compleet voor groep en prive, vaccinatiecheck werkt (waarschuwing vs. blokkering), leeftijdsgrens op exact 3 maanden, belastingen apart getoond, pending status zichtbaar als “wacht op bevestiging”, prive pakketten correct geprijsd.
S-1b.2 Training met meerdere honden
Section titled “S-1b.2 Training met meerdere honden”Klant schrijft twee honden in voor dezelfde training.
Dekt: 1b.1.2, 1b.1.3
Voorwaarden: Klant heeft 2 honden, beide met geldige vaccinaties
- Ga naar
/bookings/new, kies dienst “Training” - Selecteer een groepstraining
- Selecteer beide honden via de checkboxes
- Check dat prijs per hond apart berekend wordt op het overzicht
- Check totaalbedrag: prijs per hond x 2 + BBO (6%) + BAZV (1,5%)
- Bevestig en betaal
Resultaat: Factuurregels per hond, correcte totaalberekening met belastingen.
S-1b.3 Admin beheert trainingen
Section titled “S-1b.3 Admin beheert trainingen”Admin maakt trainingen aan, beheert aanvragen en plant lessen in.
Dekt: 1b.2.1, 1b.2.2, 1b.2.3, 1b.2.4
Voorwaarden: Admin ingelogd, trainingsaanvragen binnengekomen
Training CRUD
Section titled “Training CRUD”- Ga naar
/admin/training. Klik “Nieuwe training”. - Vul in: naam “Obedience 1”, type “groep”, beschrijving “Gehoorzaamheidstraining niveau 1”, max deelnemers 12, prijs, aantal lessen 6, actief aan.
- Check dat het beschrijving-veld (textarea) correct wordt opgeslagen en getoond.
- Controleer dat training in lijst verschijnt met kolommen: naam, type, deelnemers (0/12), status (actief).
- Bewerk training: wijzig max deelnemers naar 10, opslaan. Check dat het getal bijgewerkt is.
- Deactiveer training. Check dat deze niet meer verschijnt in de boekingsflow voor klanten.
- Activeer opnieuw. Check dat training weer boekbaar is.
Aanvragen beoordelen
Section titled “Aanvragen beoordelen”- Ga naar admin dashboard. Check badge bij “Meldingen” met aantal nieuwe aanvragen.
- Ga naar
/admin/bookings, filter op statuspending. - Open een aanvraag. Check dat je ziet: klantgegevens (naam, telefoon), hond (naam, ras, leeftijd, vaccinatiestatus), gekozen training, betaalstatus.
- Klik “Bevestigen”. Status wordt
confirmed. Klant ontvangt bevestigingsmail. - Open een andere aanvraag. Klik “Afwijzen”. Vul verplichte reden in. Status wordt
cancelled. Klant ontvangt mail met reden. Betaling wordt als te restitueren gemarkeerd. Plek komt vrij.
Lesinplanning
Section titled “Lesinplanning”- Ga naar
/admin/training/[bundle_id]. Check pakketinfo: klant, hond, training, voortgang. - Klik “Inplannen” bij een les zonder datum. Vul datum (date picker) en tijdstip (time picker) apart in. Opslaan.
- Check dat de klant de geplande les ziet op
/subscriptions/training/[id]. - Wijzig een ingeplande les: klik op de bestaande datum, pas datum en/of tijdstip aan, opslaan. Check dat de klant de nieuwe datum ziet.
- Klik “Voltooien” bij een les. Voeg trainer notitie toe (textarea). Opslaan.
- Check dat de notitie pas zichtbaar is voor de klant nadat de les status
completedheeft. Niet eerder. - Voltooi alle lessen. Check dat het trainingspakket automatisch als voltooid wordt gemarkeerd en de boeking status
checked_outkrijgt.
Resultaat: Trainingen CRUD werkt met beschrijving, aanvragen bevestigbaar/afwijsbaar, lessen planbaar met aparte datum/tijdstip pickers, les opnieuw inplannen werkt, notities alleen zichtbaar na voltooiing.
S-1b.4 Klant volgt trainingsvoortgang
Section titled “S-1b.4 Klant volgt trainingsvoortgang”Klant bekijkt de voortgang van een lopende training.
Dekt: 1b.3.1
Voorwaarden: Klant ingeschreven voor training, lessen ingepland
- Ga naar
/bookings. Klik op de trainingsboeking. - Check dat er een link naar de trainingsvoortgang staat op de boekingsdetailpagina.
- Ga naar
/dogs/[id](hondprofiel). Check dat daar ook een link naar de trainingsvoortgang staat. - Ga naar
/subscriptions/training/[id]. - Check voortgangsbalk: “Les 2 van 6” met percentage.
- Check lesoverzicht: per les het lesnummer, datum/tijdstip (of “Nog niet ingepland”), status (gepland/voltooid/niet ingepland).
- Check dat trainer notities alleen verschijnen bij voltooide lessen.
- Check dat nog niet ingeplande lessen getoond worden als “Nog niet ingepland” zonder datum.
Resultaat: Voortgang correct weergegeven, links vanuit boekingsdetail en hondprofiel, lessen en notities zichtbaar per status.
Edge cases
Section titled “Edge cases”EC-7 Training capaciteit en edge cases
Section titled “EC-7 Training capaciteit en edge cases”Grensgevallen bij trainingsboekingen.
Versterkt: S-1b.1, S-1b.3
- Training met 12/12 plekken bezet. 13e klant ziet training niet in de lijst op
/bookings/new. - Twee klanten boeken tegelijkertijd de laatste plek (race condition). Slechts een van de twee slaagt. De ander krijgt melding: “Deze training is helaas vol. Kies een andere training.”
- Check dat de plekken-teller correct werkt, bijv. “4/12 beschikbaar” wordt “5/12 beschikbaar” na een nieuwe inschrijving.
- Klant boekt training maar betaalt niet. Wat is de reservation timeout? Boeking blijft op
pending, admin ziet “Betaling: openstaand”. - Hond met niet-geverifieerde vaccinaties (admin nog niet goedgekeurd). Boeken geblokkeerd.
- Admin wijst aanvraag af. Klant krijgt notificatie, plek wordt vrijgegeven. Teller gaat terug.
- Klant annuleert betaalde training. Refund beleid: niet-restitueerbaar of terugbetaling?
- Training met 0 ingeplande lessen. Klant ziet “Nog niet ingepland” per les, geen lege pagina.
Resultaat: Capaciteit strikt afgedwongen inclusief bij race conditions, plekken-teller actueel, onbetaalde boekingen hebben timeout, duidelijke feedback.