DSGVO von Grund auf, und jede Zusage getestet

Eine Adresse ist ein personenbezogenes Datum. Diese Seite listet genau auf, was Addrova protokolliert, speichert und nie aufbewahrt. Jede Aussage hat eine Kennung und ist mit einem automatisierten Test verknüpft, der bei jeder Codeänderung läuft.

Technische Dokumentation ansehen

Die Zusagen zur Log-Freiheit

In diesen Tabellen bedeutet „Adresse“ jede Eingabe des Kunden: Freitext, Komponenten, angefragte Koordinaten, Stapeldateien. Maßgeblich ist die Zero-Log-Spezifikation der API, auf Französisch; diese Seite übersetzt sie, ohne ihre Bedeutung zu ändern.

Version der Spezifikation vom 2026-10-19

Was protokolliert wird (vollständige Liste)

KennungAussageAutomatisierter Test
ZL-01Eine Zeile pro HTTP-Anfrage, mit genau: Methode, Routenvorlage (/v1/geocode, nie die echte URL oder der Query-String), Status, Dauer, pseudonymisierter Mandant, zufällige Anfragekennung. Keine IP-Adresse, kein User-Agent, kein API-Schlüssel.api/tests/test_zerolog.py::test_access_log_exact_fields
ZL-02Die einzigen anderen vom Code von Addrova ausgegebenen Meldungen sind die im nachstehenden Inventar; ihre Parameter sind Job-Kennungen, Zähler, Status oder Namen von Ausnahmetypen.api/tests/test_privacy_claims.py::test_log_inventory_matches_code
ZL-03Der Mandant wird überall pseudonymisiert (Logs, Traces): 16 Hexadezimalzeichen eines gesalzenen SHA-256 seiner Kennung; die Klartextkennung erscheint nie.api/tests/test_observability.py::test_tenant_hash_is_stable_and_opaqueapi/tests/test_zerolog.py::test_access_log_exact_fields

Was nie protokolliert oder getraced wird

KennungAussageAutomatisierter Test
ZL-10Keine Adresse, keine angefragte Koordinate und kein API-Schlüssel erscheint in den Logs, auf allen Routen (Geokodierung, Rückwärts-Geokodierung, Autovervollständigung, Korrektur, Stapel, Google- und Nominatim-Kompatibilität), auch im Fehlerfall (Engine ausgefallen, abgelehnte Eingabe, ungültiger Parameter, falscher Schlüssel, unbekannte Route).api/tests/test_zerolog.py::test_canary_never_logged
ZL-11Meldungen von Drittbibliotheken werden neutralisiert: Parameter maskiert, Query-String gelöscht, Ausnahme auf ihren Typ reduziert (ohne Meldung und Trace).api/tests/test_zerolog.py::test_third_party_logger_args_and_query_redacted
ZL-12Fehlerantworten geben weder den fehlerhaften Wert noch die interne Meldung der Engine zurück.api/tests/test_api.py::test_geocode_invalid_paramsapi/tests/test_api.py::test_engine_errors_do_not_echo_query
ZL-13OpenTelemetry-Traces tragen nur Attribute einer Positivliste (Methode, Routenvorlage, Status, pseudonymisierter Mandant, Engine-Operation, Land, Anzahl der Ergebnisse, Genauigkeit des ersten Ergebnisses), ohne Ereignisse; weder Adresse noch Koordinate noch Schlüssel noch Klartext-Mandantenkennung.api/tests/test_observability.py::test_spans_carry_only_allowlisted_attributesapi/tests/test_observability.py::test_span_content
ZL-15Konsole: E-Mail-Adresse, Magic-Link-Token und Sitzungs-Token erscheinen in keinem Log.api/tests/test_console.py::test_email_and_tokens_never_logged
ZL-16Öffentliche Demo der Website (/demo/v1): Weder die eingegebene Adresse noch die IP-Adresse des Besuchers erscheint in den Logs; die IP wird nie gespeichert, nur ein HMAC-Fingerabdruck mit täglich wechselndem Geheimnis (nach der Rotation unbrauchbar) dient zum Zählen der Anfragen.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-14Prometheus-Metriken haben nur Labels mit begrenzten Werten; ein unbekannter Pfad wird als <unmatched> gezählt.api/tests/test_observability.py::test_metrics_labels_are_boundedapi/tests/test_observability.py::test_spans_carry_only_allowlisted_attributes

