# Backlog do RastreRisk

App para agentes de campo de gerenciadoras de risco: lê a placa pela câmera, consulta a situação do veículo e, na Busca Ativa, alerta quando passa um veículo da lista de procurados. Especificação em `docs/superpowers/specs/2026-10-15-rastrerisk-design.md`.

**Como o percentual é calculado.** Cada história tem um checklist. O percentual é a fração dos itens marcados, e "Validado no aparelho" só é marcado depois de testar num celular de verdade. Este arquivo é a fonte: `docs/backlog/gerar.py` lê o arquivo, refaz a tabela de resumo abaixo e gera o quadro publicado em https://backlog-rastrerisk.skvgge.cloud (`docs/backlog/deploy.sh`).

**Fases.** 1 · Protótipo no Expo Go (dados de exemplo). 2 · Piloto em campo (backend, dados reais, dev build). 3 · Produção (lojas, painel da central, modelo próprio).

<!-- resumo:inicio -->
**Andamento geral: 53%** (81 de 154 itens de checklist). Atualizado em 15/10/2026 às 17:04.

| US | História | Categoria | Fase | % | Situação |
|---|---|---|---|---|---|
| US-01 | Entrar com a conta da empresa | Acesso | 1 | 57% | Em andamento |
| US-02 | Conceder as permissões | Acesso | 1 | 50% | Em andamento |
| US-03 | Ler a placa pela câmera | Consulta | 1 | 71% | Em andamento |
| US-04 | Digitar a placa | Consulta | 1 | 75% | Em andamento |
| US-05 | Ver a situação do veículo | Consulta | 1 | 60% | Em andamento |
| US-06 | Conferir o modelo e apontar placa clonada | Consulta | 1 | 60% | Em andamento |
| US-07 | Consultar sem sinal | Consulta | 1 | 80% | Em andamento |
| US-08 | Preparar e iniciar a Busca Ativa | Busca Ativa | 1 | 75% | Em andamento |
| US-09 | Ler placas continuamente e comparar com a lista | Busca Ativa | 1 | 71% | Em andamento |
| US-10 | Alerta de veículo procurado | Busca Ativa | 1 | 67% | Em andamento |
| US-11 | Registrar o avistamento e avisar a central | Busca Ativa | 1 | 60% | Em andamento |
| US-12 | Resumo da sessão | Busca Ativa | 1 | 100% | Pronta |
| US-13 | Modo painel e Busca Ativa com a tela apagada | Busca Ativa | 2 | 75% | Em andamento |
| US-14 | Lista de procurados com busca e filtros | Procurados | 1 | 75% | Em andamento |
| US-15 | Detalhe do procurado | Procurados | 1 | 75% | Em andamento |
| US-16 | Lista no aparelho sempre atualizada | Procurados | 1 | 50% | Em andamento |
| US-17 | Histórico de consultas e avistamentos | Histórico e notificações | 1 | 75% | Em andamento |
| US-18 | Notificações da central | Histórico e notificações | 2 | 60% | Em andamento |
| US-19 | Perfil e números do turno | Perfil e ajustes | 1 | 67% | Em andamento |
| US-20 | Ajustes da Busca Ativa | Perfil e ajustes | 1 | 100% | Pronta |
| US-21 | Rádio da equipe (apertar para falar) | Comunicação da equipe | 2 | 0% | Em descoberta |
| US-22 | Canal de voz da ocorrência | Comunicação da equipe | 2 | 0% | Em descoberta |
| US-23 | Registro das conversas da ocorrência | Comunicação da equipe | 3 | 0% | Em descoberta |
| US-24 | API RastreRisk | Plataforma | 2 | 50% | Em andamento |
| US-25 | Provedor de dados veiculares | Plataforma | 2 | 0% | Em descoberta |
| US-26 | Reconhecimento de placa no servidor | Plataforma | 2 | 25% | Em andamento |
| US-27 | Leitura no próprio aparelho, sem sinal | Plataforma | 2 | 40% | Em andamento |
| US-28 | Reconhecimento de marca e modelo | Plataforma | 3 | 25% | Em andamento |
| US-29 | Painel web da central | Plataforma | 3 | 0% | A fazer |
| US-30 | Identidade visual e design system | Design | 1 | 100% | Pronta |
| US-31 | Testes automatizados | Qualidade e entrega | 1 | 40% | Em andamento |
| US-32 | Segurança e LGPD | Qualidade e entrega | 2 | 20% | Em andamento |
| US-33 | Publicação nas lojas | Qualidade e entrega | 3 | 20% | Em andamento |
<!-- resumo:fim -->

