Files
scripts/file-management/mautic.py
Guillem Hernandez Sola da6dabcc62 Added all
2026-04-07 19:37:59 +02:00

73 lines
2.7 KiB
Python

import pandas as pd
import csv
def filtrar_i_consolidar_etiquetes(tags_str):
"""Filtra i agrupa les etiquetes segons les regles de negoci."""
if pd.isna(tags_str) or str(tags_str).strip().lower() == 'nan':
return ''
# 1. Separem les etiquetes i les netegem
llista_tags = [t.strip().lower() for t in str(tags_str).split(',')]
# Utilitzem un 'set' per evitar etiquetes duplicades al final
tags_finals = set()
for t in llista_tags:
# 2. Regla de conservació directa: test_, int_ i rrhh
if t.startswith('test_') or t.startswith('int_') or t == 'rrhh':
tags_finals.add(t)
continue
# 3. Regles d'agrupació (l'ordre és important per als prefixos llargs)
if t.startswith('skupspo2-') or t.startswith('pspo2-'):
tags_finals.add('pspo2')
elif t.startswith('pspo-'):
tags_finals.add('pspo')
elif t.startswith('psm2-'):
tags_finals.add('psm2')
elif t.startswith('psm-'):
tags_finals.add('psm')
elif t.startswith('psux-') or t.startswith('psu-'):
tags_finals.add('psu')
elif t.startswith('sps-'):
tags_finals.add('sps')
elif t.startswith('safe-'):
tags_finals.add('safe-ls')
elif t.startswith('pal_ebm-'):
tags_finals.add('pal_ebm')
elif t.startswith('pal-'):
tags_finals.add('pal')
# 4. Si tenim etiquetes vàlides, les ordenem, les unim amb | i hi posem cometes
if tags_finals:
# Ordenar-les (sorted) fa que el resultat sigui més fàcil de llegir al CSV
tags_units = '|'.join(sorted(list(tags_finals)))
return f'"{tags_units}"'
else:
return ''
# --- INICI DEL PROCÉS ---
# 1. Carregar el fitxer original
df = pd.read_excel('contactes_mautic/Contactos_2602026_7881pax.xlsx')
# 2. Seleccionar només les columnes que ens interessen
columnes_mautic = ['email', 'nombre_x', 'apellidos_x', '*ciudad_x', '*pais_x', 'etiquetas_x']
df_net = df[columnes_mautic].copy()
# 3. Reanomenar les columnes perquè Mautic les auto-detecti
df_net.rename(columns={
'nombre_x': 'firstname',
'apellidos_x': 'lastname',
'*ciudad_x': 'city',
'*pais_x': 'country',
'etiquetas_x': 'etiquetes'
}, inplace=True)
# 4. APLICAR EL FILTRE I LA CONSOLIDACIÓ
df_net['etiquetes'] = df_net['etiquetes'].apply(filtrar_i_consolidar_etiquetes)
# 5. Guardar com a CSV llest per importar
df_net.to_csv('Contactes_Mautic_Consolidats.csv', index=False, encoding='utf-8', quoting=csv.QUOTE_NONE, escapechar='\\')
print("✅ Fitxer preparat! Les etiquetes s'han filtrat i agrupat correctament.")