Materiale didattico · OFL-1.1

Riferimento BPMN 2.0

Partecipanti

Pool
Participant
Corsia (Lane)
Lane

Pool

Contenitore di un processo. Un partecipante di un’interazione. I pool si scambiano dati solo tramite flussi di messaggi. Può essere compresso per nascondere i dettagli.

Pool con corsie: modello di orchestrazione
Il pool come «direttore d’orchestra»: un processo coordinatore distribuisce i task ai partecipanti
Collaborazione: due pool si scambiano messaggi
Collaborazione: pool indipendenti (cliente e pizzeria) collegati da flussi di messaggi

Corsia (Lane)

Una banda all’interno di un pool che indica chi esegue i task (una posizione, un ruolo, un reparto o un sistema IT).

Corsie: task suddivisi per ruolo
Corsie all’interno del pool «appartamento condiviso» — i task sono suddivisi tra i coinquilini (Christian, Falko, Robert); un gateway XOR sceglie cosa cucinare

Attività (Activities)

Tipi di task

Astratto
Task (None)
Manuale
Manual
Utente
User Task
Invio
Send Task
Ricezione
Receive Task
Script
Script Task
Servizio
Service Task
Regola di business
Business Rule

Astratto (None Task)

Il tipo non è specificato. Si usa nelle prime fasi di modellazione, quando il metodo di esecuzione non è ancora deciso o quando è irrilevante per l’obiettivo del diagramma. In sostanza un segnaposto che in seguito viene raffinato in un tipo concreto.

Task utente (User Task)

Eseguito da una persona tramite un’interfaccia software: un modulo nel CRM, una schermata in un’app web, un elemento in un task manager. La differenza fondamentale rispetto a un task manuale è che la persona lavora dentro il sistema che tiene traccia dello stato del task.

Esempi: approvare una richiesta nel sistema, compilare un modulo, revisionare un documento in un portale self-service.

Task manuale (Manual Task)

Eseguito da una persona senza il coinvolgimento del motore BPM. Il sistema non è in grado di rilevare automaticamente quando questo lavoro inizia o finisce.

Esempi: firmare fisicamente un documento, telefonare a un cliente, tenere una riunione in presenza, consegnare un pacco tramite corriere.

Task di servizio (Service Task)

Eseguito automaticamente da un programma o un servizio. Nessuna persona è coinvolta. È il tipo di task più comune nei processi eseguibili.

Esempi: una richiesta HTTP a un’API, una scrittura su database, una chiamata a un microservizio, l’esecuzione di un calcolo.

Task di invio (Send Task)

Invia un messaggio a uno specifico partecipante esterno (un altro processo o sistema) e termina immediatamente, senza attendere una risposta. Un pattern «fire-and-forget».

Esempi: inviare un’e-mail a un cliente, pubblicare un evento in una coda di messaggi, inviare una notifica tramite webhook.

Task di ricezione (Receive Task)

Attende un messaggio in arrivo da un partecipante esterno. Il processo si mette in pausa su questo task fino all’arrivo del messaggio.

Una variante speciale è il Receive istanziante: se un task di questo tipo è il primo passo di un processo, la ricezione stessa del messaggio genera una nuova istanza di processo (un’alternativa all’evento di inizio messaggio).

Esempi: attendere la risposta di una controparte, attendere un callback da un fornitore di pagamenti, attendere una conferma di consegna.

Task di script (Script Task)

Esegue uno script incorporato (codice) definito direttamente nel modello di processo. A differenza di un task di servizio, il codice non richiama alcun sistema esterno: viene eseguito dentro il motore BPM.

Esempi: convertire un formato di dati, calcolare una scadenza, costruire una stringa per un’e-mail, verificare una condizione.

Task regola di business (Business Rule Task)

Richiama un motore decisionale (ad esempio una tabella DMN). Gli input vengono passati a un insieme di regole e viene restituita una decisione.

