GDPR fin dalla progettazione, e ogni impegno verificato

Un indirizzo è un dato personale. Questa pagina elenca esattamente cosa Addrova registra, conserva e non tiene mai. Ogni affermazione ha un identificatore ed è collegata a un test automatico eseguito a ogni modifica del codice.

Vedere la documentazione tecnica

Gli impegni zero log

In queste tabelle «indirizzo» indica qualsiasi dato inserito dal cliente: testo libero, componenti, coordinate richieste, file in blocco. La fonte di riferimento è la specifica zero log dell’API, in francese; questa pagina la traduce senza cambiarne il senso.

Versione della specifica del 2026-10-19

Cosa viene registrato (elenco esaustivo)

IdAffermazioneTest automatico
ZL-01Una riga per richiesta HTTP, con esattamente: metodo, modello di rotta (/v1/geocode, mai l’URL reale né la stringa di query), stato, durata, tenant pseudonimizzato, identificatore di richiesta casuale. Nessun indirizzo IP, nessuno user-agent, nessuna chiave API.api/tests/test_zerolog.py::test_access_log_exact_fields
ZL-02Gli unici altri messaggi emessi dal codice di Addrova sono quelli dell’inventario qui sotto; i loro parametri sono identificatori di job, contatori, stati o nomi di tipi di eccezione.api/tests/test_privacy_claims.py::test_log_inventory_matches_code
ZL-03Il tenant è pseudonimizzato ovunque (log, tracce): 16 caratteri esadecimali di uno SHA-256 con salt del suo identificatore; l’identificatore in chiaro non compare mai.api/tests/test_observability.py::test_tenant_hash_is_stable_and_opaqueapi/tests/test_zerolog.py::test_access_log_exact_fields

Cosa non viene mai registrato né tracciato

IdAffermazioneTest automatico
ZL-10Nessun indirizzo, nessuna coordinata richiesta e nessuna chiave API compare nei log, su tutte le rotte (geocodifica, inversa, completamento automatico, riparazione, blocchi, compatibilità Google e Nominatim), anche in caso di errore (motore non disponibile, input rifiutato, parametro non valido, chiave errata, rotta sconosciuta).api/tests/test_zerolog.py::test_canary_never_logged
ZL-11I messaggi delle librerie di terze parti sono neutralizzati: parametri mascherati, stringa di query cancellata, eccezione ridotta al suo tipo (senza messaggio né traccia).api/tests/test_zerolog.py::test_third_party_logger_args_and_query_redacted
ZL-12Le risposte di errore non restituiscono né il valore errato né il messaggio interno del motore.api/tests/test_api.py::test_geocode_invalid_paramsapi/tests/test_api.py::test_engine_errors_do_not_echo_query
ZL-13Le tracce OpenTelemetry portano solo attributi di una lista consentita (metodo, modello di rotta, stato, tenant pseudonimizzato, operazione del motore, paese, numero di risultati, precisione del primo risultato), senza eventi; né indirizzo, né coordinata, né chiave, né identificatore di tenant in chiaro.api/tests/test_observability.py::test_spans_carry_only_allowlisted_attributesapi/tests/test_observability.py::test_span_content
ZL-15Console: l’indirizzo e-mail, i token del link magico e i token di sessione non compaiono in nessun log.api/tests/test_console.py::test_email_and_tokens_never_logged
ZL-16Demo pubblica del sito (/demo/v1): né l’indirizzo inserito né l’indirizzo IP del visitante compaiono nei log; l’IP non viene mai conservato, solo un’impronta HMAC con segreto giornaliero (inutilizzabile dopo la rotazione) serve a contare le richieste.api/tests/test_demo.py::test_demo_never_logs_address_or_ipapi/tests/test_demo.py::test_fingerprint_rotates_daily_and_hides_ipapi/tests/test_demo.py::test_redis_mode_shares_secret_and_counters
ZL-14Le metriche Prometheus hanno solo etichette con valori limitati; un percorso sconosciuto è conteggiato come <unmatched>.api/tests/test_observability.py::test_metrics_labels_are_boundedapi/tests/test_observability.py::test_spans_carry_only_allowlisted_attributes

