Initial commit - dashboard leads

This commit is contained in:
Panchito
2026-08-18 11:48:08 -05:00
commit e90dae89b6
5148 changed files with 714437 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
"""
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)")