# 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