Cosa viene conservato, e per quanto tempo

IdAffermazioneTest automatico
ZL-20Le chiavi API sono conservate solo come impronta SHA-256 (più 12 caratteri di prefisso per la visualizzazione).api/tests/test_tenancy_persistent.py::test_keys_are_hashed_and_revocable
ZL-21Il database non contiene alcuna richiesta né alcun risultato: solo tenant, chiavi (impronte) e contatori di utilizzo (tenant, giorno, endpoint, numero).api/tests/test_privacy_claims.py::test_schema_has_no_content_columns
ZL-22Blocchi: il file di input è eliminato appena termina il trattamento; il risultato e i metadati del job sono eliminati al termine della conservazione (1 ora dopo il completamento per impostazione predefinita, configurabile) o immediatamente con DELETE; un job mai trattato è eliminato dopo 24 ore.api/tests/test_batch.py::test_csv_roundtrip_usage_and_input_purgeapi/tests/test_batch.py::test_isolation_delete_and_expiryapi/tests/test_batch.py::test_result_purged_after_retention
ZL-23I metadati di un job in blocco non contengono alcuna riga del file (contatori, date, nomi delle colonne, paese predefinito).api/tests/test_privacy_claims.py::test_batch_metadata_has_no_row_content
ZL-25Console: l’unico dato personale conservato è l’indirizzo e-mail dell’account (e quello di un link di accesso in corso, valido 15 minuti, monouso); i token di link e di sessione sono conservati solo come impronta SHA-256.api/tests/test_privacy_claims.py::test_schema_has_no_content_columnsapi/tests/test_console.py::test_link_is_single_use_and_logout
ZL-26Un’organizzazione non vede né le chiavi né l’utilizzo di un’altra; una chiave revocata o scaduta (rotazione) viene rifiutata.api/tests/test_console.py::test_org_isolationapi/tests/test_console.py::test_keys_lifecycle_and_plan_limit
ZL-27Webhook di fine blocco: il payload contiene solo l’identificatore, lo stato, i contatori e i link del job, mai una riga del file né un indirizzo; l’URL e il segreto del webhook non vengono mai registrati.api/tests/test_batch_stream.py::test_webhook_delivery_signed_without_addresses_and_retried
ZL-28Idempotenza (Idempotency-Key): viene conservata per 24 ore solo un’impronta SHA-256 della richiesta (e, per un blocco, l’identificatore del job), mai l’indirizzo inviato né la risposta.api/tests/test_idempotency_versioning.py::test_idempotency_never_stores_addressapi/tests/test_idempotency_versioning.py::test_in_progress_conflict_and_stores_keep_no_content
ZL-29Nessuna uscita di rete non dichiarata: rifiuto per impostazione predefinita nel namespace; il sito web non ha uscite; l'API raggiunge solo il DNS del cluster, i suoi database (PostgreSQL, Redis), il collettore OTel interno e, per i webhook, HTTPS verso Internet pubblico (intervalli privati, locali e di metadati esclusi). Nessuno strumento di analisi di terze parti può ricevere una richiesta.api/tests/test_k8s_hardening.py::test_egress_is_limited_to_declared_flowsapi/tests/test_k8s_hardening.py::test_namespace_is_restricted_and_denies_by_default
ZL-24Il job in blocco di un cliente è invisibile agli altri clienti.api/tests/test_batch.py::test_isolation_delete_and_expiry

Cosa non esiste (ancora)

