Files
HealthTracking/docs/superpowers/specs/2026-06-10-fightrate-sensor-continuous-history.md

55 lines
2.8 KiB
Markdown

# FightRate — Sensor contínuo e histórico geral
## Objetivo
Separar claramente três conceitos:
1. **Sensor**: descobrir, mostrar disponibilidade e permitir conexão ao sensor BLE.
2. **Monitoramento contínuo**: depois de conectado, receber, mostrar e salvar BPM real o tempo todo no app.
3. **Janela de treino**: ação disponível somente em Captura; marca um intervalo dentro do fluxo contínuo para destaque no histórico.
## Critérios de sucesso
- A tela Sensor não mostra botão de abrir/iniciar janela de treino.
- A tela Sensor mostra se o sensor está disponível/conectado e permite conectar/desconectar/monitorar pelo fluxo de sensor.
- Conectar o sensor inicia o recebimento contínuo via serviço nativo e os dados alimentam Captura, Sensor, Histórico e Insights.
- A janela de treino continua existindo apenas na tela Captura e não interrompe o monitoramento ao fechar.
- Histórico mantém a lista de janelas de treino e adiciona uma visão de **uso total** baseada em `continuous_heart_rate_samples`.
- O histórico geral não usa dados falsos: se não houver amostras contínuas, mostra estado vazio honesto.
- BLE services/characteristics ficam mais legíveis, com hierarquia compacta e sem espaçamento excessivo.
- Código visível ao usuário em PT-BR; identificadores em inglês.
## Arquitetura recomendada
- Reusar `FightRateCaptureStore` como fonte local-first.
- Reusar `continuous_heart_rate_samples` como verdade para histórico geral.
- Criar uma pequena camada de domínio TS para agrupar amostras contínuas em blocos de uso por lacunas de tempo. Essa lógica é pura e testável.
- Expor do módulo nativo um método de leitura paginada/resumida das amostras contínuas, sem mudar o contrato BLE.
- Manter `workout_sessions` apenas para janelas destacadas.
## Responsabilidades
### Reusar
- `useHeartRateMonitor`: estado app-wide recebido do módulo nativo.
- `TrainingChart`: gráfico real e interativo com amostras timestampadas.
- `FightRateCaptureStore`: persistência SQLite local.
- `HistoryScreen`: entrada natural para alternar entre janelas e uso total.
### Criar/alterar
- `src/training/continuousUsage.ts`: agrupar amostras contínuas em blocos de uso e sumarizar BPM/duração.
- Teste Jest para `continuousUsage`.
- API nativa `getContinuousSamples(limit?)`.
- Wrapper TS para `getContinuousSamples`.
- UI de Histórico com seção/alternância para “Janelas” e “Uso total”.
- UI de Sensor sem ação de treino e com diagnóstico BLE mais claro.
## Fora de escopo
- Não trocar biblioteca BLE.
- Não adicionar dependências.
- Não mudar o design aprovado fora dos pontos pedidos.
- Não criar dados demo/fake.
- Não mexer no app Android legado.
## Verificação
- `npm run typecheck`
- `npm run lint`
- `npm test -- --runInBand`
- `npm audit --audit-level=moderate`
- `./gradlew assembleRelease -PreactNativeArchitectures=arm64-v8a`