- CLAUDE.md: Comprehensive documentation for Lehrer KI platform - docs-src: Klausur, Voice, Agent-Core, KI-Pipeline docs - mkdocs.yml: Lehrer-specific nav with blue theme - docker-compose: Added docs service (port 8010, profile: docs) - .claude/rules: testing, docs, open-source, abiturkorrektur, vocab-worksheet, multi-agent, experimental-dashboard Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
615 lines
23 KiB
Markdown
615 lines
23 KiB
Markdown
# Abiturkorrektur-System - Entwicklerdokumentation
|
|
|
|
**WICHTIG: Diese Datei wird bei jedem Compacting gelesen. Alle Implementierungsdetails hier dokumentieren!**
|
|
|
|
---
|
|
|
|
## 1. Projektziel
|
|
|
|
Entwicklung eines KI-gestützten Korrektur-Systems für Deutsch-Abiturklausuren:
|
|
- **Zielgruppe**: Lehrer in Niedersachsen (Pilot), später alle Bundesländer
|
|
- **Kernproblem**: Erstkorrektur dauert 6 Stunden pro Arbeit
|
|
- **Lösung**: KI schlägt Bewertungen vor, Lehrer bestätigt/korrigiert
|
|
|
|
---
|
|
|
|
## 2. Architektur-Übersicht
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Frontend (Next.js) │
|
|
│ /website/app/admin/klausur-korrektur/ │
|
|
│ - page.tsx (Klausur-Liste) │
|
|
│ - [klausurId]/page.tsx (Studenten-Liste) │
|
|
│ - [klausurId]/[studentId]/page.tsx (Korrektur-Workspace) │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ klausur-service (FastAPI) │
|
|
│ Port 8086 - /klausur-service/backend/main.py │
|
|
│ - Klausur CRUD (/api/v1/klausuren) │
|
|
│ - Student Work (/api/v1/students) │
|
|
│ - Annotations (/api/v1/annotations) [NEU] │
|
|
│ - Gutachten Generation │
|
|
│ - Fairness Analysis │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Infrastruktur │
|
|
│ - Qdrant (Vektor-DB für RAG) │
|
|
│ - MinIO (Datei-Storage) │
|
|
│ - PostgreSQL (Metadaten) │
|
|
│ - Embedding-Service (Port 8087) │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Bestehende Backend-Komponenten (NUTZEN!)
|
|
|
|
### 3.1 Klausur-Service API (main.py)
|
|
|
|
```python
|
|
# Bereits implementiert:
|
|
GET/POST /api/v1/klausuren # Klausur CRUD
|
|
GET /api/v1/klausuren/{id} # Klausur Details
|
|
POST /api/v1/klausuren/{id}/students # Student Work hochladen
|
|
GET /api/v1/klausuren/{id}/students # Studenten-Liste
|
|
PUT /api/v1/students/{id}/criteria # Kriterien bewerten
|
|
PUT /api/v1/students/{id}/gutachten # Gutachten speichern
|
|
POST /api/v1/students/{id}/gutachten/generate # Gutachten generieren (KI)
|
|
GET /api/v1/klausuren/{id}/fairness # Fairness-Analyse
|
|
GET /api/v1/grade-info # Notensystem-Info
|
|
```
|
|
|
|
### 3.2 Datenmodelle (main.py)
|
|
|
|
```python
|
|
@dataclass
|
|
class Klausur:
|
|
id: str
|
|
title: str
|
|
subject: str = "Deutsch"
|
|
year: int = 2025
|
|
semester: str = "Abitur"
|
|
modus: str = "abitur" # oder "vorabitur"
|
|
eh_id: Optional[str] = None # Erwartungshorizont-Referenz
|
|
|
|
@dataclass
|
|
class StudentKlausur:
|
|
id: str
|
|
klausur_id: str
|
|
anonym_id: str
|
|
file_path: str
|
|
ocr_text: str = ""
|
|
criteria_scores: Dict[str, int] = field(default_factory=dict)
|
|
gutachten: str = ""
|
|
status: str = "UPLOADED"
|
|
raw_points: int = 0
|
|
grade_points: int = 0
|
|
|
|
# Status-Workflow:
|
|
# UPLOADED → OCR_PROCESSING → OCR_COMPLETE → ANALYZING →
|
|
# FIRST_EXAMINER → SECOND_EXAMINER → COMPLETED
|
|
```
|
|
|
|
### 3.3 Notensystem (15-Punkte)
|
|
|
|
```python
|
|
GRADE_THRESHOLDS = {
|
|
15: 95, 14: 90, 13: 85, 12: 80, 11: 75,
|
|
10: 70, 9: 65, 8: 60, 7: 55, 6: 50,
|
|
5: 45, 4: 40, 3: 33, 2: 27, 1: 20, 0: 0
|
|
}
|
|
|
|
DEFAULT_CRITERIA = {
|
|
"rechtschreibung": {"name": "Rechtschreibung", "weight": 15},
|
|
"grammatik": {"name": "Grammatik", "weight": 15},
|
|
"inhalt": {"name": "Inhalt", "weight": 40},
|
|
"struktur": {"name": "Struktur", "weight": 15},
|
|
"stil": {"name": "Stil", "weight": 15}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 4. NEU ZU IMPLEMENTIEREN
|
|
|
|
### Phase 1: Korrektur-Workspace MVP
|
|
|
|
#### 4.1 Frontend-Struktur
|
|
|
|
```
|
|
/website/app/admin/klausur-korrektur/
|
|
├── page.tsx # Klausur-Übersicht (Liste aller Klausuren)
|
|
├── types.ts # TypeScript Interfaces
|
|
├── [klausurId]/
|
|
│ ├── page.tsx # Studenten-Liste einer Klausur
|
|
│ └── [studentId]/
|
|
│ └── page.tsx # Korrektur-Workspace (2/3-1/3)
|
|
└── components/
|
|
├── KlausurCard.tsx # Klausur in Liste
|
|
├── StudentList.tsx # Studenten-Übersicht
|
|
├── DocumentViewer.tsx # PDF/Bild-Anzeige (links, 2/3)
|
|
├── AnnotationLayer.tsx # SVG-Overlay für Markierungen
|
|
├── AnnotationToolbar.tsx # Werkzeuge
|
|
├── CorrectionPanel.tsx # Bewertungs-Panel (rechts, 1/3)
|
|
├── CriteriaScoreCard.tsx # Einzelnes Kriterium
|
|
├── EHSuggestionPanel.tsx # EH-Vorschläge via RAG
|
|
├── GutachtenEditor.tsx # Gutachten bearbeiten
|
|
└── StudentNavigation.tsx # Prev/Next Navigation
|
|
```
|
|
|
|
#### 4.2 Annotations-Backend (NEU in main.py)
|
|
|
|
```python
|
|
# Neues Datenmodell:
|
|
@dataclass
|
|
class Annotation:
|
|
id: str
|
|
student_work_id: str
|
|
page: int
|
|
position: dict # {x, y, width, height} in % (0-100)
|
|
type: str # 'rechtschreibung' | 'grammatik' | 'inhalt' | 'struktur' | 'stil' | 'comment'
|
|
text: str # Kommentar-Text
|
|
severity: str # 'minor' | 'major' | 'critical'
|
|
suggestion: str # Korrekturvorschlag (bei RS/Gram)
|
|
created_by: str # User-ID (EK oder ZK)
|
|
created_at: datetime
|
|
role: str # 'first_examiner' | 'second_examiner'
|
|
linked_criterion: Optional[str] # Verknüpfung zu Kriterium
|
|
|
|
# Neue Endpoints:
|
|
POST /api/v1/students/{id}/annotations # Erstellen
|
|
GET /api/v1/students/{id}/annotations # Abrufen
|
|
PUT /api/v1/annotations/{id} # Ändern
|
|
DELETE /api/v1/annotations/{id} # Löschen
|
|
```
|
|
|
|
#### 4.3 UI-Layout Spezifikation
|
|
|
|
```
|
|
┌──────────────────────────────────────────────────────────────────────┐
|
|
│ Header: Klausur-Titel | Student: Anonym-123 | [← Prev] [5/24] [Next →]│
|
|
├─────────────────────────────────────────┬────────────────────────────┤
|
|
│ │ Tabs: [Kriterien] [Gutachten]│
|
|
│ ┌─────────────────────────────────┐ │ │
|
|
│ │ │ │ ▼ Rechtschreibung (15%) │
|
|
│ │ Dokument-Anzeige │ │ [====|====] 70/100 │
|
|
│ │ (PDF/Bild mit Zoom) │ │ 12 Fehler markiert │
|
|
│ │ │ │ │
|
|
│ │ + Annotation-Overlay │ │ ▼ Grammatik (15%) │
|
|
│ │ (SVG Layer) │ │ [====|====] 80/100 │
|
|
│ │ │ │ │
|
|
│ │ │ │ ▼ Inhalt (40%) │
|
|
│ │ │ │ [====|====] 65/100 │
|
|
│ │ │ │ EH-Vorschläge: [Laden] │
|
|
│ └─────────────────────────────────┘ │ │
|
|
│ │ ▼ Struktur (15%) │
|
|
│ Toolbar: [RS] [Gram] [Kommentar] │ [====|====] 75/100 │
|
|
│ [Zoom+] [Zoom-] [Fit] │ │
|
|
│ │ ▼ Stil (15%) │
|
|
│ Seiten: [1] [2] [3] [4] [5] │ [====|====] 70/100 │
|
|
│ │ │
|
|
│ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━ │
|
|
│ │ Gesamtnote: 10 Punkte (2-) │
|
|
│ │ [Gutachten generieren] │
|
|
│ │ [Speichern] [Abschließen] │
|
|
├─────────────────────────────────────────┴────────────────────────────┤
|
|
│ 2/3 Breite │ 1/3 Breite │
|
|
└──────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 5. Implementierungs-Reihenfolge
|
|
|
|
### Phase 1.1: Grundgerüst (AKTUELL)
|
|
1. ✅ Dokumentation erstellen
|
|
2. [ ] `/website/app/admin/klausur-korrektur/page.tsx` - Klausur-Liste
|
|
3. [ ] `/website/app/admin/klausur-korrektur/types.ts` - TypeScript Types
|
|
4. [ ] Navigation in AdminLayout.tsx hinzufügen
|
|
5. [ ] Deploy + Test
|
|
|
|
### Phase 1.2: Korrektur-Workspace
|
|
1. [ ] `[klausurId]/page.tsx` - Studenten-Liste
|
|
2. [ ] `[klausurId]/[studentId]/page.tsx` - Workspace
|
|
3. [ ] `components/DocumentViewer.tsx` - Bild/PDF Anzeige
|
|
4. [ ] `components/CorrectionPanel.tsx` - Bewertungs-Panel
|
|
5. [ ] Deploy + Test mit Lehrer
|
|
|
|
### Phase 1.3: Annotations-System
|
|
1. [ ] Backend: Annotations-Endpoints in main.py
|
|
2. [ ] `components/AnnotationLayer.tsx` - SVG Overlay
|
|
3. [ ] `components/AnnotationToolbar.tsx` - Werkzeuge
|
|
4. [ ] Farbkodierung: RS=rot, Gram=blau, Inhalt=grün
|
|
5. [ ] Deploy + Test
|
|
|
|
### Phase 1.4: EH-Integration
|
|
1. [ ] `components/EHSuggestionPanel.tsx`
|
|
2. [ ] Backend: `/api/v1/students/{id}/eh-suggestions`
|
|
3. [ ] RAG-Query mit Student-Text
|
|
4. [ ] Deploy + Test
|
|
|
|
### Phase 1.5: Gutachten-Editor
|
|
1. [ ] `components/GutachtenEditor.tsx`
|
|
2. [ ] Beleg-Verlinkung zu Annotations
|
|
3. [ ] Gutachten-Generierung Button
|
|
4. [ ] Deploy + Test
|
|
|
|
---
|
|
|
|
## 6. API-Konfiguration
|
|
|
|
```typescript
|
|
// Frontend API Base URLs
|
|
const KLAUSUR_SERVICE = process.env.NEXT_PUBLIC_KLAUSUR_SERVICE_URL || 'http://localhost:8086'
|
|
|
|
// Endpoints:
|
|
// Klausuren
|
|
GET ${KLAUSUR_SERVICE}/api/v1/klausuren
|
|
POST ${KLAUSUR_SERVICE}/api/v1/klausuren
|
|
GET ${KLAUSUR_SERVICE}/api/v1/klausuren/{id}
|
|
GET ${KLAUSUR_SERVICE}/api/v1/klausuren/{id}/students
|
|
|
|
// Studenten
|
|
GET ${KLAUSUR_SERVICE}/api/v1/students/{id}
|
|
GET ${KLAUSUR_SERVICE}/api/v1/students/{id}/file // Dokument-Download
|
|
PUT ${KLAUSUR_SERVICE}/api/v1/students/{id}/criteria
|
|
PUT ${KLAUSUR_SERVICE}/api/v1/students/{id}/gutachten
|
|
POST ${KLAUSUR_SERVICE}/api/v1/students/{id}/gutachten/generate
|
|
|
|
// Annotations (NEU)
|
|
GET ${KLAUSUR_SERVICE}/api/v1/students/{id}/annotations
|
|
POST ${KLAUSUR_SERVICE}/api/v1/students/{id}/annotations
|
|
PUT ${KLAUSUR_SERVICE}/api/v1/annotations/{id}
|
|
DELETE ${KLAUSUR_SERVICE}/api/v1/annotations/{id}
|
|
|
|
// System
|
|
GET ${KLAUSUR_SERVICE}/api/v1/grade-info
|
|
```
|
|
|
|
---
|
|
|
|
## 7. Deployment-Prozess
|
|
|
|
```bash
|
|
# 1. Dateien auf Mac Mini synchronisieren
|
|
rsync -avz --delete \
|
|
--exclude 'node_modules' --exclude '.next' --exclude '.git' \
|
|
/Users/benjaminadmin/Projekte/breakpilot-pwa/website/ \
|
|
macmini:/Users/benjaminadmin/Projekte/breakpilot-pwa/website/
|
|
|
|
# 2. Website-Container neu bauen
|
|
ssh macmini "/usr/local/bin/docker compose \
|
|
-f /Users/benjaminadmin/Projekte/breakpilot-pwa/docker-compose.yml \
|
|
build --no-cache website"
|
|
|
|
# 3. Container neu starten
|
|
ssh macmini "/usr/local/bin/docker compose \
|
|
-f /Users/benjaminadmin/Projekte/breakpilot-pwa/docker-compose.yml \
|
|
up -d website"
|
|
|
|
# 4. Testen unter:
|
|
# http://macmini:3000/admin/klausur-korrektur
|
|
```
|
|
|
|
---
|
|
|
|
## 8. Bundesland-Spezifika (Niedersachsen Pilot)
|
|
|
|
```json
|
|
// /klausur-service/backend/policies/bundeslaender.json
|
|
{
|
|
"NI": {
|
|
"name": "Niedersachsen",
|
|
"grading_mode": "points_15",
|
|
"requires_gutachten": true,
|
|
"zk_visibility": "full", // ZK sieht EK-Korrektur
|
|
"third_correction_threshold": 4, // Ab 4 Punkte Diff
|
|
"colors": {
|
|
"first_examiner": "#dc2626", // Rot
|
|
"second_examiner": "#16a34a" // Grün
|
|
},
|
|
"criteria_weights": {
|
|
"rechtschreibung": 15,
|
|
"grammatik": 15,
|
|
"inhalt": 40,
|
|
"struktur": 15,
|
|
"stil": 15
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 9. Wichtige Dateien (Referenz)
|
|
|
|
| Datei | Beschreibung |
|
|
|-------|--------------|
|
|
| `/klausur-service/backend/main.py` | Haupt-API, alle Endpoints |
|
|
| `/klausur-service/backend/eh_pipeline.py` | BYOEH Verarbeitung |
|
|
| `/klausur-service/backend/qdrant_service.py` | RAG Vector-Suche |
|
|
| `/klausur-service/backend/hybrid_search.py` | Hybrid Search |
|
|
| `/website/components/admin/AdminLayout.tsx` | Admin Navigation |
|
|
| `/website/app/admin/ocr-labeling/page.tsx` | Referenz für 2/3-1/3 Layout |
|
|
|
|
---
|
|
|
|
## 10. Testing-Checkliste
|
|
|
|
### Nach jeder Phase:
|
|
- [ ] Seite lädt ohne Fehler
|
|
- [ ] API-Calls funktionieren (DevTools Network)
|
|
- [ ] Responsives Layout korrekt
|
|
- [ ] Lehrer kann Workflow durchführen
|
|
|
|
### Lehrer-Test-Szenarien:
|
|
1. Klausur erstellen
|
|
2. 3+ Studentenarbeiten hochladen
|
|
3. Erste Arbeit korrigieren (alle Kriterien)
|
|
4. Annotations setzen
|
|
5. Gutachten generieren
|
|
6. Zur nächsten Arbeit navigieren
|
|
7. Fairness-Check nach allen Arbeiten
|
|
|
|
---
|
|
|
|
## 11. Phase 2: Zweitkorrektur-System (NEU)
|
|
|
|
### 11.1 Neue Backend-Endpoints (main.py)
|
|
|
|
```python
|
|
# Zweitkorrektur Workflow
|
|
POST /api/v1/students/{id}/start-zweitkorrektur # ZK starten (nach EK)
|
|
POST /api/v1/students/{id}/submit-zweitkorrektur # ZK-Ergebnis abgeben
|
|
|
|
# Einigung (bei Diff 3 Punkte)
|
|
POST /api/v1/students/{id}/einigung # Einigung einreichen
|
|
|
|
# Drittkorrektur (bei Diff >= 4 Punkte)
|
|
POST /api/v1/students/{id}/assign-drittkorrektor # DK zuweisen
|
|
POST /api/v1/students/{id}/submit-drittkorrektur # DK-Ergebnis (final)
|
|
|
|
# Workflow-Status & Visibility-Filtering
|
|
GET /api/v1/students/{id}/examiner-workflow # Workflow-Status abrufen
|
|
GET /api/v1/students/{id}/annotations-filtered # Policy-gefilterte Annotations
|
|
```
|
|
|
|
### 11.2 Workflow-Status
|
|
|
|
```python
|
|
class ExaminerWorkflowStatus(str, Enum):
|
|
NOT_STARTED = "not_started"
|
|
EK_IN_PROGRESS = "ek_in_progress"
|
|
EK_COMPLETED = "ek_completed"
|
|
ZK_ASSIGNED = "zk_assigned"
|
|
ZK_IN_PROGRESS = "zk_in_progress"
|
|
ZK_COMPLETED = "zk_completed"
|
|
EINIGUNG_REQUIRED = "einigung_required"
|
|
EINIGUNG_COMPLETED = "einigung_completed"
|
|
DRITTKORREKTUR_REQUIRED = "drittkorrektur_required"
|
|
DRITTKORREKTUR_ASSIGNED = "drittkorrektur_assigned"
|
|
DRITTKORREKTUR_IN_PROGRESS = "drittkorrektur_in_progress"
|
|
COMPLETED = "completed"
|
|
```
|
|
|
|
### 11.3 Visibility-Regeln (aus bundeslaender.json)
|
|
|
|
| Modus | ZK sieht EK-Annotations | ZK sieht EK-Note | ZK sieht EK-Gutachten |
|
|
|-------|-------------------------|------------------|----------------------|
|
|
| `blind` | Nein | Nein | Nein |
|
|
| `semi` (Bayern) | Ja | Nein | Nein |
|
|
| `full` (NI, Default) | Ja | Ja | Ja |
|
|
|
|
### 11.4 Konsens-Regeln
|
|
|
|
| Differenz EK-ZK | Aktion |
|
|
|-----------------|--------|
|
|
| 0-2 Punkte | Auto-Konsens (Durchschnitt) |
|
|
| 3 Punkte | Einigung erforderlich |
|
|
| >= 4 Punkte | Drittkorrektur erforderlich |
|
|
|
|
---
|
|
|
|
## 12. Aktueller Stand
|
|
|
|
**Datum**: 2026-01-21
|
|
**Phase**: Alle Phasen abgeschlossen
|
|
**Status**: MVP komplett - bereit fuer Produktionstest
|
|
|
|
### Abgeschlossen:
|
|
- [x] Phase 1: Korrektur-Workspace MVP
|
|
- [x] Phase 1.1: Grundgerüst (Klausur-Liste, Studenten-Liste)
|
|
- [x] Phase 1.2: Annotations-System
|
|
- [x] Phase 1.3: RS/Grammatik Overlays
|
|
- [x] Phase 1.4: EH-Vorschläge via RAG
|
|
- [x] Phase 2.1 Backend: Zweitkorrektur-Endpoints
|
|
- [x] Phase 2.2 Backend: Einigung-Endpoint
|
|
- [x] Phase 2.3 Backend: Drittkorrektur-Trigger
|
|
- [x] Phase 2.1 Frontend: ZK-Modus UI
|
|
- [x] Phase 2.2 Frontend: Einigung-Screen
|
|
- [x] Phase 3.1: Fairness-Dashboard Frontend
|
|
- [x] Phase 3.2: Ausreißer-Liste mit Quick-Adjust
|
|
- [x] Phase 3.3: Noten-Histogramm & Heatmap
|
|
- [x] Phase 4.1: PDF-Export Backend (reportlab)
|
|
- [x] Phase 4.2: PDF-Export Frontend
|
|
- [x] Phase 4.3: Vorabitur-Modus mit EH-Templates
|
|
|
|
### URLs:
|
|
- Klausur-Korrektur: `/admin/klausur-korrektur`
|
|
- Fairness-Dashboard: `/admin/klausur-korrektur/[klausurId]/fairness`
|
|
|
|
### PDF-Export Endpoints:
|
|
- `GET /api/v1/students/{id}/export/gutachten` - Einzelnes Gutachten als PDF
|
|
- `GET /api/v1/students/{id}/export/annotations` - Anmerkungen als PDF
|
|
- `GET /api/v1/klausuren/{id}/export/overview` - Notenübersicht als PDF
|
|
- `GET /api/v1/klausuren/{id}/export/all-gutachten` - Alle Gutachten als PDF
|
|
|
|
### Vorabitur-Modus Endpoints:
|
|
- `GET /api/v1/vorabitur/templates` - Liste aller EH-Templates
|
|
- `GET /api/v1/vorabitur/templates/{aufgabentyp}` - Template-Details
|
|
- `POST /api/v1/klausuren/{id}/vorabitur-eh` - Custom EH erstellen
|
|
- `GET /api/v1/klausuren/{id}/vorabitur-eh` - Verknuepften EH abrufen
|
|
- `PUT /api/v1/klausuren/{id}/vorabitur-eh` - EH aktualisieren
|
|
|
|
### Verfuegbare Aufgabentypen:
|
|
- `textanalyse_pragmatisch` - Sachtexte, Reden, Kommentare
|
|
- `gedichtanalyse` - Lyrik/Gedichte
|
|
- `prosaanalyse` - Romane, Kurzgeschichten
|
|
- `dramenanalyse` - Dramatische Texte
|
|
- `eroerterung_textgebunden` - Textgebundene Eroerterung
|
|
|
|
---
|
|
|
|
## 13. Lehrer-Anleitung (Schritt-fuer-Schritt)
|
|
|
|
### 13.1 Zugang zum System
|
|
|
|
**Weg 1: Ueber das Haupt-Dashboard**
|
|
1. Oeffnen Sie `http://macmini:8000/app` im Browser
|
|
2. Klicken Sie auf die Kachel "Abiturklausuren"
|
|
3. Sie werden automatisch zur Korrektur-Oberflaeche weitergeleitet
|
|
|
|
**Weg 2: Direkter Zugang**
|
|
1. Oeffnen Sie direkt `http://macmini:3000/admin/klausur-korrektur`
|
|
|
|
### 13.2 Zwei Einstiegs-Optionen
|
|
|
|
Beim ersten Besuch sehen Sie die Willkommens-Seite mit zwei Optionen:
|
|
|
|
#### Option A: Schnellstart (Direkt hochladen)
|
|
- Ideal wenn Sie sofort loslegen moechten
|
|
- Keine manuelle Klausur-Erstellung erforderlich
|
|
- System erstellt automatisch eine Klausur im Hintergrund
|
|
|
|
**Schritte:**
|
|
1. Klicken Sie auf "Schnellstart - Direkt hochladen"
|
|
2. **Schritt 1**: Ziehen Sie Ihre eingescannten Arbeiten (PDF/JPG/PNG) in den Upload-Bereich
|
|
3. **Schritt 2**: Optional - Waehlen Sie den Aufgabentyp und beschreiben Sie die Aufgabenstellung
|
|
4. **Schritt 3**: Pruefen Sie die Zusammenfassung und klicken "Korrektur starten"
|
|
5. Sie werden automatisch zur Korrektur-Ansicht weitergeleitet
|
|
|
|
#### Option B: Neue Klausur erstellen (Standard)
|
|
- Empfohlen fuer regelmaessige Nutzung
|
|
- Volle Metadaten (Fach, Jahr, Kurs, Modus)
|
|
- Unterstuetzt Zweitkorrektur-Workflow
|
|
|
|
**Schritte:**
|
|
1. Klicken Sie auf "Neue Klausur erstellen"
|
|
2. Geben Sie Titel, Fach, Jahr und Semester ein
|
|
3. Waehlen Sie den Modus:
|
|
- **Abitur**: Fuer offizielle Abitur-Pruefungen mit NiBiS-EH
|
|
- **Vorabitur**: Fuer Uebungsklausuren mit eigenem EH
|
|
4. Bei Vorabitur: Waehlen Sie Aufgabentyp und beschreiben Sie die Aufgabenstellung
|
|
5. Klicken Sie "Klausur erstellen"
|
|
|
|
### 13.3 Arbeiten hochladen
|
|
|
|
Nach Erstellung der Klausur:
|
|
1. Oeffnen Sie die Klausur aus der Liste
|
|
2. Klicken Sie "Arbeiten hochladen"
|
|
3. Waehlen Sie die eingescannten Dateien (PDF oder Bilder)
|
|
4. Geben Sie optional anonyme IDs (z.B. "Arbeit-1", "Arbeit-2")
|
|
5. Das System startet automatisch die OCR-Erkennung
|
|
|
|
### 13.4 Korrigieren
|
|
|
|
**Korrektur-Workspace (2/3-1/3 Layout):**
|
|
- Links (2/3): Das Originaldokument mit Zoom-Funktion
|
|
- Rechts (1/3): Bewertungspanel mit Kriterien
|
|
|
|
**Schritt fuer Schritt:**
|
|
1. Oeffnen Sie eine Arbeit durch Klick auf "Korrigieren"
|
|
2. Lesen Sie die Arbeit im linken Bereich (Zoom mit +/-)
|
|
3. Setzen Sie Anmerkungen durch Klick auf das Dokument
|
|
4. Waehlen Sie den Anmerkungstyp:
|
|
- **RS** (rot): Rechtschreibfehler
|
|
- **Gram** (blau): Grammatikfehler
|
|
- **Inhalt** (gruen): Inhaltliche Anmerkungen
|
|
- **Kommentar**: Allgemeine Bemerkungen
|
|
5. Bewerten Sie die 5 Kriterien im rechten Panel:
|
|
- Rechtschreibung (15%)
|
|
- Grammatik (15%)
|
|
- Inhalt (40%)
|
|
- Struktur (15%)
|
|
- Stil (15%)
|
|
6. Klicken Sie "EH-Vorschlaege laden" fuer KI-Unterstuetzung
|
|
7. Klicken Sie "Gutachten generieren" fuer einen KI-Vorschlag
|
|
8. Bearbeiten Sie das Gutachten nach Bedarf
|
|
9. Klicken Sie "Speichern" und dann "Naechste Arbeit"
|
|
|
|
### 13.5 Fairness-Analyse
|
|
|
|
Nach Korrektur mehrerer Arbeiten:
|
|
1. Klicken Sie auf "Fairness-Dashboard" in der Klausur-Ansicht
|
|
2. Pruefen Sie:
|
|
- **Noten-Histogramm**: Ist die Verteilung realistisch?
|
|
- **Ausreisser**: Gibt es ungewoehnlich hohe/niedrige Noten?
|
|
- **Kriterien-Heatmap**: Sind Kriterien konsistent bewertet?
|
|
3. Nutzen Sie "Quick-Adjust" um Anpassungen vorzunehmen
|
|
|
|
### 13.6 PDF-Export
|
|
|
|
1. In der Klausur-Ansicht klicken Sie "PDF-Export"
|
|
2. Waehlen Sie:
|
|
- **Einzelgutachten**: PDF fuer einen Schueler
|
|
- **Alle Gutachten**: Gesamtes PDF fuer alle Arbeiten
|
|
- **Notenuebersicht**: Uebersicht aller Noten
|
|
- **Anmerkungen**: Alle Annotationen als PDF
|
|
|
|
### 13.7 Zweitkorrektur (Optional)
|
|
|
|
Fuer offizielle Abitur-Klausuren:
|
|
1. Erstkorrektur abschliessen (Status: "Abgeschlossen")
|
|
2. Klicken Sie "Zweitkorrektur starten"
|
|
3. Der Zweitkorrektor bewertet unabhaengig
|
|
4. Bei Differenz >= 3 Punkte: Einigung erforderlich
|
|
5. Bei Differenz >= 4 Punkte: Drittkorrektur wird automatisch ausgeloest
|
|
|
|
### 13.8 Haeufige Fragen
|
|
|
|
**F: Kann ich eine Korrektur unterbrechen und spaeter fortsetzen?**
|
|
A: Ja, alle Aenderungen werden automatisch gespeichert.
|
|
|
|
**F: Was passiert mit meinen Daten?**
|
|
A: Alle Daten werden lokal auf dem Schulserver gespeichert. Keine Cloud-Speicherung.
|
|
|
|
**F: Kann ich den KI-Vorschlag komplett ueberschreiben?**
|
|
A: Ja, das Gutachten ist frei editierbar. Der KI-Vorschlag ist nur ein Startpunkt.
|
|
|
|
**F: Wie funktioniert die OCR-Erkennung?**
|
|
A: Das System erkennt Handschrift automatisch. Bei schlechter Lesbarkeit koennen Sie manuell nachbessern.
|
|
|
|
---
|
|
|
|
## 14. Integration Dashboard (Port 8000)
|
|
|
|
### 14.1 Aenderungen in dashboard.py
|
|
|
|
Die Funktion `openKlausurService()` wurde aktualisiert:
|
|
|
|
```javascript
|
|
// Alte Version: Oeffnete Port 8086 (Backend)
|
|
// Neue Version: Oeffnet Port 3000 (Next.js Frontend)
|
|
function openKlausurService() {
|
|
let baseUrl;
|
|
if (window.location.hostname === 'macmini') {
|
|
baseUrl = 'http://macmini:3000';
|
|
} else {
|
|
baseUrl = 'http://localhost:3000';
|
|
}
|
|
window.open(baseUrl + '/admin/klausur-korrektur', '_blank');
|
|
}
|
|
```
|
|
|
|
### 14.2 Neue Frontend-Features
|
|
|
|
- **Willkommens-Tab**: Erster Tab fuer neue Benutzer mit Workflow-Erklaerung
|
|
- **Direktupload-Wizard**: 3-Schritt-Wizard fuer Schnellstart
|
|
- **Drag & Drop**: Arbeiten per Drag & Drop hochladen
|
|
- **localStorage-Persistenz**: System merkt sich wiederkehrende Benutzer
|