Portal

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

flowchart LR LBP[lbp :8080
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

AspectoDetalle
FuenteGET /priority/blocks/ → lbp :8080
DefiniciónBloques con Slack=0 (ruta crítica), status=AVAILABLE y ejecución pendiente a la fecha de hoy
AlgoritmoIntersección de: rutas críticas (sequences) ∩ AVAILABLE (lbp) ∩ endDate ≤ hoy
AlertaSi 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

AspectoDetalle
FuentePUT /workprogress → displacements :8105
DefiniciónPromedio 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}\)
AlertaRojo si > 10 días, Amarillo si 5–10 días, Verde si < 5 días

KPI 3: Avance Real vs Programado

AspectoDetalle
FuenteGET /certification/sheets/ → registry :8110
DefiniciónPorcentaje 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

AspectoDetalle
TipoGráfico de líneas (Line Chart) — doble serie
Eje XTiempo (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 1GET /certification/sheets/ → suma ponderada acumulada
Fuente Serie 2Cronograma 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

AspectoDetalle
TipoGráfico de barras horizontales (Horizontal Bar Chart)
Eje YEspecialidades / Etiquetas (labels del proyecto)
Eje X% Avance (0–100%)
ColorVerde si ≥ programado, Naranja si 5–15% bajo, Rojo si >15% bajo
FuenteGET /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

AspectoDetalle
TipoGrafo dirigido interactivo (D3.js o similar)
NodosBloques con color según estado de ejecución
AristasRelaciones de precedencia (→)
Label detectado"Dependency diagram" / "Diagrama de dependencias" en bundle
FuenteGET /blocks/dependencies?isCentralized=true
graph LR A["FUND-001-A
🟢 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

AspectoDetalle
Ruta/progress_sheet/:projectId/*
TipoTabla-Gantt con barras de tiempo
Eje temporalSemanas del proyecto
BarrasProgramado (azul) + Real (verde/naranja/rojo)
FuenteGET /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

AspectoDetalle
TipoMapa de calor por zona/piso/etiqueta
MétricaDías de atraso promedio por zona
ColoresVerde (0d) → Amarillo (5d) → Rojo (>15d)
FuentePUT /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 LBPColor 3DOpacidad
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

sequenceDiagram participant U as Usuario participant DT as Digital Twin View participant DTsvc as digitaltwin :8107 participant LBP as lbp :8080 U->>DT: Selecciona filtro (Etiqueta: Estructura) DT->>DTsvc: GET /digital-twin/get-filtered-geometries
?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

AspectoDetalle
Ruta/messages/:projectId/*
TipoTimeline de eventos + feed de notificaciones
FuenteGET /messages/RBlockMsg?isCentralized=true → messages :8113
TriggersCertificaciones (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étodoEndpointDescripción
POST/open-ai/threadsCrear nuevo hilo de conversación con IA
POST/open-ai/threads/add-messageAgregar 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

sequenceDiagram participant U as Usuario participant CHAT as Chat IA (Portal) participant OPENAI as OpenAI Threads API participant CTX as Contexto Proyecto U->>CHAT: "¿Por qué el bloque ESTR-010 está bloqueado?" CHAT->>CTX: GET /leanbim/blocks?code=ESTR-010 CTX-->>CHAT: Estado + dependencias del bloque CHAT->>OPENAI: POST /open-ai/threads/add-message
{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..."