# Software Bill of Materials (SBOM)
## BreakPilot PWA

**Version:** 1.5.0
**Letzte Aktualisierung:** 2026-02-08
**Verantwortlicher:** BreakPilot Development Team

---

## Übersicht

Diese SBOM dokumentiert alle Open-Source-Komponenten, die in BreakPilot verwendet werden, einschließlich ihrer Lizenzen und Nutzungsbedingungen für den kommerziellen Einsatz.

---

## 1. LibreChat (Chat-Interface)

| Eigenschaft | Wert |
|-------------|------|
| **Name** | LibreChat |
| **Version** | latest (dev) |
| **Repository** | https://github.com/danny-avila/LibreChat |
| **Lizenz** | MIT License |
| **Copyright** | Copyright (c) 2025 LibreChat |
| **Kommerzielle Nutzung** | Erlaubt |
| **Attribution erforderlich** | Ja (Lizenztext beibehalten) |
| **Verwendungszweck** | Chat/Prompt-Oberfläche für Nutzer |

### LibreChat Abhängigkeiten (Container)

| Komponente | Version | Lizenz | Kommerzielle Nutzung |
|------------|---------|--------|----------------------|
| MongoDB | latest | SSPL-1.0 | Ja (mit Einschränkungen*) |
| Meilisearch | v1.12.3 | MIT | Ja |
| PostgreSQL (pgvector) | 0.8.0-pg15 | PostgreSQL License | Ja |
| LibreChat RAG API | latest (dev-lite) | MIT | Ja |

> *MongoDB SSPL: Erlaubt kommerzielle Nutzung, solange MongoDB nicht als Service angeboten wird.

---

## 2. BreakPilot Backend (Python/FastAPI)

| Eigenschaft | Wert |
|-------------|------|
| **Framework** | FastAPI |
| **Lizenz** | MIT License |
| **Repository** | https://github.com/tiangolo/fastapi |
| **Kommerzielle Nutzung** | Erlaubt |

### Python Dependencies

| Paket | Version | Lizenz | Kommerzielle Nutzung |
|-------|---------|--------|----------------------|
| FastAPI | 0.123.9 | MIT | Ja |
| Uvicorn | 0.38.0 | BSD-3-Clause | Ja |
| Starlette | 0.49.3 | BSD-3-Clause | Ja |
| Pydantic | 2.12.5 | MIT | Ja |
| httpx | 0.28.1 | BSD-3-Clause | Ja |
| requests | 2.32.5 | Apache-2.0 | Ja |
| PyJWT | 2.10.1 | MIT | Ja |
| python-multipart | 0.0.20 | Apache-2.0 | Ja |
| Jinja2 | 3.1.6 | BSD-3-Clause | Ja |
| WeasyPrint | 66.0 | BSD-3-Clause | Ja |
| python-dateutil | 2.9.0 | Apache-2.0/BSD | Ja |
| python-docx | 1.2.0 | MIT | Ja |
| mammoth | 1.11.0 | BSD-2-Clause | Ja |
| Markdown | 3.9 | BSD-3-Clause | Ja |
| Pillow | 11.3.0 | HPND | Ja |
| opencv-python | 4.12.0 | Apache-2.0 | Ja |
| numpy | 2.0.2 | BSD-3-Clause | Ja |
| anthropic | 0.75.0 | MIT | Ja |
| email-validator | 2.3.0 | CC0-1.0 | Ja |
| PyJWKClient (PyJWT) | 2.10.1 | MIT | Ja | Keycloak JWKS Validierung |
| pytest | 8.4.2 | MIT | Ja |
| pytest-asyncio | 1.2.0 | Apache-2.0 | Ja |
| beautifulsoup4 | 4.12.3 | MIT | Ja |

---

## 3. Consent Service (Go)

| Eigenschaft | Wert |
|-------------|------|
| **Sprache** | Go 1.23+ |
| **Lizenz** | Proprietär (BreakPilot) |

### Go Dependencies (Direkt)

| Paket | Version | Lizenz | Kommerzielle Nutzung |
|-------|---------|--------|----------------------|
| gin-gonic/gin | 1.11.0 | MIT | Ja |
| golang-jwt/jwt/v5 | 5.3.0 | MIT | Ja |
| google/uuid | 1.6.0 | BSD-3-Clause | Ja |
| jackc/pgx/v5 | 5.7.6 | MIT | Ja |
| joho/godotenv | 1.5.1 | MIT | Ja |
| skip2/go-qrcode | 0.0.0 | MIT | Ja |
| golang.org/x/crypto | 0.40.0 | BSD-3-Clause | Ja |

### Go Dependencies (Indirekt/Transitiv)

| Paket | Version | Lizenz | Kommerzielle Nutzung |
|-------|---------|--------|----------------------|
| bytedance/sonic | 1.14.0 | Apache-2.0 | Ja |
| go-playground/validator/v10 | 10.27.0 | MIT | Ja |
| goccy/go-json | 0.10.2 | MIT | Ja |
| jackc/pgpassfile | 1.0.0 | MIT | Ja |
| jackc/pgservicefile | 1.0.0 | MIT | Ja |
| jackc/puddle/v2 | 2.2.2 | MIT | Ja |
| ugorji/go/codec | 1.3.0 | MIT | Ja |
| google.golang.org/protobuf | 1.36.9 | BSD-3-Clause | Ja |

---

## 4. Matrix Synapse (Schulkommunikation)

| Eigenschaft | Wert |
|-------------|------|
| **Name** | Matrix Synapse |
| **Version** | latest |
| **Repository** | https://github.com/element-hq/synapse |
| **Docker Image** | matrixdotorg/synapse:latest |
| **Lizenz** | AGPL-3.0 |
| **Copyright** | Copyright (c) 2014-2025 Element (formerly New Vector Ltd) |
| **Kommerzielle Nutzung** | Erlaubt (mit Bedingungen*) |
| **Attribution erforderlich** | Ja |
| **Verwendungszweck** | E2EE Messenger für Eltern-Lehrer-Kommunikation |

> *AGPL-3.0: Kommerzielle Nutzung erlaubt. Wenn Sie Synapse modifizieren und als Service anbieten, müssen die Änderungen unter AGPL veröffentlicht werden. Bei reiner Nutzung ohne Modifikation keine zusätzlichen Pflichten.

### Matrix Protocol

| Komponente | Lizenz | Beschreibung |
|------------|--------|--------------|
| Matrix Protocol | Apache-2.0 | Offenes Kommunikationsprotokoll |
| Megolm (E2EE) | Apache-2.0 | Ende-zu-Ende-Verschlüsselung |

### Matrix Service Dependencies (Go)

| Paket | Version | Lizenz | Kommerzielle Nutzung |
|-------|---------|--------|----------------------|
| google/uuid | 1.6.0 | BSD-3-Clause | Ja |
| net/http (stdlib) | Go 1.21+ | BSD-3-Clause | Ja |
| encoding/json (stdlib) | Go 1.21+ | BSD-3-Clause | Ja |

---

## 5. Jitsi Meet (Videokonferenzen)

| Eigenschaft | Wert |
|-------------|------|
| **Name** | Jitsi Meet |
| **Version** | stable-9823 |
| **Repository** | https://github.com/jitsi/jitsi-meet |
| **Docker Images** | jitsi/web, jitsi/prosody, jitsi/jicofo, jitsi/jvb |
| **Lizenz** | Apache-2.0 |
| **Copyright** | Copyright (c) 2013-2025 Atlassian Pty Ltd & Contributors |
| **Kommerzielle Nutzung** | Erlaubt |
| **Attribution erforderlich** | Ja (NOTICE-Datei beibehalten) |
| **Verwendungszweck** | Videokonferenzen für Schulungen, Elterngespräche |

### Jitsi Komponenten

