From 9e43ddc59c4d52a97c44d3a3f28256d599281d03 Mon Sep 17 00:00:00 2001 From: Floke Date: Mon, 12 May 2025 18:11:08 +0000 Subject: [PATCH] =?UTF-8?q?v1.7.5:=20Spaltenreihenfolge=20f=C3=BCr=20Times?= =?UTF-8?q?tamps=20und=20Plausi-Checks=20optimiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - "Contact Search Timestamp" nach "Geschaetzter Techniker Bucket" verschoben. - 6 Plausibilitäts-Check-Spalten danach eingefügt. - Neue Spalte "Plausibilität Prüfdatum" hinzugefügt. - COLUMN_MAP und alignment_demo entsprechend der neuen 64-Spalten-Struktur (A-BL) aktualisiert. --- brancheneinstufung.py | 126 +++++++++++++++++++++++++----------------- 1 file changed, 75 insertions(+), 51 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 6c58077f..70f8d042 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -134,6 +134,17 @@ class Config: SERPAPI_DELAY = 1.5 # Pause zwischen einzelnen SerpAPI-Aufrufen (Sekunden) + PLAUSI_UMSATZ_MIN_WARNUNG = 50000 + PLAUSI_UMSATZ_MAX_WARNUNG = 200000000000 + PLAUSI_MA_MIN_WARNUNG_ABS = 1 + PLAUSI_MA_MIN_WARNUNG_BEI_UMSATZ = 3 + PLAUSI_UMSATZ_MIN_SCHWELLE_FUER_MA_CHECK = 1000000 + PLAUSI_MA_MAX_WARNUNG = 1000000 + PLAUSI_RATIO_UMSATZ_PRO_MA_MIN = 25000 + PLAUSI_RATIO_UMSATZ_PRO_MA_MAX = 1500000 + PLAUSI_ABWEICHUNG_CRM_WIKI_PROZENT = 30 + + # --- API Schluessel Speicherung (werden in main() geladen) --- API_KEYS = {} @@ -248,24 +259,22 @@ COLUMN_MAP = { "Linked Management gefunden": 48, # AW (vorher AV) "Linked Disponent gefunden": 49, # AX (vorher AW) - # Konsolidierte Werte & ML (AY-BA) - VORHER AX-AZ - "Finaler Umsatz (Wiki>CRM)": 50, # AY (vorher AX) - "Finaler Mitarbeiter (Wiki>CRM)": 51, # AZ (vorher AY) - "Geschaetzter Techniker Bucket": 52, # BA (vorher AZ) + "Contact Search Timestamp": 50, # AY (KORREKT VERSCHOBEN) + "Finaler Umsatz (Wiki>CRM)": 51, # AZ (war AY) + "Finaler Mitarbeiter (Wiki>CRM)": 52, # BA (war AZ) + "Geschaetzter Techniker Bucket": 53, # BB (war BA) + "Plausibilität Umsatz": 54, # BC + "Plausibilität Mitarbeiter": 55, # BD + "Plausibilität Umsatz/MA Ratio": 56, # BE + "Abweichung Umsatz CRM/Wiki": 57, # BF + "Abweichung MA CRM/Wiki": 58, # BG + "Plausibilität Begründung": 59, # BH + "Plausibilität Prüfdatum": 60, # BI - # NEUE PLAUSIBILITÄTS-SPALTEN (BB-BG) - "Plausibilität Umsatz": 53, # BB (NEU) - "Plausibilität Mitarbeiter": 54, # BC (NEU) - "Plausibilität Umsatz/MA Ratio": 55, # BD (NEU) - "Abweichung Umsatz CRM/Wiki": 56, # BE (NEU) - "Abweichung MA CRM/Wiki": 57, # BF (NEU) - "Plausibilität Begründung": 58, # BG (NEU) - - # Timestamps (Rest) & System (BH-BJ) - Indizes angepasst - "Contact Search Timestamp": 59, # BH (vorher 53 -> BA) - "Timestamp letzte Pruefung": 60, # BI (vorher 54 -> BB) - "Version": 61, # BJ (vorher 55 -> BC) - "Tokens": 62, # BK (vorher 56 -> BD) # Ups, hier war ein Fehler in meiner Zählung. 58+3=61, also BK + # Systemspalten (BJ-BL) + "Timestamp letzte Pruefung": 61, # BJ (ChatGPT Eval TS) + "Version": 62, # BK + "Tokens": 63, # BL } # --- Globale Variablen fuer Branch Mapping (werden von load_target_schema() befuellt) --- @@ -2505,14 +2514,17 @@ def alignment_demo(sheet): new_headers = [ [ # Zeile 1: Spaltenname + # ... (A-AX unverändert lassen bis "Linked Disponent gefunden") ... "ReEval Flag", "CRM Name", "CRM Kurzform", "CRM Website", "CRM Ort", "CRM Land", "CRM Beschreibung", "CRM Branche", "CRM Beschreibung Branche extern", "CRM Anzahl Techniker", "CRM Umsatz", "CRM Anzahl Mitarbeiter", "CRM Vorschlag Wiki URL", "Wiki URL", "Wiki Sitz Stadt", "Wiki Sitz Land", "Wiki Absatz", "Wiki Branche", "Wiki Umsatz", "Wiki Mitarbeiter", "Wiki Kategorien", "Wikipedia Timestamp", "Wiki Verif. Timestamp", "SerpAPI Wiki Search Timestamp", "Chat Wiki Konsistenzpruefung", "Chat Begründung Wiki Inkonsistenz", "Chat Vorschlag Wiki Artikel", "Begründung bei Abweichung", "Website Rohtext", "Website Zusammenfassung", "Website Meta-Details", "Website Scrape Timestamp", "URL Prüfstatus", "Chat Vorschlag Branche", "Chat Branche Konfidenz", "Chat Konsistenz Branche", "Chat Begruendung Abweichung Branche", "Chat Prüfung FSM Relevanz", "Chat Begründung für FSM Relevanz", "Chat Schätzung Anzahl Mitarbeiter", "Chat Konsistenzprüfung Mitarbeiterzahl", "Chat Begründung Abweichung Mitarbeiterzahl", "Chat Einschätzung Anzahl Servicetechniker", "Chat Begründung Abweichung Anzahl Servicetechniker", "Chat Schätzung Umsatz", "Chat Begründung Abweichung Umsatz", "Linked Serviceleiter gefunden", "Linked It-Leiter gefunden", "Linked Management gefunden", "Linked Disponent gefunden", - "Finaler Umsatz (Wiki>CRM)", "Finaler Mitarbeiter (Wiki>CRM)", "Geschaetzter Techniker Bucket", - "Plausibilität Umsatz", "Plausibilität Mitarbeiter", "Plausibilität Umsatz/MA Ratio", "Abweichung Umsatz CRM/Wiki", "Abweichung MA CRM/Wiki", "Plausibilität Begründung", # NEU - "Contact Search Timestamp", "Timestamp letzte Prüfung", "Version", "Tokens" + # --- KORRIGIERTE REIHENFOLGE / NEUE SPALTEN AB AY --- + "Contact Search Timestamp", "Finaler Umsatz (Wiki>CRM)", "Finaler Mitarbeiter (Wiki>CRM)", "Geschaetzter Techniker Bucket", + "Plausibilität Umsatz", "Plausibilität Mitarbeiter", "Plausibilität Umsatz/MA Ratio", "Abweichung Umsatz CRM/Wiki", "Abweichung MA CRM/Wiki", "Plausibilität Begründung", + "Plausibilität Prüfdatum", + "Timestamp letzte Prüfung", "Version", "Tokens" ], [ # Zeile 2: Quelle der Daten "CRM", "CRM", "CRM", "CRM", "CRM", "CRM/Manuell", "CRM", "CRM", "CRM", "CRM", "CRM", "CRM", "CRM", @@ -2520,8 +2532,14 @@ def alignment_demo(sheet): "Web Scraper", "ChatGPT API", "Web Scraper", "System", "System/Web Scraper", "ChatGPT API", "ChatGPT API", "System/ChatGPT API", "ChatGPT API", "ChatGPT API", "ChatGPT API", "ChatGPT API", "System/ChatGPT API", "ChatGPT API", "ChatGPT API", "ChatGPT API", "ChatGPT API", "ChatGPT API", "LinkedIn (via SerpApi)", "LinkedIn (via SerpApi)", "LinkedIn (via SerpApi)", "LinkedIn (via SerpApi)", - "Skript (Wiki/CRM Logik)", "Skript (Wiki/CRM Logik)", "Skript (Plausi-Check)", "Skript (Plausi-Check)", "Skript (Plausi-Check)", "Skript (Plausi-Check)", "Skript (Plausi-Check)", "Skript (Plausi-Check)", # NEU - "System", "System", "System", "System", "System" + "System", # AY: Contact Search Timestamp + "Skript (Wiki/CRM Logik)", # AZ: Finaler Umsatz + "Skript (Wiki/CRM Logik)", # BA: Finaler Mitarbeiter + "ML Modell / Skript", # BB: Geschaetzter Techniker Bucket + "Skript (Plausi-Check)", "Skript (Plausi-Check)", "Skript (Plausi-Check)", "Skript (Plausi-Check)", "Skript (Plausi-Check)", "Skript (Plausi-Check)", # BC-BH: Plausi + "System (Plausi-Check TS)",# BI: Plausi Prüfdatum + "System", "System", "System" # BJ-BL: Rest + ], ], [ # Zeile 3: Feldkategorie "Prozess", "Firmenname", "Firmenname", "Website", "Ort", "Land", "Beschreibung (Text)", "Branche", "Branche", "Anzahl Servicetechniker", "Umsatz", "Anzahl Mitarbeiter", "Wikipedia Artikel URL", @@ -2529,9 +2547,13 @@ def alignment_demo(sheet): "Website-Content", "Website-Content (Zusammenfassung)", "Website-Content (Meta)", "Timestamp", "Prozess-Status", "Branche (Vorschlag KI)", "Branche (Konfidenz KI)", "Branche (Konsistenz)", "Branche (Begründung KI)", "FSM Relevanz (KI)", "FSM Relevanz (Begründung KI)", "Anzahl Mitarbeiter (KI)", "Anzahl Mitarbeiter (Konsistenz KI)", "Anzahl Mitarbeiter (Begründung KI)", "Anzahl Servicetechniker (KI)", "Anzahl Servicetechniker (Begründung KI)", "Umsatz (KI)", "Umsatz (Begründung KI)", "Kontakte (Anzahl)", "Kontakte (Anzahl)", "Kontakte (Anzahl)", "Kontakte (Anzahl)", - "Umsatz (Konsolidiert)", "Anzahl Mitarbeiter (Konsolidiert)", "Anzahl Servicetechniker (Bucket ML)", - "Plausibilität", "Plausibilität", "Plausibilität", "Datenqualitäts-Indikator", "Datenqualitäts-Indikator", "Plausibilität (Text)", # NEU - "Timestamp", "Timestamp", "Skript Version", "API Tokens" + "Timestamp", # AY: Contact Search Timestamp + "Umsatz (Konsolidiert)", # AZ + "Anzahl Mitarbeiter (Konsolidiert)", # BA + "Anzahl Servicetechniker (Bucket ML)", # BB + "Plausibilität", "Plausibilität", "Plausibilität", "Datenqualitäts-Indikator", "Datenqualitäts-Indikator", "Plausibilität (Text)", # BC-BH: Plausi + "Timestamp (Plausi)", # BI: Plausi Prüfdatum + "Timestamp", "Skript Version", "API Tokens" ], [ # Zeile 4: Kurze Beschreibung "Systemspalte, irrelevant für den Prompt. 'x' markiert Zeile für Re-Evaluation.", #A @@ -2584,19 +2606,20 @@ def alignment_demo(sheet): "Anzahl der via SerpAPI gefundenen LinkedIn-Kontakte für die Kategorie 'IT-Leiter'.", #AV "Anzahl der via SerpAPI gefundenen LinkedIn-Kontakte für die Kategorie 'Management'.", #AW "Anzahl der via SerpAPI gefundenen LinkedIn-Kontakte für die Kategorie 'Disponent'.", #AX - "Konsolidierter Umsatzwert in Mio. €. Priorisiert Wiki (S) > CRM (K).", #AY - "Konsolidierte Mitarbeiterzahl. Priorisiert Wiki (T) > CRM (L).", #AZ - "Ergebnis der Schätzung durch das trainierte Machine-Learning-Modell.", #BA - "Plausibilitätsstatus für den finalen Umsatzwert (z.B. OK, WARNUNG_HOCH).", #BB (NEU) - "Plausibilitätsstatus für die finale Mitarbeiterzahl (z.B. OK, WARNUNG_NIEDRIG).", #BC (NEU) - "Plausibilitätsstatus für die Umsatz-pro-Mitarbeiter-Ratio.", #BD (NEU) - "Indikator für Abweichung zwischen CRM- und Wiki-Umsatz.", #BE (NEU) - "Indikator für Abweichung zwischen CRM- und Wiki-Mitarbeiterzahl.", #BF (NEU) - "Gesammelte Begründungen für Plausibilitätswarnungen oder -fehler.", #BG (NEU) - "Zeitstempel der letzten Kontaktsuche via SerpAPI für diese Zeile.", #BH - "Zeitstempel der letzten übergreifenden Prüfung/Bewertung durch ChatGPT (z.B. Branchenevaluation AH-AT).", #BI - "Version des Skripts, die diese Zeile zuletzt signifikant bearbeitet hat.", #BJ - "Verbrauchte Tokens für OpenAI API-Aufrufe für diese Zeile." #BK + "Zeitstempel der letzten Kontaktsuche via SerpAPI für diese Zeile.", #AY + "Konsolidierter Umsatzwert in Mio. €. Priorisiert Wiki (S) > CRM (K).", #AZ + "Konsolidierte Mitarbeiterzahl. Priorisiert Wiki (T) > CRM (L).", #BA + "Ergebnis der Schätzung durch das trainierte Machine-Learning-Modell.", #BB + "Plausibilitätsstatus für den finalen Umsatzwert (z.B. OK, WARNUNG_HOCH).", #BC + "Plausibilitätsstatus für die finale Mitarbeiterzahl (z.B. OK, WARNUNG_NIEDRIG).", #BD + "Plausibilitätsstatus für die Umsatz-pro-Mitarbeiter-Ratio.", #BE + "Indikator für Abweichung zwischen CRM- und Wiki-Umsatz.", #BF + "Indikator für Abweichung zwischen CRM- und Wiki-Mitarbeiterzahl.", #BG + "Gesammelte Begründungen für Plausibilitätswarnungen oder -fehler.", #BH + "Zeitstempel des letzten Plausibilitäts-Checks.", #BI + "Zeitstempel der letzten übergreifenden Prüfung/Bewertung durch ChatGPT (z.B. Branchenevaluation AH-AT).", #BJ + "Version des Skripts, die diese Zeile zuletzt signifikant bearbeitet hat.", #BK + "Verbrauchte Tokens für OpenAI API-Aufrufe für diese Zeile." #BL ], [ # Zeile 5: Aufgabe / Funktion "Datenquelle/Prozesssteuerung: 'x' markiert Zeile für Re-Evaluation in Modus 'reeval'.", #A @@ -2649,19 +2672,20 @@ def alignment_demo(sheet): "Ziel: Anzahl gefundener LinkedIn-Kontakte (IT-Leiter) via SerpAPI.", #AV "Ziel: Anzahl gefundener LinkedIn-Kontakte (Management) via SerpAPI.", #AW "Ziel: Anzahl gefundener LinkedIn-Kontakte (Disponent) via SerpAPI.", #AX - "Ziel: Konsolidierter Umsatz (Wiki-Wert (S) > CRM-Wert (K)). Input für ML-Modell.", #AY - "Ziel: Konsolidierte Mitarbeiterzahl (Wiki-Wert (T) > CRM-Wert (L)). Input für ML-Modell.", #AZ - "Vom ML-Modell vorhergesagter Bucket für die Anzahl der Servicetechniker.", #BA - "Ziel: Kennzeichnung der Plausibilität des finalen Umsatzwertes.", #BB (NEU) - "Ziel: Kennzeichnung der Plausibilität der finalen Mitarbeiterzahl.", #BC (NEU) - "Ziel: Kennzeichnung der Plausibilität der Umsatz-pro-Mitarbeiter-Verhältniszahl.", #BD (NEU) - "Ziel: Indikator zur Datenqualität bezüglich Umsatz CRM vs. Wiki.", #BE (NEU) - "Ziel: Indikator zur Datenqualität bezüglich Mitarbeiter CRM vs. Wiki.", #BF (NEU) - "Ziel: Zusammenfassung der Gründe für erkannte Plausibilitätsprobleme.", #BG (NEU) - "System: Timestamp der letzten Kontaktsuche (Modus 'contacts'). Steuert Wiederholung.", #BH - "System: Timestamp der letzten übergreifenden ChatGPT-Evaluation (Branchen, FSM etc.). Steuert Wiederholung.", #BI - "System: Skriptversion, die die Zeile zuletzt signifikant bearbeitet hat.", #BJ - "System: Verbrauchte Tokens für OpenAI API-Aufrufe für diese Zeile." #BK + "System: Timestamp der letzten Kontaktsuche (Modus 'contacts'). Steuert Wiederholung.", #AY + "Ziel: Konsolidierter Umsatz (Wiki-Wert (S) > CRM-Wert (K)). Input für ML-Modell.", #AZ + "Ziel: Konsolidierte Mitarbeiterzahl (Wiki-Wert (T) > CRM-Wert (L)). Input für ML-Modell.", #BA + "Vom ML-Modell vorhergesagter Bucket für die Anzahl der Servicetechniker.", #BB + "Ziel: Kennzeichnung der Plausibilität des finalen Umsatzwertes.", #BC + "Ziel: Kennzeichnung der Plausibilität der finalen Mitarbeiterzahl.", #BD + "Ziel: Kennzeichnung der Plausibilität der Umsatz-pro-Mitarbeiter-Verhältniszahl.", #BE + "Ziel: Indikator zur Datenqualität bezüglich Umsatz CRM vs. Wiki.", #BF + "Ziel: Indikator zur Datenqualität bezüglich Mitarbeiter CRM vs. Wiki.", #BG + "Ziel: Zusammenfassung der Gründe für erkannte Plausibilitätsprobleme.", #BH + "System: Timestamp des letzten Plausibilitäts-Checks. Steuert Wiederholung.", #BI + "System: Timestamp der letzten übergreifenden ChatGPT-Evaluation (Branchen, FSM etc.). Steuert Wiederholung.", #BJ + "System: Skriptversion, die die Zeile zuletzt signifikant bearbeitet hat.", #BK + "System: Verbrauchte Tokens für OpenAI API-Aufrufe für diese Zeile." #BL ] ]