Custodir ← Home

GDPR Data Flow Audit — Custodir

Versione: 0.1 · 2026-05-11 Scope: mappatura formale dei flussi dati ai sensi degli art. 30 GDPR (Registro dei trattamenti) e a supporto della Data Protection Impact Assessment (DPIA — eventuale, vedi §6). Riferimento tecnico: cloud/DATA_FLOW.md per la versione "marketing/trasparenza pubblica" dello stesso contenuto.


1. Titolare del trattamento

Campo Valore
Denominazione Alberto Caggia (titolare individuale, in attesa di apertura P.IVA al raggiungimento di €5.000 cumulativi annui — vedi legal/P_IVA_STRATEGY.md)
Sede Torino, Italia
Email contatto privacy supporto@custodir.com
DPO Non designato (non obbligatorio art. 37 GDPR per la dimensione attuale; reviewable se sup. 5.000 utenti UE)
Rappresentante UE Non necessario (Titolare già residente UE)

2. Registro dei trattamenti (art. 30 GDPR)

2.1 Trattamento "Gestione licenza software"

Campo Dettaglio
Finalità Erogazione del software Custodir all'utente che ha acquistato la licenza, validazione anti-pirateria entro il limite SKU, refresh JWT periodico
Categorie di interessati Utenti acquirenti di Custodir (consumatori italiani prevalentemente, anche UE/extra-UE)
Categorie di dati License key (identificativo non riconducibile direttamente a persona), email collegata a Lemon Squeezy, device_fingerprint (random 24-byte hex generato localmente, NO MAC/IP/disk-serial), hostname (opzionale, troncato 80 char)
Categorie di destinatari Cloudflare (hosting Worker + D1), Lemon Squeezy (gestione email + acquisto). Nessun terzo non-essential.
Trasferimenti extra-UE Cloudflare e Lemon Squeezy USA — copertura tramite SCC + DPF
Termine conservazione Dati di licenza: durata licenza + 5 anni (obblighi fiscali + decennale civilistico). Device activation: finché device attivo + 12 mesi rolling.
Misure di sicurezza TLS 1.3, JWT Ed25519 firmati offline-verifiable, KV rate-limit 30 req/60s/IP, rate limiting Cloudflare WAF, audit log Worker (no body, no credentials)
Base giuridica Esecuzione del contratto (art. 6.1.b GDPR)

2.2 Trattamento "Pagamento e fatturazione"

Campo Dettaglio
Finalità Incasso del prezzo della licenza, gestione recesso (14gg), fatturazione UE (gestita da Lemon Squeezy MoR)
Categorie di interessati Acquirenti
Categorie di dati Email, importo, ID transazione, paese (per IVA). Custodir NON riceve dati carta di credito (gestiti da Stripe via LS).
Categorie di destinatari Lemon Squeezy LLC (Merchant of Record), Stripe Inc. (sub-processor di LS), Erario italiano (per dichiarazione IVA quando aprirà P.IVA Alberto)
Trasferimenti extra-UE LS + Stripe USA — SCC + DPF
Termine conservazione 10 anni dalla transazione (art. 2220 c.c.)
Misure di sicurezza Webhook LS firmato HMAC-SHA256 (verificato dal Worker), idempotency via webhook_events.external_id UNIQUE
Base giuridica Esecuzione contratto + obbligo legale (art. 6.1.b + 6.1.c GDPR — obbligo fiscale civilistico)

2.3 Trattamento "Bot Telegram (opzionale)"

Campo Dettaglio
Finalità Notifiche e comandi via @Custodir_Bot per utenti che hanno scelto di collegarsi via /link <license-key>
Categorie di interessati Sottoinsieme di acquirenti che scelgono attivamente di collegare il bot
Categorie di dati telegram_user_id, @username (pubblico Telegram), first_name (pubblico Telegram), chat_id, license_id collegato, timestamp comandi
Categorie di destinatari Telegram FZ-LLC (UAE), Cloudflare (hosting webhook handler)
Trasferimenti extra-UE Telegram UAE (nessuna decisione di adeguatezza UE — adeguatezza ad-hoc, dati condivisi limitatissimi e già-pubblici)
Termine conservazione Finché utente fa /unlink o per durata licenza
Misure di sicurezza Webhook auth via X-Telegram-Bot-Api-Secret-Token (constant-time check), nessuna persistenza del testo dei messaggi
Base giuridica Consenso esplicito (/link è un'azione manuale dell'utente) — art. 6.1.a GDPR

