Content is user-generated and unverified.

Sistema de Análisis de Riesgo DMS - Arquitectura Completa

1. Arquitectura del Servicio

Opción Recomendada: Servicio Propio

Razón: Amazon y otros proveedores cloud no tienen servicios específicos para análisis de riesgo de conductores. Necesitas crear tu propio servicio especializado.

Stack Tecnológico Sugerido

- Backend: Python/FastAPI o Node.js/Express
- Base de Datos: PostgreSQL + Redis (cache)
- ML/AI: TensorFlow/PyTorch o scikit-learn
- Deployment: Docker + AWS/GCP/Azure
- Monitoreo: CloudWatch/Grafana

2. Estructura de Datos de Entrada (JSON)

Evento Individual del DMS

json
{
  "driver_session": {
    "session_id": "sess_12345",
    "driver_id": "driver_001",
    "vehicle_id": "vehicle_456",
    "start_time": "2025-07-02T08:00:00Z",
    "current_time": "2025-07-02T13:30:00Z"
  },
  "event_data": {
    "timestamp": "2025-07-02T13:30:15Z",
    "event_type": "fatigue_indicator",
    "details": {
      "yawn_detected": true,
      "eyes_closed_duration": 2.5,
      "head_position": "tilted_down",
      "blink_frequency": 8,
      "eye_closure_percentage": 75
    }
  },
  "contextual_data": {
    "time_of_day": "afternoon",
    "driving_duration_minutes": 330,
    "weather_condition": "sunny",
    "road_type": "highway",
    "speed_kmh": 85,
    "location": {
      "lat": 9.9281,
      "lng": -84.0907
    }
  },
  "environmental_factors": {
    "ambient_light": "bright",
    "temperature_celsius": 28,
    "is_night": false
  }
}

Batch de Eventos (Para análisis acumulativo)

json
{
  "session_summary": {
    "session_id": "sess_12345",
    "driver_id": "driver_001",
    "analysis_window_minutes": 60
  },
  "accumulated_events": [
    {
      "event_type": "yawn",
      "count": 4,
      "last_occurrence": "2025-07-02T13:25:00Z"
    },
    {
      "event_type": "eyes_closed",
      "count": 12,
      "avg_duration": 1.8,
      "max_duration": 3.2
    },
    {
      "event_type": "head_nodding",
      "count": 2,
      "severity": "moderate"
    }
  ]
}

3. API Endpoints

POST /api/v1/risk-analysis/real-time

Propósito: Análisis en tiempo real de un evento individual

Request: Evento individual (JSON arriba)
Response: Riesgo instantáneo + recomendaciones

POST /api/v1/risk-analysis/session-analysis

Propósito: Análisis acumulativo de la sesión de manejo

Request: Resumen de sesión + eventos acumulados
Response: Nivel de riesgo global + alertas críticas

GET /api/v1/risk-analysis/driver/{driver_id}/history

Propósito: Historial de riesgo del conductor

Response: Patrones históricos + tendencias de riesgo

4. Modelo de Cálculo de Riesgo

Factores de Riesgo y Pesos

ESTADO PRE-CONDUCCIÓN LOGIFIT (30% del riesgo total)

Evaluación de Aptitud Preventiva:

1. sleep_aptitude_status - Peso: 0.40
   - APTO: Factor 1.0 (riesgo base)
   - NO_APTO: Factor 2.5 (riesgo crítico aumentado)
   - SIN_EVALUACION: Factor 1.3 (riesgo por incertidumbre)

2. sleep_quality_metrics - Peso: 0.35
   - Análisis multivariable encapsulado en APTO/NO_APTO
   - Incluye: REM, sueño profundo, fragmentación

3. sleep_timing_validity - Peso: 0.25
   - Evaluación <2 horas antes: Factor 1.0 (válida)
   - Evaluación 2-4 horas antes: Factor 1.2 (degradación)
   - Evaluación >4 horas antes: Factor 1.5 (dudosa validez)

Protocolo Override (NO_APTO pero conduce):
- Monitoreo intensificado: análisis cada 30 segundos
- Umbral de alerta reducido en 30%
- Notificación automática a central de control
- Combinaciones críticas tienen peso 2x

