A Caixa sorteou a Mega-Sena 5 dias seguidos e quebrou o calendário do meu site
O site que mantenho publica os resultados da Mega-Sena. Em vez de fixar no código os dias de sorteio, eu os deduzo dos últimos 12 concursos — o calendário da Caixa mudou duas vezes nos últimos dois anos (quarta/sábado → terça/quinta/sábado em 2025 → terça/quinta/domingo em julho de 2026), e deduzir parecia mais honesto do que editar uma constante toda vez.
export function diasDeSorteio(concursos, amostra = 12) {
const regulares = concursos.filter((c) => !c.especial && !REMARCACOES[c.data]).slice(-amostra);
return [...new Set(regulares.map((c) => diaSemana(c.data)))].sort((a, b) => a - b);
}
Funcionou bem por meses. Aí a Caixa anunciou a "Mega Semana": de 26 a 30 de outubro, sorteio todo dia, de segunda a sexta, no lugar do calendário normal daquela semana.
Cinco sorteios em dias seguidos dentro de uma amostra de 12. O resultado é aritmética simples: a promoção virou maioria, e o site passou a anunciar, com toda a confiança, que a Mega-Sena é sorteada "de segunda a sexta e aos domingos". A agenda projetava sorteios para as segundas-feiras 02/11 e 09/11 — dias em que a Mega-Sena simplesmente não é sorteada.
O detalhe que dói: isso não quebrou nada. Nenhum teste falhou, nenhum erro apareceu no log. O site continuou gerando mais de 3.400 páginas, todas bem formadas, todas mentindo. Só descobri olhando a página renderizada com olho humano.
Duas lições que levei:
1. Dado excepcional contamina a inferência, e eventos raros não são raros. Eu já tinha uma lista de remarcações (sorteio de domingo que vira sábado em dia de eleição), justamente porque uma exceção lida como regra estraga a dedução. Só não previ uma exceção que dura uma semana inteira e domina a amostra.
2. Um limite de frequência não salva. A tentação é dizer "só conta o dia que aparecer 2+ vezes". Mas aí você quebra a transição legítima: quando a Caixa muda de verdade o calendário, o dia novo leva semanas para aparecer duas vezes, e nesse meio-tempo o site mente na direção oposta. Não existe limiar que distinga "promoção de uma semana" de "mudança permanente" olhando só para as datas — a diferença está no anúncio da Caixa, que não vem na API.
A correção foi aceitar isso: uma lista explícita de datas de promoção, preenchida à mão a partir do anúncio, mais um aviso no build quando o calendário deduzido passa de 3 dias por semana — que é o máximo que a Caixa já usou no calendário regular.
AVISO: o calendário deduzido tem 6 dias de sorteio (domingo, segunda, terça, quarta,
quinta, sexta). Confira se houve promoção ou mudança de calendário.
Não é elegante. Mas o erro agora aparece no log em vez de aparecer para o visitante.
Para quem quiser os dados: os resultados que uso ficam abertos em JSON, sem cadastro e com CORS, em https://resultadomega.com.br/api/ — todos os concursos desde 1996. Exemplos que rodam e a especificação OpenAPI estão em https://github.com/hargensoft/megasena-api