Critérios de Aceite
Sport Tech Club - User Stories com Critérios de Aceite Completos
Convenções
Formato User Story
Como [persona],
Quero [ação/funcionalidade],
Para [benefício/valor]Formato Critérios de Aceite (Gherkin)
Scenario: Nome do cenário
Given [contexto inicial]
When [ação do usuário]
Then [resultado esperado]Story Points (Fibonacci)
| Pontos | Complexidade | Estimativa |
|---|---|---|
| 1 | Trivial | < 2h |
| 2 | Simples | 2-4h |
| 3 | Médio | 4-8h |
| 5 | Complexo | 1-2 dias |
| 8 | Muito complexo | 2-3 dias |
| 13 | Épico (dividir) | 3-5 dias |
Epic 1: Autenticação e Acesso
US-AUTH-001: Cadastro de Usuário
Como visitante, Quero me cadastrar na plataforma, Para acessar as funcionalidades de reserva e jogos.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Cadastro com dados válidos
Given eu estou na página de cadastro
When eu preencho nome "João Silva"
And eu preencho email "joao@email.com"
And eu preencho senha "Senha@123"
And eu preencho confirmação de senha "Senha@123"
And eu aceito os termos de uso
And eu clico em "Criar conta"
Then minha conta deve ser criada
And eu devo ver mensagem "Conta criada! Verifique seu email"
And eu devo receber email de confirmação
Scenario: Cadastro com email já existente
Given existe usuário com email "joao@email.com"
When eu tento cadastrar com mesmo email
Then eu devo ver erro "Email já cadastrado"
And devo ver link "Esqueceu sua senha?"
Scenario: Validação de senha fraca
Given eu estou preenchendo o formulário
When eu digito senha "123456"
Then eu devo ver erro de validação
And mensagem "Senha deve ter 8+ caracteres, maiúscula, número e especial"
Scenario: Termos não aceitos
Given eu preenchi todos os dados
When eu não marco aceite dos termos
And eu clico em "Criar conta"
Then eu devo ver erro "Você deve aceitar os termos"
Scenario: Email inválido
Given eu estou no formulário de cadastro
When eu preencho email "emailinvalido"
Then eu devo ver erro "Email inválido"Definition of Done
- [ ] Testes unitários (>80% coverage)
- [ ] Testes E2E passando
- [ ] Integração com Keycloak funcionando
- [ ] Email de confirmação sendo enviado
- [ ] Code review aprovado
- [ ] Documentação atualizada
Dependências
- Keycloak configurado
- SendGrid/SES configurado
US-AUTH-002: Login com Email/Senha
Como usuário cadastrado, Quero fazer login com email e senha, Para acessar minha conta.
Story Points: 3 | Prioridade: Alta
Critérios de Aceite
Scenario: Login bem-sucedido
Given eu tenho conta ativa com email "joao@email.com"
When eu acesso página de login
And eu preencho email "joao@email.com"
And eu preencho senha correta
And eu clico em "Entrar"
Then eu devo ser autenticado
And eu devo ser redirecionado para home
And meu nome deve aparecer no menu
Scenario: Senha incorreta
Given eu tenho conta ativa
When eu preencho senha incorreta
And eu clico em "Entrar"
Then eu devo ver erro "Email ou senha incorretos"
And contador de tentativas deve incrementar
Scenario: Conta bloqueada após 5 tentativas
Given eu errei a senha 5 vezes
When eu tento novamente
Then eu devo ver "Conta bloqueada por 30 minutos"
And eu devo receber email de segurança
Scenario: Lembrar de mim
Given eu marco "Lembrar de mim"
When eu faço login
And eu fecho e abro o navegador
Then eu devo continuar logado
Scenario: Email não verificado
Given meu email não foi verificado
When eu faço login
Then eu devo ver alerta "Verifique seu email"
And link para reenviar verificaçãoDefinition of Done
- [ ] Testes unitários (>80% coverage)
- [ ] Testes E2E passando
- [ ] Rate limiting implementado
- [ ] Logs de auditoria funcionando
- [ ] Code review aprovado
Dependências
- US-AUTH-001
US-AUTH-003: Login Social (Google)
Como usuário, Quero fazer login com minha conta Google, Para acessar mais rapidamente sem criar nova senha.
Story Points: 5 | Prioridade: Média
Critérios de Aceite
Scenario: Primeiro login com Google
Given eu não tenho conta na plataforma
When eu clico em "Continuar com Google"
And eu autorizo no popup do Google
Then conta deve ser criada automaticamente
And eu devo ser redirecionado para completar perfil
And email deve vir pré-preenchido
Scenario: Login Google com conta existente
Given eu já tenho conta com email do Google
When eu faço login com Google
Then contas devem ser vinculadas
And eu devo acessar minha conta existente
Scenario: Cancelar autorização Google
Given eu cliquei em "Continuar com Google"
When eu cancelo no popup
Then eu devo voltar para página de login
And nenhuma conta deve ser criada
Scenario: Google retorna erro
Given houve problema no Google
When a autorização falha
Then eu devo ver erro amigável
And opção de tentar novamenteDefinition of Done
- [ ] OAuth Google configurado
- [ ] Testes E2E passando
- [ ] Vinculação de contas funcionando
- [ ] Code review aprovado
Dependências
- US-AUTH-001
- Google OAuth credentials
US-AUTH-004: Recuperação de Senha
Como usuário que esqueceu a senha, Quero redefinir minha senha, Para recuperar acesso à minha conta.
Story Points: 3 | Prioridade: Alta
Critérios de Aceite
Scenario: Solicitar redefinição
Given eu esqueci minha senha
When eu clico em "Esqueci minha senha"
And eu informo meu email cadastrado
And eu clico em "Enviar"
Then eu devo ver "Link enviado para seu email"
And eu devo receber email com link
Scenario: Link de redefinição válido
Given eu recebi email de redefinição
When eu clico no link dentro de 1 hora
Then eu devo ver formulário de nova senha
Scenario: Link expirado
Given passou mais de 1 hora
When eu clico no link
Then eu devo ver "Link expirado"
And opção de solicitar novo link
Scenario: Nova senha válida
Given eu estou no formulário de redefinição
When eu preencho nova senha válida
And eu confirmo a senha
And eu clico em "Redefinir"
Then minha senha deve ser alterada
And eu devo ver "Senha alterada com sucesso"
And todas as sessões devem ser encerradas
Scenario: Email não cadastrado
Given eu informo email não cadastrado
When eu solicito redefinição
Then eu devo ver mensagem genérica (segurança)
And nenhum email deve ser enviadoDefinition of Done
- [ ] Testes unitários passando
- [ ] Link com token seguro
- [ ] Expiração de 1 hora
- [ ] Code review aprovado
Dependências
- US-AUTH-001
US-AUTH-005: Configurar MFA
Como usuário preocupado com segurança, Quero ativar autenticação de dois fatores, Para proteger minha conta.
Story Points: 5 | Prioridade: Média
Critérios de Aceite
Scenario: Ativar MFA com app autenticador
Given eu estou em Configurações > Segurança
When eu clico em "Ativar MFA"
Then eu devo ver QR code
And instruções para escanear
When eu informo código do app
Then MFA deve ser ativado
And eu devo receber códigos de backup
Scenario: Login com MFA ativo
Given MFA está ativo na minha conta
When eu faço login com email/senha
Then eu devo ver tela de código MFA
When eu informo código correto
Then eu devo ser autenticado
Scenario: Código MFA incorreto
Given eu estou na tela de MFA
When eu informo código incorreto
Then eu devo ver erro "Código inválido"
And posso tentar novamente
Scenario: Usar código de backup
Given eu perdi acesso ao app autenticador
When eu clico em "Usar código de backup"
And eu informo um código válido
Then eu devo ser autenticado
And código usado deve ser invalidado
Scenario: Desativar MFA
Given MFA está ativo
When eu clico em "Desativar MFA"
And eu confirmo com minha senha
Then MFA deve ser desativadoDefinition of Done
- [ ] TOTP implementado
- [ ] Códigos de backup gerados
- [ ] Testes E2E passando
- [ ] Code review aprovado
Dependências
- US-AUTH-002
US-AUTH-006: Gerenciar Perfil
Como usuário logado, Quero editar meus dados pessoais, Para manter meu perfil atualizado.
Story Points: 3 | Prioridade: Alta
Critérios de Aceite
Scenario: Editar dados básicos
Given eu estou logado
When eu acesso "Meu Perfil"
Then eu devo poder editar: nome, telefone, data de nascimento
When eu salvo alterações
Then dados devem ser atualizados
And eu devo ver "Perfil atualizado"
Scenario: Upload de foto
Given eu estou editando meu perfil
When eu clico em "Alterar foto"
And eu seleciono imagem válida (JPG/PNG, max 5MB)
Then a foto deve ser enviada
And preview deve aparecer
When eu salvo
Then nova foto deve ser minha foto de perfil
Scenario: Foto inválida
Given eu tento fazer upload
When o arquivo é maior que 5MB
Or formato não é JPG/PNG
Then eu devo ver erro apropriado
Scenario: Alterar senha
Given eu quero alterar minha senha
When eu informo senha atual
And eu informo nova senha válida
And eu confirmo nova senha
Then senha deve ser alterada
And eu devo fazer login novamenteDefinition of Done
- [ ] Upload de imagem funcionando
- [ ] Validações implementadas
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-AUTH-002
US-AUTH-007: Logout
Como usuário logado, Quero fazer logout, Para encerrar minha sessão com segurança.
Story Points: 1 | Prioridade: Alta
Critérios de Aceite
Scenario: Logout simples
Given eu estou logado
When eu clico em "Sair"
Then minha sessão deve ser encerrada
And eu devo ser redirecionado para login
And meu token deve ser invalidado
Scenario: Logout de todos os dispositivos
Given eu estou logado em múltiplos dispositivos
When eu clico em "Sair de todos os dispositivos"
And eu confirmo com minha senha
Then todas as sessões devem ser encerradas
And todos os tokens invalidadosDefinition of Done
- [ ] Token invalidado no backend
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-AUTH-002
US-AUTH-008: Verificar Email
Como novo usuário, Quero verificar meu email, Para confirmar minha identidade.
Story Points: 2 | Prioridade: Alta
Critérios de Aceite
Scenario: Verificação bem-sucedida
Given eu recebi email de verificação
When eu clico no link
Then meu email deve ser verificado
And eu devo ver "Email verificado com sucesso"
And eu devo ter acesso completo
Scenario: Reenviar verificação
Given meu email não está verificado
When eu clico em "Reenviar email"
Then novo email deve ser enviado
And eu devo ver "Email reenviado"
Scenario: Link de verificação expirado
Given passou mais de 24 horas
When eu clico no link
Then eu devo ver "Link expirado"
And opção de reenviarDefinition of Done
- [ ] Email sendo enviado
- [ ] Link com expiração
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-AUTH-001
US-AUTH-009: Preferências de Privacidade
Como usuário consciente sobre privacidade, Quero controlar minhas preferências de dados, Para gerenciar como meus dados são usados.
Story Points: 3 | Prioridade: Alta
Critérios de Aceite
Scenario: Configurar visibilidade do perfil
Given eu acesso Configurações > Privacidade
Then eu devo poder definir:
| Configuração | Opções |
| Perfil público | Sim/Não |
| Aparecer em rankings | Sim/Não |
| Mostrar estatísticas | Sim/Não |
When eu salvo
Then preferências devem ser aplicadas
Scenario: Gerenciar comunicações
Given eu estou nas preferências
Then eu devo poder controlar:
| Tipo | Opções |
| Emails promocionais | Sim/Não |
| Notificações push | Sim/Não |
| SMS | Sim/Não |
Scenario: Exportar meus dados (LGPD)
Given eu quero meus dados
When eu clico em "Exportar dados"
Then solicitação deve ser registrada
And eu devo receber email quando pronto
And arquivo deve conter todos meus dados
Scenario: Excluir minha conta (LGPD)
Given eu quero excluir minha conta
When eu clico em "Excluir conta"
And eu confirmo com minha senha
And eu aceito os termos de exclusão
Then conta deve ser marcada para exclusão
And eu devo ter 30 dias para cancelar
And após 30 dias, dados devem ser anonimizadosDefinition of Done
- [ ] Preferências salvas corretamente
- [ ] Exportação funcionando
- [ ] Exclusão com período de carência
- [ ] Logs de auditoria
- [ ] Code review aprovado
Dependências
- US-AUTH-006
US-AUTH-010: Gestão de Sessões
Como usuário preocupado com segurança, Quero ver e gerenciar minhas sessões ativas, Para identificar acessos não autorizados.
Story Points: 3 | Prioridade: Baixa
Critérios de Aceite
Scenario: Ver sessões ativas
Given eu acesso Segurança > Sessões
Then eu devo ver lista de dispositivos conectados
And cada um mostrando: dispositivo, localização, última atividade
And sessão atual deve estar marcada
Scenario: Encerrar sessão específica
Given eu vejo uma sessão suspeita
When eu clico em "Encerrar sessão"
Then aquela sessão deve ser invalidada
And dispositivo será deslogado
Scenario: Alerta de novo login
Given eu fiz login de novo dispositivo
Then eu devo receber email de alerta
And email deve conter detalhes do acesso
And link para revogar acesso se não fui euDefinition of Done
- [ ] Lista de sessões funcionando
- [ ] Encerramento de sessão
- [ ] Alertas de login
- [ ] Code review aprovado
Dependências
- US-AUTH-002
Epic 2: Busca e Descoberta
US-SEARCH-001: Buscar Arenas
Como jogador, Quero buscar arenas próximas, Para encontrar um lugar para jogar.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Busca por localização
Given eu permiti acesso à localização
When eu acesso a busca
Then devo ver arenas ordenadas por proximidade
And cada arena mostra: nome, distância, avaliação, esportes
Scenario: Busca por nome
Given eu digito "Arena Beach" na busca
When eu pressiono Enter
Then devo ver arenas que contém "Beach" no nome
And resultados destacam o termo buscado
Scenario: Filtrar por esporte
Given eu quero jogar Beach Tennis
When eu aplico filtro "Beach Tennis"
Then devo ver apenas arenas com Beach Tennis
And o filtro deve estar visualmente ativo
Scenario: Filtrar por características
Given eu quero quadra coberta
When eu aplico filtro "Coberta"
Then devo ver apenas arenas com quadras cobertas
Scenario: Sem resultados
Given eu busco algo que não existe
Then devo ver "Nenhuma arena encontrada"
And sugestões de busca alternativaDefinition of Done
- [ ] Busca por texto funcionando
- [ ] Filtros implementados
- [ ] Geolocalização funcionando
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- Arenas cadastradas no sistema
US-SEARCH-002: Ver Detalhes da Arena
Como jogador, Quero ver detalhes de uma arena, Para decidir se quero reservar.
Story Points: 3 | Prioridade: Alta
Critérios de Aceite
Scenario: Visualizar informações básicas
Given eu clico em uma arena
Then devo ver: nome, endereço, telefone, horários
And galeria de fotos
And mapa com localização
And avaliação média
Scenario: Ver quadras disponíveis
Given eu estou na página da arena
When eu rolo até "Quadras"
Then devo ver lista de quadras
And cada uma mostra: nome, esporte, preço, status
Scenario: Ver avaliações
Given eu clico na aba "Avaliações"
Then devo ver avaliações de outros jogadores
And cada uma mostra: nota, comentário, data, autor
And média geral deve estar visível
Scenario: Navegar até a arena
Given eu quero ir até a arena
When eu clico em "Como chegar"
Then devo abrir app de mapas com a rotaDefinition of Done
- [ ] Página de detalhes completa
- [ ] Galeria de fotos
- [ ] Avaliações funcionando
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-SEARCH-001
US-SEARCH-003: Ver Disponibilidade
Como jogador, Quero ver disponibilidade de quadras, Para escolher o melhor horário.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Ver agenda do dia
Given eu estou na página de uma arena
When eu acesso "Disponibilidade"
Then devo ver grade de horários
And horários livres em verde
And horários ocupados em vermelho
And preços de cada horário
Scenario: Navegar entre dias
Given eu estou vendo disponibilidade
When eu clico em outro dia
Then a grade deve atualizar
And mostrar disponibilidade do dia selecionado
Scenario: Filtrar por quadra
Given eu quero ver apenas uma quadra
When eu seleciono "Quadra 1"
Then devo ver apenas horários dessa quadra
Scenario: Ver detalhes do horário
Given eu clico em um horário disponível
Then devo ver: preço, duração, regras
And botão "Reservar"Definition of Done
- [ ] Grade de horários visual
- [ ] Atualização em tempo real
- [ ] Filtros funcionando
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-SEARCH-002
US-SEARCH-004: Favoritar Arena
Como jogador frequente, Quero favoritar arenas, Para acessá-las rapidamente.
Story Points: 2 | Prioridade: Média
Critérios de Aceite
Scenario: Adicionar aos favoritos
Given eu estou na página de uma arena
When eu clico no ícone de coração
Then a arena deve ser adicionada aos favoritos
And o ícone deve ficar preenchido
Scenario: Ver meus favoritos
Given eu tenho arenas favoritas
When eu acesso "Meus Favoritos"
Then devo ver lista das arenas favoritas
And poder acessar rapidamente cada uma
Scenario: Remover dos favoritos
Given uma arena está nos favoritos
When eu clico no coração novamente
Then ela deve ser removida dos favoritosDefinition of Done
- [ ] Favoritos salvos por usuário
- [ ] Lista de favoritos
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-AUTH-002
- US-SEARCH-002
US-SEARCH-005: Busca por Mapa
Como jogador visual, Quero buscar arenas em um mapa, Para visualizar a distribuição geográfica.
Story Points: 5 | Prioridade: Média
Critérios de Aceite
Scenario: Ver mapa com arenas
Given eu acesso a busca por mapa
Then devo ver mapa centrado na minha localização
And pins das arenas próximas
And cada pin mostra: nome e avaliação
Scenario: Clicar em pin
Given eu vejo pins no mapa
When eu clico em um pin
Then devo ver card resumido da arena
And poder acessar detalhes
Scenario: Mover o mapa
Given eu movo o mapa para outra região
Then novos pins devem carregar
And arenas daquela região devem aparecerDefinition of Done
- [ ] Mapa funcionando (Google Maps/Mapbox)
- [ ] Pins interativos
- [ ] Performance otimizada
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-SEARCH-001
- API de mapas configurada
US-SEARCH-006: Histórico de Buscas
Como jogador, Quero ver meu histórico de buscas, Para refazer buscas anteriores.
Story Points: 2 | Prioridade: Baixa
Critérios de Aceite
Scenario: Ver buscas recentes
Given eu fiz buscas anteriormente
When eu acesso o campo de busca
Then devo ver sugestões das últimas buscas
Scenario: Limpar histórico
Given eu tenho histórico de buscas
When eu clico em "Limpar histórico"
Then o histórico deve ser apagadoDefinition of Done
- [ ] Histórico salvo localmente
- [ ] Sugestões funcionando
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-SEARCH-001
US-SEARCH-007: Ordenação de Resultados
Como jogador, Quero ordenar resultados de busca, Para encontrar o que preciso mais rápido.
Story Points: 2 | Prioridade: Média
Critérios de Aceite
Scenario: Ordenar por distância
Given eu tenho resultados de busca
When eu seleciono "Ordenar por: Distância"
Then resultados devem ser ordenados do mais próximo ao mais distante
Scenario: Ordenar por avaliação
Given eu seleciono "Ordenar por: Avaliação"
Then resultados devem mostrar melhores avaliações primeiro
Scenario: Ordenar por preço
Given eu seleciono "Ordenar por: Preço"
Then resultados devem mostrar mais baratos primeiroDefinition of Done
- [ ] Ordenação implementada
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-SEARCH-001
US-SEARCH-008: Sugestões Personalizadas
Como jogador frequente, Quero receber sugestões personalizadas, Para descobrir novas arenas baseadas no meu perfil.
Story Points: 5 | Prioridade: Baixa
Critérios de Aceite
Scenario: Sugestões baseadas em histórico
Given eu frequento arenas de Beach Tennis
When eu acesso "Descobrir"
Then devo ver sugestões de arenas de Beach Tennis
And que ainda não visitei
Scenario: Sugestões próximas
Given minha localização habitual é Zona Sul
Then sugestões devem priorizar Zona Sul
E arenas com boas avaliaçõesDefinition of Done
- [ ] Algoritmo de recomendação
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-SEARCH-001
- Histórico de reservas
Epic 3: Reservas
US-BOOK-001: Criar Reserva Simples
Como jogador, Quero reservar uma quadra, Para jogar em um horário específico.
Story Points: 8 | Prioridade: Alta
Critérios de Aceite
Scenario: Reserva bem-sucedida
Given eu estou logado
And eu encontrei horário disponível
When eu clico em "Reservar"
And eu confirmo os dados
And eu efetuo pagamento com sucesso
Then reserva deve ser criada
And status deve ser "Confirmada"
And eu devo receber confirmação por email e push
And horário deve ficar bloqueado
Scenario: Verificar detalhes antes de confirmar
Given eu selecionei um horário
Then devo ver resumo com:
| Campo | Valor |
| Data | 15/03/2024 |
| Horário | 18:00 - 19:00 |
| Quadra | Quadra 1 |
| Valor | R$ 120,00 |
Scenario: Horário ficou indisponível
Given eu selecionei um horário
But outro usuário reservou antes
When eu confirmo
Then devo ver erro "Horário não mais disponível"
And sugestões de horários alternativos
Scenario: Pagamento falhou
Given eu confirmei a reserva
When o pagamento é recusado
Then reserva não deve ser criada
And eu devo ver erro do pagamento
And poder tentar outro métodoDefinition of Done
- [ ] Fluxo de reserva completo
- [ ] Integração com pagamento
- [ ] Notificações funcionando
- [ ] Concorrência tratada
- [ ] Testes E2E passando
- [ ] Code review aprovado
Dependências
- US-SEARCH-003
- US-PAY-001
US-BOOK-002: Cancelar Reserva
Como jogador com reserva, Quero cancelar minha reserva, Para liberar o horário caso não possa comparecer.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Cancelamento com reembolso total
Given eu tenho reserva para daqui a 48 horas
When eu acesso "Minhas Reservas"
And eu clico em "Cancelar"
Then devo ver "Reembolso: 100%"
When eu confirmo
Then reserva deve ser cancelada
And reembolso deve ser processado
And horário deve ficar disponível
Scenario: Cancelamento com reembolso parcial
Given eu tenho reserva para daqui a 12 horas
When eu cancelo
Then devo ver "Reembolso: 50%"
And aviso sobre política
Scenario: Cancelamento sem reembolso
Given eu tenho reserva para daqui a 1 hora
When eu cancelo
Then devo ver "Reembolso: 0%"
And confirmação clara que não haverá reembolso
Scenario: Cancelar reserva recorrente
Given eu tenho reserva recorrente
When eu cancelo
Then devo escolher:
| Opção |
| Apenas esta |
| Esta e futuras |
| Todas |Definition of Done
- [ ] Políticas de cancelamento
- [ ] Reembolso automático
- [ ] Notificações funcionando
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-BOOK-001
US-BOOK-003: Fazer Check-in
Como jogador que chegou na arena, Quero fazer check-in, Para confirmar minha presença.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Check-in pelo app (geolocalização)
Given eu tenho reserva agora
And eu estou a menos de 100m da arena
When eu acesso a reserva
And eu clico em "Check-in"
Then check-in deve ser registrado
And status deve mudar para "Em andamento"
Scenario: Check-in por QR Code
Given eu estou na arena
When eu escaneio QR code da quadra
Then check-in deve ser registrado
Scenario: Fora da área de check-in
Given eu estou longe da arena
When eu tento fazer check-in
Then devo ver erro "Você precisa estar na arena"
And opção de check-in manual com recepção
Scenario: Check-in antecipado
Given faltam 30 minutos para minha reserva
When eu tento fazer check-in
Then devo ver "Check-in disponível em 15 minutos"Definition of Done
- [ ] Geolocalização funcionando
- [ ] QR Code funcionando
- [ ] Validação de tempo
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-BOOK-001
US-BOOK-004: Reagendar Reserva
Como jogador que precisa mudar data, Quero reagendar minha reserva, Para não perder o valor pago.
Story Points: 5 | Prioridade: Média
Critérios de Aceite
Scenario: Reagendamento bem-sucedido
Given eu tenho reserva futura
When eu clico em "Reagendar"
And eu seleciono novo horário disponível
Then reserva deve ser movida
And horário antigo liberado
And eu devo receber confirmação
Scenario: Diferença de preço (mais caro)
Given novo horário custa mais
When eu reagendo
Then devo ver diferença a pagar
And devo efetuar pagamento adicional
Scenario: Diferença de preço (mais barato)
Given novo horário custa menos
When eu reagendo
Then diferença deve ir para minha wallet
Ou reembolsada conforme configuração
Scenario: Fora do prazo de reagendamento
Given faltam menos de 2 horas
When eu tento reagendar
Then devo ver "Reagendamento não disponível"
And sugestão de cancelarDefinition of Done
- [ ] Reagendamento funcionando
- [ ] Diferença de preço tratada
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-BOOK-001
US-BOOK-005: Reserva Recorrente
Como jogador regular, Quero criar reserva recorrente, Para garantir meu horário fixo.
Story Points: 8 | Prioridade: Média
Critérios de Aceite
Scenario: Criar reserva semanal
Given eu estou criando reserva
When eu ativo "Repetir semanalmente"
And eu defino 8 semanas
Then devo ver 8 datas no resumo
And valor total calculado
And desconto de mensalista aplicado (se houver)
Scenario: Conflito em algumas datas
Given algumas datas já estão ocupadas
Then devo ver quais datas têm conflito
And poder escolher:
| Opção |
| Pular datas com conflito |
| Escolher horário alternativo |
| Cancelar |
Scenario: Cancelar uma ocorrência
Given eu tenho reserva recorrente
When eu cancelo uma data específica
Then apenas aquela data é cancelada
And demais permanecem
Scenario: Cancelar todas as futuras
Given eu quero parar a recorrência
When eu cancelo "Esta e futuras"
Then todas as futuras devem ser canceladas
E reembolso proporcional processadoDefinition of Done
- [ ] Recorrência implementada
- [ ] Tratamento de conflitos
- [ ] Cancelamento parcial
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-BOOK-001
US-BOOK-006: Adicionar Participantes
Como organizador de jogo, Quero adicionar participantes à reserva, Para informá-los sobre o jogo.
Story Points: 3 | Prioridade: Média
Critérios de Aceite
Scenario: Adicionar participante por email
Given eu estou editando reserva
When eu clico em "Adicionar participante"
And eu informo email "amigo@email.com"
Then convite deve ser enviado
And participante aparece como "Pendente"
Scenario: Participante confirma
Given participante recebeu convite
When ele clica em "Confirmar"
Then status muda para "Confirmado"
And organizador é notificado
Scenario: Participante recusa
Given participante recebeu convite
When ele clica em "Recusar"
Then status muda para "Recusado"
And organizador é notificado
Scenario: Remover participante
Given há participante na reserva
When eu clico em "Remover"
Then participante é removido
E ele recebe notificaçãoDefinition of Done
- [ ] Convites por email
- [ ] Status de confirmação
- [ ] Notificações
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-BOOK-001
US-BOOK-007: Lista de Espera
Como jogador interessado em horário ocupado, Quero entrar na lista de espera, Para ser notificado se vagar.
Story Points: 5 | Prioridade: Média
Critérios de Aceite
Scenario: Entrar na lista de espera
Given horário que eu quero está ocupado
When eu clico em "Entrar na lista de espera"
Then eu devo ser adicionado à lista
And ver minha posição
And receber confirmação
Scenario: Vaga liberada
Given eu estou na lista
When o horário é cancelado
Then eu devo receber notificação push imediata
And ter 15 minutos para confirmar
And ver opção de pagamento rápido
Scenario: Confirmar vaga
Given eu fui notificado de vaga
When eu clico em "Reservar agora"
And eu pago
Then reserva é criada
And sou removido da lista
Scenario: Perder a vaga (timeout)
Given eu fui notificado de vaga
When não respondo em 15 minutos
Then próximo da lista é notificado
E eu perco a prioridadeDefinition of Done
- [ ] Lista de espera por horário
- [ ] Notificação em tempo real
- [ ] Timeout implementado
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-BOOK-001
US-BOOK-008: Ver Minhas Reservas
Como jogador, Quero ver minhas reservas, Para acompanhar meus agendamentos.
Story Points: 3 | Prioridade: Alta
Critérios de Aceite
Scenario: Ver reservas futuras
Given eu tenho reservas futuras
When eu acesso "Minhas Reservas"
Then devo ver lista ordenada por data
And cada uma mostra: data, hora, arena, quadra, status
And botões de ação (cancelar, reagendar, check-in)
Scenario: Ver histórico
Given eu tenho reservas passadas
When eu acesso aba "Histórico"
Then devo ver reservas anteriores
And cada uma mostra status final
Scenario: Filtrar reservas
Given eu tenho muitas reservas
When eu filtro por arena ou período
Then lista deve ser filtrada
Scenario: Ver detalhes
Given eu clico em uma reserva
Then devo ver detalhes completos
Including participantes, pagamento, históricoDefinition of Done
- [ ] Lista de reservas
- [ ] Histórico
- [ ] Filtros
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-BOOK-001
US-BOOK-009: Lembrete de Reserva
Como jogador, Quero receber lembretes de reserva, Para não esquecer meus jogos.
Story Points: 3 | Prioridade: Alta
Critérios de Aceite
Scenario: Lembrete 24 horas antes
Given eu tenho reserva amanhã
When faltam 24 horas
Then eu devo receber push e email
And mensagem contém: data, hora, local, QR code
Scenario: Lembrete 2 horas antes
Given eu tenho reserva em 2 horas
Then eu devo receber push
And com ação rápida para "Ver reserva"
Scenario: Configurar lembretes
Given eu acesso configurações
Then posso definir quais lembretes receber
And por qual canal (push, email, SMS)Definition of Done
- [ ] Lembretes agendados
- [ ] Múltiplos canais
- [ ] Configurável
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-BOOK-001
- US-NOTIF-001
US-BOOK-010: Reserva Walk-in
Como recepcionista, Quero criar reserva para cliente no local, Para atender walk-ins.
Story Points: 3 | Prioridade: Média
Critérios de Aceite
Scenario: Criar reserva walk-in
Given eu sou recepcionista
And cliente está no balcão
When eu acesso agenda
And eu clico em horário disponível
And eu busco/cadastro o cliente
And eu marco como "Walk-in"
Then reserva é criada iniciando agora
And pagamento pode ser no local
Scenario: Cliente não cadastrado
Given cliente não tem conta
When eu crio reserva walk-in
Then posso criar cadastro simplificado
Or reservar como "Cliente avulso"Definition of Done
- [ ] Fluxo de recepção
- [ ] Cadastro simplificado
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-BOOK-001
US-BOOK-011: Reserva para Aula
Como instrutor, Quero criar horário de aula, Para que alunos possam se inscrever.
Story Points: 5 | Prioridade: Média
Critérios de Aceite
Scenario: Criar aula
Given eu sou instrutor da arena
When eu crio uma aula
And eu defino: horário, quadra, vagas, preço por aluno
Then aula fica disponível para inscrição
And aparece na agenda da arena
Scenario: Aluno se inscreve
Given existe aula com vagas
When aluno clica em "Inscrever"
And paga o valor
Then ele é inscrito na aula
E recebe confirmação
Scenario: Aula lotada
Given aula atingiu limite de vagas
Then não aceita mais inscrições
E mostra "Aula lotada"
E opção de lista de espera
Scenario: Cancelar aula
Given eu sou instrutor
When eu cancelo a aula
Then todos os alunos são notificados
E reembolsos são processadosDefinition of Done
- [ ] Gestão de aulas
- [ ] Inscrição de alunos
- [ ] Split de pagamento (arena/instrutor)
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-BOOK-001
- US-PAY-006
US-BOOK-012: Sincronizar com Calendário
Como jogador organizado, Quero sincronizar reservas com meu calendário, Para não ter conflitos de agenda.
Story Points: 3 | Prioridade: Baixa
Critérios de Aceite
Scenario: Exportar para Google Calendar
Given eu tenho reserva confirmada
When eu clico em "Adicionar ao calendário"
Then evento é criado no Google Calendar
Com data, hora, local e link da reserva
Scenario: Sincronização automática
Given eu conectei minha conta Google
Then todas as novas reservas vão para o calendário
E cancelamentos removem o eventoDefinition of Done
- [ ] Integração Google Calendar
- [ ] Exportação iCal
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-BOOK-001
Epic 4: Fila e Alocação Dinâmica
US-QUEUE-001: Entrar na Fila
Como jogador na arena, Quero entrar na fila de espera, Para jogar quando tiver vaga.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Entrar na fila com sucesso
Given eu fiz check-in na arena
And a quadra que quero está ocupada
When eu clico em "Entrar na fila"
Then eu devo ser adicionado à fila
And ver minha posição (ex: "3º da fila")
And tempo estimado de espera
Scenario: Entrar na fila com parceiro
Given eu quero jogar em dupla
When eu entro na fila
And adiciono meu parceiro (que também fez check-in)
Then entramos juntos como time
E somos chamados juntos
Scenario: Já está na fila
Given eu já estou na fila de uma quadra
When eu tento entrar novamente
Then devo ver "Você já está na fila"
Scenario: Sem check-in
Given eu não fiz check-in
When eu tento entrar na fila
Then devo ver "Faça check-in primeiro"Definition of Done
- [ ] Fila por quadra
- [ ] Times/duplas
- [ ] Tempo estimado
- [ ] WebSocket para atualizações
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-BOOK-003
US-QUEUE-002: Visualizar Fila em Tempo Real
Como jogador na fila, Quero ver a fila em tempo real, Para saber quando será minha vez.
Story Points: 3 | Prioridade: Alta
Critérios de Aceite
Scenario: Ver fila atualizada
Given eu estou visualizando a fila
When alguém entra ou sai
Then a lista deve atualizar automaticamente
And minha posição deve atualizar
Scenario: Ver quem está jogando
Given eu vejo a fila de uma quadra
Then devo ver quem está jogando atualmente
E há quanto tempo estão jogando
Scenario: Tempo estimado
Given há 3 pessoas na minha frente
Then devo ver tempo estimado de espera
E atualizar conforme a fila andaDefinition of Done
- [ ] WebSocket funcionando
- [ ] Tempo estimado
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-QUEUE-001
US-QUEUE-003: Ser Chamado para Jogar
Como próximo da fila, Quero ser chamado quando for minha vez, Para entrar na quadra.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Receber chamada
Given eu sou o próximo da fila
When a partida atual termina
Then eu devo receber notificação push
E vibração no celular
E ver popup no app "Sua vez! Aceitar?"
Scenario: Aceitar chamada
Given eu fui chamado
When eu clico em "Aceitar"
Then eu devo ir para a quadra
And partida deve iniciar
Scenario: Recusar chamada
Given eu fui chamado
When eu clico em "Recusar"
Then eu devo ir para o final da fila
And o próximo deve ser chamado
Scenario: Timeout de resposta
Given eu fui chamado
When não respondo em 2 minutos
Then eu perco a vez
And vou para o final da fila
And próximo é chamadoDefinition of Done
- [ ] Push notification
- [ ] Timeout de 2 min
- [ ] Fallback para próximo
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-QUEUE-001
- US-NOTIF-001
US-QUEUE-004: Sair da Fila
Como jogador na fila, Quero poder sair da fila, Para desistir de jogar.
Story Points: 2 | Prioridade: Alta
Critérios de Aceite
Scenario: Sair voluntariamente
Given eu estou na fila
When eu clico em "Sair da fila"
E confirmo
Then eu sou removido
And posições são atualizadas
Scenario: Sair da arena
Given eu estou na fila
When eu faço checkout da arena
Then sou automaticamente removido das filas
Scenario: Inatividade
Given eu não interagi com o app por 30 minutos
Then sou removido da fila
E recebo notificaçãoDefinition of Done
- [ ] Saída voluntária
- [ ] Saída automática por checkout
- [ ] Inatividade detectada
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-QUEUE-001
US-QUEUE-005: Sistema Ganha-Fica
Como vencedor de uma partida, Quero continuar na quadra, Para jogar contra o próximo desafiante.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Vencedor permanece
Given a partida terminou
And meu time venceu
And não atingimos o limite de vitórias
When o resultado é registrado
Then meu time permanece na quadra
E perdedores vão para o final da fila
E próximo desafiante é chamado
Scenario: Limite de vitórias atingido
Given meu time venceu 3 partidas seguidas
When vencemos a 4ª partida
Then mesmo vencendo, saímos da quadra
E vemos "Limite de vitórias! Parabéns!"
E vamos para o final da fila
E os 2 próximos jogam
Scenario: Perdedor vai para a fila
Given meu time perdeu
Then vamos para o final da fila
E podemos escolher ir para outra quadraDefinition of Done
- [ ] Lógica ganha-fica
- [ ] Limite configurável
- [ ] Histórico de partidas
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-QUEUE-003
US-QUEUE-006: Registrar Resultado
Como jogador, Quero registrar o resultado da partida, Para determinar o vencedor.
Story Points: 3 | Prioridade: Alta
Critérios de Aceite
Scenario: Registrar placar
Given a partida está em andamento
When um jogador registra "6-4"
Then o adversário deve confirmar
When ambos confirmam
Then resultado é registrado
E vencedor é determinado
E estatísticas atualizadas
Scenario: Divergência de placar
Given jogador 1 registra "6-4"
And jogador 2 registra "4-6"
Then conflito é detectado
E recepção é notificada para validar
Scenario: Desistência (WO)
Given um time desiste
When clica em "Desistir"
Then o outro time vence por WO
E resultado é registradoDefinition of Done
- [ ] Registro de placar
- [ ] Confirmação dupla
- [ ] Tratamento de conflitos
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-QUEUE-005
US-QUEUE-007: Dashboard da Quadra (Staff)
Como staff da arena, Quero ver status de todas as quadras, Para gerenciar filas e jogos.
Story Points: 5 | Prioridade: Média
Critérios de Aceite
Scenario: Ver todas as quadras
Given eu sou recepcionista
When eu acesso o dashboard
Then devo ver todas as quadras
E status de cada uma (livre, ocupada, manutenção)
E quem está jogando
E tamanho da fila
Scenario: Intervenção manual
Given há problema em uma partida
When eu clico na quadra
Then posso: encerrar partida, chamar próximo, bloquear quadra
Scenario: Gerenciar fila
Given há fila em uma quadra
Então posso: reordenar, remover jogadoresDefinition of Done
- [ ] Dashboard em tempo real
- [ ] Ações de intervenção
- [ ] Gestão de fila
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-QUEUE-001
US-QUEUE-008: Estatísticas de Partida
Como jogador, Quero ver estatísticas das minhas partidas, Para acompanhar meu desempenho.
Story Points: 3 | Prioridade: Média
Critérios de Aceite
Scenario: Ver histórico de partidas
Given eu joguei várias partidas
When eu acesso "Minhas Partidas"
Then devo ver lista de partidas
E cada uma mostra: data, adversários, placar, resultado
Scenario: Ver estatísticas gerais
Given eu tenho histórico de partidas
Then devo ver:
| Estatística | Valor |
| Total de jogos | 42 |
| Vitórias | 28 |
| Derrotas | 14 |
| Win rate | 67% |
Scenario: Filtrar por período/esporte
Given eu tenho partidas em diferentes esportes
When eu filtro por "Beach Tennis" no último mês
Then devo ver apenas partidas filtradasDefinition of Done
- [ ] Histórico de partidas
- [ ] Estatísticas calculadas
- [ ] Filtros funcionando
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-QUEUE-006
US-QUEUE-009: Tempo Máximo de Jogo
Como arena, Quero limitar tempo de jogo, Para garantir rotatividade.
Story Points: 3 | Prioridade: Média
Critérios de Aceite
Scenario: Alerta de tempo
Given configuração de 30 minutos máximo
When partida atinge 25 minutos
Then jogadores recebem alerta "5 minutos restantes"
Scenario: Tempo esgotado
Given partida atingiu 30 minutos
Then jogadores veem "Tempo esgotado"
E recepção é notificada
E podem finalizar partida atual
Scenario: Extensão de tempo
Given fila está vazia
Então tempo pode ser estendido automaticamente
Ou jogadores podem solicitar extensãoDefinition of Done
- [ ] Timer de partida
- [ ] Alertas
- [ ] Extensões
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-QUEUE-005
US-QUEUE-010: Balanceamento de Times
Como arena, Quero sugerir times balanceados, Para jogos mais equilibrados.
Story Points: 5 | Prioridade: Baixa
Critérios de Aceite
Scenario: Sugestão de times
Given 4 jogadores prontos para jogar
When sistema sugere times
Then considera skill rating de cada um
E times devem ter diferença máxima de 100 pontos
E mostra sugestão para jogadores aceitarem
Scenario: Aceitar sugestão
Given sugestão foi apresentada
When todos aceitam
Then times são formados conforme sugestão
Scenario: Recusar sugestão
Given sugestão foi apresentada
When alguém recusa
Then jogadores escolhem times manualmenteDefinition of Done
- [ ] Algoritmo de balanceamento
- [ ] UI de sugestão
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-QUEUE-001
- US-PLAYER-003
Epic 5: Pagamentos
US-PAY-001: Pagar com PIX
Como cliente, Quero pagar com PIX, Para ter confirmação instantânea.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Gerar PIX
Given eu estou no checkout
When eu seleciono "PIX"
Then devo ver QR Code
E chave PIX copia-e-cola
E valor e beneficiário
E prazo de 30 minutos
Scenario: Pagamento confirmado
Given eu paguei o PIX
When o banco confirma (webhook)
Then pagamento é registrado
E reserva é confirmada
E recibo é enviado
Scenario: PIX expirado
Given eu não paguei em 30 minutos
Then PIX expira
E reserva é cancelada
E horário é liberadoDefinition of Done
- [ ] Integração com gateway (Stripe/MP)
- [ ] Webhook de confirmação
- [ ] Expiração automática
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- Gateway de pagamento
US-PAY-002: Pagar com Cartão
Como cliente, Quero pagar com cartão de crédito/débito, Para ter flexibilidade de parcelamento.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Pagamento aprovado
Given eu estou no checkout
When eu seleciono "Cartão de crédito"
E preencho dados válidos
E seleciono parcelamento (se > R$100)
E clico em "Pagar"
Then pagamento deve ser processado
E reserva confirmada
Scenario: Pagamento recusado
Given cartão foi recusado
Then devo ver mensagem de erro
E poder tentar outro cartão ou método
Scenario: Salvar cartão para futuro
Given eu marco "Salvar para próximas compras"
Then cartão é tokenizado
E aparecem últimos 4 dígitos nas próximas comprasDefinition of Done
- [ ] Integração com gateway
- [ ] Tokenização de cartão
- [ ] Parcelamento
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- Gateway de pagamento
US-PAY-003: Solicitar Reembolso
Como cliente que cancelou reserva, Quero receber reembolso, Para recuperar meu dinheiro.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Reembolso automático PIX
Given eu cancelei reserva com direito a reembolso
And paguei com PIX
Then reembolso é processado em até 24h
E recebo notificação quando creditado
Scenario: Reembolso automático cartão
Given eu cancelei e paguei com cartão
Then reembolso aparece em até 2 faturas
E recebo notificação
Scenario: Reembolso parcial
Given política de 50% de reembolso
Then apenas 50% é reembolsado
E vejo breakdown no extratoDefinition of Done
- [ ] Reembolso automático
- [ ] Múltiplos métodos
- [ ] Notificações
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-PAY-001
- US-PAY-002
US-PAY-004: Ver Extrato
Como cliente, Quero ver meu histórico financeiro, Para acompanhar gastos.
Story Points: 3 | Prioridade: Média
Critérios de Aceite
Scenario: Ver transações
Given eu acesso "Financeiro"
Then devo ver lista de transações
E cada uma mostra: data, descrição, valor, status
E posso filtrar por período
Scenario: Ver detalhes
Given eu clico em uma transação
Then vejo detalhes completos
E comprovante/recibo
Scenario: Exportar
Given eu quero exportar
When eu clico em "Exportar"
Then posso baixar PDF ou ExcelDefinition of Done
- [ ] Lista de transações
- [ ] Filtros
- [ ] Exportação
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-PAY-001
US-PAY-005: Usar Carteira (Wallet)
Como cliente frequente, Quero ter créditos pré-pagos, Para pagar mais rápido.
Story Points: 5 | Prioridade: Média
Critérios de Aceite
Scenario: Adicionar créditos
Given eu acesso "Minha Carteira"
When eu clico em "Adicionar créditos"
E seleciono valor (R$100, R$200, R$500)
E pago
Then créditos aparecem no saldo
Scenario: Pagar com saldo
Given eu tenho saldo de R$150
And reserva custa R$100
When eu seleciono "Pagar com saldo"
Then reserva é paga
E saldo atualiza para R$50
Scenario: Saldo insuficiente
Given eu tenho saldo de R$50
And reserva custa R$100
Then posso pagar R$50 do saldo
E diferença com outro métodoDefinition of Done
- [ ] Wallet implementada
- [ ] Adicionar créditos
- [ ] Pagar com saldo
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-PAY-001
US-PAY-006: Split Payment (Arena/Instrutor)
Como arena com instrutores, Quero dividir pagamento automaticamente, Para facilitar repasses.
Story Points: 8 | Prioridade: Média
Critérios de Aceite
Scenario: Aula com split
Given aula custa R$100
And split é 70% arena, 30% instrutor
When aluno paga
Then R$70 vai para conta da arena
E R$30 para conta do instrutor
E ambos veem no extrato
Scenario: Configurar splits
Given eu sou arena owner
When eu configuro instrutor
Então defino percentual de split
E datas de repasse
Scenario: Relatório de repasses
Given eu sou instrutor
When acesso "Meus Ganhos"
Então vejo: total pendente, histórico de repassesDefinition of Done
- [ ] Split payment configurado
- [ ] Repasses automáticos
- [ ] Relatórios
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- Gateway que suporte split
US-PAY-007: Aplicar Cupom
Como cliente, Quero usar cupom de desconto, Para pagar menos.
Story Points: 3 | Prioridade: Média
Critérios de Aceite
Scenario: Cupom válido
Given existe cupom "PROMO20" de 20% off
When eu aplico no checkout
Then desconto é calculado
E novo valor exibido
Scenario: Cupom inválido
Given eu digito cupom inexistente
Then vejo "Cupom inválido"
Scenario: Cupom expirado
Given cupom expirou
Then vejo "Cupom expirado"
Scenario: Limite de uso atingido
Given cupom já foi usado X vezes
Then vejo "Limite de uso atingido"Definition of Done
- [ ] Sistema de cupons
- [ ] Validações
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-PAY-001
Epic 6: Gamificação
US-GAME-001: Ganhar XP
Como jogador ativo, Quero ganhar XP por jogar, Para progredir na plataforma.
Story Points: 3 | Prioridade: Média
Critérios de Aceite
Scenario: XP por partida
Given eu joguei uma partida
When a partida termina
Then devo ganhar 50 XP base
E bônus de 25 XP se venci
E ver animação de XP
Scenario: XP bônus primeiro jogo do dia
Given é meu primeiro jogo hoje
Then ganho 20 XP extra
Scenario: XP por streak
Given eu joguei 5 dias seguidos
Then ganho 50 XP extra de streakDefinition of Done
- [ ] Sistema de XP
- [ ] Bônus calculados
- [ ] Animações
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-QUEUE-006
US-GAME-002: Subir de Nível
Como jogador, Quero subir de nível, Para desbloquear benefícios.
Story Points: 5 | Prioridade: Média
Critérios de Aceite
Scenario: Level up
Given eu preciso de 100 XP para nível 5
And eu tenho 90 XP
When eu ganho 20 XP
Then devo subir para nível 5
E ver animação de level up
E receber notificação
E desbloquear benefícios do nível
Scenario: Ver progresso
Given eu estou no nível 4
Then devo ver:
- Nível atual
- XP atual / XP para próximo nível
- Barra de progresso
- Benefícios desbloqueadosDefinition of Done
- [ ] Sistema de níveis
- [ ] Benefícios por nível
- [ ] Animações
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-GAME-001
US-GAME-003: Conquistar Achievement
Como jogador, Quero desbloquear conquistas, Para ter reconhecimento.
Story Points: 5 | Prioridade: Média
Critérios de Aceite
Scenario: Desbloquear conquista
Given existe conquista "10 Vitórias"
When eu alcanço minha 10ª vitória
Then conquista é desbloqueada
E vejo popup "Conquista desbloqueada!"
E ganho XP bônus
E aparece no meu perfil
Scenario: Ver conquistas
Given eu acesso "Conquistas"
Then vejo conquistas desbloqueadas
E conquistas bloqueadas (com progresso)
Scenario: Conquista rara
Given existe conquista "Lenda" (100 vitórias)
Then deve ter visual diferenciado (dourado)
E maior recompensa de XPDefinition of Done
- [ ] Sistema de conquistas
- [ ] Tipos/raridades
- [ ] Perfil mostra conquistas
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-GAME-001
US-GAME-004: Manter Streak
Como jogador regular, Quero manter meu streak, Para ganhar bônus.
Story Points: 3 | Prioridade: Média
Critérios de Aceite
Scenario: Aumentar streak
Given eu joguei ontem
When eu jogo hoje
Then meu streak aumenta (+1)
E vejo animação
E ganho XP bônus
Scenario: Perder streak
Given eu não joguei por 2 dias
Then meu streak zera
E vejo notificação "Streak perdido"
Scenario: Proteger streak
Given eu tenho item "Proteção de Streak"
And não joguei ontem
Then meu streak não zera
E item é consumidoDefinition of Done
- [ ] Sistema de streak
- [ ] Alertas de streak em risco
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-GAME-001
US-GAME-005: Ver Rankings
Como jogador competitivo, Quero ver rankings, Para comparar com outros jogadores.
Story Points: 3 | Prioridade: Média
Critérios de Aceite
Scenario: Ver ranking geral
Given eu acesso "Rankings"
Then vejo top jogadores por XP
E minha posição destacada
E posso ver mais (scroll infinito)
Scenario: Filtrar ranking
Given eu quero ver ranking de Beach Tennis
When eu filtro por esporte
Then vejo ranking apenas desse esporte
Scenario: Ranking da arena
Given eu frequento arena específica
Then posso ver ranking só dessa arenaDefinition of Done
- [ ] Rankings múltiplos
- [ ] Filtros
- [ ] Minha posição
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-GAME-001
Epic 7: Notificações
US-NOTIF-001: Receber Push Notification
Como usuário, Quero receber notificações push, Para ser avisado de eventos importantes.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Receber push de confirmação
Given eu fiz uma reserva
Then devo receber push "Reserva confirmada!"
E push deve ter ação rápida para ver detalhes
Scenario: Receber lembrete
Given eu tenho reserva em 1 hora
Then devo receber push "Seu jogo é em 1 hora"
E push deve ter endereço e QR code
Scenario: Chamada na fila
Given é minha vez na fila
Then devo receber push alta prioridade
E vibração
E som diferenciadoDefinition of Done
- [ ] Push iOS (APNs)
- [ ] Push Android (FCM)
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- Firebase configurado
US-NOTIF-002: Configurar Preferências
Como usuário, Quero configurar minhas notificações, Para receber apenas o que me interessa.
Story Points: 3 | Prioridade: Média
Critérios de Aceite
Scenario: Configurar tipos
Given eu acesso Configurações > Notificações
Then posso habilitar/desabilitar por tipo:
| Tipo | Default |
| Reservas | On |
| Lembretes | On |
| Marketing | Off |
| Social | On |
Scenario: Configurar canais
Given eu configuro notificações
Then posso escolher canal por tipo:
| Canal | Opções |
| Push | On/Off |
| Email | On/Off |
| SMS | On/Off |Definition of Done
- [ ] Preferências salvas
- [ ] Respeitadas no envio
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-NOTIF-001
US-NOTIF-003: Ver Central de Notificações
Como usuário, Quero ver histórico de notificações, Para não perder nada importante.
Story Points: 3 | Prioridade: Média
Critérios de Aceite
Scenario: Ver notificações
Given eu clico no ícone de sino
Then vejo lista de notificações recentes
E não lidas em destaque
E badge com contagem
Scenario: Marcar como lida
Given eu clico em uma notificação
Then ela é marcada como lida
E badge atualiza
Scenario: Ação da notificação
Given notificação tem ação (ex: Ver reserva)
When eu clico
Then sou levado à tela correspondenteDefinition of Done
- [ ] Central de notificações
- [ ] Badge de contagem
- [ ] Ações
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-NOTIF-001
Epic 8: Gestão de Arena (Admin)
US-ARENA-001: Cadastrar Arena
Como novo cliente, Quero cadastrar minha arena, Para começar a usar o sistema.
Story Points: 8 | Prioridade: Alta
Critérios de Aceite
Scenario: Cadastro completo
Given eu sou novo arena owner
When eu preencho dados da arena
| Campo | Valor |
| Nome | Arena Beach Sports |
| CNPJ | 12.345.678/0001-00 |
| Endereço | Rua das Quadras, 100 |
| Telefone | (11) 99999-9999 |
And eu faço upload do logo
Then arena é criada em status "Pendente"
E equipe é notificada para validar CNPJ
Scenario: CNPJ inválido
Given eu informo CNPJ inválido
Then vejo erro "CNPJ inválido"
Scenario: Aprovação
Given arena está pendente
When equipe aprova
Then status muda para "Ativa"
E eu recebo email de boas-vindasDefinition of Done
- [ ] Formulário de cadastro
- [ ] Validação de CNPJ
- [ ] Workflow de aprovação
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-AUTH-001
US-ARENA-002: Configurar Quadras
Como gerente de arena, Quero cadastrar quadras, Para disponibilizar para reserva.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Adicionar quadra
Given eu acesso "Quadras" > "Nova Quadra"
When eu preencho:
| Campo | Valor |
| Nome | Quadra 1 |
| Esporte | Beach Tennis |
| Coberta | Não |
| Iluminação | Sim |
| Max jogadores | 4 |
Then quadra é criada
E aparece na agenda
Scenario: Editar quadra
Given existe uma quadra
When eu altero o preço
Then preço é atualizado
E novas reservas usam novo preço
Scenario: Desativar quadra
Given quadra está em manutenção
When eu desativo
Then ela não aparece para reserva
E reservas futuras são notificadasDefinition of Done
- [ ] CRUD de quadras
- [ ] Configurações
- [ ] Integração com agenda
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-ARENA-001
US-ARENA-003: Definir Horários
Como gerente de arena, Quero definir horários de funcionamento, Para controlar disponibilidade.
Story Points: 3 | Prioridade: Alta
Critérios de Aceite
Scenario: Configurar horário regular
Given eu acesso "Horários"
When eu defino para cada dia:
| Dia | Abre | Fecha |
| Segunda | 07:00 | 23:00 |
| Sábado | 08:00 | 22:00 |
| Domingo | 08:00 | 18:00 |
Then agenda respeita esses horários
Scenario: Feriado/Dia especial
Given eu cadastro feriado
When eu defino data e horários especiais (ou fechado)
Then agenda se adapta
E reservas conflitantes são notificadas
Scenario: Bloquear período
Given preciso bloquear para evento
When eu crio bloqueio
Then horários ficam indisponíveisDefinition of Done
- [ ] Horários por dia da semana
- [ ] Datas especiais
- [ ] Bloqueios
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-ARENA-001
US-ARENA-004: Gerenciar Equipe
Como dono de arena, Quero gerenciar minha equipe, Para dar acesso ao sistema.
Story Points: 5 | Prioridade: Média
Critérios de Aceite
Scenario: Convidar funcionário
Given eu acesso "Equipe"
When eu convido por email
E defino role (Gerente, Recepcionista, Instrutor)
Then convite é enviado
E pessoa pode acessar com permissões definidas
Scenario: Alterar permissões
Given funcionário está cadastrado
When eu altero role
Then permissões são atualizadas imediatamente
Scenario: Remover acesso
Given funcionário foi desligado
When eu removo da equipe
Then acesso é revogado
E sessões são encerradasDefinition of Done
- [ ] Gestão de equipe
- [ ] Roles e permissões
- [ ] Convites
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-ARENA-001
US-ARENA-005: Configurar Preços
Como gerente de arena, Quero configurar preços, Para monetizar as quadras.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Preço por horário
Given eu configuro preços
Then posso definir diferentes preços:
| Período | Preço/hora |
| Manhã (6-12h) | R$ 80 |
| Tarde (12-18h) | R$ 100 |
| Noite (18-23h) | R$ 120 |
Scenario: Preço fim de semana
Given eu configuro
Then posso ter preços diferentes para sáb/dom
Scenario: Preço por quadra
Given quadras têm tamanhos diferentes
Then posso definir preço por quadraDefinition of Done
- [ ] Precificação flexível
- [ ] Por horário, dia, quadra
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-ARENA-002
US-ARENA-006: Ver Agenda Geral
Como gerente/recepcionista, Quero ver agenda completa, Para acompanhar reservas.
Story Points: 3 | Prioridade: Alta
Critérios de Aceite
Scenario: Ver dia atual
Given eu acesso a agenda
Then vejo todas as quadras em colunas
E horários em linhas
E reservas nos slots
Scenario: Navegar entre dias
Given eu quero ver amanhã
When eu clico em próximo dia
Then agenda atualiza
Scenario: Ver detalhes da reserva
Given eu clico em uma reserva
Then vejo: cliente, participantes, valor, status
E ações disponíveisDefinition of Done
- [ ] Agenda visual
- [ ] Navegação temporal
- [ ] Detalhes de reserva
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-ARENA-002
US-ARENA-007: Dashboard Financeiro
Como dono de arena, Quero ver dashboard financeiro, Para acompanhar faturamento.
Story Points: 5 | Prioridade: Alta
Critérios de Aceite
Scenario: Ver métricas do dia
Given eu acesso dashboard
Then vejo:
| Métrica | Valor |
| Faturamento hoje | R$ 2.500 |
| Reservas hoje | 18 |
| Ocupação | 75% |
Scenario: Ver histórico
Given eu seleciono período (semana/mês)
Then vejo gráfico de evolução
E comparativo com período anterior
Scenario: Breakdown
Given eu quero detalhes
Then vejo faturamento por:
- Quadra
- Tipo de reserva
- Forma de pagamentoDefinition of Done
- [ ] Dashboard financeiro
- [ ] Gráficos
- [ ] Breakdown
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-PAY-001
US-ARENA-008: Relatório de Ocupação
Como gerente de arena, Quero ver relatório de ocupação, Para otimizar operação.
Story Points: 5 | Prioridade: Média
Critérios de Aceite
Scenario: Ocupação geral
Given eu acesso relatório
Then vejo taxa de ocupação por:
- Quadra
- Horário
- Dia da semana
Scenario: Heatmap
Given eu quero visualizar padrões
Then vejo heatmap com horários mais ocupados
Scenario: Exportar
Given eu preciso do relatório
When eu clico exportar
Then baixo PDF ou ExcelDefinition of Done
- [ ] Relatório de ocupação
- [ ] Heatmap visual
- [ ] Exportação
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-ARENA-006
US-ARENA-009: Criar Promoções
Como gerente de arena, Quero criar promoções, Para atrair mais clientes.
Story Points: 5 | Prioridade: Média
Critérios de Aceite
Scenario: Cupom de desconto
Given eu crio cupom
When eu defino:
| Campo | Valor |
| Código | VERAO20 |
| Desconto | 20% |
| Validade | 30/03/2024 |
| Limite de uso | 100 |
Then cupom fica disponível
Scenario: Promoção horário vazio
Given horários da manhã têm baixa ocupação
When eu crio promoção "Manhã 30% off"
Then desconto é aplicado automaticamente
Scenario: Relatório de promoções
Given eu tenho promoções ativas
Then vejo:
- Uso de cada cupom
- Receita gerada
- ROI da promoçãoDefinition of Done
- [ ] Sistema de promoções
- [ ] Cupons
- [ ] Relatórios
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-PAY-007
US-ARENA-010: Enviar Comunicados
Como gerente de arena, Quero enviar comunicados, Para informar clientes.
Story Points: 3 | Prioridade: Baixa
Critérios de Aceite
Scenario: Enviar para todos
Given eu crio comunicado
When eu seleciono "Todos os clientes"
Then comunicado é enviado por push/email
Scenario: Enviar para segmento
Given eu quero avisar clientes com reserva amanhã
When eu segmento e envio
Then apenas eles recebem
Scenario: Agendar envio
Given eu quero enviar amanhã às 10h
When eu agendo
Then envio ocorre no horário programadoDefinition of Done
- [ ] Envio de comunicados
- [ ] Segmentação
- [ ] Agendamento
- [ ] Testes passando
- [ ] Code review aprovado
Dependências
- US-NOTIF-001
Resumo por Epic
| Epic | User Stories | Story Points | Prioridade |
|---|---|---|---|
| Autenticação | 10 | 32 | Alta |
| Busca | 8 | 29 | Alta |
| Reservas | 12 | 53 | Alta |
| Fila | 10 | 39 | Alta |
| Pagamentos | 7 | 37 | Alta |
| Gamificação | 5 | 19 | Média |
| Notificações | 3 | 11 | Alta |
| Gestão Arena | 10 | 47 | Alta |
| Total | 65 | 267 | - |
Definition of Done Global
Toda User Story deve atender:
- [ ] Código implementado seguindo Clean Architecture
- [ ] Testes unitários com >80% coverage
- [ ] Testes de integração passando
- [ ] Testes E2E para fluxos críticos
- [ ] Code review aprovado por 2 desenvolvedores
- [ ] Sem vulnerabilidades de segurança (Snyk/SonarQube)
- [ ] Documentação atualizada (API, README)
- [ ] Deploy em staging validado
- [ ] Product Owner aprovou funcionamento
- [ ] Métricas de observabilidade configuradas
Documento gerado em: Janeiro 2025Versão: 1.0Status: Aprovado