A previous `git pull --rebase origin main` dropped 177 local commits,
losing 3400+ files across admin-v2, backend, studio-v2, website,
klausur-service, and many other services. The partial restore attempt
(660295e2) only recovered some files.
This commit restores all missing files from pre-rebase ref 98933f5e
while preserving post-rebase additions (night-scheduler, night-mode UI,
NightModeWidget dashboard integration).
Restored features include:
- AI Module Sidebar (FAB), OCR Labeling, OCR Compare
- GPU Dashboard, RAG Pipeline, Magic Help
- Klausur-Korrektur (8 files), Abitur-Archiv (5+ files)
- Companion, Zeugnisse-Crawler, Screen Flow
- Full backend, studio-v2, website, klausur-service
- All compliance SDKs, agent-core, voice-service
- CI/CD configs, documentation, scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
401 lines
11 KiB
Markdown
401 lines
11 KiB
Markdown
# Zeugnis-System Dokumentation
|
|
|
|
## Übersicht
|
|
|
|
Das Zeugnis-System ist ein umfassendes Modul für die Verwaltung und Nutzung von Zeugnisverordnungen aller 16 deutschen Bundesländer. Es besteht aus drei Hauptkomponenten:
|
|
|
|
1. **Rights-Aware Crawler** - Automatische Sammlung von Verordnungen
|
|
2. **Training Dashboard** - Steuerung und Überwachung von KI-Trainingsprozessen
|
|
3. **Lehrer-Frontend** - Intuitive Benutzeroberfläche für Lehrkräfte
|
|
|
|
---
|
|
|
|
## Inhaltsverzeichnis
|
|
|
|
1. [Architektur](#architektur)
|
|
2. [Rights-Aware Crawler](#rights-aware-crawler)
|
|
3. [Training Dashboard](#training-dashboard)
|
|
4. [Lehrer-Frontend](#lehrer-frontend)
|
|
5. [API-Referenz](#api-referenz)
|
|
6. [Deployment](#deployment)
|
|
|
|
---
|
|
|
|
## Architektur
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ Frontend (Next.js) │
|
|
├─────────────────┬─────────────────┬─────────────────────────────┤
|
|
│ /admin/training │ /admin/zeugnis │ /zeugnisse (Lehrer) │
|
|
│ Dashboard │ Crawler Admin │ Assistent │
|
|
└────────┬────────┴────────┬────────┴────────┬────────────────────┘
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ API Proxy (/api/admin/...) │
|
|
└────────────────────────────┬────────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ Klausur-Service (FastAPI, Port 8086) │
|
|
├─────────────────┬─────────────────┬─────────────────────────────┤
|
|
│ zeugnis_api.py │ zeugnis_ │ zeugnis_models.py │
|
|
│ (Endpoints) │ crawler.py │ (Datenmodelle) │
|
|
└────────┬────────┴────────┬────────┴────────┬────────────────────┘
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌────────────────┐ ┌───────────────┐ ┌───────────────────────────┐
|
|
│ PostgreSQL │ │ MinIO │ │ Qdrant │
|
|
│ (Metadata) │ │ (Dokumente) │ │ (Vektoren) │
|
|
└────────────────┘ └───────────────┘ └───────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Rights-Aware Crawler
|
|
|
|
### Konzept
|
|
|
|
Der Rights-Aware Crawler sammelt automatisch Zeugnisverordnungen und respektiert dabei die Urheberrechte:
|
|
|
|
- **Training erlaubt**: Amtliche Werke nach §5 UrhG
|
|
- **Training nicht erlaubt**: Dokumente ohne explizite Lizenzierung
|
|
|
|
### Bundesländer-Berechtigungen
|
|
|
|
| Bundesland | Training | Begründung |
|
|
|------------|----------|------------|
|
|
| Baden-Württemberg | ✅ Ja | Amtliches Werk |
|
|
| Bayern | ✅ Ja | Amtliches Werk |
|
|
| Berlin | ❌ Nein | Keine Lizenz |
|
|
| Brandenburg | ❌ Nein | Keine Lizenz |
|
|
| Bremen | ❌ Nein | Eingeschränkt |
|
|
| Hamburg | ❌ Nein | Keine Lizenz |
|
|
| Hessen | ✅ Ja | Amtliches Werk |
|
|
| Mecklenburg-Vorpommern | ❌ Nein | Eingeschränkt |
|
|
| Niedersachsen | ✅ Ja | Amtliches Werk |
|
|
| Nordrhein-Westfalen | ✅ Ja | Amtliches Werk |
|
|
| Rheinland-Pfalz | ✅ Ja | Amtliches Werk |
|
|
| Saarland | ❌ Nein | Keine Lizenz |
|
|
| Sachsen | ✅ Ja | Amtliches Werk |
|
|
| Sachsen-Anhalt | ❌ Nein | Eingeschränkt |
|
|
| Schleswig-Holstein | ✅ Ja | Amtliches Werk |
|
|
| Thüringen | ✅ Ja | Amtliches Werk |
|
|
|
|
### Admin-Oberfläche
|
|
|
|
**URL**: `/admin/zeugnisse-crawler`
|
|
|
|
#### Features:
|
|
- Übersicht aller 16 Bundesländer
|
|
- Training-Status pro Bundesland
|
|
- Crawler starten/stoppen
|
|
- Dokument-Browser
|
|
- Audit-Trail
|
|
|
|
#### Screenshot-Bereiche:
|
|
1. **Stats-Karten**: Gesamtdokumente, indexierte Dokumente, Training-erlaubt
|
|
2. **Bundesland-Tabelle**: Status, Dokumentanzahl, letzter Crawl
|
|
3. **Dokument-Liste**: Filterbar, mit Statusanzeige
|
|
|
|
### API-Endpunkte
|
|
|
|
```
|
|
GET /api/v1/admin/zeugnis/sources # Alle Bundesländer
|
|
POST /api/v1/admin/zeugnis/sources # Neue Quelle
|
|
PUT /api/v1/admin/zeugnis/sources/{id}/verify # Lizenz verifizieren
|
|
|
|
GET /api/v1/admin/zeugnis/crawler/status # Crawler-Status
|
|
POST /api/v1/admin/zeugnis/crawler/start # Crawler starten
|
|
POST /api/v1/admin/zeugnis/crawler/stop # Crawler stoppen
|
|
|
|
GET /api/v1/admin/zeugnis/documents # Dokumente abrufen
|
|
GET /api/v1/admin/zeugnis/stats # Statistiken
|
|
GET /api/v1/admin/zeugnis/audit/events # Audit-Trail
|
|
```
|
|
|
|
---
|
|
|
|
## Training Dashboard
|
|
|
|
### Konzept
|
|
|
|
Das Training Dashboard ermöglicht die vollständige Kontrolle über KI-Trainingsprozesse:
|
|
|
|
- Echtzeit-Monitoring von Trainingsjobs
|
|
- Konfiguration von Hyperparametern
|
|
- Visualisierung von Metriken (Loss, Precision, Recall, F1)
|
|
- Multi-Bundesland Training
|
|
|
|
**URL**: `/admin/training`
|
|
|
|
### Features
|
|
|
|
#### 1. Übersichtskarten
|
|
- Dokumente gesamt / indexiert
|
|
- Training-erlaubte Dokumente
|
|
- Heute gecrawlt / Fehler
|
|
|
|
#### 2. Training-Job-Karten
|
|
Jeder laufende Job zeigt:
|
|
- **Progress Ring**: Visueller Fortschritt (0-100%)
|
|
- **Epochen-Fortschritt**: Aktuelle / Gesamt
|
|
- **Dokument-Fortschritt**: Verarbeitet / Gesamt
|
|
- **Metriken**: Loss, Val Loss, Precision, F1
|
|
- **Loss-Chart**: Verlaufsgrafik
|
|
|
|
#### 3. Datensatz-Übersicht
|
|
- Verteilung nach Bundesland (Balkendiagramm)
|
|
- Verteilung nach Dokumenttyp
|
|
- Training-erlaubte Quote
|
|
|
|
#### 4. Neues Training starten (Wizard)
|
|
|
|
**Schritt 1 - Datenauswahl:**
|
|
- Checkbox-Grid für Bundesländer
|
|
- Nur Training-erlaubte wählbar
|
|
- Deaktivierte Anzeige für nicht-erlaubte
|
|
|
|
**Schritt 2 - Parameter:**
|
|
- Batch Size (Standard: 16)
|
|
- Learning Rate (Standard: 0.00005)
|
|
- Epochen (Standard: 10)
|
|
- Warmup Steps (Standard: 500)
|
|
- Mixed Precision (FP16) Toggle
|
|
|
|
**Schritt 3 - Bestätigung:**
|
|
- Zusammenfassung aller Einstellungen
|
|
- Geschätzte Trainingszeit
|
|
- Start-Button
|
|
|
|
### Training-Kontrolle
|
|
|
|
| Aktion | Beschreibung |
|
|
|--------|--------------|
|
|
| Pausieren | Training temporär unterbrechen |
|
|
| Fortsetzen | Pausiertes Training fortsetzen |
|
|
| Abbrechen | Training beenden (Daten bleiben) |
|
|
| Details | Erweiterte Metriken anzeigen |
|
|
|
|
---
|
|
|
|
## Lehrer-Frontend
|
|
|
|
### Konzept
|
|
|
|
Das Lehrer-Frontend bietet eine intuitive Oberfläche für Lehrkräfte zur Recherche in Zeugnisverordnungen.
|
|
|
|
**URL**: `/zeugnisse`
|
|
|
|
### Onboarding-Wizard
|
|
|
|
Beim ersten Besuch führt ein 4-stufiger Wizard durch die Einrichtung:
|
|
|
|
#### Schritt 1: Willkommen
|
|
- Vorstellung des Assistenten
|
|
- Feature-Übersicht (Suche, KI-Antworten, 16 Bundesländer)
|
|
|
|
#### Schritt 2: Bundesland
|
|
- Grid mit allen 16 Bundesländern
|
|
- Emoji-Icons für visuelle Zuordnung
|
|
- Auswahl speichert bevorzugtes Bundesland
|
|
|
|
#### Schritt 3: Schulform
|
|
- Auswahl der Schulform:
|
|
- Grundschule
|
|
- Hauptschule
|
|
- Realschule
|
|
- Gymnasium
|
|
- Gesamtschule
|
|
- Förderschule
|
|
- Berufsschule
|
|
|
|
#### Schritt 4: Fertig
|
|
- Zusammenfassung der Einstellungen
|
|
- Option zum Ändern
|
|
|
|
### Hauptfunktionen
|
|
|
|
#### Tab 1: Assistent (Chat)
|
|
- KI-gestützter Dialog
|
|
- Fragen in natürlicher Sprache
|
|
- Quellenangaben zu Antworten
|
|
- Vorgeschlagene Fragen
|
|
|
|
#### Tab 2: Suche
|
|
- Volltextsuche in Verordnungen
|
|
- Letzte Suchen (gespeichert)
|
|
- Häufige Fragen als Schnellauswahl
|
|
- Relevanz-Score pro Ergebnis
|
|
|
|
#### Tab 3: Dokumente
|
|
- Dokumenten-Browser
|
|
- Filterbar nach Bundesland
|
|
- Download-Möglichkeit
|
|
|
|
### Häufige Fragen (vordefiniert)
|
|
|
|
1. "Wie formuliere ich eine Bemerkung zur Arbeits- und Sozialverhalten?"
|
|
2. "Welche Noten dürfen im Zeugnis stehen?"
|
|
3. "Wann sind Zeugniskonferenzen durchzuführen?"
|
|
4. "Wie gehe ich mit Fehlzeiten um?"
|
|
5. "Welche Unterschriften sind erforderlich?"
|
|
6. "Wie werden Versetzungsentscheidungen dokumentiert?"
|
|
|
|
### Benutzereinstellungen
|
|
|
|
Gespeichert im localStorage:
|
|
- Bundesland
|
|
- Schulform
|
|
- Wizard-Status
|
|
- Favoriten
|
|
- Letzte Suchen
|
|
|
|
---
|
|
|
|
## API-Referenz
|
|
|
|
### Zeugnis-Crawler API
|
|
|
|
#### GET /api/v1/admin/zeugnis/sources
|
|
Listet alle Bundesland-Quellen.
|
|
|
|
**Response:**
|
|
```json
|
|
[
|
|
{
|
|
"id": "uuid",
|
|
"bundesland": "ni",
|
|
"name": "Niedersachsen",
|
|
"license_type": "gov_statute",
|
|
"training_allowed": true,
|
|
"verified_by": "admin@example.com",
|
|
"verified_at": "2024-01-15T10:00:00Z"
|
|
}
|
|
]
|
|
```
|
|
|
|
#### POST /api/v1/admin/zeugnis/crawler/start
|
|
Startet den Crawler.
|
|
|
|
**Request:**
|
|
```json
|
|
{
|
|
"bundesland": "ni", // Optional: Nur dieses Bundesland
|
|
"priority": 5 // 1-10, Standard: 5
|
|
}
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Crawler started"
|
|
}
|
|
```
|
|
|
|
#### GET /api/v1/admin/zeugnis/stats
|
|
Holt Statistiken.
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"total_sources": 16,
|
|
"total_documents": 632,
|
|
"indexed_documents": 489,
|
|
"training_allowed_documents": 423,
|
|
"active_crawls": 1,
|
|
"per_bundesland": [...]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Deployment
|
|
|
|
### Voraussetzungen
|
|
|
|
- Docker & Docker Compose
|
|
- PostgreSQL 16+
|
|
- Qdrant 1.12+
|
|
- MinIO
|
|
|
|
### Umgebungsvariablen
|
|
|
|
```env
|
|
# Klausur-Service
|
|
QDRANT_URL=http://qdrant:6333
|
|
MINIO_ENDPOINT=minio:9000
|
|
MINIO_ACCESS_KEY=breakpilot
|
|
MINIO_SECRET_KEY=breakpilot123
|
|
MINIO_BUCKET=breakpilot-rag
|
|
EMBEDDING_BACKEND=local # oder "openai"
|
|
|
|
# Website
|
|
KLAUSUR_SERVICE_URL=http://klausur-service:8086
|
|
```
|
|
|
|
### Docker Compose
|
|
|
|
```yaml
|
|
services:
|
|
qdrant:
|
|
image: qdrant/qdrant:v1.12.1
|
|
|
|
minio:
|
|
image: minio/minio:latest
|
|
|
|
klausur-service:
|
|
build: ./klausur-service
|
|
depends_on:
|
|
- qdrant
|
|
- minio
|
|
```
|
|
|
|
### Initialisierung
|
|
|
|
1. Container starten:
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
2. Datenbank initialisieren:
|
|
```bash
|
|
curl -X POST http://localhost:8086/api/v1/admin/zeugnis/init
|
|
```
|
|
|
|
3. Crawler starten:
|
|
```bash
|
|
curl -X POST http://localhost:8086/api/v1/admin/zeugnis/crawler/start
|
|
```
|
|
|
|
4. Frontend öffnen:
|
|
- Admin: http://localhost:3000/admin/zeugnisse-crawler
|
|
- Training: http://localhost:3000/admin/training
|
|
- Lehrer: http://localhost:3000/zeugnisse
|
|
|
|
---
|
|
|
|
## Sicherheit
|
|
|
|
### Datenschutz
|
|
|
|
- **Audit-Trail**: Alle Zugriffe werden protokolliert
|
|
- **DSGVO-Export**: `/api/v1/admin/zeugnis/audit/export`
|
|
- **Verschlüsselung**: Sensible Daten in MinIO verschlüsselt
|
|
|
|
### Rights Management
|
|
|
|
- Training nur mit expliziter Erlaubnis
|
|
- Lizenz-Verifizierung durch Admin
|
|
- Quellen-Nachverfolgung für alle Dokumente
|
|
|
|
---
|
|
|
|
## Support
|
|
|
|
Bei Fragen oder Problemen:
|
|
- GitHub Issues: https://github.com/...
|
|
- E-Mail: support@breakpilot.app
|