# PRENOTAZIONI_IA

Legacy prenotazioni preservata della suite `powerup.cool`.

Questa subtree continua a contenere il proprio frontend e backend, ma oggi e integrata nel workspace principale tramite:

- wrapper Docker nel compose root
- sync del contesto tenant dal `backend-hub`
- risoluzione del venue corrente dal token del gestionale
- configurazione WhatsApp e prompt di prenotazione per venue

## Ruolo attuale nella piattaforma

`PRENOTAZIONI_IA` non e piu solo un MVP isolato.

Nel workspace attuale copre:

- agenda prenotazioni
- CRUD prenotazioni
- sale, tavoli e assegnazioni
- floor plan operativo
- configurazione booking per venue
- canale WhatsApp prenotazioni con prompt dedicato

Il dominio resta legacy e preservato: non va trattato come codice da riscrivere liberamente.

## Stack

- frontend: Next.js 14 + React 18 + TypeScript
- backend: FastAPI + SQLAlchemy
- database: PostgreSQL

## Struttura

```text
.
├── backend
│   ├── app
│   │   ├── api
│   │   ├── core
│   │   ├── db
│   │   ├── models
│   │   ├── schemas
│   │   └── services
│   ├── requirements.txt
│   └── Dockerfile
├── docs
│   ├── architecture.md
│   └── product.md
├── frontend
│   ├── app
│   ├── components
│   ├── lib
│   ├── package.json
│   └── Dockerfile
└── docker-compose.yml
```

## Capacita principali

### Operazioni prenotazioni

- lettura prenotazioni filtrate per data e stato
- creazione, modifica e cancellazione
- riassegnazione tavolo
- riepilogo grafico sala

### Master data

- rooms
- tables
- customers
- venue booking settings

### WhatsApp

- stato configurazione
- validazione credenziali
- invio messaggio test
- webhook Meta
- event log
- prompt prenotazioni dedicato per venue

### Integrazione portale

- `POST /portal-context/sync`
- venue corrente risolto dal token del gestionale
- mapping `portal_tenant_id -> venue`
- isolamento dei dati sul venue attivo

## Endpoint principali

- `GET /health`
- `GET /venues`
- `GET /rooms`
- `GET /tables`
- `POST /tables`
- `PUT /tables/{id}`
- `GET /customers`
- `POST /customers`
- `GET /booking-settings`
- `PUT /booking-settings/{venue_id}`
- `POST /portal-context/sync`
- `GET /reservations`
- `POST /reservations`
- `GET /reservations/{id}`
- `PUT /reservations/{id}`
- `DELETE /reservations/{id}`
- `POST /reservations/{id}/reassign`
- `POST /reservations/recalculate-day`
- `GET /floor-plan`
- `GET /whatsapp/status`
- `POST /whatsapp/validate-config`
- `POST /whatsapp/test-message`
- `GET /whatsapp/logs`
- `GET /webhooks/whatsapp`
- `POST /webhooks/whatsapp`

## Integrazione col workspace root

Modalita consigliata nel repository principale:

- usare il `docker-compose.yml` root
- lasciare a `apps/prenotazioni-legacy` il wrapper di pubblicazione
- aprire il modulo dal portale con la sessione del gestionale

Servizi root collegati:

- `prenotazioni-db`
- `prenotazioni-backend`
- `prenotazioni-frontend`

Percorsi pubblici documentati per la produzione:

- `/prenotazioni`
- `/prenotazioni-api/`

## Esecuzione standalone

La subtree conserva anche il proprio `docker-compose.yml` locale.

Questo e utile per:

- sviluppo isolato del dominio prenotazioni
- debug rapido del solo modulo

Ma nel contesto della suite principale la sorgente di riferimento per l'integrazione resta il compose root.

## Variabili backend rilevanti

```env
DATABASE_URL=postgresql+psycopg2://postgres:postgres@localhost:5432/restaurant_booking
BACKEND_CORS_ORIGINS=http://localhost:3000
PUBLIC_BASE_URL=http://localhost:8000
ASSISTANT_API_BASE_URL=http://backend-hub:8000
ASSISTANT_TIMEOUT_SECONDS=30
ASSISTANT_HISTORY_LIMIT=12
ASSISTANT_REPLY_MAX_CHARS=1500
WHATSAPP_ACCESS_TOKEN=
WHATSAPP_PHONE_NUMBER_ID=
WHATSAPP_VERIFY_TOKEN=
WHATSAPP_APP_SECRET=
WHATSAPP_GRAPH_API_VERSION=v21.0
```

## Note operative importanti

- senza sessione del portale, il backend ricade sul venue di default
- con sessione del portale, `booking-settings` e `reservations` devono riferirsi al venue attivo del tenant corrente
- il canale WhatsApp di questo modulo deve restare nel perimetro prenotazioni e non comportarsi come assistente menu o concierge

## Documentazione locale

- `docs/architecture.md`
- `docs/product.md`
