Servicios Go/Gin

Servicio: lblsref (Labels Reference)

Información General


Propósito de Negocio

Cuando una etiqueta contiene sub-etiquetas (jerarquía padre-hijo), los cambios en el avance de una etiqueta hija deben propagarse hacia la etiqueta padre. Este servicio: - Calcula pesos de referencia entre etiquetas en la jerarquía - Propaga cambios de pesos hacia arriba (bottom-up) - Actualiza el total_weight acumulado en cada nodo de la jerarquía - Se ejecuta siempre DESPUÉS de labels completa sus cálculos


Endpoints Expuestos

PathDescripción
PUT /labels-calculationEndpoint principal: recalcular referencias y pesos entre etiquetas

Nota: Servicio muy reducido (1 endpoint), pero crítico para la consistencia de datos.


Base de Datos

Colecciones Usadas

Colección Base de Datos Descripción
labels {projectId} Lectura de etiquetas y jerarquía
labels_ref {projectId} Almacena relaciones y referencias calculadas
plan_records {projectId} Registros de planificación (lectura)

Estructura de LblsLabelsRef

{
  "codep": "string (código etiqueta padre)",
  "code": "string (código etiqueta hijo)",
  "weight": "float64 (peso en la relación padre-hijo)"
}

Variables de Entorno

Variable Descripción
ENVIRONMENT Ambiente: dev, qa, prod
DEV_PORT Puerto DEV (:8106)
QA_PORT / PROD_PORT Puerto QA/PROD (:8099)
{ENV}_API_URL URL de la API
{ENV}_DB_USER Usuario MongoDB
{ENV}_DB_PASSWORD Contraseña MongoDB (sensible)

Algoritmo de Propagación

PUT /labels-calculation ejecuta:

  1. Obtiene todas las etiquetas activas del proyecto
  2. Para cada etiqueta con sub-etiquetas (lbl_labels[] no vacío):
    • Identifica relaciones padre-hijo
    • Calcula peso propagado: peso_hijo × peso_en_padre
  3. Recorre árbol de etiquetas (recursivamente con DataRecursiveLabel)
  4. Distingue tipos de nodo:
    • CanBlo = 0, CanLbl = 0: etiqueta vacía
    • CanBlo > 0, CanLbl = 0: etiqueta hoja (tiene bloques directamente)
    • CanLbl > 0: nodo intermedio (tiene sub-etiquetas)
  5. Actualiza total_weight acumulado en cada nodo
  6. Almacena factores en labels_ref

Controllers

Archivo Función
getLabels.go QueryArrayLabelsAll() — todas las etiquetas activas
getLabels.go QueryLabelsLbl() — relaciones etiqueta-etiqueta
getLabels.go QueryBlockLabels() — bloques de etiquetas
getLabels.go DataRecursiveLabel() — recorre árbol recursivamente

Cors

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


Nota sobre Puertos

Este servicio usa el mismo puerto 8099 que projects en QA/PROD. Esto sugiere que se despliegan en ambientes separados o detrás de un proxy/API Gateway que los distingue por path o subdominio. [inferido]


Rol en Casos de Uso

Caso de Uso Rol
CU-04: Asignación de Bloques Recibe llamada de labels para propagar cambios
CU-10: Recálculo de Gráficos Recibe llamada de labels al final del proceso
CU-14: Actualización de Pesos Propaga los cambios de peso hacia arriba