Was gespeichert wird, und wie lange

KennungAussageAutomatisierter Test
ZL-20API-Schlüssel werden nur als SHA-256-Fingerabdruck gespeichert (plus 12 Zeichen Präfix zur Anzeige).api/tests/test_tenancy_persistent.py::test_keys_are_hashed_and_revocable
ZL-21Die Datenbank enthält weder Anfrage noch Ergebnis: nur Mandanten, Schlüssel (Fingerabdrücke) und Nutzungszähler (Mandant, Tag, Endpunkt, Anzahl).api/tests/test_privacy_claims.py::test_schema_has_no_content_columns
ZL-22Stapel: Die Eingabedatei wird gelöscht, sobald die Verarbeitung endet; das Ergebnis und die Job-Metadaten werden am Ende der Aufbewahrungsfrist gelöscht (standardmäßig 1 Stunde nach Abschluss, konfigurierbar) oder sofort bei DELETE; ein nie verarbeiteter Job wird nach 24 Stunden bereinigt.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-23Die Metadaten eines Stapel-Jobs enthalten keine Zeile der Datei (Zähler, Daten, Spaltennamen, Standardland).api/tests/test_privacy_claims.py::test_batch_metadata_has_no_row_content
ZL-25Konsole: Das einzige gespeicherte personenbezogene Datum ist die E-Mail-Adresse des Kontos (und die eines laufenden Anmeldelinks, 15 Minuten gültig, einmalig verwendbar); Link- und Sitzungs-Token werden nur als SHA-256-Fingerabdruck gespeichert.api/tests/test_privacy_claims.py::test_schema_has_no_content_columnsapi/tests/test_console.py::test_link_is_single_use_and_logout
ZL-26Eine Organisation sieht weder die Schlüssel noch die Nutzung einer anderen; ein widerrufener oder abgelaufener (rotierter) Schlüssel wird abgelehnt.api/tests/test_console.py::test_org_isolationapi/tests/test_console.py::test_keys_lifecycle_and_plan_limit
ZL-27Webhook am Ende eines Stapels: Die Nutzlast enthält nur Kennung, Status, Zähler und Links des Jobs, nie eine Zeile der Datei und keine Adresse; URL und Geheimnis des Webhooks werden nie protokolliert.api/tests/test_batch_stream.py::test_webhook_delivery_signed_without_addresses_and_retried
ZL-28Idempotenz (Idempotency-Key): Nur ein SHA-256-Fingerabdruck der Anfrage (und bei einem Stapel die Job-Kennung) wird 24 Stunden lang aufbewahrt, nie die gesendete Adresse und nie die Antwort.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-29Kein nicht deklarierter ausgehender Netzwerkverkehr: Im Namespace wird standardmäßig alles verweigert; die Website hat keinen ausgehenden Verkehr; die API erreicht nur den Cluster-DNS, ihre Datenbanken (PostgreSQL, Redis), den internen OTel-Collector und, für Webhooks, HTTPS ins öffentliche Internet (private, lokale und Metadaten-Bereiche ausgeschlossen). Kein Analysewerkzeug eines Dritten kann eine Anfrage erhalten.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-24Der Stapel-Job eines Kunden ist für andere Kunden unsichtbar.api/tests/test_batch.py::test_isolation_delete_and_expiry

Was (noch) nicht existiert

KennungAussageAutomatisierter Test
ZL-30Der asynchrone Fallback von /v1/repair (LLM) ist deaktiviert: kein externer Aufruf, keine Adresse verlässt den Dienst.api/tests/test_repair.py::test_repair_unrepairable_and_async_disabled
ZL-32In v0 wird keine E-Mail tatsächlich versendet (In-Memory-Postausgang) und kein echter Abrechnungsanbieter angebunden (Platzhalter-Anbieter).api/tests/test_privacy_claims.py::test_no_external_transport_by_default
ZL-31In v0 ist kein Ergebnis-Cache vorhanden (der HMAC-Cache mit rotierendem Geheimnis aus ADR 0005 ist noch nicht umgesetzt).api/tests/test_privacy_claims.py::test_no_result_cache_in_v0