| Komponente | Image | Lizenz | Beschreibung |
|------------|-------|--------|--------------|
| Jitsi Web | jitsi/web:stable-9823 | Apache-2.0 | Web-Frontend |
| Prosody | jitsi/prosody:stable-9823 | MIT | XMPP-Server |
| Jicofo | jitsi/jicofo:stable-9823 | Apache-2.0 | Conference Focus |
| Jitsi Videobridge | jitsi/jvb:stable-9823 | Apache-2.0 | WebRTC SFU |

### Jitsi Abhängigkeiten

| Komponente | Lizenz | Beschreibung |
|------------|--------|--------------|
| WebRTC | BSD-3-Clause | Echtzeit-Kommunikation |
| Olibs (Olm) | Apache-2.0 | Verschlüsselung |
| Ogg/Opus | BSD-3-Clause | Audio-Codec |
| VP8/VP9 | BSD-3-Clause | Video-Codec |

### Jitsi Service Dependencies (Go)

| Paket | Version | Lizenz | Kommerzielle Nutzung |
|-------|---------|--------|----------------------|
| google/uuid | 1.6.0 | BSD-3-Clause | Ja |
| crypto/hmac (stdlib) | Go 1.21+ | BSD-3-Clause | Ja |
| encoding/base64 (stdlib) | Go 1.21+ | BSD-3-Clause | Ja |

---

## 6. Datenbanken

| Datenbank | Version | Lizenz | Kommerzielle Nutzung | Verwendung |
|-----------|---------|--------|----------------------|------------|
| PostgreSQL | 16-alpine | PostgreSQL License | Ja | Hauptdatenbank |
| PostgreSQL (Synapse) | 16-alpine | PostgreSQL License | Ja | Matrix Datenbank |
| pgvector Extension | 0.8.0 | PostgreSQL License | Ja | LibreChat RAG |
| MongoDB | latest | SSPL-1.0 | Ja* | LibreChat |
| Meilisearch | 1.12.3 | MIT | Ja | LibreChat Suche |

---

## 7. Frontend (PWA)

| Komponente | Lizenz | Kommerzielle Nutzung |
|------------|--------|----------------------|
| HTML5/CSS3/JS | N/A | N/A |
| Service Worker API | N/A | N/A |

---

## 7a. Typografie & Schriftarten

Diese Sektion dokumentiert alle verwendeten Schriftarten für Website, Marketing und E-Mails, um sicherzustellen, dass nur lizenzfreie Schriften verwendet werden.

### Primäre Schriftart: Inter

| Eigenschaft | Wert |
|-------------|------|
| **Name** | Inter |
| **Designer** | Rasmus Andersson |
| **Version** | Variable Font |
| **Repository** | https://github.com/rsms/inter |
| **Lizenz** | SIL Open Font License 1.1 (OFL-1.1) |
| **Kommerzielle Nutzung** | Ja, uneingeschränkt |
| **Attribution erforderlich** | Nein |
| **Modifikation erlaubt** | Ja |

### Verwendete Font-Weights

| Weight | Name | Verwendung |
|--------|------|------------|
| 400 | Regular | Fließtext, Beschreibungen |
| 500 | Medium | Labels, Buttons |
| 600 | Semi-Bold | Überschriften H3-H6, Hervorhebungen |
| 700 | Bold | Überschriften H1-H2, CTAs |

### Einbindungsmethode

| Plattform | Methode | Datei |
|-----------|---------|-------|
| Website (Next.js) | Google Fonts CDN | `website/app/globals.css` |
| Admin Panel | Google Fonts CDN | `backend/frontend/static/css/studio.css` |
| Kundenportal | Google Fonts CDN | `backend/frontend/static/css/customer.css` |
| E-Mail Templates | System Font Fallback | Inline CSS |

### Google Fonts Import

```css
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
```

### Font Stack (Fallback)

```css
font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, sans-serif;
```

### System-Fallback-Schriften

| Betriebssystem | Fallback Font | Lizenz |
|----------------|---------------|--------|
| macOS/iOS | SF Pro Text | Apple Proprietary (vorinstalliert) |
| Windows | Segoe UI | Microsoft Proprietary (vorinstalliert) |
| Android | Roboto | Apache-2.0 (vorinstalliert) |
| Linux | Sans-Serif Default | Varies (system font) |

### E-Mail-sichere Schriftarten

Für E-Mail-Templates werden nur websichere Schriften verwendet:

| Font | Fallback für | Lizenz |
|------|--------------|--------|
| Arial | Sans-Serif Fließtext | Monotype (lizenzfrei für E-Mail) |
| Helvetica | macOS/iOS | Apple (vorinstalliert) |
| Georgia | Serif (optional) | Microsoft (lizenzfrei für E-Mail) |

### Icon-Fonts & Symbol-Sets

| Name | Quelle | Lizenz | Verwendung |
|------|--------|--------|------------|
| Heroicons | heroicons.com | MIT | Admin Panel SVG Icons |
| System Emojis | OS-nativ | N/A | Feature-Icons, Bundesland-Marker |

### Nicht verwendete / Ausgeschlossene Schriften

| Schriftart | Grund für Ausschluss |
|------------|----------------------|
| Adobe Fonts (Typekit) | Erfordert Adobe-Lizenz |
| Google Fonts (proprietäre) | Nur OFL/Apache-lizenzierte |
| MyFonts/Linotype | Kommerzielle Lizenz erforderlich |
| Custom Brand Fonts | Lizenzkosten, keine Notwendigkeit |

### Compliance-Checkliste (Typografie)

- [x] Inter ist OFL-1.1 lizenziert (vollständig frei für kommerzielle Nutzung)
- [x] Keine proprietären Schriften eingebunden
- [x] System-Fallbacks sind auf allen Plattformen lizenzfrei
- [x] E-Mail-Templates verwenden nur websichere Schriften
- [x] SVG-Icons (Heroicons) sind MIT-lizenziert
- [x] Keine Schrift-Dateien (.woff/.ttf) mit unklarer Lizenz im Repository

### Performance-Hinweis

Google Fonts werden mit `display=swap` geladen, um FOUT (Flash of Unstyled Text) zu minimieren. Für Produktion kann eine lokale Einbindung über `/public/fonts/` erwogen werden.

---

## Lizenz-Zusammenfassung

### Erlaubte Lizenzen für kommerzielle Nutzung:

| Lizenz | Bedingungen |
|--------|-------------|
| **MIT** | Copyright-Vermerk beibehalten |
| **BSD-2-Clause** | Copyright-Vermerk beibehalten |
| **BSD-3-Clause** | Copyright-Vermerk beibehalten, keine Endorsement-Nutzung |
| **Apache-2.0** | NOTICE-Datei beibehalten, Patent-Klausel beachten |
| **PostgreSQL License** | Copyright-Vermerk beibehalten |
| **SSPL-1.0** | Kein MongoDB-as-a-Service anbieten |
| **AGPL-3.0** | Bei Modifikation + Service: Quellcode veröffentlichen |

---

## Compliance-Checkliste

- [x] Alle Open-Source-Lizenzen erlauben kommerzielle Nutzung
- [x] MIT-Lizenztexte werden mit dem Produkt ausgeliefert
- [x] Copyright-Hinweise sind dokumentiert
- [x] SSPL-Einschränkungen für MongoDB werden eingehalten (kein DBaaS)
- [x] AGPL-3.0-Einschränkungen für Matrix Synapse beachtet (keine Modifikationen)
- [x] SBOM wird regelmäßig aktualisiert

---

## 8. LLM Platform (geplant)

| Eigenschaft | Wert |
|-------------|------|
| **Name** | BreakPilot LLM Platform |
| **Status** | In Planung |
| **Dokumentation** | [/docs/llm-platform/README.md](/docs/llm-platform/README.md) |

### LLM Inference Stack

| Komponente | Version | Lizenz | Kommerzielle Nutzung | Beschreibung |
|------------|---------|--------|----------------------|--------------|
| vLLM | latest | Apache-2.0 | Ja | OpenAI-kompatible Inference Engine |
| Ollama | latest | MIT | Ja | Lokale Entwicklung & Fallback |

### LLM Modelle

