Descrizione
Aggregatore time-series enterprise che raggruppa elementi di un array in finestre temporali non sovrapposte (tumbling window — il modello di windowing di Apache Flink, Kafka Streams, Spark Structured Streaming). Riceve un dataset con un campo timestamp su ciascun item (ISO 8601 o Unix epoch in ms) e produce i bucket — la primitiva per dashboard time-series, KPI rolling, analytics per cohort temporali, alerting su anomalie rispetto a baseline storica. Due modalità di finestratura: (1) FISSA (default) — finestre di durata costante in secondi (windowSeconds), allineate all'epoch UTC: semplice e deterministica per qualsiasi durata (es. 300s = 5 minuti, 3600s = 1 ora); (2) CALENDARIO timezone-aware — granularity minute/hour/day/week/month allineata ai confini CIVILI nella timezone scelta (default UTC, es. "Europe/Rome"): day = mezzanotte locale, week = lunedì ISO 8601 (o domenica, configurabile), month = primo del mese (mesi reali 28-31gg + cambio anno). Gestisce correttamente le transizioni di ora legale/solare (DST) — fondamentale per il reporting italiano dove "vendite del 31 marzo" deve includere gli eventi fino alle 23:59 locali, non spostarli al giorno dopo. Output: { windows: { <ISO-del-bordo>: [item...] } (mappa bucket→item), windowCount, totalItems, undated: [item...] + undatedCount (gli item SENZA timestamp valido, tracciati e NON persi in silenzio), granularity, timezone, windowSizeSec (solo in modalità fissa) }. Use case: bucket eventi error_log per dashboard hourly "errori/ora delle ultime 24h" con detection di spike anomali rispetto al baseline; aggregazione di account.move Odoo per giorno per il report fatturato del mese tramite agent_business_summarizer; count di sessioni utenti distinte per settimana per il MAU/WAU/DAU del business dashboard B2B SaaS; rolling KPI con window deslizante (es. "media mobile su 7 giorni della conversion rate") per smussare il rumore daily; aggregazione di chiamate LLM gateway per ora per il forecast costi mensili e capacity planning vLLM.
