62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
"""
|
|
Diagnostico: revisa la tabla 'campanias' y detecta cruces = misma frase_busqueda
|
|
(mismo emoji/texto) con rangos de fecha [fecha_inicio, fecha_fin] que se SOLAPAN.
|
|
Un mensaje que caiga en el solape haria match con 2 campanias a la vez.
|
|
"""
|
|
import data_manager_v2 as dm
|
|
import leads_logic as L
|
|
|
|
# _campanias_supabase() trae tuplas (frase, cargo, codigo, sede, dia, origen, fi, ff)
|
|
crudas = dm._campanias_supabase()
|
|
campanias = [{"frase_busqueda": t[0], "cargo": t[1], "codigo": t[2], "sede": t[3],
|
|
"dia": t[4], "origen": t[5], "fecha_inicio": t[6], "fecha_fin": t[7]}
|
|
for t in crudas]
|
|
print(f"Total campanias: {len(campanias)}\n")
|
|
|
|
# agrupar por frase_busqueda
|
|
por_frase = {}
|
|
for c in campanias:
|
|
frase = " ".join(str(c.get("frase_busqueda") or "").split())
|
|
por_frase.setdefault(frase, []).append(c)
|
|
|
|
def _rango(c):
|
|
fi = L._to_date(str(c.get("fecha_inicio") or "")[:10])
|
|
ff = L._to_date(str(c.get("fecha_fin") or "")[:10])
|
|
return fi, ff
|
|
|
|
cruces = 0
|
|
print("=== CRUCES (misma frase + fechas solapadas) ===\n")
|
|
for frase, lista in por_frase.items():
|
|
if len(lista) < 2:
|
|
continue
|
|
# comparar cada par
|
|
for i in range(len(lista)):
|
|
for j in range(i + 1, len(lista)):
|
|
a, b = lista[i], lista[j]
|
|
fia, ffa = _rango(a)
|
|
fib, ffb = _rango(b)
|
|
if not (fia and ffa and fib and ffb):
|
|
continue
|
|
# solapan si a.inicio <= b.fin y b.inicio <= a.fin
|
|
if fia <= ffb and fib <= ffa:
|
|
cruces += 1
|
|
print(f"FRASE: {frase!r}")
|
|
print(f" A) cod={a.get('codigo')} sede={a.get('sede')} cargo={a.get('cargo')} "
|
|
f"[{fia} -> {ffa}]")
|
|
print(f" B) cod={b.get('codigo')} sede={b.get('sede')} cargo={b.get('cargo')} "
|
|
f"[{fib} -> {ffb}]")
|
|
print(f" SOLAPE: {max(fia,fib)} -> {min(ffa,ffb)}\n")
|
|
|
|
if cruces == 0:
|
|
print("No se encontraron cruces (ninguna frase repetida con fechas solapadas).")
|
|
else:
|
|
print(f"TOTAL de cruces detectados: {cruces}")
|
|
|
|
# tambien listar frases repetidas (aunque no solapen) por si acaso
|
|
print("\n=== Frases que se repiten en varias campanias ===")
|
|
rep = {f: l for f, l in por_frase.items() if len(l) > 1}
|
|
for f, l in rep.items():
|
|
print(f" {len(l)}x {f!r}")
|
|
if not rep:
|
|
print(" (ninguna frase repetida)")
|