01
Dois relatórios corretos que discordam em treze mil reais
A conversa sempre começa do mesmo jeito. Alguém mostra dois números que deveriam ser idênticos e pergunta qual está errado. A resposta desconfortável é que nenhum dos dois está errado: eles respondem a perguntas diferentes que foram escritas com as mesmas palavras. O relatório do financeiro pergunta quanto foi faturado no mês de setembro no horário de São Paulo. O painel de dados pergunta quanto foi faturado entre o primeiro instante de setembro em UTC e o último instante de setembro em UTC. São dois intervalos distintos, deslocados em três horas, e a diferença entre eles é exatamente o volume de vendas que aconteceu nessas três horas de fronteira.
O que torna esse erro difícil de encontrar é que ele não produz sintoma nenhum na maior parte do tempo. Em um mês de movimento constante, a diferença é pequena o bastante para ser confundida com arredondamento ou com uma venda estornada. Em um mês com campanha que termina à meia-noite do dia trinta, a diferença explode, porque a última hora de uma promoção concentra um volume desproporcional e essa hora cai justamente na fronteira disputada. É por isso que o problema aparece primeiro no mês em que o negócio deu certo, e não no mês tranquilo em que alguém teria tempo de investigar.
FRONTEIRA DE SETEMBRO, DUAS DEFINICOES
Sao Paulo (UTC-3) 30/set 21:00 ---- 30/set 23:59 ---- 01/out 00:00
UTC 01/out 00:00 ---- 01/out 02:59 ---- 01/out 03:00
Venda registrada em 2026-10-01T01:30:00Z
-> em UTC: outubro
-> em Sao Paulo: 30 de setembro, 22:30
Relatorio financeiro (mes civil de Sao Paulo): a venda entra em setembro
Painel de dados (mes civil em UTC): a venda entra em outubro
JANELA DE AMBIGUIDADE POR FECHAMENTO
inicio: 30/set 21:00 UTC
fim: 01/out 03:00 UTC
duracao: 3h para UTC-3, ate 14h quando ha regiao em UTC+11 no mesmo relatorio
Todo registro dentro dessa janela pertence a dois meses ao mesmo tempo,
e o mes que ele recebe depende de qual consulta o leu primeiro.A regra que sai desse desenho vale para qualquer agregação por período: o fuso não é uma propriedade de formatação aplicada no fim, é o parâmetro que define quais linhas entram na soma. Trocar o fuso de exibição muda como uma data aparece na tela e não muda nenhum total. Trocar o fuso do recorte muda o conjunto de linhas somadas e, portanto, muda o total. Times inteiros perdem semanas tratando o primeiro caso quando o problema é o segundo, porque a palavra fuso é usada para os dois.