256 lines
6.3 KiB
Markdown
256 lines
6.3 KiB
Markdown
|
|
# AI Booking Optimering
|
||
|
|
|
||
|
|
## Produktoversigt
|
||
|
|
|
||
|
|
AI Booking Optimering er et intelligent tillægsmodul der hjælper saloner med at maksimere deres kalenderudnyttelse og reducere tabt omsætning fra tomme tidsslots.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Features
|
||
|
|
|
||
|
|
### Feature 1: Smart Tidsforslag (Real-time)
|
||
|
|
|
||
|
|
Når kunder booker online, analyserer AI'en eksisterende bookinger og foreslår de mest optimale tidspunkter.
|
||
|
|
|
||
|
|
**Hvordan det virker:**
|
||
|
|
1. Kunden vælger ydelse (f.eks. Dameklip, 60 min)
|
||
|
|
2. AI'en analyserer dagens/ugens bookinger for den valgte medarbejder
|
||
|
|
3. Hvert ledigt tidsslot får en score baseret på:
|
||
|
|
- Minimering af huller
|
||
|
|
- Optimal udnyttelse af åbningstiden
|
||
|
|
- Kontinuitet i bookinger
|
||
|
|
4. Top 2-3 bedste slots markeres med "Anbefalet" badge
|
||
|
|
|
||
|
|
**Scoring-algoritme:**
|
||
|
|
|
||
|
|
| Kriterium | Score |
|
||
|
|
|-----------|-------|
|
||
|
|
| Starter ved åbningstid | +3 |
|
||
|
|
| Slutter præcis på næste booking | +3 |
|
||
|
|
| Starter lige efter en booking | +2 |
|
||
|
|
| Slutter ved lukketid | +1 |
|
||
|
|
| Skaber hul < 30 min | -2 |
|
||
|
|
|
||
|
|
**UX-principper:**
|
||
|
|
- Blød anbefaling - kunden kan stadig vælge alle ledige tider
|
||
|
|
- Grøn badge med AI-ikon på anbefalede tider
|
||
|
|
- Info-tekst forklarer fordelen
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Feature 2: Kalender-optimering Dashboard
|
||
|
|
|
||
|
|
Salonejere får et dashboard der identificerer huller og foreslår handlinger.
|
||
|
|
|
||
|
|
**Dashboard-komponenter:**
|
||
|
|
|
||
|
|
1. **Statistik-kort**
|
||
|
|
- Huller i dag
|
||
|
|
- Tabt omsætning (estimeret)
|
||
|
|
- Huller denne uge
|
||
|
|
- Potentiel besparelse
|
||
|
|
|
||
|
|
2. **Mini-kalender**
|
||
|
|
- Visuel oversigt over ugen
|
||
|
|
- Farvekodede dage (grøn = optimalt, gul = huller, rød = kritisk)
|
||
|
|
|
||
|
|
3. **Hul-liste**
|
||
|
|
- Detaljeret visning af hvert identificeret hul
|
||
|
|
- Medarbejder og tidspunkt
|
||
|
|
- Estimeret tabt omsætning
|
||
|
|
- AI-forslag til at fylde hullet
|
||
|
|
|
||
|
|
4. **AI-forslag typer:**
|
||
|
|
- **Flyt booking**: Foreslå at flytte en eksisterende kundes tid
|
||
|
|
- **Venteliste**: Kontakt kunde fra ventelisten
|
||
|
|
- **Rabattilbud**: Send SMS med rabat for at fylde hullet
|
||
|
|
|
||
|
|
5. **SMS-historik**
|
||
|
|
- Track sendte tilbud
|
||
|
|
- Accept/afvisning statistik
|
||
|
|
- Pending tilbud
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Teknisk Implementation
|
||
|
|
|
||
|
|
### POC 1: poc-booking-v2.html
|
||
|
|
|
||
|
|
**Tilføjede komponenter:**
|
||
|
|
|
||
|
|
```javascript
|
||
|
|
// Mock data for eksisterende bookinger
|
||
|
|
const existingBookings = {
|
||
|
|
'EMP001': {
|
||
|
|
'2026-01-06': [
|
||
|
|
{ start: '10:00', end: '11:00', service: 'Dameklip' },
|
||
|
|
{ start: '13:30', end: '14:30', service: 'Herreklip' }
|
||
|
|
]
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
// Scoring-algoritme
|
||
|
|
function calculateOptimalSlots(serviceDuration, date, employeeId) {
|
||
|
|
// 1. Hent bookinger for dato/medarbejder
|
||
|
|
// 2. Generer alle mulige slots (30 min intervaller)
|
||
|
|
// 3. Tjek overlap med eksisterende bookinger
|
||
|
|
// 4. Beregn score for hvert ledigt slot
|
||
|
|
// 5. Marker top 3 med positiv score som "recommended"
|
||
|
|
return slots;
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**CSS-styling:**
|
||
|
|
- `.time-slot.recommended` - Grøn border og baggrund
|
||
|
|
- `.ai-badge` - Absolut positioneret badge med sparkle-ikon
|
||
|
|
- `.ai-info` - Info-boks over tidsgrid
|
||
|
|
|
||
|
|
### POC 2: poc-ai-booking-optimizer.html
|
||
|
|
|
||
|
|
**Struktur:**
|
||
|
|
- Topbar med AI-badge
|
||
|
|
- Stats-grid med 4 KPI-kort
|
||
|
|
- Main-grid med kalender og hul-liste
|
||
|
|
- Sidebar med optimeringsscore og SMS-historik
|
||
|
|
|
||
|
|
**Mock data:**
|
||
|
|
- `gaps[]` - Identificerede huller med forslag
|
||
|
|
- `weekDays[]` - Ugevisning med gap-status
|
||
|
|
- `smsHistory[]` - Historik over sendte tilbud
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Forretningsværdi
|
||
|
|
|
||
|
|
### ROI-beregning
|
||
|
|
|
||
|
|
```
|
||
|
|
Typisk salon:
|
||
|
|
- 4 medarbejdere
|
||
|
|
- 40 timer/uge pr. medarbejder
|
||
|
|
- 15% tomme slots = 24 timer/uge tabt
|
||
|
|
- Gennemsnitlig timepris: 500 kr.
|
||
|
|
- Tabt omsætning: 12.000 kr./uge = 624.000 kr./år
|
||
|
|
|
||
|
|
AI-optimering fylder 50% af huller:
|
||
|
|
- Ekstra omsætning: 312.000 kr./år
|
||
|
|
|
||
|
|
Pris for AI-modul: 499 kr./md = 5.988 kr./år
|
||
|
|
ROI: 52x investering
|
||
|
|
```
|
||
|
|
|
||
|
|
### Nøgletal at tracke
|
||
|
|
|
||
|
|
| Metrik | Beskrivelse |
|
||
|
|
|--------|-------------|
|
||
|
|
| Kalenderudnyttelse | % af tilgængelige timer der er booket |
|
||
|
|
| Gennemsnitligt hul | Minutter tabt pr. dag i gaps |
|
||
|
|
| Accept-rate | % af kunder der accepterer flyttetilbud |
|
||
|
|
| Tabt omsætning | Estimeret kr. i tomme slots |
|
||
|
|
| Optimeringsscore | Samlet effektivitet (mål: 90%+) |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Fremtidig AI-udvidelse
|
||
|
|
|
||
|
|
### Niveau 1: Regelbaseret (Nuværende POC)
|
||
|
|
- Statiske scoring-regler
|
||
|
|
- Ingen læring
|
||
|
|
- Fungerer for alle saloner ens
|
||
|
|
|
||
|
|
### Niveau 2: Machine Learning
|
||
|
|
- Lærer fra salonens historik
|
||
|
|
- Personlige kundeprofilenr
|
||
|
|
- Forudsigelse af no-shows
|
||
|
|
- Dynamisk prisjustering
|
||
|
|
|
||
|
|
### ML-features (fremtidig):
|
||
|
|
|
||
|
|
1. **Historisk mønstergenkendelse**
|
||
|
|
- Populære vs. døde tider
|
||
|
|
- Sæsonvariation
|
||
|
|
- Service-specifikke mønstre
|
||
|
|
|
||
|
|
2. **Kundesegmentering**
|
||
|
|
- Fleksible vs. fastlåste kunder
|
||
|
|
- Pris-sensitive kunder
|
||
|
|
- No-show risiko-profiler
|
||
|
|
|
||
|
|
3. **Intelligent rabat-beregning**
|
||
|
|
- Dynamisk rabat baseret på:
|
||
|
|
- Hullets "værdi"
|
||
|
|
- Kundens prissensitivitet
|
||
|
|
- Sandsynlighed for naturlig booking
|
||
|
|
|
||
|
|
4. **Proaktiv optimering**
|
||
|
|
- Forudsig huller før de opstår
|
||
|
|
- Automatisk udsend tilbud
|
||
|
|
- Venteliste-matching
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Integration med eksisterende system
|
||
|
|
|
||
|
|
### Data-flow
|
||
|
|
|
||
|
|
```
|
||
|
|
Booking system
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────┐
|
||
|
|
│ AI Optimizer │
|
||
|
|
│ - Analyse │
|
||
|
|
│ - Scoring │
|
||
|
|
│ - Anbefalinger │
|
||
|
|
└─────────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────┐ ┌─────────────────┐
|
||
|
|
│ Booking Widget │ │ Dashboard │
|
||
|
|
│ (kundevisning) │ │ (ejervisning) │
|
||
|
|
└─────────────────┘ └─────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
### API-endpoints (fremtidig)
|
||
|
|
|
||
|
|
```
|
||
|
|
GET /api/ai/optimal-slots?date=X&employee=Y&duration=Z
|
||
|
|
POST /api/ai/send-offer
|
||
|
|
GET /api/ai/gaps?week=X
|
||
|
|
GET /api/ai/stats
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Konfiguration
|
||
|
|
|
||
|
|
### Indstillinger pr. salon
|
||
|
|
|
||
|
|
| Indstilling | Beskrivelse | Default |
|
||
|
|
|-------------|-------------|---------|
|
||
|
|
| `minGapMinutes` | Mindste hul der tæller som tabt | 30 min |
|
||
|
|
| `recommendedSlots` | Antal anbefalede slots | 3 |
|
||
|
|
| `defaultDiscount` | Standard rabat ved flytning | 5% |
|
||
|
|
| `autoSendOffers` | Automatisk udsend tilbud | Fra |
|
||
|
|
| `smsEnabled` | Aktiver SMS-udsendelse | Til |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Filer
|
||
|
|
|
||
|
|
| Fil | Beskrivelse |
|
||
|
|
|-----|-------------|
|
||
|
|
| `poc-booking-v2.html` | Kundens booking-widget med AI-anbefalinger |
|
||
|
|
| `poc-ai-booking-optimizer.html` | Dashboard til salonejere |
|
||
|
|
| `docs/ai-booking-optimering.md` | Denne dokumentation |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Changelog
|
||
|
|
|
||
|
|
### Version 1.0 (Januar 2026)
|
||
|
|
- Initial POC implementation
|
||
|
|
- Regelbaseret scoring-algoritme
|
||
|
|
- Dashboard med hul-identifikation
|
||
|
|
- SMS-historik tracking
|