# Booking Rules

## Operational Timezone

All property operations use `Europe/Athens`.

## Booking Flow

1. Select check-in date.
2. Select check-out date.
3. Select adults, children, and infants.
4. Check real availability.
5. Display available accommodation.
6. Display transparent price breakdown.
7. Collect guest details.
8. Accept booking terms and privacy policy.
9. Create a temporary hold.
10. Complete booking request or payment flow.
11. Send localized emails.
12. Provide secure booking-management link.

## States

Initial states:

- `draft`
- `held`
- `pending`
- `pending_payment`
- `confirmed`
- `cancelled`
- `expired`
- `completed`
- `no_show`
- `refunded`

State transitions must be explicit and tested.

## Holds

Availability searches do not reserve inventory. Holds reserve inventory for a short period, initially 15 minutes, and expire automatically.

## Pricing Snapshot

Every booking stores an immutable pricing snapshot containing:

- Nightly prices.
- Number of nights.
- Fees.
- Taxes.
- Discounts.
- Deposit.
- Total.
- Currency.
- Applicable rules.

## Payment Modes

Supported configuration targets:

- Booking request requiring administrator approval.
- Pay at property.
- Bank-transfer instructions.
- Deposit required.
- Instant booking.
- Future Stripe integration.

Local development uses a fake payment adapter that cannot be mistaken for production payment behavior.