| Modell | Lizenz | Kommerzielle Nutzung | Einschränkungen |
|--------|--------|----------------------|-----------------|
| Llama 3.1 (8B/70B) | Llama 3.1 Community License | Ja | >700M MAU erfordert Meta-Lizenzvereinbarung |
| Mistral 7B | Apache-2.0 | Ja | Keine |
| Mixtral 8x7B | Apache-2.0 | Ja | Keine |
| Claude API | Proprietär (Anthropic) | Ja | Pay-per-use, API Terms |

> **Llama 3.1 License:** Die Llama 3.1 Community License erlaubt kommerzielle Nutzung. Bei mehr als 700 Millionen monatlich aktiven Nutzern ist eine separate Lizenzvereinbarung mit Meta erforderlich. Für BreakPilot (Schulkontext) ist dies nicht relevant.

### LLM Gateway Dependencies (Python)

| Paket | Version | Lizenz | Kommerzielle Nutzung |
|-------|---------|--------|----------------------|
| sse-starlette | 2.x | BSD-3-Clause | Ja |
| feedparser | 6.x | BSD-2-Clause | Ja |
| simhash | 2.x | MIT | Ja |
| tavily-python | latest | MIT | Ja |

### Hosting (Phase 1)

| Anbieter | Dienst | Datenschutz |
|----------|--------|-------------|
| vast.ai | GPU-Mietung | US-basiert, nur für Inference (keine PII) |
| Bestehende Infra | Gateway, DB | DE-hosted |

---

## 9. Education Search Service (edu-search-service)

| Eigenschaft | Wert |
|-------------|------|
| **Name** | BreakPilot Education Search Service |
| **Status** | In Entwicklung (Phase 0 PoC) |
| **Sprache** | Go 1.21+ |
| **Lizenz** | Proprietär (BreakPilot) |
| **Verwendungszweck** | EU-gehostete Bildungsquellen-Suche als Tavily-Alternative |

### Go Dependencies (Direkt)

| Paket | Version | Lizenz | Kommerzielle Nutzung | Beschreibung |
|-------|---------|--------|----------------------|--------------|
| gin-gonic/gin | 1.9.1 | MIT | Ja | HTTP Web Framework |
| opensearch-project/opensearch-go/v2 | 2.3.0 | Apache-2.0 | Ja | OpenSearch Client |
| google/uuid | 1.5.0 | BSD-3-Clause | Ja | UUID Generierung |
| gopkg.in/yaml.v3 | 3.0.1 | MIT | Ja | YAML Parser |
| PuerkitoBio/goquery | 1.8.1 | BSD-3-Clause | Ja | HTML Parsing/Scraping |
| ledongthuc/pdf | 0.0.0 | MIT | Ja | PDF Text Extraction |
| golang.org/x/net | 0.19.0 | BSD-3-Clause | Ja | Netzwerk-Utilities |
| golang.org/x/text | 0.14.0 | BSD-3-Clause | Ja | Text/Encoding |

### Infrastructure Dependencies

| Komponente | Version | Lizenz | Kommerzielle Nutzung | Beschreibung |
|------------|---------|--------|----------------------|--------------|
| OpenSearch | 2.x | Apache-2.0 | Ja | Such-Engine & Index |

> **Hinweis:** OpenSearch ist ein Fork von Elasticsearch unter Apache-2.0 Lizenz und damit uneingeschränkt kommerziell nutzbar.

---

## 10. Legal Crawler (Backend Module)

| Eigenschaft | Wert |
|-------------|------|
| **Name** | BreakPilot Legal Crawler |
| **Status** | Aktiv |
| **Sprache** | Python 3.10+ |
| **Lizenz** | Proprietär (BreakPilot) |
| **Verwendungszweck** | Crawlt Schulgesetze und rechtliche Inhalte aller 16 Bundesländer |

### Python Dependencies (Legal Crawler spezifisch)

| Paket | Version | Lizenz | Kommerzielle Nutzung | Beschreibung |
|-------|---------|--------|----------------------|--------------|
| beautifulsoup4 | 4.12.3 | MIT | Ja | HTML Parsing |
| httpx | 0.28.1 | BSD-3-Clause | Ja | Async HTTP Client |

### Gecrawlte Quellen (Legal Seeds)

| Bundesland | Quelle | Typ |
|------------|--------|-----|
| Baden-Württemberg | landesrecht-bw.de | Schulgesetz |
| Bayern | gesetze-bayern.de | BayEUG |
| Berlin | gesetze.berlin.de | Schulgesetz |
| Brandenburg | bravors.brandenburg.de | BbgSchulG |
| Bremen | transparenz.bremen.de | BremSchulG |
| Hamburg | landesrecht-hamburg.de | HmbSG |
| Hessen | rv.hessenrecht.hessen.de | HSchG |
| Mecklenburg-Vorpommern | landesrecht-mv.de | SchulG M-V |
| Niedersachsen | voris.niedersachsen.de | NSchG |
| Nordrhein-Westfalen | bass.schule.nrw | SchulG NRW |
| Rheinland-Pfalz | landesrecht.rlp.de | SchulG |
| Saarland | sl.juris.de | SchoG |
| Sachsen | revosax.sachsen.de | SächsSchulG |
| Sachsen-Anhalt | landesrecht.sachsen-anhalt.de | SchulG LSA |
| Schleswig-Holstein | gesetze-rechtsprechung.sh.juris.de | SchulG SH |
| Thüringen | landesrecht.thueringen.de | ThürSchulG |

> **Hinweis:** Alle gecrawlten Inhalte sind öffentlich zugängliche Rechtstexte. Der Crawler respektiert robots.txt und Rate-Limiting.

---

## 11. ERPNext (Enterprise Resource Planning)

| Eigenschaft | Wert |
|-------------|------|
| **Name** | ERPNext |
| **Version** | latest (v15+) |
| **Framework** | Frappe Framework |
| **Repository** | https://github.com/frappe/erpnext |
| **Docker Image** | frappe/erpnext:latest |
| **Lizenz** | GNU General Public License v3.0 (GPLv3) |
| **Copyright** | Copyright (c) 2013-2025 Frappe Technologies Pvt. Ltd. |
| **Kommerzielle Nutzung** | Erlaubt (mit Bedingungen*) |
| **Attribution erforderlich** | Ja |
| **Verwendungszweck** | Vollständiges ERP-System für Buchhaltung, HR, Billing & Projekte |

> *GPLv3: Kommerzielle Nutzung erlaubt. Wenn Sie ERPNext modifizieren und verteilen, müssen die Änderungen unter GPLv3 veröffentlicht werden. Bei reiner Nutzung ohne Modifikation keine zusätzlichen Pflichten.

### ERPNext Features

| Feature | Beschreibung | Verwendung in BreakPilot |
|---------|--------------|--------------------------|
| **Accounting** | Double-Entry Buchhaltung | Finanzmanagement für Schulen |
| **Invoicing** | Rechnungsstellung + Abos | Automatische Billing für Services |
| **HR & Payroll** | Personalverwaltung + Lohnabrechnung | Lehrerverträge (zukünftig) |
| **Project Management** | Projekte & Dienstleistungen | Bildungsprojekte verwalten |
| **Banking** | Payables, Receivables | Zahlungsverkehr |
| **Expenses** | Spesen & Reisekosten | Kostenverwaltung |

### Frappe Framework (ERPNext Basis)

| Eigenschaft | Wert |
|-------------|------|
| **Framework** | Frappe Framework |
| **Sprache** | Python 3.10+ |
| **Repository** | https://github.com/frappe/frappe |
| **Lizenz** | MIT License |
| **Kommerzielle Nutzung** | Ja |

### ERPNext Service Stack

| Service | Image/Version | Lizenz | Beschreibung |
|---------|--------------|--------|--------------|
| ERPNext Application | frappe/erpnext:latest | GPLv3 | Hauptanwendung |
| Frappe Framework | frappe/erpnext:latest | MIT | Python Framework |
| Nginx | (embedded) | BSD-2-Clause | Web Server |
| Node.js | (embedded) | MIT | WebSocket Server |
| MariaDB | 10.6 | GPL-2.0 | Datenbank |
| Redis | alpine | BSD-3-Clause | Cache & Queue |

