Formula finale

antenne × utenti × furni

Il numero totale di segnali emessi è dato dal prodotto tra antenne valide, rami utente e rami furni.

Regola utenti

Con per ogni utente = disattivo, il ramo usa sempre l'utente che innesca. Con per ogni utente = attivo, il ramo usa l'utente che innesca più gli utenti trovati dalla source.

Regola furni

Se la source furni restituisce elementi, il flow attuale apre un ramo per ogni furni. Se non restituisce nulla, viene emesso un solo ramo senza furni allegati.

## Pseudo flow

1. 1. Vengono risolte le antenne destinazione.
2. 2. Restano valide solo le antenne reali; se non ne resta nessuna, il flow si ferma.
3. 3. Viene preso l'utente che ha innescato, se esiste.
4. 4. Vengono risolti gli utenti dalla source utenti.
5. 5. Vengono risolti i furni dalla source furni.
6. 6. Se “per ogni utente” è attivo, si costruisce una lista unica con:
   - sempre l'utente che innesca, se presente;
   - poi tutti gli utenti della source;
   - senza duplicati.
7. 7. Se “per ogni utente” è disattivo, si usa un solo ramo utente: l'utente che innesca.
8. 8. Se la source furni ha elementi, si apre un ramo per ogni furni.
9. 9. Se la source furni è vuota, si apre un solo ramo senza furni.
10. 10. Per ogni combinazione antenna + utente + furni viene emesso un segnale separato.
11. 11. Ogni segnale porta con sé:
    - la tile dell'antenna;
    - l'utente del ramo corrente, se presente;
    - l'utente originario che ha innescato la chain, se presente;
    - il furni del ramo corrente, se presente;
    - le context variables;
    - la profondità della chain aggiornata;
    - i conteggi utenti/furni esposti al ramo ricevente.

## Tabella casi · Utenti

Per ogni utente | Utente che innesca | Source utenti | Rami utente emessi | Nota
--- | --- | --- | --- | ---
Disattivo | Presente | Vuota | 1 | Parte sempre con l'utente che innesca.
Disattivo | Presente | 3 utenti | 1 | Gli utenti source non diventano rami separati.
Disattivo | Assente | Vuota | 1 | Parte un ramo senza utente.
Attivo | Presente | Vuota | 1 | L'utente che innesca viene sempre incluso.
Attivo | Presente | 3 utenti diversi | 4 | Utente che innesca + 3 utenti della source.
Attivo | Presente | Contiene già l'utente che innesca | Utenti unici | Nessun duplicato.
Attivo | Assente | 3 utenti | 3 | Usa solo gli utenti trovati dalla source.
Attivo | Assente | Vuota | 1 | Parte un ramo senza utente.

## Tabella casi · Furni

Source furni | Furni trovati | Rami furni emessi | Dato nel singolo ramo
--- | --- | --- | ---
Vuota | 0 | 1 | Nessun furni allegato
1 furni | 1 | 1 | Quel furni
3 furni | 3 | 3 | Un furni diverso per ramo
7 furni | 7 | 7 | Un furni diverso per ramo

Nel comportamento attuale, se la source furni restituisce elementi, il flow si apre sempre per furni singolo.

## Tabella casi · Combinazioni complete

Caso | Antenne | Rami utente | Rami furni | Totale segnali
--- | --- | --- | --- | ---
Utente che innesca presente, per ogni utente disattivo, 3 furni | 2 | 1 | 3 | 6
Utente che innesca presente, per ogni utente attivo, source utenti con 3 utenti, 3 furni | 2 | 4 | 3 | 24
Utente che innesca presente, selector utenti vuoto, 7 furni | 1 | 1 | 7 | 7
Nessun utente, source utenti vuota, 7 furni | 1 | 1 | 7 | 7
Nessuna antenna valida | 0 | qualsiasi | qualsiasi | 0

## Conteggi esposti al ricevente

- Conteggio utenti con “per ogni utente” attivo: numero di utenti unici del merge tra utente che innesca e source utenti.
- Conteggio utenti con “per ogni utente” disattivo: se la source utenti ha elementi, vale il numero di utenti trovati dalla source; altrimenti vale 1 se esiste l'utente che innesca, altrimenti 0.
- Conteggio furni: nel singolo ramo vale 1 se c'è un furni allegato, altrimenti 0.

## Nota importante sul comportamento attuale

Oggi il flow reale fa fan-out per furni quando la source furni restituisce elementi. Quindi, se dalla source arrivano 7 furni, il sistema apre 7 rami furni distinti. Questo è importante perché impatta sia il numero totale dei segnali sia i conteggi osservati a valle.

Inoltre il segnale conserva anche l'utente originario che ha avviato la chain, separato dall'utente del ramo corrente.