Skip to content

feat(ti/proyectos): fuente Asana en Proyectos TI — switch Hoja | Asana, corte...

Rafael Bautista requested to merge ti into qa

feat(ti/proyectos): fuente Asana en Proyectos TI — switch Hoja | Asana, corte diario y calidad de la información

Segunda fuente para /sistemas/proyectos, detrás de un switch Hoja | Asana (patrón Datalake de CxC/CxP). La fuente Hoja no cambia.

Backend

  • services/asana_client.py: cliente de SÓLO lectura (httpx, reintentos con Retry-After, paginación). Sin ASANA_ACCESS_TOKEN no hace nada.
  • services/asana_proyectos_reglas.py: reglas como funciones puras — sección → fase, avance (12.5% × cerradas/total por fase), etapa, semáforo calculado, filas por empresa y bloque de calidad.
  • services/asana_sync.py: corte en una sola transacción; conserva el anterior si Asana devuelve 0 proyectos.
  • models/asana_proyectos.py: 7 tablas asana_*.
  • routers/ti.py: dashboard_stats acepta fuente y clasificacion_asana; /asana/sync, /asana/estado y /asana/calidad.
  • scheduler: job asana_proyectos_sync diario 06:00, sólo si hay token.
  • sync_status: llave «asana», fuera de primary.
  • Módulo ti_proyectos_asana en grupo propio sin roles (lo ve el admin y quien se agregue en la matriz); los endpoints responden 403 sin él.
  • Migración 20261007_asana_proyectos_ti.sql (idempotente): portafolios a leer, 3 parámetros de /admin (atraso amarillo/rojo, secciones numeradas), el módulo y su otorgamiento a aleon.

Frontend (árbol compartido portal_ti/components/dashboard/ti)

  • FuenteSwitch, franja de la fuente, filtro «Clasificación Asana», leyendas en lugar de los gauges SiNube/Madurez, sync por fuente y sección «Calidad de la información (Asana)»; en el detalle, «Abrir en Asana» y motivo del semáforo.

Dev: docker-compose.override.yml carga backend/.env.a (opcional) y .gitignore lo excluye; el token nunca va en un archivo versionado.

Para que funcione en QA hace falta ASANA_ACCESS_TOKEN en backend/.env.qa. Sin él, el job no se registra, la fuente Asana sale «todavía no hay corte» y el botón de sincronizar responde 503.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com

Merge request reports

Loading