> ## Documentation Index
> Fetch the complete documentation index at: https://docs.switchbord.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Protezione dei Dati e GDPR

> Come Switchbord gestisce i dati personali, implementa i diritti degli interessati previsti dal GDPR, pseudonimizza le PII per l'AI e gestisce i rapporti con i sub-processor.

## Quali PII Memorizza Switchbord

Switchbord elabora dati personali per conto delle organizzazioni tenant (titolari del trattamento). Le categorie di dati personali trattati includono:

| Categoria di Dati          | Esempi                                                   | Posizione di Memorizzazione          |
| -------------------------- | -------------------------------------------------------- | ------------------------------------ |
| Identificatori di contatto | Numeri di telefono (formato E.164), nomi                 | Tabella `contacts`                   |
| Contenuto dei messaggi     | Corpi dei messaggi WhatsApp in entrata e in uscita       | Tabella `messages`                   |
| Metadati di contatto       | Campi personalizzati, tag, note aggiunte dagli operatori | Tabelle `contacts`, `contact_fields` |
| Identificatori utente      | Indirizzi email dei membri del workspace                 | Supabase Auth                        |
| Registrazioni di audit     | ID degli attori, tipi di azione, riferimenti alle entità | Tabella `audit_logs`                 |

<Warning>
  Gli operatori di Switchbord sono responsabili di garantire di disporre di una base giuridica ai sensi dell'Art.6 GDPR per il trattamento dei dati personali dei propri contatti tramite la piattaforma.
</Warning>

## Conservazione dei Dati

Ogni workspace configura la propria politica di conservazione dei dati tramite l'impostazione `data_retention_days` (predefinita: **730 giorni / 2 anni**).

* I contatti e i messaggi più vecchi della finestra di conservazione sono soggetti a eliminazione automatizzata
* La finestra di conservazione si applica per workspace e può essere modificata dagli owner e dagli admin del workspace
* I campi di soft-delete (`deleted_at`, `deletion_requested_at`) tracciano il ciclo di vita dell'eliminazione

```typescript theme={null}
// Impostazioni del workspace — configurabili per tenant
const workspace = {
  data_retention_days: 730, // predefinito, configurabile per workspace
};
```

## Diritti degli Interessati previsti dal GDPR

### Diritto di Accesso e Portabilità (Art. 15 / Art. 20)

I contatti possono richiedere un'esportazione completa di tutti i dati personali detenuti su di loro. Questo è implementato tramite:

```
GET /api/contacts/{contactId}/gdpr
```

**Autorizzazione:** richiede il ruolo `admin` o `owner` nel workspace del contatto.

**Risposta:** un payload JSON contenente tutti i campi PII associati al contatto, inclusi:

* Il record del contatto (telefono, nome, campi personalizzati)
* Tutto lo storico dei messaggi collegato al contatto
* Eventuali registrazioni nel log di audit che fanno riferimento al contatto

Questo endpoint soddisfa l'obbligo di fornire i dati in un formato strutturato, di uso comune e leggibile da dispositivo automatico (Art.20).

### Diritto alla Cancellazione (Art. 17)

I contatti possono richiedere la cancellazione dei propri dati personali. Questo è implementato tramite:

```
DELETE /api/contacts/{contactId}/gdpr
```

**Autorizzazione:** richiede il ruolo `admin` o `owner` nel workspace del contatto.

**Cosa accade alla cancellazione:**

1. I campi PII nel record `contacts` vengono sovrascritti con valori segnaposto anonimizzati
2. I corpi dei messaggi collegati al contatto vengono anonimizzati in-place
3. Il record del contatto viene sottoposto a soft-delete (`deleted_at` impostato al timestamp corrente)
4. Viene scritta una registrazione nel log di audit che riporta la cancellazione, l'attore e il timestamp

