3.3 KiB
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.tspara cálculos puros. - Estender
src/training/trainingTypes.tscom tipos de resumo de insights. - Atualizar
src/screens/InsightsScreen.tsxpara renderizar uma tabela/grade de instrumentos, não lista simples. - Atualizar
src/app/FightRateApp.tsxpara passargetContinuousSamplesao 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,formatDurationemtrainingMetrics.ts.HeartRateSample,CompletedTrainingSessionemtrainingTypes.ts.- Tokens existentes em
src/theme. - Fluxo nativo
getContinuousSamplesjá 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.tsxpara matriz tabular.
Plano de execução
- Escrever testes para cálculos puros.
- Implementar funções puras em
trainingMetrics.ts. - Passar
getContinuousSamplesparaInsightsScreene carregar amostras persistidas de forma segura. - Recriar UI da aba Insights com tabela compacta e blocos de instrumentos.
- Rodar validação completa.