Descrizione
Operatore enterprise di aggregazione (reducer) che collassa un array di N oggetti in un singolo valore aggregato secondo una funzione di reduce configurabile — l'equivalent della funzione SQL aggregate (SUM, COUNT, AVG, MIN, MAX, GROUP_CONCAT) applicato in-memory ai workflow business. Sette funzioni di aggregazione coprono il 95% dei use case business analytics e reporting: (1) sum — somma totale dei valori numerici di un campo (es. expectedRevenue di crm.lead per il forecast di pipeline del mese), (2) count — conteggio degli item (con filtro opzionale "count where status=open"), (3) avg — media aritmetica con gestione precision (default 2 decimal places), (4) min/max — estremi del dataset (utile per trovare l'ordine più alto/basso, la fattura più recente/vecchia), (5) concat — concatenazione di stringhe con separator configurabile (es. concat di tutti i nomi cliente del segmento separati da virgola per email digest), (6) collect — raccolta in array di tutti i valori di un campo (es. tutti gli email del segmento per bulk send), (7) median — mediana statistica più robusta dell'avg in presenza di outlier che distorcono la media. Group-by opzionale potentissimo: oltre all'aggregazione globale sull'intero array, è possibile aggregare PER GRUPPO sulla base di un campo discriminante (es. somma amount per customer_id, count orders per region, avg sentiment per source) — l'output diventa una Map { group_key: aggregatedValue, ... } che è pronta per essere serializzata come tabella di summary report nell'email cliente o nel PDF mensile del controlling. Pattern composto group_by + aggregate è il workhorse delle pipeline ETL leggere che evitano di dover scrivere SQL diretto al database. Gestione robusta dei valori non-numeric: per sum/avg/min/max, gli item con valore null/undefined/stringa-non-parsabile vengono skipati (non droppano il workflow) e tracciati in skippedNonNumeric output — pattern fail-safe vs naïve Math.sum() che esploderebbe su NaN. Type coercion intelligente: stringhe numerich "42.5" → 42.5, stringhe formato italiano "1.234,56" → 1234.56 (gestisce locale italiano con virgola decimale), boolean true/false → 1/0 per sum semantico. Output: { value (single value per aggregazione globale, o Map per group-by), inputCount (size array di partenza), processedCount (effettivamente aggregati dopo skip non-numeric), skippedNonNumeric (count item skipati con motivazione esplicita) }. Use case: KPI dashboard del business (somma fatturato giorno-corrente, count ordini settimanali, avg order value, max ordine del mese) tramite trigger_cron daily + db_query + aggregate; rollup analytics multi-tenant per super_admin che vede aggregato dei KPI per workspace_id; calcoli statistici post-query DB pre-visualizzazione (es. compute della percentile 95th senza dover writing SQL window functions); aggregare result di una loop iteration prima del send-email summary (loop processa 100 ordini → aggregate dei flag success/failed → email digest "85 successful, 15 failed, total amount €12.5k").