```typescript theme={null}
// Anonimizzazione in-place — i dati vengono sovrascritti, non eliminati
await db.update(contacts)
  .set({
    phoneNumber: `ERASED-${contactId}`,
    name: null,
    email: null,
    deletedAt: new Date(),
  })
  .where(eq(contacts.id, contactId));

// I corpi dei messaggi vengono anonimizzati
await db.update(messages)
  .set({ body: '[Content erased per GDPR Art.17 request]' })
  .where(eq(messages.contactId, contactId));

// Traccia di audit
await writeAuditLog({
  action: 'gdpr_erasure',
  entityType: 'contact',
  entityId: contactId,
  actorUserId: userId,
  workspaceId,
});
```

<Note>
  Le registrazioni nel log di audit relative alle operazioni di cancellazione vengono **conservate** dopo la cancellazione per dimostrare la conformità alla richiesta di cancellazione stessa. Il log di audit registra il fatto della cancellazione, non le PII cancellate.
</Note>

## Pseudonimizzazione delle PII per l'AI

Quando i dati di contatto vengono passati a un modello AI per la generazione di bozze o per l'analisi, Switchbord pseudonimizza le PII prima che lascino la piattaforma.

### Come Funziona

L'utility `pii-redactor.ts` (`packages/ai/src/pii-redactor.ts`) fornisce due funzioni:

```typescript theme={null}
// Sostituisce le PII con token reversibili prima dell'invio all'AI
const { redactedText, tokenMap } = redactPII(originalText, mode);

// Ripristina i valori originali nella risposta dell'AI
const restoredText = restorePII(aiResponse, tokenMap);
```

### Modalità di Pseudonimizzazione

| Modalità                       | Cosa Viene Sostituito                    | Formato del Token                        |
| ------------------------------ | ---------------------------------------- | ---------------------------------------- |
| **Conservativa** (predefinita) | Numeri di telefono, indirizzi email      | `[PHONE-1]`, `[EMAIL-1]`                 |
| **Aggressiva**                 | Numeri di telefono, email, nomi rilevati | `[PHONE-1]`, `[EMAIL-1]`, `[NAME-1]`     |
| **Disattivata**                | Nulla — PII in chiaro inviate all'AI     | Consentita solo con provider self-hosted |

### Impostazione Predefinita Privacy-First

La modalità predefinita è la **pseudonimizzazione conservativa — attivata per impostazione predefinita per tutti i workspace**. La disattivazione della pseudonimizzazione è consentita solo quando il workspace ha configurato un provider AI self-hosted (Ollama o vLLM), garantendo che le PII non lascino mai l'infrastruttura dell'operatore.

```
Impostazioni → Provider AI → Privacy e Protezione dei Dati
```

<Warning>
  La disattivazione della pseudonimizzazione delle PII durante l'utilizzo di un provider AI cloud (OpenAI, Anthropic, OpenRouter) è bloccata a livello applicativo. L'opzione non sarà disponibile finché non verrà configurato e testato un provider self-hosted.
</Warning>

### AI Self-Hosted: Mantenere le PII On-Premises

Per le organizzazioni che non possono consentire alle PII di lasciare la propria infrastruttura (settore sanitario, legale, servizi finanziari), Switchbord supporta due provider AI self-hosted:

<CardGroup cols={2}>
  <Card title="Ollama" icon="server">
    Viene eseguito localmente sulla propria infrastruttura. Nessun dato lascia la rete. Adatto a server CPU/GPU e ambienti di sviluppo.
  </Card>

  <Card title="vLLM" icon="microchip">
    Deployment su cluster GPU ad alto throughput con API compatibile con OpenAI. Adatto a carichi di lavoro di produzione che richiedono un'inferenza rapida.
  </Card>
</CardGroup>

Entrambi i provider vengono configurati in **Impostazioni → Provider AI** e includono un test di connessione per verificare la raggiungibilità prima dell'attivazione.

## Sub-Processor

Switchbord si affida ai seguenti sub-processor per il trattamento dei dati:

