82 lines
3.3 KiB
Markdown
82 lines
3.3 KiB
Markdown
# 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.
|