# Database Setup Guide

## Overview
De database wordt bewust als clean slate beheerd:
- 1 setupscript: `api.booking.nl/setup_database_complete.php`
- 1 seedscript: `api.booking.nl/seed_database.php`

Er zijn geen losse migratiescripts meer in gebruik. De workflow is:
1. database leeg en opnieuw opbouwen
2. seeddata vullen
3. testen

## Quick Start

### Vereisten
- PostgreSQL 12+
- PHP met PDO pgsql
- geldige `api.booking.nl/config.php`

### Database opbouwen
```bash
php api.booking.nl/setup_database_complete.php
php api.booking.nl/seed_database.php
```

### Wat de seed aanmaakt
- 103 customers totaal
- 103 admin users + 1 superadmin
- 100 rentables per customer
- 2 `rentable_entity` records per rentable
- 10 optionele `extra` records per customer
- periodeprijzen via `stay_period_definition` en `pricing_rate`
- voorbeeld modifiers in `pricing_rule`
- filters, media en voorbeeldreserveringen

## Kernschema

### Customers & Accommodations
- `customer`
- `rentable`
- `rentable_group`
- `rentable_entity`

### Users & Auth
- `user`
- `role`
- `permission`
- `role_permission`
- `user_customer_role`
- `personal_access_token`

### Leeftijd & Extras
- `age_category`
- `extra`
- `rentable_extra`

### Pricing
- `stay_period_definition`
- `pricing_rate`
- `pricing_rule`

### Reservation & Media
- `reservation`
- `media`

### Filters
- `filter_group`
- `filter_option`
- `rentable_filter`

## Terminologie

### `rentable`
Het verhuurbare type, bijvoorbeeld chalet of villa.

### `rentable_entity`
De fysieke instantie van een `rentable`, bijvoorbeeld chalet A of villa 12.

### `extra`
Optionele toevoeging zoals ontbijt, eindschoonmaak of fietsverhuur.

### `rentable_extra`
Koppelt extras aan een rentable met een eventuele prijs-override.

### `stay_period_definition`
Vrij beheerde verblijfsperiode, bedoeld als flexibele duur-definitie.

De periode heeft nu deze velden:
- `duration_unit`
- `duration_value`
- `duration_minutes`
- optioneel `rentable_group_id`

De ondersteunde duurtypes zijn onder meer:
- `1 uur`
- `ochtend`
- `middag`
- `avond`
- `1 nacht`
- `Midweek`
- `Week`
- `2 weken`

### `pricing_rate`
Datumgebonden basisprijs per rentable en periode.

### `pricing_rule`
Modifierlaag voor toeslagen en kortingen, bijvoorbeeld hoogseizoen of korting vanaf 14 nachten.

## Pricing Model

De prijsengine rekent intern altijd in nachten.

Voorbeeld:
- `01-01-2026` t/m `01-01-2027`: `Week` = 700
- `01-07-2026` t/m `01-08-2026`: hoogseizoen `+10%`

De opbouw is:
1. passende perioden selecteren
2. verblijf opbouwen uit perioden
3. modifiers toepassen
4. totaalprijs en breakdown teruggeven

## Controle

Gebruik voor snelle controle:
```bash
php api.booking.nl/verify_database.php
```

## Belangrijk

Als het schema verandert:
- pas `setup_database_complete.php` aan
- pas `seed_database.php` aan
- werk deze documentatie bij

Er is bewust geen apart migratiepad meer.
