Servicios Go/Gin

Servicio: digitaltwin

Información General


Propósito de Negocio

El “gemelo digital” es la representación virtual del estado actual de la obra en 3D. Este servicio: - Provee datos de geometría y estado de cada elemento del modelo - Permite filtrar la vista por etiquetas de trabajo - Soporta operadores AND/OR para composición de filtros - Muestra el estado histórico del modelo (simulación temporal) - Gestiona rangos de tolerancia para la geometría


Endpoints Expuestos

PathDescripción
GET /tolerance-range/:projectIdObtiene rango de tolerancia del modelo
POST /digital-twinDatos para renderizar modelo 3D actual
POST /digital-twin/historical-recordsDatos para simulación histórica
POST /set-tolerance-rangeConfigurar rango de tolerancia
POST /get-filtered-geometriesGeometrías filtradas

Base de Datos

Colecciones Usadas

Colección Base de Datos Descripción
blockIfc {projectId} Bloques con estado de ejecución y geometría
labels {projectId} Etiquetas con bloques asociados

Variables de Entorno

Variable Descripción
ENVIRONMENT Ambiente: dev, qa, prod
{ENV}_PORT Puerto HTTP (:8107)
{ENV}_API_URL URL de la API central
{ENV}_DISPLACEMENTS_URL URL del servicio displacements
{ENV}_LABELS_URL URL del servicio labels
{ENV}_DB_USER Usuario MongoDB
{ENV}_DB_PASSWORD Contraseña MongoDB (sensible)

Lógica del Viewer 3D (endpoint principal)

POST /digital-twin con body { projectId, filters, labelCodes, operator }:

  1. Consulta etiquetas activas del proyecto
  2. Si labelCodes vacío → incluye todas las etiquetas
  3. Aplica recursividad de etiquetas (etiqueta padre → sub-etiquetas vía DataRecursiveLabel)
  4. Según operador:
    • OR: unión de todos los bloques de las etiquetas seleccionadas
    • AND: intersección — solo bloques presentes en TODAS las etiquetas
  5. Para cada bloque calcula: val_executed, displacement_date, estado
  6. Retorna DataOutBlockLabelArray: mapa etiqueta → lista de bloques con datos de geometría

Estructura de Respuesta

{
  "labelCode": [
    {
      "blockCode": "string",
      "dbId": "int (ID Autodesk Viewer)",
      "guid": "string (GUID del elemento IFC)",
      "executed": "bool",
      "val_executed": "float64",
      "displacement_date": "time"
    }
  ]
}

Gestión de Tolerancia


Cors

Restringido a dominios específicos (no AllowAllOrigins): - apibt.bimtrazer.com - apibt-dev.bimtrazer.com - apibt-qa.bimtrazer.com


Helpers Clave

Helper Propósito
getLabelWiithBlocksMap.go Mapa de etiquetas con sus bloques
getBlockValues.go Calcula valores de ejecución por bloque
getExpectedExecution.go Determina ejecución esperada por fecha
getBlocksToCalculate.go Selecciona bloques a incluir en el cálculo

Rol en Casos de Uso

Caso de Uso Rol
CU-07: Visualización del Gemelo Digital Servicio principal