## Acesso

### US-01 · Entrar com a conta da empresa

- **Categoria:** Acesso
- **Fase:** 1
- **Prioridade:** Alta

**Como** agente de campo, **quero** entrar com o código da empresa, a matrícula e a senha **para** que cada consulta fique registrada no meu nome.

**Critérios de aceite**
- Código da empresa, e-mail ou matrícula e senha; erro claro quando o acesso é recusado.
- O token fica guardado com segurança e a sessão sobrevive ao fechar o app.
- Sair da conta apaga o token do aparelho.

**Checklist**
- [x] Design: tela Entrar no Penpot
- [x] App: tela Entrar no visual do design
- [x] Login contra a API de exemplo, com token no SecureStore
- [x] Sair da conta no Perfil
- [ ] Login contra a API real (US-24)
- [ ] Esqueci a senha
- [ ] Validado no aparelho (iOS e Android)

### US-02 · Conceder as permissões

- **Categoria:** Acesso
- **Fase:** 1
- **Prioridade:** Alta

**Como** agente, **quero** entender por que o app pede câmera, localização e notificações **para** liberar o que ele precisa sem desconfiar.

**Critérios de aceite**
- Uma frase por permissão dizendo para que serve; estado "Permitida" ou botão "Permitir".
- Localização "sempre", para registrar avistamentos com a tela apagada na Busca Ativa.

**Checklist**
- [x] Design: tela Permissões no Penpot
- [x] App: tela Permissões no visual do design
- [x] Pedido de câmera e localização (expo-camera, expo-location)
- [ ] Pedido de notificações push (US-18)
- [ ] Localização em segundo plano funcionando (dev build)
- [ ] Validado no aparelho

## Consulta

### US-03 · Ler a placa pela câmera

- **Categoria:** Consulta
- **Fase:** 1
- **Prioridade:** Alta

**Como** agente, **quero** apontar a câmera para a traseira do veículo e ter a placa lida sozinha **para** consultar em segundos sem digitar.

**Critérios de aceite**
- Lê placas antigas (ABC-1234) e Mercosul (ABC1D23), corrigindo confusões típicas do OCR pela posição (O e 0, I e 1, B e 8).
- Só confirma a leitura quando os quadros concordam; o caractere incerto aparece em âmbar.
- Quando não dá para ler, explica o motivo e oferece digitar.

**Checklist**
- [x] Design: Câmera (lendo) e Leitura falhou no Penpot
- [x] Normalização da leitura (antiga e Mercosul, correção por posição), com testes
- [x] Votação entre quadros com confiança por caractere, com testes
- [x] Captura de quadros no Expo Go e leitura pela API (`POST /v1/recognize`), simulada no mock
- [x] App: câmera no visual do design
- [ ] Reconhecimento real no servidor (US-26)
- [ ] Validado no aparelho com placas reais, de dia e à noite

### US-04 · Digitar a placa

- **Categoria:** Consulta
- **Fase:** 1
- **Prioridade:** Média

**Como** agente, **quero** digitar a placa num teclado que já sabe se a próxima posição é letra ou número **para** consultar rápido quando a câmera não ajuda.

**Critérios de aceite**
- O teclado alterna sozinho entre letras e números conforme o formato.
- Aceita antiga e Mercosul; mostra as placas consultadas há pouco.

**Checklist**
- [x] Design: Digitar placa no Penpot
- [x] Regras de digitação por posição, com testes
- [x] App: teclado da placa no visual do design
- [ ] Validado no aparelho

### US-05 · Ver a situação do veículo

- **Categoria:** Consulta
- **Fase:** 1
- **Prioridade:** Alta

**Como** agente, **quero** ver na hora se o veículo tem restrição de roubo, furto, judicial ou administrativa, ou se está na lista da central, **para** decidir o que fazer.

