HealthDataHistoryRepository

Repositorio para gestionar el historial de datos de salud.

Optimizado para el análisis del estrés térmico con aprendizaje automático (ML) incluyendo actividad física. Este repositorio implementa un modelo sofisticado de monitoreo fisiológico basado en principios científicos del balance térmico humano y la fisiología del ejercicio.

Fundamentos Fisiológicos del Estrés Térmico

El repositorio se centra en detectar y analizar el estrés térmico, que ocurre cuando el cuerpo no puede disipar el calor generado durante la actividad física.

El Balance Térmico Humano

El cuerpo mantiene una temperatura central alrededor de 37°C a través de la ecuación de balance térmico:

S = M - W ± R ± C - E

Donde:

  • S = Almacenamiento de calor (lo que queremos minimizar)

  • M = Producción metabólica de calor (aumenta con la actividad)

  • W = Trabajo mecánico realizado

  • R = Intercambio radiativo

  • C = Intercambio convectivo

  • E = Pérdida evaporativa (sudoración)

Cálculo de la Tasa de Pasos

La tasa de pasos es un indicador indirecto de la intensidad del ejercicio:

  • < 40 pasos/min: Actividad sedentaria o muy ligera

  • 40-80 pasos/min: Caminata ligera (2-3 METs)

  • 80-120 pasos/min: Caminata moderada a enérgica (3-6 METs)

  • > 120 pasos/min: Correr o actividad vigorosa (> 6 METs)

Índice de Esfuerzo Fisiológico (PSI)

El PSI es una métrica validada científicamente que combina las respuestas cardiovasculares y térmicas:

PSI = 5 * (HRt - HR0)/(HR180 - HR0) + 5 * (Tct - Tc0)/(39.5 - Tc0)

Parameters

context

El contexto de la aplicación Android

See also

Constructors

Link copied to clipboard
private constructor(context: Context)

Types

Link copied to clipboard
data class HumidityStats(val average: Float = 0.0f, val min: Float = 0.0f, val max: Float = 0.0f, val current: Float = 0.0f, val count: Int = 0)

Properties

Link copied to clipboard
private val _currentHeatStressRisk: <Error class: unknown class>

Flow que emite el nivel actual de riesgo de estrés térmico.

Link copied to clipboard
private val _heatStressMetrics: <Error class: unknown class>

Flow que emite las métricas actuales de estrés térmico.

Link copied to clipboard
private val _recentDataPoints: <Error class: unknown class>

Flow que emite la lista de puntos de datos recientes.

Link copied to clipboard
private var accumulatedSteps: Long
Link copied to clipboard
private var accumulatedTimeMs: Long
Link copied to clipboard
private val context: Context
Link copied to clipboard
Link copied to clipboard

Cola thread-safe para almacenar puntos de datos de salud en memoria.

Link copied to clipboard
private var dateStr: String
Link copied to clipboard
private val fileLock: Any
Link copied to clipboard
private var fileName: String
Link copied to clipboard
Link copied to clipboard
private var lastCsvTimestamp: Long

Timestamp del último punto de datos guardado en el archivo CSV. Se utiliza para implementar el filtrado temporal según CSV_SAMPLE_INTERVAL_MS.

Link copied to clipboard
private var lastStepCount: Long

Último conteo de pasos registrado para cálculo de tasa de pasos.

Link copied to clipboard
private var lastStepTimestamp: Long

Timestamp del último registro de pasos para cálculo de tasa.

Link copied to clipboard
private lateinit var mlPredictor: HeatStressMLPredictor

Predictor ML para heat stress

Link copied to clipboard

Obtiene el número de puntos de datos actualmente almacenados en la cola en memoria, esperando ser persistidos en el almacenamiento permanente.

Link copied to clipboard
Link copied to clipboard
private var repositoryScope: <Error class: unknown class>

Scope de corrutinas para operaciones de E/S del repositorio.

Link copied to clipboard
private val useMLPrediction: Boolean = true

Flag para habilitar predicción ML

Functions

