# 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:** ```python # 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:** ```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 (Offline) #### 3.1 OTP-Generierung (bei Genehmigung) **Lokaler Prozess:** ```python # 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:** ```python 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:** ```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" } ``` **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:** ```python 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:** ```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-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:** ```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. 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 ```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.*