# 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`