Link copied to clipboard
fun addDataPoint(heartRate: Int? = null, heartRateStatus: Int? = null, skinTemperature: Float? = null, ambientTemperature: Float? = null, stepCount: Long = 0, isOnBody: Boolean = true, batteryLevel: Int? = null, activityIntensity: Int = 0, accumulatedActivity: Float = 0.0f)

Agrega un nuevo punto de datos al historial de salud.

Link copied to clipboard
private fun analyzeHeatStress(currentPoint: HealthDataPoint)

Analiza el riesgo de estrés térmico para un punto de datos dado.

Link copied to clipboard

Calcula las métricas de estrés térmico basadas en datos históricos y actuales.

Link copied to clipboard
private fun calculateStepRate(currentStepCount: Long): Float?

Calcula la tasa de pasos por minuto basada en el conteo actual y anterior.

Link copied to clipboard

Calcula el tiempo total en que el Índice de Calor se encuentra en un nivel crítico.

Link copied to clipboard

Calcula el tiempo total en actividad física intensa.

Link copied to clipboard

Calcula el tiempo total en estado de alto riesgo.

Link copied to clipboard
private fun calculateTrend(values: List<Float>): Float

Calcula la tendencia (pendiente) de una serie de valores usando regresión lineal.

Link copied to clipboard
private fun calculateVariability(values: List<Float>): Float

Calcula la variabilidad (desviación estándar) de una serie de valores.

Link copied to clipboard
fun cleanup()

Limpia todos los recursos utilizados por el repositorio.

Link copied to clipboard

Crea la carpeta necesaria para almacenar los archivos de datos de salud.

Link copied to clipboard
private fun determineActivityLevel(stepRate: Float?, activityIntensity: Int): ActivityLevel

Determina el nivel de actividad física basado en la tasa de pasos y datos del acelerómetro.

Link copied to clipboard

Evalúa el nivel de riesgo de estrés térmico considerando métricas y carga de trabajo.

Link copied to clipboard
suspend fun exportForMLTraining(days: Int = 7): List<FloatArray>

Exporta datos históricos para entrenamiento de modelos de aprendizaje automático.

Link copied to clipboard
private fun exportFromMediaStore(days: Int, features: MutableList<FloatArray>)

Exporta datos desde MediaStore para Android 10+.

Link copied to clipboard

Filtra los puntos de datos según el intervalo de muestreo configurado para CSV. Solo incluye puntos de datos cuyo timestamp sea al menos CSV_SAMPLE_INTERVAL_MS milisegundos mayor que el último punto guardado.

Link copied to clipboard
private fun findExistingFileInDownloads(fileName: String): Uri?

Busca un archivo existente en la carpeta Downloads.

Link copied to clipboard
suspend fun flushAllData(): <Error class: unknown class>

Fuerza el guardado inmediato de todos los datos pendientes.

Link copied to clipboard

Obtiene la ruta de la carpeta donde se almacenan los datos.

Link copied to clipboard

Obtiene detalles de la última predicción de ML (Machine Learning).

Link copied to clipboard

Obtiene los puntos de datos válidos más recientes para análisis.

Link copied to clipboard

Notifica al usuario sobre alertas de estrés térmico de nivel alto o crítico.

Link copied to clipboard
private suspend fun persistBatch(): <Error class: unknown class>

Persiste un lote de datos al almacenamiento permanente.

Link copied to clipboard
private fun processCSVContent(lines: List<String>, features: MutableList<FloatArray>)

Procesa el contenido de archivos CSV para extraer vectores de características.

Link copied to clipboard

Restablece los valores utilizados para el cálculo de la tasa de pasos.

Link copied to clipboard
private fun saveToDownloads(dataPoints: List<HealthDataPoint>)

Guarda puntos de datos en archivos CSV en la carpeta Downloads.

Link copied to clipboard
private fun saveUsingMediaStore(fileName: String, dataPoints: List<HealthDataPoint>)

Guarda datos utilizando MediaStore para Android 10 y versiones posteriores.

Link copied to clipboard

Inicia el proceso de persistencia periódica automática.

Link copied to clipboard

Actualiza la lista de puntos de datos recientes para la interfaz de usuario.