Probleem
Eén maat voor alles
Brunch, lunch en diner hadden dezelfde reservatieduur — niet realistisch voor hoe een restaurant werkt.
Case study · businesslogica · tijdslotarchitectuur
Probleem
Eén maat voor alles
Brunch, lunch en diner hadden dezelfde reservatieduur — niet realistisch voor hoe een restaurant werkt.
Resultaat
Flexibel per moment
Beheerders kunnen per dag of tijdstip een andere reservatieduur instellen — zonder technische workarounds.
Compatibiliteit
Zonder breuk
Bestaande reservaties en instellingen bleven intact tijdens de overstap naar het nieuwe systeem.
Probleem
Een vaste TijdslotDuur werkte alleen zolang elk moment van de dag ongeveer hetzelfde aanvoelde. Maar een brunch van 90 minuten, een lunch van 120 minuten en een diner van 180 minuten vragen niet dezelfde reserveringslogica.
Praktisch gevolg
Analyse
Restaurants denken niet in één uniforme reservatieduur, maar in serviceblokken met verschillende ritmes.
Een brunch van 90 minuten en een diner van 180 minuten mogen niet door hetzelfde model geforceerd worden.
Met één globaal veld ontstonden handmatige workarounds en verwarring zodra dagen of uren afweken van de standaard.
Het echte probleem zat niet in de UI, maar in het onderliggende model dat te weinig lagen kende.
Restaurants denken in lagen: een globale standaard, afwijkingen per dag en uitzonderingen per tijdstip. Zodra je dat patroon herkent, is één enkel veld simpelweg te beperkt als beslissingsmodel.
Oplossing
We hebben de vaste duur niet verwijderd, maar in een hiërarchie geplaatst. De volgorde is bewust ontworpen: tijd override eerst, dan dag override, daarna pas de globale standaard.
Prioriteit in de UI
<ol class="mb-0 ps-3">
<li><strong>Tijd Override</strong> - Hoogste prioriteit (bijv. na 21:00 = geen eindtijd)</li>
<li><strong>Dag Override</strong> - Middel prioriteit (bijv. zondag = 90 minuten)</li>
<li><strong>Globale Standaard</strong> - Laagste prioriteit (TijdslotDuur hierboven)</li>
</ol>Servicecontract
public interface ITijdslotService
{
Task<int?> GetTijdslotDuurAsync(string restaurantId, DateTime reservatieTijd);
Task<TijdslotDagOverride> CreateDagOverrideAsync(int instellingId, int weekdag, int? duurMinuten, string omschrijving = null);
Task<TijdslotTijdOverride> CreateTijdOverrideAsync(int instellingId, int vanUur, int vanMinuut, int? totUur, int? totMinuut, int? duurMinuten, string omschrijving = null, int[] alleenOpDagen = null);
}Beslissingsstructuur
De duur wordt steeds opgelost via de meest specifieke beschikbare regel.
TijdOverride
Specifiek tijdslot op specifieke datum — hoogste prioriteit
DagOverride
Afwijkende duur voor een specifieke weekdag
Globale TijdslotDuur
Vaste standaard als terugvalwaarde
tijdOverride ?? dagOverride ?? globaalDefault
Trade-off
Waarom deze keuze werkt
Het model past beter bij lunch, diner en late service, en voorkomt dat uitzonderingscode zich verspreidt door de rest van de applicatie.
Wat het kost
Meer configuratie in de UI, meer logica rond prioriteit en een grotere kans op foutieve instellingen als de beheerinterface niet duidelijk genoeg is.
Legacy compatibiliteit
De beschikbaarheidslogica houdt een fallback voor oudere reservaties zonder eindtijd. Dat was noodzakelijk, omdat legacy data anders precies de nieuwe flexibiliteit zou ondermijnen.
Fallback snippet
if (reservation.Tot.HasValue)
{
reservationEnd = reservation.Tot.Value;
}
else
{
var duurMinuten = await _tijdslotService.GetTijdslotDuurAsync(
restaurantId,
reservation.Van);
reservationEnd = duurMinuten.HasValue
? reservation.Van.AddMinutes(duurMinuten.Value)
: reservation.Van.AddHours(3);
}Resultaat
Instellingen sluiten beter aan op de realiteit van lunch, diner en late service.
Beheerders kunnen per dag of per tijdstip afwijken van de standaard zonder extra uitzonderingscode elders.
Oude reservaties zonder eindtijd blijven correct interpreteerbaar dankzij de fallback.
De UI toont de prioriteit expliciet, waardoor het systeem ook beter uitlegbaar wordt aan eindgebruikers.
Lessons learned
Behoud altijd een globale standaard als laatste fallback.
Maak prioriteit expliciet: tijd boven dag boven standaard.
Test legacy records zonder eindtijd mee in je nieuwe model.
Laat de UI de hiërarchie zichtbaar maken in plaats van ze te verbergen in implicit gedrag.
Voorkom configuratie-overload door duidelijke uitleg en begrensde complexiteit.
Takeaway
Zodra een restaurant anders werkt per dag of per uur, is een hiërarchisch tijdslotsysteem de betere keuze. Niet omdat het slimmer klinkt, maar omdat het eerlijker aansluit op hoe de business echt functioneert.

Plan een vrijblijvende digitale kennismaking met Mitch en ontdek wat wij voor jouw organisatie kunnen betekenen.