Voor onderwijs en nieuwsgierige salonhouders
Hoe de Planobook-boekingsengine werkt
Een klant kiest op de boekingspagina een behandeling en ziet een rijtje vrije tijden. Achter dat rijtje zit een echte planningspuzzel: roosters, pauzes, opruimtijd, gedeelde kamers en klanten die tegelijk klikken. Op deze pagina leggen we uit hoe Planobook die puzzel oplost, en je kunt het zelf proberen.
Door Mohamed Tourich · Software EngineerGepubliceerd op
In het kort
De boekingsengine van Planobook toont een klant alleen tijden waarop de gekozen medewerker volgens rooster werkt, geen pauze of andere afspraak heeft en ook de benodigde stoel of behandelkamer vrij is. Bij het opslaan controleert de database nog een keer dat twee afspraken van dezelfde medewerker nooit overlappen, zodat een dubbele boeking niet kan ontstaan. Planobook is Nederlandse salonsoftware uit Rotterdam voor salons met een team en een volle agenda: agenda, online boeken, kassa, klantenbeheer, website, webshop, cadeaubonnen, strippenkaarten, spaarpunten en dagprijzen in één, voor €39,95 per maand inclusief 2 medewerkers, exclusief btw, met 0 % commissie op boekingen.
Het planningsprobleem van een salon
Op het eerste gezicht is een salonagenda een simpel rooster. In de praktijk moet elke vrije tijd die een klant ziet aan een hele reeks voorwaarden tegelijk voldoen. Dit zijn de belangrijkste:
Medewerkers met roosters
Elke medewerker heeft eigen werktijden per weekdag, soms een avond of een vrije woensdag, en daarnaast losse vrije dagen of afwezigheid.
Behandelduur en pauzes
Knippen duurt een halfuur, kleuren anderhalf uur. Een pauze of een vast blok in het rooster mag nooit door een afspraak heen lopen.
Opruim- en schoonmaaktijd
Na een gezichtsbehandeling moet de kamer klaar voor de volgende klant. Die minuten zijn voor de klant onzichtbaar, maar wel bezet.
Middelen
Een behandelkamer, een stoel of een apparaat kan maar één klant tegelijk aan (of een vast aantal). Twee medewerkers die allebei vrij zijn, delen dan toch één kamer.
Combinaties en inwerktijd
Kleuren en knippen achter elkaar, of een kleuring met inwerktijd waarin de kapper ondertussen een andere klant helpt: één boeking, meerdere stukjes bezette tijd.
Meerdere vestigingen
Elke vestiging heeft een eigen agenda, eigen roosters en een eigen boekingspagina. De rekensom gebeurt per vestiging.
Tegelijk boeken
Twee klanten kunnen op hetzelfde moment op dezelfde vrije tijd klikken, terwijl de salon aan de balie ook net iets inplant. Er mag er maar één winnen.
De aanpak in grote lijnen
Planobook rekent vrije tijden niet vooraf voor de hele maand uit, maar op het moment dat iemand kijkt: per dag, per behandeling en per medewerker. Zo klopt het antwoord altijd met de agenda van dat moment. Conceptueel gaat het in vier stappen.
1. Het venster en de bezette blokken
Eerst bepaalt de engine het werkvenster van de medewerker op die dag, uit het weekrooster en eventuele afwijkingen. Binnen dat venster wordt alles wat al vastligt een bezet blok: afspraken (inclusief hun opruimtijd), pauzes, vrije uren en geblokkeerde momenten. Alle tijden worden in de tijdzone van de salon gerekend, zodat ook de wissel naar zomer- of wintertijd klopt.
2. Kandidaat-begintijden
Daarna maakt de engine een lijst met mogelijke begintijden: de tijden op het raster dat de salon heeft gekozen (bijvoorbeeld elk kwartier), plus de tijden direct na het einde van een bestaande afspraak. Die laatste zorgen dat een klant precies aansluitend kan boeken, ook als een afspraak niet netjes op het kwartier eindigt.
3. Elke kandidaat toetsen
Voor elke kandidaat telt de engine de behandelduur (en eventuele opruimtijd) op en kijkt of het hele interval binnen het venster past en met geen enkel bezet blok overlapt. Bij een combinatie of een kleuring met inwerktijd bestaat één boeking uit meerdere stukjes bezette tijd: tijdens de inwerktijd is de kapper vrij voor iemand anders, en elk stukje moet bij de juiste medewerker passen. Heeft een behandeling een middel nodig, zoals een behandelkamer, dan moet ook dat middel op dat moment beschikbaar zijn, rekening houdend met hoeveel er van zijn.
Met de instelling Slimme tijdsloten geeft de engine de voorkeur aan begintijden die geen onbruikbaar klein gaatje in de agenda achterlaten. Belangrijk detail: een vrije periode verdwijnt daardoor nooit helemaal. Past er alleen een tijd die wel een gaatje laat, dan blijft de vroegste daarvan gewoon zichtbaar.
4. Geen voorkeur
Kiest de klant voor Geen voorkeur, dan rekent de engine dezelfde stappen uit voor elke medewerker die de behandeling doet en online boekbaar is, in één keer, en voegt de resultaten samen. De klant ziet zo elke tijd waarop minstens één geschikte collega vrij is.
Waarom een dubbele boeking niet kan ontstaan
Vrije tijden tonen is één ding; garanderen dat er nooit twee klanten tegelijk in dezelfde stoel belanden is iets anders. Tussen het moment dat een klant een tijd ziet en het moment dat hij op Bevestigen drukt, kan een ander dezelfde tijd al hebben geboekt. Planobook gebruikt daarom twee lagen.
- Opnieuw controleren bij het opslaan. Een boeking wordt in één databasetransactie opgeslagen. Boekingen voor dezelfde medewerker of hetzelfde middel wachten daarbij kort op elkaar, en direct voor het opslaan wordt nog eens gecontroleerd of de tijd vrij is. Middelen worden steeds in dezelfde vaste volgorde vastgezet, zodat twee boekingen nooit op elkaar blijven wachten.
- Een regel in de database zelf. De database (PostgreSQL) heeft een zogeheten exclusion constraint: voor dezelfde salon en dezelfde medewerker mogen de tijdsintervallen van twee gewone, actieve afspraken niet overlappen. Geannuleerde afspraken en no-shows tellen niet mee. Zelfs als er ergens in de software een fout zou zitten, weigert de database zo'n overlappende afspraak. Afspraken die uit meerdere stukjes bestaan, zoals een kleuring met inwerktijd, worden per stukje bewaakt door de eerste laag.
Half-open intervallen
Een afspraak van 10:00 tot 10:30 is het interval [10:00, 10:30): het begin hoort erbij, het einde niet. Twee intervallen [a, b) en [c, d) overlappen precies als a < d en c < b. Daardoor mag een afspraak van 10:30 tot 11:00 direct aansluiten, terwijl 10:15 tot 10:45 wordt geweigerd. Dezelfde toets gebruikt de puzzel hieronder.
Voor een salon betekent dit: als de agenda bij elkaar komt via de boekingspagina, de balie en de telefoon, blijft hij kloppen. Wil de salon er zelf bewust een afspraak overheen zetten, dan kan dat na een bevestiging in de agenda; online boekingen zien die tijd gewoon als bezet.
Probeer het zelf: vul een salondag
Deze puzzel gebruikt een bewust eenvoudig first-fit-algoritme, een greedy aanpak: het neemt de aanvragen één voor één en geeft elke aanvraag de vroegste plek die nog past. Het is niet de engine van Planobook zelf (die werkt per boeking en met de stappen hierboven), maar het laat goed zien waar het knelt: vaardigheden, pauzes, opruimtijd en één gedeelde behandelkamer.
Klik op Volgende stap. Het algoritme pakt telkens één aanvraag, kijkt bij elke medewerker die de behandeling doet wat de eerste vrije plek is vanaf de gewenste tijd, en kiest de vroegste. Een geplaatste afspraak schuift daarna nooit meer.
Sanne
Noor
Behandelkamer
Grijs: buiten het rooster. Gestreept: pauze, of opruimtijd onderaan een afspraak. De kolom Behandelkamer toont dat er maar één kamer is: twee gezichtsbehandelingen kunnen niet tegelijk, ook niet bij verschillende medewerkers.
Om op te letten: zet de volgorde op Langste behandeling eerst en kijk of er minder afspraken verschuiven. Greedy algoritmes zijn snel en begrijpelijk, maar de volgorde maakt uit en het resultaat is niet altijd het best mogelijke. Precies daarom laat Planobook de klant zelf kiezen uit alle tijden die echt passen, in plaats van één tijd op te leggen.
Voor het onderwijs
Planning in een salon is een herkenbaar voorbeeld voor lessen over roosteren, operations research, databases en algoritmen: iedereen is weleens naar de kapper geweest. Je mag deze pagina en de puzzel vrij gebruiken in je les.
Oefenmateriaal: de Branchemonitor
In de Planobook Branchemonitor staan open datasets over de Nederlandse salonbranche, als CSV en JSON onder de licentie CC BY 4.0: afspraakgedrag (no-shows, hoe ver vooruit klanten boeken, drukste momenten), behandelprijzen per categorie en de cao-loontabel voor kappers. Alle cijfers zijn geanonimiseerd en opgeteld over alle salons; de live datasets vullen zich zodra er per cel genoeg salons meetellen.
Opdrachtideeën
mbo
Plan een salondag op papier
Gebruik de puzzel hierboven als start. Plan dezelfde aanvragen eerst zelf, daarna met het algoritme. Waar verschilt het, en welke volgorde levert de minste verschoven afspraken op?
hbo / wo, operations research
Greedy tegenover optimaal
Formuleer de salondag als intervalplanning met middelen (bijvoorbeeld als geheeltallig programma) en vergelijk de optimale oplossing met first fit en 'langste eerst'. Bedenk een voorbeeld waarin greedy slecht scoort.
hbo / wo, informatica
Dubbele boekingen in de database
Bouw in PostgreSQL een eigen afsprakentabel met een exclusion constraint op tijdsintervallen. Laat twee gelijktijdige transacties dezelfde tijd boeken en toon aan dat er precies één slaagt.
data en statistiek
Drukte en no-shows simuleren
Gebruik de dataset Afspraakgedrag in salons uit de Branchemonitor (drukste momenten, boekingsvoorsprong, no-shows) om aanvragen voor een week te simuleren. Hoeveel medewerkers heb je per dagdeel nodig?
bedrijfskunde
Rooster en omzet
Combineer een rooster met de dataset Behandelprijzen in salons en reken uit wat een uur bezette stoel oplevert. Wat doet opruimtijd met de bezettingsgraad?
Contact voor docenten
Gebruik je deze pagina in een vak, wil je een gastles of zoek je een praktijkcasus voor een project? Mail ons; we denken graag mee.
info@planobook.nlZo citeer je Planobook
Voor deze pagina (APA-stijl):
Planobook. (2026). Hoe de Planobook-boekingsengine werkt. https://planobook.nl/boekingsengine
Voor een dataset: noem Planobook Branchemonitor, de naam van de dataset, de peildatum en de link naar de datasetpagina, met de licentie CC BY 4.0.
Wat betekent dit voor je salon?
Je hoeft niets van algoritmen te weten om er plezier van te hebben. Je zet je roosters, behandelingen met hun duur en eventuele opruimtijd, en je kamers of apparaten één keer goed in Planobook. Daarna zien klanten op je boekingspagina alleen tijden die echt kunnen, dag en nacht, en staat elke boeking meteen in je agenda.


