Sobre la Aplicación

WHeat-Jobs | Fenotipo

1. Identificación de la obra y declaración de autoría

La presente memoria técnica describe la arquitectura, organización funcional y modelo operativo del sistema software WHeat-Jobs | Fenotipo, desarrollado como aplicación web para la integración, estructuración y explotación funcional de datos biométricos y clínicos.

Se hace constar que Ricardo Manuel Trigo Calonge es autor del diseño funcional del sistema, de su arquitectura de software, de la organización de módulos, de la lógica algorítmica y del código fuente principal incorporado a la presente obra.

2. Objeto y finalidad funcional del sistema

El sistema WHeat-Jobs | Fenotipo está orientado a la integración y análisis funcional de datos biométricos diarios, analíticas clínicas y variables personales, con el objetivo de generar indicadores compuestos y evaluar tendencias temporales.

El sistema no se limita al almacenamiento de datos, sino que incorpora mecanismos propios de formación de contexto fisiológico, cálculo técnico, persistencia histórica y evaluación funcional.

3. Arquitectura general del sistema

Patrón arquitectónico Modelo Vista Controlador (MVC)
Lenguaje principal C# · .NET 10 · ASP.NET Core MVC
Persistencia SQL Server mediante Entity Framework Core
Autenticación ASP.NET Core Identity
Motores de cálculo Motor hardcoded, motor declarativo y modo dual comparativo
Asistencia IA Ollama Cloud (por defecto) / Claude API (alternativo) · Modelo: gemma4:31b · Procesamiento asíncrono en background con cola de canal interno
Importación masiva Subida ZIP fragmentada por bloques, recomposición en servidor, extracción de export.xml y generación de reducidos semanales
Importación analítica clínica Lectura automática de informes de laboratorio en PDF mediante IA nativa (AnthropicClient / documento directo, sin OCR previo): extracción de hasta 60 biomarcadores, conversión automática de unidades según laboratorio, revisión con semáforo de rangos de referencia y persistencia en AnaliticaClinica

4. Modelo de datos

PerfilPersonal

Contiene los datos estructurales del usuario, incluyendo edad, altura, sexo y otros elementos necesarios para la interpretación funcional.

BiodataDiaria

Registro diario estructurado que contiene información biométrica agregada y normalizada procedente de fuentes internas o externas.

AnaliticaClinica

Almacena biomarcadores clínicos utilizados como soporte del cálculo funcional. Dispone de CRUD completo e importación automática desde PDF: la IA extrae hasta 60 parámetros (hematología, lípidos, enzimas, tiroides, orina…) con conversión automática de unidades y revisión asistida antes de persistir.

HealthScoreHistory

Persistencia técnica del resultado de cálculo con su contexto temporal.

EnergyDailyBalance

Persistencia diaria del balance energético: ingesta, gasto basal y activo ajustados, macronutrientes, alcohol, proteína/kg y clasificación oficial del estado energético.

HealthEvolutionSnapshot

Persistencia del resultado heurístico vigente: objetivo, alineación de pauta, decisión operativa y justificación funcional.

IntakePool / IntakePoolItem / IntakePoolFoodItem

Gestión semanal de ingesta alimentaria por usuario: 7 slots diarios con sus alimentos, gramos confirmados y JSON nutricional calculado por IA u OpenFoodFacts. Multiusuario — cada usuario dispone de su propio pool aislado.

UserEnergyCalibration

Factor de corrección de ingesta calórica derivado empíricamente por regresión MCO para cada usuario. Incluye factores de corrección de gasto basal y activo importado de HealthKit. El factor de ingesta se aplica solo sobre macros; el alcohol usa fórmula determinista y queda excluido de la corrección.

MetabolicAdaptationSnapshot

Snapshot de adaptación metabólica calculada sobre una ventana temporal configurable (14–90 días). Persiste el gap entre TDEE teórico por el modelo energético y TDEE real estimado por balance de masa, con nivel de adaptación (Sin / Leve / Moderada / Severa), delta de peso, R² de regresión de peso, cobertura proteica media y alertas de reactivación metabólica y proteína. Soporta serie histórica de 12 ventanas de 28 días.

