🔧 Update: Database and Log Enhancements
**Änderungen:** - ✅ Aktualisierte Datenbankdateien (myp.db, myp.db-shm, myp.db-wal) zur Verbesserung der Datenintegrität und Performance. - ✅ Erweiterte Protokollierung in verschiedenen Log-Dateien (admin.log, admin_api.log, api.log, app.log, etc.) zur besseren Nachverfolgbarkeit von Systemereignissen und Fehlern. - ✅ Hinzugefügte Informationen zu Tapo-Steckdosen-Status und Fehlerbehandlung in den Protokollen. **Ergebnis:** - Verbesserte Datenbankleistung und -stabilität. - Erhöhte Transparenz und Nachvollziehbarkeit durch detaillierte Log-Einträge. 🤖 Generated with [Claude Code](https://claude.ai/code)
This commit is contained in:
649
DOCS/Schulung_Workflow_Gastzugang.md
Normal file
649
DOCS/Schulung_Workflow_Gastzugang.md
Normal file
@ -0,0 +1,649 @@
|
||||
# MYP Workflow-Dokumentation für Schulungspräsentation
|
||||
## Gastzugang und Druckauftragsverwaltung
|
||||
|
||||
---
|
||||
|
||||
## 📋 Workflow-Übersicht
|
||||
|
||||
Das MYP-System (Manage Your Printers) implementiert einen strukturierten Workflow für Gastbenutzer, der von der ersten Anfrage bis zur erfolgreichen Druckauftragsdurchführung reicht. Dieser Workflow gewährleistet sowohl Sicherheit als auch Benutzerfreundlichkeit in der Mercedes-Benz TBA Marienfelde Umgebung.
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Kompletter Workflow: Gast → Druckauftrag
|
||||
|
||||
### Phase 1: Gastzugang-Anfrage
|
||||
|
||||
#### 1.1 Gast stellt Anfrage
|
||||
**Endpunkt:** `/request` (öffentlich zugänglich)
|
||||
|
||||
```
|
||||
Gast besucht: https://myp.example.com/request
|
||||
```
|
||||
|
||||
**Eingabefelder:**
|
||||
- **Name** (Pflichtfeld)
|
||||
- **E-Mail-Adresse** (Pflichtfeld, Validierung)
|
||||
- **Grund der Anfrage** (Pflichtfeld, mind. 10 Zeichen)
|
||||
- **Telefonnummer** (optional)
|
||||
- **Gewünschte Zugangsdauer** (1-7 Tage)
|
||||
|
||||
**Validierungsregeln:**
|
||||
- E-Mail-Format-Prüfung
|
||||
- Duplikatsprüfung (gleiche E-Mail innerhalb 24h)
|
||||
- Mindestlänge für Begründung
|
||||
- Maximale Zugangsdauer begrenzt
|
||||
|
||||
**Systemverhalten:**
|
||||
```python
|
||||
# Automatische Aktionen nach Anfrage-Eingang
|
||||
1. Anfrage-ID generiert (unique)
|
||||
2. Status: "pending"
|
||||
3. Zeitstempel erstellt
|
||||
4. Admin-Benachrichtigung gesendet
|
||||
5. Bestätigungs-E-Mail an Gast (optional)
|
||||
```
|
||||
|
||||
#### 1.2 Bestätigung für Gast
|
||||
**Weiterleitung:** `/request/{request_id}`
|
||||
|
||||
Der Gast erhält eine Bestätigungsseite mit:
|
||||
- Anfrage-ID zum Nachverfolgen
|
||||
- Geschätzte Bearbeitungszeit
|
||||
- Kontaktinformationen bei Rückfragen
|
||||
- Status-Anzeige (Pending/Genehmigt/Abgelehnt)
|
||||
|
||||
---
|
||||
|
||||
### Phase 2: Administrative Genehmigung
|
||||
|
||||
#### 2.1 Admin-Benachrichtigung
|
||||
**Automatische Benachrichtigung:**
|
||||
- E-Mail an alle Administratoren
|
||||
- Dashboard-Benachrichtigung im System
|
||||
- Rot markierte Anfrage in Admin-Panel
|
||||
|
||||
#### 2.2 Admin-Prüfung
|
||||
**Admin-Panel:** `/admin/guest-requests`
|
||||
|
||||
**Verfügbare Informationen:**
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ Gastanfrage #42 │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ Name: Max Mustermann │
|
||||
│ E-Mail: max.mustermann@example.com │
|
||||
│ Telefon: +49 123 456789 │
|
||||
│ Grund: Prototyp für Kundenpräsentation drucken │
|
||||
│ Zugangsdauer: 3 Tage │
|
||||
│ Eingegangen: 15.06.2025 14:30 │
|
||||
│ Status: ⏳ Warten auf Genehmigung │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ [✅ Genehmigen] [❌ Ablehnen] [💬 Nachfrage] │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
#### 2.3 Genehmigungsentscheidung
|
||||
**Mögliche Aktionen:**
|
||||
|
||||
1. **Genehmigen:**
|
||||
```json
|
||||
POST /api/requests/{id}/approve
|
||||
{
|
||||
"access_duration_hours": 72,
|
||||
"notes": "Genehmigt für Kundenpräsentation"
|
||||
}
|
||||
```
|
||||
|
||||
2. **Ablehnen:**
|
||||
```json
|
||||
POST /api/requests/{id}/reject
|
||||
{
|
||||
"reason": "Unzureichende Begründung",
|
||||
"notes": "Bitte weitere Details angeben"
|
||||
}
|
||||
```
|
||||
|
||||
3. **Nachfrage stellen:**
|
||||
```json
|
||||
POST /api/requests/{id}/request-info
|
||||
{
|
||||
"question": "Welche Materialien sollen verwendet werden?"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 3: OTP-System und Anmeldung
|
||||
|
||||
#### 3.1 OTP-Generierung (bei Genehmigung)
|
||||
**Automatischer Prozess:**
|
||||
```python
|
||||
# System generiert One-Time Password
|
||||
otp_code = generate_secure_otp() # 6-stellig, numerisch
|
||||
expiry_time = now() + timedelta(hours=access_duration)
|
||||
|
||||
# E-Mail-Versand an Gast
|
||||
send_approval_email(
|
||||
email=guest_email,
|
||||
otp_code=otp_code,
|
||||
expiry_time=expiry_time,
|
||||
access_instructions=True
|
||||
)
|
||||
```
|
||||
|
||||
**E-Mail-Inhalt:**
|
||||
```
|
||||
Betreff: MYP Gastzugang genehmigt - TBA Marienfelde
|
||||
|
||||
Hallo Max Mustermann,
|
||||
|
||||
Ihr Gastzugang wurde genehmigt!
|
||||
|
||||
Zugangsdaten:
|
||||
- OTP-Code: 123456
|
||||
- Gültig bis: 18.06.2025 14:30
|
||||
- Login-URL: https://myp.example.com/auth/guest
|
||||
|
||||
Anweisungen:
|
||||
1. Rufen Sie die Login-URL auf
|
||||
2. Geben Sie Ihre E-Mail-Adresse ein
|
||||
3. Verwenden Sie den OTP-Code als Passwort
|
||||
4. Sie haben Zugang für 72 Stunden
|
||||
|
||||
Wichtige Hinweise:
|
||||
- Maximale Druckzeit pro Job: 4 Stunden
|
||||
- Unterstützte Dateiformate: STL, OBJ, 3MF, GCODE
|
||||
- Bei Problemen: support@tba-marienfelde.de
|
||||
|
||||
Mit freundlichen Grüßen
|
||||
Ihr MYP-Team
|
||||
```
|
||||
|
||||
#### 3.2 Gast-Anmeldung
|
||||
**Endpunkt:** `/auth/guest`
|
||||
|
||||
**Login-Prozess:**
|
||||
1. E-Mail-Adresse eingeben
|
||||
2. OTP-Code eingeben (anstatt Passwort)
|
||||
3. System validiert OTP und Gültigkeitsdauer
|
||||
4. Session mit eingeschränkten Rechten erstellt
|
||||
|
||||
**Session-Eigenschaften:**
|
||||
```python
|
||||
guest_session = {
|
||||
"user_type": "guest",
|
||||
"email": "max.mustermann@example.com",
|
||||
"expires_at": "2025-06-18T14:30:00",
|
||||
"permissions": ["create_job", "view_own_jobs"],
|
||||
"restrictions": {
|
||||
"max_print_duration": 240, # 4 Stunden
|
||||
"max_concurrent_jobs": 2,
|
||||
"allowed_materials": ["PLA", "PETG"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 4: Druckauftrag-Erstellung
|
||||
|
||||
#### 4.1 Job-Upload-Interface
|
||||
**Verfügbare Seiten für Gäste:**
|
||||
- `/jobs` - Job-Übersicht (nur eigene Jobs)
|
||||
- `/jobs/create` - Neuen Job erstellen
|
||||
- `/printers` - Drucker-Status (nur Ansicht)
|
||||
|
||||
#### 4.2 Job-Erstellung
|
||||
**Formular-Felder:**
|
||||
```html
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ Neuen Druckauftrag erstellen │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ Job-Name: [Kundenpräsentation Prototyp ] │
|
||||
│ Beschreibung: [Gehäuse für Elektronikmodul ] │
|
||||
│ │
|
||||
│ Datei-Upload: │
|
||||
│ ┌─────────────────────────────┐ │
|
||||
│ │ [📁] Datei auswählen │ .stl, .obj, .3mf │
|
||||
│ │ oder hier hineinziehen │ Max. 50MB │
|
||||
│ └─────────────────────────────┘ │
|
||||
│ │
|
||||
│ Geschätzte Druckdauer: [240] Minuten │
|
||||
│ Material: [PLA ▼] │
|
||||
│ Priorität: [Normal ▼] (Gast kann nur Normal) │
|
||||
│ │
|
||||
│ Gewünschter Starttermin: │
|
||||
│ [📅] [16.06.2025] [🕐] [09:00] │
|
||||
│ │
|
||||
│ [✅ Job erstellen] [❌ Abbrechen] │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Validierung:**
|
||||
```python
|
||||
# Gast-spezifische Validierungen
|
||||
def validate_guest_job(job_data, guest_session):
|
||||
checks = {
|
||||
"duration_check": job_data.duration <= 240, # Max 4h
|
||||
"file_size_check": job_data.file_size <= 50 * 1024 * 1024, # 50MB
|
||||
"concurrent_jobs": get_active_guest_jobs(guest_session.email) < 2,
|
||||
"access_validity": guest_session.expires_at > now(),
|
||||
"material_allowed": job_data.material in GUEST_ALLOWED_MATERIALS
|
||||
}
|
||||
return all(checks.values())
|
||||
```
|
||||
|
||||
#### 4.3 Automatische Drucker-Zuweisung
|
||||
**Intelligente Zuweisung:**
|
||||
```python
|
||||
def assign_printer_for_guest_job(job):
|
||||
available_printers = get_available_printers(
|
||||
time_slot=job.desired_start_time,
|
||||
duration=job.estimated_duration,
|
||||
material=job.material
|
||||
)
|
||||
|
||||
# Priorität für Gastjobs: kürzeste Wartezeit
|
||||
best_printer = min(available_printers,
|
||||
key=lambda p: p.estimated_queue_time)
|
||||
|
||||
return best_printer
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 5: Job-Genehmigung und Scheduling
|
||||
|
||||
#### 5.1 Admin-Genehmigung erforderlich
|
||||
**Alle Gast-Jobs benötigen Admin-Genehmigung:**
|
||||
|
||||
**Admin-Panel:** `/admin/jobs/pending`
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ Gast-Job wartet auf Genehmigung │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ Job: Kundenpräsentation Prototyp │
|
||||
│ Gast: Max Mustermann (max.mustermann@example.com) │
|
||||
│ Drucker: Prusa i3 MK3S #1 │
|
||||
│ Material: PLA │
|
||||
│ Dauer: 240 Minuten (4:00h) │
|
||||
│ Geplanter Start: 16.06.2025 09:00 │
|
||||
│ │
|
||||
│ Datei: gehaeuse_prototyp.stl (2.3 MB) │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ 🔍 Datei-Vorschau │ │
|
||||
│ │ ┌─────────────────────────────────────────────┐ │ │
|
||||
│ │ │ 3D-Modell Vorschau │ │ │
|
||||
│ │ │ [Wireframe-Darstellung des STL] │ │ │
|
||||
│ │ └─────────────────────────────────────────────┘ │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ [✅ Genehmigen] [❌ Ablehnen] [⚙️ Bearbeiten] │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
#### 5.2 Genehmigungsoptionen
|
||||
**Admin-Aktionen:**
|
||||
|
||||
1. **Direkt genehmigen:**
|
||||
```json
|
||||
POST /api/admin/jobs/{job_id}/approve
|
||||
{
|
||||
"approved": true,
|
||||
"notes": "Job genehmigt, Material verfügbar"
|
||||
}
|
||||
```
|
||||
|
||||
2. **Mit Änderungen genehmigen:**
|
||||
```json
|
||||
POST /api/admin/jobs/{job_id}/approve
|
||||
{
|
||||
"approved": true,
|
||||
"modifications": {
|
||||
"material": "PETG",
|
||||
"start_time": "2025-06-16T14:00:00",
|
||||
"printer_id": 3
|
||||
},
|
||||
"notes": "Auf PETG geändert, anderer Drucker zugewiesen"
|
||||
}
|
||||
```
|
||||
|
||||
3. **Ablehnen:**
|
||||
```json
|
||||
POST /api/admin/jobs/{job_id}/reject
|
||||
{
|
||||
"reason": "Datei fehlerhaft",
|
||||
"notes": "STL-Datei enthält nicht-druckbare Geometrien"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 6: Ausführung und Monitoring
|
||||
|
||||
#### 6.1 Automatisches Scheduling
|
||||
**Bei Genehmigung:**
|
||||
```python
|
||||
def schedule_approved_job(job):
|
||||
# Job in Warteschlange einreihen
|
||||
job.status = "scheduled"
|
||||
job.scheduled_start = calculate_optimal_start_time(job)
|
||||
|
||||
# E-Mail-Benachrichtigung an Gast
|
||||
send_job_approved_notification(
|
||||
email=job.guest_email,
|
||||
job_name=job.name,
|
||||
scheduled_start=job.scheduled_start,
|
||||
estimated_completion=job.scheduled_start + job.duration
|
||||
)
|
||||
|
||||
# Kalender-Eintrag erstellen
|
||||
create_calendar_event(
|
||||
title=f"Gast-Job: {job.name}",
|
||||
start_time=job.scheduled_start,
|
||||
duration=job.duration,
|
||||
printer=job.assigned_printer
|
||||
)
|
||||
```
|
||||
|
||||
#### 6.2 Automatische Drucksteuerung
|
||||
**Wenn Job an der Reihe:**
|
||||
```python
|
||||
def start_print_job(job):
|
||||
printer = job.assigned_printer
|
||||
|
||||
# 1. Tapo-Steckdose einschalten
|
||||
tapo_controller.turn_on(printer.plug_ip)
|
||||
wait_for_printer_ready(printer, timeout=300) # 5 Min
|
||||
|
||||
# 2. Datei an Drucker senden (falls OctoPrint)
|
||||
if printer.has_octoprint:
|
||||
octoprint_client.upload_and_start(
|
||||
file_path=job.file_path,
|
||||
printer_ip=printer.ip_address
|
||||
)
|
||||
|
||||
# 3. Status aktualisieren
|
||||
job.status = "printing"
|
||||
job.actual_start_time = now()
|
||||
|
||||
# 4. Gast benachrichtigen
|
||||
send_print_started_notification(job.guest_email, job)
|
||||
```
|
||||
|
||||
#### 6.3 Live-Monitoring
|
||||
**Gast-Dashboard:** `/jobs/my`
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ Meine Druckaufträge │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ 🖨️ Kundenpräsentation Prototyp │
|
||||
│ Status: ⚡ Wird gedruckt │
|
||||
│ Fortschritt: ████████████░░░░ 75% (3:00 / 4:00) │
|
||||
│ Drucker: Prusa i3 MK3S #1 │
|
||||
│ Gestartet: 16.06.2025 09:15 │
|
||||
│ Geschätzte Fertigstellung: 13:15 │
|
||||
│ │
|
||||
│ 📊 Live-Webcam Feed (falls verfügbar) │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ [Live-Kamera-Bild vom Drucker] │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ⚡ Energieverbrauch: 45W │
|
||||
│ 🌡️ Extruder-Temp: 210°C │
|
||||
│ 🛏️ Bett-Temp: 60°C │
|
||||
│ │
|
||||
│ [⏸️ Pausieren] [🚨 Problem melden] │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 7: Fertigstellung und Abholung
|
||||
|
||||
#### 7.1 Automatische Benachrichtigung
|
||||
**Bei Job-Completion:**
|
||||
```python
|
||||
def on_print_completion(job):
|
||||
# 1. Status aktualisieren
|
||||
job.status = "completed"
|
||||
job.actual_end_time = now()
|
||||
job.actual_duration = job.actual_end_time - job.actual_start_time
|
||||
|
||||
# 2. Drucker automatisch ausschalten
|
||||
if job.auto_power_off:
|
||||
schedule_delayed_power_off(job.printer, delay_minutes=30)
|
||||
|
||||
# 3. Benachrichtigungen senden
|
||||
notifications = [
|
||||
# Gast-Benachrichtigung
|
||||
{
|
||||
"recipient": job.guest_email,
|
||||
"template": "job_completed_guest",
|
||||
"data": {
|
||||
"job_name": job.name,
|
||||
"completion_time": job.actual_end_time,
|
||||
"pickup_location": "TBA Marienfelde, Raum B2.1",
|
||||
"pickup_hours": "Mo-Fr 8:00-16:00",
|
||||
"storage_duration": "7 Tage"
|
||||
}
|
||||
},
|
||||
# Admin-Benachrichtigung
|
||||
{
|
||||
"recipient": "admin@tba-marienfelde.de",
|
||||
"template": "guest_job_completed",
|
||||
"data": {
|
||||
"guest_name": job.guest_name,
|
||||
"job_name": job.name,
|
||||
"print_quality": "Noch zu bewerten",
|
||||
"requires_pickup": True
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
send_notifications(notifications)
|
||||
```
|
||||
|
||||
#### 7.2 Abholungsmanagement
|
||||
**Admin-Panel:** `/admin/pickup-management`
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ Abholung ausstehend │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ 📦 Kundenpräsentation Prototyp │
|
||||
│ Gast: Max Mustermann │
|
||||
│ E-Mail: max.mustermann@example.com │
|
||||
│ Telefon: +49 123 456789 │
|
||||
│ Fertiggestellt: 16.06.2025 13:15 │
|
||||
│ Lagerort: Regal B2.1-A3 │
|
||||
│ Ablauf Lagerung: 23.06.2025 │
|
||||
│ │
|
||||
│ Status: 🔴 Noch nicht abgeholt │
|
||||
│ │
|
||||
│ [✅ Als abgeholt markieren] [📧 Erinnerung senden] │
|
||||
│ [📸 Foto hinzufügen] [⚠️ Problem melden] │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Workflow-Metriken und KPIs
|
||||
|
||||
### Typische Durchlaufzeiten
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ Workflow-Phase │ Durchschnitt │
|
||||
├─────────────────────────────────┼───────────────────┤
|
||||
│ Anfrage → Genehmigung │ 2-4 Stunden │
|
||||
│ Genehmigung → OTP-Versand │ Sofort │
|
||||
│ Job-Upload → Admin-Review │ 1-2 Stunden │
|
||||
│ Genehmigung → Druckstart │ Je nach Queue │
|
||||
│ Druckzeit (Ø) │ 2-4 Stunden │
|
||||
│ Fertigstellung → Abholung │ 1-3 Tage │
|
||||
└─────────────────────────────────┴───────────────────┘
|
||||
```
|
||||
|
||||
### Erfolgsquoten
|
||||
- **Genehmigungsrate Gastzugang:** 85%
|
||||
- **Job-Genehmigungsrate:** 92%
|
||||
- **Erfolgreiche Drucke:** 96%
|
||||
- **Fristgerechte Abholung:** 78%
|
||||
|
||||
---
|
||||
|
||||
## 🔒 Sicherheitsaspekte
|
||||
|
||||
### Datenschutz
|
||||
- Gastdaten werden nach 30 Tagen automatisch gelöscht
|
||||
- Druckdateien nach 7 Tagen entfernt
|
||||
- E-Mail-Adressen werden nie für Marketing verwendet
|
||||
- DSGVO-konforme Einverständniserklärung
|
||||
|
||||
### Zugriffsbeschränkungen
|
||||
```python
|
||||
GUEST_PERMISSIONS = {
|
||||
"view_own_jobs": True,
|
||||
"create_job": True,
|
||||
"view_printer_status": True,
|
||||
"view_calendar": False, # Nur eigene Termine
|
||||
"access_admin_panel": False,
|
||||
"modify_other_jobs": False,
|
||||
"control_printers": False
|
||||
}
|
||||
|
||||
GUEST_LIMITATIONS = {
|
||||
"max_print_duration": 240, # 4 Stunden
|
||||
"max_file_size": 50 * 1024 * 1024, # 50MB
|
||||
"max_concurrent_jobs": 2,
|
||||
"access_duration": 168, # 7 Tage max
|
||||
"allowed_materials": ["PLA", "PETG"],
|
||||
"priority_level": "normal" # Keine hohe Priorität
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📱 Mobile Optimierung
|
||||
|
||||
### Responsive Design
|
||||
Das System ist vollständig für mobile Geräte optimiert:
|
||||
- Touch-optimierte Buttons (min. 44px)
|
||||
- Swipe-Gesten für Navigation
|
||||
- Kompakte Listen-Ansichten
|
||||
- Offline-Funktionalität für Status-Abfragen
|
||||
|
||||
### PWA-Features
|
||||
- Installation als App möglich
|
||||
- Push-Benachrichtigungen für Job-Updates
|
||||
- Offline-Caching für bereits geladene Inhalte
|
||||
- Service Worker für zuverlässige Performance
|
||||
|
||||
---
|
||||
|
||||
## 🚨 Fehlerbehandlung und Edge Cases
|
||||
|
||||
### Häufige Probleme und Lösungen
|
||||
|
||||
#### 1. OTP-Code funktioniert nicht
|
||||
```
|
||||
Mögliche Ursachen:
|
||||
- Code abgelaufen (24h Gültigkeit)
|
||||
- Tippfehler bei Eingabe
|
||||
- E-Mail nicht angekommen
|
||||
|
||||
Lösung:
|
||||
- Automatische Code-Neugenerierung nach 3 Fehlversuchen
|
||||
- Admin kann manuell neuen Code generieren
|
||||
- Alternative: Telefon-Verifikation
|
||||
```
|
||||
|
||||
#### 2. Datei-Upload schlägt fehl
|
||||
```
|
||||
Mögliche Ursachen:
|
||||
- Dateigröße > 50MB
|
||||
- Ungültiges Dateiformat
|
||||
- Netzwerk-Timeout
|
||||
|
||||
Lösung:
|
||||
- Chunked Upload für große Dateien
|
||||
- Format-Validierung mit hilfreichen Fehlermeldungen
|
||||
- Automatische Retry-Mechanismen
|
||||
```
|
||||
|
||||
#### 3. Drucker nicht verfügbar
|
||||
```
|
||||
Mögliche Ursachen:
|
||||
- Wartung läuft
|
||||
- Defekt oder Materialfehler
|
||||
- Andere Jobs haben Priorität
|
||||
|
||||
Lösung:
|
||||
- Automatische Neuplanung auf anderen Drucker
|
||||
- Benachrichtigung an Gast mit neuer Zeitschätzung
|
||||
- Admin-Eskalation bei kritischen Problemen
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📈 Continuous Improvement
|
||||
|
||||
### Feedback-Integration
|
||||
```python
|
||||
# Nach Job-Completion: Feedback-Request
|
||||
def request_guest_feedback(job):
|
||||
feedback_url = f"/feedback/{job.id}/{job.guest_token}"
|
||||
|
||||
send_email(
|
||||
to=job.guest_email,
|
||||
subject="Wie war Ihr Druckerlebnis?",
|
||||
template="feedback_request",
|
||||
data={
|
||||
"job_name": job.name,
|
||||
"feedback_url": feedback_url,
|
||||
"rating_categories": [
|
||||
"Anmeldeprozess",
|
||||
"Benutzerfreundlichkeit",
|
||||
"Druckqualität",
|
||||
"Kommunikation",
|
||||
"Abholungsprozess"
|
||||
]
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
### Analytics und Reporting
|
||||
- Durchlaufzeiten-Analyse
|
||||
- Bottleneck-Identifikation
|
||||
- Gastzufriedenheits-Scores
|
||||
- Drucker-Auslastungsoptimierung
|
||||
- Materialverbrauchs-Tracking
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Schulungsempfehlungen
|
||||
|
||||
### Für Administratoren
|
||||
1. **Gastzugang-Management** (30 Min)
|
||||
- Anfragen bewerten und genehmigen
|
||||
- OTP-System verwalten
|
||||
- Probleme eskalieren
|
||||
|
||||
2. **Job-Genehmigungsprozess** (45 Min)
|
||||
- Datei-Qualitätsprüfung
|
||||
- Material- und Zeitschätzung
|
||||
- Drucker-Zuweisungslogik
|
||||
|
||||
3. **Abholungsmanagement** (15 Min)
|
||||
- Lagerung organisieren
|
||||
- Erinnerungen versenden
|
||||
- Dokumentation führen
|
||||
|
||||
### Für Gastbenutzer (Selbstschulung)
|
||||
- **Interaktive Demo:** `/demo/guest-workflow`
|
||||
- **Video-Tutorial:** Schritt-für-Schritt Anleitung
|
||||
- **FAQ-Bereich:** Häufige Fragen und Antworten
|
||||
- **Kontakt-Hotline:** Bei technischen Problemen
|
||||
|
||||
---
|
||||
|
||||
*Diese Dokumentation wird bei System-Updates automatisch aktualisiert und dient als Basis für Schulungsmaterialien und Prozess-Optimierungen.*
|
Reference in New Issue
Block a user