Skip to content

feat(ti/proyectos): lee Digitalización del libro de origen, no del espejo

Rafael Bautista requested to merge ti into qa

La ingesta de digitalizacion leía la pestaña DIGITALIZACIÓN de TABLEAU 2025, que no contiene datos: su celda A1 es un IMPORTRANGE fijado a A1:S del libro Seguimiento_Proyectos e Implementaciones_Grupo CAABSA, que es donde el área captura. Ahora se lee el origen directamente.

El espejo costaba tres cosas, todas silenciosas:

  1. El rango A1:S dejaba fuera dos columnas que el área llena en las 161 filas —Comentarios / Riesgos y Objetivo Estratégico— y se habría comido cualquier columna nueva, incluido el ID de proyecto que está por acordarse. Todo se ve bien y el dato no llega.
  2. IMPORTRANGE cachea: el refresco inmediato tras un alta podía leer el espejo viejo y parecer que "no se guardó".
  3. No se puede insertar en un rango que produce una fórmula, así que el formulario de alta tendría que escribir en el origen de todos modos — leyendo de un lado y escribiendo del otro.

Medido antes de tocar código: A..S es idéntico celda por celda entre los dos libros (162 filas, 0 diferencias). El cambio no altera un solo dato de los que ya se mostraban; suma las dos columnas perdidas.

Cambios:

  • PROYECTOS_SHEET_ID / PROYECTOS_SHEET_TAB + _download_proyectos_sheet(). Ojo con la caja: en el origen la pestaña es Digitalización, en el espejo era DIGITALIZACIÓN, y gspread.worksheet() hace match exacto.
  • digitalizacion sale del dict SHEETS (ese loop reusa un solo objeto spreadsheet de TABLEAU 2025) y se sincroniza aparte, con el mismo aislamiento de sesión y errores que el resto.
  • Un solo camino de ingesta, _sync_digitalizacion(), compartido por el sync general y el botón manual del portal, para que no puedan divergir.
  • El contrato de encabezados sube de 19 a 21. Si alguien revierte la fuente al espejo, falla ruidosamente y la tabla no se toca.
  • comentarios_riesgos y objetivo_estrategico en el modelo, con migración idempotente y las mismas sentencias al arranque de main.py.
  • Extraído _values_to_rows(), que ya duplicaban _download_sheet y el nuevo.

Verificado en local contra la hoja real: 161/161 filas, 21/21 del contrato, las dos columnas nuevas llenas en las 161, y el simulacro de reversión al espejo falla como debe.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com Claude-Session: https://claude.ai/code/session_01QNs55ksY91Ppf1sefCTVae

Merge request reports

Loading