🔧 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.*
|
428
DOCS/Workflow_Diagramm_Visual.md
Normal file
428
DOCS/Workflow_Diagramm_Visual.md
Normal file
@ -0,0 +1,428 @@
|
||||
# MYP Workflow-Diagramm (Visuell)
|
||||
## Für Schulungspräsentationen
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Workflow-Übersicht (Flowchart)
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[🌐 Gast besucht /request] --> B[📝 Anfrage ausfüllen]
|
||||
B --> C{📋 Validierung OK?}
|
||||
C -->|❌ Fehler| B
|
||||
C -->|✅ OK| D[💾 Anfrage gespeichert]
|
||||
|
||||
D --> E[📧 Admin-Benachrichtigung]
|
||||
E --> F[👨💼 Admin prüft Anfrage]
|
||||
|
||||
F --> G{🤔 Entscheidung?}
|
||||
G -->|✅ Genehmigen| H[🔑 OTP generieren]
|
||||
G -->|❌ Ablehnen| I[📧 Ablehnungs-E-Mail]
|
||||
G -->|❓ Nachfrage| J[📧 Rückfrage-E-Mail]
|
||||
|
||||
H --> K[📧 OTP an Gast senden]
|
||||
K --> L[🔐 Gast loggt sich ein]
|
||||
|
||||
L --> M[📁 Job-Upload Interface]
|
||||
M --> N[📤 Datei hochladen + Details]
|
||||
N --> O{📋 Job-Validierung?}
|
||||
O -->|❌ Fehler| M
|
||||
O -->|✅ OK| P[⏳ Job wartet auf Admin-Genehmigung]
|
||||
|
||||
P --> Q[👨💼 Admin prüft Job]
|
||||
Q --> R{🤔 Job-Entscheidung?}
|
||||
R -->|✅ Genehmigen| S[📅 Job schedulen]
|
||||
R -->|❌ Ablehnen| T[📧 Ablehnungs-E-Mail an Gast]
|
||||
R -->|✏️ Ändern| U[⚙️ Job modifizieren] --> S
|
||||
|
||||
S --> V[⚡ Drucker automatisch einschalten]
|
||||
V --> W[🖨️ Druckvorgang startet]
|
||||
W --> X[📊 Live-Monitoring]
|
||||
X --> Y[✅ Druck fertig]
|
||||
|
||||
Y --> Z[🔌 Drucker ausschalten]
|
||||
Z --> AA[📧 Fertigstellungs-Benachrichtigung]
|
||||
AA --> BB[📦 Abholung durch Gast]
|
||||
BB --> CC[✅ Workflow abgeschlossen]
|
||||
|
||||
I --> DD[🏁 Ende]
|
||||
T --> DD
|
||||
|
||||
style A fill:#e1f5fe
|
||||
style CC fill:#c8e6c9
|
||||
style DD fill:#ffcdd2
|
||||
style H fill:#fff3e0
|
||||
style W fill:#f3e5f5
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Phasen-Details (Timeline)
|
||||
|
||||
```
|
||||
Timeline: Gast-Workflow (Beispiel: 3-Tage-Projekt)
|
||||
|
||||
Tag 1 (Montag):
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ 09:00 │ 🌐 Gast stellt Anfrage │
|
||||
│ 09:05 │ 📧 Admin-Benachrichtigung │
|
||||
│ 10:30 │ 👨💼 Admin prüft und genehmigt │
|
||||
│ 10:35 │ 🔑 OTP generiert und versendet │
|
||||
│ 11:00 │ 🔐 Gast loggt sich ein │
|
||||
│ 11:15 │ 📁 Job-Upload (STL-Datei) │
|
||||
│ 11:20 │ ⏳ Job wartet auf Admin-Review │
|
||||
│ 14:00 │ ✅ Admin genehmigt Job │
|
||||
│ 14:05 │ 📅 Job für Mittwoch 09:00 geplant │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
|
||||
Tag 2 (Dienstag):
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ Ganztags │ 📊 Job in Warteschlange │
|
||||
│ 15:00 │ 📧 Erinnerungs-E-Mail an Gast │
|
||||
│ │ "Job startet morgen früh" │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
|
||||
Tag 3 (Mittwoch):
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ 08:55 │ ⚡ Drucker automatisch eingeschaltet │
|
||||
│ 09:00 │ 🖨️ Druckvorgang startet │
|
||||
│ 09:05 │ 📧 "Druck gestartet" Benachrichtigung │
|
||||
│ 13:00 │ ✅ Druck erfolgreich abgeschlossen │
|
||||
│ 13:05 │ 🔌 Drucker automatisch ausgeschaltet │
|
||||
│ 13:10 │ 📧 "Abholung möglich" Benachrichtigung │
|
||||
│ 15:30 │ 📦 Gast holt Druckobjekt ab │
|
||||
│ 15:35 │ ✅ Workflow komplett abgeschlossen │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎭 Rollen und Verantwortlichkeiten
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ 👤 GAST │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ ✅ Anfrage stellen │
|
||||
│ ✅ Job-Dateien hochladen │
|
||||
│ ✅ Fortschritt verfolgen │
|
||||
│ ✅ Objekt abholen │
|
||||
│ ❌ Drucker steuern │
|
||||
│ ❌ Andere Jobs sehen │
|
||||
│ ❌ Admin-Funktionen │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ 👨💼 ADMINISTRATOR │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ ✅ Gastzugang genehmigen/ablehnen │
|
||||
│ ✅ Jobs prüfen und freigeben │
|
||||
│ ✅ Drucker-Zuweisung optimieren │
|
||||
│ ✅ Warteschlangen verwalten │
|
||||
│ ✅ Probleme lösen │
|
||||
│ ✅ System überwachen │
|
||||
│ ✅ Berichte erstellen │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ 🤖 SYSTEM │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ ✅ OTP-Codes generieren │
|
||||
│ ✅ E-Mails versenden │
|
||||
│ ✅ Drucker automatisch steuern │
|
||||
│ ✅ Jobs schedulen │
|
||||
│ ✅ Status überwachen │
|
||||
│ ✅ Benachrichtigungen senden │
|
||||
│ ✅ Sicherheit gewährleisten │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Status-Übersicht
|
||||
|
||||
### Gastzugang-Status
|
||||
```
|
||||
🔴 PENDING │ Anfrage eingegangen, wartet auf Admin
|
||||
🟡 REVIEWING │ Admin prüft Anfrage
|
||||
🟢 APPROVED │ Genehmigt, OTP versendet
|
||||
🔵 ACTIVE │ Gast angemeldet, kann Jobs erstellen
|
||||
🟠 EXPIRING │ Zugang läuft in 24h ab
|
||||
❌ REJECTED │ Anfrage abgelehnt
|
||||
⚫ EXPIRED │ Zugang abgelaufen
|
||||
```
|
||||
|
||||
### Job-Status
|
||||
```
|
||||
📝 DRAFT │ Job wird erstellt
|
||||
⏳ PENDING │ Wartet auf Admin-Genehmigung
|
||||
📅 SCHEDULED │ Genehmigt, wartet auf Druckslot
|
||||
🔄 QUEUED │ In Warteschlange
|
||||
⚡ STARTING │ Drucker wird vorbereitet
|
||||
🖨️ PRINTING │ Wird gedruckt
|
||||
⏸️ PAUSED │ Pausiert (manuell oder Fehler)
|
||||
✅ COMPLETED │ Erfolgreich gedruckt
|
||||
📦 READY │ Bereit zur Abholung
|
||||
🏁 PICKED_UP │ Abgeholt
|
||||
❌ FAILED │ Druckfehler
|
||||
🚫 CANCELLED │ Abgebrochen
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📱 UI-Flow (Mockups)
|
||||
|
||||
### Schritt 1: Gastzugang beantragen
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ 🌐 MYP - Gastzugang beantragen │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 👋 Willkommen bei MYP │
|
||||
│ Mercedes-Benz TBA Marienfelde │
|
||||
│ │
|
||||
│ Vollständiger Name: * │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ Max Mustermann │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ E-Mail-Adresse: * │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ max.mustermann@example.com │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ Telefonnummer: │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ +49 123 456789 │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ Grund der Anfrage: * │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ Prototyp für Kundenpräsentation drucken │ │
|
||||
│ │ │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ Gewünschte Zugangsdauer: │
|
||||
│ ○ 1 Tag ● 3 Tage ○ 7 Tage │
|
||||
│ │
|
||||
│ [ ] Ich akzeptiere die Nutzungsbedingungen │
|
||||
│ │
|
||||
│ [📤 Anfrage senden] │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Schritt 2: OTP-Login
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ 🔐 MYP - Gast-Anmeldung │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 🎉 Ihr Zugang wurde genehmigt! │
|
||||
│ │
|
||||
│ E-Mail-Adresse: │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ max.mustermann@example.com │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ OTP-Code (aus E-Mail): │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ 123456 │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ⏰ Ihr Zugang ist gültig bis: │
|
||||
│ 18. Juni 2025, 14:30 Uhr │
|
||||
│ │
|
||||
│ [🔑 Anmelden] │
|
||||
│ │
|
||||
│ 💡 Tipp: Speichern Sie diese Seite als Lesezeichen│
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Schritt 3: Job erstellen
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ 📁 Neuen Druckauftrag erstellen │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Job-Name: * │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ Kundenpräsentation Prototyp │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ Beschreibung: │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ Gehäuse für Elektronikmodul │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ 📁 Datei hochladen: * │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ 📁 Datei auswählen oder hierher ziehen │ │
|
||||
│ │ │ │
|
||||
│ │ Unterstützt: .stl, .obj, .3mf, .gcode │ │
|
||||
│ │ Max. Größe: 50 MB │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ⏱️ Geschätzte Druckdauer: 240 Minuten │
|
||||
│ 🧱 Material: [PLA ▼] │
|
||||
│ 🔥 Priorität: Normal (Gäste) │
|
||||
│ │
|
||||
│ 📅 Gewünschter Starttermin: │
|
||||
│ [16.06.2025] [09:00] (Optional) │
|
||||
│ │
|
||||
│ [✅ Job erstellen] [❌ Abbrechen] │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Schritt 4: Job-Monitoring
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ 📊 Meine Druckaufträge │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 🖨️ Kundenpräsentation Prototyp │
|
||||
│ ┌─────────────────────────────────────────────────┐ │
|
||||
│ │ Status: ⚡ WIRD GEDRUCKT │ │
|
||||
│ │ │ │
|
||||
│ │ ████████████░░░░ 75% │ │
|
||||
│ │ 3:00 / 4:00 Stunden │ │
|
||||
│ │ │ │
|
||||
│ │ 🖨️ Drucker: Prusa i3 MK3S #1 │ │
|
||||
│ │ 📅 Gestartet: 16.06.2025 09:15 │ │
|
||||
│ │ ⏰ Fertig um: ~13:15 Uhr │ │
|
||||
│ │ │ │
|
||||
│ │ ┌─────────────────────────────────────────────┐ │ │
|
||||
│ │ │ 📹 Live Webcam Feed │ │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ │ [Aktuelles Bild vom Drucker] │ │ │
|
||||
│ │ └─────────────────────────────────────────────┘ │ │
|
||||
│ │ │ │
|
||||
│ │ ⚡ Verbrauch: 45W 🌡️ Extruder: 210°C │ │
|
||||
│ │ 🛏️ Bett: 60°C 📏 Layer: 180/240 │ │
|
||||
│ │ │ │
|
||||
│ │ [⏸️ Pausieren] [🚨 Problem melden] │ │
|
||||
│ └─────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ✅ Weiterer Job: Ersatzteil Halterung │
|
||||
│ Status: 📅 Geplant für morgen 10:00 │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📧 E-Mail-Templates (Beispiele)
|
||||
|
||||
### Genehmigung mit OTP
|
||||
```
|
||||
Von: MYP System <noreply@tba-marienfelde.de>
|
||||
An: max.mustermann@example.com
|
||||
Betreff: ✅ Gastzugang genehmigt - Willkommen bei MYP!
|
||||
|
||||
Hallo Max Mustermann,
|
||||
|
||||
großartige Neuigkeiten! Ihr Gastzugang wurde genehmigt.
|
||||
|
||||
🔑 Ihre Zugangsdaten:
|
||||
E-Mail: max.mustermann@example.com
|
||||
OTP-Code: 123456
|
||||
|
||||
⏰ Gültig bis: 18. Juni 2025, 14:30 Uhr
|
||||
|
||||
🚀 So geht's weiter:
|
||||
1. Besuchen Sie: https://myp.tba-marienfelde.de/auth/guest
|
||||
2. Geben Sie Ihre E-Mail und den OTP-Code ein
|
||||
3. Laden Sie Ihre Druckdateien hoch
|
||||
4. Warten Sie auf die Admin-Freigabe
|
||||
|
||||
📋 Wichtige Informationen:
|
||||
• Max. Druckzeit pro Job: 4 Stunden
|
||||
• Unterstützte Formate: STL, OBJ, 3MF, GCODE
|
||||
• Materialien: PLA, PETG
|
||||
• Abholung: Mo-Fr 8:00-16:00, Raum B2.1
|
||||
|
||||
❓ Fragen? Antworten Sie einfach auf diese E-Mail.
|
||||
|
||||
Viel Erfolg mit Ihrem Projekt!
|
||||
Das MYP-Team
|
||||
```
|
||||
|
||||
### Job fertig - Abholung
|
||||
```
|
||||
Von: MYP System <noreply@tba-marienfelde.de>
|
||||
An: max.mustermann@example.com
|
||||
Betreff: 🎉 Druckauftrag fertig - Abholung möglich!
|
||||
|
||||
Hallo Max Mustermann,
|
||||
|
||||
Ihr Druckauftrag ist erfolgreich abgeschlossen! 🎉
|
||||
|
||||
📦 Job-Details:
|
||||
Name: Kundenpräsentation Prototyp
|
||||
Fertiggestellt: 16.06.2025 um 13:15 Uhr
|
||||
Druckdauer: 4:15 Stunden
|
||||
Material: PLA, Grau
|
||||
|
||||
📍 Abholung:
|
||||
Ort: TBA Marienfelde, Raum B2.1
|
||||
Öffnungszeiten: Mo-Fr 8:00-16:00 Uhr
|
||||
Lagerplatz: Regal B2.1-A3
|
||||
|
||||
⚠️ Wichtig:
|
||||
- Bringen Sie einen Ausweis mit
|
||||
- Abholung bis zum 23.06.2025
|
||||
- Danach wird das Objekt entsorgt
|
||||
|
||||
📸 Hier ist ein Foto Ihres fertigen Drucks:
|
||||
[Bild des gedruckten Objekts]
|
||||
|
||||
✨ Zufrieden? Wir freuen uns über Ihr Feedback:
|
||||
https://myp.tba-marienfelde.de/feedback/xyz123
|
||||
|
||||
Vielen Dank für die Nutzung von MYP!
|
||||
Das Team der TBA Marienfelde
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Schulungsplan (Empfehlung)
|
||||
|
||||
### Modul 1: System-Überblick (15 Min)
|
||||
- Was ist MYP?
|
||||
- Zielgruppe und Anwendungsfälle
|
||||
- Sicherheitskonzept
|
||||
- **Praktisch:** Live-Demo der Benutzeroberfläche
|
||||
|
||||
### Modul 2: Gastzugang-Management (30 Min)
|
||||
- Anfrageprozess verstehen
|
||||
- Bewertungskriterien für Genehmigungen
|
||||
- OTP-System verwalten
|
||||
- **Praktisch:** Anfrage bearbeiten und genehmigen
|
||||
|
||||
### Modul 3: Job-Management (45 Min)
|
||||
- Datei-Upload und Validierung
|
||||
- Druckparameter beurteilen
|
||||
- Drucker-Zuweisung optimieren
|
||||
- **Praktisch:** Gast-Job von Anfang bis Ende begleiten
|
||||
|
||||
### Modul 4: Monitoring und Problembehebung (20 Min)
|
||||
- Live-Status überwachen
|
||||
- Häufige Probleme erkennen
|
||||
- Eskalationswege
|
||||
- **Praktisch:** Simulierte Problemfälle lösen
|
||||
|
||||
### Modul 5: Abholung und Nachbereitung (10 Min)
|
||||
- Lagerorganisation
|
||||
- Erinnerungen und Follow-up
|
||||
- Dokumentation
|
||||
- **Praktisch:** Abholungsprozess durchspielen
|
||||
|
||||
**Gesamtdauer:** 2 Stunden
|
||||
**Format:** 60% Theorie, 40% praktische Übungen
|
||||
**Nachschulung:** Alle 6 Monate oder bei größeren Updates
|
||||
|
||||
---
|
||||
|
||||
*Diese visuelle Workflow-Dokumentation ergänzt die detaillierte technische Dokumentation und eignet sich besonders für Präsentationen und Schulungen.*
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user