5. Secuencia funcional del algoritmo

  1. Importación masiva — recepción del ZIP, recomposición por bloques, extracción del export.xml y persistencia interna.
  2. Importación de analítica clínica desde PDF — subida del informe de laboratorio; la IA extrae hasta 60 biomarcadores con conversión automática de unidades, el usuario revisa en pantalla con semáforo de rangos y confirma la persistencia en AnaliticaClinica.
  3. Reducción semanal y agregación diaria — generación de XML reducidos por semana y transformación a registros normalizados de BiodataDiaria.
  4. Cálculo energético diario — a partir de BiodataDiaria, generación y persistencia de EnergyDailyBalance con balance, macronutrientes y estado energético.
  5. Construcción de la Colección de Datos Funcionales — selección de analítica válida y ventana biométrica; formación del HealthDashDataBundle.
  6. Ejecución del motor activo — cálculo de Score SNC, Metabólico y Bioenergético mediante motor seleccionado.
  7. Persistencia del resultado — registro en HealthScoreHistory con contexto temporal y técnico completo.
  8. Evaluación heurística — contraste con objetivo, dirección, alineación de pauta y decisión operativa. Persistencia en HealthEvolutionSnapshot.

6. Integración de asistencia inteligente mediante modelos IA

El sistema incorpora módulos de asistencia funcional basados en modelos de lenguaje. El proveedor por defecto es Ollama Cloud, con Claude API como alternativa conmutable desde la consola de administración. El modelo activo se configura mediante OllamaCloud:Model (actualmente: gemma4:31b).