| Sub-Processor      | Ruolo                               | Dati Trattati                              | Posizione                  |
| ------------------ | ----------------------------------- | ------------------------------------------ | -------------------------- |
| **Supabase**       | Database, Auth, Storage, Vault      | Tutti i dati strutturati, segreti          | UE (regione configurabile) |
| **Vercel**         | Hosting web e API                   | Richieste/risposte HTTP, log               | CDN globale (primaria US)  |
| **Railway**        | Hosting del worker in background    | Payload dei job, log                       | Regione configurabile      |
| **Meta Cloud API** | Consegna dei messaggi WhatsApp      | Numeri di telefono, contenuto dei messaggi | Infrastruttura Meta        |
| **OpenAI**         | Generazione di bozze AI (opzionale) | Testo pseudonimizzato (se attivato)        | US                         |
| **Anthropic**      | Generazione di bozze AI (opzionale) | Testo pseudonimizzato (se attivato)        | US                         |
| **OpenRouter**     | Routing AI (opzionale)              | Testo pseudonimizzato (se attivato)        | US                         |
| **Sentry**         | Monitoraggio degli errori           | Stack trace, metadati delle richieste      | US/UE                      |
| **Better Stack**   | Aggregazione dei log                | Log applicativi                            | Configurabile              |

<Note>
  I provider AI cloud (OpenAI, Anthropic, OpenRouter) ricevono solo testo pseudonimizzato, a meno che non venga esplicitamente disattivato dall'admin del workspace con un provider self-hosted configurato. I provider self-hosted (Ollama, vLLM) non trasmettono mai dati esternamente.
</Note>

## Accordi sul Trattamento dei Dati

Le organizzazioni soggette al GDPR devono garantire che sia in vigore un Accordo sul Trattamento dei Dati (DPA) con Switchbord e con ciascun sub-processor rilevante. Considerazioni principali:

* **Supabase** fornisce un DPA standard che copre gli obblighi dell'Art.28 GDPR
* **Vercel** fornisce un DPA per i clienti enterprise
* **Meta** richiede l'accettazione dei propri Platform Terms, che includono termini sul trattamento dei dati
* I provider AI cloud offrono DPA; verificare le loro politiche di conservazione dei dati e di addestramento prima dell'uso

Per i deployment self-hosted, l'operatore agisce sia come titolare che come responsabile del trattamento, il che semplifica il quadro dei DPA.

## Mappatura della Conformità

| Standard | Articolo/Controllo                                        | Implementazione                                                                                                    |
| -------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| GDPR     | Art.5 — Principi del trattamento                          | Minimizzazione dei dati, limitazione delle finalità applicate per progettazione                                    |
| GDPR     | Art.6 — Base giuridica                                    | Responsabilità dell'operatore; la piattaforma supporta flussi di legittimo interesse e consenso                    |
| GDPR     | Art.15 — Diritto di accesso                               | `GET /api/contacts/[id]/gdpr`                                                                                      |
| GDPR     | Art.17 — Diritto alla cancellazione                       | `DELETE /api/contacts/[id]/gdpr` con anonimizzazione in-place                                                      |
| GDPR     | Art.20 — Diritto alla portabilità                         | Esportazione JSON leggibile da dispositivo automatico tramite l'endpoint Art.15                                    |
| GDPR     | Art.25 — Privacy by design                                | Pseudonimizzazione delle PII attivata per impostazione predefinita; AI self-hosted per carichi di lavoro sensibili |
| GDPR     | Art.28 — Obblighi del responsabile del trattamento        | Quadro dei DPA con i sub-processor                                                                                 |
| GDPR     | Art.32 — Sicurezza del trattamento                        | Crittografia, controlli di accesso, audit logging                                                                  |
| NIS2     | Art.21 — Misure di gestione del rischio di cybersicurezza | Controlli sulla gestione delle PII, risposta agli incidenti (pianificato BORD-166)                                 |

<Tip>
  Per la mappatura completa dei controlli di conformità, vedi la [Matrice di Conformità](/it/security/compliance-matrix).
</Tip>
