# diag_matriculas_agosto_detalle.py # Las 51 matriculas de AGOSTO 2026 (todos los asesores de los 8), con su # dsc_det_programa (detalle del programa) y grupo. Mismo criterio del dashboard: # dsc_vendedor de los 8, estado != ANU, fch_matricula en agosto. from datetime import datetime from collections import defaultdict, Counter import services as S import leads_logic as L ANO, MES = 2026, 8 ase = S._asesores(); amap = ase["map"] filas = [] for m in S._matriculas_crudas(): vend = S._norm_asesor(m.get("dsc_vendedor"), amap) if not vend: continue estado = str(m.get("estado_matricula") or "").strip().upper() if estado == "ANU": continue fm = L._to_date(m.get("fch_matricula")) if not fm or fm.year != ANO or fm.month != MES: continue filas.append({ "vendedor": vend, "num_matricula": m.get("num_matricula"), "estado": estado, "fch": fm.strftime("%d/%m/%Y"), "dsc_programa": str(m.get("dsc_programa") or ""), "dsc_det": str(m.get("dsc_promocion") or ""), # dsc_det_programa "grupo": L.grupo_programa_curso(m.get("dsc_programa")), }) print(f"\n=== MATRICULAS AGOSTO {ANO} — todos los asesores (total: {len(filas)}) ===\n") print(f"{'#':3} {'vendedor':16} {'estado':6} {'fch':11} {'grupo':10} dsc_det_programa") print("-"*100) for i, f in enumerate(sorted(filas, key=lambda x: (x['grupo'], x['vendedor'])), 1): print(f"{i:3} {f['vendedor'][:16]:16} {f['estado']:6} {f['fch']:11} {f['grupo']:10} {f['dsc_det'][:45]}") print("-"*100) print("\n=== RESUMEN por dsc_det_programa (cuantas matriculas de cada uno) ===") cnt = Counter(f["dsc_det"] for f in filas) for prog, n in sorted(cnt.items(), key=lambda x: -x[1]): print(f" {n:3} {prog}") print("\n=== RESUMEN por GRUPO (debe cuadrar con la matriz del dashboard) ===") gr = Counter(f["grupo"] for f in filas) for g in ["TEAC","TERC","SEMINARIOS","OTROS"]: print(f" {g:12} {gr.get(g,0)}") print(f" {'TOTAL':12} {len(filas)}")