**Critérios de aceite**
- Faixa de situação com cor, ícone e texto: sem restrição, roubo ou furto, procurado pela central, restrição administrativa ou judicial, sem conexão.
- Modelo, cor, ano e município do cadastro; aviso de segurança quando há roubo.

**Checklist**
- [x] Design: os quatro resultados no Penpot
- [x] Contrato da API e dados de exemplo com todas as situações
- [x] App: resultado no visual do design
- [ ] Dados reais de um provedor (US-25)
- [ ] Validado no aparelho

### US-06 · Conferir o modelo e apontar placa clonada

- **Categoria:** Consulta
- **Fase:** 1
- **Prioridade:** Alta

**Como** agente, **quero** saber se o veículo à minha frente é o mesmo do cadastro da placa **para** identificar placa clonada.

**Critérios de aceite**
- Compara o que a câmera reconheceu com o cadastro; se não bate, o resultado vira "Possível placa clonada".
- O agente pode confirmar que o veículo confere, e isso fica registrado.

**Checklist**
- [x] Design: Resultado divergência e cartão "O modelo confere"
- [x] Comparação câmera × cadastro, com testes
- [x] App: cartão de conferência no visual do design
- [ ] Registro da conferência manual ("O veículo confere")
- [ ] Reconhecimento de marca e modelo (US-28)

### US-07 · Consultar sem sinal

- **Categoria:** Consulta
- **Fase:** 1
- **Prioridade:** Média

**Como** agente em área sem cobertura, **quero** que a consulta fique guardada e que o app me diga se a placa está na lista do aparelho **para** não ficar sem resposta.

**Checklist**
- [x] Design: Resultado sem conexão
- [x] Fila offline de consultas e avistamentos, com reenvio e testes
- [x] Conferência na lista de procurados do aparelho
- [x] App: tela no visual do design
- [ ] Validado no aparelho em modo avião

## Busca Ativa

### US-08 · Preparar e iniciar a Busca Ativa

- **Categoria:** Busca Ativa
- **Fase:** 1
- **Prioridade:** Alta

**Como** agente, **quero** conferir lista, GPS e câmera antes de sair **para** ter certeza de que o alerta vai funcionar.

**Checklist**
- [x] Design: Preparar no Penpot
- [x] Estado da lista, do GPS e da câmera no app
- [x] App: tela no visual do design
- [ ] Validado no aparelho

### US-09 · Ler placas continuamente e comparar com a lista

- **Categoria:** Busca Ativa
- **Fase:** 1
- **Prioridade:** Alta

**Como** agente com o celular no suporte do painel, **quero** que o app leia as placas ao redor sem eu tocar em nada **para** encontrar veículos procurados enquanto dirijo.

**Critérios de aceite**
- Compara cada leitura com a lista do aparelho; placa antiga e Mercosul do mesmo veículo batem.
- Mostra cronômetro, placas lidas, tamanho da lista, alertas e as últimas leituras.

**Checklist**
- [x] Design: Em andamento no Penpot
- [x] Lista no aparelho com busca pela forma Mercosul (equivalência antiga ↔ Mercosul), com testes
- [x] Sessão com contadores, distância e últimas leituras, com testes
- [x] Leitura contínua no Expo Go, com espera progressiva quando cai a rede
- [x] App: tela no visual do design
- [ ] Leitura no próprio aparelho, sem depender de sinal (US-27)
- [ ] Validado em campo, com o carro em movimento e à noite

### US-10 · Alerta de veículo procurado

- **Categoria:** Busca Ativa
- **Fase:** 1
- **Prioridade:** Alta

**Como** agente, **quero** um alerta impossível de ignorar quando passar um procurado **para** reagir na hora.

**Critérios de aceite**
- Tela inteira amarela com zebrado, sirene e vibração; placa, foto, motivo e prioridade.
- Não repete o alerta da mesma placa antes do intervalo configurado; respeita a confiança mínima.
- "Acionar central", "Registrar e seguir" e "Não é este veículo".

**Checklist**
- [x] Design: Alerta no Penpot
- [x] Motor de alerta (confiança mínima, intervalo, deduplicação), com testes
- [x] Sirene e vibração
- [x] App: tela no visual do design
- [ ] Sirene tocando com o celular no silencioso (iOS)
- [ ] Validado no aparelho

