Sistema de Resultados de Campeonatos (Chronosat)
Tudo que precisa existir e como cada item deve ser
Sistema de Resultados de Campeonatos (Chronosat): Inventário de Artefatos
| Campo | Valor |
|---|---|
| Projeto | Sistema de Resultados de Campeonatos (integração Chronosat) |
| Cliente | Sertões |
| Agência / Autor | Modulareasy |
| Documento | Inventário de Artefatos (companheiro do DRS) |
| Data de revisão | 2026-07-06 |
Documentos da família
- DRS (resultados-chronosat), o que o sistema faz.
- Roadmap de Implementação (resultados-chronosat-roadmap), em que ordem construir e como verificar.
- Jornadas dos Atores (resultados-chronosat-jornadas), como cada papel opera o sistema.
- Plano de Testes (resultados-chronosat-tests), o que validar antes de entregar.
- Questionário de Elicitação (resultados-chronosat-questionario), decisões de negócio já reconciliadas.
Este é o registro de completude: tudo que precisa existir para o sistema funcionar (telas, integrações, entidades, configurações, infraestrutura, mídia) e, para cada item, a ficha do que ele deve ser. Cada artefato aponta o requisito (RF) e a tarefa do Roadmap que o cria; se a tarefa está pronta mas o artefato não bate com a ficha, algo falta. A ordem de construção está no Roadmap; aqui está a lista do que provisionar.
Como usar
Marque um artefato quando ele existir E bater com a Especificação. Cada cartão traz Para que serve, Relacionado com (RF e tarefa do Roadmap), Onde fica e Especificação (a ficha implementável). Fichas grandes (o conector Chronosat e as telas) vivem nos apêndices do DRS e o cartão referencia; fichas pequenas ficam inline.
Redesenho multisite (v2.0): o motor é único e serve N sites por vertical, por configuração (ADR-010), administrados por um painel único (ADR-011). O banco não guarda apenas configuração: guarda também o estado mais recente dos dados de cronometragem de cada evento (RF-INGEST-005), com o payload bruto preservado (ADR-012). A página nunca lê a Chronosat direto, sempre o banco.
Estado do provisionamento (2026-07-07, S83). Vertical Kitesurf no ar (F6-01): quarta vertical criada só por configuração pelo painel (logo próprio por upload, cor verde #88BD23, regra de tripulação solo, home e página de evento próprias); a regra solo exibe um único atleta por competidor na tabela, no pódio e no modal (ART-SCR-01/02/03 exercitados numa 4ª identidade, sem alteração de código), e as modalidades Kite e Wing aparecem com suas próprias categorias, lidas dinamicamente, com dados fictícios de demonstração (a métrica por pontos do Kite e a validação com dado real de terceiros são F6-02). A vertical MTB (F5-01, dupla, rosa #E40E7F) e as anteriores seguem sem regressão. Infraestrutura (F0), motor (F1), site da Series (F2) e painel (F3, incluindo super admin F3-13 a F3-17) completos e no ar. Fase F4 concluída no que é autônomo: múltiplos eventos por vertical (F4-01), Sertões Petrobras por configuração (F4-02, upload de logo/capa por magic-bytes servido em runtime), home global enxuta (ART-SCR-04, F4-03) e endurecimento para o pico ao vivo (F4-05). Prontidão F5-GATE (Bike/dupla) e F6-GATE (Kite/solo e divergência por pontos) já absorvem o primeiro pacote real de cada esporte, com armazenamento não-bloqueante e tabela genérica sinalizada na divergência (ADR-012), delta de produção zero. Fronteiras declaradas, ainda não entregues: a validação com o primeiro pacote de dados REAIS da Bike (F5-02) e do Kite (F6-02, que também traz a métrica por pontos e os rótulos de coluna próprios via adaptador ADR-012) e a publicação no subdomínio com vínculo a partir do site institucional (F4-04, adiado por decisão do cliente para o fim do projeto). Ocultação por origem (RF-REGRA-006), LIGADA (F2-14, S82): a regra de ocultação por origem (_status="O"), pronta na biblioteca desde F2-01, agora está ligada nas rotas públicas (pages.ts): o competidor oculto na origem não aparece na página pública (pódio, tabela, contador, busca, modais), lendo tanto o crews quanto o racetimes; smoke visual real confirmou. Estendida à API interna de leitura em F2-15 (S83): os endpoints públicos da API (/api/events) também não expõem o competidor oculto (o detalhe dele responde não encontrado; o /meta não lista competidor), com o DRS ampliado e republicado. Item de polish mobile conhecido, system-wide, não bloqueia nenhuma fatia: overflow horizontal no mobile do base.css compartilhado (presente também no mockup aprovado); a corrigir num ciclo dedicado.
Tipos de artefato
| Tipo | Contagem | Onde vivem |
|---|---|---|
| Serviço / infraestrutura (ART-INFRA) | 3 | Servidor dedicado, borda, cache |
| API / integração (ART-INT) | 3 | Proxy de leitura da Chronosat e os dois envios de medição |
| Conector / fonte de dados (ART-CONN) | 2 | Conector Chronosat de resultados e de parciais (ficha no Ap.1 do DRS) |
| Tela / página (ART-SCR) | 11 | Home da vertical, home global, página pública do evento, painel de gestão, gestão de contas, auditoria, monitor de status das páginas e textos do site |
| Menu / navegação (ART-NAV) | 1 | Navegação do painel |
| Entidade / tabela (ART-ENT) | 12 | Banco (config das verticais/eventos, estado mais recente dos dados, contas de usuário, auditoria e desvios de textos do site) |
| Parâmetro de configuração (ART-CFG) | 9 | Painel do operador, config e catálogo de textos do site |
| Env var / segredo (ART-ENVV) | 4 | Configuração do servidor e da borda |
| Asset / mídia (ART-MEDIA) | 1 | Marcas e cores das verticais |
| Documento / PDF (ART-DOC) | 1 | PDFs oficiais geridos pelo operador |
| Papel / permissão (ART-ACS) | 2 | Operador da Sertões e acesso às telas de medição |
| Rotina / job (ART-JOB) | 2 | Limpeza diária da série de acessos e importação dos registros do servidor web |
| Conteúdo público (ART-CONT) | 1 | Aviso de medição no rodapé, via catálogo de textos |
Serviço e infraestrutura (ART-INFRA)
Para que serve: hospedar o aplicativo único (proxy, API de leitura e painel), isolado dos demais produtos.
Relacionado com: DRS ADR-006, RNF-ISO-001; tarefa F0-01.
Onde fica: servidor próprio do projeto.
Especificação: máquina de pequeno porte com Ubuntu e contêineres, dedicada a este sistema. Papel: rodar o app único e o banco, que guarda a configuração das verticais e dos eventos E o estado mais recente dos dados de cronometragem de cada evento (DADOS_EVENTO, ART-ENT-07, RF-INGEST-005). Recursos: porte de VPS pequena. Dependências: domínio ligado ao aplicativo (ART-INFRA-02). Persistência: volume para o banco (config e dados). Health check: endpoint de saúde do app, incluindo a gravação das leituras no banco. Escalonamento: o pico ao vivo é absorvido pelo cache do aplicativo e pela capacidade da máquina. Backup: cópia periódica do banco (config e dados persistidos). Isolamento é requisito: não compartilha recursos com outros produtos.
Para que serve: publicar o domínio de resultados com HTTPS válido, roteando o público ao aplicativo único, com o SSL terminado no próprio servidor.
Relacionado com: DRS ADR-007, RNF-ESC-001; tarefa F0-02.
Onde fica: no próprio servidor dedicado (proxy reverso do servidor web).
Especificação: proxy reverso do servidor web para o aplicativo único (127.0.0.1:3000), com certificado automático Let's Encrypt gerido pelo servidor web, e cache de resposta de leitura no próprio servidor. Dependências: servidor dedicado (ART-INFRA-01) e o domínio apontando para a máquina. Health check: certificado válido e roteamento ao aplicativo. Escalonamento: o pico ao vivo é absorvido pelo cache do aplicativo e pela capacidade da máquina; uma camada de rede (CDN) à frente fica como evolução, se o volume exigir. Backup: não aplicável (configuração declarativa).
Para que serve: proteger a Chronosat de excesso de chamadas, limitando a frequência de busca na origem; NÃO é a persistência do resultado (essa é DADOS_EVENTO, ART-ENT-07).
Relacionado com: RF-INGEST-002, RF-INGEST-003, RF-INGEST-005; tarefas F1-02, F1-03, F1-04.
Onde fica: no app do servidor (memória do proxy) mais o cache de resposta do próprio servidor (ART-INFRA-02).
Especificação: cache por chave de arquivo com expiração padrão de 30 a 60 segundos, ajustável (ART-CFG-04). Coalesce requisições concorrentes numa única busca à origem; limita a busca à origem a no máximo uma vez por minuto por arquivo. Chave de cache: evento, modalidade, tipo, trecho. Este cache é só proteção de taxa, em memória, volátil: a fonte de verdade servida ao público é sempre o banco (DADOS_EVENTO, ART-ENT-07), gravado a cada leitura bem-sucedida (RF-INGEST-005); se o cache expirar ou o processo reiniciar, nada se perde porque o dado já está no banco.
API e integração (ART-INT)
Para que serve: buscar do lado do servidor os arquivos JSON da Chronosat, PERSISTIR cada leitura bem-sucedida no banco e servir a página sempre do banco, resolvendo o bloqueio de origem cruzada (CORS).
Relacionado com: RF-INGEST-001, RF-INGEST-004, RF-INGEST-005, ADR-002, ADR-003; tarefas F1-01, F1-03, F1-05.
Onde fica: app único no servidor dedicado.
Especificação: Sistema externo: Chronosat. Direção: entrada, somente leitura. Autenticação: endpoint beta atual sem autenticação própria; preparado para endpoint de produção autenticado quando existir, com a credencial e a política de acesso entrando na configuração assim que existirem (ART-ENVV-02). Credencial provida por: Chronosat (quando houver endpoint de produção). Endereços usados: GET aos arquivos em https://satcron.com/stages/cache/{evento}_{modalidade}_{tipo}_{trecho}_{controle}.json. Tipos de arquivo: crews, stagetimes, racetimes. Payload: ver o catálogo de campos no Ap.1 do DRS (conector, ART-CONN-01). Cruzamento: pela chave numeral. Persistência: cada leitura bem-sucedida é gravada em DADOS_EVENTO (ART-ENT-07, RF-INGEST-005), por cima do registro existente daquela fonte (upsert); a página pública e a API interna NUNCA leem a Chronosat em tempo de resposta, leem sempre o banco. Idempotência: leitura pura, sem efeitos colaterais na origem; o cache de janela curta (ART-INFRA-03) evita duplicar chamadas, e a gravação em banco é o upsert que elimina duplicidade de estado. Falha e retry: em erro da origem, a página segue servida do último estado salvo no banco (RF-INGEST-003) e sinaliza atualização suspensa; nenhuma tentativa de escrita é feita quando a leitura falha. Rate limit: no máximo uma leitura à origem por minuto por arquivo. Saída: JSON normalizado com cabeçalho de origem cruzada para o domínio da página, servido a partir do banco.
Para que serve: entregar às plataformas do cliente a visualização de página e os sete eventos de interação do público.
Relacionado com: RF-MEDIR-001, RF-MEDIR-003, RF-MEDIR-004, ADR-014, ADR-017, DRS Ap.6 e F.4; cartões AUD-02, AUD-03, AUD-04, AUD-05.
Onde fica: marcação injetada pelos três renderizadores públicos e roteiro de página.
Especificação: direção: saída, somente envio. Destinos: a mesma propriedade de análise e o mesmo pixel usados pelo site institucional do cliente (ADR-014). Eventos enviados: exatamente os oito nomes fichados no Ap.6 do DRS (REGRA-INV-2), com os parâmetros ali definidos, sempre incluindo o parâmetro de site que separa este sistema do site institucional. Transporte: sinal que sobrevive à saída da página nos eventos que precedem navegação (troca de filtro, busca, documento). Amostragem: o evento de atualização ao vivo sai uma vez por carregamento de página (ADR-017). Autenticação: nenhuma, são identificadores públicos. Erro: falha de envio nunca afeta a página; não há repetição de tentativa. Ausência de configuração: destino desligado ou identificador vazio não injeta nem envia. Proibições: nenhum envio a partir de qualquer tela do painel; nenhum dado pessoal do público acompanha os eventos.
Para que serve: fazer a visualização de página sobreviver a bloqueador de anúncio e a navegador restritivo, sem contar duas vezes.
Relacionado com: RF-MEDIR-005, ADR-015; cartão AUD-06; entidade ART-ENT-12 (credencial); fila em ART-CFG-09.
Onde fica: motor único, na mesma fila assíncrona do registro de acessos.
Especificação: direção: saída, somente envio, do servidor para o destino de anúncios. O que sai: apenas a visualização de página pública, nunca os eventos de interação (ADR-015). Deduplicação: cada visualização recebe um identificador de evento gerado uma vez e usado igual nos dois caminhos (navegador e servidor), que é o que permite ao destino contar uma única vez. Caminho: enfileirado e enviado em lote, fora do caminho de resposta da página. Dado de correspondência (exceção declarada, ver F.4 do DRS): a plataforma descarta o evento vindo do servidor se ele não vier acompanhado de correspondência, então a chamada leva o endereço de rede do visitante, a assinatura do navegador dele e, quando existir, o identificador de navegador já gravado pelo pixel do cliente. É repassado, nunca guardado: nenhuma dessas três informações entra em coluna alguma de ACESSO (ART-ENT-11), que continua guardando apenas o identificador de visitante do dia. O destino é o pixel do próprio cliente, sob a política de privacidade dele. Autenticação: credencial guardada em CONFIG_RASTREAMENTO, de escrita apenas. Ausência de credencial: nenhum envio é tentado e nada quebra; o envio pelo navegador continua. Erro: falha de envio é registrada para a sustentação e nunca alcança o público. Limite: o lote respeita o tamanho máximo aceito pelo destino.
Conector e fonte de dados (ART-CONN)
Para que serve: normalizar os três tipos de arquivo da Chronosat e cruzá-los pela chave numeral para a visão consolidada de cada competidor, a partir do payload bruto persistido em DADOS_EVENTO.
Relacionado com: RF-INGEST-004, RF-INGEST-005, RF-API-001 a 004, RF-REGRA-001 a 006, ADR-012; tarefas F1-05 a F1-12, F2-01.
Onde fica: camada de normalização do app único, aplicada na exibição sobre o payload_bruto de DADOS_EVENTO (ART-ENT-07).
Especificação: o catálogo completo de campos de cada arquivo (crews, stagetimes, racetimes) e as regras de interpretação vivem no Ap.1 e Ap.2 do DRS (REGRA-INV-2, ficha extensa em apêndice). Resumo do contrato: crews é estático por modalidade (título, subtítulo, trechos com nome, distância, origem, destino e status I ou NI, modalidades, categorias, tripulações); stagetimes é por trecho e dinâmico a cada minuto (parciais I1 a I7, deltas, posições posIx, tempo da especial, penais e bonus, _status); racetimes é o acumulado por modalidade (ssX por trecho, tempo, penais, bonus, tempoTotal). Modalidade codificada 1 motos, 2 utv, 3 carros no evento de referência; o número de modalidades, categorias e trechos é dinâmico, lido de crews a cada evento, não fixo (edições passadas tiveram modalidades adicionais). Chave de junção: numeral. Controle (hash): crews e racetimes um por evento e modalidade, stagetimes um por trecho; o hash pode ser fixo durante todo o evento ou mudar ao longo da prova, e o conector está preparado para as duas formas, reconfigurável no painel sem deploy (ART-CFG-03). Regras de interpretação aplicadas pelo conector: valor ausente " *", posição nula posIx, prólogo ss0 fora do acumulado, 9000.00/27000.00 como "Não completou", L/C decimais como auditoria, _status=O oculto (ficha no Ap.2 do DRS).
Tolerância de esquema (ADR-012): o payload bruto é sempre preservado em DADOS_EVENTO exatamente como veio, e a normalização só acontece na exibição, nunca na escrita. Campos seriados (ssX, IX, posIX) são reconhecidos por padrão de nome em qualquer quantidade, sem lista fixa. Um campo desconhecido é ignorado na tela mas preservado no banco; um campo ausente apenas omite o elemento correspondente na tela, sem quebrar a página. Se um pacote vier estruturalmente diferente do contrato conhecido (ex.: uma vertical nova com modelo de dados distinto), o teste de conexão do painel (RF-PAINEL-003) aponta ao operador exatamente o que divergiu, o dado é armazenado do mesmo jeito, e a página exibe uma tabela genérica sinalizada do que veio, até um adaptador específico e contido entrar no módulo de ingestão, sem tocar o resto do sistema.
Para que serve: receber da cronometragem, em arquivo próprio, o quilômetro de cada ponto medido, de todas as modalidades e de todos os trechos do evento de uma vez.
Relacionado com: RF-INGEST-001, RF-INGEST-005, RF-PUB-004, ADR-012; cartão PET-06; alimenta QUILOMETRAGEM DO PONTO (ART-ENT-09).
Onde fica: módulo de ingestão do motor único, ao lado do conector dos três arquivos de resultado (ART-CONN-01). Cadastrada pelo operador no mesmo bloco de fontes do evento.
Especificação: um arquivo por evento, publicado pela cronometragem em endereço próprio, com nome em padrão distinto dos três arquivos de resultado (não é por modalidade nem por trecho: traz todas dentro de si). As duas bases de endereço seguem fixas no código e o operador informa apenas o link, de onde se usa só o nome do arquivo, e a barreira contra endereço arbitrário não afrouxa por causa da fonte nova. Estrutura lida: modalidade, depois trecho, depois o índice da parcial, com o quilômetro acumulado desde a largada daquele trecho (ordem dos níveis medida no arquivo real, não presumida da descrição). Leitura defensiva por desenho: chave fora do padrão ou valor não numérico é descartado e contado no log, e um arquivo que mude de forma a ponto de não ser reconhecido não sobrescreve a quilometragem já configurada, porque preferimos dado ausente a dado errado na tela pública. A leitura bruta é sempre preservada como qualquer outra fonte, mesmo quando a projeção não acontece.
Telas e páginas (ART-SCR)
Para que serve: ser a capa do site de cada esporte, o arquivo (como o índice de um blog) das suas edições por ano, para o público chegar tanto ao evento ao vivo quanto às edições arquivadas daquela vertical.
Relacionado com: RF-PUB-015; tarefa F2-13.
Onde fica: front estático, rota /<vertical> no subdomínio de resultados (resultados.sertoes.com.br).
Especificação: Rota: resultados.sertoes.com.br/<vertical> (ex.: /series, /petrobras, /mtb, /kitesurf). Quem acessa: público anônimo, sem login. Objetivo: apresentar o site daquele esporte e navegar para a página fixa de cada evento. Elementos principais: hero com a identidade e a capa do perfil da vertical (hero_titulo, hero_subtitulo, hero_imagem de VERTICAL), o evento ao vivo em destaque quando houver, e o arquivo das edições por ano (lista de EVENTO daquela vertical, agrupada por ano, o vigente sinalizado e as arquivadas). Ações disponíveis: selecionar um evento e ir para sua página (resultados.sertoes.com.br/<vertical>/<ano>/<evento>). Dados exibidos: metadados de EVENTO (nome, ano, slug, estado) e o perfil de VERTICAL. Estados: vazio (nenhum evento publicado ainda nessa vertical), carregando, normal. Responsivo: celular (prioridade) e desktop. Idioma: português. Regra: nenhuma outra vertical aparece nesta home (RF-PUB-015).
Para que serve: ser a porta de entrada mínima do subdomínio de resultados, apresentando os sites das verticais sem misturar classificações ou eventos de esportes diferentes.
Relacionado com: RF-PUB-016; tarefa F4-03.
Onde fica: front estático, raiz do subdomínio de resultados (resultados.sertoes.com.br).
Especificação: Rota: raiz do subdomínio (resultados.sertoes.com.br/). Quem acessa: público anônimo, sem login. Objetivo: navegação para a home de cada vertical. Elementos principais: lista dos sites das verticais (nome, marca e cor de cada uma, lidos de VERTICAL), na ordem definida por ordem_home. Ações disponíveis: selecionar uma vertical e ir para a sua home (/<vertical>, ART-SCR-03). Dados exibidos: apenas metadados de VERTICAL (nome, slug, cor_destaque, marca, ordem_home); nenhum dado de evento ou classificação. Estados: vazio (nenhuma vertical publicada), carregando, normal. Responsivo: celular (prioridade) e desktop. Idioma: português.
Para que serve: exibir ao público os resultados ao vivo de um evento com a identidade da vertical.
Relacionado com: RF-PUB-001 a 014; tarefas F2-02 a F2-12.
Onde fica: front estático, rota /<vertical>/<ano>/<evento> no subdomínio de resultados (resultados.sertoes.com.br), vinculado a partir das páginas de cada vertical do site institucional.
Especificação: a estrutura concreta da página (cabeçalho, hero, pódio, filtros, tabela, modal de detalhe, central de documentos, rodapé, na ordem, com as colunas e elementos exatos) vive no Ap.5 do DRS (REGRA-INV-2). Quem acessa: público anônimo, sem login. Objetivo: acompanhar a classificação, o pódio, as parciais e baixar documentos oficiais. Fonte de dados: sempre a API interna de leitura, que por sua vez lê sempre de DADOS_EVENTO (ART-ENT-07), nunca a Chronosat direto nem em tempo de resposta da página. Estados: carregando, vazio (sem evento), degradado (origem indisponível, último estado salvo servido do banco), ao vivo, encerrado (permanente). Responsivo: celular (prioridade, tabela vira cartões e pódio empilha) e desktop. Idioma: português. Identidade: cor, marca e regra de exibição da tripulação vindas do perfil da vertical (ART-ENT-01, Ap.4). Colunas ocultáveis por evento (RF-PAINEL-014, configuradas em ART-SCR-02): a tabela exibe só as colunas marcadas para aquele evento, além das essenciais, sempre visíveis; ver Ap.5 do DRS para a lista completa por variante (Geral/Categoria e Trecho).
Para que serve: cadastrar e gerenciar os campeonatos de qualquer vertical sem depender de desenvolvimento, com acesso por conta nominal e papel.
Relacionado com: RF-PAINEL-001 a 014, RF-CONFIG-001 a 003, ADR-011; tarefas F3-01 a F3-16, F3-18.
Onde fica: app único no servidor dedicado, rota autenticada.
Especificação: o catálogo das telas do painel (Login, Lista de campeonatos, Assistente passos 1 a 3, Gestão de PDFs, Controle de estado, Ocultar competidor, Congelar e arquivar evento, Criar evento retroativo, Verticais, e as duas telas só do administrador: Gestão de contas e Auditoria) vive no Ap.3 do DRS (REGRA-INV-2). Quem acessa: apenas usuários autenticados por conta nominal, com todas as verticais no escopo (ADR-011; painéis separados por vertical foram rejeitados). Papéis: operador (equipe Sertões) vê as telas de gestão de campeonatos; administrador (equipe Modulareasy) vê essas e mais Gestão de contas (ART-SCR-05) e Auditoria (ART-SCR-06). Objetivo: assistente de três passos (vertical e nome, URLs e teste de conexão com pré-visualização, publicar) para qualquer vertical, controle de estado ao vivo ou encerrado, gestão de PDFs, ocultar competidor, lista de campeonatos de todas as verticais, edição do perfil de cada vertical (ART-CFG-01), congelar o evento ao encerrar (para de buscar a origem; nada é copiado, o dado já está persistido em DADOS_EVENTO desde o primeiro minuto, RF-INGEST-005), e criar evento retroativo (cadastro de edição passada reaproveitando o assistente). Estados: sem sessão (barrado), rascunho, publicado, ao vivo, encerrado. Responsivo: desktop (uso principal). Idioma: português, sem termos técnicos (público não técnico). Tela "Colunas da tabela" (RF-PAINEL-014, dentro do hub, rota /painel/eventos/:id/passo-2): 11 checkboxes, um por coluna ocultável (Numeral, Categoria, (Pos)Categoria, Penalidades, Bônus, Largada, Parciais, Chegada, Velocidade média, Diferença anterior, Diferença líder), pré-marcados conforme a config salva; salvar grava o complemento (colunas NÃO marcadas) em colunas_ocultas do evento.
Para que serve: o administrador cria, edita, desativa/reativa contas, define papel e redefine senha, sem depender de desenvolvimento.
Relacionado com: RF-PAINEL-011, RNF-SEG-002, RNF-SEG-003, RNF-SEG-005, USUÁRIO (ART-ENT-06); tarefa F3-15.
Onde fica: painel único (ART-SCR-02), rota acessível apenas ao papel administrador.
Especificação: Rota: dentro do painel, sob a barreira e o gate "é administrador?" (F3-14). Quem acessa: só o papel administrador; o operador que tenta abrir é barrado. Objetivo: gerir as contas de usuário. Elementos principais: lista de contas (login, papel, situação ativa/desativada); criar conta (login, papel, senha inicial); editar papel de uma conta; desativar e reativar; redefinir senha. Regras: nenhuma senha é exibida nem guardada em texto puro (só hash, ART-ENT-06); sem autocadastro público; cada ação grava na auditoria (ART-ENT-08). Estados: lista vazia (só as contas iniciais), normal, conta desativada visível como tal. Responsivo: desktop. Idioma: português, sem termos técnicos.
Para que serve: o administrador consulta o log de ações sensíveis, para saber quem fez o quê e quando.
Relacionado com: RF-PAINEL-012, RNF-SEG-004, AUDITORIA (ART-ENT-08); tarefa F3-16.
Onde fica: painel único (ART-SCR-02), rota acessível apenas ao papel administrador.
Especificação: Rota: dentro do painel, sob a barreira e o gate "é administrador?" (F3-14). Quem acessa: só o papel administrador; o operador que tenta abrir é barrado. Objetivo: consultar o histórico de ações sensíveis. Elementos principais: lista de registros de AUDITORIA (quem fez, qual ação, sobre o que, quando), do mais recente ao mais antigo. Regras: somente leitura (o registro é imutável, gravado por F3-14 e F3-15); nunca exibe senha. Estados: vazio (nenhuma ação ainda), normal. Responsivo: desktop. Idioma: português, sem termos técnicos.
Para que serve: o administrador vê, num só lugar, se as páginas principais do sistema e do site estão no ar (200) ou com erro (4xx ou 5xx), com o código HTTP à vista de cada rota.
Relacionado com: RF-PAINEL-013; tarefa F3-17; configuração de rotas monitoradas (ART-CFG-06); gate "é administrador?" (ART-ACS-01, F3-14); rotas monitoradas apontam para ART-SCR-01, ART-SCR-03, ART-SCR-04, ART-SCR-02 e o endpoint de saúde (ART-INFRA-01).
Onde fica: painel único (ART-SCR-02), rota acessível apenas ao papel administrador.
Especificação: Rota: dentro do painel, sob a barreira e o gate "é administrador?" (F3-14). Quem acessa: só o papel administrador; o operador que tenta abrir é barrado. Objetivo: verificação de saúde das páginas principais. Fonte da lista: a configuração curada de rotas monitoradas (ART-CFG-06), uma entrada por área, nunca por evento. Verificação: do lado do servidor; o próprio app faz uma requisição a cada rota da lista e coleta o código de resposta HTTP (ao carregar a página e ao acionar "verificar de novo"). Elementos principais: uma linha por rota curada, com o rótulo da área, o endereço e o código HTTP; 200 marcado como no ar, 4xx ou 5xx sinalizado como erro em destaque; botão "verificar de novo" que reconsulta. Regras: a lista é sempre a curada (home global quando existir, home de cada vertical, rotas do painel, verificação de saúde, âncoras do site), sem nenhuma rota por evento; a verificação nunca lança (uma rota que não responde é reportada como erro, não derruba a tela). Estados: verificando, normal (com status por rota), todas no ar, alguma com erro. Sem histórico, gráfico de uptime nem alerta nesta entrega (evolução futura). Responsivo: desktop. Idioma: português, sem termos técnicos.
Para que serve: o operador informar em que quilômetro ficam a largada, cada parcial e a chegada de cada trecho do evento, quando essa informação não vem da cronometragem.
Relacionado com: RF-PAINEL-013, RF-PUB-004; cartão PET-05; entidade QUILOMETRAGEM DO PONTO (ART-ENT-09).
Onde fica: painel único, no menu do evento, ao lado de PDFs e Competidores. Rota comum aos dois papéis: quem opera o evento no dia é quem sabe o quilômetro de cada ponto.
Especificação: um campo de texto por trecho, com a lista de quilômetros na ordem dos pontos (largada, cada parcial, chegada). Um campo por ponto daria dezenas de campos num evento de vários dias e o operador larga no meio. O separador de item é explícito e o decimal aceita vírgula ou ponto; separadores não são unificados, para que uma posição possa ser pulada quando o operador ainda não sabe aquele valor. O formulário reabre preenchido com o que está salvo, e esvaziar um campo limpa aquele trecho. Os trechos listados são os que a cronometragem já entregou, e a quantidade de parciais de cada um sai do dado real daquele trecho, não de uma lista fixa. A ação fica registrada na auditoria.
Para que serve: interface onde operador e administrador alteram, removem ou restauram os 40 textos fixos das páginas públicas.
Relacionado com: RF-CONFIG-006; tarefa F3-TXT; ART-ENT-10; ART-CFG-07; item "Textos do site" na navegação do painel (ART-NAV).
Onde fica: rota /painel/textos, comum aos dois papéis (mesma precedência já dada ao perfil de vertical, RF-CONFIG-001).
Especificação: formulário único, agrupado nos 4 grupos do catálogo (Home global, Cabeçalho e rodapé, Home de cada vertical, Página do evento), um campo por chave (texto ou área de texto quando multilinha), mostrando o rótulo, o valor salvo ou o padrão quando não há desvio, e uma ajuda curta quando existir; cada campo removível tem um controle "restaurar padrão" que apaga o desvio; salvar grava só as chaves alteradas, valida cada chave contra o catálogo (chave desconhecida é ignorada) e registra a ação editar_textos na auditoria; sem sessão, redireciona para o login; com sessão de operador ou administrador, retorna a tela. Campos com literal composto (prefixo e nome, linha 1 e linha 2) aparecem como dois campos lado a lado, nunca como um campo com marcação HTML.
Para que serve: responder, dentro da própria ferramenta, quantas pessoas acompanharam um evento, quando, de onde vieram e o que procuraram, sem depender de plataforma externa, de consentimento de cookie nem de bloqueador.
Relacionado com: RF-MEDIR-011 a 015, RNF-SEG-006; cartões AUD-11 a AUD-15; entidade ACESSO (ART-ENT-11).
Onde fica: painel, rota /painel/audiencia, atrás da sessão autenticada, sem teste de administrador (os dois papéis entram).
Especificação: o catálogo completo dos blocos da tela vive no Ap.6 do DRS (REGRA-INV-2). Rota: /painel/audiencia, com o evento escolhido por seletor no topo. Quem acessa: operador e administrador. Objetivo: leitura da audiência de um evento e comparação entre eventos. Elementos, na ordem: bloco do agora (pessoas dos últimos cinco minutos, páginas e recortes em uso, acessos de atualização, atualizando sozinho), resumo do evento (pessoas como únicos por dia somados, com a nota explícita de que único é do dia, acessos, e o contador de descarte da fila quando maior que zero), série por dia, série por hora com o pico destacado, divisão entre ao vivo e repetição, divisão por dispositivo, divisão por família de navegador, divisão por tipo de página, divisão por origem do registro, geografia quando existir, de onde vem (os sete grupos nominais), o que procuram (buscas, documentos, ranking de modalidades, trechos e categorias), permanência aproximada, comparação entre eventos, e as duas exportações. Ações disponíveis: escolher evento, escolher período, escolher recorte, escolher eventos para comparar, exportar agregado, exportar detalhe. Dados exibidos: apenas agregações calculadas sobre ACESSO; nenhuma linha individual de acesso é exibida, e nenhum texto de busca aparece ligado a um visitante. Estados: sem evento escolhido, sem dado no período (mostra zero, nunca erro), carregando, normal. Gráficos: desenhados pelo próprio motor em marcação vetorial, sem biblioteca externa, porque o sistema não tem empacotador de código. Responsivo: desktop (uso principal) e celular. Idioma: português, sem termo técnico. Regra: nenhum dado desta tela é exposto em rota pública.
Para que serve: ligar, configurar e testar os destinos de medição sem que nenhum identificador ou credencial viva em código, em arquivo de configuração ou em novo deploy.
Relacionado com: RF-MEDIR-002, RF-PAINEL-012, RNF-SEG-006; cartão AUD-01; entidade CONFIG_RASTREAMENTO (ART-ENT-12); parâmetros em ART-CFG-08.
Onde fica: painel, rota /painel/integracoes, atrás do mesmo teste de administrador que protege a gestão de contas e a auditoria.
Especificação: Rota: /painel/integracoes. Quem acessa: apenas o papel administrador; o operador que tenta abrir é barrado pela mesma barreira das demais telas exclusivas. Objetivo: manter a configuração de rastreamento. Elementos, um bloco por destino (análise e anúncios): interruptor ligado ou desligado, campo de identificador público, campo de credencial de envio pelo servidor (apenas no destino que a exige), e botão de enviar evento de teste. Regras do campo de credencial: é de escrita apenas, a tela nunca devolve o valor guardado e exibe somente uma máscara; enviar o campo em branco preserva o valor anterior; enviar um valor novo substitui; o campo tem o botão de ver o que foi digitado, como todo campo de senha do sistema. Ação de teste: envia ao destino um evento identificado como teste, para conferência na ferramenta do próprio destino antes de o público ser medido. Auditoria: toda gravação e todo envio de teste geram registro (ação de gravar integração e ação de enviar teste), com quem e quando, nunca com o valor da credencial. Efeito ao salvar: o estado em memória é recarregado no mesmo processo e a página pública muda no acesso seguinte, sem reinício. Estados: destino desligado, destino ligado sem identificador (não injeta), destino ligado e completo. Responsivo: desktop. Idioma: português.
Menu e navegação (ART-NAV)
Para que serve: organizar o acesso às funções do painel conforme o papel.
Relacionado com: RF-PAINEL-008, RF-PAINEL-011, RF-PAINEL-012; tarefas F3-09, F3-15, F3-16.
Onde fica: painel único (ART-SCR-02).
Especificação:
| Item de menu | Destino | Visível para | Ordem |
|---|---|---|---|
| Campeonatos | Lista de campeonatos | Administrador e operador | 1 |
| Novo campeonato | Assistente passo 1 | Administrador e operador | 2 |
| Evento retroativo | Assistente passo 1 (modo retroativo) | Administrador e operador | 3 |
| Verticais | Cadastro de verticais | Administrador e operador | 4 |
| Contas | Gestão de contas (ART-SCR-05) | Só administrador | 5 |
| Auditoria | Log de auditoria (ART-SCR-06) | Só administrador | 6 |
| Status das páginas | Sitemap e monitor de status (ART-SCR-07) | Só administrador | 7 |
Nenhum item é visível ao público; toda rota do painel exige sessão autenticada. Os itens Contas, Auditoria e Status das páginas só aparecem para o papel administrador. Ações de estado, congelar e arquivar, PDFs e ocultar competidor abrem a partir do campeonato na lista, não como itens de topo.
Entidades (ART-ENT)
O banco guarda a configuração das verticais e dos eventos E o estado mais recente dos dados de cronometragem de cada evento: cada leitura bem-sucedida da Chronosat é gravada em DADOS_EVENTO por cima da anterior (RF-INGEST-005), com o payload bruto preservado. O banco é a fonte de verdade das páginas públicas, desde o primeiro minuto de um evento ao vivo; ao encerrar, o estado salvo em DADOS_EVENTO é apenas marcado como final (o campo estado de EVENTO registra o encerramento, não existe cópia separada de congelamento). Diagrama relacional completo no bloco 5 (Modelo de Dados) do DRS.
Para que serve: guardar cada vertical com o perfil completo do site do esporte (identidade, home e regra de exibição da tripulação).
Relacionado com: RF-CONFIG-001, RF-PUB-010, RF-PUB-015, RF-PUB-016; tarefa F3-02.
Onde fica: banco (config global do sistema).
Especificação: atributos id (pk), slug (series, petrobras, mtb, kitesurf), nome, cor_destaque (cor de realce, pódio, abas e estados ativos), marca (logo/identidade), hero_titulo (título da capa da home da vertical), hero_subtitulo, hero_imagem, rotulo_modalidade (default "Modalidade"), rotulo_categoria (default "Categoria"), rotulo_trecho (default "Etapa"), regra_tripulacao (enum, ver abaixo), ordem_home (posição na home global, RF-PUB-016). Sem FK de entrada. Índice por slug único. Escopo: config global do sistema, editável pelo operador sem novo deploy (RF-CONFIG-001).
Enum regra_tripulacao (como os nomes da tripulação aparecem em tabela, pódio e modal):
| Valor | Significado | Vertical(is) | |
|---|---|---|---|
piloto_navegador | Piloto em destaque e navegador, no formato "PILOTO (UF) \ | NAVEGADOR (UF)" | Rally (Series, Petrobras) |
dupla | Dupla de competidores, os dois nomes em negrito, sem hierarquia entre eles | MTB (Bike) | |
solo | Um único atleta, sem segundo nome | Kitesurf |
As quatro verticais iniciais (linhas seed desta entidade):
| slug | nome | cor_destaque | regra_tripulacao | Observação |
|---|---|---|---|---|
| series | Sertões Series | Laranja oficial E96409 | piloto_navegador | Cor de fundo do logotipo oficial 2026 (Ap.4 do DRS) |
| petrobras | Sertões Petrobras | Laranja oficial E96409 (o mesmo da Series; a marca própria distingue) | piloto_navegador | Vertical separada da Series (logos, participantes e patrocinadores próprios); RF-CONFIG-004 |
| mtb | Sertões MTB | Rosa oficial E40E7F | dupla | Cor de fundo do logotipo oficial 2026 (Ap.4 do DRS) |
| kitesurf | Sertões Kitesurf | Verde oficial 88BD23 | solo | Cor de fundo do logotipo oficial 2026 (Ap.4 do DRS) |
Para que serve: guardar cada campeonato de uma vertical.
Relacionado com: RF-PAINEL-002, RF-CONFIG-002, RF-CONFIG-005; tarefas F3-03, F4-01.
Onde fica: banco leve embarcado.
Especificação: atributos id (pk), vertical_id (fk), nome (ex.: Vale do Jalapão), evento_chronosat (ex.: jalap26), ano (ex.: 2026), slug (endereço do evento, ex.: rally-series), estado (rascunho, ao_vivo, encerrado), criado_em. FK: VERTICAL (N eventos para 1 vertical). Índice por vertical e estado, e único por vertical, ano e slug. Regra: um evento vigente por vertical exibido ao público; ano e slug compõem o endereço permanente resultados.sertoes.com.br/<vertical>/<ano>/<evento> (RF-CONFIG-005), onde <evento> é o slug, e não mudam depois de publicado; dois eventos da mesma vertical no mesmo ano têm slugs distintos.
Nota (2026-07-06, S72): tabela evento criada em F3-03 (rascunho com vertical, nome, ano e slug). F3-04 preencheu as fontes por modalidade. F3-05 entregou a publicação: o estado muda de rascunho para ao_vivo (ou aguardando dados) e o evento aparece em público. F3-06 entregou o controle de estado pleno: o campo estado alterna entre ao_vivo e encerrado pelo operador, e o poller de leitura passou a derivar a lista de eventos ao vivo diretamente desta tabela (antes vinha de uma lista fixa no código); o evento real da vertical Series também passou a nascer aqui (seed idempotente), em vez de só num arquivo de configuração. As fontes plenas por trecho (F3-11, ART-ENT-03) e agora a trava do endereço permanente após publicado (F3-12) foram entregues: o endereço por vertical, ano e slug é imutável após a publicação, garantido pela ausência de qualquer caminho de código que mude essa identidade, com teste estrutural cobrindo essa ausência. Entidade completa.
Para que serve: guardar as URLs de origem por modalidade e trecho.
Relacionado com: RF-CONFIG-003, RF-INGEST-001; tarefas F3-04, F3-06, F3-11.
Onde fica: banco leve embarcado.
Especificação: atributos id (pk), evento_id (fk), modalidade (o código que o evento tiver, tipicamente 1 motos, 2 utv, 3 carros, mas sem fixar a quantidade), tipo (crews, racetimes, stagetimes), trecho (nulo exceto stagetimes), url, arquivo (o nome completo do arquivo com o controle/hash, usado pelo poller para saber exatamente qual arquivo buscar). FK: EVENTO (N fontes para 1 evento). Índice por evento, modalidade, tipo, trecho. Regra: o proxy lê a fonte correta conforme o filtro de modalidade e o trecho selecionado; o número de modalidades e de trechos com fonte cadastrada é o que o evento tiver (RF-CONFIG-003), não uma quantidade fixa.
Nota (2026-07-05, S67): a coluna arquivo foi adicionada em F3-06 (aditiva, sem afetar os registros existentes) e passou a ser preenchida pelo passo 2 do assistente; é o que permite ao poller montar a lista de arquivos a buscar a partir do banco, sem lista fixa no código.
Para que serve: guardar os documentos oficiais publicados pelo operador.
Relacionado com: RF-PAINEL-006, RF-PUB-008; tarefas F3-07, F2-09.
Onde fica: banco leve embarcado (metadados) mais armazenamento do arquivo quando por upload.
Especificação: atributos id (pk), evento (a chave natural, o slug Chronosat do evento, ex. minasbr26, a mesma chave usada por DADOS_EVENTO ART-ENT-07; quando a entidade EVENTO nascer como tabela própria, migra para evento_id FK com backfill, sem quebrar a leitura), titulo, url (endereço do link externo ou caminho do arquivo salvo pelo upload), ordem (posição de exibição, atribuída automaticamente ao final da lista do evento). FK: EVENTO (N PDFs para 1 evento, hoje pela chave natural evento). Regra: aparece na central pública se existir; ausência não aparece; remover é escopado ao evento (um operador não remove PDF de outro evento). Não existe coluna de origem persistida: o desacoplamento entre "veio de link" e "veio de upload" é feito na camada de código, não no dado. O armazenamento puro (salvarUploadPdf, grava o arquivo no volume do servidor com nome próprio anticolisão e antitravessia, valida tipo e assinatura do arquivo, devolve a URL pública /uploads/<nome>) é uma peça separada do registro (adicionarDocumento(evento, titulo, url), que grava título e url sem saber de onde vieram); quem decide a rota (link informado direto vs upload processado primeiro) é o formulário do painel. Esse desenho é o que permite a uma forma de entrada futura (por exemplo um webhook que recebe PDFs automaticamente da Chronosat) convergir na mesma escrita adicionarDocumento, sem precisar de coluna nova nem mudança na central pública.
Para que serve: registrar competidores ocultados manualmente pelo operador da página pública, de forma reversível.
Relacionado com: RF-PAINEL-007; tarefa F3-08.
Onde fica: banco leve embarcado.
Especificação: atributos id (pk), evento (chave natural, o slug Chronosat do evento, mesma chave de DADOS_EVENTO e de PDF, ART-ENT-04/07), modalidade (fecha a granularidade, pois um numeral não é único entre modalidades do mesmo evento), numeral, ocultado_em (trilha informativa, não muda a semântica). Chave única composta: (evento, modalidade, numeral). KISS por presença: não há coluna de status ou de origem; a PRESENÇA da linha é o que oculta. Ocultar é um INSERT idempotente (ocultar duas vezes a mesma tripla é no-op); reexibir é um DELETE idempotente pela mesma chave. Distinto do oculto na origem (_status="O" no dado bruto da Chronosat, RF-REGRA-006, canal ortogonal que não escreve nem lê esta tabela).
Para que serve: guardar cada conta nominal de acesso ao painel, com papel, para que administrador (equipe Modulareasy) e operador (equipe Sertões) entrem cada um com a sua credencial (ADR-011 revisado). Substitui a entidade OPERADOR diferida (que modelava só id/login/ativo, sem senha e sem papel): agora é real, com senha por usuário e papel.
Relacionado com: RF-PAINEL-001 (revisado), RF-PAINEL-011, RNF-SEG-002, RNF-SEG-003, RNF-SEG-005, ADR-011; tarefas F3-13 (migração e seed), F3-14 (autenticação por conta). Ver ART-ACS-01.
Onde fica: banco leve embarcado; sem exposição pública.
Especificação: atributos id (pk), login (único), hash_senha (a senha guardada apenas como hash, nunca em texto puro), papel (enum: administrador, operador, dois valores, sem matriz de permissões além disso), ativo (booleano; uma conta desativada não entra, e desativar não apaga a conta nem o histórico), criado_em, atualizado_em. Chave única: login. Regra de escrita: só o administrador cria e edita contas (RF-PAINEL-011); não há autocadastro público. Regra de leitura: usada na autenticação (comparação do hash) e na tela de gestão de contas (lista de login, papel e situação, nunca a senha). Seed inicial: as contas de administrador da equipe que opera o sistema (cada uma com senha própria hasheada) e a conta de operador da Sertões (migrada do login único anterior). O papel decide o acesso por um único teste "é administrador?": administrador vê todas as telas, operador não vê gestão de contas nem auditoria.
Para que serve: persistir cada leitura bem-sucedida da Chronosat como o estado mais recente daquela fonte, para o resultado nunca se perder, com ou sem encerramento pelo operador, mesmo depois de a Chronosat retirar os dados da origem.
Relacionado com: RF-INGEST-005, RF-PAINEL-009, RNF-ARQ-001, ADR-003, ADR-009, ADR-012; tarefa F1-03.
Onde fica: banco (fonte de verdade das páginas públicas).
Especificação: atributos id (pk), evento_id (fk), modalidade, tipo (enum: crews, racetimes, stagetimes), trecho (nulo exceto quando tipo = stagetimes), payload_bruto (JSON, exatamente como veio da origem, sem normalização), lido_em (momento da última leitura bem-sucedida). FK: EVENTO (N registros de DADOS_EVENTO para 1 evento). Chave única: evento_id + modalidade + tipo + trecho (um registro por fonte; cada leitura bem-sucedida faz upsert por cima do registro existente daquela fonte, não insere uma linha nova por leitura, não é série temporal, ver ADR-009). Regra de escrita: toda leitura bem-sucedida do proxy (RF-INGEST-001) grava aqui, durante o evento inteiro, do primeiro minuto ao encerramento. Regra de leitura: a página pública e a API interna leem sempre deste registro, nunca da Chronosat diretamente; a normalização (cruzamento pela chave numeral, regras de interpretação do Ap.2) acontece na exibição, a partir do payload_bruto, não na escrita (ADR-012). Ao encerrar o evento (RF-PAINEL-009), nada é copiado: o sistema apenas para de escrever novas leituras aqui e o campo estado de EVENTO passa a encerrado; o último payload_bruto de cada fonte já é, por construção, o resultado final. Distinto do cache de janela curta (RF-INGEST-002, ART-INFRA-03), que é só proteção de taxa em memória e não é fonte de verdade; DADOS_EVENTO é a persistência real, em banco, desde o primeiro minuto.
Para que serve: registrar de forma imutável quem fez o quê e quando no painel, para que o acesso administrativo seja rastreável (RF-PAINEL-012).
Relacionado com: RF-PAINEL-012, RNF-SEG-004; tarefa F3-16.
Onde fica: banco leve embarcado; consultável só pelo administrador.
Especificação: atributos id (pk), usuario_id (fk USUÁRIO, nulo quando o registro é uma tentativa de login negada), acao (enum: login, login_negado, criar_conta, editar_conta, desativar_conta, reativar_conta, mudar_papel, redefinir_senha), alvo (sobre o que a ação incidiu, por exemplo o id da conta afetada), detalhe (descrição curta; nunca a senha), registrado_em (momento). FK: USUÁRIO (N registros para 1 usuário). Regra de escrita: gravado nos pontos de F3-14 (login e login negado) e F3-15 (criar/editar/desativar/reativar conta, mudar papel, redefinir senha); a redefinição de senha registra a troca, nunca o valor. Regra de leitura: consulta do administrador na tela de auditoria (ART-SCR-06), do mais recente ao mais antigo. O registro é só escrita e leitura, nunca editável pelo painel (imutável).
Para que serve: guardar o quilômetro da largada, de cada parcial e da chegada de cada trecho, para a tabela pública dizer onde cada tempo foi medido.
Relacionado com: RF-PUB-004, RF-PAINEL-013, RF-INGEST-005, ADR-012; cartões PET-05 e PET-06. Alimentada por duas fontes: a tela de Quilometragem do painel (ART-SCR-08) e o arquivo de parciais da cronometragem (ART-CONN-02).
Onde fica: banco embarcado do motor único, ao lado das demais entidades do sistema.
Especificação: chave natural (evento, modalidade, trecho, ponto). O ponto é explícito: largada, o índice da parcial (1 a N) ou chegada, em vez de um índice numérico com aritmética implícita, para que a linha se leia sozinha. A modalidade entra na chave porque o percurso muda entre elas no mesmo evento (medido no dado real: no primeiro dia do Petrobras 2026, o último ponto fica no km 300,10 em três modalidades e no km 171,53 na quarta, que corre percurso reduzido). Quilômetro é número não negativo. Trecho sem quilometragem informada não exibe nada na página, sem placeholder. Quando as duas fontes coexistem, o arquivo da cronometragem substitui apenas as parciais numeradas e preserva largada e chegada informadas pelo operador.
Para que serve: guarda apenas o texto que o operador ou administrador alterou; a ausência de linha para uma chave significa "usa o padrão de fábrica do catálogo" (ART-CFG-07).
Relacionado com: RF-CONFIG-006; tarefa F3-TXT; ART-SCR-09 (tela /painel/textos); ART-CFG-07 (catálogo de chaves); auditoria (ação editar_textos).
Onde fica: banco de dados, tabela texto_site.
Especificação: chave (texto, chave primária, a mesma chave do catálogo), valor (o texto vigente, pode ser vazio quando o texto é removível) e atualizado_em (data e hora da última gravação). Salvar um valor igual ao padrão de fábrica apaga a linha, o mesmo efeito de restaurar. Uma chave fora do catálogo é ignorada na gravação. Toda escrita recarrega o texto servido em memória no mesmo processo, sem reinício.
Para que serve: guardar uma linha por acesso público, formando a série que o painel de audiência consulta e que permite abrir recortes novos sobre o passado.
Relacionado com: RF-MEDIR-006 a 010, RF-MEDIR-016, ADR-018, DRS bloco E.4; cartões AUD-07, AUD-08, AUD-09, AUD-10, AUD-16.
Onde fica: banco embarcado do motor único, ao lado das demais entidades.
Especificação: atributos id (pk), evento_id (fk EVENTO, nulo nas homes), vertical (slug, nulo na home global), tipo_pagina (enum: home_global, home_vertical, evento, documento), rota (o caminho pedido mais a consulta normalizada; no acesso do tipo documento, o caminho do arquivo aberto, que é o que identifica o documento no ranking de RF-MEDIR-013), modalidade, trecho, categoria, busca (o texto procurado, quando houver), instante_utc, dia_local (data em fuso de São Paulo, desnormalizada), hora_local (0 a 23, desnormalizada), dispositivo (enum: celular, tablet, computador), navegador (família apenas, nunca a assinatura completa), origem_referencia (enum de sete valores: instagram, facebook, whatsapp, site_do_cliente, motor_de_busca, direto, outros), pais e uf (previstos e vazios nesta entrega, ADR-016), visitante_dia (resumo criptográfico truncado, ver ART-ENT-11 regra de escrita), tipo_acesso (enum: navegacao, atualizacao, documento), momento (enum: ao_vivo, replay, pelo estado do evento no instante do acesso; nulo nas homes, que não pertencem a evento algum, e obrigatório apenas em acesso a página de evento e a documento), origem (enum: app, log_nginx), arquivo (nome do arquivo de origem, preenchido apenas quando origem é log_nginx), linha_hash (resumo criptográfico da linha bruta importada, preenchido apenas quando origem é log_nginx). Índices: composto (evento_id, dia_local) e composto (evento_id, instante_utc); índice adicional por (dia_local, visitante_dia) para a contagem de únicos e a permanência; e índice único parcial sobre (arquivo, linha_hash) válido apenas quando origem é log_nginx, que é o que torna a importação repetível sem impedir acessos legítimos repetidos. Regra de escrita: apenas por acréscimo, nenhuma linha é alterada depois de gravada (ADR-018); a gravação passa pela fila em lote (ART-CFG-09) e nunca pelo caminho de resposta da página; o visitante_dia é calculado sobre um segredo do dia somado ao endereço de rede e à assinatura de navegador, e nem o endereço de rede nem a assinatura são gravados; o segredo do dia vive só em memória e é trocado na virada do dia. Regra de leitura: só agregações, pelo painel de audiência (ART-SCR-10) e pelas exportações; nenhuma linha individual é exibida. Exclusões que nunca geram linha, sempre reconhecidas por origem da requisição e nunca por rota: requisição da própria máquina e verificação de saúde ou monitor interno (endereço de retorno local, ou ausente, no cabeçalho de IP real repassado pelo servidor web, mais o cabeçalho próprio do monitor), agente automatizado reconhecido pela assinatura, e requisição com sessão de painel ativa (RF-MEDIR-009, ficha no Ap.6 do DRS). Excluir por rota é proibido: as rotas que o monitor verifica incluem a raiz e a home de uma vertical, que são páginas públicas de audiência real. Retenção: sem prazo por padrão (zero, histórico plurianual de audiência do cliente), configurável para um valor maior que zero quando fizer sentido, por exemplo vinte e quatro meses (ART-CFG-09); limpeza diária (ART-JOB-01). Repetibilidade da importação: por proveniência (arquivo mais linha_hash, no índice único parcial acima), nunca pelo identificador de visitante, que é compartilhado de propósito entre acessos distintos do mesmo dispositivo no mesmo dia e por isso apagaria audiência real se virasse chave.
Para que serve: guardar, por destino de medição, se está ligado, qual o identificador público e qual a credencial de envio pelo servidor, para que nada disso viva em código.
Relacionado com: RF-MEDIR-001, RF-MEDIR-002, RF-MEDIR-005, RF-PAINEL-012; cartão AUD-01; tela ART-SCR-11; parâmetros ART-CFG-08.
Onde fica: banco embarcado do motor único.
Especificação: atributos destino (chave primária, enum de dois valores: analise, anuncios), ligado (verdadeiro ou falso, padrão falso), identificador (texto, o identificador público do destino, vazio significa não injetar), credencial (texto, apenas no destino que exige envio pelo servidor; de escrita apenas, nunca devolvido por leitura alguma do sistema para a tela), atualizado_em, atualizado_por (fk USUÁRIO). Regra de escrita: só pela tela de integrações, só pelo administrador; gravar com o campo de credencial em branco preserva o valor anterior; toda gravação registra na auditoria quem e quando, nunca o valor. Regra de leitura: o sistema lê a linha para montar a marcação da página e para o envio pelo servidor; a tela lê tudo menos a credencial, de que recebe apenas uma máscara. Estado em memória: carregado na partida e recarregado a cada gravação, como o catálogo de textos, para que servir a página não faça consulta ao banco. Semente: se a tabela estiver vazia na partida e existir configuração de ambiente de migração inicial, ela cria as linhas uma única vez e nunca mais é lida.
Parâmetros de configuração (ART-CFG)
Para que serve: o operador edita todo o perfil de cada vertical (identidade, home e regra de exibição) e adiciona novas, sem depender de desenvolvimento.
Relacionado com: RF-CONFIG-001, RF-PUB-010, RF-PUB-015, RF-PUB-016; tarefa F3-02.
Onde fica: painel do operador, tela de verticais.
Especificação: materializa o perfil completo de ART-ENT-01.
| Parâmetro | O que controla | Tipo | Default | Quem edita | Onde edita | Efeito ao mudar | ||
|---|---|---|---|---|---|---|---|---|
| cor_destaque | Cor de realce, pódio, abas e estados ativos | Texto (cor) | Series E96409 | Operador | Tela de verticais | Imediato na página pública | ||
| marca | Logo/identidade da vertical | Asset | Marca da vertical | Operador | Tela de verticais | Imediato | ||
| hero_titulo | Título da capa da home da vertical (ART-SCR-03) | Texto | Nome da vertical | Operador | Tela de verticais | Imediato | ||
| hero_subtitulo | Subtítulo da capa da home da vertical | Texto | Vazio | Operador | Tela de verticais | Imediato | ||
| hero_imagem | Imagem de fundo/capa da home da vertical | Asset | Vazio (usa fundo padrão) | Operador | Tela de verticais | Imediato | ||
| rotulo_modalidade | Rótulo da hierarquia usado na hero e nos filtros | Texto | "Modalidade" | Operador | Tela de verticais | Imediato | ||
| rotulo_categoria | Rótulo da hierarquia usado nos filtros | Texto | "Categoria" | Operador | Tela de verticais | Imediato | ||
| rotulo_trecho | Rótulo da hierarquia usado na faixa de etapas | Texto | "Etapa" | Operador | Tela de verticais | Imediato | ||
| regra_tripulacao | Como os nomes aparecem em tabela, pódio e modal (piloto_navegador \ | dupla \ | solo) | Enum | piloto_navegador | Operador | Tela de verticais | Imediato na página pública |
| ordem_home | Posição da vertical na home global (ART-SCR-04) | Número | Ordem de criação | Operador | Tela de verticais | Imediato | ||
| nova vertical | Adicionar vertical sem código | Ação | (n/a) | Operador | Tela de verticais | Torna-se selecionável no assistente e aparece na home global |
Auditado: não exigido nesta entrega. Cores e logos de cada vertical (incluindo Petrobras) são extraídos da midiateca dos sites da Sertões na implementação (fonte em ART-MEDIA-01), sem depender de envio do cliente. As quatro verticais iniciais e seus valores de seed estão em ART-ENT-01.
Para que serve: o operador alterna o estado do campeonato (rascunho, ao vivo, encerrado).
Relacionado com: RF-PAINEL-005, RF-PAINEL-009, RF-INGEST-005, RF-PUB-009; tarefa F3-06.
Onde fica: painel, controle de estado.
Especificação: parâmetro estado, enum (rascunho, ao_vivo, encerrado), default rascunho ao criar. Quem edita: operador. Efeito ao mudar: imediato (liga e desliga a atualização automática pública). Ao mudar para encerrado, o sistema apenas para de buscar a origem; nada é copiado ou recalculado, porque cada leitura já ficou persistida em DADOS_EVENTO desde o primeiro minuto (ART-ENT-07, RF-INGEST-005). A página continua sendo servida desse mesmo registro, permanecendo publicada para sempre, por evento e por ano, mesmo depois de a Chronosat sair do ar; não há prazo de expiração. Encerrar não é uma condição para não perder dado (isso já está garantido pela persistência contínua), é apenas o sinal visível ao público de que a prova acabou.
Para que serve: o operador guarda as fontes de dados do evento, incluindo o controle (hash) de cada URL quando ele muda durante a prova.
Relacionado com: RF-CONFIG-003, RF-PAINEL-003; tarefas F3-04, F3-11.
Onde fica: painel, passo 2 do assistente, e reconfigurável depois de publicado.
Especificação: conjunto de URLs por modalidade e trecho (materializa ART-ENT-03), em número dinâmico conforme o que o evento tiver, sem quantidade fixa. Entrada: o operador cola de uma vez o bloco de URLs entregue pela Chronosat (o documento do evento) e o sistema extrai e classifica cada arquivo pelo padrão do nome {evento}_{modalidade}_{tipo}_{trecho}_{controle}.json, sem separar campo a campo (RF-PAINEL-003). O rótulo de cada modalidade vem do crews quando disponível e pode ser confirmado ou ajustado pelo operador. Quem edita: operador. Efeito ao mudar: próximo ciclo de leitura passa a usar a nova fonte, imediato, sem deploy. Validado pelo teste de conexão antes de publicar. Novos arquivos de stagetimes (trechos que começam ao longo dos dias) entram pelo mesmo caminho; se a Chronosat mudar um controle no meio da prova, o operador atualiza a URL da fonte no painel a qualquer momento, sem depender de desenvolvimento.
Para que serve: ajustar o intervalo de consulta do front e a janela de cache sem novo deploy.
Relacionado com: RF-INGEST-002, RF-PUB-009, bloco 11 do DRS; tarefas F1-02, F2-10.
Onde fica: configuração do sistema (com valor padrão).
Especificação: parâmetros janela_cache_segundos (número, default 30 a 60) e intervalo_atualizacao_front_segundos (número, default cerca de 30). Quem edita: sustentação/operador conforme a operação. Efeito ao mudar: imediato, sem novo deploy. Limite implícito: uma leitura à origem por minuto por arquivo.
Para que serve: ocultar e reexibir um competidor da página pública.
Relacionado com: RF-PAINEL-007; tarefa F3-08; entidade COMPETIDOR_OCULTO (ART-ENT-05); tela Ocultar competidor (ART-SCR-02).
Onde fica: painel, /painel/eventos/:id/ocultacao.
Especificação: o operador busca o competidor por numeral, nome ou equipe e alterna Ocultar/Reexibir por um botão; a tela mostra uma pill EXIBIDO ou OCULTO por competidor. Materializa ART-ENT-05 (INSERT idempotente para ocultar, DELETE idempotente para reexibir, chave evento+modalidade+numeral). Quem edita: operador. Efeito ao mudar: imediato na página pública, um único filtro aplicado depois de consolidar o evento remove o competidor do pódio, da tabela, do contador e dos modais de uma vez; reexibir traz de volta nos mesmos lugares. Reversível, sem limite de quantas vezes.
Para que serve: definir quais rotas o monitor de status (ART-SCR-07) verifica, uma por área, para o health-check não enumerar todas as páginas por evento.
Relacionado com: RF-PAINEL-013; tarefa F3-17; consumida por ART-SCR-07.
Onde fica: configuração de código do app (mesmo padrão do registro de verticais), não uma tabela de banco (decisão KISS: é uma lista pequena e estável, mantida junto do código como o resolvedor de verticais).
Especificação: uma lista de entradas, cada uma com area (rótulo legível, por exemplo "Home global", "Home Series", "Painel", "Verificação de saúde", "Site Sertões"), rota (o caminho a verificar, por exemplo /, /series, /painel, /health) e tipo (interna do sistema ou âncora do site). Regra de curadoria: exatamente uma rota representativa por área; proibido enumerar rotas por evento (nada de /series/2026/<evento> por evento). Como cresce: adicionar uma vertical, uma área do painel ou uma âncora do site é acrescentar uma entrada nesta lista, sem código novo (config-driven, alinhado ao ADR-010 e ao RF-CONFIG-001). Entradas de seed (ajustáveis): Home global (/), Home Series (/series), Painel (/painel), Verificação de saúde (/health), e as âncoras do site institucional da Sertões que se queira acompanhar. Quem edita: sustentação, na configuração do app. Efeito ao mudar: a próxima verificação do monitor passa a incluir ou excluir a rota. Esta lista NUNCA é usada como critério de exclusão da audiência (RF-MEDIR-009): ela contém rotas públicas reais (a raiz e a home de uma vertical), e barrar audiência por ela apagaria público legítimo; o que exclui o próprio monitor é a origem da requisição, não a rota que ele visita.
Para que serve: fonte de verdade dos 39 textos editáveis que existiam antes da Onda AUD, que passam a 41 com as duas chaves do aviso de medição (ART-CONT-01, RF-MEDIR-017) (chave, grupo, rótulo, valor de fábrica, se é removível, se é multilinha), consumida pela tela do painel e pelos renders públicos como padrão quando não há desvio salvo.
Relacionado com: RF-CONFIG-006; tarefa F3-TXT; ART-ENT-10; ART-SCR-09.
Onde fica: código-fonte, src/config/textos.ts.
Especificação: 39 chaves fixas e estáveis, em 4 grupos (Home global 9, Cabeçalho e rodapé 12, Home de cada vertical 7, Página do evento 11), contadas no catálogo em código; com as duas chaves do aviso de medição (ART-CONT-01, texto e endereço) o grupo Cabeçalho e rodapé passa a 14 e o catálogo a 41, contagem medida no catálogo em 2026-09-19; cada entrada tem chave, grupo, rótulo (o que aparece no painel), padrão (o literal exato que já existia no código, garantindo que nenhuma página muda antes de alguém editar), removível (o campo em branco apaga o elemento da página quando verdadeiro, ou volta ao padrão quando falso) e, quando aplicável, multilinha e ajuda. Literais que continham marcação HTML no código de origem (crédito de cronometragem, título em duas linhas da home global) foram quebrados em duas chaves (prefixo e nome, linha 1 e linha 2); nenhuma chave aceita marcação dentro do valor. Os glifos de estado (confirmação antes de "Resultado final", atualização antes de "atualização automática") ficam fixos no template, fora do catálogo.
Para que serve: o administrador liga, configura e testa os destinos de medição sem depender de desenvolvimento.
Relacionado com: RF-MEDIR-001, RF-MEDIR-002, RF-MEDIR-005; cartão AUD-01; tela ART-SCR-11; entidade ART-ENT-12.
Onde fica: painel, /painel/integracoes.
Especificação: materializa ART-ENT-12.
| Parâmetro | O que controla | Tipo | Default | Quem edita | Onde edita | Efeito ao mudar |
|---|---|---|---|---|---|---|
| analise.ligado | Injeta ou não a etiqueta da plataforma de análise nas páginas públicas | Interruptor | Desligado | Administrador | Tela de integrações | Imediato, sem reinício |
| analise.identificador | Identificador público do fluxo de dados da plataforma de análise | Texto | Vazio | Administrador | Tela de integrações | Imediato; vazio não injeta |
| anuncios.ligado | Injeta ou não o pixel da plataforma de anúncios nas páginas públicas | Interruptor | Desligado | Administrador | Tela de integrações | Imediato, sem reinício |
| anuncios.identificador | Identificador público do conjunto de dados da plataforma de anúncios | Texto | Vazio | Administrador | Tela de integrações | Imediato; vazio não injeta |
| anuncios.credencial | Credencial do envio da visualização pelo servidor | Segredo, escrita apenas | Vazio | Administrador | Tela de integrações | Imediato; vazio desliga só o envio pelo servidor, o do navegador continua |
| enviar evento de teste | Manda ao destino um evento marcado como teste, para conferir a chegada | Ação | (n/a) | Administrador | Tela de integrações | Nenhum efeito no público; registra na auditoria |
Auditado: sim, toda gravação e todo envio de teste (RF-PAINEL-012). A credencial nunca é devolvida por leitura do sistema, nunca é escrita em arquivo do sistema e nunca aparece em registro de auditoria; a tela exibe apenas máscara, com o botão de ver o que foi digitado no campo de entrada. O operador não alcança esta tela.
Para que serve: ajustar o comportamento da fila de gravação e a janela de retenção sem novo deploy.
Relacionado com: RF-MEDIR-007, RF-MEDIR-010, RNF-PERF-003; cartões AUD-07 e AUD-10.
Onde fica: configuração de ambiente do sistema, junto dos demais parâmetros de ajuste já existentes.
Especificação:
| Parâmetro | O que controla | Tipo | Default | Quem edita | Efeito ao mudar |
|---|---|---|---|---|---|
| registro ligado | Liga e desliga o registro interno de acessos | Interruptor | Ligado | Sustentação | Próximo acesso; desligado, nenhuma linha nasce |
| intervalo de descarga | Tempo máximo entre descargas da fila | Segundos | 5 | Sustentação | Próxima descarga |
| tamanho do lote | Número de registros que força a descarga antes do intervalo | Número | 200 | Sustentação | Próxima descarga |
| teto da fila | Número máximo de registros em memória antes de descartar | Número | 10000 | Sustentação | Imediato; ao atingir, descarta e conta |
| janela de retenção | Idade máxima de um registro na série; zero = sem prazo, nunca remove | Meses | 0 (sem prazo) | Sustentação | Próxima limpeza diária |
| janela do agora | Tamanho da janela do bloco de tempo presente | Minutos | 5 | Sustentação | Próxima abertura da tela |
Auditado: não exigido. O contador de descarte da fila é exposto no resumo do evento da tela de audiência e na verificação de saúde, para que perda de registro seja número conhecido e não silêncio.
Env vars e segredos (ART-ENVV)
Para que serve: o endereço base de onde o proxy busca os arquivos.
Relacionado com: RF-INGEST-001; tarefa F1-01.
Onde fica: configuração do servidor.
Especificação: papel: URL base do provedor Chronosat (variável de ambiente dedicada), tipo URL, escopo runtime do vendor, obrigatória, default https://satcron.com/stages/cache. Consumida pelo proxy de leitura. Sem segredo (endereço público).
Para que serve: autenticar no endpoint de produção da Chronosat quando ele existir.
Relacionado com: RF-INGEST-002, F.1.
Onde fica: configuração do servidor (segredo).
Especificação: papel: credencial (chave de API) do provedor Chronosat, tipo segredo, escopo runtime do vendor. Preparado para o endpoint de produção autenticado quando existir; hoje o endpoint é beta sem autenticação própria, então a variável fica sem valor obrigatório. Consumida pelo proxy. Nunca escrever o valor; provida pela Chronosat quando o endpoint de produção existir. A credencial e a política de acesso entram na configuração assim que a Chronosat as disponibilizar; até lá o proxy opera sem ela. Rotação conforme a política da Chronosat.
Para que serve: o domínio da página autorizado no cabeçalho de origem cruzada que o proxy devolve.
Relacionado com: RF-INGEST-001, RNF-COMP-001; tarefas F1-01, F4-04.
Onde fica: configuração do servidor.
Especificação: nome ALLOWED_ORIGIN, tipo URL, escopo runtime, obrigatória, valor igual ao subdomínio próprio da página, resultados.sertoes.com.br. Consumida pelo proxy ao montar o cabeçalho de origem cruzada.
Para que serve: permitir que a primeira carga do sistema já nasça com os destinos configurados, sem que ninguém precise abrir a tela antes do primeiro evento.
Relacionado com: RF-MEDIR-002; cartão AUD-01; entidade ART-ENT-12.
Onde fica: configuração do servidor.
Especificação: papel: semear, uma única vez, as linhas de CONFIG_RASTREAMENTO quando a tabela estiver vazia na partida. Tipo: identificadores públicos e, no destino que exige, credencial. Escopo: partida do processo. Obrigatória: não; ausente, a tabela nasce vazia e os destinos ficam desligados até o administrador configurar. Regra dura: é lida uma única vez, apenas quando a tabela está vazia; depois disso a fonte de verdade é a tabela e a tela, e alterar a configuração de ambiente não muda mais nada. Nunca escrever o valor da credencial em registro, em mensagem de erro ou em repositório de código.
Assets e mídia (ART-MEDIA)
Para que serve: a identidade visual aplicada a cada vertical (logo e cor de destaque).
Relacionado com: RF-PUB-010, RF-CONFIG-001, Ap.4; tarefas F2-11, F3-02.
Onde fica: config de vertical (ART-ENT-01, ART-CFG-01) e front.
Especificação: logotipo oficial 2026 e cor de destaque por vertical (Series e Petrobras no laranja oficial E96409, cada uma com a sua marca; MTB no rosa oficial E40E7F; Kitesurf no verde oficial 88BD23; cores extraídas do fundo dos logotipos oficiais). Tipografia: Big Shoulders Display (títulos, condensada, caixa alta) e Barlow (corpo). Paleta base comum: preto institucional 050505, texto 585858, fundos branco e f5f5f5. Fonte dos assets: os logotipos oficiais 2026 das quatro verticais já estão na pasta de identidade visual do cliente no workspace (01 - Clientes/Sertões/00 - Infos/00 - Identidade Visual/02 - Logos); fonte complementar, a biblioteca de mídia dos sites da Sertões (sertoes.com.br e sertoes.modulareasy.com); reusar, não recriar, sem depender de envio do cliente. Petrobras é vertical separada da Series (logos, participantes e patrocinadores próprios, RF-CONFIG-004). Variações: tema escuro comum com o acento de cada vertical.
Documentos oficiais (ART-DOC)
Para que serve: disponibilizar ao público os documentos oficiais produzidos pela Chronosat (o sistema não os gera).
Relacionado com: RF-PAINEL-006, RF-PUB-008, RF-PUB-009; tarefas F3-07, F2-09, F2-09b.
Onde fica: gestão de PDFs no painel; barra de documentos oficiais na página pública, logo abaixo da faixa de etapas, antes do pódio e dos filtros.
Especificação: finalidade: dar acesso aos documentos oficiais (tipicamente resultado acumulado, penalidades, ordem de largada, regulamento, boletins). Gatilho de disponibilização: o operador adiciona por link da Chronosat ou por upload de arquivo (as formas concretas no painel; a arquitetura é aberta a outras entradas como webhook sem retrabalho). Dados: título e origem por documento (ART-ENT-04). Layout: chip de download por documento numa barra compacta no topo da área de conteúdo (revisão de 2026-09-17, antes ficava numa central ao fim da página), na ordem definida pelo operador; documento inválido (sem título ou endereço inseguro) não aparece. Sem nenhum documento válido, a barra não aparece e o container permanece vazio no HTML, para o refresh suave (RF-PUB-009) preenchê-lo com um documento publicado ao vivo, sem F5. Assinatura eletrônica: não aplicável. Armazenamento: link externo ou arquivo subido. Geração: pela Chronosat, fora do escopo do sistema.
Rotinas e jobs (ART-JOB)
Para que serve: manter a série dentro da janela de retenção sem intervenção humana e sem agendador externo.
Relacionado com: RF-MEDIR-010; cartão AUD-10; entidade ART-ENT-11; parâmetro de janela em ART-CFG-09.
Onde fica: dentro do próprio processo do motor único.
Especificação: gatilho: temporizador interno, uma vez por dia, na madrugada local. Entrada: a janela de retenção vigente (padrão vinte e quatro meses). Ação: remover de ACESSO as linhas cujo instante é mais antigo que a janela, em lotes, para não segurar o banco. Saída: a quantidade removida registrada para a sustentação. Idempotente: sim, rodar duas vezes no mesmo dia não causa efeito adicional. Falha: erro é registrado e a execução do dia seguinte tenta de novo; nunca derruba o processo nem afeta a página pública. Proibição: nunca remove linha dentro da janela.
Para que serve: trazer para a série de audiência os acessos anteriores à existência do módulo, enquanto os arquivos do servidor web ainda existirem.
Relacionado com: RF-MEDIR-016; cartão AUD-16; entidade ART-ENT-11.
Onde fica: rotina executável do projeto, acionada pela sustentação.
Especificação: gatilho: execução manual pela sustentação, com o caminho dos arquivos como entrada. Janela: os arquivos do servidor web são descartados depois de poucos dias, então o que não for importado enquanto existem se perde para sempre. Transformação por linha: rota e instante lidos do registro; evento, vertical e recorte deduzidos do endereço; dispositivo e família de navegador derivados da assinatura; grupo de origem derivado da referência; visitante_dia calculado pela mesma regra do registro vivo, porém com um segredo derivado do dia do próprio arquivo, gerado no momento da importação e descartado ao fim dela (o segredo do dia corrente não serve para linhas de outros dias); tipo_acesso igual a atualização quando a referência é idêntica ao endereço pedido e igual a navegação nos demais casos (aproximação declarada, porque o registro do servidor não guarda a marca usada no registro vivo); origem sempre igual a log_nginx, com arquivo e linha_hash preenchidos. Exclusões: as mesmas quatro classes do registro vivo, com destaque para os agentes automatizados reconhecidos pela assinatura. Repetibilidade: o índice único parcial sobre (arquivo, linha_hash), válido só para linha importada, impede que a mesma linha do mesmo arquivo entre duas vezes, de modo que reimportar não muda a contagem em uma única linha; e como a chave é a proveniência e não o visitante, dois acessos legítimos e distintos do mesmo dispositivo no mesmo dia continuam sendo duas linhas. Saída: relatório com quantas linhas foram lidas, quantas entraram, quantas foram excluídas e quantas já existiam.
Conteúdo público (ART-CONT)
Para que serve: informar ao público, na própria página, que o sistema mede a audiência de forma anônima, com vínculo para a política de privacidade do cliente.
Relacionado com: RF-MEDIR-017, RF-CONFIG-006, ADR-019 (confirmado em 2026-09-19); cartão AUD-17; catálogo de textos ART-CFG-07; entidade de desvios ART-ENT-10.
Onde fica: rodapé das páginas públicas, como chave do catálogo de textos do site, editável em /painel/textos.
Especificação: entra no catálogo como duas chaves novas do grupo de cabeçalho e rodapé, porque o catálogo não aceita marcação dentro do valor e o aviso tem vínculo: uma com o texto e outra com o endereço, no mesmo tratamento já usado pelas chaves que precisaram ser quebradas em prefixo e destino. Com elas o grupo passa de 12 para 14 chaves e o catálogo de 39 para 41 (ART-CFG-07, contagem medida no catálogo em 2026-09-19). Ambas seguem o padrão das demais: chave estável, rótulo legível no painel, valor de fábrica e marcação de removível. Regras de remoção, distintas e declaradas: esvaziar a chave do texto remove o aviso inteiro da página (texto e vínculo); esvaziar apenas a chave do endereço mantém o aviso visível, sem vínculo. A chave do endereço aceita apenas endereço de página. Valor de fábrica: um aviso curto de medição anônima, apontando para a política de privacidade do cliente confirmada no ADR-019 (https://sertoes.com.br/politica-de-privacidade/, controlador Dunas Race Promoções S.A., que tem seção própria sobre o Sistema de Resultados). Aparece nos dois rodapés do sistema, incluindo o da home global, que tem marcação própria. Nunca aparece em tela do painel. O endereço permanece ajustável pelo painel sem novo deploy, então uma mudança futura não exige alteração de código.
Papel e permissão (ART-ACS)
Para que serve: definir os dois papéis autenticados do sistema (ADR-011 revisado): operador (equipe Sertões) cadastra e gerencia os campeonatos; administrador (equipe Modulareasy) faz isso e mais a gestão de contas e a auditoria. Não há matriz de permissões por recurso: um único teste "é administrador?" separa as duas telas exclusivas do administrador das demais.
Relacionado com: RF-PAINEL-001 (revisado), RF-PAINEL-011, RF-PAINEL-012, RF-PAINEL-009, RF-PAINEL-010, RF-CONFIG-001, RNF-SEG-002, RNF-SEG-003, RNF-SEG-004; tarefas F3-13, F3-14, F3-15, F3-16. Materializa-se sobre USUÁRIO (ART-ENT-06).
Onde fica: painel único; contas em USUÁRIO (ART-ENT-06), provisionadas pela sustentação (as primeiras de administrador) e depois pelo próprio administrador.
Especificação: contas nominais com papel, cada uma com senha própria hasheada; todas as verticais (Series, Petrobras, MTB, Kitesurf e futuras) no escopo de ambos os papéis; não existem credenciais nem painéis separados por vertical.
| Capability | Operador | Administrador | Escopo |
|---|---|---|---|
| Acessar o painel | Sim | Sim | Todo o painel, todas as verticais |
| Cadastrar e publicar campeonato | Sim | Sim | Todas as verticais |
| Alternar estado (ao vivo / encerrado) | Sim | Sim | Todos os eventos, todas as verticais |
| Encerrar evento (para de buscar a origem, RF-PAINEL-009) | Sim | Sim | Todos os eventos, todas as verticais |
| Criar evento retroativo (edição passada) | Sim | Sim | Todas as verticais |
| Gerir PDFs oficiais (link e upload) | Sim | Sim | Todos os eventos, todas as verticais |
| Ocultar e reexibir competidor | Sim | Sim | Todos os eventos, todas as verticais |
| Editar perfil de vertical (cor, marca, home, rótulos, regra de tripulação, ordem, nova vertical) | Sim | Sim | Todas as verticais |
| Gerir contas de usuário (criar, editar, desativar/reativar, definir papel, redefinir senha) | Não | Sim | Todas as contas |
| Consultar a auditoria | Não | Sim | Todo o log |
| Acessar dados da Chronosat direto | Não | Não | (só via proxy do servidor) |
Quem configura os papéis: a sustentação (Modulareasy) provisiona as contas de administrador iniciais; a partir daí o próprio administrador cria e mantém as demais contas, inclusive as de operador. O público não tem papel autenticado (só consome). O operador é perfil não técnico, do time da Sertões; o painel é desenhado para ele, com apoio da Modulareasy quando preciso. O administrador é a equipe da Modulareasy que opera o sistema para a Sertões, com acesso declarado e auditável (RF-PAINEL-012).
Para que serve: deixar explícito quem alcança cada uma das duas telas novas, já que uma é comum e a outra é exclusiva.
Relacionado com: RF-MEDIR-002, RF-MEDIR-011, RNF-SEG-003, RNF-SEG-006, ADR-011; cartões AUD-01 e AUD-11.
Onde fica: barreira de rota do painel, a mesma que já separa gestão de contas e auditoria das demais telas.
Especificação: a tela de audiência (/painel/audiencia, ART-SCR-10) é comum: operador e administrador entram, com a mesma visão, porque a audiência é informação de operação do evento e o operador é quem conduz o evento. A tela de integrações de medição (/painel/integracoes, ART-SCR-11) é exclusiva do administrador, pelo mesmo teste que protege gestão de contas e auditoria, porque guarda credencial e define o que é enviado para fora. Nenhum papel novo é criado: continuam sendo dois papéis, sem matriz de permissão por tela além do teste de administrador (ADR-011). O público não alcança nenhuma das duas, e nenhum dado de audiência é exposto em rota pública (RNF-SEG-006).
Fora deste inventário
Página de campeões históricos: incremento futuro (DRS, J.1 Evolução), não faz parte desta entrega e não tem ficha de artefato neste Inventário. Entra quando o conteúdo (planilha de campeões por vertical fornecida pela Sertões) chegar, sem mudança de arquitetura; nesse momento ganha seu próprio ART-SCR e, se necessário, ART-ENT.