Fix - Protect Manual Inputs during Re-Evaluation

- FIX: `process_reevaluation_rows` in `data_processor.py` leert nun nicht mehr die Spalten für manuell eingetragene Wiki-URLs (N und R).
- Dies verhindert das ungewollte Überschreiben von wertvollen, manuell recherchierten Daten während eines `reeval`-Laufs.
- Das System respektiert nun manuelle Eingaben als "Source of Truth" für die Wiki-Extraktion.
This commit is contained in:
2025-07-01 20:23:34 +00:00
parent 8722d7b76a
commit 5bd5195955

View File

@@ -963,9 +963,11 @@ class DataProcessor:
self.logger.info(f"{found_count} Zeilen mit ReEval-Flag 'x' gefunden.")
if found_count == 0: return
# Spalten definieren, die vor der Neubewertung geleert werden sollen
# NEU: Spalten definieren, die vor der Neubewertung geleert werden sollen
cols_to_clear_keys = [
"Wiki URL", "Wiki Sitz Stadt", "Wiki Sitz Land", "Wiki Absatz", "Wiki Branche",
# WICHTIG: "Wiki URL" (R) und "CRM Vorschlag Wiki URL" (N) werden NICHT mehr geleert,
# um manuelle Einträge zu schützen.
"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 Begruendung Wiki Inkonsistenz", "Chat Vorschlag Wiki Artikel", "Begruendung bei Abweichung",
@@ -974,7 +976,9 @@ class DataProcessor:
"Chat Begruendung Abweichung Branche", "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 Pruefung", "Version", "Tokens"
"Plausibilität Begründung", "Plausibilität Prüfdatum", "Timestamp letzte Pruefung", "Version", "Tokens",
# Der FSM Pitch und sein Timestamp sollten auch geleert werden
"FSM Pitch", "FSM Pitch Timestamp"
]
clear_updates = []
@@ -1075,26 +1079,45 @@ class DataProcessor:
self.logger.debug(f"Verarbeite FSM-Pitch für Zeile {row_num}...")
# --- NEUE PRÜFUNG ---
# Extrahiere die Beschreibungen VOR dem API-Call
website_summary = self._get_cell_value_safe(row_data, "Website Zusammenfassung")
wiki_absatz = self._get_cell_value_safe(row_data, "Wiki Absatz")
beschreibung = website_summary if website_summary and website_summary.lower() not in ['k.a.', ''] else wiki_absatz
# Wenn keine sinnvolle Beschreibung vorhanden ist, überspringe den API-Call
if not beschreibung or beschreibung.lower() in ['k.a.', '']:
self.logger.warning(f"Zeile {row_num}: Überspringe FSM-Pitch-Generierung, da keine Beschreibung vorhanden ist.")
all_sheet_updates.append({
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["FSM Pitch"] + 1)}{row_num}',
'values': [['k.A. (Beschreibung fehlt)']]
})
# Wichtig: Trotzdem den Timestamp setzen, um diese Zeile nicht erneut zu versuchen
all_sheet_updates.append({
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["FSM Pitch Timestamp"] + 1)}{row_num}',
'values': [[now_timestamp]]
})
processed_count += 1
continue # Springe zum nächsten Task in der Schleife
# --- ENDE NEUE PRÜFUNG ---
try:
# Extrahiere alle notwendigen Daten für den Pitch
# Extrahiere die restlichen Daten für den Pitch
company_name = self._get_cell_value_safe(row_data, "CRM Name")
branche = self._get_cell_value_safe(row_data, "Chat Vorschlag Branche") or self._get_cell_value_safe(row_data, "CRM Branche")
website_summary = self._get_cell_value_safe(row_data, "Website Zusammenfassung")
wiki_absatz = self._get_cell_value_safe(row_data, "Wiki Absatz")
final_ma_val_str = self._get_cell_value_safe(row_data, "Finaler Mitarbeiter (Wiki>CRM)")
crm_techniker_val_str = self._get_cell_value_safe(row_data, "CRM Anzahl Techniker")
fsm_pitch_text = generate_fsm_argument(
company_name,
branche,
website_summary,
website_summary, # Wir übergeben die bereits ermittelten Werte
wiki_absatz,
final_ma_val_str,
crm_techniker_val_str
)
# Update für den Pitch
all_sheet_updates.append({
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["FSM Pitch"] + 1)}{row_num}',
'values': [[fsm_pitch_text]]
@@ -1102,13 +1125,12 @@ class DataProcessor:
except Exception as e:
self.logger.error(f"FEHLER bei FSM-Pitch-Generierung für Zeile {row_num}: {e}")
# Update für den Pitch mit Fehlermeldung
all_sheet_updates.append({
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["FSM Pitch"] + 1)}{row_num}',
'values': [['k.A. (Fehler bei Generierung)']]
})
# IMMER den Timestamp setzen, um eine erneute Verarbeitung zu verhindern
# IMMER den Timestamp setzen
all_sheet_updates.append({
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["FSM Pitch Timestamp"] + 1)}{row_num}',
'values': [[now_timestamp]]