Files
dashboard-leads/backend/diag_roas_faltantes.py
2026-08-18 11:48:08 -05:00

59 lines
2.1 KiB
Python

"""
Diagnostico ROAS: conjuntos del Meta CSV (enero) que NO se suman en la matriz
por sede, porque no tienen pauta ligada o su pauta no tiene sede en campanias.
"""
import services as S
import leads_logic as L
ANO, MES = "2026", "1" # enero 2026
SEDES = {"LIMA", "PIURA", "AREQUIPA", "TRUJILLO"}
conj_pauta = S._conjunto_pauta() # {pauta: [conjunto,...]}
camp = S._campanias_sede_cargo() # {pauta: {sede, cargo}}
conj_sede = {}
conj_pauta_map = {}
for pauta, conjuntos in conj_pauta.items():
sp = camp.get(str(pauta).strip())
sede = " ".join(str((sp or {}).get("sede") or "").upper().split())
for co in conjuntos:
k = " ".join(str(co).split()).upper()
conj_pauta_map[k] = str(pauta).strip()
if sp and sede in SEDES:
conj_sede[k] = sede
sin_sumar = {}
suma_ok = 0.0
suma_falta = 0.0
for f in S._meta_filas():
fx = L._to_date(f.get("inicio"))
if not L._en_periodo(fx, ANO, MES, "TODOS"):
continue
k = " ".join(str(f.get("conjunto")).split()).upper()
imp = float(f.get("importe") or 0.0)
res = int(float(f.get("resultados") or 0.0))
if k in conj_sede:
suma_ok += imp
continue
if k not in conj_pauta_map:
motivo = "SIN PAUTA"
else:
p = conj_pauta_map[k]
sp = camp.get(p)
motivo = (f"pauta '{p}' SIN campania" if not sp
else f"pauta '{p}' sede='{sp.get('sede')}' (fuera de las 4)")
d = sin_sumar.setdefault(k, {"importe": 0.0, "resultados": 0, "motivo": motivo})
d["importe"] += imp
d["resultados"] += res
suma_falta += imp
print("=== ENERO 2026 — conjuntos que NO se suman en ROAS ===\n")
print(f"{'CONJUNTO':45} {'IMPORTE':>12} {'RESULTADOS':>12} MOTIVO")
print("-"*100)
for k, d in sorted(sin_sumar.items(), key=lambda x: -x[1]["importe"]):
print(f"{k[:45]:45} {('$'+format(d['importe'],',.2f')):>12} {d['resultados']:>12,} {d['motivo']}")
print("-"*100)
print(f"{'IMPORTE QUE SÍ SUMA (4 sedes)':45} {('$'+format(suma_ok,',.2f')):>12}")
print(f"{'IMPORTE QUE NO SUMA (faltante)':45} {('$'+format(suma_falta,',.2f')):>12}")
print(f"Conjuntos distintos sin sumar: {len(sin_sumar)}")