### US-11 · Registrar o avistamento e avisar a central

- **Categoria:** Busca Ativa
- **Fase:** 1
- **Prioridade:** Alta

**Como** agente, **quero** registrar onde e quando vi o veículo, com foto e sentido, **para** a central despachar a equipe certa.

**Checklist**
- [x] Design: Avistamento registrado, com mapa e linha do tempo
- [x] Envio com foto, GPS e sentido, e fila offline
- [x] App: tela no visual do design
- [ ] Linha do tempo atualizada pela central em tempo real
- [ ] Validado no aparelho

### US-12 · Resumo da sessão

- **Categoria:** Busca Ativa
- **Fase:** 1
- **Prioridade:** Baixa

**Como** agente, **quero** ver o resumo ao encerrar a Busca Ativa **para** relatar o turno.

**Checklist**
- [x] Design: Resumo no Penpot
- [x] Duração, placas lidas, distância e alertas da sessão
- [x] App: tela no visual do design

### US-13 · Modo painel e Busca Ativa com a tela apagada

- **Categoria:** Busca Ativa
- **Fase:** 2
- **Prioridade:** Média

**Como** agente dirigindo à noite, **quero** a tela escura até haver alerta **para** não ofuscar nem gastar bateria.

**Checklist**
- [x] Design: Modo painel nos ajustes e no Preparar
- [x] Tela sempre ligada durante a sessão
- [x] Modo painel: tela escurecida que acende no alerta
- [ ] Busca Ativa com o app em segundo plano (dev build e tarefa de segundo plano)

## Procurados

### US-14 · Lista de procurados com busca e filtros

- **Categoria:** Procurados
- **Fase:** 1
- **Prioridade:** Alta

**Como** agente, **quero** ver e filtrar os veículos procurados pela central **para** saber o que procurar no turno.

**Checklist**
- [x] Design: lista e folha de filtros no Penpot
- [x] Filtros por motivo, prioridade, veículo e data, com testes
- [x] App: tela no visual do design
- [ ] Lista vinda da central real

### US-15 · Detalhe do procurado

- **Categoria:** Procurados
- **Fase:** 1
- **Prioridade:** Média

**Como** agente, **quero** ver fotos, sinais particulares e o último avistamento **para** reconhecer o veículo na rua.

**Checklist**
- [x] Design: Detalhe do procurado no Penpot
- [x] Ligar para a central
- [x] App: tela no visual do design
- [ ] Fotos e último avistamento vindos do backend

### US-16 · Lista no aparelho sempre atualizada

- **Categoria:** Procurados
- **Fase:** 1
- **Prioridade:** Alta

**Como** agente, **quero** que a lista do aparelho se atualize sozinha **para** que a Busca Ativa nunca use uma lista velha.

**Checklist**
- [x] Sincronização incremental (`since`), com testes
- [x] Atualização manual no Perfil e no Preparar
- [ ] Atualização automática quando entra um procurado novo (push)
- [ ] Validado com a lista real da central

## Histórico e notificações

### US-17 · Histórico de consultas e avistamentos

- **Categoria:** Histórico e notificações
- **Fase:** 1
- **Prioridade:** Média

**Checklist**
- [x] Design: Histórico (consultas e avistamentos) no Penpot
- [x] Endpoint e dados de exemplo
- [x] App: tela no visual do design
- [ ] Dados reais (US-24)

### US-18 · Notificações da central

- **Categoria:** Histórico e notificações
- **Fase:** 2
- **Prioridade:** Alta

**Como** agente, **quero** ser avisado de um procurado novo na minha área e da confirmação dos meus avistamentos **para** agir sem abrir o app.

**Checklist**
- [x] Design: Notificações no Penpot
- [x] Endpoint e dados de exemplo da lista
- [x] App: tela no visual do design
- [ ] Push com expo-notifications e servidor (exige dev build)
- [ ] Tocar na notificação abre o procurado ou o avistamento

## Perfil e ajustes

### US-19 · Perfil e números do turno

- **Categoria:** Perfil e ajustes
- **Fase:** 1
- **Prioridade:** Baixa

