Event Time & Windows
O timestamp de negócio occurredAt foi usado por um EventTimeExtractor; a decisão de janela não dependeu do instante em que o broker recebeu o record.
Event-time e stream-time
event-time é o timestamp do evento. stream-time é o maior timestamp observado pela task. A task só considera uma janela encerrada quando o stream-time avança além dos limites e da grace period.
Out-of-order e grace
Records com occurredAt em ordem 10s, 30s, 20s foram agregados na mesma janela. Uma janela de 60 segundos teve grace de 20 segundos. Depois de avançar o stream-time 90 segundos, um evento antigo foi rejeitado com Skipping record for expired window.
window start + 0ms incluído
window start + 59,999ms incluído
window start + 60,000ms próxima janela
As janelas são intervalos half-open. A janela de velocidade materializada por user publicou paymentCount, totalAmount, limites da janela e a conversão auditável para minor units descrita em MONEY_REPRESENTATION.md.
Grace não é uma fila de atraso infinita: depois do prazo, o evento pode ser descartado. A semântica temporal deve ser definida junto com retenção, observabilidade e reconciliação do domínio.