Gráficos y Dashboards del Portal BimTrazER
Documentación de visualizaciones: fuentes de datos, algoritmos de agregación y simulaciones de gráficos con datos de ejemplo.
Fecha: 2026-05-03
1. Arquitectura de Datos para Visualización
leanbim_blocks] -->|estados, fechas| DASH[Dashboard React] DISP[displacements :8105
PUT /workprogress] -->|DaysLate, DisplacedDate| DASH SEQ[sequences :8103
GET /sequences] -->|rutas CPM| DASH REG[registry :8110
GET /certification/sheets/] -->|% ejecución certificado| DASH LBLSREF[lblsref
GET /labels-calculation] -->|pesos, referencias| DASH PRIO[GET /priority/blocks/] -->|count alta prioridad| KPI[KPI Cards] DASH --> KPI DASH --> CHART1[Gráfico: Avance General] DASH --> CHART2[Gráfico: Avance Especialidad] DASH --> CHART3[Gantt Virtual]
2. Tarjetas KPI del Dashboard
KPI 1: Bloques de Alta Prioridad
| Aspecto | Detalle |
|---|---|
| Fuente | GET /priority/blocks/ → lbp :8080 |
| Definición | Bloques con Slack=0 (ruta crítica), status=AVAILABLE y ejecución pendiente a la fecha de hoy |
| Algoritmo | Intersección de: rutas críticas (sequences) ∩ AVAILABLE (lbp) ∩ endDate ≤ hoy |
| Alerta | Si count > umbral configurado → color rojo en tarjeta |
┌──────────────────────────┐ │ ⚠️ Alta Prioridad │ │ │ │ 12 │ │ bloques │ │ │ │ En ruta crítica │ │ disponibles hoy │ │ [Ver detalle →] │ └──────────────────────────┘
KPI 2: Días de Atraso
| Aspecto | Detalle |
|---|---|
| Fuente | PUT /workprogress → displacements :8105 |
| Definición | Promedio ponderado de DaysLate de todos los bloques en ruta crítica no ejecutados |
| Fórmula | \(\bar{D} = \frac{\sum_{i \in \text{CritPath}} w_i \cdot \text{DaysLate}_i}{\sum_{i \in \text{CritPath}} w_i}\) |
| Alerta | Rojo si > 10 días, Amarillo si 5–10 días, Verde si < 5 días |
KPI 3: Avance Real vs Programado
| Aspecto | Detalle |
|---|---|
| Fuente | GET /certification/sheets/ → registry :8110 |
| Definición | Porcentaje de obra certificada / porcentaje esperado según cronograma base |
| Fórmula Real | \(\text{AvanceReal} = \frac{\sum P_i \cdot w_i}{\sum w_i} \times 100\%\) |
| Fórmula Prog. | \(\text{AvanceProg}(t) = \frac{\sum_{endDate_i \leq t} w_i}{\sum w_i} \times 100\%\) |
┌──────────────────────────┐ │ 📊 Avance │ │ │ │ Real: 67% ██████░░ │ │ Program: 74% ███████░ │ │ │ │ SPI: 0.91 ⚠️ │ │ [Ver detalle →] │ └──────────────────────────┘
3. Gráfico: Avance General de Obra
Especificación técnica
| Aspecto | Detalle |
|---|---|
| Tipo | Gráfico de líneas (Line Chart) — doble serie |
| Eje X | Tiempo (semanas o meses del proyecto) |
| Eje Y | % Avance (0–100%) |
| Serie 1 (sólida) | Avance real acumulado certificado |
| Serie 2 (punteada) | Avance programado según cronograma base |
| Marcador "Hoy" | Línea vertical en fecha actual |
| Fuente Serie 1 | GET /certification/sheets/ → suma ponderada acumulada |
| Fuente Serie 2 | Cronograma base (blockIfc.endDate) → curva S teórica |
Algoritmo de cálculo de Curva S
La curva S del avance programado se calcula como la distribución acumulada de los pesos de bloque según su fecha de fin programada:
$$S(t) = \frac{\sum_{i : endDate_i \leq t} w_i}{\sum_{i \in V} w_i} \times 100$$Para suavizar la curva se aplica una distribución beta dentro del intervalo de cada bloque:
$$w_i(t) = w_i \cdot F_{Beta(\alpha, \beta)}\!\left(\frac{t - startDate_i}{endDate_i - startDate_i}\right)$$Simulación con datos de ejemplo
Avance General de Obra — Proyecto: Edificio Central
100% │ ···/
90% │ ···------·
80% │ ····---·--
70% │ ·····-- ← Real hoy: 67%
60% │ ····· ●══════════════ Programado hoy: 74%
50% │ ·····
40% │···
30% │
20% │
10% │
0% └─────────────────────────────────────────────────────→
Ene Feb Mar Abr May Jun Jul Ago Sep Oct
↑
HOY (2026-05-03)
─── Avance Real ···· Avance Programado ● Punto actual
SPI = 67/74 = 0.905 → Retraso estimado: ~3.5 semanas
4. Gráfico: Avance por Especialidad
Especificación técnica
| Aspecto | Detalle |
|---|---|
| Tipo | Gráfico de barras horizontales (Horizontal Bar Chart) |
| Eje Y | Especialidades / Etiquetas (labels del proyecto) |
| Eje X | % Avance (0–100%) |
| Color | Verde si ≥ programado, Naranja si 5–15% bajo, Rojo si >15% bajo |
| Fuente | GET /labels/by-project/ + certificaciones filtradas por etiqueta |
Algoritmo de agregación por etiqueta
Para cada etiqueta (especialidad) L:
$$\text{AvanceL} = \frac{\sum_{i \in B_L} P_i \cdot w_i}{\sum_{i \in B_L} w_i} \times 100$$donde \(B_L = \{ i \in V \mid L \in \text{labels}(i) \}\) es el subconjunto de bloques que pertenecen a la etiqueta L.
Simulación con datos de ejemplo
Avance por Especialidad — Proyecto: Edificio Central Estructura ████████████████████░░░░ 80% ✅ (+5% vs prog) Fundaciones ████████████████████████ 100% ✅ Completado Electricidad █████████████░░░░░░░░░░░ 52% ⚠️ (-8% vs prog) Mecánica ████████████░░░░░░░░░░░░ 48% ⚠️ (-12% vs prog) Terminaciones ████░░░░░░░░░░░░░░░░░░░░ 18% 🔴 (-22% vs prog) Fachadas ██░░░░░░░░░░░░░░░░░░░░░░ 8% 🔴 No iniciado ──────────────────────────────────────────────────────── TOTAL OBRA ████████████████░░░░░░░░ 67% ⚠️ SPI: 0.905
5. Diagrama de Dependencias de Bloque
Especificación técnica
| Aspecto | Detalle |
|---|---|
| Tipo | Grafo dirigido interactivo (D3.js o similar) |
| Nodos | Bloques con color según estado de ejecución |
| Aristas | Relaciones de precedencia (→) |
| Label detectado | "Dependency diagram" / "Diagrama de dependencias" en bundle |
| Fuente | GET /blocks/dependencies?isCentralized=true |
🟢 ON_TIME"] --> B["FUND-002-B
🟠 LATE (+8d)"] A --> C["FUND-003-C
🟢 ON_TIME"] B --> D["ESTR-010-C
🔴 BLOCKED"] C --> D D --> E["ESTR-011-D
🔴 BLOCKED"] D --> F["ESTR-012-E
⚪ NOT_EXE"] E --> G["ELEC-005-A
⚪ NOT_EXE"] style A fill:#22c55e,color:#fff style B fill:#f97316,color:#fff style C fill:#22c55e,color:#fff style D fill:#ef4444,color:#fff style E fill:#ef4444,color:#fff style F fill:#94a3b8,color:#fff style G fill:#94a3b8,color:#fff
6. Vista Gantt Virtual (Progress Sheet)
Especificación técnica
| Aspecto | Detalle |
|---|---|
| Ruta | /progress_sheet/:projectId/* |
| Tipo | Tabla-Gantt con barras de tiempo |
| Eje temporal | Semanas del proyecto |
| Barras | Programado (azul) + Real (verde/naranja/rojo) |
| Fuente | GET /certification/sheet-code?isCentralized=true |
Simulación de vista Gantt
Progress Sheet — Edificio Central — Sem 2025-W18 Bloque │W14│W15│W16│W17│W18│W19│W20│W21│ ───────────────┼───┼───┼───┼───┼───┼───┼───┼───┤ FUND-001 Eje A │███│███│ │ │ │ │ │ │ ✅ Completado FUND-002 Eje B │ │███│███│▓▓▓│▓ │ │ │ │ ⚠️ 8d atraso ESTR-010 Losa │ │ │ │ │░░░│░░░│░░░│░░░│ 🔴 Bloqueado ESTR-011 Col. │ │ │ │ │░░░│░░░│░░░│ │ 🔴 Bloqueado ELEC-005 Duc. │ │ │ │ │ │ │░░░│░░░│ ⚪ Pendiente Leyenda: ███ Programado ▓▓▓ Real (atraso) ░░░ Desplazado
7. Vista de Atraso por Zona (Heat Map)
Especificación técnica
| Aspecto | Detalle |
|---|---|
| Tipo | Mapa de calor por zona/piso/etiqueta |
| Métrica | Días de atraso promedio por zona |
| Colores | Verde (0d) → Amarillo (5d) → Rojo (>15d) |
| Fuente | PUT /workprogress → displacements + labels |
Fórmula de calor por zona
$$\text{HeatScore}(Z) = \frac{\sum_{i \in B_Z} \text{DaysLate}_i \cdot w_i}{\sum_{i \in B_Z} w_i}$$donde \(B_Z\) = conjunto de bloques en la zona/etiqueta Z.
8. Visualización del Gemelo Digital
Filtrado por estado en 3D
El gemelo digital colorea los elementos según su estado en leanbim_blocks:
| Estado LBP | Color 3D | Opacidad |
|---|---|---|
| ON_TIME | #22c55e (Verde) | 100% |
| LATE | #f97316 (Naranja) | 100% |
| OVERDUE | #ef4444 (Rojo) | 100% |
| PARTIAL | #eab308 (Amarillo) | 100% |
| BLOCKED | #ef4444 (Rojo intenso) | 70% |
| NOT_EXECUTED | #94a3b8 (Gris) | 60% |
Algoritmo de filtrado de geometrías
?labelFilter=Estructura&isCentralized=true DTsvc->>LBP: GET /leanbim/blocks?labelA=Estructura LBP-->>DTsvc: Lista de bloques con estados DTsvc-->>DT: Lista de objectIds APS + colores DT->>DT: Aplica colores en visor 3D Forge DT-->>U: Modelo 3D coloreado por estado
9. Vista de Mensajes y Auditoría
Especificación técnica
| Aspecto | Detalle |
|---|---|
| Ruta | /messages/:projectId/* |
| Tipo | Timeline de eventos + feed de notificaciones |
| Fuente | GET /messages/RBlockMsg?isCentralized=true → messages :8113 |
| Triggers | Certificaciones (registry), subidas de media, cambios de estado LBP |
Simulación de vista
Mensajes del Proyecto — Edificio Central 2026-05-03 09:15 ✅ Juan Pérez certificó FUND-002-B (100%) 2026-05-03 08:30 📷 Ana López subió 3 fotos en ESTR-010-C 2026-05-02 17:00 ⚙️ Sistema: Desplazamientos recalculados (15 bloques afectados) 2026-05-02 14:20 🔴 Alerta: ESTR-010-C pasó a estado BLOCKED 2026-05-01 11:00 📋 Pedro Gómez actualizó presupuesto línea 02.01 2026-04-30 16:45 🏗 Sistema: Nuevo modelo IFC v2.3 procesado (425 bloques) ─────────────────────────────────────────────────────────────────── [Cargar más →]
10. Chat IA (OpenAI Threads)
Endpoints detectados
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /open-ai/threads | Crear nuevo hilo de conversación con IA |
| POST | /open-ai/threads/add-message | Agregar mensaje al hilo existente |
Estos endpoints sugieren la existencia de un asistente IA integrado en el portal que puede responder preguntas sobre el estado del proyecto, analizar atrasos y sugerir acciones basadas en los datos de los bloques y secuencias.
Flujo inferido
{context: datos_proyecto, pregunta: "..."} OPENAI-->>CHAT: Respuesta IA contextualizada CHAT-->>U: "ESTR-010 está bloqueado porque FUND-002-B
tiene 8 días de atraso..."