# Change-Request System (CP-CR)

Das Change-Request-System ist die zentrale Inbox fuer alle Dokumentenaenderungen im Compliance SDK. Statt Dokumente direkt zu erstellen oder zu aendern, werden alle Aenderungen als Change-Requests vorgeschlagen und muessen explizit angenommen oder abgelehnt werden.

## Architektur

```mermaid
graph TD
    A[Trigger-Event] --> B[Change-Request Engine]
    B --> C[CR-Inbox pending]
    C --> D{Entscheidung}
    D -->|Accept| E[Version erstellen]
    D -->|Edit & Accept| F[Bearbeiten + Version]
    D -->|Reject| G[Ablehnen + Begruendung]
    E --> H[Audit-Log]
    F --> H
    G --> H
```

## API-Endpoints

| Methode | Pfad | Beschreibung |
|---------|------|--------------|
| `GET` | `/change-requests` | Liste (Filter: status, doc_type, priority) |
| `GET` | `/change-requests/stats` | Statistik: pending, critical, accepted, rejected |
| `GET` | `/change-requests/{id}` | Detail mit Audit-Log |
| `POST` | `/change-requests` | Manuell erstellen |
| `POST` | `/change-requests/{id}/accept` | Aenderung uebernehmen, Version erstellen |
| `POST` | `/change-requests/{id}/reject` | Ablehnen mit Begruendung |
| `POST` | `/change-requests/{id}/edit` | Vorschlag bearbeiten und annehmen |
| `DELETE` | `/change-requests/{id}` | Soft-Delete |

## Status-Workflow

```
pending --> accepted
pending --> rejected
pending --> edited_and_accepted
```

## Prioritaeten

- `critical` — Sofortige Aktion erforderlich
- `high` — Wichtig, zeitnah bearbeiten
- `normal` — Standard-Prioritaet
- `low` — Kann warten

## Trigger-Typen

| Trigger | Erzeugte Change-Requests |
|---------|--------------------------|
| `generation` | Automatisch aus Stammdaten generiert |
| `vvt_dpia` | VVT-Aktivitaet mit dpia_required=true → DSFA CR |
| `vvt_data_category` | Neue Datenkategorie → Loeschfristen CR |
| `use_case_risk` | Use Case mit hohem Risiko → DSFA CR |
| `use_case_ai` | Use Case mit KI → DSFA Sektion-Update CR |
| `manual` | Manuell erstellt |

## Change-Request Engine

Die Engine (`change_request_engine.py`) generiert automatisch Change-Requests bei bestimmten Trigger-Events:

### VVT-Trigger
```python
generate_change_requests_for_vvt(db, tenant_id, activity, user)
```
- Wenn `dpia_required=true`: DSFA-CR wird erstellt
- Fuer jede neue Datenkategorie: Loeschfristen-CR wird erstellt

### Use-Case-Trigger
```python
generate_change_requests_for_use_case(db, tenant_id, use_case, user)
```
- Bei `risk_level` high/critical: DSFA-CR
- Bei KI-Involvement: DSFA-Sektions-Update-CR

## Frontend

Die Change-Request Inbox ist unter `/sdk/change-requests` erreichbar:
- Stats-Bar mit Zahlen (pending, critical, accepted, rejected)
- Filter nach Status und Dokumenttyp
- Card-Liste mit Trigger-Badge, Titel, Prioritaet
- Accept/Edit/Reject Modals
- 60s Auto-Refresh

## Datenbank

### Migration 038

```sql
CREATE TABLE compliance_change_requests (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    tenant_id VARCHAR(255) NOT NULL,
    trigger_type VARCHAR(50) NOT NULL,
    target_document_type VARCHAR(50),
    target_document_id UUID,
    target_section VARCHAR(100),
    proposal_title VARCHAR(500) NOT NULL,
    proposal_body TEXT,
    proposed_changes JSONB DEFAULT '{}',
    status VARCHAR(30) DEFAULT 'pending',
    priority VARCHAR(20) DEFAULT 'normal',
    decided_by VARCHAR(255),
    decided_at TIMESTAMPTZ,
    rejection_reason TEXT,
    created_by VARCHAR(255) DEFAULT 'system',
    created_at TIMESTAMPTZ DEFAULT NOW(),
    deleted_at TIMESTAMPTZ
);

CREATE TABLE compliance_change_request_audit (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    change_request_id UUID REFERENCES compliance_change_requests(id),
    action VARCHAR(50) NOT NULL,
    performed_by VARCHAR(255),
    before_state JSONB,
    after_state JSONB,
    created_at TIMESTAMPTZ DEFAULT NOW()
);
```

## Tests

- 26 Tests in `test_change_request_routes.py`
- Schema-Validierung, Engine-Regeln, Route-Registrierung