### Python Dependencies (ERPNext/Frappe)

| Paket | Lizenz | Kommerzielle Nutzung | Beschreibung |
|-------|--------|----------------------|--------------|
| Werkzeug | BSD-3-Clause | Ja | WSGI Utilities |
| Jinja2 | BSD-3-Clause | Ja | Template Engine |
| SQLAlchemy | MIT | Ja | ORM |
| Babel | BSD-3-Clause | Ja | Internationalisierung |
| Pillow | HPND | Ja | Image Processing |
| PyMySQL | MIT | Ja | MySQL Client |
| gevent | MIT | Ja | Async Networking |
| gunicorn | MIT | Ja | WSGI Server |

### JavaScript Dependencies (ERPNext Frontend)

| Paket | Lizenz | Kommerzielle Nutzung | Beschreibung |
|-------|--------|----------------------|--------------|
| Vue.js | MIT | Ja | Frontend Framework |
| Chart.js | MIT | Ja | Visualisierung |
| Socket.IO | MIT | Ja | Real-time Communication |
| Frappe UI | MIT | Ja | UI Components |

### ERPNext Deployment

| Komponente | Container | Port | Beschreibung |
|------------|-----------|------|--------------|
| Frontend | breakpilot-pwa-erpnext-frontend | 8090 | Nginx Reverse Proxy |
| Backend | breakpilot-pwa-erpnext-backend | 8000 (intern) | Python/Frappe App |
| WebSocket | breakpilot-pwa-erpnext-websocket | 9000 (intern) | Real-time Updates |
| Scheduler | breakpilot-pwa-erpnext-scheduler | - | Background Jobs |
| Worker (Long) | breakpilot-pwa-erpnext-worker-long | - | Long-running Tasks |
| Worker (Short) | breakpilot-pwa-erpnext-worker-short | - | Short Tasks |
| MariaDB | breakpilot-pwa-erpnext-db | 3306 (intern) | Database |
| Redis Queue | breakpilot-pwa-erpnext-redis-queue | 6379 (intern) | Job Queue |
| Redis Cache | breakpilot-pwa-erpnext-redis-cache | 6379 (intern) | App Cache |

> **Lizenz-Compliance:** ERPNext steht unter GPLv3. BreakPilot nutzt ERPNext als eigenständigen Service ohne Modifikationen. Die GPLv3-Lizenz erlaubt dies ohne zusätzliche Verpflichtungen, solange ERPNext nicht modifiziert und redistribuiert wird.

---

## 12. Keycloak Integration (Authentifizierung)

| Eigenschaft | Wert |
|-------------|------|
| **Name** | Keycloak (Optional) |
| **Version** | 24.x+ |
| **Repository** | https://github.com/keycloak/keycloak |
| **Lizenz** | Apache-2.0 |
| **Copyright** | Copyright (c) Red Hat, Inc. |
| **Kommerzielle Nutzung** | Erlaubt |
| **Verwendungszweck** | Identity & Access Management (IAM) fuer Produktion |
| **Status** | Optional (Fallback: Lokales JWT) |

### Architektur: Hybrid-Authentifizierung

BreakPilot verwendet einen Hybrid-Ansatz:

| Modus | Beschreibung | Empfohlen fuer |
|-------|--------------|----------------|
| **Lokales JWT** | Eigene JWT-Tokens mit HS256 | Entwicklung, Tests |
| **Keycloak** | JWKS-validierte RS256-Tokens | Produktion |

### Keycloak Komponenten (wenn aktiviert)

| Komponente | Beschreibung | Lizenz |
|------------|--------------|--------|
| Keycloak Server | IAM Server | Apache-2.0 |
| JWKS Endpoint | Public Key Distribution | Apache-2.0 |
| Realm Configuration | Multi-Tenant Support | Apache-2.0 |

### Python Dependencies (Keycloak)

| Paket | Version | Lizenz | Kommerzielle Nutzung | Beschreibung |
|-------|---------|--------|----------------------|--------------|
| PyJWT | 2.10.1 | MIT | Ja | JWT Decoding & Validation |
| httpx | 0.28.1 | BSD-3-Clause | Ja | Async HTTP Client fuer JWKS |
| cryptography | latest | Apache-2.0/BSD | Ja | RSA Key Verification |

### Rollentrennung

| Schicht | Verantwortung | Implementierung |
|---------|---------------|-----------------|
| **Authentifizierung** | "Wer bist du?" | Keycloak (Produktion) oder lokales JWT |
| **Autorisierung** | "Was darfst du?" | Eigenes rbac.py (domaenenspezifisch) |

> **Compliance Note:** Keycloak steht unter Apache-2.0 Lizenz und ist vollstaendig fuer kommerzielle Nutzung freigegeben. Die Integration ist optional - ohne Keycloak-Konfiguration verwendet BreakPilot automatisch lokale JWT-Authentifizierung.

---

## 13. Tool-Integrationen (geplant)

| Tool | Anbieter | Lizenz/API | Kommerzielle Nutzung | Beschreibung |
|------|----------|------------|----------------------|--------------|
| Tavily Search | Tavily AI | Proprietär (API) | Ja (Pay-per-use) | Web Search für LLM Tool-Calling |

> **Datenschutz-Hinweis:** Alle Anfragen an externe Tools (Tavily) durchlaufen einen PII-Redaction-Filter. Keine personenbezogenen Daten werden an externe Dienste übermittelt.

---

## 13. Content Service (Educational Content Platform)

| Eigenschaft | Wert |
|-------------|------|
| **Name** | BreakPilot Content Service |
| **Version** | 1.0.0 |
| **Status** | Produktionsbereit |
| **Sprache** | Python 3.11 + Node.js 20 |
| **Lizenz** | Proprietär (BreakPilot) |
| **Verwendungszweck** | Educational Content Management mit Creative Commons Licensing |

### Content Service Stack

| Service | Port | Framework | Beschreibung |
|---------|------|-----------|--------------|
| Content Service API | 8002 | FastAPI | Content CRUD, Rating, Analytics |
| H5P Service | 8003 | Express | Interactive Content Editor & Player |
| AI Content Generator | 8004 | FastAPI | KI-gestützte H5P Content-Generierung |
| MinIO Storage | 9000-9001 | MinIO | S3-compatible Object Storage |
| Content Database | 5433 | PostgreSQL 16 | Metadata Storage |

### 13.1 Content Service API (FastAPI)

| Eigenschaft | Wert |
|-------------|------|
| **Framework** | FastAPI |
| **Base Image** | python:3.11-slim |
| **Lizenz** | MIT License |
| **Port** | 8002 |

#### Python Dependencies (Content Service)

| Paket | Version | Lizenz | Kommerzielle Nutzung | Beschreibung |
|-------|---------|--------|----------------------|--------------|
| fastapi | ^0.109.0 | MIT | Ja | Web Framework |
| uvicorn[standard] | ^0.27.0 | BSD-3-Clause | Ja | ASGI Server |
| sqlalchemy | ^2.0.25 | MIT | Ja | Database ORM |
| psycopg2-binary | ^2.9.9 | LGPL-3.0 | Ja | PostgreSQL Driver |
| pydantic | ^2.5.3 | MIT | Ja | Data Validation |
| minio | ^7.2.3 | Apache-2.0 | Ja | S3 Storage Client |
| python-multipart | ^0.0.6 | Apache-2.0 | Ja | Form Data Parsing |
| python-jose[cryptography] | ^3.3.0 | MIT | Ja | JWT Handling |
| passlib[bcrypt] | ^1.7.4 | BSD | Ja | Password Hashing |
| matrix-nio | ^0.24.0 | ISC | Ja | Matrix Client for Feed Publishing |

### 13.2 H5P Service (Node.js) - Simplified Implementation

