Files
Benjamin Admin 1f91e05600
Some checks failed
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) Failing after 38s
CI / test-python-backend-compliance (push) Successful in 39s
CI / test-python-document-crawler (push) Successful in 26s
CI / test-python-dsms-gateway (push) Successful in 21s
fix+test+docs: Archivierte Projekte, Vitest-Tests & Regulations-Doku
- fix(ProjectSelector): Archivierte Projekte anklickbar machen, doppelten
  "Neues Projekt" Button entfernen
- test: 32 Vitest-Tests fuer scope-to-facts und supervisory-authority-resolver
- docs(flow-data): Scope-Step outputs + Obligations inputs erweitert
- docs(developer-portal): Feature-Highlight "Automatische Regulierungs-Ableitung"
- docs(mkdocs): Neuer Abschnitt Regulierungs-Ableitung in obligations.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 11:07:35 +01:00

336 lines
9.8 KiB
Markdown

# Obligations Framework v2 (CP-OBL)
Regulierungsübergreifende Pflichten-Datenbank mit Condition Engine, TOM-Control-Mapping und Gap-Analyse.
**Prefix:** `CP-OBL` · **Frontend:** `https://macmini:3007/sdk/obligations`
**Service:** `ai-compliance-sdk` (Go/Gin, Port 8093)
**Proxy:** `/api/sdk/v1/ucca/obligations/[[...path]]``ai-compliance-sdk:8090/sdk/v1/ucca/obligations/...`
---
## Überblick
Das Obligations Framework v2 ersetzt die ursprüngliche, hardcoded Pflichten-Liste durch eine **JSON-basierte, regulierungsübergreifende Pflichten-Datenbank**.
| Kenngröße | Wert |
|-----------|------|
| **Regulierungen** | 9 (DSGVO, BDSG, AI Act, NIS2, TTDSG, DSA, Data Act, DORA, EU Machinery) |
| **Pflichten (Obligations)** | 325 |
| **TOM-Controls** | 180 |
| **Condition Engine** | `all_of` / `any_of` Logikaum mit 40+ Feldern aus UnifiedFacts |
---
## Architektur
```
policies/obligations/v2/
├── _manifest.json ← Alle Regulierungen + Metadaten
├── _schema.json ← JSON-Schema zur Validierung
├── _tom_mapping.json ← Obligations → TOM-Controls Mapping
├── dsgvo_v2.json ← DSGVO-Pflichten (~120)
├── ai_act_v2.json ← AI Act Pflichten (~40)
├── nis2_v2.json ← NIS2-Pflichten (~30)
├── bdsg_v2.json
├── ttdsg_v2.json
├── dsa_v2.json
├── data_act_v2.json
├── dora_v2.json
└── eu_machinery_v2.json
```
### Condition Engine
Jede Pflicht enthält ein `condition`-Feld, das gegen `UnifiedFacts` ausgewertet wird:
```json
{
"id": "DSGVO-ART-37-1",
"article": "Art. 37 Abs. 1",
"title": "DSB-Benennung Pflicht",
"condition": {
"any_of": [
{ "field": "employeeCount", "op": "gte", "value": 20 },
{ "field": "processesHealthData", "op": "eq", "value": true },
{ "field": "isPublicAuthority", "op": "eq", "value": true }
]
},
"priority": "high",
"category": "Governance",
"responsible_role": "Geschäftsführung",
"deadline_days": 30
}
```
**Operatoren:** `eq`, `neq`, `gt`, `gte`, `lt`, `lte`, `in`, `contains`
### UnifiedFacts (40+ Felder)
Werden aus Company-Profil, Compliance-Scope und Use-Case-Assessments zusammengeführt:
```go
type UnifiedFacts struct {
EmployeeCount int
ProcessesHealthData bool
IsPublicAuthority bool
UsesAI bool
AIRiskClass string // minimal/limited/high/unacceptable
SellsToEU bool
IsFinancialEntity bool // DORA
IsMachineBuilder bool // EU Machinery
// ... 35+ weitere Felder
}
```
### TOM-Control-Mapping
Jede Pflicht ist einem oder mehreren der 180 TOM-Controls (`policies/tom_controls_v1.json`) zugeordnet:
```
Obligation DSGVO-ART-32 → Controls [TOM-001, TOM-042, TOM-097]
```
---
## Obligations-Kategorien
| Kategorie | Bedeutung |
|-----------|-----------|
| `Meldepflicht` | Melde- und Benachrichtigungspflichten |
| `Governance` | Verantwortlichkeitsstrukturen |
| `Technisch` | Technische Maßnahmen |
| `Organisatorisch` | Organisatorische Maßnahmen |
| `Dokumentation` | Dokumentations- und Nachweispflichten |
| `Schulung` | Mitarbeiterschulungen |
| `Audit` | Prüfungs- und Auditpflichten |
| `Compliance` | Allgemeine Compliance-Pflichten |
---
## Prioritäten
| Wert | Deadline | Bedeutung |
|------|---------|-----------|
| `critical` | Sofort | Rechtlicher Verstoß wenn nicht erfüllt |
| `high` | ≤ 30 Tage | Hohes Bußgeldrisiko |
| `medium` | ≤ 90 Tage | Mittleres Risiko |
| `low` | ≤ 365 Tage | Empfehlung |
---
## API Endpoints
### Assessment
| Methode | Pfad | Beschreibung |
|---------|------|--------------|
| `POST` | `/sdk/v1/ucca/obligations/assess` | Pflichten bewerten basierend auf UnifiedFacts |
| `GET` | `/sdk/v1/ucca/obligations/:assessmentId` | Assessment abrufen |
| `GET` | `/sdk/v1/ucca/obligations/:assessmentId/by-regulation` | Pflichten nach Regulierung gruppiert |
| `GET` | `/sdk/v1/ucca/obligations/:assessmentId/by-deadline` | Pflichten nach Deadline gruppiert |
| `GET` | `/sdk/v1/ucca/obligations/:assessmentId/by-responsible` | Pflichten nach Verantwortlichem |
### Export
| Methode | Pfad | Beschreibung |
|---------|------|--------------|
| `POST` | `/sdk/v1/ucca/obligations/export/memo` | C-Level-Memo aus Assessment exportieren |
| `POST` | `/sdk/v1/ucca/obligations/export/direct` | Direkt aus Overview exportieren (ohne Assessment-ID) |
### Regulierungen
| Methode | Pfad | Beschreibung |
|---------|------|--------------|
| `GET` | `/sdk/v1/ucca/obligations/regulations` | Alle verfügbaren Regulierungen auflisten |
| `GET` | `/sdk/v1/ucca/obligations/regulations/:id/decision-tree` | Entscheidungsbaum für eine Regulierung |
### Schnellprüfung & Scope-Assessment
| Methode | Pfad | Beschreibung |
|---------|------|--------------|
| `POST` | `/sdk/v1/ucca/obligations/quick-check` | Schnellprüfung ohne Persistenz |
| `POST` | `/sdk/v1/ucca/obligations/assess-from-scope` | Assessment aus Compliance-Scope-Daten |
### TOM-Controls & Gap-Analyse
| Methode | Pfad | Beschreibung |
|---------|------|--------------|
| `GET` | `/sdk/v1/ucca/obligations/tom-controls/for-obligation/:obligationId` | TOMs für eine Pflicht |
| `POST` | `/sdk/v1/ucca/obligations/gap-analysis` | Gap-Analyse: fehlende TOMs identifizieren |
| `GET` | `/sdk/v1/ucca/obligations/tom-controls/:controlId/obligations` | Alle Pflichten für einen TOM-Control |
### Request-Beispiel (POST /assess)
```json
{
"tenant_id": "uuid",
"facts": {
"employeeCount": 45,
"processesHealthData": false,
"usesAI": true,
"aiRiskClass": "limited",
"sellsToEU": true,
"isFinancialEntity": false,
"isMachineBuilder": false
},
"regulations": ["DSGVO", "AI_ACT", "NIS2"]
}
```
### Response-Ausschnitt
```json
{
"assessment_id": "uuid",
"tenant_id": "uuid",
"total_obligations": 87,
"critical": 3,
"high": 24,
"medium": 41,
"low": 19,
"obligations": [
{
"id": "DSGVO-ART-13",
"title": "Informationspflicht bei Erhebung",
"article": "Art. 13 DSGVO",
"category": "Dokumentation",
"priority": "high",
"responsible_role": "Datenschutzbeauftragter",
"deadline_days": 0,
"tom_controls": ["TOM-001", "TOM-042"]
}
]
}
```
---
## Automatische Regulierungs-Ableitung
Seit v2 kann das Obligations-Framework anwendbare Regulierungen und Aufsichtsbehörden direkt aus dem Scope-Profiling ableiten.
### Datenfluss
```
CompanyProfile + ScopeProfilingAnswers
scope-to-facts.ts ← Konvertiert Profil + Scope-Antworten in ScopeDecisionPayload
POST /assess-from-scope ← Go AI SDK bewertet Payload gegen Condition Engine
ApplicableRegulations ← Liste anwendbarer Gesetze (DSGVO, AI Act, NIS2, etc.)
+
supervisory-authority- ← Zuständige Aufsichtsbehörden (LfDI, BSI, BaFin, BNetzA)
resolver.ts
```
### Neue Dateien
| Datei | Beschreibung |
|-------|--------------|
| `admin-compliance/lib/sdk/scope-to-facts.ts` | Mapper: CompanyProfile + ScopeAnswers → `ScopeDecisionPayload` für Go SDK |
| `admin-compliance/lib/sdk/supervisory-authority-resolver.ts` | Ermittelt Aufsichtsbehörden aus Bundesland/Land + Regulierungen |
### scope-to-facts.ts
Exportierte Funktionen:
- `buildAssessmentPayload(profile, scopeAnswers, decision)``ScopeDecisionPayload`
- `parseEmployeeRange(range)` → Mittelwert als Zahl (z.B. "50-249" → 150)
- `parseRevenueRange(range)` → Umsatz als Zahl (z.B. "10-50 Mio" → 30.000.000)
### supervisory-authority-resolver.ts
Exportierte Funktion:
- `resolveAuthorities(state, country, regulationIds)``SupervisoryAuthorityResult[]`
Abgedeckte Regulierungen → Behörden:
| Regulierung | Behörde (DE) | Behörde (Andere) |
|-------------|-------------|-----------------|
| `dsgvo` | Landes-Datenschutzbehörde (16 Bundesländer) | Nationale DSB (AT, CH, FR, NL, etc.) |
| `nis2` | BSI | NCSA |
| `financial_policy` | BaFin | — |
| `ai_act` | BNetzA | — |
---
## Gap-Analyse
Die Gap-Analyse vergleicht die **geforderten TOM-Controls** (aus Obligations) mit den **implementierten Controls** (aus `compliance_controls`):
```http
POST /sdk/v1/ucca/obligations/gap-analysis
{
"assessment_id": "uuid",
"implemented_control_ids": ["TOM-001", "TOM-042"]
}
```
**Response:**
```json
{
"gaps": [
{
"obligation_id": "DSGVO-ART-32",
"missing_controls": ["TOM-097", "TOM-133"],
"risk_level": "high"
}
],
"gap_score": 0.73,
"fully_covered": 41,
"partially_covered": 23,
"not_covered": 23
}
```
---
## Frontend
**URL:** `https://macmini:3007/sdk/obligations`
Die Obligations-Seite zeigt:
- **Überblick-Kacheln:** Gesamtanzahl, nach Priorität, nach Regulierung
- **Regulierungs-Tabs:** Pflichten gefiltert nach DSGVO, AI Act, NIS2, etc.
- **Gap-Analyse-View:** Fehlende TOM-Controls visualisiert als Heatmap
- **TOM-Control-Panel:** Mapping von Pflichten → Controls mit Status
- **Export:** C-Level-Memo (Markdown) direkt aus dem Frontend
---
## Regulierungen im Detail
| Kürzel | Regulierung | Pflichten (ca.) |
|--------|-------------|-----------------|
| `DSGVO` | DSGVO (EU) 2016/679 | ~120 |
| `BDSG` | Bundesdatenschutzgesetz | ~25 |
| `AI_ACT` | AI Act (EU) 2024/1689 | ~40 |
| `NIS2` | NIS2-Richtlinie 2022/2555 | ~30 |
| `TTDSG` | Telekommunikation-Telemedien-Datenschutz-Gesetz | ~20 |
| `DSA` | Digital Services Act 2022/2065 | ~20 |
| `DATA_ACT` | Data Act (EU) 2023/2854 | ~25 |
| `DORA` | Digital Operational Resilience Act | ~25 |
| `EU_MACHINERY` | Maschinenverordnung (EU) 2023/1230 | ~20 |
---
## Tests
**Testdatei:** `ai-compliance-sdk/internal/ucca/obligation_condition_engine_test.go`
```bash
# Lokale Tests (MacBook):
cd ai-compliance-sdk && go test ./internal/ucca/... -v -run TestObligationCondition
```
**Weitere Tests:**
- `tom_mapper_test.go` — TOM-Mapping Tests
- `v2_loader_test.go` — JSON-Loader für Regulierungs-Dateien