Servicios Go/Gin

Servicio: registry

Información General


Propósito de Negocio

La certificación es el proceso por el cual un inspector o coordinador de obra registra el avance real de un elemento constructivo (bloque). Este servicio: - Valida que el usuario tiene permisos de certificación - Verifica que las dependencias preladas están completadas - Registra el avance con trazabilidad completa - Notifica a otros sistemas del cambio


Endpoints Expuestos

PathDescripción
POST /registryCertificar un bloque (avance)
PUT /certificationActualizar certificación existente (agregar imagen)
PUT /cronCertificationEndpoint para cron: recalcula reportes y etiquetas

Base de Datos

Colecciones Usadas

Colección Base de Datos Descripción
blockIfc {projectId} Bloques (lectura y escritura de estado de ejecución)
labels {projectId} Etiquetas con pesos de bloques
projects master Información del proyecto
manager_person master Datos de usuarios y permisos de certificación
certification_queue {projectId} Cola de certificaciones (auditoría)
execution_history {projectId} Historial completo de cambios
label_report {projectId} Reportes precalculados (actualización post-certificación)

Variables de Entorno / Configuración


Dependencias Externas (Llamadas HTTP salientes)

Servicio Endpoint Propósito Sincronía
lbp POST /leanbim/blocks/map-and-update Sincronizar Lean BIM Síncrono (espera respuesta)
messages POST / Registrar evento de auditoría Síncrono
worktables PUT /worktables/update-label-report Recalcular reportes Síncrono
API Gateway PUT /priority/{typeservice} Actualizar prioridades Síncrono
manager.bimtrazer.com GET /sync/leanbim/update Alternativa a LBP Síncrono

Lógica de Negocio Clave

Validación de Dependencias Preladas

Antes de certificar un bloque al 100%, el servicio valida:

Para cada bloque en dependence[]:
  Si el bloque dependiente tiene val_executed < 99% → BLOQUEADO

Si hay bloques bloqueantes, la certificación se rechaza con la lista de bloques que deben completarse primero.

Excepción: Si val_executed < 100% (certificación parcial), no se validan dependencias.

Cálculo de Avances Ponderados

Después de certificar:

avance_etiqueta = Σ (bloque.val_executed × bloque.weight)

Se recalcula en cascada hacia etiquetas padre.

Sistema de Permisos

Un usuario puede certificar solo si: 1. Está en scope[] del proyecto (UserScope.code = projectId) 2. Su registro en manager_person tiene certify = true o permissions.certify = true 3. Su status en el scope está activo

Notificaciones WhatsApp/SMS


Structs Principales

Struct Propósito
Block Bloque certificable (code, val_executed, certified_user, dependence[], exec_date)
BsonLabels Etiqueta con bloques anidados y pesos
BsonExecutionHistory Registro de auditoría de cada cambio
BsonProjectClient Información del cliente contratista
Permissions Permisos del usuario: certify (bool), whatsappAssistant (bool)

Middlewares


Rol en Casos de Uso

Caso de Uso Rol
CU-05: Certificación de Bloque Servicio principal
CU-06: Carga de Fotografía Recibe la imagen y la asocia al bloque antes de certificar