Portal

Arquitectura Técnica del Portal BimTrazER

Documento generado mediante análisis estático del bundle de producción React y los microservicios backend.
Fecha: 2026-05-03  ·  Fuente: frontend/build/static/js/main.401e4144.js + microservicios Go/Node.js


1. Visión General

El portal BimTrazER es una Single Page Application (SPA) construida con React que actúa como interfaz única para gestionar proyectos de construcción BIM. La aplicación se comunica exclusivamente con los microservicios del backend a través de HTTP REST, usando el API Gateway centralizado en https://apibt.bimtrazer.com.

AspectoValor
FrameworkReact 18 (Create React App)
State ManagementRedux (detectado: Minified Redux error en bundle)
InternacionalizaciónEspañol / Inglés (i18n con contexto propio)
API Base (prod)https://apibt.bimtrazer.com
API Base (dev)https://apibt-dev.bimtrazer.com
AutenticaciónJWT (endpoint: POST /users/login?isCentralized=true)
Build47 chunks JS + CSS minificado (producción)
ExportacionesExcel (.xlsx, .csv) vía librería cliente
3D ViewerAutodesk Platform Services (APS/Forge)

2. Mapa de Rutas del Portal

Las siguientes rutas fueron extraídas del bundle de producción (main.401e4144.js):