COMBINACIONES CRÍTICAS AUTOMÁTICAS:

Alerta Crítica Inmediata (Score = 95-100):

1. NO_APTO + fatigueDriving (SEVERO)
2. NO_APTO + makeCalls (TELÉFONO_EN_MANO) + noche
3. fatigueDriving (SEVERO) + distractedDriving + >4 horas manejo
4. abnormalDrivingBehavior + fatigueDriving (MODERADO) + lluvia/noche
5. 3+ comportamientos simultáneos en ventana de 15min
6. makeCalls (TELÉFONO_EN_MANO) + fatigueDriving + >6 horas manejo
7. driverAnomaly (SEVERO) + cualquier otro comportamiento

**NUEVAS - Factores Operativos:**
8. MATERIALES_PELIGROSOS + fatigueDriving (cualquier nivel)
9. TRANSPORTE_PASAJEROS (>30) + distractedDriving + noche
10. Régimen día 19-21 + NO_APTO + cualquier DMS
11. >600km/día + fatigueDriving (MODERADO) + régimen crítico
12. Lluvia + noche + materiales peligrosos + cualquier DMS

Alerta Alta (Score = 80-94):

1. APTO + fatigueDriving (MODERADO) + >3 horas manejo
2. distractedDriving >12 eventos/hora
3. makeCalls (MANOS_LIBRES) + fatigueDriving + noche
4. abnormalDrivingBehavior + >5 horas manejo
5. 2 comportamientos consistentes >30min
6. NO_APTO sin otros comportamientos detectados

**NUEVAS - Factores Operativos:**
7. TRANSPORTE_PASAJEROS + régimen días 15-18
8. >400km/día + fatigueDriving (LEVE) + día crítico roster
9. Materiales peligrosos + noche + >4 horas manejo
10. Caminos mineros + régimen crítico + distractedDriving
11. >6 viajes/día + fatigueDriving + cualquier roster crítico

ALERTAS ESPECÍFICAS POR INDUSTRIA:

Minería (Alertas Especiales):

- Régimen 21-7 días 19-21: Monitoreo cada 15 minutos
- Caminos no pavimentados + fatiga: Reducir umbral 40%
- Cambio de turno: Monitoreo intensivo primeras 2 horas

Transporte Público (Alertas Especiales):

- >30 pasajeros + distractedDriving: Alerta inmediata
- Lluvia + pasajeros + noche: Protocolo especial
- makeCalls (teléfono) + pasajeros: Crítico automático

Materiales Peligrosos (Alertas Especiales):

- Cualquier DMS + materiales críticos: Escalado inmediato
- Condiciones adversas + peligrosos: Central de control
- fatigueDriving (LEVE) + peligrosos = tratado como SEVERO

FATIGA FÍSICA DURANTE CONDUCCIÓN (35% del riesgo total)

Comportamientos DMS con Niveles de Severidad:

1. fatigueDriving (Conducción por fatiga) - Peso: 0.25
   - LEVE: Factor 1.2 (somnolencia inicial)
   - MODERADO: Factor 1.8 (fatiga evidente)
   - SEVERO: Factor 2.5 (peligro inmediato)
   - Acumulación: Promedio ponderado últimos 30min

2. abnormalDrivingBehavior (Comportamiento anormal) - Peso: 0.20
   - Patrón de movimientos irregulares
   - Análisis acumulativo de consistencia

3. distractedDriving (Conducción distraída) - Peso: 0.15
   - Frecuencia sugerida crítica: >8 eventos/hora
   - Duración acumulada: >5 minutos/hora = alto riesgo

4. makeCalls (Hacer llamadas) - Peso: 0.15
   - TELÉFONO_EN_MANO: Factor 2.8 (crítico)
   - MANOS_LIBRES: Factor 1.3 (moderado)
   - Duración acumulada por hora

5. smoke (Fumar en vehículo) - Peso: 0.10
   - Frecuencia y duración acumulativa
   - Combina con otros distractores

6. driverAnomaly (Anomalía del conductor) - Peso: 0.10
   - Patrones fuera del baseline personal
   - Análisis de tendencia temporal

