# Dock toewijzing bij aanmelding – algoritme

Doel: bij aankomst de *beste* dock kiezen zó dat komende planning niet conflicteert.

1. **Inputs**
   - `now` (servertijd)
   - Boeking: `direction`, `pallets` → `serviceMin` (30/60 via `slot_duration_rules`)
   - Echte docks: `docks` (actief, toelaatbare richting, overflow-vlag)
   - Reeds geplande boekingen: tijdvakken per dock
   - Storingen: `dock_closures`
   - Voorkeuren: per carrier voorkeursdock-lijst (hard/soft)

2. **Bereken vrij venster per dock**
   - Laatste bezette eindtijd vóór `now` ⇒ `availableFrom`
   - Volgende boekings starttijd na `now` ⇒ `nextStart`
   - Corrigeer voor `dock_closures`
   - Vrij venster = `[max(now, availableFrom), min(nextStart, now + horizon)]`

3. **Feasibility**
   - Een dock is *feasible* als `availableFrom + serviceMin ≤ nextStart` (of geen nextStart)

4. **Score**
   - `score = w1 * (startDelta)` (hoe eerder je kan starten)  
     `+ w2 * preferenceBoost` (pref docks krijgen bonus)  
     `+ w3 * overflowPenalty` (overflow krijgt straf, tenzij niets anders kan)
   - Kies laagste score.

5. **Fallbacks**
   - Als niets past: plan op *eerste moment* na `nextStart` met minste verstoring, of plaats in wachtrij.

6. **Transactie**
   - Reserveer tijdvak op gekozen dock in één transactie.