**Checklist**
- [x] Design: Perfil no Penpot
- [x] App: tela no visual do design
- [ ] Números do turno vindos do backend

### US-20 · Ajustes da Busca Ativa

- **Categoria:** Perfil e ajustes
- **Fase:** 1
- **Prioridade:** Média

**Checklist**
- [x] Design: Ajustes da Busca Ativa no Penpot
- [x] Ajustes guardados no aparelho e confiança mínima aplicada no alerta
- [x] App: tela no visual do design

## Comunicação da equipe

### US-21 · Rádio da equipe (apertar para falar)

- **Categoria:** Comunicação da equipe
- **Fase:** 2
- **Prioridade:** Alta
- **Situação:** Em descoberta

**Como** agente em Busca Ativa, **quero** falar com a minha equipe apertando um botão, como num rádio, **para** coordenar a abordagem sem largar o volante nem fazer ligação.

**Critérios de aceite**
- Canal de voz por equipe (sala do LiveKit), que entra sozinho ao iniciar a Busca Ativa, se o agente quiser.
- Botão grande de apertar para falar, usável com o celular no suporte; avaliar botão de fone Bluetooth.
- Mostra quem está falando e quem está no canal; bipe ao abrir e fechar a fala.
- O áudio continua com a tela apagada e o app em segundo plano; reconecta sozinho em rede ruim.

**Notas da descoberta**
- O SDK do LiveKit para React Native (`@livekit/react-native` e `@livekit/react-native-webrtc`) é nativo: **não roda no Expo Go**, só em dev build.
- A VPS já tem um LiveKit (`pocrtc_livekit`, da POC de telemedicina). Decidir entre reaproveitar com chaves e salas próprias ou subir um dedicado; avaliar TURN para redes móveis que bloqueiam UDP.
- Áudio em segundo plano: no iOS, modo de fundo de áudio (e talvez CallKit); no Android, serviço em primeiro plano.

**Checklist**
- [ ] Decidir o servidor LiveKit (compartilhado ou dedicado) e o TURN
- [ ] Prova de conceito num dev build com 2 aparelhos
- [ ] Token de acesso emitido pela API RastreRisk (sala por equipe, permissões)
- [ ] Design: botão de rádio na Busca Ativa e tela do canal no Penpot
- [ ] Áudio em segundo plano (iOS e Android)
- [ ] Teste em campo com 3 ou mais aparelhos no 4G

### US-22 · Canal de voz da ocorrência

- **Categoria:** Comunicação da equipe
- **Fase:** 2
- **Prioridade:** Média
- **Situação:** Em descoberta

**Como** agente que encontrou um procurado, **quero** que um canal com a central e a equipe a caminho abra sozinho **para** guiar a aproximação em tempo real.

**Critérios de aceite**
- Acionar a central cria a sala da ocorrência e chama a equipe designada e o operador.
- A posição de quem está no canal aparece ao vivo no mapa do avistamento.

**Checklist**
- [ ] Design: canal da ocorrência na tela do avistamento
- [ ] API cria a sala da ocorrência e convida os participantes
- [ ] Posição ao vivo pelos canais de dados do LiveKit
- [ ] Encerrar a ocorrência fecha o canal

### US-23 · Registro das conversas da ocorrência

- **Categoria:** Comunicação da equipe
- **Fase:** 3
- **Prioridade:** Baixa
- **Situação:** Em descoberta

**Como** gestor da central, **quero** a gravação das falas de cada ocorrência **para** auditoria e treinamento.

**Checklist**
- [ ] Definir retenção e base legal com o jurídico (LGPD)
- [ ] Gravação da sala (LiveKit Egress) guardada no MinIO da infra
- [ ] Ouvir a gravação no histórico da ocorrência

## Plataforma

### US-24 · API RastreRisk

- **Categoria:** Plataforma
- **Fase:** 2
- **Prioridade:** Alta

**Checklist**
- [x] Contrato v1 tipado (login, veículo, lista, avistamento, histórico, notificações, reconhecimento)
- [x] API de exemplo completa dentro do app
- [x] Cliente HTTP com tempo limite, erros tipados e fila offline, com testes
- [ ] Backend real com o Postgres da infra (schema próprio)
- [ ] Publicação em domínio com SSL
- [ ] Autenticação por empresa e trilha de auditoria das consultas

