Files
aza/backup 24.2.26 - Kopie (61)/security/handovers/STEP_10_CONSENT_LOGGING.md
2026-03-25 13:42:48 +01:00

140 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# STEP 10 Technische Einwilligungs-Protokollierung
## Ziel
Jede KI-bezogene Datenverarbeitung muss technisch nachweisbar
durch eine Einwilligung gedeckt sein.
---
## 1. Datenmodell
Jeder Consent-Eintrag enthält:
| Feld | Typ | Beschreibung |
|---|---|---|
| user_id | string | Benutzername aus Profil |
| consent_type | string | Immer "ai_processing" |
| consent_version | string | Stand-Datum aus ai_consent.md |
| timestamp | string | UTC ISO-8601 |
| source | string | "ui", "test", "admin" |
| action | string | "grant" oder "revoke" |
| prev_hash | string | SHA-256 des vorherigen Eintrags |
| hash | string | SHA-256 dieses Eintrags (Integritaetskette) |
## 2. Speicherort
- Datei: `aza_consent_log.json` (Projekt-Root)
- Format: JSON-Array (Append-only)
- Manipulationssicherheit: SHA-256-Hash-Kette
(jeder Eintrag referenziert den Hash des vorherigen)
- Kein Überschreiben: Widerruf erzeugt neuen Eintrag,
alter Grant bleibt in der Historie
## 3. Enforcement-Punkte
KI-Funktionen werden an folgenden Stellen blockiert, wenn
keine gueltige Einwilligung vorliegt:
| Stelle | Datei | Methode |
|---|---|---|
| Chat Completion (alle KI-Texte) | basis14.py | call_chat_completion() |
| Transkription | basis14.py | transcribe_wav() |
| Aufnahme starten | basis14.py | toggle_record() |
| Korrektur-Aufnahme | basis14.py | _toggle_record_append() |
| Diktat in Widget | basis14.py | _diktat_into_widget() |
| KI-Prüfung | basis14.py | open_ki_pruefen() |
| Interaktionscheck | basis14.py | do_interaktion() |
Bei fehlendem Consent:
- UI-Einstiegspunkte: Consent-Dialog wird angezeigt
- API-Gateways: RuntimeError wird geworfen
## 4. UI-Elemente
### 4.1 Consent-Dialog (vor erster KI-Nutzung)
- Zeigt den kompletten Text aus legal/ai_consent.md
- Checkbox: "Ich habe den Text gelesen und stimme zu"
- Buttons: "Zustimmen" / "Ablehnen"
- Wird nur angezeigt, wenn kein gueltiger Consent vorliegt
### 4.2 Einstellungsfenster (Datenschutz & Recht)
- Status-Anzeige: "Erteilt" / "Nicht erteilt / widerrufen"
- Button: "KI-Einwilligung widerrufen" / "erteilen"
- Button: "Consent-Log exportieren"
- Bestehende Buttons: Datenschutzerklaerung, KI-Einwilligung
## 5. Versions-Handling
- Die Consent-Version wird aus dem "Stand:"-Feld in
legal/ai_consent.md extrahiert
- Bei Aenderung des Consent-Textes (neues Datum) wird
ein bestehender Consent ungueltig
- Benutzer muss erneut zustimmen
## 6. Audit-Workflow
### Export
```
python -c "from aza_consent import export_consent_log; print(export_consent_log())"
```
Oder ueber Einstellungen -> "Consent-Log exportieren"
### Integritaetspruefung
```
python -c "from aza_consent import verify_chain_integrity; ok, e = verify_chain_integrity(); print('OK' if ok else e)"
```
### Export-Format
```json
{
"export_timestamp": "2026-02-22T...",
"total_entries": 3,
"current_consent_version": "Februar 2026",
"entries": [
{
"user_id": "...",
"consent_type": "ai_processing",
"consent_version": "Februar 2026",
"timestamp": "2026-02-22T...",
"source": "ui",
"action": "grant",
"prev_hash": "0000...0000",
"hash": "a1b2c3..."
}
]
}
```
## 7. Geaenderte / Neue Dateien
| Datei | Aktion |
|---|---|
| aza_consent.py | NEU Consent-Modul (Datenmodell, Storage, Enforcement, Export) |
| basis14.py | GEAENDERT Import aza_consent, Consent-Check an 7 Stellen |
| aza_settings_mixin.py | GEAENDERT Widerruf/Erteil-Button, Status, Export im Einstellungsfenster |
| _test_consent.py | NEU Testskript (14 Tests) |
## 8. Test-Ergebnisse (22.02.2026)
| Test | Ergebnis |
|---|---|
| Ohne Consent -> KI blockiert | PASS |
| Consent erteilen -> KI erlaubt | PASS |
| Widerruf -> KI blockiert | PASS |
| Erneuter Consent -> KI erlaubt | PASS |
| Hash-Kette intakt | PASS |
| Status-Abfrage korrekt | PASS |
| Version-Match | PASS |
| Export erstellt gueltige Datei | PASS |
| User-Historie korrekt | PASS |
| Anderer User -> kein Consent | PASS |
| Gesamt: 14/14 | ALLE BESTANDEN |
## 9. Risiken
| Risiko | Bewertung | Massnahme |
|---|---|---|
| JSON-Datei manuell editierbar | NIEDRIG | Hash-Kette erkennt Manipulation |
| Kein digitaler Signatur-Mechanismus | MITTEL | Fuer Audit: Export + Integritaetspruefung |
| Consent nur auf App-Ebene, nicht Patient | NIEDRIG | Papier-Einwilligung ergaenzt dies |