Add Criticidad field sync to GACampaignMes

- batch_update_gacampaignmes_advice() replaces consejos method, also saves Criticidad
- Criticidad mapped from priority: Crítico (PAUSAR/SPRINT), Peligro, Mantener
- Updated in same batch as Consejo after second pass

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jose Manuel 2026-04-21 13:12:05 +02:00
parent d9a8e7ee0d
commit 7bd1cf20da
2 changed files with 24 additions and 15 deletions

View File

@ -355,19 +355,19 @@ class AirtableClient:
"""Actualiza el campo 'Leads Lake' de un registro GACampaignMes."""
self.gacampaignmes.update(gcm_record_id, {"Leads Lake": lead_ids})
def batch_update_gacampaignmes_consejos(self, updates: list[tuple[str, str]]) -> None:
def batch_update_gacampaignmes_advice(self, updates: list[tuple[str, str, str]]) -> None:
"""
Actualiza en lote el campo 'Consejo' de varios registros GACampaignMes.
updates: lista de (gcm_record_id, consejo_text)
Actualiza en lote los campos 'Consejo' y 'Criticidad' de GACampaignMes.
updates: lista de (gcm_record_id, consejo_text, criticidad)
criticidad: 'Crítico' | 'Peligro' | 'Mantener'
"""
for i in range(0, len(updates), 10):
batch = [
{"id": rid, "fields": {"Consejo": consejo}}
for rid, consejo in updates[i:i+10]
if consejo
{"id": rid, "fields": {"Consejo": consejo, "Criticidad": criticidad}}
for rid, consejo, criticidad in updates[i:i+10]
]
if batch:
self.gacampaignmes.batch_update(batch)
self.gacampaignmes.batch_update(batch, typecast=True)
# ------------------------------------------------------------------ #
# Métodos legacy (usados internamente / compatibilidad) #

25
run.py
View File

@ -76,6 +76,12 @@ SECCION_LABELS = {
2: "SIN CAMBIOS (MANTENER)",
}
CRITICIDAD_MAP = {
0: "Crítico",
1: "Peligro",
2: "Mantener",
}
def run():
print(f"\n{'='*55}")
@ -169,7 +175,7 @@ def run():
# === SEGUNDA PASADA: imprimir en orden + aplicar decisiones ===
resumen = []
consejo_updates = [] # (gcm_record_id, consejo) para batch update final
advice_updates = [] # (gcm_record_id, consejo, criticidad) para batch update final
last_priority = -1
for item in collected:
@ -219,8 +225,11 @@ def run():
apply_decision(campaign, decision, metrics, gads)
if decision.get("consejo"):
consejo_updates.append((campaign["airtable_id"], decision["consejo"]))
advice_updates.append((
campaign["airtable_id"],
decision.get("consejo", ""),
CRITICIDAD_MAP[p],
))
resumen.append({
"curso": campaign["curso"],
@ -236,11 +245,11 @@ def run():
print()
# Guardar consejos en GACampaignMes
if consejo_updates:
print(f"→ Guardando {len(consejo_updates)} consejos en GACampaignMes...")
at.batch_update_gacampaignmes_consejos(consejo_updates)
print(" ✓ Consejos guardados.")
# Guardar consejos y criticidad en GACampaignMes
if advice_updates:
print(f"→ Guardando consejos y criticidad en GACampaignMes ({len(advice_updates)} registros)...")
at.batch_update_gacampaignmes_advice(advice_updates)
print(" ✓ Consejos y criticidad guardados.")
# Resumen final ordenado por prioridad (ya está ordenado)
print(f"{'='*55}")