Files
breakpilot-lehrer/.claude/rules/abiturkorrektur.md
Benjamin Boenisch e22019b2d5 Add CLAUDE.md, MkDocs docs, .claude/rules
- 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>
2026-02-12 00:49:25 +01:00

23 KiB

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)

# 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)

@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)

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)

# 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

// 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

# 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)

// /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)

# 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

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:

  • Phase 1: Korrektur-Workspace MVP
  • Phase 1.1: Grundgerüst (Klausur-Liste, Studenten-Liste)
  • Phase 1.2: Annotations-System
  • Phase 1.3: RS/Grammatik Overlays
  • Phase 1.4: EH-Vorschläge via RAG
  • Phase 2.1 Backend: Zweitkorrektur-Endpoints
  • Phase 2.2 Backend: Einigung-Endpoint
  • Phase 2.3 Backend: Drittkorrektur-Trigger
  • Phase 2.1 Frontend: ZK-Modus UI
  • Phase 2.2 Frontend: Einigung-Screen
  • Phase 3.1: Fairness-Dashboard Frontend
  • Phase 3.2: Ausreißer-Liste mit Quick-Adjust
  • Phase 3.3: Noten-Histogramm & Heatmap
  • Phase 4.1: PDF-Export Backend (reportlab)
  • Phase 4.2: PDF-Export Frontend
  • 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:

// 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