Servicios Go/Gin

Servicio: sequences

Información General


Propósito de Negocio

En un proyecto de construcción, los elementos tienen relaciones de precedencia (bloque B no puede empezar hasta que termine bloque A). Este servicio: - Analiza todas las dependencias del proyecto - Calcula el orden óptimo de ejecución (similar a PERT/CPM) - Identifica la ruta crítica (bloques sin holgura de tiempo) - Detecta y rechaza dependencias circulares (A→B→A) - Persiste las secuencias calculadas para uso de otros servicios


Endpoints Expuestos

PathDescripción
GET /sequences/{projectId}/{code}Secuencias de un bloque específico
POST /sequencesCrear/regenerar TODAS las secuencias del proyecto

Parámetros de GET

Body de POST

{
  "projectId": "string",
  "code": "string (opcional)"
}

Base de Datos

Colecciones Usadas

Colección Base de Datos Descripción
blockIfc {projectId} Bloques con array dependence[]
blockIfc_sequences {projectId} Secuencias calculadas (resultado)
free_days {projectId} Días festivos
labels {projectId} Etiquetas (análisis ponderado)

Estructura de Sequence (resultado)

{
  "data": "string (ej: 'BLOCK_A-BLOCK_B-BLOCK_C')"
}

Las secuencias se almacenan como strings concatenados con - separador.


Variables de Entorno / Configuración


Algoritmo PERT/CPM

Forward Pass (inicio temprano)

Para cada bloque en orden topológico:

ES(bloque) = max(EF(predecesores))
EF(bloque) = ES(bloque) + duracion(bloque)

Backward Pass (inicio tardío)

Para cada bloque en orden inverso:

LF(bloque) = min(LS(sucesores))
LS(bloque) = LF(bloque) - duracion(bloque)

Ruta Crítica

slack(bloque) = LS(bloque) - ES(bloque)
Si slack = 0 → bloque en ruta crítica → critical_block = true

Detección de Ciclos

Antes de procesar: 1. Construye grafo dirigido de dependencias 2. Ejecuta algoritmo de detección de ciclos (DFS) 3. Si se detecta ciclo (A→B→A): envía email de error y rechaza la operación 4. Previene bucles infinitos en el cálculo


Streaming y Concurrencia


Dependencias Externas


Cors

Restringido a dominios específicos: - https://apibt.bimtrazer.com - https://apibt-dev.bimtrazer.com - https://apibt-qa.bimtrazer.com


Rol en Casos de Uso

Caso de Uso Rol
CU-02: Carga de Modelo IFC Recibe llamada de ifc para recalcular secuencias
CU-08: Cálculo de Desplazamientos displacements lee blockIfc_sequences calculadas aquí
CU-13: Procesamiento de Secuencias Servicio principal