""" 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)}")