RutaMódulo / VistaServicios Backend
/loginLogin Pageusers (:8105 → POST /users/login)
/registerRegistro de usuariousers (POST /users/register)
/projectsLista de proyectosprojects (:8099 → GET /projects/general/)
/dashboard/:projectIdDashboard Principallbp, sequences, displacements, lblsref
/blocks/:projectIdGestión de Bloquesblocks (:8104), lbp (:8080)
/labels/:projectIdGestión de Etiquetaslabels (:8102), lblsref
/lbp/:projectIdLean BIM Processinglbp (:8080 → GET /leanbim/blocks)
/priority_blocks/:projectId/*Bloques de Alta Prioridadlbp (GET /priority/blocks/)
/progress_sheet/:projectId/*Hoja de Progresoregistry (:8110), worktables
/digitaltwin/:projectId/*Gemelo Digital 3Ddigitaltwin (:8107), APS/Forge
/budget/:projectIdGestión Presupuestariabudget (:8118), items (:8115)
/library/:projectIdBiblioteca de Archivosmedia (:8114 → GET /media/files)
/gallery/:projectId/*Galería Multimediamedia (GET /media/get-files)
/messages/:projectId/*Mensajes / Auditoríamessages (:8113)
/setup/:projectId/*Configuración del Proyectoprojects, ifc (:8101)
/parameterize/:projectIdParametrización BIMifc (POST /ifc/assign-blocks-description)
/params/:projectIdParámetros del Proyectoprojects (GET /core/general-data/)
/contracts/:projectIdContratosbudget (GET /v1/budgets)
/blockchain/:projectIdRegistro Blockchainregistry (certificación)

3. Arquitectura de Comunicación Portal ↔ Backend

sequenceDiagram participant U as Usuario participant SPA as Portal React (SPA) participant GW as API Gateway
apibt.bimtrazer.com participant US as users :8105 participant PR as projects :8099 participant LBP as lbp :8080 participant SEQ as sequences :8103 participant DISP as displacements :8105 participant REG as registry :8110 U->>SPA: Abre navegador SPA->>US: POST /users/login?isCentralized=true US-->>SPA: JWT Token SPA->>PR: GET /projects/general/ (+ Bearer JWT) PR-->>SPA: Lista proyectos U->>SPA: Selecciona proyecto SPA->>LBP: GET /leanbim/blocks?projectId=X LBP-->>SPA: Bloques Lean BIM (estados visuales) SPA->>SEQ: GET /sequences/{projectId}/ SEQ-->>SPA: Secuencias CPM SPA->>DISP: PUT /workprogress DISP-->>SPA: Desplazamientos calculados U->>SPA: Certifica bloque SPA->>REG: POST /registry/certify REG->>LBP: POST /leanbim/blocks/map-and-update REG-->>SPA: Confirmación + nuevos estados

4. Estructura de Componentes (Inferida)

graph TD A[App Root] --> B[AuthProvider
JWT Context] A --> C[LanguageProvider
ES/EN i18n] B --> D[Router] D --> E[LoginPage] D --> F[ProjectList] D --> G[ProjectLayout] G --> H[Dashboard] G --> I[BlocksView] G --> J[LabelsView] G --> K[PriorityBlocks] G --> L[ProgressSheet] G --> M[DigitalTwin
APS Viewer] G --> N[BudgetModule] G --> O[MediaGallery] G --> P[MessagesAudit] H --> H1[KPICards] H --> H2[WorkProgressChart] H --> H3[SpecialtyAdvChart] I --> I1[BlockDetailModal] I1 --> I1A[OverviewTab] I1 --> I1B[LibraryTab] I1 --> I1C[DependencyDiagram] N --> N1[BudgetManagement] N --> N2[BudgetIntegration] N --> N3[BudgetCost]

5. Estado Global (Redux)

El portal usa Redux para gestionar el estado compartido entre módulos. Los slices inferidos del código:

Slice / StoreResponsabilidad
authToken JWT, usuario actual, permisos
projectProyecto seleccionado, metadata, config
blocksLista de bloques Lean BIM, filtros activos
labelsEtiquetas del proyecto (árbol jerárquico)
sequencesSecuencias CPM calculadas
dashboardKPIs, fechas de avance, métricas
languageIdioma activo (Spanish / English)

6. Flujo de Autenticación

flowchart TD A([Usuario abre /login]) --> B[Formulario Login
email + password] B --> C{POST /users/login
isCentralized=true} C -->|401 Unauthorized| D[Muestra error
credenciales inválidas] C -->|200 OK + JWT| E[Almacena token
localStorage/sessionStorage] E --> F[Redirige a /projects] F --> G[GET /projects/general/
Authorization: Bearer JWT] G -->|403 Forbidden| H[Token inválido
Regresa a /login] G -->|200 OK| I[Renderiza lista
de proyectos] I --> J([Usuario selecciona proyecto]) J --> K[Navega a /dashboard/:projectId]

7. Integración Autodesk Platform Services (APS/Forge)

El módulo Digital Twin integra el visor 3D de Autodesk:

EndpointPropósito
POST /api/forge/oauth/tokenObtiene token OAuth 2.0 para el visor APS
GET /aps/api/models/Lista modelos 3D disponibles del proyecto
GET /ifc/evaluate-ifc?isCentralized=trueEvalúa el estado del modelo IFC
GET /digital-twin/get-filtered-geometriesGeometrías filtradas por etiqueta/estado
POST /digital-twin/set-tolerance-rangeConfigura rango de tolerancia visual

8. Patrón Multi-Tenant en el Portal

Cada ruta que contiene :projectId opera sobre una base de datos MongoDB independiente. El portal envía siempre el parámetro isCentralized para indicar al backend si usar la BD maestra centralizada o la BD específica del proyecto:


9. Ciclo de Datos: Del Modelo IFC al Dashboard

flowchart LR IFC[Archivo .ifc
subido por usuario] -->|s3-manager-ms| S3[(AWS S3)] S3 -->|ifc service| BLOCKS[(blockIfc
MongoDB)] BLOCKS -->|sequences| SEQ[(blockIfc_sequences)] BLOCKS -->|displacements| DISP[(displacement dates)] BLOCKS -->|lbp service| LBP[(leanbim_blocks
estados visuales)] LBP -->|GET /leanbim/blocks| PORTAL[Portal React] SEQ -->|GET /sequences| PORTAL DISP -->|GET workprogress| PORTAL PORTAL --> DASH[Dashboard KPIs] PORTAL --> VIEW3D[Digital Twin 3D] PORTAL --> SHEET[Progress Sheet]