Skip to content

Fase 1b: Trainingen

Fase 1b is de eerste dienst die live gaat. Trainingen zijn de eenvoudigste dienst: 100% betaling vooraf, maximaal 12 deelnemers per training, geen gesplitste betalingen of kamertoewijzing. Het test de volledige keten van boeking tot betaling tot uitvoering.


Route: /bookings/new (met dienst = training)

De klant start een nieuwe boeking via de knop “Nieuwe boeking” op het dashboard of via /bookings. De boekingsflow voor trainingen heeft drie stappen.

Wat de gebruiker ziet:

Een lijst van beschikbare trainingen. Alleen trainingen met vrije plekken worden getoond.

TrainingOmschrijvingPlekken
Puppy / BasicBasistraining voor pupsbijv. 4/12 beschikbaar
Obedience 1Gehoorzaamheidstraining niveau 1bijv. 2/12 beschikbaar
Obedience 2 + AgilityGevorderde gehoorzaamheid met agilitybijv. 7/12 beschikbaar
Prive 1 lesIndividuele trainingslesaltijd beschikbaar
Prive 3 lessenPakket van 3 privelessenaltijd beschikbaar
Prive 5 lessenPakket van 5 privelessenaltijd beschikbaar

Trainingen die vol zitten (12/12) worden niet getoond. Per training staat het aantal beschikbare plekken vermeld.

De klant selecteert een training en klikt “Volgende”.

Wat de gebruiker ziet:

Een lijst van de honden van de klant als selecteerbare kaarten. Per hond:

  • Foto, naam, ras, leeftijd
  • Vaccinatiestatus

Vaccinatiecheck:

  • Verlopen vaccinatie: de hond is niet selecteerbaar. Er staat een melding bij: “Vaccinaties verlopen. Upload een nieuw bewijs via Mijn honden.”
  • Bijna verlopen (binnen 30 dagen): de hond is selecteerbaar, maar er staat een waarschuwing: “Let op: vaccinatie verloopt binnenkort.”

Leeftijdscheck:

  • Honden jonger dan 3 maanden zijn niet selecteerbaar. Melding: “Je hond moet minimaal 3 maanden oud zijn voor training.”

De klant selecteert een of meerdere honden en klikt “Volgende”.

Wat de gebruiker ziet:

Een samenvatting van de boeking:

OnderdeelWaarde
TrainingNaam van de geselecteerde training
Hond(en)Namen van de geselecteerde honden
Prijs per hondBedrag per hond
BBO (6%)Belastingbedrag
BAZV (1.5%)Belastingbedrag
TotaalTotaalbedrag inclusief belasting

De belastingen zijn inbegrepen in het totaalbedrag, maar worden apart getoond voor transparantie.

Knop “Bevestigen en betalen”.

Wat er gebeurt bij bevestigen:

  1. POST /api/bookings maakt de boeking aan met status pending.
  2. Het systeem maakt automatisch een factuur aan (100% vooraf) via POST /api/invoices.
  3. Er wordt een Sentoo transactie aangemaakt met betaallink en QR code.
  4. De klant wordt doorgestuurd naar de betaalpagina (zie Fase 1a, sectie 6: Sentoo betaalflow).
  5. De admin ontvangt een emailnotificatie over de nieuwe aanvraag.

Na betaling:

  1. De Sentoo webhook markeert de factuur als betaald.
  2. De boekingsstatus wordt bijgewerkt van pending naar confirmed (na admin bevestiging, zie sectie 5).
  3. De klant ontvangt een bevestigingsmail met de boekingsdetails.

Foutmeldingen:

SituatieMelding
Training inmiddels vol”Deze training is helaas vol. Kies een andere training.”
Vaccinatie verlopen”De vaccinaties van [hondnaam] zijn verlopen. Update deze eerst.”
Hond te jong”Je hond moet minimaal 3 maanden oud zijn voor training.”
Betaling mislukt”De betaling is niet gelukt. Probeer het opnieuw.”
Server error”Er ging iets mis. Probeer het later opnieuw.”

Route: /bookings

Een overzicht van alle boekingen, verdeeld in drie tabs:

Tab: Aankomend Boekingen met status confirmed waarvan de startdatum in de toekomst ligt.

Tab: Actief Boekingen met status checked_in of lopende trainingen.

Tab: Verleden Boekingen met status checked_out, cancelled of voltooide trainingen.

Per boeking in elke tab:

KolomOmschrijving
Hond(en)Namen van de honden
DienstNaam van de training
DatumStart- en einddatum (of “lopend” voor trainingen)
StatusBadge: bevestigd (blauw), actief (groen), afgerond (grijs), geannuleerd (rood)
BedragTotaalbedrag

Klikken op een boeking toont de details.

Bovenaan: knop “Nieuwe boeking” naar /bookings/new.

Bij het klikken op een trainingsboeking ziet de klant:

  • Training naam en type
  • Hond(en)
  • Status
  • Gekoppelde factuur met betaalstatus
  • Link naar de trainingsvoortgang (zie sectie 3)

Route: /subscriptions/training/[id]

Een detailpagina van het trainingspakket met voortgangsinformatie.

Voortgangsbalk:

  • Visuele balk: les X van Y (bijv. “Les 3 van 6”)
  • Percentage voltooid

Lesoverzicht:

Een lijst van alle lessen in het pakket, gesorteerd op datum:

KolomOmschrijving
LesLesnummer (Les 1, Les 2, etc.)
DatumGeplande datum en tijdstip (of “Nog niet ingepland”)
StatusGepland (blauw), voltooid (groen), nog niet ingepland (grijs)
Trainer notitiesNotities van de trainer na afloop van de les

Per voltooide les kan de klant de notities van de trainer lezen. Dit geeft inzicht in de voortgang van de hond.