7. driverChange (Cambio de conductor) - Peso: 0.05
   - Reset de acumulación para nuevo conductor
   - Continuidad de monitoreo

**ANÁLISIS ACUMULATIVO DIFERENCIADOR:**

Ventana de Análisis Deslizante:

  • Últimos 15 minutos: Peso 0.5 (más relevante)
  • Últimos 30 minutos: Peso 0.3
  • Última 1 hora: Peso 0.2

Patrón Temporal:

  • Degradación progresiva: Multiplicador 1.4x
  • Picos intermitentes: Multiplicador 1.2x
  • Consistencia alta: Multiplicador 1.6x

Frecuencias Críticas Sugeridas:

  • distractedDriving: >8 eventos/hora
  • fatigueDriving (moderado): >3 eventos/30min
  • makeCalls (mano): >2 eventos/hora
  • Cualquier comportamiento severo: >1 evento/15min

Duración de Manejo (15%):
- 0-2 horas: Factor 1.0
- 2-4 horas: Factor 1.3
- 4-6 horas: Factor 1.7
- 6+ horas: Factor 2.2

**CONDICIONES AMBIENTALES Y OPERATIVAS (15% del riesgo total)**

**A. Condiciones Ambientales Básicas (40% de este factor)**
  1. Hora del día:
    • 06:00-18:00 (día): Factor 1.0
    • 18:00-22:00 (atardecer): Factor 1.2
    • 22:00-06:00 (noche): Factor 1.5
    • 03:00-06:00 (madrugada crítica): Factor 1.8
  2. Condiciones climáticas:
    • Despejado: Factor 1.0
    • Nublado: Factor 1.1
    • Lluvia ligera: Factor 1.3
    • Lluvia fuerte: Factor 1.6
    • Niebla: Factor 1.8
    • Combinaciones (lluvia + noche): Factor 2.0
  3. Tipo de carretera:
    • Autopista/carretera principal: Factor 1.0
    • Carretera secundaria: Factor 1.2
    • Caminos mineros/montañosos: Factor 1.5
    • Caminos no pavimentados: Factor 1.7

**B. Perfil Operativo del Vehículo (35% de este factor)**
  1. Tipo de carga/pasajeros - Peso: 0.6:
    • CARGA_GENERAL: Factor 1.0
    • MATERIALES_PELIGROSOS: Factor 2.2 (combustibles, químicos, explosivos)
    • TRANSPORTE_PASAJEROS: Factor 1.8 (buses, servicios públicos)
    • MAQUINARIA_PESADA: Factor 1.5
    • CARGA_MINERA: Factor 1.3
  2. Capacidad de riesgo - Peso: 0.4:
    • 1-15 pasajeros: Factor 1.0
    • 16-30 pasajeros: Factor 1.4
    • 31-60 pasajeros: Factor 1.8
    • 60 pasajeros: Factor 2.2

    • Materiales críticos (cantidad): +0.5 por cada categoría

**C. Patrón de Viajes Diarios (25% de este factor)**
  1. Distancia por viaje:
    • <50 km (urbano/minero): Factor 1.0
    • 50-100 km (regional): Factor 1.2
    • 100-200 km (interprovincial): Factor 1.5
    • 200 km (larga distancia): Factor 2.0

  2. Frecuencia de viajes:
    • Viaje único largo: Factor 1.0
    • 2-3 viajes/día: Factor 1.3
    • 4-6 viajes/día: Factor 1.6
    • 6 viajes/día: Factor 2.1

  3. Kilómetros totales/día:
    • <200 km/día: Factor 1.0
    • 200-400 km/día: Factor 1.4
    • 400-600 km/día: Factor 1.8
    • 600 km/día: Factor 2.3


**RÉGIMEN DE TRABAJO - ROSTER (10% del riesgo total)**