Esempi: determinare uno sconto in base al livello del cliente, calcolare un premio assicurativo, verificare una richiesta rispetto a una policy, classificare una domanda.
Tutti i tipi di task BPMN in un unico diagramma
Panoramica di tutti i tipi di task: astratto, manuale, utente, ricezione, invio, script, servizio, regola di business

Marcatori dei task

Piccole icone al centro della parte inferiore del rettangolo del task. Indicano il comportamento del task, non il suo tipo.

Loop
Loop
Multi-ist. ∥
Parallel MI
Multi-ist. ≡
Sequential MI
Compensazione
Compensation
Ad-hoc ~
Ad-hoc
Sottoprocesso +
Subprocess
MarcatoreSignificatoEsempio
↻ LoopIl task si ripete finché una condizione è verificata (una sola istanza, più iterazioni)Revisionare un documento → inviare → se respinto, ripetere
∥ Multi-istanza parallelaN istanze partono contemporaneamente — una per ogni elemento della collezioneInviare la notifica a tutti gli approvatori contemporaneamente
≡ Multi-istanza sequenzialeLe stesse N istanze, ma una dopo l’altraIntervistare ogni candidato a turno
⏪ CompensazioneUn task di rollback: viene eseguito solo quando la compensazione viene attivata, per annullare un’azione già completata«Annulla prenotazione» dopo che «Prenota hotel» è già stato completato
~ Ad-hocI task all’interno del sottoprocesso vengono eseguiti in qualsiasi ordine, possono essere ripetuti o saltati; al loro interno non sono ammessi eventi di inizio e fineLibera scelta dei passi durante una consulenza con il cliente
+ SottoprocessoUn’attività composita con una sequenza interna nascosta; i flussi non possono attraversarne il confine«Elaborazione dell’ordine» nasconde 10 passi interni
Marcatore Loop su un task
Marcatore Loop (↻): il task si ripete finché una condizione non è soddisfatta
Marcatore multi-istanza su un task
Multi-istanza parallela (∥): «scegli la pizza» viene eseguito in un’istanza per ogni coinquilino contemporaneamente
Marcatore di compensazione su un task
Marcatore di compensazione (⏪): un task di rollback che viene eseguito quando un’azione completata viene annullata

Sottoprocesso

Un’attività composita contrassegnata con «+». Contiene una propria sequenza di passi. I flussi non possono attraversarne il confine. Gli eventi intermedi si agganciano al confine.

Sottoprocesso: complessità nascosta
Un sottoprocesso incapsula la propria sequenza interna: dall’esterno è visibile solo il marcatore «+»

Call Activity

Bordo spesso. Fa riferimento a un sottoprocesso globale (ad esempio «Approvvigionamento») riutilizzato in processi diversi.

Differenza rispetto a un sottoprocesso incorporato: in un sottoprocesso incorporato i dati sono accessibili direttamente (ambito condiviso con il processo padre). Una Call Activity è un processo separato: i suoi input e output richiedono un mapping esplicito dei dati — cosa passiamo alla chiamata e cosa leggiamo al ritorno.
Call Activity: un sottoprocesso condiviso riutilizzato in più processi
Call Activity: un unico sottoprocesso globale «Acquista articolo» (bordo spesso) viene richiamato sia da «Elaborazione dell’ordine» sia da «Gestione delle scorte»

Sottoprocesso ad-hoc

Marcatore «~». Le attività al suo interno possono essere eseguite in qualsiasi ordine, ripetute o saltate. Al suo interno non sono ammessi eventi di inizio/fine.

Sottoprocesso ad-hoc: task in qualsiasi ordine
Ad-hoc (~): i task al suo interno vengono eseguiti in qualsiasi ordine e possono essere ripetuti

Sottoprocesso di evento

Bordo tratteggiato all’interno di un processo. Attivato da un evento di inizio mentre il processo padre è attivo. Interrompente — annulla il padre. Non interrompente — viene eseguito in parallelo.

Sottoprocesso di evento
Sottoprocesso di evento (bordo tratteggiato): attivato da un evento all’interno del processo padre attivo

Gateway

Controllano la diramazione e la convergenza. Un gateway non è un task! La decisione viene presa prima del gateway.

Esclusivo XOR
O uno o l’altro
Parallelo AND
E/E
Inclusivo OR
Uno o più
Basato su eventi
Event-based
Complesso
Complex
Nessuno
None

Gateway esclusivo (XOR)

Il gateway più comune. In fase di divisione attiva esattamente un percorso uscente — quello la cui condizione risulta vera per prima. Se nessuna condizione è soddisfatta, il processo termina con un errore (per questo è buona pratica definire sempre un ramo «default»). In fase di convergenza lascia passare subito ogni token in arrivo, senza attendere gli altri.

Analogia: un bivio in cui si prosegue in una sola direzione.

Esempi: «L’ordine è pagato? → Sì / No», «L’importo è > 10.000? → Sì / No».
Consiglio: formula la domanda prima del gateway e riporta le opzioni di risposta sulle frecce uscenti.
Gateway esclusivo (XOR) — esempio
Gateway XOR: «quale piatto?» → scegliere una ricetta tra le tante (viene attivato un solo percorso)

Gateway parallelo (AND)

In fase di divisione attiva tutti i percorsi uscenti in una volta, senza condizioni — nessun controllo. In fase di convergenza attende i token su tutti i percorsi entranti e solo quando sono arrivati tutti fa passare un unico token.

Analogia: un responsabile assegna dei compiti a cinque collaboratori e aspetta che tutti e cinque abbiano finito.

Esempi: spedire la merce ed emettere la fattura in parallelo; reparti diversi che revisionano i documenti contemporaneamente.
Antipattern: non far convergere con AND i rami che sono stati divisi con XOR o dei quali ne viene percorso sempre uno solo. L’AND attenderà all’infinito i token su tutti gli ingressi — il processo va in deadlock. Dopo uno XOR, fai convergere con uno XOR (o un rombo vuoto).
Gateway parallelo (AND) — esempio
Gateway AND: tutti i rami partono in parallelo e vengono sincronizzati alla convergenza (si attendono tutti)

Gateway inclusivo (OR)

Un ibrido tra XOR e AND. In fase di divisione attiva uno o più percorsi a seconda delle condizioni — ogni condizione viene valutata in modo indipendente. In fase di convergenza attende i token solo sui percorsi effettivamente attivati (non su tutti, come fa l’AND).

Analogia: un buffet — prendi un piatto, due o tutti, ma mai zero.

Esempi: il cliente ha scelto consegna e/o ritiro e/o confezione regalo — eseguire le opzioni selezionate e attendere il completamento di tutte.
Attenzione: i gateway OR sono più difficili da analizzare. Nei diagrammi molto ramificati le regole di sincronizzazione possono non essere ovvie. Non tutti i motori li supportano correttamente.
Gateway inclusivo (OR) — esempio
Gateway OR: vengono attivati uno o più percorsi a seconda delle condizioni; la convergenza attende solo i rami effettivamente percorsi

Gateway basato su eventi

Fondamentalmente diverso dagli altri: instrada non in base ai dati, ma in base all’evento che arriva per primo. Dopo il gateway si collocano eventi intermedi di attesa (timer, messaggio, condizionale, segnale). Non appena uno si attiva, gli altri vengono annullati.

Analogia: hai ordinato una pizza — se non arriva entro 60 minuti, chiami la pizzeria; se arriva prima, mangi.

Esempi: attendere il pagamento con un timer (non pagato entro 3 giorni → annullare l’ordine); attendere la risposta del cliente o una scadenza.
Gateway basato su eventi — esempio
Gateway basato su eventi: instrada in base all’evento che arriva per primo (timer vs. messaggio)

Gateway complesso

Si usa quando la logica di diramazione non può essere espressa dai gateway standard. La condizione di convergenza è definita da un’espressione (ad esempio, «continua quando 3 rami su 5 sono terminati» oppure «quando è arrivata la prima risposta e sono passati 10 minuti»).

In pratica: usato raramente e non tutti i motori BPM lo supportano. Se è sufficiente una combinazione di XOR / AND / OR, è preferibile usare quella.

Nessuno (esclusivo di default)

Un rombo senza marcatore. Semanticamente equivalente a un gateway esclusivo (XOR) — lo standard BPMN consente di omettere la croce. Alcuni metodologi lo considerano una cattiva pratica perché riduce la leggibilità: non è chiaro se l’autore abbia dimenticato il marcatore o abbia scelto XOR di proposito.

Eventi (Events)

Concetti chiave

Un evento è qualcosa che accade (un fatto), a differenza di un task (un’azione attiva). Sono disegnati come cerchi.

Inizio
Cerchio sottile
Intermedio
Cerchio doppio
Fine
Cerchio spesso

Catching (marcatore non riempito) — attesa. Throwing (riempito) — lancio. Eventi di confine: interrompenti (continuo) e non interrompenti (tratteggiato).

Tabella riassuntiva degli eventi

Icone di bpmn-font (Camunda). «—» = non definito dallo standard.

TipoInizioIntermedioFine
NormaleSottopr. ev.Non int.CatturaDi confineConfine non int.Lancio
Nessuno
✉ Messaggio
⏱ Timer
⚡ Errore
▲ Segnale
📋 Condizionale
↗ Escalation
⬤ Terminazione
⏪ Compensazione
✖ Annullamento
➡ Collegamento
⬠ Multiplo
➕ Multiplo parallelo

Messaggio (Message)

Scambio con un destinatario specifico: e-mail, chiamata, HTTP, push. Disponibile in ogni posizione.

Evento di messaggio — esempio
Evento di messaggio: l’invio dell’ordine della pizza come evento throwing attiva il processo sul lato del destinatario

Timer

Data/ora, intervallo, conto alla rovescia (scadenza). Solo catching.

Evento timer — esempio
Timer: di inizio (avvio programmato), di confine interrompente (scadenza), di confine non interrompente (promemoria)

Errore (Error)

Un guasto grave. Catching — solo su un confine. Throwing — solo alla fine.

Evento di errore — esempio
Un evento di errore di confine sul sottoprocesso «Acquista articolo»: in caso di guasto il flusso va al gestore «gestisci fallimento acquisto»; il percorso ideale prosegue con il pagamento della fattura

Condizionale (Conditional)

Attesa di una condizione esterna («il forno è caldo»). Solo catching.

Evento condizionale — esempio
Condizionale: il processo attende che si verifichino condizioni esterne — la pizza non viene messa in forno finché non raggiunge i 180°, e non viene sfornata finché non è pronta

Segnale (Signal)

Trasmissione broadcast (a differenza di un messaggio indirizzato). Reagisce qualsiasi sottoscrittore.

Evento di segnale — esempio
Segnale: uno spot TV sulla pizza avvia il processo tramite un signal start; dopo l’acquisto arriva l’appetito (una condizione), poi la pizza viene mangiata; il signal end trasmette la valutazione a pizzatest.de

Terminazione (Terminate)

Arresta immediatamente l’intera istanza del processo. Solo di fine.

Processo parallelo con eventi di fine normali
Senza Terminate: dopo la divisione AND i token procedono in parallelo. Il task 2 dura 45 minuti, il task 3 ne dura 30; l’istanza termina dopo 55 minuti, quando entrambi i token sono stati consumati dai rispettivi eventi di fine «vuoti» (none).

E se, dopo la fine del task 3, non ha più senso continuare il task 2? Allora si usa il pattern seguente:

Lo stesso processo con un evento di fine Terminate
Con Terminate: dopo il task 3 si verifica la condizione «il task 2 serve ancora?». In caso negativo — il flusso entra in un evento Terminate che consuma all’istante ogni token residuo dell’istanza (incluso il task 2 ancora in esecuzione). Terminate è valido solo come evento di fine.
Evento di collegamento — esempio
Evento Link: un «teletrasporto» — il throwing lancia il flusso, il catching lo riprende, sostituendo una lunga freccia che attraversa il diagramma

