# Compliance SDK

<Lead>
Der Compliance-Namespace bündelt, was Tools heute an Compliance-Bausteinen nutzen: einen deterministischen **AGG-Diskriminierungs-Check** für deutsche Inserats-Texte und die **AI-Risk-Selbstklassifikation** im Manifest.
</Lead>

## AGG-Check für Inserats-Texte

`checkDeDiscrimination(text)` scannt Text auf Formulierungen, die bei Wohnraum-Vermarktung AGG-relevant sind (Herkunft, Geschlecht, Religion, Alter, Familienstatus). Die Funktion ist pure und deterministisch: kein I/O, kein KI-Aufruf, gleiche Eingabe ergibt immer dasselbe Ergebnis.

```typescript
import { checkDeDiscrimination } from "@reosa/sdk";

const result = checkDeDiscrimination(exposeText);

result.ok;         // true genau dann, wenn KEIN "block"-Finding existiert
result.wordCount;  // Wortzahl des Inputs (Telemetrie)

for (const f of result.findings) {
  f.severity;      // "block" (klare Verletzung) | "warn" (kontextabhängig) | "info"
  f.category;      // "agg_discrimination" | "agg_age" | "agg_family_status" | "agg_other"
  f.matchedText;   // der getroffene Substring, fürs Highlight im Editor
  f.startIndex;    // 0-basierter Start im Original-Text
  f.endIndex;      // exklusives Ende (wie String#slice)
  f.reason;        // deutsche Begründung, direkt anzeigbar
  f.suggestion;    // optionaler Umformulierungs-Vorschlag
  f.confidence;    // Selbst-Einschätzung 0..1
  f.legalRef;      // zitierte Norm, z.B. "AGG § 19 Abs. 1 Nr. 1"
}
```

Empfohlener Umgang in Tool-UIs:

- **`block`-Findings** verhindern das Veröffentlichen. Zeige `reason` und `suggestion` direkt am markierten Text (via `startIndex`/`endIndex`).
- **`warn`-Findings** sind kontextabhängig (z.B. "christlich" als Objekt-Eigenschaft vs. als Mieter-Anforderung). Zeige sie als Hinweis, blocke nicht.
- Die Findings sind nach `startIndex` sortiert und pro Textstelle dedupliziert.

<Warning title="Keine Rechtsberatung">
Die Wort-Liste deckt die häufigsten Stolperfallen ab, ist aber nicht abschließend und ersetzt keine juristische Prüfung. Die Confidence-Werte sind eine Selbst-Einschätzung des Tools, kein gerichtsverwertbares Maß. Kommuniziere das auch in deiner Tool-UI ehrlich.
</Warning>

## AI-Risk-Klassen im Manifest

Jedes Modul deklariert sein KI-Risiko im Manifest, orientiert an den Risiko-Kategorien des EU AI Act:

```typescript
aiRiskClass: "minimal",   // "none" | "minimal" | "limited" | "high" | "prohibited"
```

- **`none`**: das Tool ruft keine KI auf (nur dann darf `creditsPerUse` bei Credit-Pricing 0 sein).
- **`minimal` / `limited`**: typische Assistenz- und Generierungs-Tools.
- **`high` / `prohibited`**: reserviert; Tools dieser Klassen durchlaufen keine normale Freigabe.

Die Klassifikation ist Pflichtfeld und CI-validiert (`bun validate:manifests`). Sie ist die Grundlage für spätere Governance-Flächen; dokumentiere im Zweifel eine Stufe konservativer.

## Was es (noch) nicht gibt

Ehrliche Abgrenzung: der Compliance-Namespace enthält heute **nur** den AGG-Check. Retention-Helpers, DSGVO-Export-APIs oder automatische AI-Act-Transparenz-Texte sind nicht Teil des SDK; Datenschutz-Themen der Plattform selbst stehen in der [Legal-Sektion](/legal/overview).

## Weiterführend

Der AGG-Check läuft typischerweise in deinem Compute vor dem Speichern eines Textes; das Ergebnis kannst du im [Audit-Trail](/dev/sdk/audit) festhalten (z.B. `expose.text.blocked` mit `legalRef` in den Metadaten, ohne den Text selbst).
