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

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.