**Sistema de Turnos Mineros:**
  1. Régimen 21-7 (21 días trabajo, 7 descanso):
    • Días 1-7: Factor 1.0 (energía alta)
    • Días 8-14: Factor 1.3 (fatiga acumulativa)
    • Días 15-18: Factor 1.7 (desgaste evidente)
    • Días 19-21: Factor 2.2 (zona crítica)
    • Días descanso: Factor 0.8 (recuperación)
  2. Régimen 14-7:
    • Días 1-5: Factor 1.0
    • Días 6-10: Factor 1.4
    • Días 11-14: Factor 1.9
    • Días descanso: Factor 0.8
  3. Régimen 7-7:
    • Días 1-3: Factor 1.0
    • Días 4-5: Factor 1.3
    • Días 6-7: Factor 1.6
    • Días descanso: Factor 0.8
  4. Turno Regular (5-2):
    • Lunes-Miércoles: Factor 1.0
    • Jueves-Viernes: Factor 1.2
    • Fin de semana: Factor 0.9

Multiplicadores de Roster Críticos:

  • Último día del régimen: +0.4 adicional
  • Penúltimo día: +0.2 adicional
  • Regreso después de descanso (día 1): -0.1 (renovado)
  • Cambio de turno (día/noche): +0.3

Patrones Históricos (5%):
- Historial del conductor
- Tendencias recientes
- Comportamiento baseline

**CONFIGURACIÓN ADAPTATIVA POR CLIENTE:**

Clientes CON Logifit:
- Pre-Conducción: 30%
- Fatiga Durante: 35%
- Duración: 15%
- Condiciones Ambientales/Operativas: 15%
- Régimen de Trabajo (Roster): 10%
- Históricos: 5%

Clientes SIN Logifit:
- Pre-Conducción: 0%
- Fatiga Durante: 50% (peso redistribuido)
- Duración: 20%
- Condiciones Ambientales/Operativas: 20%
- Régimen de Trabajo (Roster): 15%
- Históricos: 5%

**EJEMPLOS DE CÁLCULO POR INDUSTRIA:**

Ejemplo 1 - Bus Interprovincial (60 pasajeros, 200km):
  • Perfil Operativo: Factor 1.8 (pasajeros) × 1.5 (distancia) = 2.7
  • Si es de noche: × 1.5 = 4.05
  • Si día 19 de régimen 21-7: × 2.2 = 8.9
  • RIESGO MUY ALTO antes de considerar DMS

Ejemplo 2 - Transporte Minero (carga, 6 viajes × 20km):
  • Perfil Operativo: Factor 1.3 (minera) × 1.6 (frecuencia) = 2.08
  • Caminos mineros: × 1.5 = 3.12
  • Si día 20 de régimen 21-7: × 2.2 = 6.86
  • RIESGO ALTO estructural

Ejemplo 3 - Materiales Peligrosos (combustible, 300km):
  • Perfil Operativo: Factor 2.2 (peligrosos) × 2.0 (distancia) = 4.4
  • Si lluvia + noche: × 2.0 = 8.8
  • RIESGO CRÍTICO automático

Algoritmo de Cálculo

// Para clientes CON Logifit
Risk_Score = (
    PreDriving_Risk * 0.30 +
    Fatigue_During_Score * 0.35 +
    Duration_Factor * 0.20 +
    Environmental_Factor * 0.10 +
    Historical_Pattern * 0.05
) * Multicollinearity_Multiplier

// Para clientes SIN Logifit  
Risk_Score = (
    Fatigue_During_Score * 0.55 +
    Duration_Factor * 0.25 +
    Environmental_Factor * 0.15 +
    Historical_Pattern * 0.05
)

Multicollinearity_Multiplier:
- NO_APTO + fatigueDriving: 1.5x
- NO_APTO + abnormalBehavior: 1.4x
- APTO pero 3+ DMS alerts: 1.2x (degradación detectada)

Donde:
- PreDriving_Risk: 0-100 (evaluación Logifit)
- Fatigue_During_Score: 0-100 (eventos DMS acumulados)
- Duration_Factor: 1.0-2.2 (según horas manejando)
- Environmental_Factor: 1.0-1.5 (condiciones adversas)
- Historical_Pattern: 0.8-1.3 (perfil del conductor)

5. Estructura de Respuesta

Respuesta de Análisis en Tiempo Real

