Regex anpassung

COLUMN_MAP\["([^"]+)"\]
get_col_idx("$1")
This commit is contained in:
2025-07-19 19:45:01 +00:00
parent f9cb3488da
commit 22afa4b1d2

View File

@@ -442,9 +442,9 @@ class DataProcessor:
wiki_title=final_wiki_data.get('title', 'k.A.'),
wiki_summary=final_wiki_data.get('first_paragraph', 'k.A.')
)
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzpruefung"] + 1)}{row_num_in_sheet}', 'values': [[verification_result.get('consistency', 'X')]]})
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Begruendung Wiki Inkonsistenz"] + 1)}{row_num_in_sheet}', 'values': [[verification_result.get('justification', 'Fehler')]]})
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wiki Verif. Timestamp"] + 1)}{row_num_in_sheet}', 'values': [[now_timestamp]]})
updates.append({'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Wiki Konsistenzpruefung") + 1)}{row_num_in_sheet}', 'values': [[verification_result.get('consistency', 'X')]]})
updates.append({'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Begruendung Wiki Inkonsistenz") + 1)}{row_num_in_sheet}', 'values': [[verification_result.get('justification', 'Fehler')]]})
updates.append({'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Wiki Verif. Timestamp") + 1)}{row_num_in_sheet}', 'values': [[now_timestamp]]})
# --- Finales Schreiben ins Sheet ---
if wiki_data_was_extracted_or_updated:
@@ -464,7 +464,7 @@ class DataProcessor:
})
updates.append({
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wikipedia Timestamp"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Wikipedia Timestamp") + 1)}{row_num_in_sheet}',
'values': [[now_timestamp]]
})
@@ -554,13 +554,13 @@ class DataProcessor:
techniker_bucket_ml=self._get_cell_value_safe(row_data, "Geschaetzter Techniker Bucket")
)
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["FSM Pitch"] + 1)}{row_num_in_sheet}', 'values': [[fsm_pitch_text]]})
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["FSM Pitch Timestamp"] + 1)}{row_num_in_sheet}', 'values': [[now_timestamp]]})
updates.append({'range': f'{self.sheet_handler._get_col_letter(get_col_idx("FSM Pitch") + 1)}{row_num_in_sheet}', 'values': [[fsm_pitch_text]]})
updates.append({'range': f'{self.sheet_handler._get_col_letter(get_col_idx("FSM Pitch Timestamp") + 1)}{row_num_in_sheet}', 'values': [[now_timestamp]]})
any_processing_done = True
chat_eval_just_ran = True # Signal, dass eine KI-Aktion stattfand
except Exception as e_fsm_pitch:
self.logger.error(f"FEHLER bei FSM-Pitch-Generierung für Zeile {row_num_in_sheet}: {e_fsm_pitch}")
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["FSM Pitch"] + 1)}{row_num_in_sheet}', 'values': [['FEHLER (Generierung)']]} )
updates.append({'range': f'{self.sheet_handler._get_col_letter(get_col_idx("FSM Pitch") + 1)}{row_num_in_sheet}', 'values': [['FEHLER (Generierung)']]} )
@@ -605,12 +605,12 @@ class DataProcessor:
int(round(final_num_ma))) if final_num_ma > 0 else 'k.A.'
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Finaler Umsatz (Wiki>CRM)"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Finaler Umsatz (Wiki>CRM)") + 1)}{row_num_in_sheet}',
'values': [
[final_umsatz_str_konsolidiert]]})
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Finaler Mitarbeiter (Wiki>CRM)"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Finaler Mitarbeiter (Wiki>CRM)") + 1)}{row_num_in_sheet}',
'values': [
[final_ma_str_konsolidiert]]})
except Exception as e_consolidate:
@@ -619,12 +619,12 @@ class DataProcessor:
final_umsatz_str_konsolidiert, final_ma_str_konsolidiert = "FEHLER_KONSO", "FEHLER_KONSO"
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Finaler Umsatz (Wiki>CRM)"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Finaler Umsatz (Wiki>CRM)") + 1)}{row_num_in_sheet}',
'values': [
['FEHLER_KONSO']]})
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Finaler Mitarbeiter (Wiki>CRM)"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Finaler Mitarbeiter (Wiki>CRM)") + 1)}{row_num_in_sheet}',
'values': [
['FEHLER_KONSO']]})
@@ -658,7 +658,7 @@ class DataProcessor:
plausi_input_data)
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Umsatz"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Plausibilität Umsatz") + 1)}{row_num_in_sheet}',
'values': [
[
plausi_results.get(
@@ -666,7 +666,7 @@ class DataProcessor:
"ERR_FLAG")]]})
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Mitarbeiter"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Plausibilität Mitarbeiter") + 1)}{row_num_in_sheet}',
'values': [
[
plausi_results.get(
@@ -674,7 +674,7 @@ class DataProcessor:
"ERR_FLAG")]]})
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Umsatz/MA Ratio"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Plausibilität Umsatz/MA Ratio") + 1)}{row_num_in_sheet}',
'values': [
[
plausi_results.get(
@@ -682,7 +682,7 @@ class DataProcessor:
"ERR_FLAG")]]})
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Abweichung Umsatz CRM/Wiki"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Abweichung Umsatz CRM/Wiki") + 1)}{row_num_in_sheet}',
'values': [
[
plausi_results.get(
@@ -690,7 +690,7 @@ class DataProcessor:
"ERR_FLAG")]]})
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Abweichung MA CRM/Wiki"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Abweichung MA CRM/Wiki") + 1)}{row_num_in_sheet}',
'values': [
[
plausi_results.get(
@@ -698,7 +698,7 @@ class DataProcessor:
"ERR_FLAG")]]})
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Begründung"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Plausibilität Begründung") + 1)}{row_num_in_sheet}',
'values': [
[
plausi_results.get(
@@ -710,12 +710,12 @@ class DataProcessor:
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Prüfdatum"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Plausibilität Prüfdatum") + 1)}{row_num_in_sheet}',
'values': [
[now_timestamp]]})
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Timestamp letzte Pruefung"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Timestamp letzte Pruefung") + 1)}{row_num_in_sheet}',
'values': [
[now_timestamp]]})
@@ -735,7 +735,7 @@ class DataProcessor:
str) and not predicted_bucket.startswith("FEHLER"):
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Geschaetzter Techniker Bucket"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Geschaetzter Techniker Bucket") + 1)}{row_num_in_sheet}',
'values': [
[predicted_bucket]]})
self.logger.info(
@@ -745,7 +745,7 @@ class DataProcessor:
f" -> ML-Schaetzung lieferte kein gueltiges Ergebnis: '{predicted_bucket}'.")
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Geschaetzter Techniker Bucket"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Geschaetzter Techniker Bucket") + 1)}{row_num_in_sheet}',
'values': [
['k.A. (Schaetzung fehlgeschlagen)']]})
except Exception as e_ml:
@@ -754,7 +754,7 @@ class DataProcessor:
self.logger.debug(traceback.format_exc())
updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Geschaetzter Techniker Bucket"] + 1)}{row_num_in_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Geschaetzter Techniker Bucket") + 1)}{row_num_in_sheet}',
'values': [
[f'FEHLER Schaetzung: {str(e_ml)[:50]}...']]})
@@ -1087,11 +1087,11 @@ class DataProcessor:
now_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
updates_for_row = [
{'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzpruefung"]["index"] + 1)}{current_row_num}', 'values': [[verification_result.get("consistency")]]},
{'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Begründung Wiki Inkonsistenz"]["index"] + 1)}{current_row_num}', 'values': [[verification_result.get("justification")]]},
{'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Wiki Konsistenzpruefung")["index"] + 1)}{current_row_num}', 'values': [[verification_result.get("consistency")]]},
{'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Begründung Wiki Inkonsistenz")["index"] + 1)}{current_row_num}', 'values': [[verification_result.get("justification")]]},
# Verwende die validierte URL
{'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Wiki Artikel"]["index"] + 1)}{current_row_num}', 'values': [[final_suggested_url]]},
{'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wiki Verif. Timestamp"]["index"] + 1)}{current_row_num}', 'values': [[now_timestamp]]}
{'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Vorschlag Wiki Artikel")["index"] + 1)}{current_row_num}', 'values': [[final_suggested_url]]},
{'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Wiki Verif. Timestamp")["index"] + 1)}{current_row_num}', 'values': [[now_timestamp]]}
]
all_updates.extend(updates_for_row)
@@ -1184,13 +1184,13 @@ class DataProcessor:
techniker_bucket_ml=self._get_cell_value_safe(row_data, "Geschaetzter Techniker Bucket")
)
all_sheet_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["FSM Pitch"] + 1)}{row_num}', 'values': [[fsm_pitch_text]]})
all_sheet_updates.append({'range': f'{self.sheet_handler._get_col_letter(get_col_idx("FSM Pitch") + 1)}{row_num}', 'values': [[fsm_pitch_text]]})
except Exception as e:
self.logger.error(f"FEHLER bei FSM-Pitch-Generierung für Zeile {row_num}: {e}")
all_sheet_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["FSM Pitch"] + 1)}{row_num}', 'values': [['FEHLER (Generierung)']]} )
all_sheet_updates.append({'range': f'{self.sheet_handler._get_col_letter(get_col_idx("FSM Pitch") + 1)}{row_num}', 'values': [['FEHLER (Generierung)']]} )
# IMMER den Timestamp setzen, auch bei Fehler, um Endlosschleifen zu vermeiden
all_sheet_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["FSM Pitch Timestamp"] + 1)}{row_num}', 'values': [[now_timestamp]]})
all_sheet_updates.append({'range': f'{self.sheet_handler._get_col_letter(get_col_idx("FSM Pitch Timestamp") + 1)}{row_num}', 'values': [[now_timestamp]]})
processed_count += 1
# Batch-Update Logik
@@ -3069,7 +3069,7 @@ class DataProcessor:
self.logger.debug(f" Zeile {rn} (Ergebnis): {res}")
updates_this_batch.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Branche"] + 1)}{rn}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Vorschlag Branche") + 1)}{rn}',
'values': [
[
res.get(
@@ -3077,7 +3077,7 @@ class DataProcessor:
"ERR BR")]]})
updates_this_batch.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Branche Konfidenz"] + 1)}{rn}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Branche Konfidenz") + 1)}{rn}',
'values': [
[
res.get(
@@ -3085,7 +3085,7 @@ class DataProcessor:
"N/A CO")]]})
updates_this_batch.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Konsistenz Branche"] + 1)}{rn}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Konsistenz Branche") + 1)}{rn}',
'values': [
[
res.get(
@@ -3093,7 +3093,7 @@ class DataProcessor:
"err CO")]]})
updates_this_batch.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Begruendung Abweichung Branche"] + 1)}{rn}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Begruendung Abweichung Branche") + 1)}{rn}',
'values': [
[
res.get(
@@ -3101,12 +3101,12 @@ class DataProcessor:
"No JU")]]})
updates_this_batch.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Timestamp letzte Pruefung"] + 1)}{rn}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Timestamp letzte Pruefung") + 1)}{rn}',
'values': [
[ts]]})
updates_this_batch.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Version"] + 1)}{rn}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Version") + 1)}{rn}',
'values': [
[ver]]})
@@ -4927,12 +4927,12 @@ class DataProcessor:
current_row_updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Finaler Umsatz (Wiki>CRM)"] + 1)}{row_num_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Finaler Umsatz (Wiki>CRM)") + 1)}{row_num_sheet}',
'values': [
[final_umsatz_str_konsolidiert]]})
current_row_updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Finaler Mitarbeiter (Wiki>CRM)"] + 1)}{row_num_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Finaler Mitarbeiter (Wiki>CRM)") + 1)}{row_num_sheet}',
'values': [
[final_ma_str_konsolidiert]]})
@@ -4956,7 +4956,7 @@ class DataProcessor:
current_row_updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Umsatz"] + 1)}{row_num_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Plausibilität Umsatz") + 1)}{row_num_sheet}',
'values': [
[
plausi_results.get(
@@ -4964,7 +4964,7 @@ class DataProcessor:
"ERR_FLAG")]]})
current_row_updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Mitarbeiter"] + 1)}{row_num_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Plausibilität Mitarbeiter") + 1)}{row_num_sheet}',
'values': [
[
plausi_results.get(
@@ -4972,7 +4972,7 @@ class DataProcessor:
"ERR_FLAG")]]})
current_row_updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Umsatz/MA Ratio"] + 1)}{row_num_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Plausibilität Umsatz/MA Ratio") + 1)}{row_num_sheet}',
'values': [
[
plausi_results.get(
@@ -4980,7 +4980,7 @@ class DataProcessor:
"ERR_FLAG")]]})
current_row_updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Abweichung Umsatz CRM/Wiki"] + 1)}{row_num_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Abweichung Umsatz CRM/Wiki") + 1)}{row_num_sheet}',
'values': [
[
plausi_results.get(
@@ -4988,7 +4988,7 @@ class DataProcessor:
"ERR_FLAG")]]})
current_row_updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Abweichung MA CRM/Wiki"] + 1)}{row_num_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Abweichung MA CRM/Wiki") + 1)}{row_num_sheet}',
'values': [
[
plausi_results.get(
@@ -4996,7 +4996,7 @@ class DataProcessor:
"ERR_FLAG")]]})
current_row_updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Begründung"] + 1)}{row_num_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Plausibilität Begründung") + 1)}{row_num_sheet}',
'values': [
[
plausi_results.get(
@@ -5019,7 +5019,7 @@ class DataProcessor:
['FEHLER_CALL']]})
current_row_updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Begründung"] + 1)}{row_num_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Plausibilität Begründung") + 1)}{row_num_sheet}',
'values': [
[f"Systemfehler: {str(e_plausi_run_batch)[:100]}"]]})
else: # Fehler bei Konsolidierung
@@ -5038,13 +5038,13 @@ class DataProcessor:
['INPUT_FEHLER_KONSO']]})
current_row_updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Begründung"] + 1)}{row_num_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Plausibilität Begründung") + 1)}{row_num_sheet}',
'values': [
["Konsolidierung fehlgeschlagen"]]})
current_row_updates.append(
{
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Plausibilität Prüfdatum"] + 1)}{row_num_sheet}',
'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Plausibilität Prüfdatum") + 1)}{row_num_sheet}',
'values': [
[now_timestamp_str]]})
@@ -5667,7 +5667,7 @@ class DataProcessor:
# DACH-Filter (basierend auf CRM Land - Spalte G)
# Holt den tatsächlichen Spaltennamen
crm_land_col_header = headers[COLUMN_MAP["CRM Land"]]
crm_land_col_header = headers[get_col_idx("CRM Land")]
# Erlaubte Werte für DACH-Länder (Groß- und Kleinschreibung wird durch
# .str.upper() behandelt)
dach_countries = [
@@ -5695,8 +5695,8 @@ class DataProcessor:
return None
# Plausibilitätsfilter (basierend auf Spalten BG und BH)
plausi_umsatz_col_header = headers[COLUMN_MAP["Plausibilität Umsatz"]]
plausi_ma_col_header = headers[COLUMN_MAP["Plausibilität Mitarbeiter"]]
plausi_umsatz_col_header = headers[get_col_idx("Plausibilität Umsatz")]
plausi_ma_col_header = headers[get_col_idx("Plausibilität Mitarbeiter")]
# Sicherstellen, dass die Spalten existieren
if plausi_umsatz_col_header in df.columns and plausi_ma_col_header in df.columns: