Índice de Vulnerabilidad Inmune · Guía de uso ← Volver a la app

¿Qué es el IVI?

El Índice de Vulnerabilidad Inmune es un número diario que resume cuánta carga está soportando el sistema inmune en ese momento. No es un diagnóstico ni una orden — es una señal de apoyo para tomar mejores decisiones sobre entrenamiento, alimentación y actividad.

El IVI cruza datos de distintas fuentes:

FuenteQué aporta
Garmin (CSV)SpO₂ nocturna, VFC, FC reposo, respiración, temperatura piel, puntuación sueño, duración
Intervals.icuVFC nocturna real (la única fuente de VFC — el CSV de Garmin trae media semanal, no se usa), CTL/ATL/TSB, actividades ejecutadas, DFA α1 (Garmin Edge 1030+)
Eventos clínicos y de contextoVacunas, procedimientos, diarrea, bloque enfermedad, esfuerzo no deportivo, dolor lumbar...
Analítica mensualNeutrófilos, linfocitos, hemoglobina, inmunoglobulinas...
Medicación activafármacos activos y su aporte diario
Fuerza y composición corporalResumen de sesiones de fuerza (catálogo de ejercicios) y báscula — no puntúan el IVI, aportan contexto
Principio fundamental: el IVI es una señal, no una orden. Si el semáforo dice verde pero tienes malas sensaciones, descansas. Si dice amarillo pero te sientes bien y llevas días estable, entrenas con sentido común. Tú tienes la última palabra.

IVI vs IVI entreno (IVI_p)

La app calcula dos números distintos, y es importante no confundirlos:

NúmeroIncluyePara qué se usa
IVI totalFisiología + eventos + analítica + medicación crónica + carga de entrenamiento (TSB)Visión clínica global del día — el que enseñarías a tu equipo médico
IVI entreno (IVI_p)Solo fisiología + eventos + carga de entrenamiento — sin analítica ni medicación crónicaEl único que manda para decidir si entrenar hoy

La razón de separarlos: las condiciones estructurales o la medicación habitual son un fondo fijo que no cambia día a día. Si entraran en el número que decide el entreno, bloquearían sesiones en días con buenas sensaciones sin motivo real. Por eso toda la parte de entrenamiento de la app (planificador nutricional, recomendación de hoy, evaluación de sesión, .zwo adaptado) usa siempre IVI_p, nunca el IVI total.

🟢 IVI_p < 15

Entrenamiento libre. Plan nutricional estándar.

⚠️ IVI_p 15–25

Intensidad capada al 65% FTP como techo obligatorio.

⛔ IVI_p > 25

Entrenamiento no recomendado. Alternativas: paseo suave, movilidad, descanso activo.

El IVI total sigue teniendo su propio semáforo de 4 niveles (ver sección siguiente) y es el que ves en el gráfico principal y en el panel de detalle del día.

El semáforo IVI (total)

El valor IVI total se traduce en cuatro niveles de riesgo:

🟢 Bajo · 0–20

Señales fisiológicas normales. Sin eventos activos relevantes. Entrena con normalidad.

🟡 Moderado · 21–35

Una o varias señales elevadas. Reduce intensidad ~20–30%. Evita Z4 o intervalos. Z2 y fuerza moderada son aceptables.

🔴 Alto · 36–50

Varias señales simultáneas o evento de peso alto activo. Solo actividad muy suave: paseo, movilidad. Vigila síntomas.

⛔ Crítico · >50

Señal de alarma real. Reposo absoluto. Contactar equipo médico si persiste más de 2 días.

Gráficos

La columna de salud tiene cuatro gráficos y la de entrenamiento dos más. Haz clic en cualquier punto para ver el detalle de ese día en el panel lateral; doble clic sobre un gráfico abre el modo foco.

IVI Timeline

Muestra la evolución diaria del IVI total. Cada punto tiene el color del nivel (verde/amarillo/rojo/morado). Las líneas verticales finas marcan la fecha de los eventos clínicos registrados. Las bandas de color de fondo indican las zonas de riesgo.

SpO₂ nocturna y VFC

La SpO₂ (azul) tiene una línea de umbral roja en el 94% — por debajo de ese valor el IVI empieza a penalizar de forma significativa. La VFC (lila) viene siempre de Intervals.icu (media nocturna real), nunca del CSV de Garmin.

Puntuación sueño y FC reposo

El score de sueño (verde) y la frecuencia cardíaca en reposo (naranja). Un score inferior a 40 genera penalización fuerte. Una FC en reposo por encima de 65 bpm es señal de recuperación incompleta.

ATL / CTL / TSB

Carga de entrenamiento desde Intervals.icu. ATL = fatiga acumulada reciente. CTL = forma a largo plazo. TSB = forma del día (CTL - ATL). Un TSB muy negativo (por debajo de -15) suma puntos al IVI.

Eficiencia aeróbica y Decoupling — tendencia 7d vs 28d

Compara la media móvil de 7 días con la de 28 días de dos métricas por sesión: eficiencia (W/lpm) y decoupling (deriva cardíaca %). Si ambas medias divergen de forma sostenida — eficiencia cayendo o decoupling subiendo varios días seguidos — la app lo señala como alarma precoz: este patrón puede preceder a una infección antes de que aparezcan síntomas claros. Debajo del gráfico hay una leyenda fija con los umbrales exactos (verde/amarillo/rojo) para EF y Decoupling — los umbrales son un suelo (p. ej. "hasta 3% peor" incluye estar igual o mejor), no una banda simétrica. También aclara que el decoupling de una sesión suelta (panel del día) solo es fiable en esfuerzo estable — en tests tipo ramp/progresivos el número se distorsiona.

Filtro de rango

Encima del gráfico IVI hay botones para filtrar el período visible:

  • 30d — último mes
  • 90d — últimos tres meses
  • Todo — todos los datos disponibles
  • Desde / Hasta — rango personalizado con fechas

Todos los gráficos se sincronizan con el mismo rango seleccionado.

Detalle del día

Al hacer clic en cualquier punto de un gráfico, el panel lateral muestra el análisis completo de ese día. El botón ⤢ Ampliar (o doble clic en cualquier gráfico) abre el mismo contenido en una ventana grande — el modo foco — más cómoda para revisar en detalle.

Panel de señales

Seis celdas con semáforo individual para SpO₂, VFC, FC reposo, respiración, temperatura piel y puntuación de sueño. El color de cada celda indica si esa señal está dentro de lo normal (verde), elevada (amarillo) o en zona de alerta (rojo/morado).

Breakdown IVI

Barras que muestran cuántos puntos aporta cada componente al IVI total: fisiología (desglosada por señal), eventos clínicos, analítica, medicación y carga de entrenamiento. Útil para entender por qué el IVI está en ese nivel.

VFC

El valor mostrado es siempre el dato nocturno real de Intervals.icu. Su color (verde/amarillo/rojo) refleja internamente la caída porcentual respecto al baseline fijo de enero-febrero 2026 — no se muestra el porcentaje como texto, pero es lo que determina si penaliza al IVI.

Si el valor de SpO₂ de una noche cae de forma sospechosa respecto a tus últimos días (umbral configurable en ⚙ Sensibilidad SpO₂), aparece un aviso amarillo sugiriendo revisar si el reloj estaba bien ajustado. Puedes corregir el valor manualmente con el botón ✎ Corregir con pulsioxímetro — introduces una medición puntual y el IVI usará ese valor en vez del de Garmin para ese día.

Noche no fiable / artefacto del sensor

Si una noche completa (reloj mal puesto) o solo alguna señal concreta parece un artefacto, puedes marcarla como no fiable desde el propio panel de detalle — esas señales dejan de puntuar en el IVI ese día, sin perder el resto de datos de la noche. La app también detecta automáticamente desviaciones extremas de respiración/VFC/FC frente a tu media reciente y sugiere marcarlas.

Analítica del día

Si hay una analítica registrada anterior o igual a esa fecha, se muestra en el detalle con los valores y sus colores de alerta. La analítica vigente es siempre la más reciente disponible.

Cocina hoy

Al final del detalle aparece una recomendación de alimentación adaptada al nivel IVI de ese día. Ver sección Cocina hoy para más detalle.

Panel de estado

El botón ⓘ Estado en el header abre un panel de diagnóstico útil si algo no cuadra:

  • Versión de la app y estado de conexión con la nube
  • Última sincronización con la nube y con Intervals.icu
  • Conteo local vs. nube de eventos, medicación, analíticas, sueño y peso
  • Estado de Intervals: ✓ con hora de la última descarga correcta, o ✗ con el error y la hora de los últimos datos buenos
  • Cola de cambios pendientes de subir (con opción de limpiarla)
  • Cambios que se descartaron tras varios intentos fallidos

Cuando hay una versión nueva de la app publicada, aparece un aviso en la parte inferior de la pantalla con un botón para recargar.

Tabs (columna de salud)

Eventos

Lista de eventos clínicos y de contexto registrados. Ver sección Eventos clínicos y de contexto para el detalle de tipos disponibles.

El botón ✎ permite editar un evento ya registrado. El botón × lo elimina.

Alterna entre Recientes (últimos 14 días) y Todos.

Medicación

Fármacos activos con su contribución diaria al IVI. El botón ■ marca un fármaco como finalizado sin eliminarlo del historial. Alterna entre Activas y Todas.

Analítica

Registro de analíticas mensuales. Cada analítica es válida desde su fecha hasta la siguiente registrada. Los campos disponibles son: neutrófilos, linfocitos, hemoglobina, plaquetas, PCR, creatinina, IgG, IgA, IgM, calcio, albúmina, LDH, ferritina, cadenas ligeras kappa y lambda, y eGFR.

Calcio, albúmina, LDH, ferritina, cadenas ligeras y eGFR son de registro y tendencia — de momento no puntúan en el cálculo del IVI. Se guardan y se ven en el detalle del día y en el CSV, a la espera de definir con criterio médico si y cómo deben afectar al índice.

Peso

Composición corporal (peso, IMC, grasa, masa muscular esquelética, masa ósea, agua corporal) importada desde el CSV de la báscula. No puntúa el IVI — es una covariable útil para tu propio seguimiento. Haz clic en un punto del gráfico para ver o editar el detalle de ese día.

Stats

Resumen estadístico del período: IVI medio, IVI máximo y su fecha, SpO₂ mínima y su fecha, distribución de días por nivel de riesgo, y valores del baseline.

Importar CSV Garmin

Importante: exportar un solo día desde Garmin Connect genera un archivo vacío. Hay que exportar mínimo 7 días para obtener datos válidos.

Cómo exportar desde Garmin Connect

Abre Garmin Connect en el navegador (no en la app móvil).

Ve a Salud → Sueño.

Selecciona el rango de fechas (mínimo 7 días, recomendado 28 días).

Haz clic en el botón de exportar CSV.

En IVI Tool, pulsa el botón ⬆ CSV en el header y selecciona el archivo descargado.

La app acepta múltiples archivos a la vez. Si una fecha ya existe en los datos, el CSV importado la sobreescribe (salvo la corrección manual de SpO₂, que se conserva). Los datos se sincronizan automáticamente con la nube si hay conexión. El botón ↶ Deshacer revierte la última importación.

VFC: solo Intervals

El CSV de Garmin incluye la media semanal de VFC, un dato demasiado poco sensible. La app la ignora por completo y usa siempre el VFC nocturno real de Intervals.icu. Para forzar la sincronización con Intervals, usa el botón ↺ junto al gráfico ATL/CTL/TSB.

Importar CSV báscula

El botón ⬆ CSV Peso en el header importa el export de composición corporal de tu báscula (peso, IMC, grasa, masa muscular esquelética, masa ósea, agua corporal). Solo se importan fechas desde el 1 de enero de 2026 en adelante.

Estos datos no afectan al cálculo del IVI — se guardan aparte y se muestran en la pestaña Peso.

Exportar CSV

El botón ⬇ CSV genera un archivo con todos los datos del rango seleccionado, pensado para análisis externo riguroso (hoja de cálculo, Python, R...). Incluye, entre otras columnas:

  • IVI total y IVI entreno (IVI_p) por separado, con su zona de semáforo
  • Desglose fisiológico por señal (SpO₂, VFC, sueño, FC, respiración, temperatura)
  • Eventos activos ese día, analítica, medicación activa, carga de entrenamiento
  • Todas las actividades del día (no solo la primera si hubo varias), nivel de sesión, cumplimiento
  • Recuperación calculada del día siguiente (ΔVFC, ΔFC de reposo)
  • Resultado real de la sesión y chequeo clínico pre-sesión
  • Resumen de fuerza (series, volumen, fatiga estimada, impacto en ciclismo)
  • Composición corporal del día
  • Analítica ampliada: calcio, albúmina, LDH, ferritina, cadenas ligeras kappa/lambda, eGFR
