From 7bd1cf20da8bd7512950b52190eef7f86499aada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Manuel=20G=C3=B3mez?= Date: Tue, 21 Apr 2026 13:12:05 +0200 Subject: [PATCH] Add Criticidad field sync to GACampaignMes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- airtable_client.py | 14 +++++++------- run.py | 25 +++++++++++++++++-------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/airtable_client.py b/airtable_client.py index 6da4d94..16ad935 100644 --- a/airtable_client.py +++ b/airtable_client.py @@ -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) # diff --git a/run.py b/run.py index 106814d..f601fde 100644 --- a/run.py +++ b/run.py @@ -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}")