23 KiB
Migrations-Plan: Legacy GSheets -> Company Explorer (Robotics Edition v0.8.5)
Kontext: Neuanfang für die Branche Robotik & Facility Management. Ziel: Ablösung von Google Sheets/CLI durch eine Web-App ("Company Explorer") mit SQLite-Backend.
1. Strategische Neuausrichtung
| Bereich | Alt (Legacy) | Neu (Robotics Edition) |
|---|---|---|
| Daten-Basis | Google Sheets | SQLite (Lokal, performant, filterbar). |
| Ziel-Daten | Allgemein / Kundenservice | Quantifizierbares Potenzial (z.B. 4500m² Fläche, 120 Betten). |
| Branchen | KI-Vorschlag (Freitext) | Strict Mode: Mapping auf definierte Notion-Liste (z.B. "Hotellerie", "Automotive"). |
| Bewertung | 0-100 Score (Vage) | Data-Driven: Rohwert (Scraper/Search) -> Standardisierung (Formel) -> Potenzial. |
| Analytics | Techniker-ML-Modell | Deaktiviert. Fokus auf harte Fakten. |
| Operations | D365 Sync (Broken) | Excel-Import & Deduplizierung. Fokus auf Matching externer Listen gegen Bestand. |
2. Architektur & Komponenten-Mapping
Das System wird in company-explorer/ neu aufgebaut. Wir lösen Abhängigkeiten zur Root helpers.py auf.
A. Core Backend (backend/)
| Komponente | Aufgabe & Neue Logik | Prio |
|---|---|---|
| Database | Ersetzt GoogleSheetHandler. Speichert Firmen & "Enrichment Blobs". |
1 |
| Importer | Ersetzt SyncManager. Importiert Excel-Dumps (CRM) und Event-Listen. |
1 |
| Deduplicator | Ersetzt company_deduplicator.py. Kern-Feature: Checkt Event-Listen gegen DB. Muss "intelligent" matchen (Name + Ort + Web). |
1 |
| Scraper (Base) | Extrahiert Text von Websites. Basis für alle Analysen. | 1 |
| Classification Service | NEU (v0.7.0). Zweistufige Logik: 1. Strict Industry Classification. 2. Metric Extraction Cascade (Web -> Wiki -> SerpAPI). |
1 |
| Marketing Engine | Ersetzt generate_marketing_text.py. Nutzt neue marketing_wissen_robotics.yaml. |
3 |
Identifizierte Hauptdatei: company-explorer/backend/app.py
B. Frontend (frontend/) - React
- View 1: Der "Explorer": DataGrid aller Firmen. Filterbar nach "Roboter-Potential" und Status.
- View 2: Der "Inspector": Detailansicht einer Firma. Zeigt gefundene Signale ("Hat SPA Bereich"). Manuelle Korrektur-Möglichkeit.
- Identifizierte Komponente:
company-explorer/frontend/src/components/Inspector.tsx
- Identifizierte Komponente:
- View 3: "List Matcher": Upload einer Excel-Liste -> Anzeige von Duplikaten -> Button "Neue importieren".
- View 4: "Settings": Konfiguration von Branchen, Rollen und Robotik-Logik.
- Frontend "Settings" Komponente:
company-explorer/frontend/src/components/RoboticsSettings.tsx
- Frontend "Settings" Komponente:
C. Architekturmuster für die Client-Integration
Um externen Diensten (wie der lead-engine) eine einfache und robuste Anbindung an den company-explorer zu ermöglichen, wurde ein standardisiertes Client-Connector-Muster implementiert.
| Komponente | Aufgabe & Neue Logik |
|---|---|
company_explorer_connector.py |
NEU: Ein zentrales Python-Skript, das als "offizieller" Client-Wrapper für die API des Company Explorers dient. Es kapselt die Komplexität der asynchronen Enrichment-Prozesse. |
handle_company_workflow() |
Die Kernfunktion des Connectors. Sie implementiert den vollständigen "Find-or-Create-and-Enrich"-Workflow: 1. Prüfen: Stellt fest, ob ein Unternehmen bereits existiert. 2. Erstellen: Legt das Unternehmen an, falls es neu ist. 3. Anstoßen: Startet den asynchronen discover-Prozess. 4. Warten (Polling): Überwacht den Status des Unternehmens, bis eine Website gefunden wurde. 5. Analysieren: Startet den asynchronen analyze-Prozess. Vorteil: Bietet dem aufrufenden Dienst eine einfache, quasi-synchrone Schnittstelle und stellt sicher, dass die Prozessschritte in der korrekten Reihenfolge ausgeführt werden. |
2.1 Der End-to-End Datenfluss (Lead-Fabrik)
Diese Grafik visualisiert den gesamten Prozess von der Anlage eines Kontakts im CRM über die KI-Analyse bis zur fertigen Marketing-Automation.
graph TD
%% Nodes
User((Vertriebs-User))
SO_CRM[SuperOffice CRM]
Connector[Connector Service]
CE_Core[Company Explorer Core]
CE_AI[AI Analysis Engine]
CE_DB[(SQLite DB)]
MA_System[Marketing Automation]
%% Flow
User -- Erstellt Contact (Firma / Person) --> SO_CRM
SO_CRM -- Webhook (New Contact) --> Connector
Connector -- POST /provision --> CE_Core
subgraph "Intelligence Phase (Asynchron)"
CE_Core -- 1. Scrape & Research --> CE_AI
CE_AI -- 2. Vertical & Metriken (Potential) --> CE_Core
CE_AI -- 3. Generiere Atomic Opener --> CE_Core
end
subgraph "Matrix Logic (Matching)"
CE_Core -- 4. Rolle & Branche Identifizieren --> CE_DB
CE_DB -- 5. Hole Matrix-Texte (Subject/Intro) --> CE_Core
Note[Logik: Primary vs Secondary Product<br>z.B. Healthcare: Pflege -> Transport]
end
CE_Core -- Angereichertes Profil + Texte --> Connector
Connector -- UPDATE Person (UDFs) --> SO_CRM
SO_CRM -- Daten verfügbar --> MA_System
MA_System -- Textblöcke ins Template einsetzen --> Email(E-Mail Automation läuft an)
Prozess-Schritte:
- Trigger: Ein Vertriebsmitarbeiter legt eine Person oder Firma in SuperOffice an.
- Transport: Der Connector empfängt den Webhook und beauftragt den Company Explorer (
/provision). - Intelligence:
- Die Website wird gescraped und analysiert.
- Die KI bestimmt das Vertical (z.B. "Healthcare - Hospital") und berechnet das Potenzial (z.B. Bettenanzahl).
- Ein individueller Atomic Opener wird generiert, der auf die spezifische Situation des Unternehmens eingeht.
- Matrix Match:
- Basierend auf der Job-Rolle (z.B. "Pflegedienstleitung") wird die Persona ("Operativer Entscheider") bestimmt.
- Die Engine prüft das
Ops Focus: SecondaryFlag (z.B. bei Krankenhäusern). - Die passenden Textbausteine (Betreff, Intro, Social Proof) werden aus der vor-generierten Matrix geladen.
- Sync Back: Alle Texte (Opener + Matrix-Bausteine) werden in die benutzerdefinierten Felder (UDFs) der Person in SuperOffice zurückgeschrieben.
- Execution: Die Marketing-Automation nutzt diese Felder (
{udf_opener},{udf_intro}), um hoch-personalisierte E-Mails zu versenden.
3. Umgang mit Shared Code (helpers.py & Co.)
Wir kapseln das neue Projekt vollständig ab ("Fork & Clean").
- Quelle:
helpers.py(Root) - Ziel:
company-explorer/backend/lib/core_utils.py - Aktion: Wir kopieren nur relevante Teile und ergänzen sie (z.B.
safe_eval_math,run_serp_search).
4. Datenstruktur (SQLite Schema)
Tabelle companies (Stammdaten & Analyse)
id(PK)name(String)website(String)crm_id(String, nullable - Link zum D365)industry_crm(String - Die "erlaubte" Branche aus Notion)city(String)country(String - Standard: "DE" oder aus Impressum)status(Enum: NEW, IMPORTED, ENRICHED, QUALIFIED)- NEU (v0.7.0):
calculated_metric_name(String - z.B. "Anzahl Betten")calculated_metric_value(Float - z.B. 180)calculated_metric_unit(String - z.B. "Betten")standardized_metric_value(Float - z.B. 4500)standardized_metric_unit(String - z.B. "m²")metric_source(String - "website", "wikipedia", "serpapi")
Tabelle signals (Deprecated)
- Veraltet ab v0.7.0. Wird durch quantitative Metriken in
companiesersetzt.
Tabelle contacts (Ansprechpartner)
id(PK)account_id(FK -> companies.id)gender,title,first_name,last_name,emailjob_title(Visitenkarte)role(Standardisierte Rolle: "Operativer Entscheider", etc.)status(Marketing Status)
Tabelle industries (Branchen-Fokus - Synced from Notion)
id(PK)notion_id(String, Unique)name(String - "Vertical" in Notion)description(Text - "Definition" in Notion)metric_type(String - "Metric Type")min_requirement(Float - "Min. Requirement")whale_threshold(Float - "Whale Threshold")proxy_factor(Float - "Proxy Factor")scraper_search_term(String - "Scraper Search Term")scraper_keywords(Text - "Scraper Keywords")standardization_logic(String - "Standardization Logic")
Tabelle job_role_mappings (Rollen-Logik)
id(PK)pattern(String - Regex für Jobtitles)role(String - Zielrolle)
5. Phasenplan Umsetzung
- Housekeeping: Archivierung des Legacy-Codes (
_legacy_gsheets_system). - Setup: Init
company-explorer(Backend + Frontend Skeleton). - Foundation: DB-Schema + "List Matcher" (Deduplizierung ist Prio A für Operations).
- Enrichment: Implementierung des Scrapers + Signal Detector (Robotics).
- UI: React Interface für die Daten.
- CRM-Features: Contacts Management & Marketing Automation Status.
6. Spezifikation: Contacts & Marketing Status (v0.5.0)
Konzept: Contacts stehen in 1:n Beziehung zu Accounts. Accounts können einen "Primary Contact" haben.
Rollen (Funktion im Verkaufsprozess):
- Operativer Entscheider
- Infrastruktur-Verantwortlicher
- Wirtschaftlicher Entscheider
- Innovations-Treiber
Status (Marketing Automation):
- Manuell: Soft Denied, Bounced, Redirect, Interested, Hard denied.
- Automatisch: Init, 1st Step, 2nd Step, Not replied, Unsubscribed.
6.1 Feature: Unsubscribe-Funktionalität (v2.1 - Feb 2026)
Konzept: Um DSGVO-konforme Marketing-Automatisierung zu ermöglichen, wurde eine sichere Unsubscribe-Funktion implementiert.
Technische Umsetzung:
- Token: Jeder Kontakt in der
contacts-Tabelle erhält ein einzigartiges, nicht erratbaresunsubscribe_token(UUID). - Link-Generierung: Der Company Explorer generiert einen vollständigen, personalisierten Link (z.B.
https://<APP_BASE_URL>/unsubscribe/<token>). - API-Endpunkt: Ein öffentlicher GET-Endpunkt
/unsubscribe/{token}nimmt Abmeldungen ohne Authentifizierung entgegen. - Logik:
- Bei Aufruf des Links wird der Status des zugehörigen Kontakts auf
"unsubscribed"gesetzt. - Der Benutzer erhält eine simple HTML-Bestätigungsseite.
- Bei Aufruf des Links wird der Status des zugehörigen Kontakts auf
- CRM-Integration: Der generierte Link wird über die Provisioning-API an den
connector-superofficezurückgegeben, der ihn in ein entsprechendes UDF in SuperOffice schreibt.
7. Historie & Fixes (Jan 2026)
* **[CRITICAL] v0.7.4: Service Restoration & Logic Fix (Jan 24, 2026)**
* **[STABILITY] v0.7.3: Hardening Metric Parser & Regression Testing (Jan 23, 2026)**
* **[STABILITY] v0.7.2: Robust Metric Parsing (Jan 23, 2026)**
* **[STABILITY] v0.7.1: AI Robustness & UI Fixes (Jan 21, 2026)**
* **[MAJOR] v0.7.0: Quantitative Potential Analysis (Jan 20, 2026)**
* **[UPGRADE] v0.6.x: Notion Integration & UI Improvements**
8. Eingesetzte Prompts (Account-Analyse v0.7.4)
8.1 Strict Industry Classification
Ordnet das Unternehmen einer definierten Branche zu.
prompt = f"""
Act as a strict B2B Industry Classifier.
Company: {company_name}
Context: {website_text[:3000]}
Available Industries:
{json.dumps(industry_definitions, indent=2)}
Task: Select the ONE industry that best matches the company.
If none match well, select 'Others'.
"""
8.2 Metric Extraction
Extrahiert den spezifischen Zahlenwert ("Scraper Search Term") und liefert JSON für den MetricParser.
prompt = f"""
Extract the following metric for the company in industry '{industry_name}':
Target Metric: "{search_term}"
Source Text:
{text_content[:6000]}
Return a JSON object with 'raw_value', 'raw_unit', 'proof_text'.
"""
9. Notion Integration (Single Source of Truth)
Das System nutzt Notion als zentrales Steuerungselement für strategische Definitionen.
9.1 Datenfluss
- Definition: Branchen und Robotik-Kategorien werden in Notion gepflegt.
- Synchronisation: Das Skript
sync_notion_industries.pyzieht die Daten via API (Upsert). - App-Nutzung: Der
ClassificationServicenutzt sie als "System-Anweisung" für das LLM.
10. Database Migration
Bei Schema-Änderungen: docker exec -it company-explorer python3 backend/scripts/migrate_db.py.
11. Lessons Learned (Retrospektive Jan 24, 2026)
- FastAPI Routing: Spezifische Endpunkte immer VOR dynamischen Endpunkten deklarieren.
- Docker Persistence: Datenbankdatei muss zwingend als Volume gemountet sein.
- Formel-Robustheit: Bereinigung von Einheiten/Kommentaren vor
eval().
12. Deployment & Access Notes
- Pfad auf NAS:
/volume1/homes/Floke/python/brancheneinstufung/company-explorer - Sync:
docker exec -it company-explorer python backend/scripts/sync_notion_to_ce_enhanced.py
13. Feature: Report Mistakes
Benutzer können Fehler im Inspector melden. Diese werden in reported_mistakes gespeichert und in den Settings zur Prüfung angezeigt.
14. Upgrade v2.0 (Feb 18, 2026): "Lead-Fabrik" Erweiterung
Dieses Upgrade transformiert den Company Explorer in das zentrale Gehirn der Lead-Generierung (Vorratskammer).
14.1 Detaillierte Logik der neuen Datenfelder
confidence_score(FLOAT): Indikator für die Sicherheit der KI-Klassifizierung.> 0.8= Grün.data_mismatch_score(FLOAT): Abweichung zwischen CRM-Bestand und Web-Recherche (z.B. Umzug).crm_name,crm_address,crm_website,crm_vat: Read-Only Snapshot aus SuperOffice zum Vergleich.- Status-Flags:
website_scrape_statusundwiki_search_status.
Tabelle industries (Strategie-Parameter)
pains/gains: Strukturierte Textblöcke (getrennt durch[Primary Product]und[Secondary Product]).ops_focus_secondary(BOOLEAN): Steuerung für rollenspezifische Produkt-Priorisierung.
15. Offene Arbeitspakete (Bauleitung)
Task 1: UI-Anpassung - Side-by-Side CRM View & Settings
(In Arbeit / Teilweise erledigt durch Gemini CLI)
Task 2: Intelligenter CRM-Importer (Bestandsdaten)
Ziel: Importieren der demo_100.xlsx in die SQLite-Datenbank.
- PLZ-Handling: Zwingend als String einlesen.
- Matching: Kaskade über CRM-ID, VAT, Domain, Fuzzy Name.
16. Deployment-Referenz (NAS)
- Pfad:
/volume1/homes/Floke/python/brancheneinstufung/company-explorer - DB:
/app/companies_v3_fixed_2.db
17. Analyse-Logik v3.0 (Feb 2026): Quantitative Potenzialanalyse & "Atomic Opener"
17.1 Das Gesamtbild: Vom Content zur fertigen Analyse
- Branchen-Klassifizierung -> 2. Quantitative Potenzialanalyse -> 3. "Atomic Opener" Generierung -> 4. Finales Commit.
17.2 Quantitative Potenzialanalyse im Detail
Ziel: Für jedes Unternehmen einen standardized_metric_value in m² zu ermitteln.
- Stufe 1: Direkte Flächensuche ("Fläche", "m²").
- Stufe 2: Proxy-Metrik-Suche (z.B. Betten * 100).
17.3 "Atomic Opener" Generierung im Detail (Zweistufiger Prozess, Feb 22, 2026)
Ziel: Zwei hoch-personalisierte, schlagkräftige Einleitungssätze (2-3 Sätze).
- Schritt 1: Das Website-Dossier (Extraktion & Komprimierung).
- Schritt 2: Formulierung des Openers (Scharfsinnige Beobachtung).
17.7 Marketing Matrix Schärfung (v3.2 - Feb 22, 2026)
Die Qualität der Marketing-Matrix (Subject, Intro, Social Proof) ist entscheidend für den Erfolg des Outreachs.
Kern-Konzept: Der Strategische Brückenschlag Die KI agiert nicht mehr als reiner Copywriter, sondern als scharfsinniger B2B-Strategieberater ("Lösungsberater").
Neues Feature: "Ops Focus: Secondary" (Die Rollen-Weiche)
Wenn in Notion das Flag Ops Focus: Secondary aktiv ist, wechselt die Engine für die Persona "Operativer Entscheider" automatisch auf das Sekundärprodukt (z.B. Service-Roboter/Transport).
Der "Lösungsberater" Prompt (Auszug):
prompt = f"""
Du bist ein kompetenter Lösungsberater und brillanter Texter.
AUFGABE: Erstelle 3 Textblöcke (Subject, Introduction_Textonly, Industry_References_Textonly) für eine E-Mail an einen Entscheider.
--- KONTEXT ---
ZIELBRANCHE: {industry.name}
BRANCHEN-HERAUSFORDERUNGEN (PAIN POINTS): {industry_pains}
FOKUS-PRODUKT (LÖSUNG): {target_scope} ({product_context})
ANSPRECHPARTNER (ROLLE): {persona.name}
PERSÖNLICHE HERAUSFORDERUNGEN: {persona_pains}
"""
17.8 Erweiterte Matrix-Multiplikation: Primary vs. Secondary (Update Feb 24, 2026)
Konzept: Strikte Trennung zwischen [Primary Product] und [Secondary Product] zur Vermeidung logischer Brüche.
17.9 Deep Persona Injection (Update Feb 24, 2026)
Ziel: Maximale Relevanz durch Einbezug psychografischer und operativer Rollen-Details ("Voll ins Zentrum").
Die Erweiterung:
- Vollständiger Daten-Sync: Übernahme von
Beschreibung/Denkweise,Was ihn überzeugtundKPIsaus der Notion "Personas / Roles" Datenbank in das lokale Schema. - Rollenspezifische Tonalität: Die KI nutzt diese Details, um den "Ton" der jeweiligen Persona perfekt zu treffen (z.B. technischer Fokus beim Infrastruktur-Leiter vs. betriebswirtschaftlicher Fokus beim CFO).
Beispiel-Kaskade (Klinikum Erding):
- Opener: "Klinikum Erding trägt maßgeblich zur regionalen Versorgung bei... Dokumentation lückenloser Hygiene stellt eine operative Herausforderung dar."
- Matrix-Anschluss (Infrastruktur): "...minimieren Ausfallzeiten um 80-90% durch proaktives Monitoring... planbare Wartung und Transparenz durch feste SLAs." (Direkter Bezug auf hinterlegte Überzeugungsargumente).
- Matrix-Anschluss (Wirtschaftlich): "...Reduktion operativer Personalkosten um 10-25%... wirkt sich direkt auf ROI und Amortisationszeit aus." (Direkter Bezug auf hinterlegte KPIs).
17.10 Production Switch & Multi-Campaign Architecture (Feb 27, 2026)
Das System wurde erfolgreich von der Sandbox auf die SuperOffice-Produktionsumgebung migriert. Alle technischen Hürden (Auth, ProgIDs, REST-Besonderheiten) wurden beseitigt.
A. Umgebungsparameter (Production)
- Base URL (OAuth):
https://online.superoffice.com/login/common/oauth/tokens - Base URL (API):
https://online3.superoffice.com/Cust26720/api/v1/ - Tenant ID:
Cust26720 - Client ID:
0fd8272803551846f7212a961a1a0046
B. Finales UDF Mapping (ProgIDs)
Verifizierte IDs für den Mandanten Cust26720:
| Zweck | Entität | ProgID | Format / Logik |
|---|---|---|---|
| MA Subject | Person | SuperOffice:19 |
Text |
| MA Intro | Person | SuperOffice:20 |
Text |
| MA Social Proof | Person | SuperOffice:21 |
Text |
| MA Unsubscribe | Person | SuperOffice:22 |
URL (DSGVO konform) |
| MA Campaign | Person | SuperOffice:23 |
Liste (Auflösung via :DisplayText) |
| Vertical | Contact | SuperOffice:83 |
Liste (Mapping siehe unten) |
| AI Summary | Contact | SuperOffice:84 |
Truncated (< 135 Zeichen) |
| AI Last Update | Contact | SuperOffice:85 |
Datum: [D:MM/DD/YYYY HH:MM:SS] |
| Opener Primary | Contact | SuperOffice:86 |
Text (Infrastruktur/Cleaning) |
| Opener Secondary | Contact | SuperOffice:87 |
Text (Service/Logistik) |
| Last Outreach | Contact | SuperOffice:88 |
Datum |
C. Vollständige Vertical-Liste (Produktiv-IDs)
Die Liste udlist331 steuert die Branchenzuordnung. Der Connector nutzt folgendes Mapping:
Automotive - Dealer: 1613, Corporate - Campus: 1614, Energy - Grid & Utilities: 1615, Energy - Solar/Wind: 1616, Healthcare - Care Home: 1617, Healthcare - Hospital: 1618, Hospitality - Gastronomy: 1619, Hospitality - Hotel: 1620, Industry - Manufacturing: 1621, Infrastructure - Communities: 1622, Infrastructure - Public: 1623, Infrastructure - Transport: 1624, Infrastructure - Parking: 1625, Leisure - Entertainment: 1626, Leisure - Fitness: 1627, Leisure - Indoor Active: 1628, Leisure - Outdoor Park: 1629, Leisure - Wet & Spa: 1630, Logistics - Warehouse: 1631, Others: 1632, Reinigungsdienstleister: 1633, Retail - Food: 1634, Retail - Non-Food: 1635, Retail - Shopping Center: 1636, Tech - Data Center: 1637.
D. Technische Meilensteine (Lessons Learned)
- Atomic PATCH Workflow: Um API-Timeouts und Inkonsistenzen zu vermeiden, bündelt der
worker.py(v1.8) alle Änderungen an einem Kontakt in einem einzigenPATCH-Request an/Contact/{id}. - Website-Sync (REST-Korrektur): Die Aktualisierung der Website erfolgt über das
Urls-Array (nichtUrlAddress). Format:"Urls": [{"Value": "...", "Description": "AI Discovered"}]. - Listen-Auflösung (Optimierung): Kampagnen-Namen werden ohne zusätzliche API-Calls über das Pseudo-Feld
ProgID:DisplayText(z.B.SuperOffice:23:DisplayText) direkt im Payload des Personen-Abrufs gelesen. - Längenbegrenzung: Da viele UDFs in SuperOffice standardmäßig auf 254 Zeichen begrenzt sind, wird das AI-Dossier (Summary) hart auf 132 Zeichen (+ "...") gekürzt, um 400er Fehler beim Update zu vermeiden.
- Docker Orchestrierung: Der Wechsel auf
env_file: .envin derdocker-compose.ymlstellt sicher, dass alle Services (CE + Connector) konsistent auf dieselben Mappings zugreifen.
E. Kampagnen-Steuerung (Multi-Template)
Der Company Explorer unterstützt nun den Parameter campaign_tag. Der Connector sendet den Namen des gewählten Listeneintrags (z.B. "First Contact") an den CE. Dieser liefert spezifische Texte aus der MarketingMatrix, sofern vorhanden (Fallback: "standard").
19. External Lead Ingestion & Contact API (v3.5 - March 2, 2026)
Kontext: Automatisierte Verarbeitung von externen Lead-Quellen (Tradingtwins) direkt in den Company Explorer.
19.1 API-Erweiterung: Externer Kontakt-Sync
Um Kontakte von externen Tools (wie der Lead-Engine) ohne SuperOffice-Kontext zu übernehmen, wurde die API erweitert.
- Neuer Endpunkt:
POST /api/contacts - Funktionalität:
- Anlage von Personen-Stammdaten (Vorname, Nachname, E-Mail).
- Automatisches Role-Mapping: Der Endpunkt integriert den
RoleMappingService. Eingehende Job-Titel (z.B. "CFO") werden automatisch gegen die interne Muster-Datenbank geprüft und der passenden Persona (z.B. "Wirtschaftlicher Entscheider") zugeordnet. - De-Duplizierung: Existiert eine E-Mail bereits für ein Unternehmen, wird der Datensatz aktualisiert statt neu angelegt.
19.2 Standardisierung der Datenfelder
Zur Verbesserung der asynchronen Zusammenarbeit zwischen Lead-Engine und CE wurden die Feldnamen in der API-Antwort vereinheitlicht:
- Branche:
industry_ai(Primärfeld für die KI-Klassifizierung). - Analyse:
research_dossier(Das vollständige KI-generierte Firmendossier).
19.3 Synchronisations-Workflow (Connector)
Der company_explorer_connector.py unterstützt nun den erweiterten Workflow:
check_company_existence(Suche via Name)create_company(Anlage falls neu)create_contact(Integration der Person inkl. Role-Mapping)trigger_discovery/trigger_analysis(Asynchroner Start der Intelligence-Phase)