Geplande lessen:

  • Datum en tijdstip van de eerstvolgende les(sen)
  • Locatie (als die is opgegeven)

Nog niet ingeplande lessen:

  • Worden getoond als “Nog niet ingepland” zonder datum. De trainer plant deze later in.

Route: /admin/training

Wat de admin ziet:

Een overzicht van alle trainingen met:

KolomOmschrijving
NaamNaam van de training
TypeGroep of prive
DeelnemersAantal ingeschreven / maximum (bijv. 8/12)
StatusActief / vol / inactief

Acties:

  • Knop “Nieuwe training” om een training aan te maken.
  • Per training: bewerken of deactiveren.

Wat de admin invult:

VeldTypeVerplicht
NaamtextJa
Typeselect (groep/prive)Ja
BeschrijvingtextareaNee
Maximaal aantal deelnemersnumberJa (standaard 12)
PrijsnumberJa
Aantal lessennumberJa
ActieftoggleJa (standaard aan)

Wat er gebeurt:

  • POST /api/admin/services met type training.
  • De training verschijnt in de lijst en wordt zichtbaar voor klanten in de boekingsflow.

Dezelfde velden als aanmaken, voorgevuld. Wijzigingen aan prijs gelden alleen voor nieuwe inschrijvingen.

De admin kan een training op inactief zetten. Gevolgen:

  • De training is niet meer zichtbaar voor klanten in de boekingsflow.
  • Bestaande inschrijvingen worden niet beinvloed.
  • De training kan later weer geactiveerd worden.

Wanneer een klant een training boekt en betaalt, komt de aanvraag binnen bij de admin. De admin moet de aanvraag bevestigen of afwijzen.

  • Op het admin dashboard onder “Meldingen”: badge met aantal nieuwe aanvragen.
  • In het boekingenoverzicht (/admin/bookings): gefilterd op status pending.

Wat de admin ziet per aanvraag:

  • Klantgegevens (naam, telefoon)
  • Hond(en): naam, ras, leeftijd, vaccinatiestatus
  • Gekozen training
  • Betaalstatus van de factuur

Acties:

ActieWat er gebeurt
BevestigenStatus wordt confirmed. De klant ontvangt een bevestigingsmail. De trainer kan lessen gaan inplannen.
AfwijzenStatus wordt cancelled. De klant ontvangt een mail met de reden. De betaling wordt als te restitueren gemarkeerd.

Bevestigen:

  1. Admin klikt “Bevestigen”.
  2. PATCH /api/admin/bookings/:id met status = confirmed.
  3. Bevestigingsmail naar klant.

Afwijzen:

  1. Admin klikt “Afwijzen”.
  2. Er verschijnt een tekstveld voor de reden (verplicht).
  3. PATCH /api/admin/bookings/:id met status = cancelled en cancellation_reason.
  4. Mail naar klant met uitleg.
SituatieWat er gebeurt
Klant heeft niet betaaldDe aanvraag blijft op pending staan. De admin ziet “Betaling: openstaand” bij de aanvraag. Bevestigen is pas mogelijk na betaling.
Training inmiddels volDe admin ziet een waarschuwing “Let op: deze training heeft geen vrije plekken meer.” Bevestigen is geblokkeerd.
Vaccinatie verlopen na aanvraagDe admin ziet een waarschuwing bij de hond. De admin kan alsnog bevestigen of afwijzen naar eigen inzicht.

Route: /admin/training/[bundle_id]

Na bevestiging van een inschrijving kan de admin of trainer lessen inplannen en bijhouden.

Een detailpagina van het trainingspakket:

Pakketinfo:

  • Klant: naam + contactgegevens
  • Hond: naam, ras, leeftijd
  • Training: naam, type
  • Voortgang: les X van Y

Lesoverzicht:

Een tabel met alle lessen in het pakket:

KolomOmschrijving
LesLesnummer
DatumDatum + tijdstip (of “Niet ingepland”)
StatusIngepland / voltooid / niet ingepland
NotitiesTrainer notities (na afloop)
ActiesInplannen / status bijwerken / notitie toevoegen
  1. Admin/trainer klikt “Inplannen” bij een les zonder datum.
  2. Er verschijnt een formulier:
VeldTypeVerplicht
DatumdateJa
TijdstiptimeJa
  1. Bij opslaan: PATCH /api/admin/training/:bundle_id/lessons/:lesson_id met datum en tijdstip.
  2. De klant ziet de geplande les verschijnen op de voortgangspagina.

Na afloop van een les:

  1. Admin/trainer klikt “Voltooien” bij de les.
  2. Er verschijnt een tekstveld voor notities:
VeldTypeVerplicht
Trainer notitiestextareaNee, maar aanbevolen
  1. Bij opslaan: PATCH /api/admin/training/:bundle_id/lessons/:lesson_id met status = completed en trainer_notes.
  2. De notities zijn direct zichtbaar voor de klant op de voortgangspagina.

Voorbeeld notitie:

“Buddy heeft vandaag goed gewerkt aan het commando ‘zit’. Bij ‘blijf’ is nog wat extra oefening nodig. Tip voor thuis: oefen 5 minuten per dag met beloningen.”

Als een les moet worden verplaatst:

  1. Admin/trainer klikt op de bestaande datum bij een ingeplande les.
  2. Het datumformulier verschijnt opnieuw met de huidige waarden.
  3. Wijzig datum en/of tijdstip en sla op.
  4. De klant ziet de bijgewerkte datum op de voortgangspagina.

Wanneer alle lessen in het pakket status completed hebben:

  • Het trainingspakket wordt automatisch als voltooid gemarkeerd.
  • De boeking krijgt status checked_out.
  • De klant ziet de training verplaatst naar de tab “Verleden” in het boekingenoverzicht.