Inventar der Log-Meldungen

Dies sind die einzigen Meldungen, die der Code ausgibt, im genauen Format. Ein Test schlägt fehl, wenn Code und diese Liste auseinanderlaufen.

%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

Außerhalb des Umfangs dieser Tests

Diese Punkte werden anders geprüft, und das sagen wir offen:

  • Ingress / Proxy: Sein Zugriffslog muss auf den API-Routen deaktiviert sein (ADR 0004); Infrastrukturkonfiguration, in infra/ und auf dem Cluster zu prüfen.
  • Engine (addrova_engine): Sie verpflichtet sich, keine Anfragen zu protokollieren (ADR 0002); ihre eigenen Tests prüfen das.
  • Export der Traces: nur wenn ADDROVA_OTLP_ENDPOINT gesetzt ist, an einen in der EU gehosteten Collector; ohne diese Einstellung verlässt kein Trace den Prozess.
  • Speicherung der Stapeldateien: v0 auf der lokalen Platte des Containers (Rechte 0600); verschlüsselter EU-Objektspeicher ist für die Produktion geplant (ADR 0006, ADR 0009).

Was nicht aufbewahrt wird, wird nicht wiederverwendet

Addrova verwendet Ihre Anfragen nicht, um Modelle zu trainieren, Datensätze aufzubauen oder den Index zu erweitern, und der Code setzt das konkret um: Anfragen und Ergebnisse werden nie protokolliert (ZL-10), die Datenbank enthält weder Anfrage noch Ergebnis (ZL-21), Stapeldateien werden nach der Verarbeitung gelöscht (ZL-22), es gibt keinen Ergebnis-Cache (ZL-31) und keine Adresse wird an einen externen Dienst gesendet (ZL-30).

Noch nicht zugesagt

  • Hosting ausschließlich in der EU: Hosting-Anbieter und Region sind noch nicht veröffentlicht. [À VÉRIFIER]
  • Unterauftragsverarbeiter und Auftragsverarbeitungsvertrag (AVV): werden vor dem Start veröffentlicht, mit Online-Unterzeichnung. [À VÉRIFIER]
  • Zertifizierungen: keine zugesagt. ISO 27001 ist für eine spätere Phase geplant.

Datenquellen und Lizenzen

Wir stützen uns auf offizielle offene Daten unter offenen Lizenzen (für Frankreich die Licence Ouverte 2.0). Jede API-Antwort enthält eine Attributionsliste mit den Quellen. Daten unter Share-Alike-Lizenzen wie OpenStreetMap liegen in einem getrennten Index und werden nie mit dem offiziellen vermischt.

Fragen zum Datenschutz

Kann ich diese Zusagen überprüfen?

Jede Zusage nennt den automatisierten Test, der sie prüft. Die Tests laufen bei jeder Änderung; einer davon schlägt fehl, wenn ein genannter Test verschwindet oder das Log-Inventar nicht mehr zum Code passt. Der Zugang zur Testsuite für Audits ist noch zu klären. [À VÉRIFIER]

Protokollieren Sie meine IP-Adresse?

Die Anwendung nicht: Ihr Zugriffslog enthält keine IP-Adresse, keinen User-Agent und keinen API-Schlüssel (ZL-01). Auch beim vorgeschalteten Ingress muss das Zugriffslog deaktiviert sein; das ist eine Infrastruktureinstellung und oben als außerhalb des Testumfangs aufgeführt.

Wie lange werden Stapelergebnisse aufbewahrt?

Standardmäßig eine Stunde nach Abschluss oder bis Sie den Job löschen (ZL-22). Die Eingabedatei wird gelöscht, sobald die Verarbeitung endet.