Deliberadamente no incluye ninguna recomendación o veredicto del motor de decisión: esa lógica compara siempre contra "hoy real", así que meterla en un histórico contaminaría cada fila pasada con información del futuro. El CSV exporta solo datos ya cerrados.

CSV detalle sesión

Junto al botón anterior, ⬇ CSV detalle sesión genera un archivo distinto: una fila por actividad (no por día), pensado para el análisis semanal de entrenamiento. Incluye nombre, nivel estimado, TSS, duración, FC media/máx, decoupling, eficiencia, NP, IF/intensidad, cumplimiento y, si el dispositivo es un Garmin Edge 1030+, DFA α1 medio y los umbrales VT1/VT2 (y VT2' experimental, marcado como no validado en la cabecera). Si algún día del rango no tiene el DFA calculado todavía, la app lo pide a Intervals.icu en el momento de exportar — puede tardar unos segundos la primera vez; las siguientes exportaciones reutilizan lo ya calculado.

Planificador nutricional

Disponible en la columna de entrenamiento → 🍽️ Alimentación entrenamiento. Calcula la estrategia de hidratación y alimentación para una sesión concreta, adaptada al IVI_p del día.

Chequeo clínico pre-sesión

Si hay un evento clínico activo ese día (diarrea, bloque enfermedad, entreno en enfermedad), el planificador pide primero un chequeo subjetivo: Bien / Regular / Mal. Un "Mal" fuerza la sesión a no recomendada aunque el número de IVI_p sea bajo; un "Regular" fuerza como mínimo el capado al 65%. Un "Bien" deja el cálculo numérico tal cual.

Capado y override

En zona amarilla, los bloques se capan automáticamente al 65% FTP y se recalculan kJ, hidratación y gummies. Si te encuentras bien y quieres mantener la sesión íntegra, el botón ✅ Me encuentro bien → mantener sesión desactiva el capado para ese día (queda registrado como evento auditable, para poder correlacionarlo después con tu recuperación).

Descargar ZWO

Dos botones, con propósitos distintos — no los confundas:

  • ⬇ ZWO reducido (según IVI) — solo aparece si el planificador redujo bloques por IVI_p elevado. Recorta/capa la potencia del entreno real.
  • ⬇ ZWO con avisos (comida/hidratación) — siempre disponible. Genera un .zwo con la misma estructura de potencia original (sin recortar nada) pero con un <textevent> por cada trago/gummy de la timeline de nutrición, para que aparezca como popup en pantalla al minuto exacto.
Sin confirmar todavía: el flujo real es Intervals → sync automático → MyWhoosh. Se ha comprobado que el JSON interno que usa Intervals para representar un entreno no tiene ningún campo de mensaje por paso — es posible que los avisos del .zwo se pierdan al pasar por esa conversión antes de llegar a MyWhoosh, aunque MyWhoosh sí soporta mensajes en su propio formato nativo. Pendiente de probar creando una nota de texto directamente en el editor nativo de Intervals (no subiendo el .zwo) para ver si esa vía sí sobrevive.

Qué calcula el planificador

DatoCómo se calcula
kJ estimadosSimulación segundo a segundo con potencia × duración de cada bloque
HidrataciónBase 600ml/h + ajuste por temperatura de la habitación + ajuste por peso
GummiesSolo si hay bloques ≥88% FTP y kJ ≥380. Se programa su toma 5 minutos antes del bloque intenso
TimelineRecordatorios de hidratación cada 20 minutos con cambio de bidón a mitad de sesión

Registro de sesión y recuperación

Bajo el entreno del día (panel lateral) hay un bloque Registro de sesión. Tras entrenar, marca el resultado real: Completo / Reducido / Cancelado / Sustituido. Si cancelas, se pide el motivo (fatiga, dolor, trabajo, falta de tiempo, otro). Si hubo más de una sesión el mismo día, se registra el resultado de cada una por separado.

Recuperación calculada

La app compara automáticamente tu VFC y FC de reposo del día siguiente a la sesión frente al día de la sesión, y clasifica la recuperación como Normal, Estable, Lenta o Muy lenta. "Estable" indica que apenas hay cambio respecto al día de la sesión (VFC y FC de reposo prácticamente iguales) — antes esos casos se etiquetaban igual que "Lenta", lo cual era confuso porque un valor sin cambios no es una recuperación lenta. Es un cálculo puramente fisiológico (solo VFC/FC), sin mezclar eventos clínicos ni carga de entrenamiento — si ese día siguiente hay un evento clínico activo o medicación relevante, se muestra como aviso de contexto aparte, sin alterar el número.

Recomendación y evaluación de sesión

El bloque 🧭 Recomendación de hoy cambia de comportamiento según si tienes una sesión planificada en Intervals para hoy:

Sin sesión planificada

La app busca, entre tus días pasados, los más parecidos al de hoy por estado fisiológico (IVI_p, caída de VFC, sueño, TSB, eventos activos...) y comprueba cuántos de ellos terminaron bien al día siguiente. Con eso estima un beneficio esperado (ALTO/MEDIO/BAJO) y propone una sesión libre de duración e intensidad ajustadas.

Con sesión planificada

La app no propone otra cosa — evalúa la sesión concreta que ya tienes planificada, comparándola contra tu histórico de sesiones del mismo tipo (mismo nivel: Z1/Z2/Z2S/Sweetspot/Umbral/VO2, o niveles cercanos si no hay suficientes casos exactos). El resultado incluye:

  • Beneficio esperado — ALTO / MEDIO / BAJO / MUY_BAJO, según cuántos casos similares mejoraron al día siguiente
  • Veredicto — mantener, reducir volumen, reducir intensidad, reducir ambos, sustituir por un nivel más suave, o cancelar
  • Descarga .zwo adaptado — cuando aplica, genera un archivo que ejecuta exactamente ese veredicto (recorte de duración y/o techo de potencia, o un entreno sustituto sintético)
El semáforo de IVI_p manda siempre por encima del histórico: en zona roja se cancela sin consultar casos pasados; en amarilla el capado al 65% FTP es inquebrantable, el histórico solo decide si además hace falta recortar volumen.

Si ya hay una actividad registrada hoy en Intervals, este bloque no evalúa nada nuevo — remite al bloque Registro de sesión. De momento el veredicto es solo informativo, sin botones de "registrar decisión".

Fuerza

El botón 🏋️ Registrar fuerza hoy anota tu rutina estándar en el día actual. Si sigues una rutina distinta, puedes 📂 Importar JSON fuerza con el catálogo de ejercicios de esa sesión (nombre, grupo muscular, repeticiones, peso, tiempo) — los ejercicios nuevos se dan de alta automáticamente en tu catálogo local.

Tras registrar una sesión, aparece un resumen automático en el panel del día:

  • Duración, número de ejercicios y series, volumen externo total (kg)
  • Distribución muscular trabajada (pierna, core, espalda, pecho, hombro, brazos)
  • Patrones de movimiento (squat, hip hinge, push/pull...)
  • Fatiga estimada e impacto esperado sobre el ciclismo (Mínimo → Muy alto)
  • Recuperación estimada recomendada antes de la siguiente sesión intensa

Puedes editar cualquier sesión ya registrada (añadir/quitar ejercicios o series, cambiar peso/repeticiones) con el botón ✎ Editar.

Si una sesión de fuerza reciente (ayer o anteayer) tuvo carga alta sobre piernas, el motor de recomendación lo tiene en cuenta y avisa de no añadir fuerza de piernas ese mismo día.

Cocina hoy

Al seleccionar un día en el gráfico, al final del panel lateral aparece una recomendación alimentaria basada en el nivel IVI de ese día.

🟢 IVI ≤ 20 — Sin restricciones. Menú normal. Sigue las reglas habituales de higiene alimentaria.
🟡 IVI 21–35 — Precaución leve. Evitar morcilla/chorizo en cena, hamburguesa de supermercado, marisco crudo. Legumbres, pechuga, arroz, pescado blanco y yogur son seguros.
🔴 IVI 36–50 — Restricción moderada. Sin embutidos en ningún momento, sin paella con marisco, sin tomate crudo si hay diarrea activa. Purés, plancha y recalentados.
⛔ IVI >50 — Protocolo estricto. Nada crudo. Solo alimentos muy cocinados. Contactar equipo médico si el IVI persiste más de 2 días.

Eventos clínicos y de contexto

Los eventos son la forma de decirle al IVI "hoy (o desde hoy) está pasando esto". Cada uno tiene un peso en puntos y un período de decaimiento en días — pasado ese período, deja de afectar al IVI. Se registran con el botón + Evento.

Tipos clínicos

Vacuna, aspirado de médula ósea, diarrea (4 variantes según gravedad: >6 episodios, 3-6, 1-2 leve, o crónica diaria), bloque de enfermedad, entrenamiento en enfermedad, entreno cortado/modificado (con % de cumplimiento manual), cena tardía, visita médica (0 puntos, nota libre) y personalizado (puntos y decaimiento libres).

Período de trabajo activo

Evento sostenido pensado para marcar etapas laborales sin tener que abrir un evento cada día. Se abre una vez, al reincorporarte, y queda activo todos los días (festivos sueltos entresemana no lo interrumpen) hasta que lo cierras explícitamente con el botón ■ en la lista de eventos, indicando el último día trabajado. 0 puntos — es solo contexto visual para comparar analítica/IVI antes y después de esa etapa, no afecta al cálculo.

En los eventos de diarrea puedes anotar además consistencia (líquida, puré, blanda-rota) y sospecha de causa (alimentario, cambio de medicación, dolor/estrés, entreno, desconocido) — son campos de contexto, no puntúan aparte, pero quedan en el historial y en el CSV para buscar patrones.

Esfuerzo no deportivo

Limpieza intensa, jardinería, bricolaje, viaje largo, caminata prolongada u otro esfuerzo — cargas físicas reales que no son "entrenamiento" pero sí exigen al cuerpo. Admiten duración e intensidad, y sus puntos/decaimiento son ajustables (botón 💾 Guardar como valor por defecto para no reconfigurarlos cada vez).

Contexto adicional (no puntúa)

Dolor lumbar/sacro, lengua sucia, hinchazón/gases — se registran a 0 puntos por defecto. Sirven para buscar correlaciones con el tiempo, sin asumir todavía que deban afectar al IVI.

Tip — viajes o cambios de rutina (p. ej. vacaciones): abre un evento Personalizado a 0 puntos el día de inicio, con una nota tipo "Vacaciones Roma 3–10 ago". No afecta al IVI, pero queda marcado en el historial y en el CSV para poder comparar después cómo te sentó ese periodo. Durante el viaje, sigue abriendo un evento clínico normal por cada episodio real que ocurra (diarrea, etc.) — no los agrupes dentro del evento de contexto, o perderías la granularidad del decaimiento y del análisis posterior.

Uso offline y actualización

Botón 💾 HTML

El botón 💾 HTML en el header genera una copia del archivo HTML con todos los datos de sueño embebidos. Esto permite usar la app en cualquier dispositivo sin conexión a internet — útil en viajes o en consulta médica.

Sincronización con la nube

Los datos (eventos, medicación, analíticas, sueño manual, peso) se guardan primero en el almacenamiento local del navegador y se sincronizan con la nube en segundo plano. El indicador en el header muestra el estado:

  • ● cloud — sincronizado con la nube
  • ● local — guardado en local, pendiente de sync
  • ● offline — sin conexión, datos guardados localmente

Si hay cambios pendientes sin sincronizar, aparece un badge naranja con el número — puedes abrir el panel de estado para ver el detalle o limpiar la cola si hay operaciones bloqueadas.

PWA (app instalable)

La herramienta se puede instalar como app en Chrome/Edge (botón de instalación en la barra de direcciones). Una vez instalada, carga más rápido y funciona sin abrir el navegador. Para actualizar a una versión nueva, desinstala la PWA y vuelve a instalarla desde el enlace de Netlify.

Netlify: la versión activa está en tu sitio de Netlify. Para subir una nueva versión, arrastra el archivo index.html al panel de Netlify.