
# GDPR & Confidentialité

Sovrium donne aux utilisateurs finaux un contrôle en libre-service sur leurs données personnelles, satisfaisant les droits GDPR fondamentaux sans intervention de l'opérateur. Un utilisateur authentifié peut télécharger une copie complète et lisible par machine de tout ce que Sovrium détient à son sujet, et peut planifier un effacement irréversible de son compte selon un calendrier sûr et réversible jusqu'au dernier moment.

Ce sont des points de terminaison destinés à l'utilisateur final — ils agissent sur les propres données de l'appelant, limitées exclusivement par la session authentifiée. Aucun id n'est jamais pris du corps de la requête.

## Export de données (Articles 15 & 20)

`GET /api/account/export` renvoie l'empreinte complète des données personnelles de l'appelant sous forme de JSON structuré, satisfaisant le **droit d'accès** (art. 15) et le **droit à la portabilité des données** (art. 20) du GDPR.

```
GET /api/account/export
Cookie: <session cookie>
```

Aucun corps de requête, paramètre de requête ou de chemin — l'id utilisateur provient uniquement de la session. La réponse agrège quatre sources pour l'appelant :

| Source                    | Contenu                                                                                                                                |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| **Profil**                | La ligne `auth.user` de l'appelant.                                                                                                    |
| **Sessions**              | Les lignes `auth.session` de l'appelant.                                                                                               |
| **Comptes liés**          | Les lignes `auth.account` de l'appelant (fournisseurs OAuth + identifiant e-mail/mot de passe), **avec tout le matériel secret omis**. |
| **Enregistrements créés** | Chaque enregistrement de table dans l'application où `created_by = caller`.                                                            |

:::callout
**Les secrets ne sont jamais exportés.** Les hachages de mots de passe, les jetons OAuth et autres matériels d'identification sont retirés de la section des comptes liés. L'export est un artefact de portabilité, pas un déversement d'identifiants.
:::

## Suppression et effacement de compte (Article 17)

`POST /api/account/delete` permet à un utilisateur de demander l'effacement irréversible de son compte, satisfaisant le **droit à l'effacement** (art. 17) du GDPR. La suppression suit un **modèle d'effacement planifié avec un délai de grâce de 7 jours** — jamais une destruction immédiate.

```
POST /api/account/delete
Cookie: <session cookie>
Content-Type: application/json

{ "confirm": true }
```

| Étape            | Requête                           | Effet                                                                                                                                                                                                                                                           |
| ---------------- | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **1. Planifier** | `{ "confirm": true }`             | Marque `scheduledErasureAt = now + 7 days`, révoque toutes les sessions de l'appelant (déconnecté partout), écrit un événement d'audit `account.deletion.scheduled`, renvoie `202 Accepted`. **Ne supprime pas encore.**                                        |
| **2. Annuler**   | `{ "cancel": true }`              | Pendant la fenêtre, l'utilisateur se reconnecte et annule — efface `scheduledErasureAt`, renvoie `200 OK`.                                                                                                                                                      |
| **3. Purger**    | _(automatique, après la fenêtre)_ | Une tâche de purge **supprime définitivement** les lignes `auth.user`, `auth.session`, `auth.account`, `auth.verification` de l'appelant et chaque enregistrement de table où `created_by = caller`, puis écrit un événement d'audit `account.deletion.purged`. |

Un `POST` nu sans indicateur `confirm`/`cancel` est rejeté `400` (anti-faux-pas).

## Suppression définitive, pas suppression en douceur

L'effacement effectue une **suppression physique des lignes** — pas la pierre tombale `deleted_at` de suppression en douceur utilisée ailleurs dans la plateforme. Après la purge, aucune donnée personnelle récupérable ne subsiste, comme l'exige l'art. 17.

C'est l'exception délibérée à la posture de [suppression-en-douceur-par-défaut](/fr/docs/records-soft-delete) de Sovrium : les suppressions ordinaires sont des pierres tombales récupérables, mais un effacement GDPR ne doit rien laisser derrière. Les suppressions irréversibles par table via le tableau de bord d'administration nécessitent l'opt-in explicite `allowForceDelete: true` (voir [Permissions de table](/fr/docs/table-permissions)) ; le point de terminaison de suppression forcée renvoie `404` lorsque la suppression forcée n'est pas autorisée.

:::callout
**La piste d'audit de l'effacement survit à l'utilisateur.** L'événement `account.deletion.purged` survit à la ligne utilisateur supprimée — la clé étrangère `audit_log.actor_id` est `ON DELETE SET NULL`, de sorte que l'entrée reste un enregistrement de conformité valide avec un acteur null-ifié. Supprimer les données et prouver que les données ont été supprimées sont deux obligations distinctes.
:::

## Confidentialité dès la conception

Au-delà des droits en libre-service, la confidentialité est intégrée aux valeurs par défaut de la plateforme :

- **Analytique sans cookies** — les visiteurs sont identifiés par des hachages SHA-256 côté serveur ; aucune donnée personnelle ni identifiant client n'est stocké, et Do Not Track est respecté. Voir [Analytique](/fr/docs/analytics).
- **Conservation bornée** — les lignes supprimées en douceur vieillissent selon `ECO_RETENTION_PURGE_DAYS` (voir [Écoconception](/fr/docs/ecoconception)) ; moins de données stockées est à la fois un gain de confidentialité et de frugalité.
- **Aucun service externe** — toutes les données personnelles restent sur votre serveur ; rien n'est expédié à un tiers.

## Pages connexes

- [Surveillance de l'activité](/fr/docs/activity-monitoring) — la piste d'audit des événements de suppression et d'accès.
- [Suppression en douceur](/fr/docs/records-soft-delete) — le modèle de pierre tombale récupérable que l'effacement contourne délibérément.
- [Permissions de table](/fr/docs/table-permissions) — `allowForceDelete` et accès par champ.
- [Durcissement de la sécurité](/fr/docs/security-hardening) — authentification, CSRF, anti-énumération.
- [Analytique](/fr/docs/analytics) — suivi sans cookies et respectueux de la vie privée.
- [Écoconception](/fr/docs/ecoconception) — conservation et minimisation des données.