json
{
  "analysis_result": {
    "session_id": "sess_12345",
    "timestamp": "2025-07-02T13:30:15Z",
    "risk_assessment": {
      "overall_risk_score": 85,
      "risk_level": "HIGH",
      "risk_category": "FATIGUE_CRITICAL",
      "confidence": 0.92
    },
    "risk_factors": {
      "fatigue_indicators": {
        "score": 78,
        "primary_factors": ["excessive_yawning", "prolonged_eye_closure"],
        "count_last_hour": {
          "yawns": 4,
          "eye_closures": 12,
          "head_nods": 2
        }
      },
      "driving_duration": {
        "total_minutes": 330,
        "risk_multiplier": 1.7,
        "recommended_break_overdue": true
      },
      "environmental_context": {
        "time_factor": "afternoon_peak",
        "weather_impact": "minimal",
        "road_conditions": "highway_monotony"
      }
    },
    "predictions": {
      "accident_probability_next_30min": 0.23,
      "time_to_critical_fatigue": "15-20 minutes",
      "recommended_action_urgency": "IMMEDIATE"
    },
    "recommendations": {
      "immediate_actions": [
        "Pull over safely within next 5 minutes",
        "Take 20-minute break minimum",
        "Contact fleet manager"
      ],
      "alert_level": "CRITICAL",
      "should_notify_fleet": true,
      "suggested_break_duration": 20
    }
  },
  "metadata": {
    "processing_time_ms": 45,
    "model_version": "v2.1.3",
    "last_calibration": "2025-07-01"
  }
}

Niveles de Alerta

LOW (0-30): Monitoreo normal
MODERATE (31-60): Atención incrementada
HIGH (61-80): Alerta preventiva
CRITICAL (81-100): Acción inmediata requerida

6. Componentes del Servicio

Motor de Machine Learning

python
class RiskAnalysisEngine:
    def __init__(self):
        self.fatigue_model = load_fatigue_detection_model()
        self.risk_calculator = RiskCalculator()
        self.pattern_analyzer = DriverPatternAnalyzer()
    
    def analyze_real_time(self, event_data):
        # Procesar evento individual
        fatigue_score = self.fatigue_model.predict(event_data)
        risk_score = self.risk_calculator.calculate(event_data, fatigue_score)
        return self.generate_recommendations(risk_score)
    
    def analyze_session(self, session_data):
        # Análisis acumulativo
        patterns = self.pattern_analyzer.analyze(session_data)
        return self.calculate_session_risk(patterns)

Base de Datos

sql
-- Tablas principales
drivers (id, name, experience_years, baseline_profile)
sessions (id, driver_id, start_time, end_time, total_events)
events (id, session_id, timestamp, event_type, severity, raw_data)
risk_calculations (id, session_id, timestamp, risk_score, factors)
alerts (id, session_id, alert_level, timestamp, resolved)

7. Implementación por Fases

Fase 1: MVP (4-6 semanas)

  • API básica con cálculo de riesgo simple
  • Factores: bostezos, ojos cerrados, duración
  • Alertas básicas (Low/Medium/High/Critical)

Fase 2: ML Avanzado (8-10 semanas)

  • Modelo de machine learning entrenado
  • Análisis de patrones históricos
  • Calibración por conductor

Fase 3: Optimización (4-6 semanas)

  • Análisis predictivo avanzado
  • Integración con factores externos
  • Dashboard de analítica

8. Consideraciones de Deployment

Escalabilidad

  • Contenedores Docker
  • Auto-scaling basado en carga
  • Base de datos distribuida para grandes volúmenes

Seguridad

  • Autenticación JWT
  • Encriptación de datos sensibles
  • Logs de auditoría

Monitoreo

  • Métricas de performance del modelo
  • Alertas de sistema
  • Dashboard de operaciones

9. Costos Estimados (AWS)

Infraestructura Básica

  • EC2 instances: $200-400/mes
  • RDS PostgreSQL: $150-300/mes
  • Redis Cache: $50-100/mes
  • Load Balancer: $20/mes
  • Total estimado: $420-820/mes

Para 1000+ vehículos simultáneos

  • Infraestructura escalada: $1,500-3,000/mes
  • ML model serving: $300-600/mes
  • Data storage: $200-400/mes
Content is user-generated and unverified.
    Sistema de Análisis de Riesgo DMS - Arquitectura Completa | Claude