### US-25 · Provedor de dados veiculares

- **Categoria:** Plataforma
- **Fase:** 2
- **Prioridade:** Alta
- **Situação:** Em descoberta

**Checklist**
- [ ] Escolher o provedor (roubo e furto, judicial, administrativa, dados do veículo) e o custo por consulta
- [ ] Integração no backend, com cache e limite por agente
- [ ] Contrato de uso e base legal (LGPD)

### US-26 · Reconhecimento de placa no servidor

- **Categoria:** Plataforma
- **Fase:** 2
- **Prioridade:** Alta

**Checklist**
- [x] Contrato `POST /v1/recognize` e leitura simulada nos dados de exemplo
- [ ] Detector de placa e OCR no servidor
- [ ] Resposta abaixo de 700 ms pela rede móvel
- [ ] Conjunto de teste com placas brasileiras (dia, noite, chuva, ângulo)

### US-27 · Leitura no próprio aparelho, sem sinal

- **Categoria:** Plataforma
- **Fase:** 2
- **Prioridade:** Alta

**Checklist**
- [x] Pesquisa e escolha das bibliotecas (VisionCamera 5 e ML Kit), documentadas no README do app
- [x] Interface `PlateRecognizer` pronta para a troca
- [ ] Dev build (EAS) com a câmera nativa e o ML Kit
- [ ] Detector de placa dedicado (TFLite)
- [ ] Busca Ativa sem sinal validada em campo

### US-28 · Reconhecimento de marca e modelo

- **Categoria:** Plataforma
- **Fase:** 3
- **Prioridade:** Média

**Checklist**
- [x] Interface `VehicleClassifier` e comparação câmera × cadastro
- [ ] Conjunto de imagens dos modelos mais roubados no Brasil
- [ ] Treino e exportação para TFLite
- [ ] Integração no resultado e na Busca Ativa

### US-29 · Painel web da central

- **Categoria:** Plataforma
- **Fase:** 3
- **Prioridade:** Alta

**Checklist**
- [ ] Design no Penpot
- [ ] Gestão da lista de procurados (incluir, priorizar, encerrar como recuperado)
- [ ] Mapa de avistamentos e equipes em tempo real
- [ ] Despacho de equipes e mensagens para os agentes

## Design

### US-30 · Identidade visual e design system

- **Categoria:** Design
- **Fase:** 1
- **Prioridade:** Alta

**Checklist**
- [x] Direção visual "a placa é a interface"
- [x] Fundamentos no Penpot (cores com contraste AA, tipografia, componentes, 51 ícones)
- [x] 24 telas e protótipo navegável no Penpot
- [x] Marca: ícone, ícone adaptativo, splash e logotipos
- [x] Ícone e splash aplicados no app

## Qualidade e entrega

### US-31 · Testes automatizados

- **Categoria:** Qualidade e entrega
- **Fase:** 1
- **Prioridade:** Alta

**Checklist**
- [x] Testes unitários do núcleo (OCR, equivalência, votação, lista, alerta, sessão, API, fila offline): 216 testes
- [x] TypeScript estrito sem erros
- [ ] Testes de interface das telas principais
- [ ] Testes de ponta a ponta no aparelho
- [ ] Integração contínua

### US-32 · Segurança e LGPD

- **Categoria:** Qualidade e entrega
- **Fase:** 2
- **Prioridade:** Alta

**Checklist**
- [x] Token guardado no SecureStore
- [ ] Trilha de auditoria de cada consulta (quem, quando, onde)
- [ ] Política de retenção das fotos de avistamento
- [ ] Revisão de segurança do backend
- [ ] Termo de uso e base legal com o jurídico

### US-33 · Publicação nas lojas

- **Categoria:** Qualidade e entrega
- **Fase:** 3
- **Prioridade:** Média

**Checklist**
- [x] Ícone e splash desenhados
- [ ] Contas de desenvolvedor (Apple e Google)
- [ ] Builds de produção com EAS
- [ ] Textos e capturas para as lojas
- [ ] Distribuição interna para o piloto (TestFlight e teste interno do Google Play)
