In aktiver Entwicklung. Backend und Clients sind funktionsfähig und auf einem Server (Hetzner, kvp.gfk-service.eu) betrieben; mobile Builds liegen als App Bundles vor (Tablet v0.23, Smartphone v0.7). Die README-Dateien der Frontends sind noch Flutter-Standardvorlagen.
KVP-Management
Plattformübergreifendes KVP-System für ein Betonfertigteilwerk: FastAPI-Backend, drei Flutter-Clients und Echtzeit-Synchronisation
Die Herausforderung
Im Betonfertigteilwerk (Tenwinkel GmbH & Co. KG) entstehen aus den Bereichen GFK, Schlosserei, Grundierung, Lackierung, Betonfertigung, Lager, Versand und Büro laufend Verbesserungsideen, die bislang ohne durchgängiges digitales Werkzeug erfasst und in KVP-Sitzungen weiterverfolgt wurden. Vorschläge, Massnahmen, Verantwortlichkeiten und der Umsetzungsstand mussten konsistent über verschiedene Geräte (Werkstatt-Tablets, Smartphones, Büro-Desktops) und über mehrere Beteiligte hinweg gepflegt werden. Gesucht war ein System, das Ideen erfasst, Sitzungen samt Massnahmenplan dokumentiert und alle Endgeräte in Echtzeit aktuell hält.
Das Ziel
Ein durchgängiges KVP-Management aufbauen, das den kompletten Kontinuierlichen Verbesserungsprozess abbildet: vom geräteoffenen Erfassen einer Idee über die rollenbasierte Bearbeitung in KVP-Sitzungen mit Massnahmenplan und Statusverfolgung bis hin zur automatischen Erzeugung formatierter Berichte (DOCX/PDF) und deren Versand. Mehrere Clients sollen gleichzeitig arbeiten und live synchron gehalten werden.
Die Lösung
- Ideenpool: Erfassen, Bearbeiten und Suchen von Verbesserungsvorschlägen je Team, mit Status new/in_review/approved/rejected (models.py IdeaPool, ideen_pool.dart)
- KI-gestützte Prüfung neuer Ideen: GPT-4o filtert Unsinn/Spam und korrigiert Tippfehler unter Beibehaltung von Fachbegriffen (Beton, Schalung, Polyurea) über einen betriebsspezifischen Prompt (openai_validator.py)
- KVP-Sitzungen mit Massnahmenplan: Sitzungen mit Thema, Team, Teilnehmern, Moderator und Action-Items inkl. Lösung, Massnahmenbeschreibung, Verantwortlichem und Fälligkeitsdatum (KvpSession/ActionItem in models.py, kvp_sitzung.dart)
- Status-Workflow der Massnahmen in fünf Stufen: Offen, Massnahme geplant, Beginn der Umsetzung, Wirksamkeit in Prüfung, Massnahme integriert (enums.py ActionItemStatus)
- Rollen- und Rechtekonzept: admin, moderator, koordinator, user mit eigenen API-Routern und Zugriffsprüfungen; Moderatoren-Bewertungsbogen (Checkliste) je Team/Sitzung (enums.py GlobalRole/TeamRole, main.py admin/moderator/koordinator-Router, ModeratorChecklist)
- Echtzeit-Synchronisation: WebSocket-Endpunkt im Backend, Redis Pub/Sub als Verteiler und ein WebSocket-Client in den Apps mit Reconnect-Logik (Jitter), Lifecycle-Handling und Echo-Filter über eine Instanz-ID (realtime.py, realtime_service.dart, api_service.dart)
- Automatische Berichtsgenerierung: DOCX aus Word-Vorlagen via docxtpl inkl. Status-Symbolen, Umwandlung in PDF über einen Gotenberg-Dienst und Versand per Mailjet als Hintergrund-Task (report_generator.py, convert_and_mail.py, session_service.py)
- Drei dedizierte Flutter-Clients für Desktop, Tablet und Smartphone mit gemeinsamer Architektur; die mobilen Clients bieten zusätzlich Spracheingabe für den Ideenpool (ideen_pool_speech.dart, speech_to_text)
- Verwaltung von Mitarbeitern und Teams durch Admins inkl. Aktiv/Inaktiv-Status, erzwungenem Passwortwechsel beim Erstlogin und Abhängigkeitsprüfung vor dem Löschen (admin_service.py, main.py admin_router, verwaltung.dart)
- Authentifizierung per JWT (OAuth2 Password Flow) mit Login-Rate-Limiting, eigenem Passwortwechsel und sicherer Token-Ablage auf dem Client (main.py /token, security.py, flutter_secure_storage)
Technik & Architektur
- Backend: Python/FastAPI mit asynchroner Architektur (async/await), Uvicorn/Gunicorn als Server
- Datenbank: MySQL/MariaDB über SQLAlchemy (async, aiomysql) mit Alembic-Migrationen; Datenmodell u.a. Teams, Employees, TeamMembers, IdeaPool, KvpSessions, ActionItems, ModeratorChecklists
- Redis für Pub/Sub-Echtzeit-Verteilung, verteiltes Locking (redis_lock.py) und als Speicher für das Rate-Limiting (slowapi)
- Echtzeit: WebSocket (/ws) im Backend, web_socket_channel in Flutter, Sender-Instanz-ID gegen Echo-Schleifen, Reconnect mit Jitter
- Berichts-Pipeline: docxtpl/python-docx/docxcompose erzeugen DOCX aus Vorlagen, externer Gotenberg-Dienst konvertiert zu PDF, Mailjet versendet; Ausführung als FastAPI BackgroundTask mit Retry-Logik
- KI: OpenAI GPT-4o (AsyncOpenAI) zur Validierung und sprachlichen Korrektur von Ideen und Massnahmen-Texten mit branchenspezifischem System-Prompt
- Sicherheit: JWT (python-jose), Passwort-Hashing (passlib/bcrypt), rollenbasierte Dependencies, CORS-Beschränkung, Rate-Limiting, nicht-root Container-User
- Frontend: Flutter (Dart, SDK ^3.5.1) mit Riverpod (State Management), go_router (Navigation), flutter_secure_storage, sqflite (lokaler Cache), speech_to_text (Spracheingabe mobil); separate Builds für Desktop, Tablet und Smartphone
- Deployment: Docker (Multi-Stage-Build, python:3.12-slim-bookworm) auf Hetzner-Server; Mobile-Builds als Android App Bundles (.aab) vorhanden
Nutzen in der Praxis
- Ein durchgängiger digitaler Prozess vom Verbesserungsvorschlag bis zur dokumentierten, statusverfolgten Massnahme
- Geräteoffenes Arbeiten: passende Oberflächen für Werkstatt-Tablet, Smartphone und Büro-Desktop, mobil zusätzlich per Spracheingabe
- Alle Beteiligten sehen Änderungen nahezu sofort dank Echtzeit-Synchronisation über WebSocket und Redis
- Höhere Datenqualität im Ideenpool durch KI-Prüfung, die Unsinn herausfiltert und Fachbegriffe respektiert
- Automatisch erzeugte, einheitlich formatierte Sitzungs- und Bewertungsberichte (PDF) entlasten von manueller Dokumentation
- Klare Rollen- und Rechtetrennung (Admin/Moderator/Koordinator/Mitarbeiter) für geregelte Zuständigkeiten
- Robuster Betrieb durch Retry- und Reconnect-Mechanismen, verteiltes Locking und containerisiertes Deployment
Meine Rolle
Ricardo Rehfeldt hat das Projekt eigenständig konzipiert, entwickelt und umgesetzt: vom Datenmodell und der FastAPI-Backend-Architektur über die Echtzeit- und Berichts-Pipeline bis zu den drei Flutter-Clients und dem Docker-Deployment.