Ctrl+K
- 1.52 kB initial commit
- 206 Bytes RODEO SCORING & MANAGEMENT SYSTEM — FULL SPEC (FUNCTIONAL) Language/UI: All interface text (menus, buttons, labels, messages) must be in Brazilian Portuguese (pt-BR). English is only for this spec. 0) Roles Admin/Operador Juiz (Judge) — mobile-first interface Painel/GC (read-only overlays for broadcast and LED) 1) Core Entities (minimum fields) Peão (riders): id, nome, cidade, foto_url, ativo Touro (bulls): id, nome, cia, todo, foto_url, ativo Juiz (judges): id, nome, ativo, ordem Configuração (settings): escala (0-25|0-50), incremento (default 0.5), casas_decimais (1|2), separador_decimal=, Rodada (rounds): id, titulo, data, ativa Embate/Montaria (matchup): id, rodada_id, peao_id, touro_id, ordem, status(pendente|finalizada) Nota (score): id, embate_id, juiz_id, nota_peao, nota_touro, created_at, updated_at Conexão Juiz (telemetria): juiz_id, latency_ms, online(bool), updated_at Regra de cálculo: Total_Peão = soma(nota_peao de todos os juízes) Total_Touro = soma(nota_touro de todos os juízes) Total_Geral = Total_Peão + Total_Touro Ranking por dia = soma dos Totais_Gerais por peão/touro ao longo das rodadas selecionadas. Empate: maior nota da última rodada; persistindo, maior nota de peão; depois maior nota de touro. 2) Flows (happy path) Admin cadastra Peões, Touros, Juízes. Cria Rodada (“1ª Rodada”) e define Configuração (escala 0–25 ou 0–50; incremento ex.: 0.5). Executa Sorteio → gera Embates (lista peão ↔ touro em ordem). Cada Juiz abre sua Tela Móvel e lança notas de Peão e Touro em cada embate. Sistema calcula Totais em tempo real; conclui embate → aparece no Painel GC Live. Rankings (Peões e Touros) somando dias/rodadas. Relatórios (PDF/Excel). GC LED (.gol) recebe dimensões e logo → recorte automático. 3) Judges App — 100% Mobile-Optimized (PWA) Responsivo (≤ 400px largura), PWA instalável, touch-first. Grandes alvos de toque (mín. 44x44px). Keypad de notas com botões rápidos (ex.: 0, 0.5, 1.0 … até a escala) + campo numérico. Auto-save e auto-sync (WebSocket). Sem recarregar página. Indicador de conexão: Verde: latency < 150ms e online Amarelo: 150–500ms ou flapping Vermelho: > 500ms ou offline Modo offline: cache local; quando voltar a conexão, sincroniza pendências (FIFO) com resolução por timestamp do servidor. Proteção de embate: cada juiz só edita notas do embate ativo; impedir duplo envio. Rótulos/menus (Português) Menu: Cadastro, Configurações, Sorteio, Rodadas, Notas, Rankings, Relatórios, Painel (GC), LED (.gol) Juiz (móvel): Título: Lançar Notas Campos: Nota do Peão, Nota do Touro Botões: Enviar, Limpar, Próximo Embate Status conexão: Conexão: Boa / Regular / Ruim Avisos: Nota enviada, Sem conexão — salvando offline, Sincronizado 4) Admin UI (web) Cadastros (Peões/Touros/Juízes) com busca e foto. Configurações: escala (0–25 | 0–50), incremento (0.5 por padrão), casas decimais (1 ou 2). Sorteio: sorteio aleatório com opção de fixar pares; exportar lista. Rodadas: criar/ativar/encerrar; definir ordem dos embates (drag & drop). Monitor de Juízes: ver notas em tempo real e saúde da conexão de cada juiz. Auditoria: histórico de alterações de notas (quem, quando, valor antigo/novo). 5) GC/Overlays (dois módulos distintos) 5.1 GC para Transmissão Ao Vivo Mostra: Foto/Nome do Peão, Cidade, Nome do Touro e Cia, Nota do Peão, Nota do Touro, Total Geral. Entrada de dados em tempo real via WebSocket. Tema semelhante ao layout fornecido (imagem enviada), com placeholders dinâmicos. Atalhos: “Mostrar/Esconder notas”, “Próximo embate”. 5.2 GC para Painel de LED — formato .gol Upload de arquivo .gol (template) e logo do evento. Inserção das dimensões do painel (largura x altura em pixels). Recorte automático e posicionamento (fit/cover, alinhamentos: centro/superior/inferior/esq/dir). Margens de segurança configuráveis (safe area %). Export/Preview imediato para validar o recorte antes de enviar ao player. 6) Reports PDF/Excel: Notas por Embate, Resultados da Rodada, Ranking acumulado (Peões/Touros). Filtros: por data/rodada/peão/touro/juiz. 7) Validation Rules Notas respeitam escala e incremento (ex.: 0–50 com passo 0.5). Formato de exibição pt-BR (vírgula como separador decimal). Impedir fechamento do embate sem todas as notas dos juízes ativos. Recalcular rankings após qualquer ajuste. 8) API/Realtime (referência) REST base /api/v1/...; Auth por token. GET/POST: /peoes, /touros, /juizes, /rodadas, /embates, /notas, /rankings, /configuracoes. POST /notas: {embate_id, juiz_id, nota_peao, nota_touro} WS events: nota:created, embate:updated, ranking:updated, gc:update, judge:telemetry LED crop: POST /led/compose → {width, height, logo, templateGol, align, fitMode, safeArea} → retorna preview + arquivo final. 9) Tech Requirements (entregáveis mínimos) Stack sugerida (ou equivalente): Front-end: React/Next ou Vue (PWA para Juízes) Back-end: Node/Express ou NestJS DB: PostgreSQL Realtime: WebSocket (Socket.IO ou nativo) Deploy: ambiente de testes e produção; backup diário. Acessibilidade: contraste AA, foco visível, navegação por teclado. 10) Definition of Done (DoD) — deve passar tudo abaixo Juízes (mobile) conseguem lançar notas online e offline, com sincronização ao voltar a rede. Painel GC Live atualiza em tempo real e exibe layout conforme exemplo. GC LED (.gol): faz upload do template, aplica logo, recorta e posiciona corretamente nas dimensões inseridas; preview idêntico ao arquivo final. Sorteio gera embates válidos e exportáveis; é possível reordenar embates. Ranking soma multi-dias corretamente e desempata conforme regra. Relatórios gerados em PDF e Excel com os filtros. Auditoria registra toda alteração de nota. Validações de escala/incremento impedem valores inválidos. Indicador de conexão mostra cores conforme latência e estado. pt-BR em 100% da interface (menus, botões, mensagens). 11) Test Cases (amostra) TC-01 Lançar nota válida (escala 0–50, passo 0.5) → salvar, refletir no GC Live, ranking atualiza. TC-02 Offline no juiz → lança 3 notas, volta conexão → sincroniza em ordem correta, sem duplicar. TC-03 LED .gol → dimensões 1536×512 px, logo central, safe area 5% → preview = output final. TC-04 Sorteio → todos peões e touros pareados 1:1; reordenar arraste-e-solte preserva pares. TC-05 Trocar escala 0–25 → UI limita keypad e validações; relatórios e ranking recalculados. TC-06 Auditoria → editar nota do juiz 2 registra antes/depois com timestamp. Texto exato de menus/botões (usar pt-BR) Menu principal: Cadastro, Configurações, Sorteio, Rodadas, Notas, Rankings, Relatórios, Painel (GC), LED (.gol) Cadastro (abas): Peões, Touros, Juízes Botões comuns: Salvar, Editar, Excluir, Exportar, Gerar PDF, Gerar Excel, Iniciar Rodada, Encerrar Rodada Juiz (mobile): Lançar Notas, Nota do Peão, Nota do Touro, Enviar, Limpar, Próximo Embate, Conexão: Boa/Regular/Ruim GC Live: Mostrar/Esconder Notas, Próximo Embate LED (.gol): Enviar Template .gol, Enviar Logo, Largura (px), Altura (px), Alinhamento, Ajuste (Cobrir/Ajustar), Margem de Segurança, Gerar Preview - Initial Deployment
- 172 kB colocar funcional para editar e excluir os touros e os peões - Follow Up Deployment
- 388 Bytes initial commit