Nueva arquitectura para la generación de informes

Detectamos que algunos informes fallaban durante la generación. El problema es cómo el sistema manejaba las peticiones de larga duración a la IA.

18 noviembre 2025
2 min de lectura

Durante las primeras semanas de Epica detectamos que algunos informes fallaban durante la generación. El problema estaba en cómo el sistema manejaba las peticiones de larga duración a la API de inteligencia artificial.

El flujo original funcionaba de forma síncrona: el usuario hacía la petición, el servidor llamaba a la IA, esperaba la respuesta completa y la devolvía. Esto funcionaba bien para respuestas rápidas, pero los informes de marca requieren análisis extensos que pueden tomar más de un minuto. Cuando el proceso excedía el timeout del servidor, la conexión se cortaba y el informe se perdía.

Cambios implementados

Rediseñamos la arquitectura usando un patrón de funciones divididas. Ahora el proceso funciona en dos fases:

  1. Función de inicio: Recibe la petición, la valida, crea un registro en base de datos y responde inmediatamente al cliente con un ID de seguimiento.

  2. Función de procesamiento: Se ejecuta en segundo plano sin límite de tiempo estricto. Genera el informe con la IA y actualiza el registro en base de datos cuando termina.

El cliente consulta periódicamente el estado del informe usando el ID de seguimiento. Cuando detecta que está listo, redirige al usuario al informe generado.

También actualizamos el modal de progreso para mostrar el estado real del proceso en lugar de una animación genérica. El usuario ve en qué fase está la generación y recibe feedback inmediato si algo falla.

Este cambio resolvió los timeouts y mejoró la visibilidad del proceso para el usuario.

Cambios técnicos

  • Separación en funciones de inicio y procesamiento
  • Polling del cliente para verificar estado del informe
  • Modal de progreso con estados reales de la generación
  • Manejo de errores con mensajes descriptivos
  • Registro de estado en base de datos para recuperación