BiodataDiaria (declarativa)Peso, FC en reposo, HRV, VO₂ máx (último valor medido, procedente de HealthKit y Health Connect), agua ingerida, horas de sueño, tensión arterial. Entrada manual diaria desde la web.
Apple Health (ZIP — iOS)Importación del export de iPhone: Records, Workouts, ActivitySummary, SleepAnalysis. Subida en bloques de hasta 1 GB, extracción del export.xml, generación de XML reducido semanal con filtro temporal inteligente, previsualización por días y persistencia selectiva en BiodataDiaria. Mismo cálculo de HRV nocturno y FC en reposo sobre la ventana de sueño real que el canal JSON. Accesible desde Adquisición de datos → Apple / Android (ZIP).
Apple Health (JSON — manual y automático)Canal alternativo basado en la app "Health Auto Export": subida manual de JSON o automatización REST que envía datos en segundo plano sin abrir la app (sujeto a las limitaciones de iOS sobre ejecución en background). Deduplica entre Apple Watch e iPhone cuando ambos registran la misma actividad, y marca cada registro con fecha/hora y origen de la última actualización, visible en Biodata y en el panel de adherencia del inicio. El HRV nocturno y la FC en reposo se calculan como filtro/mínimo de las muestras crudas dentro de la ventana de sueño real, no como el agregado que reporta Apple.
Android / Google Health Connect (ZIP — obsoleto)Importación del Takeout de Google Fit y/o Health Connect: compatible con Pixel Watch, Samsung Galaxy Watch, Fitbit, Garmin y cualquier reloj integrado en Health Connect. Misma mecánica de subida chunked que iOS. Parsea CSVs de Daily activity metrics (Google Fit) y carpetas por tipo de métrica (Health Connect). Previsualización con tabla de días nuevos vs. actualizaciones antes de confirmar el upsert en BiodataDiaria. Marcada como obsoleta en la interfaz desde julio de 2026: el HRV que produce es un valor ya agregado por fila del export, sin ventana de sueño.
Android / Google Health Connect (Webhook)Canal recomendado desde julio de 2026, equivalente al automático de iOS: la app de terceros "Health Connect Webhook" (proyecto "HC Webhook", código abierto) envía datos en segundo plano a un endpoint REST sin abrir la app, reutilizando el mismo token que la automatización de iOS. El sueño llega ya resuelto en sesiones con fases; el HRV se filtra por la ventana de sueño real de cada noche igual que en iOS, marcado con origen propio (HrvOrigen = HealthConnectRMSSD, RMSSD como Oura pero dispositivo/app distintos).
Oura Ring (API en vivo)Importación diaria de sueño, HRV nocturno (RMSSD), FC y SpO2. Cada registro de HRV y FC media queda etiquetado con su origen (HrvOrigen, FcMediaOrigen) porque HealthKit y Oura usan algoritmos y ventanas distintas. La serie intradía de FC y el HRV nocturno también pueden consultarse en vivo desde la API en Evolución temporal.
Ingesta alimentaria (IA u OpenFoodFacts)El usuario describe en lenguaje natural lo que ha comido. Modo IA: el modelo estima macros y energía. Modo OFf+IA: para productos envasados de marca consulta la etiqueta real de OpenFoodFacts; para genéricos y platos caseros usa IA como fallback. Las bebidas alcohólicas siempre van a IA (cálculo determinista por fórmula).
Biblioteca de alimentos del usuarioAntes de llamar a cualquier motor, cada alimento se busca (por nombre normalizado) en la biblioteca personal del usuario. Si ya está guardado, se reutiliza su valor por 100g/ml escalado a los gramos del día — sin volatilidad ni llamada a la IA. Los alimentos se dan de alta desde un botón junto a cada resultado ya calculado, se pueden fijar (exentos de sobrescritura), editar a mano o eliminar desde Mi biblioteca de alimentos.
Analíticas clínicasResultados de laboratorio introducidos manualmente o importados desde PDF mediante IA (AnthropicClient nativo, sin OCR previo): extracción automática de hasta 60 biomarcadores, conversión de unidades por laboratorio (×10³/µL, mg/dL↔mmol/L, pmol/L↔ng/dL…) y revisión con semáforo de rangos de referencia antes de persistir en AnaliticaClinica.
Perfil personalEdad, sexo, altura, nivel de actividad, objetivos declarados. Base del cálculo del metabolismo basal (BMR) y proteína objetivo.
Calibración energéticaSerie histórica de peso + gasto total medido. Regresión (Mínimos Cuadrados) sobre ΔPeso para obtener el factor de corrección preciso para la ingesta estimada por IA.
Objetivo NutricionalPantalla en cinco pestañas (Objetivo / Seguimiento / Alimentos / Estado Corporal / Evolución). El kcal objetivo diario sale del TDEE calibrado y el ritmo de cambio de peso objetivo (kg/semana) configurable en el perfil; el reparto en macros aplica la proporción real P/G/H que el usuario ya come (última semana) a ese kcal objetivo. La referencia de proteína es ESPEN, la misma que en el resto de la app. Un panel de progreso lee en vivo los slots de ingesta de hoy (aunque aún no estén "Aplicados") y lo compara con el objetivo; otro contrasta la media de los últimos 5 días cerrados, separando siempre el alcohol (no es un macronutriente y puede enmascarar un déficit real de comida), y avisa si la proteína real queda por debajo de la referencia ESPEN. Para completar la dieta, sugiere alimentos reales de la biblioteca personal del usuario para los TRES macros con hueco (no solo proteína), siempre en una ración de referencia fija de 100g — nunca la cantidad exacta que cerraría el hueco con un único alimento — más una nota de compensación en hidratos para días con alcohol. Estado Corporal (IBodyStatusService) clasifica la adiposidad con la grasa corporal por impedancia más reciente frente a una tabla de referencia por edad y sexo (con el IMC estándar OMS como alternativa si falta la medición o el sexo no tiene banda propia), y la combina con el nº de tres ejes de contexto alterados — cardiovascular (tensión arterial media de 7 días y capacidad aeróbica —último VO₂ máx estimado por el reloj— frente a la tabla por edad y sexo de la app Salud, que se muestra completa —mujeres y hombres— en el detalle del cálculo), metabólico-analítico (última analítica clínica, descartada si tiene más de 6 meses) y recuperación (HRV medio de 7 días frente a la línea base personal del usuario, RecoveryBaseline) — para dar una categoría final propia de Fenotipo, con metodología completa siempre visible en un modal. Cuando la adiposidad es Obesidad se añade el grado I/II/III de la OMS (IMC 30-34,9/35-39,9/≥40), calculado siempre sobre el IMC aunque la categoría venga de la grasa medida. En la misma pestaña, Capacidad Física (ICapacidadFisicaService) es una segunda categorización independiente: compara los minutos de gimnasio/exterior de los últimos 14 días contra la guía OMS 2020 (fuerza ≥2 días/semana de ≥20min, aeróbico ≥150 min/semana) para dar "Activo"/"Parcialmente activo"/"Sedentario", y añade tres ejes de contexto —energía basal (reflejo de NEAT), minutos de ejercicio totales y capacidad cardiorrespiratoria (último VO₂ máx, estimado por el reloj, con su nivel frente a la población de la misma edad y sexo como información añadida)— comparados con la propia línea base de 90 días del usuario, resaltando cuando la tendencia personal contradice la etiqueta OMS (p. ej. "Sedentario según la guía OMS, aunque por encima de tu propia media reciente"). Evolución reutiliza el mismo cálculo día por día (IBodyStatusService.EvaluarEvolucionAsync, con todos los datos del rango cargados una sola vez para no repetir consultas por día) en un rango Desde/Hasta elegido por el usuario (3 meses por defecto), y agrupa los días consecutivos con la misma categoría y los mismos ejes alterados en una línea de tiempo de segmentos coloreados, con el detalle de fechas y de qué eje concreto (cardiovascular/metabólico/recuperación) estuvo alterado en cada tramo. Debajo, una segunda línea de tiempo independiente hace lo mismo para Capacidad Física.
Automatización de IngestaSiembra sintética de una semana de registros de ingesta generados a partir del historial del usuario (requiere ≥ 30 días previos). Calcula μ y σ por macro y día de semana; muestrea con distribución normal y variación aleatoria controlada (σ efectiva ≤ 25 % de μ). Usar solo en ausencia de datos reales — introduce inexactitud estadística; es mejor que no tener datos, pero nunca sustituye a la declaración real.
Asistente IA conversacionalChat contextual accesible desde cualquier página (botón flotante naranja). Recibe los últimos 30 días de datos fisiológicos del usuario (basal, activa, ingesta, balance, sueño, FC, HRV…) y su perfil personal como contexto. Admite preguntas sobre la app y sobre los propios datos. Compatible con Claude API y Ollama. Historial de 10 turnos en cliente.
Configuración del sistemaProveedor IA activo (Ollama Cloud / Claude API), modelo LLM, timeouts, rutas de importación y parámetros de energía.
Entrenamiento de fuerza (ejecución guiada)Sesión guiada en tiempo real (EntrenamientoController/Entrenar) con cronómetro de series/descanso, figura animada SVG por ejercicio (posturas inicio/fin alternadas cada 700ms) y registro de lo realmente ejecutado — series, repeticiones, esfuerzo percibido, molestia — en EntrenamientoEjecucion, independiente de lo propuesto para esa sesión.
Rutina fija de cuerpo completoOpción independiente (RutinaFijaController), sin persistencia propia: 7 ejercicios fijos + 5 "rodantes" elegidos al azar en cada visita (garantizando al menos uno de cada bloque corporal) hasta completar 12, más calentamiento y vuelta a la calma siempre iguales. El reproductor avanza a clic del usuario, sin cuenta atrás — solo un cronómetro total informativo.