| Eigenschaft | Wert |
|-------------|------|
| **Framework** | Express (Simplified) |
| **Base Image** | node:20-alpine |
| **Lizenz** | MIT (Proprietäre Editoren) |
| **Port** | 8003 (8080 internal) |
| **Status** | Produktionsbereit (8 Content-Typen) |

#### Node.js Dependencies (H5P Service)

| Paket | Version | Lizenz | Kommerzielle Nutzung | Beschreibung |
|-------|---------|--------|----------------------|--------------|
| express | ^4.18.2 | MIT | Ja | Web Framework |
| cors | ^2.8.5 | MIT | Ja | CORS Middleware |

> **Implementation Note:** Vereinfachter H5P Service ohne externe GPL-3.0 Libraries. Alle Editoren und Player sind proprietäre HTML/CSS/JS Implementierungen unter MIT-kompatibler Lizenz.

#### H5P Content Types (Proprietäre Implementation)

| Content Type | Status | Beschreibung |
|--------------|--------|--------------|
| Quiz (Question Set) | ✅ | Multiple-Choice Tests mit Feedback |
| Interactive Video | ✅ | Videos mit zeitbasierten Interaktionen (YouTube, Vimeo, MP4) |
| Course Presentation | ✅ | Multi-Slide Präsentationen mit Navigation |
| Flashcards | ✅ | Lernkarten zum Wiederholen |
| Timeline | ✅ | Chronologische Zeitstrahle |
| Drag and Drop | ✅ | Zuordnungsaufgaben mit HTML5 Drag API |
| Fill in the Blanks | ✅ | Lückentexte mit automatischer Korrektur |
| Memory Game | ✅ | Klassisches Memory-Spiel |

#### H5P Service Architecture

| Komponente | Technologie | Lizenz |
|------------|-------------|--------|
| Server | Express.js | MIT |
| Editors | HTML5/CSS3/Vanilla JS | Proprietär (BreakPilot) |
| Players | HTML5/CSS3/Vanilla JS | Proprietär (BreakPilot) |
| Storage | LocalStorage (Browser) | N/A |
| Video Integration | YouTube/Vimeo iFrame API | Proprietär (API Terms) |

> **Compliance Note:** Keine GPL-3.0 Dependencies. Vollständig kommerziell nutzbar ohne Copyleft-Verpflichtungen.

### 13.3 AI Content Generator (Python/FastAPI)

| Eigenschaft | Wert |
|-------------|------|
| **Framework** | FastAPI |
| **Base Image** | python:3.11-slim |
| **Lizenz** | MIT License (Dependencies) / Proprietär (Code) |
| **Port** | 8004 |
| **Status** | Produktionsbereit |

#### Hauptfunktion
Automatische Generierung aller 8 H5P Content-Typen aus hochgeladenen Lernmaterialien mittels Claude AI und YouTube-Integration.

#### Python Dependencies (AI Content Generator)

| Paket | Version | Lizenz | Kommerzielle Nutzung | Beschreibung |
|-------|---------|--------|----------------------|--------------|
| fastapi | ^0.115.6 | MIT | Ja | Web Framework |
| uvicorn | ^0.34.0 | BSD-3-Clause | Ja | ASGI Server |
| anthropic | ^0.42.0 | MIT | Ja | Claude API Client |
| youtube-transcript-api | ^0.6.3 | MIT | Ja | YouTube Transkript-Extraktion |
| PyPDF2 | ^3.0.1 | BSD-3-Clause | Ja | PDF Text-Extraktion |
| Pillow | ^11.0.0 | HPND | Ja | Image Processing |
| pytesseract | ^0.3.14 | Apache-2.0 | Ja | OCR Text Recognition |
| python-docx | ^1.1.2 | MIT | Ja | Word Document Processing |
| mammoth | ^1.8.0 | BSD-2-Clause | Ja | DOCX to Text Conversion |
| python-multipart | ^0.0.20 | Apache-2.0 | Ja | File Upload Handling |

#### System Dependencies

| Komponente | Lizenz | Kommerzielle Nutzung | Beschreibung |
|------------|--------|----------------------|--------------|
| Tesseract OCR | Apache-2.0 | Ja | Optical Character Recognition Engine |
| Poppler Utils | GPL-2.0 | Ja (nicht modifiziert) | PDF Rendering Library |

#### Externe APIs (Cloud Services)