IdAffermazioneTest automatico
ZL-30Il ripiego asincrono di /v1/repair (LLM) è disattivato: nessuna chiamata esterna, nessun indirizzo lascia il servizio.api/tests/test_repair.py::test_repair_unrepairable_and_async_disabled
ZL-32Nella v0 non viene realmente inviata alcuna e-mail (casella di posta in uscita in memoria) e non è collegato alcun fornitore di fatturazione reale (fornitore fittizio).api/tests/test_privacy_claims.py::test_no_external_transport_by_default
ZL-31Nella v0 non esiste alcuna cache dei risultati (la cache HMAC a segreto rotante dell’ADR 0005 non è ancora implementata).api/tests/test_privacy_claims.py::test_no_result_cache_in_v0

Inventario dei messaggi di log

Sono gli unici messaggi emessi dal codice, nel loro formato esatto. Un test fallisce se il codice e questo elenco divergono.

%s %s %d %.1fms tenant=%s rid=%s
job %s queued rows=%d
job %s %s rows=%d matched=%d
job %s failed: %s
engine loaded: %s
addrova_engine not installed, using the fake engine
usage flush failed: %s
index preloaded: %d bytes
webhook job %s attempt %d status %s
engine contract violation: candidate without source
engine failure: %s

Fuori dall’ambito di questi test

Questi punti si verificano in altro modo, e lo diciamo:

  • Ingress / proxy: il suo log di accesso deve essere disattivato sulle rotte dell’API (ADR 0004); configurazione dell’infrastruttura, da verificare in infra/ e sul cluster.
  • Motore (addrova_engine): si impegna a non registrare le richieste (ADR 0002); i suoi test lo verificano.
  • Esportazione delle tracce: solo se ADDROVA_OTLP_ENDPOINT è definito, verso un collettore ospitato nell’UE; senza questa impostazione nessuna traccia lascia il processo.
  • Conservazione dei file in blocco: v0 sul disco locale del container (permessi 0600); archiviazione di oggetti cifrata nell’UE prevista per la produzione (ADR 0006, ADR 0009).

Poiché nulla viene conservato, nulla viene riutilizzato

Addrova non usa le sue richieste per addestrare modelli, costituire insiemi di dati o arricchire il proprio indice, e il codice lo rende concreto: interrogazioni e risultati non sono mai registrati (ZL-10), il database non contiene richieste né risultati (ZL-21), i file in blocco sono eliminati dopo il trattamento (ZL-22), non esiste una cache dei risultati (ZL-31) e nessun indirizzo viene inviato a un servizio esterno (ZL-30).

Non ancora dichiarato

  • Hosting esclusivamente nell’UE: il fornitore di hosting e la regione non sono ancora pubblicati. [À VÉRIFIER]
  • Sub-responsabili e accordo sul trattamento dei dati (DPA): saranno pubblicati, con firma online, prima del lancio. [À VÉRIFIER]
  • Certificazioni: nessuna dichiarata. ISO 27001 è prevista in una fase successiva.

Fonti dei dati e licenze

Ci basiamo su dati aperti ufficiali con licenze aperte (per la Francia, Licence Ouverte 2.0). Ogni risposta dell’API riporta un elenco di attribuzione che nomina le fonti. I dati con licenza share-alike, come OpenStreetMap, restano in un indice separato e non vengono mai fusi con l’indice ufficiale.

Domande sulla conformità

Posso verificare questi impegni?

Ogni impegno nomina il test automatico che lo verifica. I test vengono eseguiti a ogni modifica; uno di essi fallisce se un test citato scompare o se l’inventario dei log non corrisponde più al codice. L’accesso alla suite di test per un audit è da definire. [À VÉRIFIER]

Registrate il mio indirizzo IP?

L’applicazione no: il suo log di accesso non contiene indirizzo IP, user-agent né chiave API (ZL-01). Anche l’ingress davanti ad essa deve avere il log di accesso disattivato; è un’impostazione di infrastruttura, indicata sopra come fuori dall’ambito dei test.

Per quanto tempo vengono conservati i risultati di un blocco?

Un’ora dopo il completamento per impostazione predefinita, oppure finché non elimina il job (ZL-22). Il file di input viene eliminato appena termina il trattamento.