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:
@@ -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]]
|
||||
|
||||
Reference in New Issue
Block a user