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

2.8 KiB

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