2.4 Trattamento "Analytics sito"

Campo Dettaglio
Finalità Misurare aggregato del traffico al sito custodir.com per ottimizzare landing
Categorie di interessati Visitatori del sito (anche non acquirenti)
Categorie di dati Pagina, paese, browser, OS, referrer (NO IP, NO device fingerprint, NO cookie)
Categorie di destinatari Plausible Insights OÜ (Estonia)
Trasferimenti extra-UE Nessuno (Plausible è UE)
Termine conservazione Dati grezzi: zero (Plausible non li salva). Aggregati: 365 giorni.
Misure di sicurezza Cookieless by design
Base giuridica Legittimo interesse (art. 6.1.f GDPR) — bilanciamento valido per natura aggregata e anonima

2.5 Trattamento "Supporto utenti"

Campo Dettaglio
Finalità Risposta a richieste di supporto/refund/DSAR via email
Categorie di interessati Utenti che scrivono a supporto@custodir.com o info@custodir.com
Categorie di dati Email mittente, contenuto del messaggio (incluse eventuali citazioni di license_key, screenshot allegati)
Categorie di destinatari Cloudflare Email Routing (forwarding), Gmail (casella destinazione caggia.oasi@gmail.com di Alberto)
Trasferimenti extra-UE Google USA — DPF
Termine conservazione 24 mesi dalla chiusura del ticket (per gestione recidive / claim)
Misure di sicurezza TLS in transito (Cloudflare → Gmail), 2FA su account Gmail destinazione
Base giuridica Esecuzione contratto (art. 6.1.b) + legittimo interesse (gestione assistenza)

3. Categorie di dati che NON trattiamo

Per design del prodotto (privacy by design, art. 25 GDPR):

Categoria Dove vive Perché non passa da noi
Dati patrimoniali (importi, holdings, transazioni) Solo PC dell'utente, in DB SQLite cifrato (SQLCipher) Architettura "PC-locale fa tutto"
Credenziali broker (Fineco, TR, Gmail app password) Solo PC dell'utente, in vault cifrato (AES-256-GCM, master password Argon2id) Mai trasmesse
Email transazionali del broker Parsate localmente dall'IMAP del client Mai trasmesse
Output AI (recap, tax preview) Generati localmente, chiamate dirette client → Anthropic/Groq Mai cached lato cloud
Backup database Locali su PC + opzionalmente push a repo GitHub privato dell'utente Mai a server Custodir

4. Diritti degli interessati (art. 15-22 GDPR)

Vedi sezione 6 di PRIVACY_POLICY.md. Procedura interna:

  1. Richiesta DSAR via supporto@custodir.com
  2. Verifica identità (email originale + license key)
  3. Estrazione dati da D1 (license + activation + telegram_link rows) tramite query MCP / wrangler
  4. Risposta entro 30 giorni con export JSON
  5. In caso di richiesta cancellazione: DELETE su licenses (CASCADE su device_activations + telegram_links). I record webhook_events di pagamento restano per obbligo fiscale.

5. Data Breach response

Procedura ai sensi degli art. 33-34 GDPR:

  1. Detection: alert via Cloudflare WAF anomaly detection + manual log review settimanale
  2. Containment entro 24h: rotate JWT Ed25519 keypair, revoke tutti i JWT attivi (forza re-activate), redeploy Worker, rotate API tokens
  3. Notifica al Garante entro 72h (art. 33 GDPR) se il breach comporta rischio per diritti/libertà degli interessati
  4. Notifica agli interessati senza ingiustificato ritardo (art. 34 GDPR) se rischio elevato
  5. Documentazione interna dell'incident con root cause, mitigazioni, lessons learned

6. Valutazione necessità DPIA (art. 35 GDPR)

DPIA non obbligatoria al momento perché:

Riconsidereremo la DPIA se:


7. Validità