Files
Projektarbeit-MYP/DOCS/Schulung_Workflow_Gastzugang.md
Till Tomczak b1ae9523a9 🔧 Update: Workflow Documentation and Job Deletion Enhancements
**Änderungen:**
- ✅ Aktualisierte Schulungsdokumentation fÃŒr den Gastzugang, um den Workflow klarer darzustellen.
- ✅ Verbesserte Visualisierung im Workflow-Diagramm, um den Prozess fÃŒr GÀste zu verdeutlichen.
- ✅ Optimierte Logik in der Job-Löschfunktion, um abhÀngige DatensÀtze vor der Löschung zu bereinigen.

**Ergebnis:**
- Klarere Anleitungen fÃŒr Benutzer zur Nutzung des Gastzugangs.
- Verbesserte Nachvollziehbarkeit des Workflows durch aktualisierte Diagramme.
- Erhöhte DatenintegritÀt durch Bereinigung abhÀngiger DatensÀtze vor der Job-Löschung.

🀖 Generated with [Claude Code](https://claude.ai/code)
2025-06-16 01:18:31 +02:00

25 KiB

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 (Vor-Ort-Prozess)

Endpunkt: /request (nur im lokalen Netzwerk zugÀnglich)

Gast besucht vor Ort: http://192.168.1.100:5000/request
(Terminal/Kiosk in TBA Marienfelde)

Eingabefelder:

  • Name (Pflichtfeld)
  • Grund der Anfrage (Pflichtfeld, mind. 10 Zeichen)
  • Abteilung/Firma (Pflichtfeld)
  • GewÃŒnschte Zugangsdauer (1-7 Tage)
  • Ansprechpartner (Mercedes-Benz) (optional)

Validierungsregeln:

  • DuplikatsprÃŒfung (gleicher Name innerhalb 24h)
  • MindestlÀnge fÃŒr BegrÃŒndung
  • Maximale Zugangsdauer begrenzt

Systemverhalten:

# Automatische Aktionen nach Anfrage-Eingang
1. Anfrage-ID generiert (unique)
2. Status: "pending"
3. Zeitstempel erstellt
4. Dashboard-Benachrichtigung fÃŒr Admin
5. Ausdruck mit Anfrage-ID fÃŒr Gast

1.2 BestÀtigung fÌr Gast

Weiterleitung: /request/{request_id}

Der Gast erhÀlt eine BestÀtigungsseite mit:

  • Anfrage-ID zum Nachverfolgen (wird ausgedruckt)
  • QR-Code fÃŒr spÀtere Status-Abfrage
  • GeschÀtzte Bearbeitungszeit (1-4 Stunden)
  • Kontaktinformation: Vor Ort bei Mercedes-Benz Ansprechpartner
  • Status-Anzeige (Pending/Genehmigt/Abgelehnt)

Gast erhÀlt:

┌─────────────────────────────────────────────────────┐
│ MYP Gastzugang-Anfrage                              │
│ TBA Marienfelde                                     │
├──────────────────────────────────────────────────────
│ Anfrage-ID: GAS-2025-001234                        │
│ Name: Max Mustermann                                │
│ Eingegangen: 16.06.2025 09:00                      │
│                                                     │
│ Status: ⏳ Wartet auf Genehmigung                   │
│                                                     │
│ [QR-Code]  ← Scannen fÃŒr Status-Update             │
│                                                     │
│ Bearbeitungszeit: 1-4 Stunden                      │
│ Bei Fragen: Mercedes-Benz Ansprechpartner          │
└─────────────────────────────────────────────────────┘

Phase 2: Administrative Genehmigung

2.1 Admin-Benachrichtigung

Lokale Benachrichtigung:

  • Dashboard-Benachrichtigung im System (rote Badge)
  • Browser-Popup (wenn Admin angemeldet)
  • Audio-Signal bei neuer Anfrage (optional)

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:

    POST /api/requests/{id}/approve
    {
      "access_duration_hours": 72,
      "notes": "Genehmigt fÌr KundenprÀsentation"
    }
    
  2. Ablehnen:

    POST /api/requests/{id}/reject
    {
      "reason": "Unzureichende BegrÃŒndung",
      "notes": "Bitte weitere Details angeben"
    }
    
  3. Nachfrage stellen:

    POST /api/requests/{id}/request-info
    {
      "question": "Welche Materialien sollen verwendet werden?"
    }
    

Phase 3: OTP-System und Anmeldung (Offline)

3.1 OTP-Generierung (bei Genehmigung)

Lokaler Prozess:

# System generiert One-Time Password
otp_code = generate_secure_otp()  # 6-stellig, numerisch
expiry_time = now() + timedelta(hours=access_duration)

# Automatischer Ausdruck fÃŒr Admin
print_guest_credentials(
    guest_name=guest_name,
    otp_code=otp_code,
    expiry_time=expiry_time,
    access_instructions=True
)

Ausgedruckte Zugangsdaten:

┌─────────────────────────────────────────────────────┐
│ MYP GASTZUGANG GENEHMIGT                            │
│ TBA Marienfelde                                     │
├──────────────────────────────────────────────────────
│ Name: Max Mustermann                                │
│ Anfrage-ID: GAS-2025-001234                        │
│ Genehmigt: 16.06.2025 10:30                        │
│                                                     │
│ 🔑 ZUGANGSDATEN:                                    │
│    OTP-Code: 123456                                │
│    GÃŒltig bis: 18.06.2025 14:30                   │
│                                                     │
│ 🌐 ANMELDUNG:                                       │
│    Terminal vor Ort oder                           │
│    http://192.168.1.100:5000/auth/guest           │
│                                                     │
│ 📋 ANWEISUNGEN:                                     │
│ 1. Name eingeben: Max Mustermann                   │
│ 2. OTP-Code eingeben: 123456                      │
│ 3. Druckdateien hochladen                         │
│ 4. Auf Admin-Freigabe warten                      │
│                                                     │
│ ⚠ WICHTIGE HINWEISE:                              │
│ • Max. Druckzeit pro Job: 4 Stunden               │
│ • Dateiformate: STL, OBJ, 3MF, GCODE             │
│ • Bei Problemen: Mercedes-Benz Ansprechpartner    │
│                                                     │
│ [QR-Code fÃŒr Login-Seite]                         │
└─────────────────────────────────────────────────────┘

👚‍💌 ADMIN: Bitte an Gast aushÀndigen

3.2 Gast-Anmeldung

Endpunkt: /auth/guest

Login-Prozess:

  1. Name eingeben (wie auf Ausdruck)
  2. OTP-Code eingeben (vom ausgedruckten Zettel)
  3. System validiert OTP und GÃŒltigkeitsdauer
  4. Session mit eingeschrÀnkten Rechten erstellt

Session-Eigenschaften:

guest_session = {
    "user_type": "guest",
    "guest_name": "Max Mustermann",
    "request_id": "GAS-2025-001234",
    "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:

┌─────────────────────────────────────────────────────┐
│ 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:

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

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:

    POST /api/admin/jobs/{job_id}/approve
    {
      "approved": true,
      "notes": "Job genehmigt, Material verfÃŒgbar"
    }
    
  2. Mit Änderungen genehmigen:

    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:

    POST /api/admin/jobs/{job_id}/reject
    {
      "reason": "Datei fehlerhaft",
      "notes": "STL-Datei enthÀlt nicht-druckbare Geometrien"
    }
    

Gast-Benachrichtigung bei Genehmigung:

  • Dashboard-Update: Status Àndert sich automatisch
  • Ausdruck fÃŒr Admin: Job-Details mit geplanter Startzeit
  • Gast kann Status prÃŒfen: Über QR-Code oder Anfrage-ID

Phase 6: AusfÃŒhrung und Monitoring

6.1 Automatisches Scheduling

Bei Genehmigung:

def schedule_approved_job(job):
    # Job in Warteschlange einreihen
    job.status = "scheduled"
    job.scheduled_start = calculate_optimal_start_time(job)
    
    # Lokale Benachrichtigung fÃŒr Gast (Dashboard)
    update_guest_dashboard_status(
        guest_name=job.guest_name,
        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
    )
    
    # Ausdruck fÌr Gast (Admin hÀndigt aus)
    print_job_schedule_info(job)

6.2 Automatische Drucksteuerung

Wenn Job an der Reihe:

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-Dashboard aktualisieren
    update_guest_dashboard_status(job.guest_name, "printing")
    
    # 5. Ausdruck fÃŒr Admin (Gast informieren)
    print_job_started_notification(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 (Offline)

Bei Job-Completion:

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. Gast-Dashboard aktualisieren
    update_guest_dashboard_status(job.guest_name, "completed")
    
    # 4. Automatischer Ausdruck fÃŒr Admin
    print_job_completion_notification(
        guest_name=job.guest_name,
        job_name=job.name,
        completion_time=job.actual_end_time,
        pickup_location="TBA Marienfelde, Raum B2.1",
        storage_info="7 Tage Lagerung, dann Entsorgung"
    )
    
    # 5. Admin-Dashboard-Benachrichtigung
    create_pickup_reminder(
        guest_name=job.guest_name,
        job_name=job.name,
        completion_time=job.actual_end_time
    )

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

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

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