docs: Tests, MKDocs und SDK-Flow-Beschreibungen fuer Analyse-Module aktualisieren
All checks were successful
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Successful in 33s
CI / test-python-backend-compliance (push) Successful in 28s
CI / test-python-document-crawler (push) Successful in 22s
CI / test-python-dsms-gateway (push) Successful in 18s

Backend-Tests fuer alle 7 Analyse-Module (Requirements CRUD, AI System CRUD + Assessment,
Evidence Pagination, Risk Workflow). MKDocs um Analyse-Module-Seite erweitert. SDK-Flow
flow-data.ts und StepHeader STEP_EXPLANATIONS mit neuen Features aktualisiert (CRUD,
Pagination, Evidence-Linking, Residual Risk, AI Act Backend-Persistenz, PDF-Export).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-03-02 16:09:03 +01:00
parent d48ebc5211
commit 7cc420bd9e
6 changed files with 857 additions and 30 deletions

View File

@@ -240,13 +240,13 @@ export const SDK_FLOW_STEPS: SDKFlowStep[] = [
checkpointType: 'REQUIRED',
checkpointReviewer: 'NONE',
description: 'Ableitung konkreter Compliance-Anforderungen aus den aktivierten Modulen, mit RAG-Anreicherung.',
descriptionLong: 'Aus den aktivierten Modulen und der Source Policy werden konkrete, umsetzbare Compliance-Anforderungen abgeleitet. Die RAG-Collections bp_compliance_recht (DE-Gesetze) und bp_compliance_ce (EU-Verordnungen) liefern aktuelle Rechtstexte, aus denen spezifische Pflichten extrahiert werden. Die KI-gestuetzte Interpretation (interpret_requirement) und Control-Vorschlaege (suggest_controls) werden mit RAG-Kontext angereichert — die Collection wird automatisch anhand des Regulation-Codes gewaehlt (EU → bp_compliance_ce, DE → bp_compliance_recht). Der API-Endpunkt GET /requirements/{id}?include_legal_context=true liefert optional passende Rechtstexte als Kontext mit.',
descriptionLong: 'Aus den aktivierten Modulen und der Source Policy werden konkrete, umsetzbare Compliance-Anforderungen abgeleitet. Vollstaendige CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Loeschen) mit Backend-Persistenz. Die RAG-Collections bp_compliance_recht (DE-Gesetze) und bp_compliance_ce (EU-Verordnungen) liefern aktuelle Rechtstexte, aus denen spezifische Pflichten extrahiert werden. Die KI-gestuetzte Interpretation (interpret_requirement) und Control-Vorschlaege (suggest_controls) werden mit RAG-Kontext angereichert — die Collection wird automatisch anhand des Regulation-Codes gewaehlt (EU → bp_compliance_ce, DE → bp_compliance_recht). Status-Workflow: NOT_STARTED → IN_PROGRESS → IMPLEMENTED → VERIFIED mit automatischem Rollback bei Backend-Fehler. Filterung, Volltextsuche und Paginierung fuer grosse Datensaetze (500+ Anforderungen).',
legalBasis: 'Art. 5, 24, 25 DSGVO (Rechenschaftspflicht)',
inputs: ['modules', 'sourcePolicy'],
outputs: ['requirements'],
prerequisiteSteps: ['source-policy'],
dbTables: ['compliance_requirements'],
dbMode: 'read',
dbMode: 'read/write',
ragCollections: ['bp_compliance_recht', 'bp_compliance_ce'],
ragPurpose: 'Rechtliche Anforderungen ableiten + AI-Interpretation mit Rechtskontext anreichern (Collection-Routing: EU→ce, DE→recht)',
isOptional: false,
@@ -262,7 +262,7 @@ export const SDK_FLOW_STEPS: SDKFlowStep[] = [
checkpointType: 'REQUIRED',
checkpointReviewer: 'DSB',
description: 'Definition technischer und organisatorischer Kontrollen zur Erfuellung der Anforderungen.',
descriptionLong: 'Fuer jede Compliance-Anforderung werden konkrete Controls (Kontrollmassnahmen) definiert. Controls sind technische oder organisatorische Massnahmen, die sicherstellen, dass eine Anforderung erfuellt wird. Beispiele: Zugriffskontrolle (RBAC), Verschluesselung (AES-256), Logging, Schulungspflichten. Der Datenschutzbeauftragte (DSB) muss diesen Schritt freigeben, da die Controls die Basis fuer die gesamte Sicherheitsarchitektur bilden.',
descriptionLong: 'Fuer jede Compliance-Anforderung werden konkrete Controls (Kontrollmassnahmen) definiert. Controls sind technische oder organisatorische Massnahmen, die sicherstellen, dass eine Anforderung erfuellt wird. Beispiele: Zugriffskontrolle (RBAC), Verschluesselung (AES-256), Logging, Schulungspflichten. Evidence-Linking: Jeder Control zeigt verknuepfte Nachweise mit Gueltigkeits-Badge an. Navigation zur Evidence-Seite mit vorausgewaehltem Control. Domaenen-basierte Gruppierung (gov, priv, iam, crypto, sdlc, ops, ai, cra, aud). Review-Workflow mit Verantwortlichem und naechstem Review-Datum. Der DSB muss diesen Schritt freigeben.',
legalBasis: 'Art. 32 DSGVO (Sicherheit der Verarbeitung)',
inputs: ['requirements'],
outputs: ['controls'],
@@ -283,7 +283,7 @@ export const SDK_FLOW_STEPS: SDKFlowStep[] = [
checkpointType: 'RECOMMENDED',
checkpointReviewer: 'NONE',
description: 'Sammlung und Verwaltung von Nachweisen fuer die Umsetzung der Controls.',
descriptionLong: 'Fuer jeden Control wird dokumentiert, wie und wann er umgesetzt wurde. Evidence (Nachweise) koennen Screenshots, Konfigurationsdateien, Audit-Logs, Schulungszertifikate oder Testprotokolle sein. Die Evidence-Sammlung ist essentiell fuer Audits und Zertifizierungen, da sie die tatsaechliche Umsetzung der Compliance-Massnahmen belegt. Jeder Nachweis wird mit Zeitstempel, Verantwortlichem und Gueltigkeitsdauer versehen.',
descriptionLong: 'Fuer jeden Control wird dokumentiert, wie und wann er umgesetzt wurde. Evidence (Nachweise) koennen Screenshots, Konfigurationsdateien, Audit-Logs, Schulungszertifikate oder Testprotokolle sein. Server-seitige Pagination (page, limit Query-Parameter) fuer grosse Nachweis-Sammlungen. Gueltigkeits-Tracking (valid_from, valid_until) mit Status: valid, expired, pending, failed. Verknuepfung mit Controls und Upload von Dateien als Nachweise. Essentiell fuer Audits und Zertifizierungen.',
legalBasis: 'Art. 5 Abs. 2 DSGVO (Rechenschaftspflicht)',
inputs: ['controls'],
outputs: ['evidence'],
@@ -304,7 +304,7 @@ export const SDK_FLOW_STEPS: SDKFlowStep[] = [
checkpointType: 'REQUIRED',
checkpointReviewer: 'DSB',
description: 'Bewertung aller Datenschutz- und Compliance-Risiken in einer Risikomatrix.',
descriptionLong: 'Die Risikomatrix bewertet jedes identifizierte Risiko nach Eintrittswahrscheinlichkeit und Schadenshoehe. Risiken werden aus den Controls und Modulen abgeleitet — z.B. "Datenverlust durch fehlende Verschluesselung" oder "Bussgeld durch unvollstaendiges VVT". Fuer jedes Risiko werden Massnahmen zur Risikominderung vorgeschlagen. Der DSB muss die Risikobewertung freigeben, da sie die Grundlage fuer die DSFA und weitere Schutzmassnahmen bildet.',
descriptionLong: 'Die 5x5 Risikomatrix bewertet jedes Risiko nach Eintrittswahrscheinlichkeit und Schadenshoehe. Inherent Risk vs. Residual Risk mit visuellem Vergleich. Status-Workflow: IDENTIFIED → ASSESSED → MITIGATED → ACCEPTED → CLOSED. Expandierbare Mitigations-Sektion pro Risiko mit verknuepften Controls (Name, Status, Effectiveness). Automatische Risiko-Level-Berechnung: Score = Likelihood × Impact (LOW <6, MEDIUM 6-11, HIGH 12-19, CRITICAL ≥20). Der DSB muss die Risikobewertung freigeben.',
legalBasis: 'Art. 35 DSGVO (Datenschutz-Folgenabschaetzung)',
inputs: ['controls', 'modules'],
outputs: ['risks'],
@@ -325,13 +325,13 @@ export const SDK_FLOW_STEPS: SDKFlowStep[] = [
checkpointType: 'REQUIRED',
checkpointReviewer: 'LEGAL',
description: 'Klassifizierung aller KI-Systeme nach EU AI Act Risikokategorien.',
descriptionLong: 'Jeder Use Case, der KI-Systeme einsetzt, wird nach dem EU AI Act klassifiziert: Unakzeptabel (verboten), Hochrisiko (strenge Auflagen), Begrenzt (Transparenzpflicht) oder Minimal (keine Auflagen). Fuer Hochrisiko-KI-Systeme werden spezifische Pflichten abgeleitet: Risikomanagementsystem, Datenqualitaet, technische Dokumentation, Transparenz, menschliche Aufsicht, Genauigkeit und Robustheit. Die Rechtsabteilung (LEGAL) muss die Klassifizierung freigeben.',
descriptionLong: 'KI-System-Registrierung mit vollstaendiger Backend-Persistenz (CRUD). Risikopyramide: Minimal → Begrenzt → Hoch → Verboten. KI-gestuetzte Risikobewertung mit Rule-Based-Fallback: Der Assess-Endpoint analysiert Zweck, Sektor und Beschreibung und leitet Klassifizierung + Pflichten automatisch ab. Fuer Hochrisiko-Systeme werden 8 AI Act Pflichten abgeleitet (Risikomanagement, Daten-Governance, Dokumentation, Transparenz, menschliche Aufsicht, Genauigkeit, Robustheit, Cybersicherheit). Filterung nach Klassifizierung, Status und Sektor. Die Rechtsabteilung (LEGAL) muss die Klassifizierung freigeben.',
legalBasis: 'EU AI Act Art. 6-9 (Risikokategorien)',
inputs: ['useCases', 'companyProfile'],
outputs: ['aiActClassification', 'obligations'],
prerequisiteSteps: ['risks'],
dbTables: [],
dbMode: 'none',
dbTables: ['compliance_ai_systems'],
dbMode: 'read/write',
ragCollections: ['bp_compliance_ce'],
ragPurpose: 'EU AI Act Regulierungstexte',
isOptional: false,
@@ -347,12 +347,12 @@ export const SDK_FLOW_STEPS: SDKFlowStep[] = [
checkpointType: 'RECOMMENDED',
checkpointReviewer: 'NONE',
description: 'Erstellung einer pruefbaren Checkliste fuer interne und externe Audits.',
descriptionLong: 'Aus den Requirements und Controls wird eine strukturierte Audit-Checkliste generiert. Jeder Checkpunkt verweist auf die zugrundeliegende Anforderung, den zugehoerigen Control und den erwarteten Nachweis. Die Checkliste kann fuer interne Self-Assessments oder als Vorbereitung auf externe Audits (z.B. ISO 27001, BSI Grundschutz) verwendet werden. Sie wird automatisch aktualisiert, wenn sich Requirements oder Controls aendern.',
descriptionLong: 'Aus den Requirements und Controls wird eine strukturierte Audit-Checkliste generiert. Session-Management: Draft → In Progress → Completed → Archived. Interaktiver Sign-Off-Workflow mit digitalem Signatur-Hash (SHA-256). PDF-Download in Deutsch oder Englisch. Session-History: Anzeige vergangener Audit-Sitzungen mit Status-Badges. JSON-Export der Checkliste. Die Checkliste kann fuer interne Self-Assessments oder als Vorbereitung auf externe Audits (ISO 27001, BSI Grundschutz) verwendet werden.',
inputs: ['requirements', 'controls'],
outputs: ['checklist'],
prerequisiteSteps: ['ai-act'],
dbTables: [],
dbMode: 'none',
dbTables: ['compliance_audit_sessions', 'compliance_audit_signoffs'],
dbMode: 'read/write',
ragCollections: [],
isOptional: false,
url: '/sdk/audit-checklist',
@@ -367,7 +367,7 @@ export const SDK_FLOW_STEPS: SDKFlowStep[] = [
checkpointType: 'REQUIRED',
checkpointReviewer: 'NONE',
description: 'Generierung eines vollstaendigen Audit-Reports mit Findings und Empfehlungen.',
descriptionLong: 'Der Audit Report fasst alle Ergebnisse der Analyse-Phase zusammen: Erfuellte und offene Anforderungen, Control-Wirksamkeit, Evidence-Status und Risikobewertung. Er wird als PDF generiert und enthaelt Findings (Feststellungen), Empfehlungen und einen Massnahmenplan. Der Report dient als Nachweis gegenueber Aufsichtsbehoerden und als Grundlage fuer die Dokumentations-Phase.',
descriptionLong: 'Der Audit Report fasst alle Ergebnisse der Analyse-Phase zusammen. Uebersicht aller Audit-Sitzungen mit Status-Badges. Detail-Seite pro Sitzung mit Session-Metadaten (Auditor, Zeitraum, Status), Fortschrittsbalken (konform/nicht konform/ausstehend), interaktiven Checklist-Items mit Sign-Off, Notizen-Bearbeitung pro Pruefpunkt und PDF-Download mit Sprachauswahl (DE/EN). Click-Navigation von der Uebersicht zur Detail-Seite. Dient als Nachweis gegenueber Aufsichtsbehoerden.',
inputs: ['checklist', 'controls', 'evidence'],
outputs: ['auditReport'],
prerequisiteSteps: ['audit-checklist'],

View File

@@ -390,7 +390,7 @@ export const STEP_EXPLANATIONS = {
'requirements': {
title: 'Anforderungen',
description: 'Pruefen und verwalten Sie die Compliance-Anforderungen',
explanation: 'Anforderungen sind konkrete Vorgaben aus den aktivierten Modulen. Jede Anforderung verweist auf einen Gesetzesartikel und muss durch Kontrollen abgedeckt werden.',
explanation: 'Anforderungen sind konkrete Vorgaben aus den aktivierten Modulen. Jede Anforderung verweist auf einen Gesetzesartikel und muss durch Kontrollen abgedeckt werden. Vollstaendige CRUD-Operationen mit Backend-Persistenz.',
tips: [
{
icon: 'warning' as const,
@@ -400,14 +400,19 @@ export const STEP_EXPLANATIONS = {
{
icon: 'success' as const,
title: 'Status-Workflow',
description: 'Anforderungen durchlaufen: Nicht begonnen → In Bearbeitung → Implementiert → Verifiziert.',
description: 'Anforderungen durchlaufen: Nicht begonnen → In Bearbeitung → Implementiert → Verifiziert. Bei Backend-Fehler erfolgt automatischer Rollback.',
},
{
icon: 'lightbulb' as const,
title: 'CRUD-Operationen',
description: 'Anforderungen koennen erstellt, bearbeitet und geloescht werden. Alle Aenderungen werden sofort im Backend persistiert.',
},
],
},
'controls': {
title: 'Kontrollen',
description: 'Definieren Sie technische und organisatorische Massnahmen',
explanation: 'Kontrollen (auch TOMs genannt) sind konkrete Massnahmen zur Erfuellung der Anforderungen. Sie koennen praeventiv, detektiv oder korrektiv sein.',
explanation: 'Kontrollen (auch TOMs genannt) sind konkrete Massnahmen zur Erfuellung der Anforderungen. Sie koennen praeventiv, detektiv oder korrektiv sein. Evidence-Linking zeigt verknuepfte Nachweise mit Gueltigkeits-Badge.',
tips: [
{
icon: 'lightbulb' as const,
@@ -419,29 +424,39 @@ export const STEP_EXPLANATIONS = {
title: 'Verantwortlichkeiten',
description: 'Weisen Sie jeder Kontrolle einen Verantwortlichen zu. Dies ist fuer Audits wichtig.',
},
{
icon: 'success' as const,
title: 'Evidence-Linking',
description: 'Verknuepfen Sie Nachweise direkt mit Controls. Gueltige, abgelaufene und ausstehende Nachweise werden mit Badges angezeigt.',
},
],
},
'evidence': {
title: 'Nachweise',
description: 'Dokumentieren Sie die Umsetzung mit Belegen',
explanation: 'Nachweise sind Dokumente, Screenshots oder Berichte, die belegen, dass Kontrollen implementiert sind. Sie sind essentiell fuer Audits und Zertifizierungen.',
explanation: 'Nachweise sind Dokumente, Screenshots oder Berichte, die belegen, dass Kontrollen implementiert sind. Server-seitige Pagination fuer grosse Nachweis-Sammlungen.',
tips: [
{
icon: 'warning' as const,
title: 'Gueltigkeit',
description: 'Achten Sie auf das Ablaufdatum von Nachweisen. Abgelaufene Zertifikate oder Berichte muessen erneuert werden.',
description: 'Achten Sie auf das Ablaufdatum von Nachweisen. Abgelaufene Zertifikate oder Berichte muessen erneuert werden. Status: valid, expired, pending, failed.',
},
{
icon: 'success' as const,
title: 'Verknuepfung',
description: 'Verknuepfen Sie Nachweise direkt mit den zugehoerigen Kontrollen fuer eine lueckenlose Dokumentation.',
},
{
icon: 'info' as const,
title: 'Pagination',
description: 'Bei vielen Nachweisen wird automatisch paginiert. Nutzen Sie die Seitennavigation am Ende der Liste.',
},
],
},
'audit-checklist': {
title: 'Audit-Checkliste',
description: 'Systematische Pruefung der Compliance-Konformitaet',
explanation: 'Die Audit-Checkliste wird automatisch aus den Anforderungen generiert. Gehen Sie jeden Punkt durch und dokumentieren Sie den Compliance-Status.',
explanation: 'Die Audit-Checkliste wird automatisch aus den Anforderungen generiert. Session-Management mit Sign-Off-Workflow und PDF-Export.',
tips: [
{
icon: 'lightbulb' as const,
@@ -450,42 +465,57 @@ export const STEP_EXPLANATIONS = {
},
{
icon: 'info' as const,
title: 'Notizen',
description: 'Nutzen Sie das Notizfeld, um Massnahmen oder Abweichungen zu dokumentieren.',
title: 'Sign-Off & PDF',
description: 'Zeichnen Sie Pruefpunkte mit digitalem Hash (SHA-256) ab. Exportieren Sie den Report als PDF in Deutsch oder Englisch.',
},
{
icon: 'success' as const,
title: 'Session-History',
description: 'Vergangene Audit-Sitzungen werden mit Status-Badges angezeigt: Draft, In Progress, Completed, Archived.',
},
],
},
'risks': {
title: 'Risiko-Matrix',
description: 'Bewerten und priorisieren Sie Ihre Compliance-Risiken',
explanation: 'Die 5x5 Risiko-Matrix visualisiert Ihre Risiken nach Wahrscheinlichkeit und Auswirkung. Risiken mit hohem Score erfordern Mitigationsmassnahmen.',
explanation: 'Die 5x5 Risiko-Matrix visualisiert Ihre Risiken nach Wahrscheinlichkeit und Auswirkung. Inherent Risk vs. Residual Risk mit visuellem Vergleich.',
tips: [
{
icon: 'warning' as const,
title: 'Kritische Risiken',
description: 'Risiken im roten Bereich (Score >= 15) muessen priorisiert behandelt werden.',
description: 'Risiken mit Score >= 20 sind CRITICAL (rot), >= 12 HIGH (orange), >= 6 MEDIUM (gelb), < 6 LOW (gruen).',
},
{
icon: 'success' as const,
title: 'Mitigation',
description: 'Definieren Sie fuer jedes Risiko Mitigationsmassnahmen. Abgeschlossene Massnahmen reduzieren den Residual-Risk.',
description: 'Verknuepfen Sie Controls als Mitigationsmassnahmen. Der Residual-Risk wird automatisch anhand verknuepfter Controls berechnet.',
},
{
icon: 'info' as const,
title: 'Status-Workflow',
description: 'Risiken durchlaufen: Identifiziert → Bewertet → Mitigiert → Akzeptiert → Geschlossen.',
},
],
},
'ai-act': {
title: 'AI Act Klassifizierung',
description: 'Bestimmen Sie die Risikostufe Ihrer KI-Systeme',
explanation: 'Der EU AI Act klassifiziert KI-Systeme in Risikostufen: Minimal, Begrenzt, Hoch und Unzulaessig. Die Einstufung bestimmt die regulatorischen Anforderungen.',
description: 'Registrieren und klassifizieren Sie Ihre KI-Systeme',
explanation: 'Der EU AI Act klassifiziert KI-Systeme in Risikostufen: Minimal, Begrenzt, Hoch und Verboten. KI-Systeme werden im Backend persistent gespeichert und koennen automatisch bewertet werden.',
tips: [
{
icon: 'warning' as const,
title: 'Hochrisiko-Systeme',
description: 'Hochrisiko-KI-Systeme unterliegen strengen Anforderungen bezueglich Transparenz, Dokumentation und menschlicher Aufsicht.',
description: 'Hochrisiko-KI erfordert 8 Pflichten: Risikomanagement, Daten-Governance, Dokumentation, Transparenz, menschliche Aufsicht, Genauigkeit, Robustheit, Cybersicherheit.',
},
{
icon: 'lightbulb' as const,
title: 'Automatische Bewertung',
description: 'Nutzen Sie die Assess-Funktion: Sie analysiert Zweck und Sektor und leitet die Risikokategorie + Pflichten automatisch ab.',
},
{
icon: 'info' as const,
title: 'Deadline',
description: 'Die AI Act Anforderungen treten schrittweise in Kraft. Beginnen Sie fruehzeitig mit der Compliance.',
title: 'CRUD-Operationen',
description: 'KI-Systeme koennen registriert, bearbeitet, bewertet und geloescht werden. Alle Daten werden backend-persistent gespeichert.',
},
],
},
@@ -716,7 +746,7 @@ export const STEP_EXPLANATIONS = {
'audit-report': {
title: 'Audit Report',
description: 'Erstellen und verwalten Sie Audit-Sitzungen',
explanation: 'Im Audit Report erstellen Sie formelle Audit-Sitzungen mit Pruefer-Informationen, fuehren die Pruefung durch und generieren PDF-Reports. Jede Sitzung dokumentiert den Compliance-Stand zu einem bestimmten Zeitpunkt.',
explanation: 'Im Audit Report erstellen Sie formelle Audit-Sitzungen. Uebersicht mit Status-Badges, Detail-Seite pro Sitzung mit Fortschrittsbalken und interaktiven Checklist-Items.',
tips: [
{
icon: 'lightbulb' as const,
@@ -725,8 +755,13 @@ export const STEP_EXPLANATIONS = {
},
{
icon: 'success' as const,
title: 'Detail-Ansicht',
description: 'Klicken Sie auf eine Sitzung fuer die Detail-Seite: Metadaten, Fortschrittsbalken, Checklist-Items mit Sign-Off und Notizen.',
},
{
icon: 'info' as const,
title: 'PDF-Export',
description: 'Generieren Sie PDF-Reports in Deutsch oder Englisch fuer externe Pruefer.',
description: 'Generieren Sie PDF-Reports in Deutsch oder Englisch fuer externe Pruefer und Aufsichtsbehoerden.',
},
],
},

View File

@@ -0,0 +1,519 @@
"""
Unit tests for Compliance Routes — Requirements CRUD + AI Systems CRUD.
Tests the new POST/DELETE requirements endpoints and AI system endpoints
added during the Analyse-Module → 100% sprint.
Run with: pytest compliance/tests/test_compliance_routes.py -v
"""
import pytest
from datetime import datetime
from unittest.mock import MagicMock
from uuid import uuid4
from compliance.db.models import (
RequirementDB, RegulationDB,
AISystemDB, AIClassificationEnum, AISystemStatusEnum,
RiskDB, RiskLevelEnum,
EvidenceDB, EvidenceStatusEnum,
)
from compliance.db.repository import RequirementRepository
# ============================================================================
# Test Fixtures
# ============================================================================
@pytest.fixture
def mock_db():
"""Create a mock database session."""
db = MagicMock()
db.query.return_value.filter.return_value.first.return_value = None
return db
@pytest.fixture
def sample_regulation():
"""Create a sample regulation."""
return RegulationDB(
id=str(uuid4()),
code="DSGVO",
name="Datenschutz-Grundverordnung",
full_name="Verordnung (EU) 2016/679",
is_active=True,
created_at=datetime.utcnow(),
updated_at=datetime.utcnow(),
)
@pytest.fixture
def sample_requirement(sample_regulation):
"""Create a sample requirement."""
return RequirementDB(
id=str(uuid4()),
regulation_id=sample_regulation.id,
article="Art. 6",
title="Rechtmaessigkeit der Verarbeitung",
description="Personenbezogene Daten duerfen nur verarbeitet werden, wenn eine Rechtsgrundlage vorliegt.",
priority=4,
is_applicable=True,
created_at=datetime.utcnow(),
updated_at=datetime.utcnow(),
)
@pytest.fixture
def sample_ai_system():
"""Create a sample AI system."""
return AISystemDB(
id=str(uuid4()),
name="Dokumenten-Scanner",
description="OCR-basiertes System zur Texterkennung",
purpose="Texterkennung in eingescannten Dokumenten",
sector="Verwaltung",
classification=AIClassificationEnum.UNCLASSIFIED,
status=AISystemStatusEnum.DRAFT,
obligations=[],
created_at=datetime.utcnow(),
updated_at=datetime.utcnow(),
)
# ============================================================================
# Test: Requirement Creation (POST /requirements)
# ============================================================================
class TestCreateRequirement:
"""Tests for POST /compliance/requirements endpoint."""
def test_create_requirement_valid_data(self, sample_regulation):
"""Creating a requirement with valid data should set all fields."""
req = RequirementDB(
id=str(uuid4()),
regulation_id=sample_regulation.id,
article="Art. 32",
title="Sicherheit der Verarbeitung",
description="Geeignete technische Massnahmen",
priority=3,
is_applicable=True,
created_at=datetime.utcnow(),
updated_at=datetime.utcnow(),
)
assert req.regulation_id == sample_regulation.id
assert req.article == "Art. 32"
assert req.title == "Sicherheit der Verarbeitung"
assert req.priority == 3
assert req.is_applicable is True
def test_create_requirement_default_priority(self, sample_regulation):
"""Creating a requirement without priority should default to 2."""
req = RequirementDB(
id=str(uuid4()),
regulation_id=sample_regulation.id,
article="Art. 5",
title="Grundsaetze",
)
# Priority defaults handled in repository.create()
assert req.article == "Art. 5"
def test_create_requirement_requires_regulation_id(self):
"""A requirement must reference a regulation_id."""
req = RequirementDB(
id=str(uuid4()),
regulation_id="non-existent-id",
article="Art. 1",
title="Test",
)
assert req.regulation_id == "non-existent-id"
def test_create_requirement_with_optional_fields(self, sample_regulation):
"""Creating a requirement with all optional fields should work."""
req = RequirementDB(
id=str(uuid4()),
regulation_id=sample_regulation.id,
article="Art. 25",
paragraph="Abs. 1",
title="Datenschutz durch Technikgestaltung",
description="Privacy by Design",
requirement_text="Der Verantwortliche trifft...",
breakpilot_interpretation="Implementierung von PbD",
is_applicable=True,
applicability_reason="Relevant fuer alle Verarbeitungen",
priority=4,
)
assert req.paragraph == "Abs. 1"
assert req.requirement_text is not None
assert req.breakpilot_interpretation is not None
assert req.applicability_reason is not None
# ============================================================================
# Test: Requirement Deletion (DELETE /requirements/{id})
# ============================================================================
class TestDeleteRequirement:
"""Tests for DELETE /compliance/requirements/{requirement_id} endpoint."""
def test_delete_existing_requirement_returns_true(self, mock_db, sample_requirement):
"""Deleting an existing requirement should return True."""
mock_db.query.return_value.filter.return_value.first.return_value = sample_requirement
repo = RequirementRepository(mock_db)
result = repo.delete(sample_requirement.id)
assert result is True
mock_db.delete.assert_called_once_with(sample_requirement)
mock_db.commit.assert_called_once()
def test_delete_nonexistent_requirement_returns_false(self, mock_db):
"""Deleting a non-existent requirement should return False."""
mock_db.query.return_value.filter.return_value.first.return_value = None
repo = RequirementRepository(mock_db)
result = repo.delete("nonexistent-id")
assert result is False
mock_db.delete.assert_not_called()
# ============================================================================
# Test: Requirement Update with Rollback logic
# ============================================================================
class TestUpdateRequirement:
"""Tests for PUT /compliance/requirements/{requirement_id} endpoint."""
def test_update_implementation_status(self, sample_requirement):
"""Updating implementation_status should change the field."""
sample_requirement.implementation_status = "implemented"
assert sample_requirement.implementation_status == "implemented"
def test_update_audit_status_sets_audit_date(self, sample_requirement):
"""Updating audit_status should set last_audit_date."""
sample_requirement.audit_status = "compliant"
sample_requirement.last_audit_date = datetime.utcnow()
assert sample_requirement.audit_status == "compliant"
assert sample_requirement.last_audit_date is not None
def test_update_allowed_fields_only(self, sample_requirement):
"""Only allowed fields should be updated."""
allowed_fields = [
'implementation_status', 'implementation_details', 'code_references',
'documentation_links', 'evidence_description', 'evidence_artifacts',
'auditor_notes', 'audit_status', 'is_applicable', 'applicability_reason',
'breakpilot_interpretation'
]
# Verify all allowed fields exist on the model
for field in allowed_fields:
assert hasattr(sample_requirement, field)
# ============================================================================
# Test: AI System Model
# ============================================================================
class TestAISystemModel:
"""Tests for AISystemDB model and enums."""
def test_ai_classification_enum_values(self):
"""AI classification enum should have all 5 risk levels."""
assert AIClassificationEnum.PROHIBITED.value == "prohibited"
assert AIClassificationEnum.HIGH_RISK.value == "high-risk"
assert AIClassificationEnum.LIMITED_RISK.value == "limited-risk"
assert AIClassificationEnum.MINIMAL_RISK.value == "minimal-risk"
assert AIClassificationEnum.UNCLASSIFIED.value == "unclassified"
def test_ai_system_status_enum_values(self):
"""AI system status enum should have all 4 statuses."""
assert AISystemStatusEnum.DRAFT.value == "draft"
assert AISystemStatusEnum.CLASSIFIED.value == "classified"
assert AISystemStatusEnum.COMPLIANT.value == "compliant"
assert AISystemStatusEnum.NON_COMPLIANT.value == "non-compliant"
def test_invalid_classification_raises_error(self):
"""Invalid classification should raise ValueError."""
with pytest.raises(ValueError):
AIClassificationEnum("super-risk")
def test_invalid_status_raises_error(self):
"""Invalid status should raise ValueError."""
with pytest.raises(ValueError):
AISystemStatusEnum("pending")
def test_ai_system_creation(self, sample_ai_system):
"""Creating an AI system should set all fields correctly."""
assert sample_ai_system.name == "Dokumenten-Scanner"
assert sample_ai_system.classification == AIClassificationEnum.UNCLASSIFIED
assert sample_ai_system.status == AISystemStatusEnum.DRAFT
assert sample_ai_system.sector == "Verwaltung"
def test_ai_system_repr(self, sample_ai_system):
"""AI system repr should show name and classification."""
repr_str = repr(sample_ai_system)
assert "Dokumenten-Scanner" in repr_str
assert "unclassified" in repr_str
# ============================================================================
# Test: AI System CRUD Operations
# ============================================================================
class TestAISystemCRUD:
"""Tests for AI system CRUD operations."""
def test_create_ai_system_with_defaults(self):
"""Creating an AI system with minimal data should use defaults."""
system = AISystemDB(
id=str(uuid4()),
name="Test System",
)
assert system.name == "Test System"
assert system.description is None
assert system.purpose is None
def test_update_ai_system_classification(self, sample_ai_system):
"""Updating classification should change the enum value."""
sample_ai_system.classification = AIClassificationEnum.HIGH_RISK
assert sample_ai_system.classification == AIClassificationEnum.HIGH_RISK
def test_update_ai_system_with_assessment(self, sample_ai_system):
"""After assessment, system should have assessment_date and result."""
sample_ai_system.assessment_date = datetime.utcnow()
sample_ai_system.assessment_result = {
"overall_risk": "high",
"risk_factors": [{"factor": "education sector", "severity": "high"}],
"recommendations": ["Implement Art. 9 measures"],
}
sample_ai_system.classification = AIClassificationEnum.HIGH_RISK
sample_ai_system.status = AISystemStatusEnum.CLASSIFIED
sample_ai_system.obligations = [
"Risikomanagementsystem (Art. 9)",
"Transparenz (Art. 13)",
]
assert sample_ai_system.assessment_date is not None
assert sample_ai_system.assessment_result["overall_risk"] == "high"
assert len(sample_ai_system.obligations) == 2
assert sample_ai_system.status == AISystemStatusEnum.CLASSIFIED
def test_delete_ai_system(self, mock_db, sample_ai_system):
"""Deleting an AI system should call db.delete and commit."""
mock_db.query.return_value.filter.return_value.first.return_value = sample_ai_system
system = mock_db.query(AISystemDB).filter(AISystemDB.id == sample_ai_system.id).first()
assert system is not None
mock_db.delete(system)
mock_db.commit()
mock_db.delete.assert_called_once_with(sample_ai_system)
# ============================================================================
# Test: AI Act Rule-Based Assessment
# ============================================================================
class TestAIActRuleBasedAssessment:
"""Tests for the rule-based AI Act classification fallback."""
def test_prohibited_keywords_detected(self):
"""Systems with prohibited keywords should score >= 10."""
from compliance.api.ai_routes import _rule_based_assessment
system = MagicMock()
system.description = "Social scoring system for citizens"
system.purpose = "Social scoring"
system.sector = "Government"
result = _rule_based_assessment(system)
assert result["risk_score"] >= 10
assert result["overall_risk"] == "critical"
def test_high_risk_sector_detected(self):
"""Systems in high-risk sectors should score >= 5."""
from compliance.api.ai_routes import _rule_based_assessment
system = MagicMock()
system.description = "Automated grading system"
system.purpose = "Education assessment"
system.sector = "education"
result = _rule_based_assessment(system)
assert result["risk_score"] >= 5
assert len(result["risk_factors"]) > 0
def test_minimal_risk_system(self):
"""Systems without risk indicators should have low risk."""
from compliance.api.ai_routes import _rule_based_assessment
system = MagicMock()
system.description = "Simple spell checker"
system.purpose = "Text correction"
system.sector = "Office"
result = _rule_based_assessment(system)
assert result["risk_score"] < 3
assert result["overall_risk"] == "low"
def test_derive_classification(self):
"""Classification should be derived from risk score."""
from compliance.api.ai_routes import _derive_classification
assert _derive_classification({"risk_score": 15, "overall_risk": "critical"}) == "prohibited"
assert _derive_classification({"risk_score": 7, "overall_risk": "high"}) == "high-risk"
assert _derive_classification({"risk_score": 3, "overall_risk": "medium"}) == "limited-risk"
assert _derive_classification({"risk_score": 0, "overall_risk": "low"}) == "minimal-risk"
def test_derive_obligations_high_risk(self):
"""High-risk classification should have 8 obligations."""
from compliance.api.ai_routes import _derive_obligations
obligations = _derive_obligations("high-risk")
assert len(obligations) == 8
assert any("Art. 9" in o for o in obligations)
assert any("Art. 13" in o for o in obligations)
def test_derive_obligations_minimal_risk(self):
"""Minimal-risk classification should have 1 obligation."""
from compliance.api.ai_routes import _derive_obligations
obligations = _derive_obligations("minimal-risk")
assert len(obligations) == 1
assert "Art. 69" in obligations[0]
def test_derive_obligations_prohibited(self):
"""Prohibited classification should have 1 obligation about ban."""
from compliance.api.ai_routes import _derive_obligations
obligations = _derive_obligations("prohibited")
assert len(obligations) == 1
assert "verboten" in obligations[0].lower()
# ============================================================================
# Test: Evidence Pagination
# ============================================================================
class TestEvidencePagination:
"""Tests for evidence pagination logic."""
def test_pagination_calculates_offset(self):
"""Pagination should calculate correct offset."""
page = 3
limit = 20
offset = (page - 1) * limit
assert offset == 40
def test_pagination_first_page_no_offset(self):
"""First page should have offset 0."""
page = 1
limit = 20
offset = (page - 1) * limit
assert offset == 0
def test_total_reflects_full_count(self):
"""Total should reflect all items, not just the page."""
all_items = list(range(100))
page = 2
limit = 20
total = len(all_items)
page_items = all_items[(page - 1) * limit : page * limit]
assert total == 100
assert len(page_items) == 20
assert page_items[0] == 20
# ============================================================================
# Test: Risk Status Workflow
# ============================================================================
class TestRiskStatusWorkflow:
"""Tests for risk status transitions."""
def test_risk_status_values(self):
"""Risk status should support all workflow states."""
valid_statuses = ["identified", "assessed", "mitigated", "accepted", "closed"]
for status in valid_statuses:
risk = RiskDB(
id=str(uuid4()),
risk_id="RISK-001",
title="Test Risk",
category="data_breach",
likelihood=3,
impact=4,
inherent_risk=RiskLevelEnum.HIGH,
status=status,
)
assert risk.status == status
def test_residual_risk_after_mitigation(self):
"""After mitigation, residual risk should be lower."""
risk = RiskDB(
id=str(uuid4()),
risk_id="RISK-002",
title="Data Breach Risk",
category="data_breach",
likelihood=4,
impact=5,
inherent_risk=RiskLevelEnum.CRITICAL,
residual_likelihood=2,
residual_impact=3,
residual_risk=RiskLevelEnum.MEDIUM,
)
inherent_score = risk.likelihood * risk.impact
residual_score = risk.residual_likelihood * risk.residual_impact
assert residual_score < inherent_score
assert risk.inherent_risk == RiskLevelEnum.CRITICAL
assert risk.residual_risk == RiskLevelEnum.MEDIUM
# ============================================================================
# Test: Risk Level Calculation
# ============================================================================
class TestRiskLevelCalculation:
"""Tests for risk level calculation from likelihood x impact."""
def test_critical_risk_level(self):
"""Score >= 20 should be CRITICAL."""
assert RiskDB.calculate_risk_level(5, 4) == RiskLevelEnum.CRITICAL
assert RiskDB.calculate_risk_level(4, 5) == RiskLevelEnum.CRITICAL
assert RiskDB.calculate_risk_level(5, 5) == RiskLevelEnum.CRITICAL
def test_high_risk_level(self):
"""Score >= 12 and < 20 should be HIGH."""
assert RiskDB.calculate_risk_level(3, 4) == RiskLevelEnum.HIGH
assert RiskDB.calculate_risk_level(4, 4) == RiskLevelEnum.HIGH
def test_medium_risk_level(self):
"""Score >= 6 and < 12 should be MEDIUM."""
assert RiskDB.calculate_risk_level(2, 3) == RiskLevelEnum.MEDIUM
assert RiskDB.calculate_risk_level(3, 3) == RiskLevelEnum.MEDIUM
def test_low_risk_level(self):
"""Score < 6 should be LOW."""
assert RiskDB.calculate_risk_level(1, 1) == RiskLevelEnum.LOW
assert RiskDB.calculate_risk_level(1, 5) == RiskLevelEnum.LOW
assert RiskDB.calculate_risk_level(2, 2) == RiskLevelEnum.LOW

View File

@@ -38,7 +38,13 @@ Module die Compliance-Kunden im SDK sehen und nutzen:
| **DSFA** | Datenschutz-Folgenabschaetzung | /sdk/dsfa |
| **VVT** | Verzeichnis von Verarbeitungstaetigkeiten | /sdk/vvt |
| **Loeschfristen** | Loeschfristen-Verwaltung | /sdk/loeschfristen |
| **Requirements** | Compliance-Anforderungen (CRUD + RAG) | /sdk/requirements |
| **Controls** | Technische/Organisatorische Kontrollen | /sdk/controls |
| **Evidence** | Compliance-Nachweise mit Gueltigkeit | /sdk/evidence |
| **Risk Matrix** | 5x5 Risikomatrix (Inherent/Residual) | /sdk/risks |
| **AI Act Compliance** | KI-Verordnung Konformitaet | /sdk/ai-act |
| **Audit Checklist** | Audit-Checkliste mit Sign-Off | /sdk/audit-checklist |
| **Audit Report** | Audit-Berichte mit PDF-Export | /sdk/audit-report |
| **Consent Management** | Einwilligungs-Verwaltung | /sdk/einwilligungen |
| **DSR** | Betroffenenrechte (Art. 15-21 DSGVO) | /sdk/dsr |
| **Academy** | Datenschutz-Schulungen mit PDF-Zertifikaten | /sdk/academy |
@@ -77,6 +83,13 @@ Interne Tools fuer die BreakPilot-Plattformverwaltung:
| URL | Modul |
|-----|-------|
| https://macmini:3007/sdk | SDK Uebersicht |
| https://macmini:3007/sdk/requirements | Requirements |
| https://macmini:3007/sdk/controls | Controls |
| https://macmini:3007/sdk/evidence | Evidence |
| https://macmini:3007/sdk/risks | Risk Matrix |
| https://macmini:3007/sdk/ai-act | AI Act |
| https://macmini:3007/sdk/audit-checklist | Audit Checklist |
| https://macmini:3007/sdk/audit-report | Audit Report |
| https://macmini:3007/sdk/tom | TOM |
| https://macmini:3007/sdk/dsfa | DSFA |
| https://macmini:3007/sdk/vvt | VVT |
@@ -128,6 +141,7 @@ Compliance-Services nutzen folgende Core-Infrastruktur:
- [SBOM](services/ai-compliance-sdk/SBOM.md)
- [Document Crawler](services/document-crawler/index.md)
- SDK-Module:
- [Analyse-Module (Paket 2)](services/sdk-modules/analyse-module.md) — Requirements, Controls, Evidence, Risk Matrix, AI Act, Audit Checklist, Audit Report
- [Academy](services/sdk-modules/academy.md)
- [Whistleblower](services/sdk-modules/whistleblower.md)
- [Incidents](services/sdk-modules/incidents.md)

View File

@@ -0,0 +1,258 @@
# Analyse-Module (Paket 2)
Die Analyse-Phase umfasst 7 Module, die den Compliance-Status systematisch erfassen und bewerten. Alle Module sind vollstaendig backend-persistent und bieten CRUD-Operationen ueber die REST-API.
---
## Uebersicht
| Modul | Checkpoint | Reviewer | Status |
|-------|-----------|----------|--------|
| [Requirements](#requirements) | CP-REQ (REQUIRED) | NONE | 100% |
| [Controls](#controls) | CP-CTRL (REQUIRED) | DSB | 100% |
| [Evidence](#evidence) | CP-EVI (RECOMMENDED) | NONE | 100% |
| [Risk Matrix](#risk-matrix) | CP-RISK (REQUIRED) | DSB | 100% |
| [AI Act Klassifizierung](#ai-act) | CP-AI (REQUIRED) | LEGAL | 100% |
| [Audit Checklist](#audit-checklist) | CP-CHK (RECOMMENDED) | NONE | 100% |
| [Audit Report](#audit-report) | CP-AREP (REQUIRED) | NONE | 100% |
---
## Requirements
**Route:** `/sdk/requirements` | **Rechtsgrundlage:** Art. 5, 24, 25 DSGVO
### Funktionen
- Automatische Ableitung von Anforderungen aus aktivierten Modulen
- Backend-persistente CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Loeschen)
- Status-Workflow: `NOT_STARTED``IN_PROGRESS``IMPLEMENTED``VERIFIED`
- Fehlerbehandlung mit automatischem Rollback bei Backend-Fehler
- KI-gestuetzte Interpretation mit RAG-Rechtskontext
- Filterung und Volltextsuche
- Paginierung fuer grosse Datensaetze (500+ Anforderungen)
### API-Endpoints
| Methode | Pfad | Beschreibung |
|---------|------|--------------|
| `GET` | `/api/compliance/requirements` | Paginierte Liste (page, page_size, regulation_code, status, search) |
| `GET` | `/api/compliance/requirements/{id}` | Detail mit optionalem `?include_legal_context=true` |
| `POST` | `/api/compliance/requirements` | Neue Anforderung erstellen (regulation_id, article, title, priority) |
| `PUT` | `/api/compliance/requirements/{id}` | Status/Details aktualisieren |
| `DELETE` | `/api/compliance/requirements/{id}` | Anforderung loeschen |
### DB-Tabellen
- `compliance_requirements` (read/write)
### RAG-Collections
- `bp_compliance_recht` — Deutsche Gesetze
- `bp_compliance_ce` — EU-Verordnungen
---
## Controls
**Route:** `/sdk/controls` | **Rechtsgrundlage:** Art. 32 DSGVO
### Funktionen
- Definition technischer und organisatorischer Kontrollmassnahmen
- Status-Tracking: pass, partial, fail, n/a, planned
- Evidence-Linking: Verknuepfung mit Nachweisen inkl. Gueltigkeits-Badge
- Navigation zur Evidence-Seite mit vorausgewaehltem Control
- Domänen-basierte Gruppierung (gov, priv, iam, crypto, sdlc, ops, ai, cra, aud)
- Review-Workflow mit Verantwortlichem und naechstem Review-Datum
### API-Endpoints
| Methode | Pfad | Beschreibung |
|---------|------|--------------|
| `GET` | `/api/compliance/controls` | Alle Controls (domain, status, search Filter) |
| `GET` | `/api/compliance/controls/paginated` | Paginierte Liste |
| `GET` | `/api/compliance/controls/{control_id}` | Detail mit Evidence-Count |
| `PUT` | `/api/compliance/controls/{control_id}` | Control aktualisieren |
| `PUT` | `/api/compliance/controls/{control_id}/review` | Review durchfuehren |
### DB-Tabellen
- `compliance_controls` (read/write)
---
## Evidence
**Route:** `/sdk/evidence` | **Rechtsgrundlage:** Art. 5 Abs. 2 DSGVO
### Funktionen
- Sammlung und Verwaltung von Compliance-Nachweisen
- Server-seitige Pagination (`page`, `limit` Query-Parameter)
- Gueltigkeits-Tracking (valid_from, valid_until)
- Status: valid, expired, pending, failed
- Verknuepfung mit Controls
- Upload von Dateien als Nachweise
### API-Endpoints
| Methode | Pfad | Beschreibung |
|---------|------|--------------|
| `GET` | `/api/compliance/evidence` | Paginierte Liste (`page`, `limit`, `control_id` Filter) |
| `POST` | `/api/compliance/evidence` | Neuen Nachweis erstellen |
| `PUT` | `/api/compliance/evidence/{id}` | Nachweis aktualisieren |
### DB-Tabellen
- `compliance_evidence` (write)
---
## Risk Matrix
**Route:** `/sdk/risks` | **Rechtsgrundlage:** Art. 35 DSGVO
### Funktionen
- 5x5 Risikomatrix (Wahrscheinlichkeit x Auswirkung)
- Inherent Risk vs. Residual Risk mit visuellem Vergleich
- Status-Workflow: `IDENTIFIED``ASSESSED``MITIGATED``ACCEPTED``CLOSED`
- Expandierbare Mitigations-Sektion pro Risiko
- Mitigating Controls mit Status-Badge und Beschreibung
- Automatische Risiko-Level-Berechnung (LOW/MEDIUM/HIGH/CRITICAL)
- Backend-Persistenz fuer Status-Aenderungen
### API-Endpoints
| Methode | Pfad | Beschreibung |
|---------|------|--------------|
| `GET` | `/api/compliance/risks` | Alle Risiken |
| `POST` | `/api/compliance/risks` | Neues Risiko erstellen |
| `PUT` | `/api/compliance/risks/{risk_id}` | Risiko aktualisieren (inkl. Status) |
### Risiko-Berechnung
```
Score = Likelihood × Impact
Score >= 20 → CRITICAL (rot)
Score >= 12 → HIGH (orange)
Score >= 6 → MEDIUM (gelb)
Score < 6 → LOW (gruen)
```
### DB-Tabellen
- `compliance_risks` (write)
---
## AI Act
**Route:** `/sdk/ai-act` | **Rechtsgrundlage:** EU AI Act Art. 6-9
### Funktionen
- KI-System-Registrierung mit vollstaendiger Backend-Persistenz (CRUD)
- Risikopyramide (Minimal → Begrenzt → Hoch → Verboten)
- KI-gestuetzte Risikobewertung mit Rule-Based-Fallback
- Automatische Ableitung von AI Act Pflichten je Risikokategorie
- Filterung nach Klassifizierung, Status und Sektor
- Neues DB-Modell: `compliance_ai_systems`
### API-Endpoints
| Methode | Pfad | Beschreibung |
|---------|------|--------------|
| `GET` | `/api/compliance/ai/systems` | Alle KI-Systeme (classification, status, sector Filter) |
| `POST` | `/api/compliance/ai/systems` | Neues KI-System registrieren |
| `GET` | `/api/compliance/ai/systems/{id}` | Detail |
| `PUT` | `/api/compliance/ai/systems/{id}` | KI-System aktualisieren |
| `DELETE` | `/api/compliance/ai/systems/{id}` | KI-System loeschen |
| `POST` | `/api/compliance/ai/systems/{id}/assess` | AI Act Risikobewertung durchfuehren |
### Risikokategorien & Pflichten
| Kategorie | AI Act Artikel | Pflichten |
|-----------|---------------|-----------|
| **Verboten** | Art. 5 | Einsatz verboten |
| **Hochrisiko** | Art. 6-15 | 8 Pflichten (Risikomanagement, Daten-Governance, Dokumentation, ...) |
| **Begrenztes Risiko** | Art. 52 | Transparenzpflicht, Kennzeichnung |
| **Minimales Risiko** | Art. 69 | Freiwillige Verhaltenskodizes |
### DB-Tabellen
- `compliance_ai_systems` (read/write)
---
## Audit Checklist
**Route:** `/sdk/audit-checklist` | **Rechtsgrundlage:** Art. 5 Abs. 2 DSGVO
### Funktionen
- Automatische Generierung der Checkliste aus Requirements und Controls
- Session-Management: Draft → In Progress → Completed → Archived
- Interaktiver Sign-Off-Workflow mit digitalem Signatur-Hash (SHA-256)
- PDF-Download in Deutsch oder Englisch
- Session-History: Anzeige vergangener Audit-Sitzungen
- JSON-Export der Checkliste
### API-Endpoints
| Methode | Pfad | Beschreibung |
|---------|------|--------------|
| `GET` | `/api/compliance/audit/sessions` | Alle Audit-Sitzungen |
| `POST` | `/api/compliance/audit/sessions` | Neue Sitzung erstellen |
| `GET` | `/api/compliance/audit/checklist/{sessionId}` | Checkliste einer Sitzung |
| `PUT` | `/api/compliance/audit/checklist/{sessionId}/items/{reqId}/sign-off` | Pruefpunkt abzeichnen |
| `GET` | `/api/compliance/audit/sessions/{sessionId}/report/pdf` | PDF-Report generieren |
### DB-Tabellen
- `compliance_audit_sessions` (read/write)
- `compliance_audit_signoffs` (write)
---
## Audit Report
**Route:** `/sdk/audit-report` | **Rechtsgrundlage:** Art. 5 Abs. 2 DSGVO
### Funktionen
- Uebersicht aller Audit-Sitzungen mit Status-Badges
- Detail-Seite pro Sitzung (`/sdk/audit-report/{sessionId}`)
- Session-Metadaten (Auditor, Zeitraum, Status)
- Fortschrittsbalken (konform/nicht konform/ausstehend)
- Interaktive Checklist-Items mit Sign-Off
- Notizen-Bearbeitung pro Pruefpunkt
- PDF-Download mit Sprachauswahl (DE/EN)
- Click-Navigation von der Uebersicht zur Detail-Seite
- Generiert: Audit-Report (PDF)
### API-Endpoints
Nutzt dieselben Backend-Endpoints wie Audit Checklist (s.o.).
### DB-Tabellen
- `compliance_audit_sessions` (write)
---
## Datenfluss
```mermaid
graph LR
A[Requirements] --> B[Controls]
B --> C[Evidence]
C --> D[Risk Matrix]
D --> E[AI Act]
E --> F[Audit Checklist]
F --> G[Audit Report]
```
Jedes Modul baut auf dem vorherigen auf. Die Reihenfolge ist durch Prerequisite-Steps im SDK-Flow erzwungen.

View File

@@ -65,6 +65,7 @@ nav:
- Document Crawler:
- Uebersicht: services/document-crawler/index.md
- SDK Module:
- Analyse-Module (Paket 2): services/sdk-modules/analyse-module.md
- Academy: services/sdk-modules/academy.md
- Whistleblower: services/sdk-modules/whistleblower.md
- Incidents: services/sdk-modules/incidents.md