Servicios Node.js

Servicio: lbp (Lean BIM Processing)

Información General


Propósito de Negocio

LBP actúa como capa de transformación entre el modelo IFC crudo y la representación operativa de Lean BIM: - Convierte blockIfc (formato IFC) → leanbim_blocks (formato Lean BIM operativo) - Calcula estados visuales de cada bloque (BLOCKED, ON_TIME, LATE, etc.) - Sincroniza datos cuando se certifican bloques o se suben imágenes - Provee endpoints de filtrado inteligente para el frontend


Endpoints Expuestos

PathDescripción
GET /projectsLista todos los proyectos activos
GET /project-detailsDetalles específicos de un proyecto
GET /ifc-modelsModelos IFC de un proyecto
GET /leanbim/blocks/mapMapea bloques IFC → estructura Lean BIM
GET /leanbim/blocksBloques con filtros de etiquetas (?labelA=X&labelB=Y&parameter=Z&projectId=P)
GET /leanbim/blocks/get-minimal-dataDatos mínimos de bloques (solo código y propiedades esenciales)
POST /leanbim/blocks/create-collectionCrea colección leanbim_blocks desde cero
POST /leanbim/blocks/update-collectionActualiza leanbim_blocks con upsert masivo
POST /leanbim/blocks/filter-blocksFiltra bloques por rango de fechas y etiquetas AND/OR
POST /leanbim/blocks/map-and-createMapea y crea colección en una operación
POST /leanbim/blocks/map-and-updateMapea, respeta estados y actualiza colección
PATCH /leanbim/blocks/update-blockActualiza un bloque individual (execution, status, executedValue)
PATCH /leanbim/blocks/update-image-statusMarca bloque como que tiene imagen asociada

Base de Datos

Colecciones Usadas

Colección Base de Datos Descripción
blockIfc {projectCode} Bloques IFC originales (fuente de verdad)
leanbim_blocks {projectCode} Bloques procesados en formato Lean BIM
ifc {projectCode} Metadatos de modelos IFC
projects master Registro de proyectos

Estructura de leanbim_blocks

{
  "code": "string",
  "description": "string",
  "start_date": "date",
  "end_date": "date",
  "forecast_date": "date",
  "execution": "BLOCKED | PARTIAL | NOT_EXECUTED | ON_TIME | LATE | OVERDUE",
  "status": "AVAILABLE | NOT_AVAILABLE | UNKNOWN",
  "priority": "number",
  "img": boolean,
  "executedValue": "number (0-100)",
  "labels": ["string"],
  "duration": "number",
  "dependence": ["string"]
}

Variables de Entorno

Variable Descripción
MONGO_URI URI completa de conexión MongoDB (sensible)
PORT Puerto HTTP (default: 8080)

Lógica de Mapeo de Estados

Estados de Ejecución (handleExecution)

Estado Condición
BLOCKED Tiene dependencias sin completar
PARTIAL 0 < val_executed < 100
NOT_EXECUTED val_executed = 0
ON_TIME Ejecutado, fecha exec ≤ fecha planificada
LATE Ejecutado con retraso
OVERDUE No ejecutado y fecha planificada ya pasó

Estados Visuales (handleStatus)

Estado Condición
AVAILABLE Puede ejecutarse (dependencias OK)
NOT_AVAILABLE No puede ejecutarse (dependencias pendientes)
UNKNOWN Estado indeterminado

Dependencias Externas

Servicio Llamada Cuándo
messages POST https://messages.bimtrazer.com/ Cuando se sube imagen a bloque
manager.bimtrazer.com GET /sync/leanbim/update Fallback sin centralización

Proceso de Upsert Masivo (map-and-update)

  1. Lee blockIfc del proyecto
  2. Para cada bloque: calcula execution y status
  3. Valida fechas (filtra 0001-01-01 como inválidas)
  4. Inserta/actualiza en leanbim_blocks (upsert masivo)
  5. Elimina códigos que ya no existen en blockIfc
  6. Preserva bloques con estado inactivo
  7. Retorna: { valid_count, invalid_count }

Validación de Fechas

Detecta y filtra bloques con fecha inválida "0001-01-01" (fecha cero de Go serializada). Retorna conteo de bloques inválidos en la respuesta.


Middlewares


Rol en Casos de Uso

Caso de Uso Rol
CU-05: Certificación Recibe notificación de registry para sincronizar
CU-06: Carga de Fotografía Recibe notificación de media para actualizar img flag
CU-11: Comparación de Bloques Provee datos de leanbim_blocks
CU-15: Filtrado de Bloques Servicio principal