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.
| Aspecto | Valor |
|---|---|
| Framework | React 18 (Create React App) |
| State Management | Redux (detectado: Minified Redux error en bundle) |
| Internacionalización | Español / Inglés (i18n con contexto propio) |
| API Base (prod) | https://apibt.bimtrazer.com |
| API Base (dev) | https://apibt-dev.bimtrazer.com |
| Autenticación | JWT (endpoint: POST /users/login?isCentralized=true) |
| Build | 47 chunks JS + CSS minificado (producción) |
| Exportaciones | Excel (.xlsx, .csv) vía librería cliente |
| 3D Viewer | Autodesk Platform Services (APS/Forge) |
2. Mapa de Rutas del Portal
Las siguientes rutas fueron extraídas del bundle de producción (main.401e4144.js):
| Ruta | Módulo / Vista | Servicios Backend |
|---|---|---|
/login | Login Page | users (:8105 → POST /users/login) |
/register | Registro de usuario | users (POST /users/register) |
/projects | Lista de proyectos | projects (:8099 → GET /projects/general/) |
/dashboard/:projectId | Dashboard Principal | lbp, sequences, displacements, lblsref |
/blocks/:projectId | Gestión de Bloques | blocks (:8104), lbp (:8080) |
/labels/:projectId | Gestión de Etiquetas | labels (:8102), lblsref |
/lbp/:projectId | Lean BIM Processing | lbp (:8080 → GET /leanbim/blocks) |
/priority_blocks/:projectId/* | Bloques de Alta Prioridad | lbp (GET /priority/blocks/) |
/progress_sheet/:projectId/* | Hoja de Progreso | registry (:8110), worktables |
/digitaltwin/:projectId/* | Gemelo Digital 3D | digitaltwin (:8107), APS/Forge |
/budget/:projectId | Gestión Presupuestaria | budget (:8118), items (:8115) |
/library/:projectId | Biblioteca de Archivos | media (:8114 → GET /media/files) |
/gallery/:projectId/* | Galería Multimedia | media (GET /media/get-files) |
/messages/:projectId/* | Mensajes / Auditoría | messages (:8113) |
/setup/:projectId/* | Configuración del Proyecto | projects, ifc (:8101) |
/parameterize/:projectId | Parametrización BIM | ifc (POST /ifc/assign-blocks-description) |
/params/:projectId | Parámetros del Proyecto | projects (GET /core/general-data/) |
/contracts/:projectId | Contratos | budget (GET /v1/budgets) |
/blockchain/:projectId | Registro Blockchain | registry (certificación) |
3. Arquitectura de Comunicación Portal ↔ Backend
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)
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 / Store | Responsabilidad |
|---|---|
auth | Token JWT, usuario actual, permisos |
project | Proyecto seleccionado, metadata, config |
blocks | Lista de bloques Lean BIM, filtros activos |
labels | Etiquetas del proyecto (árbol jerárquico) |
sequences | Secuencias CPM calculadas |
dashboard | KPIs, fechas de avance, métricas |
language | Idioma activo (Spanish / English) |
6. Flujo de Autenticación
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:
| Endpoint | Propósito |
|---|---|
POST /api/forge/oauth/token | Obtiene token OAuth 2.0 para el visor APS |
GET /aps/api/models/ | Lista modelos 3D disponibles del proyecto |
GET /ifc/evaluate-ifc?isCentralized=true | Evalúa el estado del modelo IFC |
GET /digital-twin/get-filtered-geometries | Geometrías filtradas por etiqueta/estado |
POST /digital-twin/set-tolerance-range | Configura 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:
isCentralized=true→ operación sobre BD maestra (datos compartidos)isCentralized=false→ operación sobre BD{projectId}(datos de proyecto)
9. Ciclo de Datos: Del Modelo IFC al Dashboard
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]