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.""" """Actualiza el campo 'Leads Lake' de un registro GACampaignMes."""
self.gacampaignmes.update(gcm_record_id, {"Leads Lake": lead_ids}) 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. Actualiza en lote los campos 'Consejo' y 'Criticidad' de GACampaignMes.
updates: lista de (gcm_record_id, consejo_text) updates: lista de (gcm_record_id, consejo_text, criticidad)
criticidad: 'Crítico' | 'Peligro' | 'Mantener'
""" """
for i in range(0, len(updates), 10): for i in range(0, len(updates), 10):
batch = [ batch = [
{"id": rid, "fields": {"Consejo": consejo}} {"id": rid, "fields": {"Consejo": consejo, "Criticidad": criticidad}}
for rid, consejo in updates[i:i+10] for rid, consejo, criticidad in updates[i:i+10]
if consejo
] ]
if batch: if batch:
self.gacampaignmes.batch_update(batch) self.gacampaignmes.batch_update(batch, typecast=True)
# ------------------------------------------------------------------ # # ------------------------------------------------------------------ #
# Métodos legacy (usados internamente / compatibilidad) # # Métodos legacy (usados internamente / compatibilidad) #

25
run.py
View File

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