5.0 KiB
5.0 KiB
Lead-Management System - Dokumentation
Übersicht
Das Lead-Management System ist ein integriertes CRM-Modul für die Verwaltung potentieller Kunden (Leads). Es wurde mit einer zukunftssicheren Architektur entwickelt, die Erweiterungen ohne Refactoring ermöglicht.
Zugang
- Kein Navbar-Eintrag (bewusste Entscheidung)
- Zugang über "Leads" Button auf der Kunden & Lizenzen Seite
- URL:
/leads
Architektur-Prinzipien
1. Modularer Aufbau
leads/
├── __init__.py # Blueprint Definition
├── routes.py # HTTP Endpoints
├── models.py # Datenmodelle
├── services.py # Business Logic
├── repositories.py # Datenbankzugriffe
└── templates/leads/ # HTML Templates
2. Service Layer Pattern
# Klare Trennung von Präsentation und Logik
class LeadService:
def create_institution(self, name, user):
# Validierung
# Business Logic
# Audit Log
# Repository Aufruf
3. Repository Pattern
# Alle DB-Operationen gekapselt
class LeadRepository:
def get_institutions_with_counts(self):
# Optimierte SQL Queries
# Keine Business Logic
4. RESTful API Design
GET /leads/api/institutions
POST /leads/api/institutions
PUT /leads/api/institutions/<id>
GET /leads/api/contacts
POST /leads/api/contacts
PUT /leads/api/contacts/<id>
POST /leads/api/contacts/<id>/phones
POST /leads/api/contacts/<id>/emails
POST /leads/api/contacts/<id>/notes
PUT /leads/api/notes/<id>
DELETE /leads/api/notes/<id>
Datenmodell
Tabellen-Übersicht
- lead_institutions - Organisationen/Firmen
- lead_contacts - Kontaktpersonen
- lead_contact_details - Telefon/E-Mail (flexibel)
- lead_notes - Notizen mit Versionierung
Erweiterbarkeit ohne Schema-Änderungen
- JSONB Felder:
metadataundextra_fieldsfür zukünftige Attribute - Flexible Details:
detail_typeerlaubt neue Kontaktarten (social, etc.) - Versionierte Notizen: Vollständige Historie ohne Datenverlust
Features
Institutionen-Verwaltung
- Einfache Erfassung (nur Name erforderlich)
- Kontakt-Zähler in der Übersicht
- Schnelle Suche
- Umbenennung möglich
Kontaktpersonen
- Vorname, Nachname, Position (Freitext)
- Verknüpfung mit Institution
- Beliebig viele Telefonnummern
- Beliebig viele E-Mail-Adressen
- Labels für Kontaktdaten (Mobil, Geschäftlich, Privat)
Notiz-System
- Historie: Alle Notizen bleiben erhalten
- Versionierung: Bearbeitungen erstellen neue Version
- Zeitstempel: Automatisch bei Erstellung
- Benutzer-Tracking: Wer hat was wann geschrieben
- Soft Delete: Gelöschte Notizen bleiben in DB
Installation
1. Migration anwenden
docker exec -it v2_adminpanel python apply_lead_migration.py
2. Verfügbare Tabellen prüfen
SELECT table_name FROM information_schema.tables
WHERE table_name LIKE 'lead_%';
Verwendung
Workflow
- Institution anlegen (z.B. "Musterfirma GmbH")
- Kontakte hinzufügen (Geschäftsführer, Vertrieb, etc.)
- Kontaktdaten pflegen (Telefon, E-Mail)
- Notizen erfassen (Gesprächsnotizen, Kontext)
Typische Szenarien
- Messe-Kontakte: Schnelle Erfassung vor Ort
- Follow-Up: Notizen zu Gesprächen
- Kontakt-Historie: Wer wurde wann getroffen
Technische Details
Audit-Trail Integration
Alle Aktionen werden automatisch geloggt:
lead.institution.createlead.contact.createlead.contact.updatelead.contact.note.add- etc.
Performance-Optimierungen
- Indizes auf häufig gesuchten Feldern
- Eager Loading für Kontakt-Details
- Optimierte Queries mit COUNT für Übersichten
Sicherheit
- SQL Injection Prevention durch Parameterized Queries
- XSS Prevention durch Template Escaping
- CSRF Protection durch Flask-WTF
- Zugangskontrolle durch Login-Requirement
Zukünftige Erweiterungen (ohne Breaking Changes)
Mögliche Features
- Tags/Labels für Institutionen (via metadata JSONB)
- Lead-Status (Interessent, Verhandlung, etc.)
- Dokumente anhängen (neue Tabelle lead_documents)
- Import/Export (CSV, Excel)
- Duplikat-Erkennung bei E-Mail/Telefon
- Konvertierung zu Kunde (One-Click)
Event-System Ready
# Vorbereitet für lose Kopplung
lead_events.publish('contact.created', contact_data)
# Andere Services können darauf reagieren
Wichtige Hinweise
Trennung von Kunden-System
- Keine Verknüpfung zu existierenden Kunden
- Eigene Tabellen mit
lead_Prefix - Eigene Navigation (kein Navbar-Eintrag)
- Unabhängige Entwicklung möglich
Best Practices
- Notizen nutzen: Kontext ist wichtig
- Labels vergeben: Mobil vs. Geschäftlich
- Position ausfüllen: Hilft bei Priorisierung
- Regelmäßig pflegen: Aktuelle Daten sind wertvoll
Stand: 19.06.2025 - 15:07 Uhr
✅ Vollständig implementiert und einsatzbereit ✅ Refactoring-freie Architektur ✅ Erweiterbar ohne Breaking Changes ✅ Performance-optimiert