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.
1. Training boeken
Section titled “1. Training boeken”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.
Stap 1: Training kiezen
Section titled “Stap 1: Training kiezen”Wat de gebruiker ziet:
Een lijst van beschikbare trainingen. Alleen trainingen met vrije plekken worden getoond.
| Training | Omschrijving | Plekken |
|---|---|---|
| Puppy / Basic | Basistraining voor pups | bijv. 4/12 beschikbaar |
| Obedience 1 | Gehoorzaamheidstraining niveau 1 | bijv. 2/12 beschikbaar |
| Obedience 2 + Agility | Gevorderde gehoorzaamheid met agility | bijv. 7/12 beschikbaar |
| Prive 1 les | Individuele trainingsles | altijd beschikbaar |
| Prive 3 lessen | Pakket van 3 privelessen | altijd beschikbaar |
| Prive 5 lessen | Pakket van 5 privelessen | altijd 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”.
Stap 2: Hond selecteren
Section titled “Stap 2: Hond selecteren”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”.
Stap 3: Overzicht en bevestigen
Section titled “Stap 3: Overzicht en bevestigen”Wat de gebruiker ziet:
Een samenvatting van de boeking:
| Onderdeel | Waarde |
|---|---|
| Training | Naam van de geselecteerde training |
| Hond(en) | Namen van de geselecteerde honden |
| Prijs per hond | Bedrag per hond |
| BBO (6%) | Belastingbedrag |
| BAZV (1.5%) | Belastingbedrag |
| Totaal | Totaalbedrag inclusief belasting |
De belastingen zijn inbegrepen in het totaalbedrag, maar worden apart getoond voor transparantie.
Knop “Bevestigen en betalen”.
Wat er gebeurt bij bevestigen:
POST /api/bookingsmaakt de boeking aan met statuspending.- Het systeem maakt automatisch een factuur aan (100% vooraf) via
POST /api/invoices. - Er wordt een Sentoo transactie aangemaakt met betaallink en QR code.
- De klant wordt doorgestuurd naar de betaalpagina (zie Fase 1a, sectie 6: Sentoo betaalflow).
- De admin ontvangt een emailnotificatie over de nieuwe aanvraag.
Na betaling:
- De Sentoo webhook markeert de factuur als betaald.
- De boekingsstatus wordt bijgewerkt van
pendingnaarconfirmed(na admin bevestiging, zie sectie 5). - De klant ontvangt een bevestigingsmail met de boekingsdetails.
Foutmeldingen:
| Situatie | Melding |
|---|---|
| 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.” |
2. Klant boekingenoverzicht
Section titled “2. Klant boekingenoverzicht”Route: /bookings
Wat de gebruiker ziet
Section titled “Wat de gebruiker ziet”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:
| Kolom | Omschrijving |
|---|---|
| Hond(en) | Namen van de honden |
| Dienst | Naam van de training |
| Datum | Start- en einddatum (of “lopend” voor trainingen) |
| Status | Badge: bevestigd (blauw), actief (groen), afgerond (grijs), geannuleerd (rood) |
| Bedrag | Totaalbedrag |
Klikken op een boeking toont de details.
Bovenaan: knop “Nieuwe boeking” naar /bookings/new.
Boekingsdetails
Section titled “Boekingsdetails”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)
3. Klant trainingsvoortgang
Section titled “3. Klant trainingsvoortgang”Route: /subscriptions/training/[id]
Wat de gebruiker ziet
Section titled “Wat de gebruiker ziet”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:
| Kolom | Omschrijving |
|---|---|
| Les | Lesnummer (Les 1, Les 2, etc.) |
| Datum | Geplande datum en tijdstip (of “Nog niet ingepland”) |
| Status | Gepland (blauw), voltooid (groen), nog niet ingepland (grijs) |
| Trainer notities | Notities 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.
4. Admin trainingsbeheer
Section titled “4. Admin trainingsbeheer”Route: /admin/training
Overzicht
Section titled “Overzicht”Wat de admin ziet:
Een overzicht van alle trainingen met:
| Kolom | Omschrijving |
|---|---|
| Naam | Naam van de training |
| Type | Groep of prive |
| Deelnemers | Aantal ingeschreven / maximum (bijv. 8/12) |
| Status | Actief / vol / inactief |
Acties:
- Knop “Nieuwe training” om een training aan te maken.
- Per training: bewerken of deactiveren.
Training aanmaken
Section titled “Training aanmaken”Wat de admin invult:
| Veld | Type | Verplicht |
|---|---|---|
| Naam | text | Ja |
| Type | select (groep/prive) | Ja |
| Beschrijving | textarea | Nee |
| Maximaal aantal deelnemers | number | Ja (standaard 12) |
| Prijs | number | Ja |
| Aantal lessen | number | Ja |
| Actief | toggle | Ja (standaard aan) |
Wat er gebeurt:
POST /api/admin/servicesmet typetraining.- De training verschijnt in de lijst en wordt zichtbaar voor klanten in de boekingsflow.
Training bewerken
Section titled “Training bewerken”Dezelfde velden als aanmaken, voorgevuld. Wijzigingen aan prijs gelden alleen voor nieuwe inschrijvingen.
Training deactiveren
Section titled “Training deactiveren”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.
5. Admin aanvragen beoordelen
Section titled “5. Admin aanvragen beoordelen”Wanneer een klant een training boekt en betaalt, komt de aanvraag binnen bij de admin. De admin moet de aanvraag bevestigen of afwijzen.
Waar te vinden
Section titled “Waar te vinden”- Op het admin dashboard onder “Meldingen”: badge met aantal nieuwe aanvragen.
- In het boekingenoverzicht (
/admin/bookings): gefilterd op statuspending.
Aanvraag beoordelen
Section titled “Aanvraag beoordelen”Wat de admin ziet per aanvraag:
- Klantgegevens (naam, telefoon)
- Hond(en): naam, ras, leeftijd, vaccinatiestatus
- Gekozen training
- Betaalstatus van de factuur
Acties:
| Actie | Wat er gebeurt |
|---|---|
| Bevestigen | Status wordt confirmed. De klant ontvangt een bevestigingsmail. De trainer kan lessen gaan inplannen. |
| Afwijzen | Status wordt cancelled. De klant ontvangt een mail met de reden. De betaling wordt als te restitueren gemarkeerd. |
Bevestigen:
- Admin klikt “Bevestigen”.
PATCH /api/admin/bookings/:idmetstatus = confirmed.- Bevestigingsmail naar klant.
Afwijzen:
- Admin klikt “Afwijzen”.
- Er verschijnt een tekstveld voor de reden (verplicht).
PATCH /api/admin/bookings/:idmetstatus = cancelledencancellation_reason.- Mail naar klant met uitleg.
Edge cases
Section titled “Edge cases”| Situatie | Wat er gebeurt |
|---|---|
| Klant heeft niet betaald | De aanvraag blijft op pending staan. De admin ziet “Betaling: openstaand” bij de aanvraag. Bevestigen is pas mogelijk na betaling. |
| Training inmiddels vol | De admin ziet een waarschuwing “Let op: deze training heeft geen vrije plekken meer.” Bevestigen is geblokkeerd. |
| Vaccinatie verlopen na aanvraag | De admin ziet een waarschuwing bij de hond. De admin kan alsnog bevestigen of afwijzen naar eigen inzicht. |
6. Admin lesinplanning en notities
Section titled “6. Admin lesinplanning en notities”Route: /admin/training/[bundle_id]
Na bevestiging van een inschrijving kan de admin of trainer lessen inplannen en bijhouden.
Wat de admin/trainer ziet
Section titled “Wat de admin/trainer ziet”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:
| Kolom | Omschrijving |
|---|---|
| Les | Lesnummer |
| Datum | Datum + tijdstip (of “Niet ingepland”) |
| Status | Ingepland / voltooid / niet ingepland |
| Notities | Trainer notities (na afloop) |
| Acties | Inplannen / status bijwerken / notitie toevoegen |
Les inplannen
Section titled “Les inplannen”- Admin/trainer klikt “Inplannen” bij een les zonder datum.
- Er verschijnt een formulier:
| Veld | Type | Verplicht |
|---|---|---|
| Datum | date | Ja |
| Tijdstip | time | Ja |
- Bij opslaan:
PATCH /api/admin/training/:bundle_id/lessons/:lesson_idmet datum en tijdstip. - De klant ziet de geplande les verschijnen op de voortgangspagina.
Les voltooien en notities toevoegen
Section titled “Les voltooien en notities toevoegen”Na afloop van een les:
- Admin/trainer klikt “Voltooien” bij de les.
- Er verschijnt een tekstveld voor notities:
| Veld | Type | Verplicht |
|---|---|---|
| Trainer notities | textarea | Nee, maar aanbevolen |
- Bij opslaan:
PATCH /api/admin/training/:bundle_id/lessons/:lesson_idmetstatus = completedentrainer_notes. - 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.”
Les opnieuw inplannen
Section titled “Les opnieuw inplannen”Als een les moet worden verplaatst:
- Admin/trainer klikt op de bestaande datum bij een ingeplande les.
- Het datumformulier verschijnt opnieuw met de huidige waarden.
- Wijzig datum en/of tijdstip en sla op.
- De klant ziet de bijgewerkte datum op de voortgangspagina.
Alle lessen voltooid
Section titled “Alle lessen voltooid”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.