| Service | Verwendung | Kosten | Lizenz/Terms |
|---------|------------|--------|--------------|
| Anthropic Claude API | Content-Generierung | Pay-per-use | [Anthropic Terms](https://www.anthropic.com/legal/commercial-terms) |
| YouTube Data API (optional) | Video-Suche | Kostenlos (Quota) | [YouTube API Terms](https://developers.google.com/youtube/terms) |
| YouTube Transcript API | Transkript-Abruf | Kostenlos | Public API |

#### Generierte Content-Typen

| Content Type | Input | AI-Technologie |
|--------------|-------|----------------|
| Quiz | Lernmaterialien | Claude (Sonnet 4.5) |
| Interactive Video | YouTube URL + Transkript | Claude + Transcript API |
| Course Presentation | Lernmaterialien | Claude (Sonnet 4.5) |
| Flashcards | Lernmaterialien | Claude (Sonnet 4.5) |
| Timeline | Lernmaterialien | Claude (Sonnet 4.5) |
| Drag and Drop | Lernmaterialien | Claude (Sonnet 4.5) |
| Fill in the Blanks | Lernmaterialien | Claude (Sonnet 4.5) |
| Memory Game | Lernmaterialien | Claude (Sonnet 4.5) |

#### Material-Analyse Capabilities

| Dateityp | Processing Library | Extraction Method |
|----------|-------------------|-------------------|
| PDF | PyPDF2 | Text Extraction |
| PNG/JPG | Pillow + Tesseract | OCR (Optical Character Recognition) |
| DOCX | python-docx / mammoth | Document Parsing |
| TXT | Python stdlib | Plain Text Reading |

> **Compliance Note:** Alle Dependencies sind MIT, BSD oder Apache-2.0 lizenziert. Tesseract und Poppler werden als unveränderter Binary verwendet (GPL-Compliance gegeben). Anthropic Claude API erfordert kommerzielle Lizenz.

> **Cost Note:** Anthropic Claude API ist kostenpflichtig (Pay-per-token). YouTube Data API hat kostenlose Quota-Limits.

### 13.4 MinIO S3 Storage

| Eigenschaft | Wert |
|-------------|------|
| **Image** | minio/minio:latest |
| **Ports** | 9000 (API), 9001 (Console) |
| **Lizenz** | AGPL-3.0 |
| **Verwendung** | Media File Storage (Videos, PDFs, Images) |

> **AGPL-3.0**: Kommerzielle Nutzung erlaubt. Wenn MinIO modifiziert und als Service angeboten wird, müssen Änderungen unter AGPL veröffentlicht werden.

### 13.5 Content Database (PostgreSQL)

| Eigenschaft | Wert |
|-------------|------|
| **Image** | postgres:16-alpine |
| **Port** | 5433 (external), 5432 (internal) |
| **Lizenz** | PostgreSQL License |
| **Database** | breakpilot_content |

### Content Platform Features

| Feature | Status | Beschreibung |
|---------|--------|--------------|
| **Content CRUD** | ✅ | Create, Read, Update, Delete für Educational Content |
| **Creative Commons Licensing** | ✅ | CC-BY, CC-BY-SA, CC-BY-NC, CC-BY-NC-SA, CC0 |
| **H5P Interactive Content** | ✅ | Self-hosted H5P Editor & Player |
| **Matrix Feed Integration** | ✅ | Automatisches Publishing zu Matrix Spaces |
| **Rating System** | ✅ | 5-Star Ratings mit Kommentaren |
| **Download Tracking** | ✅ | Analytics & Impact Scoring |
| **DSGVO Compliance** | ✅ | Data Minimization, IP Anonymization |
| **S3 File Storage** | ✅ | MinIO für Videos, PDFs, Bilder |

### Supported Content Types

| Content Type | Format | Beschreibung |
|--------------|--------|--------------|
| VIDEO | MP4, WebM | Video Content |
| PDF | PDF | PDF Documents |
| IMAGE_GALLERY | JPG, PNG, WebP | Image Collections |
| MARKDOWN | .md | Markdown Documents |
| AUDIO | MP3, OGG, WebM | Audio Files |
| H5P | .h5p | Interactive H5P Packages |

### Creative Commons Licenses

| License | Beschreibung | Commercial Use |
|---------|--------------|----------------|
| CC-BY-4.0 | Attribution | ✅ |
| CC-BY-SA-4.0 | Attribution + ShareAlike | ✅ (Recommended) |
| CC-BY-NC-4.0 | Attribution + NonCommercial | ⚠️ |
| CC-BY-NC-SA-4.0 | Attribution + NonCommercial + ShareAlike | ⚠️ |
| CC0-1.0 | Public Domain | ✅ |

### Content Categories

| Category | Beschreibung |
|----------|--------------|
| MOVEMENT | Bewegungspausen & Physical Activities |
| MATH | Mathematik-Übungen |
| STEAM | Science, Technology, Engineering, Arts, Math |
| LANGUAGE | Sprachlernen |
| ARTS | Kreative Künste |
| SOCIAL | Social-Emotional Learning |
| MINDFULNESS | Achtsamkeit & Meditation |

### Security & Privacy (Content Service)

| Feature | Status | Beschreibung |
|---------|--------|--------------|
| **Data Minimization** | ✅ | Nur notwendige Metadaten gespeichert |
| **IP Anonymization** | ✅ | IP-Adressen nach 7 Tagen anonymisiert |
| **User Data Export** | ✅ | DSGVO-konformer Datenexport |
| **Account Deletion** | ✅ | Vollständige Datenlöschung möglich |
| **No Student Data** | ✅ | Keine Schülerdaten erfasst |
| **JWT Authentication** | 🔜 | OAuth2 via consent-service (pending) |
| **HTTPS/TLS** | 🔜 | Production requirement |

### Docker Volumes

| Volume | Verwendung |
|--------|------------|
| minio_data | Object Storage für Media Files |
| content_db_data | PostgreSQL Database |
| h5p_content | H5P Content Files |

> **Lizenz-Compliance:** Die Content Service Plattform nutzt hauptsächlich MIT/Apache-2.0 lizenzierte Komponenten. H5P Libraries sind unter GPL-3.0, was kommerzielle Nutzung erlaubt.

---

## Aktualisierungsprotokoll

| Datum | Änderung | Verantwortlich |
|-------|----------|----------------|
| 2025-12-14 | Initiale SBOM erstellt | Claude Code |
| 2025-12-14 | LibreChat hinzugefügt | Claude Code |
| 2025-12-15 | Matrix Synapse hinzugefügt (AGPL-3.0) | Claude Code |
| 2025-12-15 | PostgreSQL für Synapse-DB hinzugefügt | Claude Code |
| 2025-12-15 | Jitsi Meet hinzugefügt (Apache-2.0) | Claude Code |
| 2025-12-15 | Go Dependencies aktualisiert (gin-gonic/gin, jackc/pgx) | Claude Code |
| 2025-12-15 | Python Dependencies aktualisiert (mammoth, python-docx für DSR) | Claude Code |
| 2025-12-15 | LLM Platform Komponenten hinzugefügt (vLLM, Ollama, Llama 3.1, Mistral) | Claude Code |
| 2025-12-15 | Tool-Integrationen Sektion hinzugefügt (Tavily) | Claude Code |
| 2025-12-16 | Education Search Service hinzugefügt (OpenSearch, goquery, pdf) | Claude Code |
| 2025-12-17 | Legal Crawler Modul hinzugefügt (beautifulsoup4) | Claude Code |
| 2025-12-17 | Alle 16 Bundesländer Schulgesetz-Quellen dokumentiert | Claude Code |
| 2025-12-29 | ERPNext hinzugefügt (GPLv3, Frappe Framework) | Claude Code |
| 2025-12-29 | MariaDB 10.6 für ERPNext hinzugefügt (GPL-2.0) | Claude Code |
| 2025-12-29 | Redis Cache & Queue für ERPNext hinzugefügt | Claude Code |
| 2025-12-30 | Content Service hinzugefügt (FastAPI, H5P, MinIO) | Claude Code |
| 2025-12-30 | H5P Service vereinfacht: Proprietäre Editoren/Players ohne GPL-3.0 | Claude Code |
| 2025-12-30 | Alle 8 H5P Content-Typen implementiert (Quiz, Video, Presentation, etc.) | Claude Code |
| 2025-12-30 | Creative Commons Licensing System dokumentiert | Claude Code |
| 2025-12-30 | Matrix Feed Integration für Content Publishing | Claude Code |
| 2025-12-30 | AI Content Generator Service hinzugefügt (Claude API, YouTube Transcript) | Claude Code |
| 2025-12-30 | Material-Analyse implementiert (PDF, DOCX, Images mit OCR) | Claude Code |
| 2025-12-30 | Automatische H5P-Generierung für alle 8 Content-Typen | Claude Code |
| 2026-01-09 | Keycloak-Integration (Hybrid-Auth) hinzugefügt | Claude Code |
| 2026-01-09 | PyJWKClient für JWKS-Validierung dokumentiert | Claude Code |
| 2026-01-09 | HashiCorp Vault für Secrets-Management hinzugefügt | Claude Code |
| 2026-01-09 | Sicherheitsaudit: Hardcodierte Secrets entfernt | Claude Code |
| 2026-01-09 | DevSecOps-Stack integriert (Gitleaks, Semgrep, Trivy, Syft/Grype) | Claude Code |
| 2026-01-09 | Pre-Commit Security Hooks aktualisiert (Bandit, Semgrep) | Claude Code |
| 2026-01-10 | Sektion 7a: Typografie & Schriftarten hinzugefügt | Claude Code |
| 2026-01-10 | Inter Font (OFL-1.1) als primäre Schrift dokumentiert | Claude Code |
| 2026-01-10 | E-Mail-sichere Schriften und Icon-Fonts dokumentiert | Claude Code |
| 2026-01-10 | Compliance-Checkliste für Typografie erstellt | Claude Code |
| 2026-02-08 | Sektion 15: Klausur-Service RAG System hinzugefügt | Claude Code |
| 2026-02-08 | Model Cards für BAAI/bge-m3 und bge-reranker-v2-m3 dokumentiert | Claude Code |
| 2026-02-08 | MS MARCO Modelle als nicht empfohlen markiert (Lizenzproblem) | Claude Code |
| 2026-02-08 | PyMuPDF aus Default-Build entfernt (AGPL-3.0) | Claude Code |
| 2026-02-08 | HyDE/Self-RAG Datenschutz-Warnungen dokumentiert | Claude Code |
| 2026-02-08 | RAG Feature-Status-Tabelle hinzugefügt (implementiert vs. aktiv vs. extern) | Claude Code |

---

## 13. HashiCorp Vault (Secrets Management)

### Vault Server

| Komponente | Version | Lizenz | Verwendung |
|------------|---------|--------|------------|
| **HashiCorp Vault** | 1.15 | [BSL 1.1](https://github.com/hashicorp/vault/blob/main/LICENSE) | Secrets-Management |
| **hvac** (Python Client) | 2.1.0 | [Apache-2.0](https://github.com/hvac/hvac/blob/main/LICENSE.txt) | Python Vault Client |

### Lizenz-Hinweis

HashiCorp Vault ist unter der **Business Source License 1.1 (BSL 1.1)** lizenziert:
- **Kostenlose Nutzung** für alle Zwecke (einschließlich kommerzielle) erlaubt
- **Einzige Einschränkung**: Vault darf nicht als Hosted/Managed Service angeboten werden
- Nach 4 Jahren wechselt die Lizenz automatisch zu Open Source (MPL 2.0)

Für BreakPilot ist die Nutzung vollständig konform, da Vault nur intern verwendet wird.

### Konfiguration

| Feature | Status | Beschreibung |
|---------|--------|--------------|
| **KV v2 Engine** | ✅ | Key-Value Secrets mit Versionierung |
| **AppRole Auth** | ✅ | Service-to-Service Authentication |
| **Token Auth** | ✅ | Development Mode |
| **Kubernetes Auth** | 🔜 | Für K8s Deployments |
| **TLS/mTLS** | 🔜 | Production Requirement |

### Gespeicherte Secrets

| Pfad | Typ | Beschreibung |
|------|-----|--------------|
| `secret/breakpilot/api_keys/anthropic` | API Key | Anthropic Claude API |
| `secret/breakpilot/api_keys/vast` | API Key | vast.ai GPU |
| `secret/breakpilot/api_keys/stripe` | API Key | Stripe Payments |
| `secret/breakpilot/database/postgres` | Credentials | PostgreSQL |
| `secret/breakpilot/auth/jwt` | Secret | JWT Signing Keys |
| `secret/breakpilot/auth/keycloak` | Secret | Keycloak Client |
| `secret/breakpilot/communication/matrix` | Token | Matrix Access Token |
| `secret/breakpilot/communication/jitsi` | Secret | Jitsi Auth Secrets |
| `secret/breakpilot/storage/minio` | Credentials | MinIO Object Storage |

### Docker Volumes

| Volume | Verwendung |
|--------|------------|
| vault_data | Vault Storage Backend |
| vault_logs | Audit Logs |

### Sicherheitsfeatures

| Feature | Status | Beschreibung |
|---------|--------|--------------|
| **Audit Logging** | ✅ | Alle Zugriffe werden geloggt |
| **Secret Rotation** | 🔜 | Automatische Key-Rotation |
| **Dynamic Secrets** | 🔜 | Kurzlebige Database Credentials |
| **Seal/Unseal** | ✅ | Verschlüsselung im Ruhezustand |

> **Wichtig**: In Produktion müssen alle Placeholder-Secrets durch echte Werte ersetzt werden!
> Secrets niemals in Git committen!

---

## 14. DevSecOps Tools (Security Scanning)

BreakPilot verwendet einen umfassenden DevSecOps-Stack fuer kontinuierliche Security-Pruefungen.

### Secrets Detection

| Tool | Version | Lizenz | Verwendung |
|------|---------|--------|------------|
| **Gitleaks** | 8.18.x | [MIT](https://github.com/gitleaks/gitleaks/blob/master/LICENSE) | Pre-commit, CI/CD Secrets Detection |
| **detect-secrets** | 1.4.x | [Apache-2.0](https://github.com/Yelp/detect-secrets/blob/master/LICENSE) | Baseline Secrets Detection |

### Static Application Security Testing (SAST)

| Tool | Version | Lizenz | Verwendung |
|------|---------|--------|------------|
| **Semgrep** | 1.52.x | [LGPL-2.1](https://github.com/returntocorp/semgrep/blob/develop/LICENSE) | Multi-Language SAST |
| **Bandit** | 1.7.x | [Apache-2.0](https://github.com/PyCQA/bandit/blob/main/LICENSE) | Python Security Linting |

### Software Composition Analysis (SCA)

| Tool | Version | Lizenz | Verwendung |
|------|---------|--------|------------|
| **Trivy** | 0.48.x | [Apache-2.0](https://github.com/aquasecurity/trivy/blob/main/LICENSE) | Vulnerability & Misconfiguration Scanning |
| **Grype** | 0.74.x | [Apache-2.0](https://github.com/anchore/grype/blob/main/LICENSE) | Vulnerability Scanner |
| **OWASP Dependency-Check** | 9.x | [Apache-2.0](https://github.com/jeremylong/DependencyCheck/blob/main/LICENSE.txt) | CVE/NVD Dependency Check |

### SBOM Generation

| Tool | Version | Lizenz | Verwendung |
|------|---------|--------|------------|
| **Syft** | 0.100.x | [Apache-2.0](https://github.com/anchore/syft/blob/main/LICENSE) | SBOM Generation (CycloneDX, SPDX) |

### Dynamic Application Security Testing (DAST)

| Tool | Version | Lizenz | Verwendung |
|------|---------|--------|------------|
| **OWASP ZAP** | 2.14.x | [Apache-2.0](https://github.com/zaproxy/zaproxy/blob/main/LICENSE) | Web Application Scanner |

### Lizenz-Compliance

Alle DevSecOps-Tools sind unter permissiven Open-Source-Lizenzen veroeffentlicht:

| Lizenz | Tools | Verpflichtungen |
|--------|-------|-----------------|
| **MIT** | Gitleaks | Copyright-Hinweis beibehalten |
| **Apache-2.0** | Trivy, Grype, Syft, Bandit, ZAP, Dependency-Check, detect-secrets | Lizenz/Copyright beibehalten, Aenderungen dokumentieren |
| **LGPL-2.1** | Semgrep | Bei Aenderungen am Semgrep-Code: Source bereitstellen |

### Konfigurationsdateien

| Datei | Beschreibung |
|-------|--------------|
| `.gitleaks.toml` | Gitleaks Regeln & Allowlists |
| `.semgrep.yml` | Custom SAST Rules |
| `.trivy.yaml` | Trivy Scan-Konfiguration |
| `.trivyignore` | Akzeptierte Vulnerabilities |
| `.pre-commit-config.yaml` | Pre-Commit Hook Definitionen |
| `scripts/security-scan.sh` | Manuelles Security-Scan Script |

### Dokumentation

Siehe: [docs/architecture/devsecops.md](docs/architecture/devsecops.md)

---

## 15. Klausur-Service RAG System (Educational Document Retrieval)

| Eigenschaft | Wert |
|-------------|------|
| **Name** | BreakPilot Klausur-Service RAG |
| **Version** | 2.1.0 |
| **Status** | Produktionsbereit |
| **Sprache** | Python 3.11+ |
| **Lizenz** | Proprietär (BreakPilot) |
| **Verwendungszweck** | RAG für Abitur-Erwartungshorizonte (Niedersachsen) |

### 15.1 ML Models (Model Cards)

> **Wichtig:** Alle Standard-ML-Modelle sind für kommerzielle Nutzung freigegeben.

#### Embedding Model

| Eigenschaft | Wert |
|-------------|------|
| **Name** | BAAI/bge-m3 |
| **Repository** | https://huggingface.co/BAAI/bge-m3 |
| **Lizenz** | MIT |
| **Dimensionen** | 1024 |
| **Max Token** | 8192 |
| **Sprachen** | Multilingual (inkl. Deutsch) |
| **Kommerzielle Nutzung** | ✅ Ja |
| **Status** | Default (aktiv) |

#### Re-Ranking Model

| Eigenschaft | Wert |
|-------------|------|
| **Name** | BAAI/bge-reranker-v2-m3 |
| **Repository** | https://huggingface.co/BAAI/bge-reranker-v2-m3 |
| **Lizenz** | Apache-2.0 |
| **Kommerzielle Nutzung** | ✅ Ja |
| **Status** | Default (aktiv) |

#### Alternatve Embedding Models (Optional)

| Modell | Lizenz | Dimensionen | Empfehlung |
|--------|--------|-------------|------------|
| all-MiniLM-L6-v2 | Apache-2.0 | 384 | ✅ Fallback/Development |
| deepset/mxbai-embed-de-large-v1 | Apache-2.0 | 1024 | ✅ German-only deployments |
| jinaai/jina-embeddings-v2-base-de | Apache-2.0 | 768 | ✅ German/English |
| intfloat/multilingual-e5-large | MIT | 1024 | ✅ Multilingual |

#### Nicht empfohlene Modelle (Lizenzprobleme)

| Modell | Lizenz | Problem |
|--------|--------|---------|
| cross-encoder/ms-marco-* | Apache-2.0 | ⚠️ MS MARCO Trainingsdaten sind nur für nicht-kommerzielle Nutzung freigegeben |
| PyMuPDF/fitz | AGPL-3.0 | ⚠️ AGPL erfordert Open-Source-Veröffentlichung oder kommerzielle Lizenz |

### 15.2 Python Dependencies (Klausur-Service)

| Paket | Version | Lizenz | Kommerzielle Nutzung | Beschreibung |
|-------|---------|--------|----------------------|--------------|
| sentence-transformers | >=2.2.0 | Apache-2.0 | Ja | Embedding & Re-Ranking |
| torch | >=2.0.0 | BSD-3-Clause | Ja | ML Framework (CPU-only) |
| pypdf | >=4.0.0 | BSD-3-Clause | Ja | PDF-Extraktion (Default) |
| unstructured | >=0.12.0 | Apache-2.0 | Ja | PDF-Extraktion (Tabellen) |
| qdrant-client | >=1.7.0 | Apache-2.0 | Ja | Vector Database Client |
| httpx | >=0.26.0 | BSD-3-Clause | Ja | Async HTTP Client |
| FastAPI | >=0.109.0 | MIT | Ja | Web Framework |
| cryptography | >=41.0.0 | Apache-2.0/BSD | Ja | AES-256-GCM Verschlüsselung |

> **Hinweis:** PyMuPDF ist NICHT im Default-Build enthalten (AGPL-3.0). Falls benötigt, separat installieren und AGPL-Compliance sicherstellen.

### 15.3 RAG Feature Status

| Feature | Implementiert | Standardmäßig Aktiv | Sendet Daten extern |
|---------|--------------|---------------------|---------------------|
| **Local Embeddings** | ✅ | ✅ | ❌ Nein |
| **Local Re-Ranking** | ✅ | ✅ | ❌ Nein |
| **Semantic Chunking** | ✅ | ✅ | ❌ Nein |
| **Hybrid Search (BM25)** | ✅ | ✅ | ❌ Nein |
| **HyDE** | ✅ | ❌ | ⚠️ Ja (LLM APIs) |
| **Self-RAG** | ✅ | ❌ | ⚠️ Ja (OpenAI API) |
| **RAG Evaluation** | ✅ | ⚠️ Teilweise | ⚠️ Optional (LLM) |

### 15.4 Datenschutz-Hinweise (Privacy Notes)

| Kategorie | Status | Beschreibung |
|-----------|--------|--------------|
| **Embeddings** | ✅ Lokal | Keine Daten werden an externe Server gesendet |
| **Re-Ranking** | ✅ Lokal | Cross-Encoder läuft komplett lokal |
| **PDF-Extraktion** | ✅ Lokal | pypdf/unstructured laufen lokal |
| **Hybrid Search** | ✅ Lokal | BM25 läuft komplett lokal |
| **HyDE** | ⚠️ Opt-in | Bei Aktivierung: Queries an LLM APIs (OpenAI/Anthropic) |
| **Self-RAG** | ⚠️ Opt-in | Bei Aktivierung: Dokumente + Queries an OpenAI |
| **Indexierte Daten** | ✅ | Nur Erwartungshorizonte, keine Schülerdaten |

### 15.5 Konfiguration (Environment Variables)

| Variable | Default | Beschreibung |
|----------|---------|--------------|
| `EMBEDDING_BACKEND` | `local` | Embedding-Backend (local/openai) |
| `LOCAL_EMBEDDING_MODEL` | `BAAI/bge-m3` | Lokales Embedding-Modell |
| `RERANKER_BACKEND` | `local` | Re-Ranking Backend (local/cohere) |
| `LOCAL_RERANKER_MODEL` | `BAAI/bge-reranker-v2-m3` | Lokales Re-Ranking Modell |
| `PDF_EXTRACTION_BACKEND` | `auto` | PDF-Backend (auto/unstructured/pypdf) |
| `HYDE_ENABLED` | `false` | HyDE aktivieren (⚠️ sendet Daten extern) |
| `SELF_RAG_ENABLED` | `false` | Self-RAG aktivieren (⚠️ sendet Daten extern) |
| `HYBRID_SEARCH_ENABLED` | `true` | Hybrid Search aktivieren |
| `CHUNKING_STRATEGY` | `semantic` | Chunking-Strategie (semantic/recursive) |

### 15.6 API Endpoints

| Endpoint | Methode | Beschreibung |
|----------|---------|--------------|
| `/api/v1/admin/rag/system-info` | GET | System-Info mit Lizenzen und Feature-Status |
| `/api/v1/admin/nibis/search` | POST | RAG-Suche mit optionalem Re-Ranking |
| `/api/v1/admin/rag/collections` | GET | Liste aller RAG Collections |
| `/api/v1/admin/nibis/ingest` | POST | Dokument-Indexierung starten |
| `/api/v1/admin/rag/metrics` | GET | RAG-Qualitätsmetriken |

### 15.7 Compliance-Checkliste (Klausur-Service RAG)

- [x] Alle Standard-ML-Modelle sind MIT/Apache-2.0 lizenziert
- [x] MS MARCO-basierte Modelle wurden durch bge-reranker-v2-m3 ersetzt
- [x] PyMuPDF (AGPL) ist nicht im Default-Build enthalten
- [x] HyDE/Self-RAG sind standardmäßig deaktiviert (Datenschutz)
- [x] Alle Embedding-/Re-Ranking-Operationen laufen lokal
- [x] System-Info Endpoint dokumentiert Lizenzen und Feature-Status
- [x] Keine Schülerdaten werden indexiert

---

## Kontakt

Bei Fragen zur Lizenz-Compliance:
- E-Mail: legal@breakpilot.app
- Repository: https://github.com/breakpilot/breakpilot-pwa

---

## 16. OCR Grid Detection System (klausur-service)

| Eigenschaft | Wert |
|-------------|------|
| **Name** | BreakPilot OCR Grid Detection |
| **Version** | 4.0 |
| **Status** | Produktiv |
| **Sprache** | Python 3.11+ / TypeScript |
| **Lizenz** | Proprietär (BreakPilot) |
| **Verwendungszweck** | OCR-Analyse von Vokabeltabellen mit mm-Koordinaten |

### Python Dependencies (Grid Detection)

| Paket | Version | Lizenz | Kommerzielle Nutzung | Beschreibung |
|-------|---------|--------|----------------------|--------------|
| NumPy | ≥2.0.0 | BSD-3-Clause | Ja | Deskew-Berechnung (polyfit/lineare Regression) |
| OpenCV | ≥4.8.0 | Apache-2.0 | Ja | Bildverarbeitung (optional) |

### Frontend Dependencies (Worksheet Editor Integration)

| Paket | Version | Lizenz | Kommerzielle Nutzung | Beschreibung |
|-------|---------|--------|----------------------|--------------|
| Fabric.js | 6.x | MIT | Ja | Canvas-Rendering für Wortpositionierung |

### Features

| Feature | Status | Beschreibung |
|---------|--------|--------------|
| **mm-Koordinatensystem** | ✅ | A4-Format (210x297mm) |
| **Deskew-Korrektur** | ✅ | Automatische Ausrichtung schiefer Scans |
| **1mm Column Margin** | ✅ | Spalten beginnen 1mm vor erstem Wort |
| **Spalten-Erkennung** | ✅ | Englisch/Deutsch/Beispiel automatisch erkannt |
| **Editor-Integration** | ✅ | Export/Import via localStorage |

### Lizenz-Compliance

- [x] NumPy ist BSD-3-Clause lizenziert (kommerziell nutzbar)
- [x] OpenCV ist Apache-2.0 lizenziert (kommerziell nutzbar)
- [x] Fabric.js ist MIT lizenziert (kommerziell nutzbar)
- [x] Alle Verarbeitung erfolgt lokal (keine Daten an externe Server)

| 2026-02-08 | OCR Grid Detection System (v4) hinzugefügt | Claude Code |
| 2026-02-08 | Fabric.js für Worksheet Editor Integration dokumentiert | Claude Code |
| 2026-02-08 | Deskew-Korrektur und mm-Koordinatensystem dokumentiert | Claude Code |
