# Registre des sous-traitants ultérieurs — Scope

> **Document de travail.** Brouillon commercial à relire par un avocat IT et RGPD avant signature. Aucune valeur contractuelle en l'état.
>
> **Source unique de vérité technique** : `lib/trust/sub-processors.ts` dans le code source Scope. La version machine-readable est exposée sur `https://getscope.dev/api/sub-processors.json` et la version web est publiée sur [https://getscope.dev/trust](https://getscope.dev/trust). Le présent fichier markdown sert d'annexe contractuelle (DPA, contrat PoC) et de support de relecture juridique.

**Version** : 2026.06.11-v5
**Dernière mise à jour** : 2026-06-11
**Éditeur** : Amir KELLOUSIDHOUM, auto-entrepreneur (BNC libéral), SIRET 917 709 024 00017
**Contact DPO** : [dpo@getscope.dev](mailto:dpo@getscope.dev)
**Signalement sécurité** : [security@getscope.dev](mailto:security@getscope.dev)

---

## 1. Objet

En application de l'**article 28.2 du RGPD**, Scope publie la liste exhaustive des sous-traitants ultérieurs auxquels il recourt pour la fourniture du service. Toute évolution de cette liste (ajout, remplacement, suppression) est notifiée par email aux clients abonnés au moins **30 jours avant son entrée en vigueur**, conformément aux engagements pris dans la [politique de confidentialité](https://getscope.dev/politique-de-confidentialite) et le [DPA](https://getscope.dev/dpa).

Le client peut s'opposer à un nouveau sous-traitant pour des motifs légitimes liés à la protection des données ; à défaut d'accord, le client peut résilier sans pénalité son abonnement avant l'entrée en vigueur du changement.

## 2. Liste exhaustive (14 sous-traitants)

| # | Sous-traitant (raison sociale) | Fonction | Données traitées | Lieu de traitement | Juridiction | Certifications publiques | DPA | Exposition Cloud Act |
|---|---|---|---|---|---|---|---|---|
| 1 | **Railway Corp.** | Hébergement Next.js sur conteneur persistant | Métadonnées de requête, headers, code applicatif (pas de persistance applicative client durable) | Région EU West (Union européenne) | US | SOC 2 Type II, CCT UE | [railway.com/legal/dpa](https://railway.com/legal/dpa) | **OUI** — mitigée |
| 2 | **Supabase, Inc.** | Base Postgres + Auth + Storage + Realtime | Identifiants pro, contenu libre, métadonnées techniques, audit logs, exports | Dublin, Irlande (`eu-west-1`) | US | SOC 2 Type II, HIPAA-ready | [supabase.com/legal/dpa](https://supabase.com/legal/dpa) | **OUI** — mitigée |
| 3 | **OpenRouter, Inc.** | Routeur LLM (prompts → modèles) avec clause `data_collection=deny` | Prompts générés à partir du contenu client (briefs, transcriptions) + réponses LLM. Proxy stateless. | Proxy stateless (US) acheminant vers OpenAI (US) et Anthropic (US). Chaîne de résilience PH10 : bascule Mistral AI direct (Paris, UE) si OpenRouter indisponible. | US | CCT UE (Clauses Contractuelles Types) | [openrouter.ai/terms](https://openrouter.ai/terms) | **OUI** — mitigée |
| 4 | **Gladia SAS** | Transcription audio FR-spécialisée | Audio capturé (≤ 60 min) + transcript textuel | Paris, France | EU | RGPD, DPA disponible | [gladia.io/compliance-hub](https://www.gladia.io/compliance-hub) | NON |
| 5 | **Mistral AI SAS** | OCR PDF/images + fournisseur LLM de secours (PH10) | Contenu source des pièces uploadées (PDF/images) le temps du traitement ; résultat markdown persisté côté Supabase EU. Activable uniquement quand `MISTRAL_OCR_ENABLED` est positionné. Usage LLM fallback quand `MISTRAL_API_KEY` configurée. | Paris, France | EU | RGPD, hébergement souverain UE, no-training par défaut | [mistral.ai/terms](https://mistral.ai/terms) | NON |
| 6 | **DocuSeal (auto-hébergé)** | Signature électronique eIDAS | Documents signés (cadrages, propositions, DPA), métadonnées signataires | Railway, région EU West (Union européenne) | EU | eIDAS (signature électronique avancée), Auto-hébergé UE | [https://getscope.dev/dpa](https://getscope.dev/dpa) | NON |
| 7 | **Plus Five Five, Inc. (Resend)** | Envoi emails transactionnels | Email destinataire, contenu transactionnel (notifications, magic links, confirmations exports) | Région `eu-west-1` (Irlande) | US | SOC 2 Type II, HIPAA-ready | [resend.com/legal/dpa](https://resend.com/legal/dpa) | **OUI** — mitigée |
| 8 | **Stripe Payments Europe Ltd** | Paiement, abonnements, facturation | Email facturation, raison sociale, SIRET, données de paiement (tokenisées) | Dublin, Irlande | EU | PCI DSS Level 1, SOC 1, SOC 2 Type II, ISO 27001 | [stripe.com/legal/dpa](https://stripe.com/legal/dpa) | NON |
| 9 | **Plausible Insights OÜ** | Web analytics sans cookies | Statistiques agrégées de navigation. **Aucune donnée personnelle**, aucun cookie. Activé après consentement explicite uniquement. | Allemagne (Hetzner) | EU | RGPD by design, sans cookies | [plausible.io/dpa](https://plausible.io/dpa) | NON |
| 10 | **Burke Software & Consulting LLC (GlitchTip)** | Monitoring d'erreurs runtime (server + browser) | Stack traces scrubbées (PII et secrets retirés avant émission), métadonnées techniques | DigitalOcean Frankfurt, Allemagne (résidence UE contractuelle) | US | Résidence UE, Open source MIT, DPA sur demande | [glitchtip.com/privacy](https://glitchtip.com/privacy/) | **OUI** — mitigée |
| 11 | **Cloudflare, Inc. (R2 EU)** | Sauvegardes hors-site Postgres (DR) | Dumps SQL Postgres chiffrés/compressés hebdomadaires. **Aucun contenu applicatif lu en chaud.** | Union européenne (juridiction R2 = EU, bucket pinné UE) | US | SOC 2 Type II, ISO 27001, CCT UE, rétention 90 j | [cloudflare.com/cloudflare-customer-dpa](https://www.cloudflare.com/cloudflare-customer-dpa/) | **OUI** — mitigée |
| 12 | **Cloudflare, Inc.** | DNS getscope.dev + routage email | Métadonnées DNS, métadonnées routage email. **Aucune donnée applicative.** | Réseau global anycast | GLOBAL | SOC 2 Type II, ISO 27001, PCI DSS | [cloudflare.com/cloudflare-customer-dpa](https://www.cloudflare.com/cloudflare-customer-dpa/) | **OUI** — mitigée |
| 13 | **BetterStack UAB** | Supervision de disponibilité (uptime monitors + heartbeats crons) | Sondes HTTP publiques + pings de bonne fin des tâches. **Aucune donnée personnelle.** | Vilnius, Lituanie (UE) | EU | RGPD, hébergement UE, DPA disponible | [betterstack.com/privacy](https://betterstack.com/privacy) | NON |
| 14 | **Scaleway SAS (Iliad Group)** | Archive froide immuable du journal d'audit (Object Lock COMPLIANCE 7 ans) | Lignes `audit_logs` âgées de plus de 13 mois (hors lignes comptables) déplacées en archive immuable par cron mensuel | Paris, France (DC5, région `fr-par`) | EU (France) | ISO 27001, HDS, RGPD, souveraineté française, Object Lock COMPLIANCE non-bypassable | [scaleway.com/en/contracts](https://www.scaleway.com/en/contracts/) | NON |

## 3. Mitigations Cloud Act (transferts hors UE)

Sept sous-traitants sont juridiquement domiciliés aux États-Unis (Railway, Supabase, OpenRouter, Resend, GlitchTip, Cloudflare R2) ou opèrent un réseau global (Cloudflare DNS). Pour chacun, Scope met en œuvre une stratégie de mitigation explicite ci-dessous, complétée par les **Clauses Contractuelles Types** adoptées par la Commission européenne (décision d'exécution UE 2021/914 du 4 juin 2021), incorporées par référence dans les contrats sous-traitance.

### 3.1 Railway

- **Région forcée** : EU West (Union européenne) pour toutes les fonctions applicatives.
- **Pas de persistance applicative durable** : les données durables (briefs, cadrages, exports, audit logs) résident dans Supabase EU. Railway n'héberge que le conteneur applicatif stateless et l'instance DocuSeal auto-hébergée.
- **DPA contractuel** : DPA Railway incorpore les Clauses Contractuelles Types UE.

### 3.2 Supabase

- **Région forcée** : `eu-west-1` (Dublin).
- **Cloisonnement multi-tenant** : Row Level Security (RLS) sur 60 tables + helpers `SECURITY DEFINER` avec `search_path=public`.
- **Séparation des rôles** : `service_role` réservé aux routes serveur précises (webhooks Stripe/DocuSeal, jobs admin), `anon`/`authenticated` pour le reste.
- **Minimisation** : pas de copie de la donnée vers d'autres régions ; pas de log côté Supabase contenant du contenu applicatif.

### 3.3 OpenRouter

- **Proxy stateless** : aucun prompt ni output n'est conservé côté OpenRouter au-delà du temps de traitement de la requête.
- **Contrat aval `data_collection=deny`** : OpenRouter impose à ses propres sous-fournisseurs (Anthropic, OpenAI, Mistral, etc.) une clause de non-conservation et de non-entraînement.
- **Routage effectif à ce jour** : OpenAI (GPT-4o et GPT-4o mini, opéré depuis les États-Unis) et Anthropic (Claude Sonnet 4.6 et Haiku 4.5, opéré depuis les États-Unis). Les transferts sont encadrés par les Clauses Contractuelles Types UE et les DPA propres à chaque fournisseur. Le runtime exclut volontairement le réacheminement Bedrock par défaut (incompatibilité documentée avec les schémas JSON-strict utilisés en pipeline, incident 2026-05-15).
- **Chaîne de résilience (PH10, 2026-06-10)** : en cas d'indisponibilité d'OpenRouter, la pipeline bascule directement vers Mistral AI (Paris, UE) le temps de la panne. Un tier-3 « Anthropic direct » était initialement planifié dans la chaîne ; il a été retiré (2026-06-11) parce qu'OpenRouter multiplexe déjà OpenAI + Anthropic en mode nominal, et Mistral direct fournit le chemin infrastructure-indépendant pendant un incident OpenRouter — ajouter Anthropic direct n'aurait fait sens qu'en cas de panne SIMULTANÉE OpenRouter + Mistral (scénario négligeable) et aurait introduit un sous-traitant US supplémentaire dans le Trust Center pour un gain marginal. Les bascules sont auditées (`audit_logs`, action `pipeline.llm_provider_failover`) et l'obligation contractuelle no-training s'applique sur chaque maillon.
- **Option Enterprise UE-résident en roadmap** : routage exclusif vers Anthropic Claude via AWS Bedrock région Paris (`eu-west-3`) ou Mistral Large hébergé à Paris. Activation par client Enterprise sur demande, conditionnée à la conclusion des tests de qualité FR.

### 3.4 Resend

- **Région d'envoi** : `eu-west-1` (Irlande).
- **Minimisation du contenu** : seules les données strictement nécessaires à la délivrabilité (email destinataire, sujet, contenu transactionnel) sont transmises.

### 3.5 GlitchTip

- **Hébergement** : DigitalOcean Frankfurt avec engagement contractuel de résidence des données UE et clause de non-transfert hors UE.
- **PII scrub côté SDK** : 3 runtimes (`server`, `edge`, `client`) configurés pour redact les emails, tokens, secrets, et payloads identifiables avant émission.
- **Rétention** : 30 jours par défaut, configurable à la baisse via contrat Enterprise.

### 3.6 Cloudflare R2 (off-site backups)

- **Juridiction EU pinnée** : bucket R2 provisionné avec l'option « R2 jurisdictional restrictions » EU. Aucune région US n'est utilisée.
- **Contenu limité aux dumps DR** : le bucket ne contient que les dumps `pg_dump` hebdomadaires de la base Postgres (chiffrés et compressés). **Aucune donnée applicative n'est lue en chaud depuis ce bucket** — il sert uniquement de copie de reprise d'activité indépendante de Supabase.
- **Lifecycle 90 jours** : politique de cycle de vie du bucket configurée pour expirer les objets après 90 jours.
- **DPA contractuel** : DPA Cloudflare incorpore les Clauses Contractuelles Types UE.

### 3.7 Cloudflare (DNS + email routing)

- **Aucune donnée applicative** : Cloudflare ne reçoit que des métadonnées DNS et de routage email (MX). Le trafic applicatif passe par Railway directement.

### 3.8 Gladia — rétention audio brut côté Scope

Bien que Gladia soit hébergé en UE (Paris) et ne nécessite pas de mitigation Cloud Act, Scope applique une politique de **minimisation côté Storage** dédiée :

- **Audio brut uploadé** : conservé au maximum **90 jours** dans le bucket Supabase `pieces` (résidence Frankfurt EU). Un cron hebdomadaire (`scope_purge_audio_pieces_weekly`, lundi 03:00 UTC) bascule les lignes éligibles vers `audio_purged_at = NOW()` et neutralise le `source_path` Storage. Documenté en détail dans `docs/legal/audio-retention-policy.md` (miroir public `public/legal/audio-retention-policy.md`).
- **Transcription** : conservée tant que la pièce ou le projet existe (suppression cascade), car le texte est la valeur métier exploitée par le pipeline de cadrage. La transcription seule (sans audio source) suffit à régénérer toute étape downstream du pipeline.
- **Côté Gladia** : politique de rétention propre à Gladia (résidence Paris, RGPD-natif, free tier 10 h/mois) — voir [gladia.io/compliance-hub](https://www.gladia.io/compliance-hub).

Cette politique respecte les principes RGPD de **minimisation** (art. 5.1.c) et de **limitation de la conservation** (art. 5.1.e).

### 3.9 Conservation des données d'audit

Les journaux d'audit applicatifs (`public.audit_logs`) suivent une politique de rétention en deux phases : **13 mois HOT** dans la table active (CNIL délib 2021-122 + SOC 2 Type II), puis **archivage automatique** vers `public.audit_logs_archive` jusqu'à **10 ans** (Code de commerce L123-22 pour les lignes comptables, alignement défensif pour les autres familles). Le déplacement HOT → COLD est effectué par un job pg_cron mensuel (`scope_archive_audit_logs_monthly`, 1er du mois 03:00 UTC). Politique détaillée et procédure DPO : `docs/legal/audit-log-retention.md` (miroir public `public/legal/audit-log-retention.md`).

### 3.10 Scaleway — archive immuable du journal d'audit

L'archive immuable du journal `audit_logs` (couche 2 de la preuve d'immutabilité décrite dans [`./audit-log-immutability-proof.md`](./audit-log-immutability-proof.md)) est confiée à **Scaleway SAS** — filiale d'Iliad SAS immatriculée en France, datacenter Paris DC5, bucket `scope-audit-cold-prod` en région `fr-par`.

- **Object Lock COMPLIANCE 7 ans** : en mode COMPLIANCE, la suppression ou l'écrasement d'un objet archivé est **physiquement impossible** durant toute la fenêtre de rétention, y compris avec les identifiants racine du compte Scaleway. Aucune procédure de bypass côté fournisseur (cf. [documentation Scaleway officielle](https://www.scaleway.com/en/docs/object-storage/api-cli/object-lock/)).
- **Souveraineté française** : Scaleway est hors de portée du Cloud Act US. Les certifications HDS (hébergeur agréé Données de Santé) et ISO 27001 sont publiques et vérifiables.
- **Aucun transfert hors UE** : la donnée transitée se limite à des lignes d'audit horodatées et hashées (chaîne SHA-256 préservée). Le bucket est verrouillé sur la région `fr-par` (Paris) sans réplication cross-région.
- **Pas de mitigation Cloud Act applicable** : Scaleway est juridiquement français, donc cette section §3 « Mitigations Cloud Act » ne le concerne pas. La présence ici tient au fait que c'est la couche d'archive durable du journal d'audit.

## 4. Sous-traitants stratégiques par fonction

### 4.1 Quatre piliers de souveraineté

Scope publie sur sa page Trust Center quatre **piliers de souveraineté** documentés (`moatLeg`) qui constituent le socle différenciant face aux concurrents US :

1. **Audio FR** : Gladia SAS (Paris, EU) — transcription spécialisée français, pas de transfert hors UE.
2. **LLM no-training** : OpenRouter avec clause `data_collection=deny` contractuelle aval.
3. **Signature eIDAS UE** : DocuSeal auto-hébergé sur Railway (région EU West).
4. **Hosting UE** : Railway région EU West (applicatif + DocuSeal) + Supabase Dublin `eu-west-1`.

### 4.2 Hors moat (fonctions support)

- **Mistral AI** : OCR PDF/images + fournisseur LLM de secours (Paris, FR, RGPD-natif, feature-flag `MISTRAL_OCR_ENABLED`).
- **Stripe** : paiement (Dublin EU, PCI DSS Level 1).
- **Resend** : email transactionnel (eu-west-1 Irlande, US-domiciled mitigé CCT).
- **Plausible** : web analytics sans cookies (Hetzner DE).
- **GlitchTip** : monitoring d'erreurs (DigitalOcean Frankfurt, résidence UE).
- **Cloudflare R2 (EU)** : sauvegardes hors-site Postgres pour DR (bucket EU, rétention 90 j).
- **Cloudflare DNS** : DNS + routage email (métadonnées seulement).
- **Better Stack** : supervision uptime + heartbeats crons (Vilnius LT, RGPD).
- **Scaleway** : archive immuable du journal d'audit (Paris FR, Object Lock COMPLIANCE 7 ans, souveraineté française).

## 5. Tenue à jour et notification

Cette liste est tenue à jour à chaque ajout, retrait ou substitution de sous-traitant. **Toute modification fonctionnelle déclenche une notification par email aux administrateurs des organisations abonnées au moins 30 jours avant l'entrée en vigueur**, en application de l'article 28.2 du RGPD (cf. [DPA Scope](https://getscope.dev/dpa) article 6).

Pour s'abonner aux notifications de changement de sous-traitant : envoyer un email à [dpo@getscope.dev](mailto:dpo@getscope.dev) en précisant la raison sociale du client.

L'historique des versions est tenu dans `lib/trust/sub-processors.ts` (champ `SUB_PROCESSORS_VERSION`, changelog en commentaire) :

- **2026.04.28-v1** : baseline initiale.
- **2026.05.14-v1** : remplacement Sentry (US, Cloud Act exposé) par GlitchTip (DigitalOcean Frankfurt, résidence UE). Fermeture de l'exposition Cloud Act sur le monitoring d'erreurs.
- **2026.05.18-v1** : correction des juridictions des fournisseurs US-domiciliés dont les régions de traitement sont UE, et exposition Cloud Act rendue explicite.
- **2026.05.27-v1** : alignement OpenRouter ↔ runtime réel. La fiche OpenRouter décrivait Bedrock Paris comme route LLM par défaut alors que le runtime (`lib/ai/openrouter.ts`) exclut volontairement Bedrock pour incompatibilité JSON-strict. Mise à jour des libellés *Lieu de traitement* et *Mitigation Cloud Act* pour refléter le routage effectif vers OpenAI (US) + Anthropic (US) sous CCT + DPA.
- **2026.05.27-v2** : ajout de **Mistral AI SAS** (Paris, FR) comme sous-traitant ultérieur pour l'OCR PDF et images (`lib/ingestion/ocr.ts` → `api.mistral.ai/v1/ocr`). Fonctionnalité activable uniquement quand le flag `MISTRAL_OCR_ENABLED` est positionné côté serveur.
- **2026.06.10-v1** : migration de l'hébergement applicatif de **Vercel** (US, serverless cdg1) vers **Railway** (US-domicilié, région EU West) suite au déploiement de production du 2026-05-29. La région technique reste UE ; l'exposition Cloud Act reste documentée avec une note de mitigation actualisée. Les données durables continuent de résider dans Supabase EU.
- **2026.06.10-v2** : production hardening (bundles PH1 + PH3 + PH10). PH1 ajoute **BetterStack UAB** (Vilnius, LT) pour la supervision uptime + heartbeats crons (statuspage publique status.getscope.dev, EU-only, pas de PII). PH3 ajoute **Cloudflare R2 (EU)** comme sous-traitant off-site backups : le bucket héberge les dumps `pg_dump` hebdomadaires Postgres pour le scénario DR « Supabase compromis » (juridiction EU, rétention 90 j). PH10 documente la chaîne de résilience LLM **Mistral direct (Paris, UE)** quand OpenRouter est indisponible (no-training contractuel maintenu).
- **2026.06.11-v4** : suppression du tier-3 « Anthropic direct » de la chaîne de résilience LLM PH10. La chaîne effective est désormais OpenRouter → Mistral direct (Paris, UE). Justification : OpenRouter multiplexe déjà OpenAI + Anthropic en mode nominal, Mistral direct fournit l'indépendance d'infrastructure pendant un incident OpenRouter — un tier-3 Anthropic direct n'aurait fait sens qu'en cas de panne simultanée OpenRouter + Mistral (négligeable) et aurait introduit un sous-traitant US supplémentaire pour un gain marginal. Aucun changement de surface d'API client.
- **2026.06.11-v5** : déclaration explicite de **Scaleway SAS (Iliad Group)** comme sous-traitant ultérieur n°14, rôle `audit-cold-archive`. L'intégration est live depuis le bundle PH5 (hash chain audit + Object Lock proof, cf. `audit-log-immutability-proof.md`) — Scaleway sert d'archive froide immuable du journal `audit_logs` (Object Lock COMPLIANCE 7 ans, bucket `scope-audit-cold-prod`, région Paris `fr-par`). Le registre n'avait simplement jamais formellement déclaré le prestataire — défaut rattrapé après l'audit workflow `wtrfbpw90`. Souveraineté française (Iliad SAS), hors Cloud Act, certifications HDS + ISO 27001.
- **2026.06.10-v3** : migration de l'instance DocuSeal auto-hébergée de **Hostinger NL (Coolify VPS)** vers **Railway (EU West)** pour consolider la stack runtime sur un seul prestataire avec volumes persistants. L'instance reste hébergée par l'éditeur (pas de tiers signature), la signature reste eIDAS, la résidence reste UE.

## 6. Renvois utiles

- **DPA Scope** (Article 28 RGPD) : [https://getscope.dev/dpa](https://getscope.dev/dpa) + [version PDF FR](https://getscope.dev/legal/dpa-template.pdf) + template markdown : [`./dpa-template.md`](./dpa-template.md)
- **Architecture data-flow** : [`./architecture-data-flow.md`](./architecture-data-flow.md)
- **Politique de confidentialité** : [https://getscope.dev/politique-de-confidentialite](https://getscope.dev/politique-de-confidentialite)
- **Trust Center** : [https://getscope.dev/trust](https://getscope.dev/trust)
- **Endpoint JSON machine-readable** : [https://getscope.dev/api/sub-processors.json](https://getscope.dev/api/sub-processors.json) (consommable OneTrust, Vanta, Drata)

---

*Document `subprocessors.md` — version 2026.06.10-v3 — à relire par avocat IT/RGPD avant signature. Toute clause de ce document peut être adaptée par négociation contractuelle.*