Compensazione (Compensation)

Annulla un’azione precedentemente completata. Il task di compensazione è collegato tramite un’associazione.

Evento di compensazione — esempio
Compensazione: un evento di confine (contorno ⏪) su un task completato attiva il relativo gestore di compensazione tramite un’associazione

Escalation

Inviata da un sottoprocesso al processo padre — non è un errore. Può essere non interrompente.

Evento di escalation — esempio
Escalation: il sottoprocesso «Consegna» lancia «in ritardo»; il padre la cattura con un’escalation di confine non interrompente e avvisa il cliente in parallelo — il flusso principale continua

Annullamento (Cancel)

Solo nel contesto delle transazioni. Di fine — rollback. Di confine — catch.

Dati, artefatti, flussi

Oggetto dati
Data Object
Archivio dati
Data Store
Input di dati
Data Input
Output di dati
Data Output
Annotazione
Text Annotation
Gruppo
Group
Flusso
Sequence Flow
Flusso di messaggi
Message Flow
Condizionale
Conditional Flow
Predefinito
Default Flow
Transazione
Transaction

Oggetto dati (Data Object)

Un «foglio di carta» con l’angolo piegato. Rappresenta informazioni che vengono create, consumate o trasferite tra i task all’interno di un’istanza di processo. Esiste solo finché l’istanza è attiva.

Esempi: una richiesta di un cliente, una bozza di contratto, un report che viene assemblato lungo il percorso.

Archivio dati (Data Store)

Un cilindro. Un’archiviazione persistente che sopravvive all’istanza del processo: un database, un registro, un archivio di file. I task lo leggono e ci scrivono.

Esempi: CRM, ERP, database degli ordini, archivio documenti.

Input di dati / Output di dati

Parametri di un processo o sottoprocesso sul suo confine. Input — ciò che viene fornito dall’esterno; output — ciò che viene restituito. Freccia con un triangolo vuoto/pieno.

Esempi: il sottoprocesso «Approvvigionamento» riceve in input un elenco di articoli e restituisce in output una fattura.

Annotazione di testo (Text Annotation)

Un commento collegato a qualsiasi elemento tramite una linea tratteggiata. Non incide sull’esecuzione — serve solo a chiarire le cose al lettore del diagramma.

Gruppo (Group)

Un rettangolo tratteggiato con angoli arrotondati. Un raggruppamento visivo di elementi (ad esempio «tutti i task di logistica»). Non ha semantica di esecuzione; i flussi possono attraversarne liberamente il confine.

Flusso di sequenza (Sequence Flow)

Una freccia continua con la punta piena. Definisce l’ordine di esecuzione all’interno di un unico pool. Non può attraversare i confini del pool.

Un flusso condizionale (con un piccolo rombo all’origine) — si attiva solo se la sua condizione è vera. Si usa sulle frecce uscenti da un task senza gateway.

Un flusso predefinito (con un trattino all’origine) — il percorso di riserva di un gateway XOR/OR o di una divisione condizionale, percorso se nessun’altra condizione è soddisfatta.

Flusso di messaggi (Message Flow)

Una freccia tratteggiata con la punta vuota. Collega pool diversi — un messaggio scambiato tra partecipanti indipendenti. Non si usa all’interno di un unico pool.

Esempi: il cliente invia un ordine alla pizzeria; la banca invia una conferma di pagamento.

Transazione (Transaction)

Un sottoprocesso con un doppio bordo. Semantica ACID: o tutte le azioni interne vengono confermate con successo, oppure l’intera transazione viene annullata tramite un evento Cancel (con compensazioni). Si usa per garantire la coerenza nelle operazioni distribuite.

Esempi: prenotare un pacchetto «volo + hotel + auto» — se un passo fallisce, l’intera prenotazione viene annullata.

Pronto a provare?

Crea gratis il tuo primo diagramma BPMN — senza registrazione né carta di credito.

Inizia a generare diagrammi BPMN con l’IA
Esempi adattati da camunda.com. Raccolti da BP1.AI.