Propósito: Sistema de reportes, dashboards y vistas de datos del proyecto. Proporciona “mesas de trabajo” como vistas configurables del avance de obra, generación de reportes PDF y datos de Business Intelligence.
Tecnología: Go 1.24.1 / Gin
Puerto: Variable por ambiente ({ENV}_PORT)
Módulo:worktables
Propósito de Negocio
Una worktable (mesa de trabajo) es una vista configurada del proyecto que muestra: - Estado de bloques con filtros personalizados - Avance por etiqueta - Gráficos de proyección - Imágenes de evidencia de obra - Reportes PDF exportables
Endpoints Expuestos
Path
Descripción
GET /worktables/:projectId
Lista todas las worktables del proyecto
GET /worktables/data/:projectId
Datos de reportes de etiquetas (label_report)
GET /worktables/get-bi-data/:projectId
Business Intelligence: datos agregados
GET /report/cover-page-images/:projectId/:worktableName
Imágenes para portada de reporte
GET /read-worktable-blocks/:projectId
Lee bloques de una worktable
POST /worktables/filter
Aplica filtros dinámicos a una worktable
POST /get-progress-report
Genera reporte de progreso en JSON
POST /report/get-execution-data
Datos detallados de ejecución de bloques
POST /report/get-block-images
Imágenes asociadas a bloques
POST /report/generate-pdf
Genera PDF completo del reporte
POST /
Crear nueva worktable
POST /get-worktable-blocks
Bloques de una worktable (v1)
POST /get-worktable-blocks-v2
Bloques de una worktable (v2 optimizada)
PUT /label-report
Actualizar label_report (recálculo de avances)
PUT /worktables/update-worktable
Modificar estructura de worktable
PUT /worktables/order-rows-worktable
Reordenar filas
DELETE /worktables/:projectId/:WorktableId
Eliminar una worktable
Base de Datos
Motor: MongoDB v1.17.3
Conexión: Pool dinámico por proyecto
Pool: Min=5, Max=30
Workers: Configurable con MAX_CONCURRENCY (default 2)
Colecciones Usadas
Colección
Base de Datos
Descripción
worktables
{projectId}
Definición de mesas de trabajo
blockIfc
{projectId}
Bloques del proyecto
labels
{projectId}
Etiquetas para reportes
label_report
{projectId}
Reportes precalculados de avance
blockImgs
{projectId}
Imágenes de bloques
projects
master
Info del proyecto
Variables de Entorno
Variable
Descripción
ENVIRONMENT
Ambiente: dev, qa, prod
{ENV}_PORT
Puerto HTTP
{ENV}_DB_HOST
Host MongoDB
{ENV}_DB_HOST_SUFFIX
Sufijo para {projectId}.{suffix}
{ENV}_DB_DEFAULT_PROJECT_ID
ID proyecto master (opcional)
{ENV}_MAX_CONCURRENCY
Número máximo de workers para queries paralelas
ROU_STORA
Ruta base de almacenamiento
ROU_IMGS
Ruta de imágenes
ROU_RESIZ
Ruta de imágenes redimensionadas
ROU_FOTO
Ruta de fotografías
Generación de PDF
El endpoint POST /report/generate-pdf usa wkhtmltopdf:
Lee datos de bloques y etiquetas de MongoDB
Lee imágenes de bloques desde /mnt/s3storage/
Construye HTML dinámico (portada, índice, tablas, gráficos SVG)
Llama al binario del sistema wkhtmltopdf para convertir HTML → PDF
Comprime con gzip (CompressAndEncode())
Codifica en base64
Retorna PDF codificado en JSON
Requisito del sistema: Binario wkhtmltopdf debe estar instalado en el contenedor.
Endpoint label-report
PUT /label-report es llamado por registry después de cada certificación: 1. Invoca UpdateWorktableReports() con rootRepository 2. Recalcula porcentajes ponderados por etiqueta 3. Actualiza colección label_report con nuevos valores 4. Estos valores son leídos por GET /worktables/data/:projectId para el dashboard
Librerías Especiales
Librería
Uso
go-wkhtmltopdf
Generación de PDF desde HTML
disintegration/imaging
Generación y redimensionamiento de thumbnails
Middlewares
CORS: AllowAllOrigins=true
gin.Recovery(), gin.Logger()
Rol en Casos de Uso
Caso de Uso
Rol
CU-05: Certificación
Recibe notificación de registry para recalcular reportes