Los módulos IA activos son:

  • Análisis nutricional de ingesta — dos modos: IA (estimación de macros y energía por modelo de lenguaje) y modo híbrido OFf+IA (datos reales de etiqueta desde OpenFoodFacts para productos envasados de marca; IA como fallback para genéricos y platos caseros; bebidas alcohólicas siempre a IA por cálculo determinista).
  • Automatización de Ingesta — generación sintética de una semana de registros de ingesta a partir del historial del usuario (requiere ≥ 30 días previos). Calcula media (μ) y desviación típica (σ) por macro y día de semana; genera valores mediante muestreo normal con σ efectiva ≤ 25 % de μ. Se recomienda su uso solo como último recurso ante ausencia de datos reales, ya que introduce inexactitud estadística en los registros de ingesta. Mejor que no tener datos, pero nunca equivalente a la declaración real.
  • Asistente IA conversacional — chatbot contextual accesible desde cualquier página mediante botón flotante. Recibe los últimos 30 días de BiodataDiaria (energía basal, activa, ingesta, balance, macros, sueño, FC, HRV…) y el perfil personal como contexto. Compatible con Claude API y Ollama. Historial en cliente (10 turnos), sin tablas nuevas.
  • Resumen interpretativo de evolución de BiodataDiaria.
  • Análisis integrado de HealthDash — interpretación clínica del estado fisiológico global.
  • Interpretación de dinámica metabólica.
  • Extracción automática de analítica clínica desde PDF — el informe de laboratorio se procesa directamente por la IA como documento nativo (sin OCR previo), mapeando hasta 60 biomarcadores al modelo AnaliticaClinica con corrección automática de escalas (notación científica ×10ⁿ, PCR mg/dL→mg/L, Urea mmol/L→mg/dL, T4 pmol/L→ng/dL, Calcio/Fósforo mmol/L→mg/dL).
  • Revisión histórica parcial con resumen IA — informe longitudinal para un período seleccionado por el usuario, que integra perfil fenotípico, evolución de scores SNC/MET/BIOE, balance energético (ingesta/basal/NEAT/total/balance), macronutrientes medios y analítica clínica con verificación sistemática de rangos de referencia sobre ~55 parámetros (BuildParametros); genera un resumen interpretativo asíncrono de cinco párrafos estructurados mediante plantilla versionada en BD (HistoriaPacientePromptSeeder), con informe imprimible como PDF desde el navegador.
  • Evolución longitudinal de parámetros clínico-analíticos — módulo de análisis de series temporales de analíticas clínicas en el intervalo que el usuario seleccione (presets de 6 meses, 1, 2 y 5 años o rango libre). Muestra ocho gráficas por categoría fisiológica (lipídico, glucémico, renal, hepático, tiroides, inflamación, micronutrientes, hematología). Una matriz comparativa interactiva presenta todos los biomarcadores disponibles en una tabla única con las fechas como columnas y el delta (Δ) entre primera y última analítica con color semántico por parámetro. Un análisis IA asíncrono — generado mediante plantilla versionada ANALITICA_EVOLUCION — interpreta las tendencias sostenidas, identifica cambios clínicamente relevantes y agrupa los hallazgos por sistema, tomando siempre al propio paciente como referencia en el tiempo, sin baremos poblacionales externos.
  • Análisis de impacto etílico — modelo MCO que cuantifica el efecto del alcohol sobre el peso: coeficiente inmediato (β_alc), diferido D+1 (β_lag) e índice fisiológico HRV/sueño (β_sleep). Calcula el contrafactual de pérdida sin alcohol y detecta anomalías de eficiencia metabólica en series largas.
  • Generación de documentos RGPD y contratos — producción asistida por IA de consentimientos informados, políticas de privacidad y contratos profesional-paciente adaptados al perfil del profesional y del paciente.
  • Todas las llamadas a IA se procesan en segundo plano mediante AiBackgroundWorker y IBackgroundTaskQueue, desacoplando la solicitud del usuario de la espera bloqueante y mostrando estimación de tiempo dinámica en la interfaz.

    7. Subsistema de importación de Biodata desde wearables

    El sistema dispone de dos vías de importación masiva de BiodataDiaria desde dispositivos wearable, accesibles desde el menú Adquisición de datos → Apple / Android (ZIP) mediante un selector de plataforma iOS/Android:

    7.1 Apple HealthKit (iOS)

    Procesa la exportación estándar de la app Salud de iPhone (export.zip), transformando el export.xml en registros diarios normalizados.

    1. Recepción del export.zip en bloques (chunked upload).
    2. Recomposición y extracción del export.xml interno.
    3. Generación de XML reducido semanal con filtro temporal inteligente.
    4. Agregación diaria por tipo de registro (pasos, FC, HRV, sueño, peso…).
    5. Previsualización por semana y persistencia selectiva en BiodataDiaria.
    7.2 Android / Google Health Connect

    Procesa el ZIP de Google Takeout generado con Google Fit y/o Health Connect. Compatible con cualquier reloj integrado en Health Connect (Samsung Galaxy Watch, Pixel Watch, Fitbit, Garmin…).

    1. Recepción del ZIP de Takeout en bloques (misma mecánica chunked que iOS).
    2. Parseo en memoria de dos formatos: CSVs de Daily activity metrics (Google Fit, un fichero por día) y CSVs por tipo de métrica en carpetas Health Connect.
    3. Acumulación por fecha con upsert diferido: el primer valor encontrado por campo tiene prioridad; los formatos se complementan sin sobreescribirse.
    4. Previsualización con tabla de días (verde = nuevo, amarillo = actualiza existente) antes de confirmar.
    5. Confirmación: upsert real en BiodataDiaria. HRV mapeado como HrvSource.OuraRMSSD (RMSSD); FC media como FcMediaSource.HealthKitDiaria.
    6. Limpieza automática del ZIP temporal en servidor tras la importación.

    7.2 Motor estructural de agregación diaria

    El sistema incorpora un motor estructural capaz de procesar documentos XML complejos mediante lectura secuencial en streaming.

    Este motor permite procesar estructuras jerárquicas sin necesidad de cargar el documento completo en memoria, permitiendo el tratamiento eficiente de archivos de gran tamaño.

    Se soportan estructuras complejas como:

    • Record
    • Workout
    • WorkoutStatistics
    • ActivitySummary
    • Correlation

    El sistema incorpora mecanismos para identificar correctamente intervalos temporales que cruzan medianoche.

    8. Elementos de originalidad técnica

    1. Construcción de la Colección de Datos Funcionales (HealthDashDataBundle).
    2. Motores de cálculo intercambiables: hardcoded, declarativo y modo dual comparativo.
    3. Persistencia histórica completa con contexto temporal, analítica y motor utilizado.
    4. Importación masiva estructural mediante subida ZIP fragmentada por bloques.
    5. Motor de agregación diaria estructural con lectura XML en streaming.
    6. Modelo diario de balance energético y disponibilidad funcional (EnergyDailyBalance).
    7. Análisis longitudinal de tendencias sobre variables directas de BiodataDiaria.
    8. Arquitectura de procesamiento IA asíncrono con cola de canal, almacenamiento de resultado y estimación dinámica de tiempos.
    9. Sistema dual de proveedor IA (Ollama / Claude) con consola de administración y conmutación en tiempo de ejecución.
    10. Sistema declarativo de gestión de prompts IA: plantillas versionadas (IaPromptTemplate), bloques de contenido componibles (IaPromptBlock) y motor de construcción con interpolación de variables de contexto (IaPromptBuilderService), administrable sin modificación de código fuente.
    11. Subsistema de importación automática de analíticas clínicas desde PDF mediante IA nativa: envío del documento directamente como base64 a AnthropicClient (sin OCR previo), extracción de hasta 60 biomarcadores, conversión automática de unidades por laboratorio, revisión interactiva con semáforo de rangos de referencia y persistencia estructurada en AnaliticaClinica.
    12. Módulo de revisión histórica parcial: servicio propio (HistoriaPacienteService) que compila un informe longitudinal del período seleccionado integrando perfil, evolución de scores, balance energético, macros y analítica clínica con verificación de rangos de referencia sobre ~55 parámetros; emite un resumen IA asíncrono de cinco párrafos estructurados (estado funcional, balance energético, nutrición/sueño/composición, analítica clínica y recomendaciones) mediante plantilla versionada (HistoriaPacientePromptSeeder), con informe imprimible como PDF desde navegador.
    13. Módulo de evolución longitudinal de parámetros clínico-analíticos (AnaliticaEvolucionAiService): procesa la serie temporal completa de objetos AnaliticaClinica en el intervalo seleccionado; construye ocho gráficas Chart.js por sistema fisiológico y una matriz comparativa interactiva (biomarcadores × fechas) con delta Δ codificado por semántica clínica del parámetro; encola un análisis IA asíncrono (IBackgroundTaskQueue, tipo ANALITICA_EVOLUCION) que interpreta tendencias sostenidas agrupadas por sistema, tomando al propio paciente como referencia, sin baremos poblacionales. Plantilla de prompt versionada en BD y editable desde la consola de prompts sin redesplegar.
    14. Modo híbrido OFf+IA para estimación nutricional: consulta OpenFoodFacts para productos envasados de marca (datos de etiqueta real) con fallback automático a IA para alimentos no encontrados; bebidas alcohólicas siempre calculadas por IA mediante fórmula determinista.
    15. Modelo de impacto etílico (AlcoholCalibrationService): regresión MCO con F fijo que estima los coeficientes β_alc (retención inmediata), β_lag (efecto diferido D+1) y β_sleep (índice fisiológico HRV/sueño); calcula contrafactual de pérdida sin alcohol y detecta anomalías de eficiencia metabólica.
    16. Factor de corrección de ingesta aplicado exclusivamente sobre macros (HC×4 + Prot×4 + Grasa×9); el alcohol queda excluido de la corrección por usar fórmula determinista (ml × graduación × 0,789 × 7).
    17. Sistema de alerta automática de recalibración: en el primer ApplyToBiodata del día y mediante botón manual, comprueba si el balance acumulado implica variación de peso superior al umbral individual (0,5 % del peso actual, rango 200-800 g) y han transcurrido ≥ 28 días desde la última calibración.
    18. Arquitectura multiusuario con tres perfiles: profesional (crea y gestiona pacientes, accede a su propio expediente), paciente (creado por el profesional con credenciales propias) y usuario autónomo. El profesional alterna entre su expediente y el del paciente mediante contexto de sesión con validación de vinculación activa. Módulo de mensajería asíncrona profesional-paciente con tipos Indicación y SolicitudPermiso (aceptable/rechazable por el paciente). Generación asistida por IA de documentos RGPD y contratos profesional-paciente.
    19. Módulo de detección y medición de adaptación metabólica (MetabolicAdaptationService): cuantifica el gap entre TDEE teórico por el modelo energético (EnergyDailyBalance.EnergiaGastoTotalKcal) y TDEE real estimado por balance de masa (TDEE_real = (ΣIngestaCorregida − ΔPeso_kg × 7 700) / n_días), con regresión OLS sobre la serie de peso (umbral R² 0,25) para aislar variación de masa de ruido hídrico. Clasifica la adaptación en cuatro niveles (Sin / Leve / Moderada / Severa), emite alertas de reactivación metabólica (adaptación > 250 kcal) y de cobertura proteica insuficiente (< 80 %), y ofrece serie histórica de 12 ventanas de 28 días con representación Chart.js. Los snapshots se persisten en MetabolicAdaptationSnapshots.

    9. Autoría y titularidad

    Autor: Ricardo Manuel Trigo Calonge

    La presente obra incluye código fuente, arquitectura de software, modelo funcional y documentación técnica asociada.