Files
HealthTracking/docs/superpowers/specs/2026-06-10-fightrate-insights-scientific-table.md

3.3 KiB

FightRate Insights Científicos — Mini-spec

Objetivo

Implementar uma nova visualização de cálculos e insights na aba Insights, usando métricas derivadas do relatório científico docs/research/bpm-indicators-fightrate-2026-06-10.md, sem inventar dados e sem abandonar o design Corner Instrument.

Escopo

Incluir agora

  • Grade/tabela compacta de métricas com melhor aproveitamento vertical.
  • Cálculos com dados reais já disponíveis:
    • FC atual, média, mínima e máxima;
    • duração observada e contagem de amostras;
    • amplitude de BPM;
    • desvio padrão de BPM;
    • coeficiente de variação de BPM;
    • classificação operacional de estabilidade/oscilação;
    • tempo em zonas já calculadas;
    • carga observada existente;
    • tendência de deriva de FC quando a janela for longa o suficiente;
    • recuperação pós-janela quando houver amostras contínuas após o fim da sessão;
    • status de HRV/VFC baseado na presença de rrIntervalsMs.
  • Estados honestos para métricas que exigem perfil ou RR intervals.

Não incluir agora

  • Cadastro de perfil do atleta.
  • Diagnóstico médico.
  • LF/HF, frequência espectral, SampEn ou DFA reais sem pipeline de RR validado.
  • Mudanças amplas de design fora de Insights.
  • Novas dependências.

Arquitetura

  • Reutilizar src/training/trainingMetrics.ts para cálculos puros.
  • Estender src/training/trainingTypes.ts com tipos de resumo de insights.
  • Atualizar src/screens/InsightsScreen.tsx para renderizar uma tabela/grade de instrumentos, não lista simples.
  • Atualizar src/app/FightRateApp.tsx para passar getContinuousSamples ao Insights, permitindo cálculo de recuperação pós-janela com dados persistidos.
  • Testar cálculos puros em __tests__/trainingMetrics.test.ts.

Critérios de sucesso

  • Insights usa somente amostras reais ou mostra estado indisponível.
  • Visual evita cards genéricos; usa trilhos, linhas tabulares, separadores e linguagem Corner Instrument.
  • Métricas BPM-only aparecem com valor/unidade/status/leitura curta.
  • HRV/VFC aparece como disponível somente quando existirem RR intervals; caso contrário, informa que requer RR.
  • Recuperação pós-janela só aparece quando há amostras depois de endedAt.
  • Typecheck, lint e testes passam.
  • Build release Android é gerado e enviado ao Telegram ao final.

Reuso vs criação

Reutilizar

  • calculateLiveMetrics, calculateZones, formatDuration em trainingMetrics.ts.
  • HeartRateSample, CompletedTrainingSession em trainingTypes.ts.
  • Tokens existentes em src/theme.
  • Fluxo nativo getContinuousSamples já exposto pelo hook.

Criar/alterar

  • Criar funções puras em trainingMetrics.ts:
    • buildInsightDashboard();
    • calculateBpmVariability();
    • calculateHeartRateDrift();
    • calculatePostSessionRecovery();
    • summarizeRrAvailability().
  • Criar tipos em trainingTypes.ts:
    • InsightMetricStatus;
    • InsightMetricRow;
    • InsightDashboard.
  • Reescrever o layout interno de InsightsScreen.tsx para matriz tabular.

Plano de execução

  1. Escrever testes para cálculos puros.
  2. Implementar funções puras em trainingMetrics.ts.
  3. Passar getContinuousSamples para InsightsScreen e carregar amostras persistidas de forma segura.
  4. Recriar UI da aba Insights com tabela compacta e blocos de instrumentos.
  5. Rodar validação completa.