UNIVERSITÀ POLITECNICA DELLE MARCHE FACOLTÀ DI INGEGNERIA _______________________________________________________________ Corso di Laurea in Ingegneria Informatica e dell’ Automazione Progetto ed implementazione in “YAWL” di workflows per l’ accesso a servizi sociosanitari via Internet Relatore: Chiar.mo Tesi di Laurea di: Prof. Dragoni Aldo Franco Minnozzi Rachele Anno Accademico 2006 - 2007 1 Indice Introduzione 5 Capitolo 1 - Linee guida cliniche 8 1.1 - Introduzione 1.2 - Linee guida cliniche 1.2.1 - Criteri di scelta e metodologie per la realizzazione di una LG 1.2.2 - Presentazione e disseminazione di una LG 1.2.3 - Implementazione ed adattamento locale 1.2.4 - Aggiornamento 1.3 - Sistemi per la gestione delle linee guida 1.3.1 - Rappresentazione formale di una linea guida 1.3.2 - EON Capitolo 2 – Workflow 24 2.1 - Introduzione 2.2 - Workflow 2.2.1 - Tipologie di workflow 2.2.2 - Workflow clinico 2.3 Definizione di processo 2.4 - Prospettive di un workflow 2.4.1 - Control-flow pattern 2.4.2 - Altri pattern 2 2.5 - Reti di Petri 2.5.1 - Reti di Petri di alto livello 2.5.2 - Reti di Petri e workflow 2.6 - Workflow Management System 2.6.1 - Componenti di un WfMS 2.6.2 - Workflow Reference Model Capitolo 3 – Yawl 52 3.1 - Introduzione 3.2 - Linguaggio Yawl 3.3 - Sistema Yawl 3.4 - Editor Yawl 3.4.1 - Prospettiva dei dati e delle risorse 3.5 - Yawl Engine 3.6 - Servizi Yawl 3.6.1 - Worklet Service Capitolo 4 - Linee guida implementate in Yawl 73 4.1 - Introduzione 4.2 - Esempio di linea guida: diabete 4.3 - Esempio di linea guida: obesità Conclusioni 87 Bibliografia 91 3 4 Introduzione Le linee guida, sviluppate sulla base delle migliori evidenze disponibili, consentono di razionalizzare gli interventi clinici e di migliorare la qualità di cura offerta ai pazienti. In questi ultimi anni sono state create molte linee guida; sfortunatamente, però, i metodi di diffusione adottati fino a poco tempo fa (per lo più di tipo cartaceo) non hanno portato ad un loro effettivo inserimento nella pratica clinica. L’ introduzione dei sistemi informativi all’ interno delle strutture sanitarie ha fornito nuove possibilità. Si è notato che si riesce ad indirizzare il comportamento clinico verso una maggiore adesione alle raccomandazioni presenti nelle linee guida se vengono generati avvisi o segnali di allarme al medico in riferimento alla situazione di uno specifico paziente. Da qui, perciò, è nata la necessità di trasferire le informazioni espresse in forma narrativa in una forma interpretabile ed eseguibile su computer. Molti sforzi sono stati compiuti fino ad oggi ed hanno portato alla generazione di diversi linguaggi per modellare linee guida e di vari sistemi in grado di utilizzare la conoscenza in esse contenuta per supportare il medico nel processo di cura di un dato paziente. Negli ultimi tempi si sta valutando la possibilità di utilizzare il workflow (wf). La tecnologia del workflow si è sviluppata nel campo del business e si basa su due componenti principali: da un lato, la rappresentazione del processo da eseguire in termini di attività da compiere, informazioni e documenti da gestire, risorse da utilizzare, ecc. e dall’ altro, la gestione della sua esecuzione su un sistema software, che prende il nome di workflow management system (wfms). Lo scopo di questa tesi è quello di individuare i requisiti fondamentali che un modello per rappresentare linee guida deve possedere e le funzionalità che un sistema per la gestione delle linee guida deve fornire, da uno studio di quelli già esistenti. Sulla base di ciò, si vuole mostrare in che modo i workflow ed i workflow management system possano soddisfare tali esigenze. 5 A questo scopo vengono forniti due esempi di linee guida rappresentate con Yawl. Yawl (yet another workflow system) è, prima di tutto, un linguaggio per workflow ma è anche un sistema open source che consente l’ esecuzione di workflow scritti in tale linguaggio. La tesi si articola in questo modo: nel primo capitolo vengono introdotti il concetto di linea guida e la sua importanza nella pratica clinica e viene descritta sinteticamente l’ articolata procedura che si deve seguire per generare una linea guida di qualità. Inoltre vengono presentati alcuni modelli e sistemi esistenti per la rappresentazione e l’ implementazione delle linee guida, in modo da individuare le caratteristiche salienti che essi possiedono. Il secondo capitolo è dedicato ai workflow ed ai sistemi per la gestione dei workflow (wfms) mentre nel terzo si descrive Yawl. Infine, nel quarto capitolo si mostra come sia possibile rappresentare linee guida utilizzando un workflow e si riportano due esempi. Alcune conclusioni sono riportate nel capitolo finale. 6 7 Capitolo 1 LINEE GUIDA CLINICHE 1.1 Introduzione Attualmente il Servizio Sanitario si trova a dover fronteggiare una grande sfida: quella di accrescere la produttività del sistema e ridurre i costi, pur mantenendo un certo livello di qualità nella cura del paziente. Negli ultimi anni i sostenitori della cosiddetta medicina basata sull’ evidenza hanno puntato sullo sviluppo di linee guida con lo scopo di migliorare la pratica clinica. Una linea guida deve ridurre le disuguaglianze di trattamento, gli interventi inappropriati e lo spreco di risorse. E’ ormai ampiamente riconosciuto che la qualità della cura dipende non solo dalle abilità professionali dei singoli bensì anche dal livello di collaborazione all’ interno della struttura sanitaria. Quindi, spesso le linee guida prevedono una gestione integrata della malattia coinvolgendo differenti figure che, nel metterla in pratica, devono interagire fra loro. Ciò riguarda specialmente chi fornisce la cura primaria (medici di medicina generale) e chi fornisce la cura secondaria (specialisti del campo), ma anche altri operatori sanitari come nurses, assistenti domiciliari, farmacisti, ecc. Le linee guida vengono sviluppate da un gruppo autorevole di esperti, seguendo un processo articolato ma, affinché possano essere effettivamente implementate all’ interno di una struttura sanitaria, è necessario tener conto delle specifiche caratteristiche organizzative e strutturali presenti nella realtà locale. In questo contesto è necessario integrare le attività cliniche con la struttura organizzativa presente. Un sistema che supporti l’ implementazione di una linea guida 8 deve poter integrare le procedure cliniche con un modello organizzativo della struttura che prende in considerazione i ruoli, le responsabilità, le risorse, ecc. disponibili. 1.2 Linee guida cliniche Le linee guida cliniche (clinical guidelines) si sono sviluppate a partire dagli anni ottanta. Rispondono all’ esigenza di razionalizzare il comportamento clinicoorganizzativo in modo da perseguire l’efficacia e l’ appropriatezza degli interventi sanitari e l’ efficienza nell’ uso delle risorse. Costituiscono un supporto per medici ed operatori sanitari nella gestione di una classe di pazienti, fornendo la sequenza delle azioni da svolgere e le decisioni da prendere al verificarsi di certi eventi. Permettono una più rapida diffusione delle nuove conoscenze rispetto a quanto consentito dai tradizionali testi di medicina, che necessitano di lunghi tempi di redazione e pubblicazione. Il loro scopo, però, non è quello di fornire solo informazioni, bensì di modificare la pratica clinica attraverso raccomandazioni. Ed è questo che le differenzia dalle altre pubblicazioni mediche. Esse fanno uso dei risultati della medicina basata sull’ evidenza (EBM), che fonda le decisioni mediche sulla migliore evidenza messa a disposizione dallo stato attuale della ricerca. La generazioni delle evidenze è un processo sistematico ed in continua evoluzione. Secondo la definizione dell’ Institute of Medicine, le linee guida sono “raccomandazioni di comportamento clinico, elaborate mediante un processo di revisione sistematica della letteratura e delle opinioni di esperti, con lo scopo di aiutare i medici ed i pazienti a decidere le modalità assistenziali più appropriate in specifiche situazioni cliniche”. La produzione di linee guida nelle varie aree della medicina è in continua crescita ed il problema che si presenta, quindi, è quello di valutarne la qualità e la 9 completezza e di comprendere la natura delle discrepanze fra quelle esistenti sullo stesso argomento. Linee guida prodotte a livello aziendale spesso presentano carenze metodologiche dovute a competenze tecniche e risorse insufficienti per la loro elaborazione (difficilmente reperibili in questo ambito). Per questo è nato il Programma Nazionale per le Linee Guida (PNLG), coordinato dall’Agenzia per i servizi sanitari regionali e dall’ Istituto superiore di sanità, con lo scopo, non solo di realizzare linee guida, ma anche di adoperarsi per la loro divulgazione, l’ aggiornamento periodico (onde evitare che diventino obsolete) e la loro implementazione effettiva. Infatti non serve produrre linee guida se poi queste non diventano parte integrante dell’ operato clinico. L’ adattamento di una linea guida, creata a livello nazionale, ad una realtà locale necessita quasi sempre di modifiche, che tengano conto del contesto strutturale ed organizzativo nel quale devono essere introdotte. E’ importante però esplicitare ed argomentare le ragioni che hanno portato alla deviazione dalle raccomandazioni originarie. Una volta che una determinata LG è stata adattata alla situazione locale prende il nome di “percorso diagnostico-terapeutico”. A livello nazionale è stata realizzata dal CeVEAS di Modena una “banca dati” di linee guida, contenente anche una valutazione critica delle LG esaminate ed una sintesi delle principali raccomandazioni tratte dalle LG pubblicate. Pertanto prima di imbarcarsi nella produzione di una nuova linea guida, è bene verificare se già ne esistono sull’argomento, la loro qualità ed, eventualmente, procedere ad un adattamento ed aggiornamento di ciò che è già stato realizzato. Il ciclo di vita di una linea guida passa attraverso varie fasi: la scelta dell’ argomento trattato, la realizzazione, la diffusione e l’ implementazione nella pratica clinica (attraverso un’ adattamento alle esigenze locali, se necessario) ed infine la revisione e l’ aggiornamento periodico finché non sia ritenuta completamente obsoleta. 10 1.2.1 Criteri di scelta e metodologie per la realizzazione di una LG Esistono diversi fattori che possono influire sulla scelta dell’ argomento di una linea guida. Uno di questi è rappresentato dal peso della malattia. L’incidenza della stessa o delle sue complicanze unita alla possibilità di intervenire più efficacemente per eliminare l’ inappropriatezza delle cure esistenti costituiscono un buon motivo per la creazione di una linea guida. A volte può essere utile invece rispondere ad un bisogno di informazione, espresso dall’ opinione pubblica e dai pazienti su un dato problema, come avviene ad esempio ogni anno quando vengono diffuse raccomandazioni per la prevenzione dell’ influenza. Altre modalità di scelta consistono nel selezionare quei temi per i quali esistono prove scientifiche e dati accurati sugli effetti degli interventi nell’ ambito in questione oppure per i quali il rapporto costo e beneficio risulta vantaggioso. Non esiste uniformità sui metodi adottatati per produrre linee guida neppure a livello internazionale. Ciò nonostante vi sono alcuni requisiti fondamentali che devono essere rispettati per garantire rigore e trasparenza e che caratterizzano le linee guida basate sulle prove di efficacia (evidence-based guidelines) da quelle non basate sulle prove di efficacia (not evidence-based guidelines). Questi sono: 1. multidisciplinarietà del gruppo responsabile della produzione della linea guida; 2. uso, o realizzazione se non sono già disponibili, di revisioni sistematiche della letteratura; 3. classificazione delle raccomandazioni in base alla qualità delle prove scientifiche che le sostengono; 4. uso di indicatori di monitoraggio. E’ importante la costituzione di un gruppo multidisciplinare in modo da apportare punti di vista e competenze differenti. Quindi devono essere adeguatamente rappresentati sia i medici specialisti sia i medici di medicina generale e tutte le figure professionali coinvolte nella gestione del problema in esame, ad esempio tecnici diagnostici, infermieri, farmacisti, psicologi ecc. Inoltre è utile la partecipazione di 11 pazienti o di loro rappresentanti, per soddisfare il desiderio sempre crescente della popolazione di essere parte attiva nella gestione della propria salute. Può essere presente anche un esperto in economia sanitaria, quando si vuole valutare l’ impatto economico che l’ implementazione della linea guida può avere sul SS. Il numero di partecipanti non deve essere né troppo piccolo né troppo elevato (tra i 10 e i 20 membri) e si deve dare a tutti la possibilità di esprimersi liberamente. Una revisione sistematica (RS) viene definita come una “valutazione delle conoscenze disponibili su un determinato argomento, nella quale tutti gli studi rilevanti sono identificati e valutati criticamente”. Negli ultimi anni i metodi per la realizzazione di RS si sono molto affinati. La produzione di linee guida deve basarsi su revisioni sistematiche ben condotte in modo da fondare il comportamento clinico su solide basi scientifiche. Un’ agenzia che si occupa della creazione di RS è la Cochrane Collaboration. E’ importante associare ad ogni raccomandazione fornita dalla linea guida una valutazione o grading sia della qualità delle prove (livello di prova o LdP) su cui essa è basata sia dell’ importanza di una sua applicazione (forza della raccomandazione o FdR). Quest’ ultimo indice rappresenta la probabilità che l’ implementazione di tale raccomandazione porti ad un effettivo miglioramento dello stato di saluto del paziente a cui è applicata la LG. Non esiste un unico sistema di grading. Indipendentemente dalla metodologia adottata per la produzione della linea guida, è importante utilizzare degli indicatori per verificare nel tempo l’ effettiva implementazione delle raccomandazioni in essa contenute. Infine una linea guida deve: - esplicitare le alternative di trattamento e i loro effetti sugli esiti; - essere flessibile ed adattabile alle condizioni locali mutevoli; - essere chiara, cioè avere una struttura semplice e un linguaggio comprensibile. 12 1.2.2 Presentazione e disseminazione di una LG Sono stati individuati diversi ostacoli all’ introduzione effettiva di una linea guida nella pratica clinica. Uno di questi è rappresentato dalle caratteristiche formali del documento con cui viene presentata. Infatti questo deve essere semplice, facile da consultare e da memorizzare; inoltre deve avere un linguaggio non ambiguo e contenere termini ben definiti attraverso un glossario. Per tale motivo sono state fissate le caratteristiche di forma e stile e la struttura che il documento deve possedere, pur consentendo variazioni dipendenti dall’ argomento trattato nello specifico, dai destinatari e dallo scopo della linea guida. Innanzitutto il titolo deve indicare il contenuto del documento con la maggior precisione possibile compatibilmente con la necessaria concisione e deve individuare la classe di pazienti in base alla patologia, all’ età e/o ad altre caratteristiche e l’ ambito di intervento (prevenzione, terapia farmacologica, diagnosi ecc.). Prima della stesura del testo vero e proprio, dovrebbero essere riportate alcune informazioni essenziali circa gli autori, la loro qualifica ed il loro ruolo, l’indicazione di eventuali finanziamenti, la data in cui il documento è stato redatto ed, eventualmente, quando è previsto un suo aggiornamento. Segue un’ introduzione dove vengono definiti, con maggiore dettaglio rispetto al titolo, l’ argomento e l’ ambito della linea guida, gli scopi e i destinatari del documento. Nel corpo viene resa esplicita la sequenza delle decisioni chiave che il clinico deve prendere. Ad ognuna di esse vengono associate le raccomandazioni formulate sulla base delle migliori prove empiriche disponibili, i vantaggi attesi dalla loro applicazione e la probabilità che i risultati attesi si verifichino (forza delle raccomandazioni). Se sono dichiarate all’interno del documento altre decisioni di minor peso (ad esempio, la scelta tra diversi principi attivi della stessa famiglia o tra diversi test di valutazione del rischio), deve essere chiaramente indicata la loro minore importanza. Spesso sono forniti alcuni allegati per completare le informazioni contenute all’ interno del documento. Per ogni decisione chiave si può riassumere le migliori prove empiriche disponibili, i riferimenti bibliografici ed i loro livelli di qualità. E’ inoltre utile per la ricerca futura indicare le “aree grigie”, ovvero gli argomenti per i quali le 13 prove di efficacia esistenti risultano assenti o insoddisfacenti. E’ presente anche un glossario dei termini tecnici e delle sigle ricorrenti all’ interno del documento. Per la diffusione di una LG, generalmente, si utilizzano modi e tecnologie differenti considerando la varietà dei possibili utenti e dei possibili usi. E’ d’ obbligo la redazione di un tradizionale volume di testo, anche se non rispecchia le caratteristiche di immediatezza che le linee guida hanno. Di più facile consultazione, invece, è l’ opuscolo, che generalmente non supera le 60 pagine e ha un formato tascabile. Il pieghevole ha dimensioni ancora più ridotte e contiene una sintesi estrema del lavoro. Viene utilizzato come materiale informativo da distribuire ai cittadini. In alternativa al supporto cartaceo, si sono diffusi CD-ROM e DVD, i quali possono contenere sia testi completi sia versioni ridotte ed essere arricchiti con filmati, registrazioni audio, animazioni grafiche, biblioteche di articoli ed altro. Inoltre le tecnologie dell’ informazione e della comunicazione facilitano la diffusione delle linee guida perché un archivio elettronico accessibile tramite Internet consente agli utenti di disporre sempre delle versioni aggiornate. 1.2.3 Implementazione ed adattamento locale Sono state messe a punto delle strategie per facilitare l’ utilizzo di una linea guida e rimuovere gli ostacoli alla loro introduzione nella pratica clinica. L’ implementazione della LG richiede necessariamente a clinici, e non, coinvolti dei cambiamenti nelle proprie abitudini ed è frequente trovare atteggiamenti non favorevoli a tali cambiamenti. Inoltre, il contesto strutturale ed organizzativo offerto dalla realtà locale può non facilitare la realizzazione pratica delle raccomandazioni presenti nella linea guida. Pertanto può essere necessario intervenire sulla struttura e sull’ organizzazione, ad esempio modificando ruoli ed inserendo nuove competenze, ed apportare delle modifiche alle risorse disponibili, ad esempio introducendo nuove tecnologie. Inoltre 14 vengono messi in atto interventi volti alla formazione e motivazione del personale medico e non. 1.2.4 Aggiornamento Ogni documento di raccomandazioni deve essere periodicamente ripreso e revisionato sulla base delle nuove conoscenze divenute disponibili nel frattempo. Durante tale revisione si può verificare che il documento sia diventato del tutto obsoleto e debba essere completamente riconsiderato oppure che necessiti solo di qualche modifica che può essere apportata dai responsabili della iniziale produzione con la sola consultazione esterna degli esperti originariamente coinvolti. Infine si può verificare che il problema che aveva richiesto la produzione delle raccomandazioni si sia risolto e queste non siano più necessarie. I tempi per la produzione di una linea guida vanno dai 12 ai 18 mesi nel caso in cui l’ argomento non è stato precedentemente trattato e non esiste, quindi, alcuna LG pubblicata a riguardo. Tempi più brevi sono richiesti nel caso di un argomento consolidato e sul quale sono state già implementate numerose LG di qualità. Invece la revisione e l’ aggiornamento sulla base di nuove prove pubblicate può richiedere dai 6 ai 12 mesi. 1.3 Sistemi per la gestione delle linee guida Negli ultimi anni sono state prodotte numerose linee guida; spesso, però, la semplice esposizione in forma narrativa non facilita la loro effettiva introduzione nella pratica clinica. In questo modo, infatti, l’ impatto sul comportamento clinico dipende dalla volontà e dalla capacità dei clinici di memorizzare le raccomandazioni in esse contenute e di applicarle successivamente nel contesto specifico di un dato paziente. In realtà, l’ esperienza ha dimostrato che ciò non avviene e tale modalità di diffusione delle 15 linee guida, basata esclusivamente su materiale cartaceo da consultare, non produce gli effetti sperati nel cambiamento del comportamento clinico. L’ introduzione dei sistemi informativi nelle strutture sanitarie ha fornito nuove opportunità per la diffusione delle linee guida. Utilizzando gli strumenti informatici, infatti, la conoscenza in esse contenute può essere presentata al medico per mezzo di segnali d’ allarme o di avvisi che richiamano la sua attenzione sulla situazione di uno specifico paziente in riferimento ad una determinata linea guida. Si è visto che, in questo modo, si ottiene una maggiore adesione alle raccomandazioni presenti in una linea guida. Pertanto, piuttosto che descrivere una linea guida come un elenco di raccomandazioni senza alcun riferimento al contesto specifico di un paziente, è più efficiente, ai fini di una sua effettiva implementazione, utilizzare un sistema che monitora la situazione clinica dei pazienti e che interviene quando si verifica un “incontro” fra un particolare paziente ed una determinata linea guida, ovvero quando un paziente entra in uno stato contemplato dalla linea guida e, quindi, da essa trattato con una raccomandazione. Un sistema siffatto si dice che fornisce un supporto nelle decisioni cliniche in riferimento ad un paziente specifico e sulla base delle raccomandazioni proprie di una linea guida. Per fare questo, esso deve poter accedere all’ informazione presente nella linea guida e ai dati clinici del paziente. 1.3.1 Rappresentazione formale di una linea guida Negli ultimi anni molti gruppi sono stati impegnati nello sviluppo di sistemi di questo tipo. Una prima questione da affrontare è quella di creare un modello capace di rappresentare la conoscenza contenuta in una linea guida in una forma interpretabile da un computer (Computer-interpretable guideline). La conversione dalla forma narrativa ad una rappresentazione per computer non è di facile attuazione perchè le linee guida descritte su carta spesso presentano mancanze o ambiguità, complici le disattenzioni degli autori e la riluttanza ad essere specifici quando l’ evidenza scientifica non è disponibile. Pertanto una rappresentazione 16 formale della linea guida, oltre a renderla interpretabile tramite computer, ha l’ ulteriore vantaggio di portare alla luce i punti non chiari ed imprecisi presenti nella sua esposizione e, quindi, da revisionare. Si possono individuare, in una generica linea guida, alcuni elementi fondamentali, che è necessario considerare ai fini di una sua rappresentazione ed esecuzione su computer. Anzitutto un modello per linee guida deve permettere di rappresentare le azioni raccomandate e le decisioni che devono essere prese all’ interno di una linea guida. Si possono distinguere due tipi di scelte: quelle che vengono effettuate rigorosamente in funzione ai dati dello specifico paziente trattato e quelle, invece, che permettono di selezionare fra differenti opzioni in base a preferenze o a valutazioni personali del clinico. Un’ altra caratteristica importante è la rappresentazione del criterio di eleggibilità, ovvero di quelle condizioni che devono essere verificate affinché un paziente possa essere inserito nella linea guida. Ad esempio, la condizione glicemia a digiuno >= 126 determina l’ inserimento del paziente all’ interno della linea guida trattamento paziente diabetico. Inoltre inserire degli obiettivi da raggiungere quando si effettua una azione o si deve prendere una decisione e fornire collegamenti con altre fonti di conoscenza ed altro materiale di supporto costituiscono altri aspetti importanti di una linea guida. Il collegamento con i dati clinici è necessario se si vuole creare un sistema che supporti le decisioni cliniche su uno specifico paziente trattato. Una linea guida può ricevere tali dati in input in vari modi: da un database locale che contiene il fascicolo personale del paziente, dall’ utente stesso (ad esempio richiedendo di compilare una form), da un database o sistemi software remoti che forniscono ad esempio i risultati di esami di laboratorio, ecc. Sono stati adottati differenti approcci per rendere le linee guida eseguibili su computer. La rappresentazione basata sulle regole è stato uno dei primi metodi utilizzati. In essa una linea guida viene modellata come un insieme di regole, ognuna delle quali è costituita, da un lato, da un criterio da valutare e, dall’ altro, da un insieme di azioni da compiere nel caso la prima parte assuma valore true. Un sistema che interpreta ed esegue linee guida rappresentate in questo modo è costituito da un 17 interprete che schedula le regole, verifica il criterio e nel caso il risultato sia true, realizza le azioni specificate. Il sistema Help adotta questa tecnica per generare segnali di allarme nel caso si verifichino condizioni od eventi particolari: ad esempio, risultati anomali in analisi di laboratorio o combinazioni di farmaci potenzialmente pericolosi. L’ Arden Syntax è un linguaggio per la codifica di tali regole all’ interno dei Medical Logic Module (MLM). Un MLM contiene la conoscenza necessaria per prendere una singola decisione medica. E’ costituito da diversi slot raggruppati in tre categorie: Manteinance e Library, che forniscono le informazioni e la documentazione necessaria per ogni MLM e Knowledge che rappresenta la sostanza del MLM e contiene la conoscenza medica. Lo slot Manteinance fornisce il nome, l’ autore, l’ origine, la versione e l’ informazione di validazione mentre lo slot Library contiene i collegamenti con altre fonti di conoscenza, commenti e parole-chiave per facilitare ulteriori ricerche sull’ argomento. Lo slot Knowledge è costituito, a sua volta, da quattro slot principali: data slot effettua il mapping fra i termini usati nel MLM e quelli del database-paziente locale; evoke slot specifica l’ evento che si deve verificare per far partire l’ MLM; logic slot indica quali criteri devono essere soddisfatti affinché si possa eseguire l’ azione (decisione) specificata nell’ action slot. Gli MLM costituiscono la base di conoscenza ed, una volta implementati su un sistema d’ informazione clinica, utilizzano i dati-paziente contenuti nel database locale per far partire singole decisioni/azioni. Sebbene sia possibile modellare una sequenza di decisioni/azioni collegando a catena un insieme di MLM, non si riesce a rappresentare linee guida complesse. Il limite di questa rappresentazione basata sulle regole è appunto il fatto di non poter modellare linee guida complesse, costituite, cioè, da sequenze di azioni e decisioni che devono essere effettuate lungo un arco di tempo (linee guida multi-step). Allora, per risolvere questo problema, è stato adottato un altro approccio, che prende il nome di paradigma basato su task (Task-Network Model o TNM). In esso le linee guida sono rappresentate con delle reti di task collegati in modo da rispecchiare i vincoli temporali, logici ed altri tipi di relazioni esistenti fra loro. 18 I componenti che formano questo tipo di modello possono essere diversi ma sempre sono presenti costrutti per rappresentare azioni (actions) e decisioni (decisions), che costituiscono gli elementi chiave di una linea guida, e sottoreti, che semplificano la rappresentazione di alto livello e permettono la riusabilità. Possono essere fornite anche altre primitive. Uno scenario o stato-paziente caratterizza lo stato del paziente in un dato momento, in base alle azioni effettuate ed alle decisioni prese nel contesto di una determinata linea guida. Ad esempio, se un paziente ha più di 50 anni e non è allergico al vaccino dell’ influenza, lo scenario è “eleggibile per il vaccino dell’influenza”. Branch step e synchronization step permettono di modellare percorsi paralleli all’ interno della linea guida (ad esempio, quando sono richieste differenti azioni che devono essere eseguite da differenti medici). Tali componenti sono disposti nella rete in modo da determinare il flusso di controllo durante l’ esecuzione. Generalmente sono presenti costrutti differenti per specificare l’ esecuzione in sequenza, in parallelo e ciclica dei componenti. Il flusso di controllo non è completamente determinato da questi costrutti bensì dipende anche da modelli decisionali che dirigono il flusso verso rami selezionati del modello in base al verificarsi o meno di certe condizioni. PROforma adotta questo tipo di approccio ed utilizza quattro classi di task: decision, action, enquiry e plan. Un task decision permette di effettuare una scelta fra diverse opzioni, per ognuna delle quali vengono indicati i pro ed i contro. Un action è una procedura clinica che deve essere eseguita da un agente esterno (un utente, un altro software o una macchina) mentre una enquiry fornisce le informazioni necessarie alla linea guida, ad esempio, richiedendole all’ utente tramite una form od interrogando l’ archivio elettronico contenente i dati clinici del paziente. Infine un plan è costituito da un insieme di task, che devono essere eseguiti rispettando certi vincoli logici e temporali per raggiungere un obiettivo clinico. I task sono modellati secondo un’ approccio orientato agli oggetti, ovvero ogni task clinico è una istanza di una classe ed ogni classe è collocata in una ontologia. Le quattro classi sopra menzionate costituiscono una specializzazione di un task radice ed ognuna di esse può essere a sua volta specializzata in particolari sottoclassi, le quali ereditano dalla classe genitore un insieme di attributi e li estendono con attributi 19 aggiuntivi. Solo per alcuni di essi è obbligatorio assegnare un valore mentre per gli altri è opzionale. La classe radice permette di definire l’ obiettivo clinico che deve essere raggiunto tramite l’ esecuzione di un task. Nel momento in cui tale obiettivo è raggiunto, l’ esecuzione termina e se la condizione è raggiunta ancor prima di eseguire il task, questo viene saltato. Un altro attributo che può essere specificato è la condizione di trigger che può essere un evento temporale di qualsiasi genere o una descrizione booleana di uno stato paziente. L’ unico attributo della classe plan che deve essere necessariamente specificato è l’ attributo componenti, che elenca l’ insieme dei task che devono essere eseguiti senza un particolare ordine. Altri attributi specificano i task opzionali, che possono, quindi, essere saltati dall’ utente, i vincoli temporali fra i task e le condizioni che determinano l’ aborto del plan. L’ esecuzione sequenziale e parallela sono, quindi, supportati definendo un attributo del task. Anche GLIF (GuideLine Interchange Format) utilizza una rappresentazione orientata agli oggetti. E’ stato sviluppato con lo scopo di facilitare la condivisione di linee guida fra differenti istituzioni ed ha subìto modifiche e miglioramenti in successive versioni. Nell’ ultima versione, GLIF3, una specifica di linea guida è costituita da tre livelli di rappresentazione: un flowchart concettuale che permette di avere una visione globale degli step che formano la linea guida, una specifica computabile ed una specifica implementabile. Il modello GLIF è composto da un insieme di classi che rappresentano le entità di una linea guida, dagli attributi di queste classi e dai tipi di dati per gli attributi. Le classi formano una gerarchia ed ognuna di esse eredita gli attributi da quelle superiori, oltre ad avere dei propri attributi. Una particolare linea guida è una istanza del modello generale. Il modello GLIF permette di rappresentare una linea guida come un flowchart costituito da un insieme di step da eseguire secondo un certo ordine temporale. Questi step sono di diversi tipi: action step che fa riferimento ad una azione o ad una sotto linea guida ad un livello di astrazione più basso; conditional step che modella una decisione; patient-state step che rappresenta la condizione del paziente ad un certo punto della 20 linea guida; branch step e synchronization step che, insieme, consentono l’ esecuzione concorrenziale di azioni e decisioni. 1.3.2 EON Il progetto EON tenta di modellare la complessità e la varietà delle linee guida estendendo un modello centrale con sottomodelli in modo da soddisfare i requisiti di diversi tipi di linee guida. Lo scopo dei progettisti di EON è quello di utilizzare le linee guida per supportare le decisioni cliniche sullo specifico paziente; pertanto, in aggiunta ad un modello per la rappresentazione delle linee guida che utilizza l’ approccio basato sulle reti di task, è stata costruita una architettura composta da vari componenti software per realizzare un sistema di questo tipo (figura 1). Il modello è costituito da algoritmi clinici in cui le sequenze di azioni e decisioni sono specificate in una rete. In EON si fa distinzione fra azioni, che sono istantanee (ad esempio, la prescrizione di un esame) ed attività, che perdurano nel tempo. Queste ultime sono caratterizzate da stati che possono cambiare nel tempo, in seguito all’ esecuzione di determinate azioni specificate nella linea guida. Ad esempio, la somministrazione di un farmaco è una attività e gli stati ad essa associati sono determinati da un insieme di attributi, come la quantità e la frequenza. Prendere una decisione è una caratteristica fondamentale di una linea guida. EON presenta modi differenti di descrivere le alternative a cui corrispondono diversi meccanismi di scelta. Infatti fa distinzione fra decisioni automaticamente determinate da criteri booleani associati alle singole alternative, in cui viene selezionata fra le varie opzioni quella il cui criterio booleano viene valutato true e decisioni che richiedono l’ intervento di un agente esterno per scegliere una fra un insieme di alternative predefinite. Lo scenario in EON definisce lo stato del paziente, fornendo una descrizione testuale e specificando le condizioni che devono essere soddisfatte affinché un paziente entri in quello scenario (ad esempio, nel caso dello scenario “paziente eleggibile per il 21 vaccino dell’influenza”, la condizione è che deve avere più di 50 anni e non deve essere allergico al vaccino). Uno scenario è seguito da una decisione o un action step. Il modello fornisce anche primitive per la diramazione e la sincronizzazione, in modo da permettere l’ esecuzione di azioni in parallelo. Inoltre le azioni ripetute vengono modellate tramite un costrutto che consente di specificare il numero di volte o la frequenza con la quale queste devono essere ripetute. Azioni, decisioni, sotto linee guida, scenari e diramazioni e sincronizzazioni sono collegati fra loro da una relazione seguito_da. Action step e decisioni costituiscono gli step dell’ algoritmo clinico e ad essi vengono assegnati degli scopi da raggiungere sotto forma di criteri booleani. Sono definite due classi di linee guida: consultation guidelines, che specificano azioni e decisioni che non portano conseguenze nel tempo e management guidelines, che, invece, modellano azioni e decisione che portano a cambiamenti nello stato del paziente nel tempo. L’ algoritmo clinico può essere specificato per entrambe le classi. Figura 1.1 22 23 Capitolo 2 WORKFLOW 2.1 Introduzione Il termine workflow è legato al settore del business ed indica un modo di descrivere un processo come un insieme di: attività da svolgere rispettando un certo ordine temporale, informazioni e documenti da gestire e risorse umane e non da impiegare per raggiungere un obiettivo finale. Strettamente correlato al workflow è il termine workflow management system (wfms). Esso è un sistema software che si occupa di controllare e gestire l’ esecuzione del processo, assegnando le varie attività al momento giusto ed alle persone giuste, invocando, quando necessario, gli strumenti IT di supporto e fornendo i dati utili allo svolgimento dei compiti. Generalmente un wfms comprende nel pacchetto un software per modellare il workflow con un linguaggio formale o una rappresentazione grafica ed il modello così creato, che prende il nome di definizione di workflow, viene fornito in input ad un motore capace di interpretarlo e di gestire l’ esecuzione delle istanze generate da esso. In altre parole, definizione di workflow e istanza di workflow rappresentano l’ analogo della classe e dell’ oggetto istanza della classe che si ha nella programmazione orientata ad oggetti. Spesso un wfms è dotato di strumenti che consentono di classificare le risorse in ruoli, in base alle competenze ed abilità di ciascuna di esse e/o in unità, che tengono conto dell’ organizzazione all’ interno del sistema (team, dipartimenti, ecc.). Questo perché, assegnare un compito ad una specifica persona, significa l’ interruzione del lavoro in caso di assenza o momentanea indisponibilità della stessa mentre 24 assegnandolo ad una classe di risorse deputate egualmente idonee si permette una maggiore flessibilità nella gestione del processo. In genere sono presenti anche funzioni che permettono di monitorare l’ esecuzione delle istanze, in modo da ricavare analisi statistiche e report utili a valutare il rendimento del processo così modellato. La Workflow Management Coalition (WfMC) è una organizzazione internazionale no-profit fondata nel 1993 con lo scopo di creare standard per quanto riguarda la terminologia adoperata in questo campo e l’ architettura dei workflow management system. Nel 1999 ha pubblicato un glossario con l’ intento di fermare il proliferare sregolato di termini e di definizioni ambigue, ha individuato una architettura generale per i workflow management system e si adopera a favore della standardizzazione e dell’ interoperabilità dei vari componenti che la costituiscono. In questo capitolo si utilizza la terminologia introdotta dalla WfMC e vengono fornite le corrispondenti definizioni prese dal glossario. Inoltre viene presentato il modello di riferimento da essa presentato (Workflow Reference Model) e sul quale si stanno ancora facendo dei tentativi di standardizzazione. 2.2 Workflow La WfMC definisce il workflow come “l’ automazione parziale o totale di un processo aziendale, durante il quale documenti, informazioni o compiti sono scambiati tra i vari partecipanti per essere eseguiti, rispettando un insieme di regole procedurali.” Un processo è costituito da un insieme di attività che devono essere svolte in maniera opportuna per il raggiungimento di un obiettivo finale. In genere queste attività vengono eseguite da diversi individui (partecipanti), magari con il supporto di strumenti IT, e/o da macchine e ci si riferisce ad essi con il termite generale “risorse”. Il lavoro e le informazioni necessarie devono “fluire” fra le varie risorse rispettando regole ben precise. Per poter essere gestito e realizzato utilizzando la tecnologia del workflow, il processo deve essere innanzitutto modellato in una forma che lo rende processabile su 25 computer e che prende il nome di definizione di processo (process definition). Essa è la rappresentazione di un processo “in una forma adatta alla manipolazione automatizzata, come la modellazione o l’ esecuzione per mezzo di un workflow management system” ed è costituita da un insieme di “attività e delle relazioni esistenti fra di esse, di criteri per indicare l’ inizio e la fine del processo ed informazioni riguardanti le singole attività, come ad esempio i partecipanti, le applicazioni IT associate e i dati ecc.” Può contenere anche uno o più sottoprocessi, definiti separatamente, che permettono una rappresentazione su più livelli e favoriscono la riusabilità. Poiché non necessariamente tutte le attività all’ interno del processo sono automatizzate, bensì alcune possono richiedere un trattamento manuale, si fa distinzione fra la sopra citata definizione di processo, che specifica sia le attività automatizzate sia quelle manuali, e la definizione di workflow (workflow definition) che comprende solamente la parte automatizzata del processo. Tali definizioni costituiscono l’ analogo della classe nella programmazione orientata ad oggetti e come viene creato l’ oggetto istanza della classe, così esse vengono istanziate, generando rispettivamente l’ istanza di processo e l’ istanza di workflow. E’ quest’ ultima che viene fornita in input al workflow management system e da esso eseguita. Comunque, poiché generalmente i processi sono completamente automatizzati, i due termini vengono utilizzati in maniera intercambiabile. Da un’ unica definizione di processo possono derivare molte istanze, ognuna delle quali ha una propria identità e la sua esecuzione viene gestita indipendentemente dalle altre. Alcuni utilizzano il termine specifica di workflow in luogo di definizione di workflow. L’ attività è la “descrizione di un pezzo di lavoro” e costituisce un’ unità logica all’ interno del processo. E’ indivisibile e, quindi, deve essere eseguita in toto: se si verifica un errore, si deve ripartire dal suo inizio. Mentre essa rappresenta un generico pezzo di lavoro all’ interno della definizione di processo, la sua istanza si riferisce ad un pezzo di lavoro che deve essere svolto concretamente per la particolare istanza di processo. Ogni attività richiede per la sua esecuzione l’ invocazione di applicazioni opportune e/o l’ assegnamento a partecipanti. In quest’ ultimo caso si introduce il concetto di work item: una singola attività può generare uno o più work item che 26 insieme costituiscono il compito (task) che deve essere portato a termine da un utente all’ interno della stessa. Le relazioni fra tutti questi concetti di base sono rappresentate in figura 1. Figura 2.1 2.2.1 Tipologie di workflow Fra le molte classificazioni esistenti dei workflow, ve n’ è una che distingue: Ad hoc workflow; Administrative workflow; Production workflow. Queste tre tipologie sono descritte in funzione delle seguenti caratteristiche: ripetitività e predicibilità del flusso di lavoro, modalità di avvio e di controllo del workflow (controllo umano o automatizzato) e funzionalità richieste dal wfms. Ad hoc workflow sono prevalentemente costituiti da attività che necessitano coordinazione, collaborazione o co-decisione fra i vari partecipanti. Quindi 27 sono caratterizzati da alta variabilità e risulta difficile definire uno schema fisso, visto che la sequenza delle attività non è prestabilita ma viene definita dinamicamente durante l’ esecuzione del processo. L’ ordine con cui le attività vengono eseguite e la coordinazione fra di esse non sono automatizzati bensì controllati da uomini e sono stabiliti durante l’ esecuzione stessa del workflow. I wfms devono fornire funzionalità che facilitano appunto il coordinamento, la collaborazione e la co-decisione fra le persone coinvolte, mentre non sono richieste funzionalità per controllare l’ ordine con cui le varie attività vengono eseguite. Gli utenti di un ad hoc workflow devono accedere al wfms per verificare che il lavoro sia stato completato. La tecnologia generalmente utilizzata comprende la posta elettronica, i sistemi di conferenza, ecc. Di solito un database memorizza le informazioni condivise fra i partecipanti. Un ad hoc workflow tipicamente coinvolge un piccolo gruppo di professionisti, che devono realizzare un lavoro in un tempo breve. Un esempio è la realizzazione di un programma per un convegno scientifico. Administrative workflow si riferisce a processi predicibili e ripetitivi e, quindi, è possibile definire uno schema che viene eseguito da molte o tutte le istanze del processo. Le attività di cui sono costituiti sono strutturate in maniera semplice, perlopiù lineare. Pertanto l’ ordine con cui tali attività vengono eseguite ed il loro coordinamento sono automatizzati. I wfms devono gestire un flusso di informazioni semplice e non è richiesto l’ accesso a molteplici sistemi informativi. La tecnologia utilizzata generalmente è la posta elettronica. Anche i production workflow sono caratterizzati da predicibilità e ripetitività ma, a differenza degli administrative workflow, sono strutturati in maniera complessa e richiedono un elevato numero di transazioni che accedono a vari sistemi informativi per eseguire lavori e prelevare i dati in base ai quali prendere decisioni. L’ ordine con cui le attività vengono eseguite ed il loro coordinamento possono essere automatizzati. I wfms devono essere capaci di gestire l’ interoperabilità e l’ intergrazione con sistemi informativi HAD (Eterogenei, Autonomi e/o Distribuiti). Un esempio può essere la gestione di un prestito bancario. 28 2.2.2 Workflow clinico Il concetto di workflow si adatta a vari campi dell’ operato umano, anche a quello sanitario, in cui l’ informatica e l’ automazione stanno entrando a far parte sempre più delle procedure mediche. Basta pensare alla possibilità di prenotare un esame via internet, all’ uso di tecniche diagnostiche come TAC e Risonanza Magnetica ed alla telemedicina. Facendo l’ esempio della radiologia, in cui l’ informatizzazione e la tecnologia sono maggiormente diffuse, si può modellare il flusso di lavoro dalla registrazione del paziente fino all’ esecuzione degli esami diagnostici ed alla produzione del referto tramite un workflow. Figura 2.2 – workflow in radiologia La figura 2 mostra gli attori coinvolti nel processo e i dati scambiati fra di essi. Si inizia con il paziente che entra per la prima volta nella struttura sanitaria e viene registrato dall’ ADT, ovvero un sistema di ammissione e anagrafica. Successivamente il paziente si presenta per prenotare una prestazione (ad esempio, una TAC addominale) presso il centro unico di prenotazione (CUP) e la sua richiesta viene schedulata sulla base delle disponibilità esistenti in agenda tramite un sistema RIS (sistema informativo di radiologia). Questo individua la prima disponibilità per un certo esame, considerando il parco macchine, gli orari di lavoro e le prenotazioni già presenti, concorda con il 29 richiedente la data e l’ ora e fissa l’ appuntamento inserendolo in agenda. Dopodichè, la Diagnostica riceve ogni giorno dal RIS tutti i dati necessari per sapere quale paziente dovrà essere sottoposto a quale esame e quando e fornisce un feed-back al RIS relativamente agli esami eseguiti in modo che questo possa aggiornare lo stato di ciascun esame (esame in corso, esame terminato, esame interrotto, lista delle immagini prodotte). Le immagini prodotte dalla diagnostica vengono spedite ad un archivio di immagini, detto sistema di archiviazione e comunicazione immagini (PACS), che le renderà disponibili su richiesta per la refertazione. A questo punto il radiologo recupera tali immagini dall’ archivio, le copia sulla workstation di Refertazione, dove le apre con una applicazione di visualizzazione e scrive il referto sulla base delle sue osservazione. Il referto può essere firmato con la firma digitale del radiologo ed essere archiviato per poi venire consegnato al paziente. Si può notare che il processo è costituito da un insieme di attività da eseguire in maniera coordinata e coinvolgendo una serie di attori (uomini, macchine e sistemi informatici) che, interagendo fra loro, consentono di arrivare al risultato finale (il rilascio del referto). L’ ingresso di un nuovo paziente nel workflow corrisponde alla creazione di una nuova istanza da processare. Mentre risulta relativamente semplice automatizzare le singole funzioni (registrazione del paziente, refertazione ecc.), è difficile integrare fra loro i vari sistemi in un unico flusso di lavoro. 2.3 Definizione di processo La definizione di processo viene creata nel design-time e deve contenere tutte le informazioni necessarie affinché possa essere gestita e controllata l’ esecuzione di ogni sua istanza nel run-time. Quindi deve esplicitare l’ insieme delle attività di cui è costituito il processo e l’ ordine con cui queste devono essere eseguite. Generalmente l’ evolvere del processo fra le varie attività (routing) può avvenire in maniera sequenziale, parallela, condizionale o iterativa. 30 Nel primo caso una attività non può essere iniziata prima del completamento di un’ altra, i cui risultati sono necessari alla prima e quindi queste devono essere eseguite in sequenza. Nel secondo, invece, due o più attività possono essere eseguite contemporaneamente oppure non è importante l’ ordine con cui vengono eseguite e, quindi, vengono svolte in parallelo, favorendo, in questo modo, la concorrenza. Il routing condizionale permette di scegliere fra più alternative, in base al verificarsi o meno di determinate condizioni, che vengono valutate run time per ogni singola istanza. Istanze relative alla medesima definizione di processo, pertanto, possono essere eseguite in maniera differente: ad esempio, una attività può essere presente in alcune e non in altre oppure può cambiare l’ ordine con cui certe attività vengono svolte. Infine si ha il routing iterativo quando è necessario ripetere una particolare attività più volte, finché non si raggiunge il risultato desiderato. La definizione di processo non specifica solamente quali attività devono essere eseguite (cosa) ed in che ordine (quando), ma fornisce anche informazioni sulla risorsa che deve eseguirle (chi). Una risorsa può essere una macchina o una persona e deve avere le qualità appropriate per poter svolgere ciò che gli viene assegnato. Associare un work item ad un partecipante significa ridurre la flessibilità del sistema perché l’ assenza o la temporanea non disponibilità della stessa, causa l’ interruzione del flusso di lavoro. Per questo, generalmente, risorse con caratteristiche simili vengono raggruppate in classi. Tale raggruppamento può avvenire in base alle capacità dei suoi membri ed in questo caso la classe prende il nome di ruolo (role) oppure in base all’ appartenenza o meno ad una determinata struttura organizzativa (team, dipartimento, settore) ed allora essa prende il nome di unità organizzativa (organizational unit). Una risorsa può appartenere a più classi. Pertanto quando è presente una suddivisione di questo tipo, nella definizione di processo si deve specificare per ogni attività, che richiede l’ assegnamento ad una risorsa, i requisiti che questa deve possedere (principio di allocazione), ovvero il ruolo o l’ unità a cui deve appartenere. Spesso vengono definiti entrambi ed in questo caso essa va cercata fra l’ intersezione delle due classi. Inoltre l’ allocazione può dipendere anche da particolari dati interni al processo. Ad esempio, nel caso di una compagnia di 31 assicurazioni con diverse sedi dislocate in un’ ampia area geografica, si può utilizzare l’ indirizzo del cliente come criterio per assegnare l’ istanza ad una risorsa appartenente alla sede più vicina. A volte si possono specificare altri requisiti che la risorsa deve soddisfare, che non fanno riferimento alle sue capacità o all’ appartenenza ad una classe, come ad esempio il fatto che sia la meno impegnata o la più economica. L’ assegnazione di un work item ad una particolare risorsa che soddisfa tale principio di allocazione avviene nel run-time secondo diverse modalità ed utilizzando specifiche regole nel caso sia necessario scegliere fra un certo numero di risorse ugualmente idonee. 2.4 Prospettive di un workflow Una definizione di workflow rappresenta una astrazione del processo reale e tale astrazione può essere effettuata a diversi livelli in funzione dell’ uso che ne si vuole fare. Ad esempio, una definizione di workflow realizzata ad un alto livello concettuale può essere utilizzata per capire, analizzare e ristrutturare un processo. Lo stesso deve essere rappresentato ad un livello più basso se lo si vuole successivamente implementare su un workflow management system. In questo ultimo caso una definizione deve catturare il processo sotto diversi aspetti: l’ insieme delle attività di cui è costituito, le informazioni che devono essere passate da una attività all’ altra, le risorse e le applicazioni necessarie per l’ esecuzione del processo, ecc. Si parla allora di differenti prospettive (perspective) di una definizione di workflow. La principale è la cosiddetta prospettiva del flusso di controllo (control-flow perspective), che descrive l’ insieme delle attività e l’ ordine con cui queste devono essere eseguite. Poiché informazioni, dati e documenti sono un aspetto fondamentale in un processo la cosiddetta prospettiva dei dati (data perspective) descrive come questi vengono definiti ed utilizzati all’ interno del workflow. Inoltre l’ elenco delle attività da svolgere ed i dati da trattare da soli non bastano; servono persone e attrezzature/impianti 32 per realizzare concretamente il processo. Allora la prospettiva delle risorse (resource perspective) riguarda la strutturazione di queste in ruoli ed in che modo avviene l’ assegnazione dei work item. A causa della grande varietà di processi reali che utilizzano la tecnologia del workflow, la maggior parte dei prodotti esistenti sul mercato utilizzano un linguaggio proprietario per creare definizioni di workflow. Il risultato è, quindi, un proliferare di linguaggi molto differenti gli uni dagli altri e con diversi livelli di espressività in funzione delle necessità richieste dalla tipologia di processo da modellare. Si è tentato di effettuare un’ analisi del potere espressivo di un certo numero di linguaggi usando dei workflow pattern. Questi sono stati individuati astraendo dal contesto specifico nel quale i vari linguaggi esistenti venivano utilizzati e rappresentando i requisiti più comuni che un linguaggio deve possedere per modellare i processi reali indipendentemente dal tipo di processo e dalla tecnologia impiegata per implementarlo. In un primo tempo è stato raggruppato un insieme di 20 pattern che catturavano i requisiti fondamentali relativamente al flusso di controllo in una definizione di workflow. Successivamente sono stati presi in considerazione anche la prospettiva dei dati e quella delle risorse. 2.4.1 Control-flow pattern Inizialmente si è posta l’ attenzione sul flusso di controllo, che è l’ aspetto basilare di un workflow, in cui le varie attività si devono susseguire secondo un certo ordine per ottenere il risultato desiderato e, quindi, l’ implementazione su un sistema informatico significa, per prima cosa, gestire il passaggio del controllo fra di esse. Si è giunti, quindi, ad individuare un insieme di 20 pattern, che sono stati suddivisi in 6 gruppi in questo modo: 1. Basic Control Flow Patterns; 2. Advanced Branching and Synchronization Patterns; 3. Structural Patterns; 33 4. State-based Patterns; 5. Cancellation Patterns; 6. Patterns involving Multiple Instances. Il primo gruppo è costituito da pattern molto semplici da realizzare e, per questo, presenti in qualsiasi linguaggio. Appartengono ad esso quei pattern che corrispondono ai concetti definiti dalla WfMC riguardanti la natura del flusso di controllo attraverso il processo. Primo fra tutti la Sequenza, che si ha quando “una attività in un workflow è abilitata dopo il completamento di un’ altra attività nello stesso processo” e generalmente è realizzata collegando le due attività in questione con una freccia. Prima di presentare i pattern che consentono di modellare l’ esecuzione parallela e la scelta fra varie attività, introduciamo i concetti di split e join. Si parla di split quando, dopo il completamento di una attività, si ha una ramificazione che conduce a due o più attività. Si distinguono differenti tipi di split in funzione del fatto che una sola (XOR-split), alcune (OR-split) o tutte (AND-split oppure OR-split, se tutti i criteri di scelta associati ai rami assumano il valore true) queste attività devono essere eseguite. Analogamente quando due o più rami convergono in un unico ramo si parla di join. Dipendentemente dal tipo di join prima di iniziare l’ attività successiva si deve attendere il completamento di una (XOR-join), alcune (OR-join) o tutte (AND-join) le attività precedenti. Nel caso di esecuzione parallela di due o più attività si utilizzano i due pattern Split Parallelo (AND-split) e Sincronizzazione (AND-join). Il primo viene definito come “un punto dove un singolo thread di controllo si divide in molteplici thread di controllo che possono essere eseguiti in parallelo”. Il secondo viene descritto come “un punto dove molteplici sottoprocessi/attività convergono in un singolo thread di controllo, consentendo, quindi, la sincronizzazione di molteplici thread”. Analogamente si possono definire la Scelta Esclusiva (XOR-split), in cui una sola fra varie alternative viene selezionata ed eseguita, e la Simple Merge (XOR-join), nella quale i vari rami vengono fatti riconvergere senza necessità di sincronizzazione. Oltre questi pattern molto semplici, ne esistono altri più complessi ma, ciò nonostante, ricorrenti nella modellazione dei processi reali. Ad esempio, spesso si ha la necessità di scegliere, a seconda dei casi, una, alcune o tutte fra molte alternative (Scelta 34 Multipla o OR-split) e questo è di più difficile implementazione. Nei workflow management system nei quali è possibile associare una condizione ad ogni arco uscente dal nodo di split, tale pattern può essere realizzato direttamente. Ciò non è possibile, invece, negli altri, nei quali, quindi, si deve utilizzare una combinazione di Split Parallelo e Scelta Esclusiva, come mostrato in figura 3 (workflow B). Ogni alternativa è preceduta da uno XOR-split che decide, in base al verificarsi o meno di una determinata condizione, se selezionarla o passare oltre. Tutti gli OR-split sono attivati da un ANDsplit. Figura 2.3 Ancora più difficile è la realizzazione del corrispondente Synchronizing Merge, nel quale i vari flussi generatisi dalla Scelta Multipla devono riconvergere in uno unico. Il problema è che non si sa quali rami devono essere sincronizzati. Infatti nel caso in cui uno solo è attivo, non è necessaria alcuna sincronizzazione e tale pattern deve svolgere la funzione di XOR-join. A volte, invece, è richiesta la sincronizzazione di tutti i rami (AND-join) ed altre una sincronizzazione parziale (OR-join). Un altro gruppo molto importante è quello che supporta le istanze multiple, ovvero la possibilità di istanziare più volte una singola attività o una parte del processo, permettendo così l’ esecuzione concorrente. Facendo di nuovo l’ esempio di una compagnia di assicurazioni che deve gestire una richiesta di indennizzo può essere 35 necessario raccogliere deposizioni di vari testimoni. Ciò può essere modellato con un sottoprocesso che viene istanziato tante volte quanti sono i testimoni. Esistono diversi pattern appartenenti a questa categoria. Innanzitutto si può avere o meno la sincronizzazione di tali istanze, cioè prima di procedere con l’ attività successiva si attende che tutte siano state completate (istanze multiple con sincronizzazione) oppure per ognuna si procede oltre indipendentemente dalle altre (istanze multiple senza sincronizzazione). Inoltre un’ altra questione che genera differenza nei pattern di questo gruppo riguarda il numero delle istanze che vengono create. Raramente nei processi reali tale numero è conosciuto nel design time perché esso può dipendere dalle caratteristiche della particolare istanza di processo o dalla disponibilità delle risorse. In questo caso, quindi, tale numero è noto solamente durante l’ esecuzione (nel run time) prima di iniziare la parte di processo che deve essere istanziata più volte. Si può verificare, però, anche la situazione in cui tale numero varia dinamicamente, ovvero nuove istanze possono essere generate, mentre altre sono già in fase di processamento e addirittura qualcuna è stata completata. Infatti riprendendo l’ esempio precedente, si può verificare che, durante la deposizione di un testimone, ne vengano fuori degli altri fino ad allora non noti che devono essere aggiunti alla lista. Allora per supportare tali differenti situazioni esistono tre tipi di pattern: istanze multiple con conoscenza a priori nel design time, con conoscenza a priori nel run time e senza conoscenza a priori nel run time. Proseguendo nella descrizione dei vari pattern, un ulteriore gruppo che si può prendere in considerazione è quello che consente di cancellare una parte o l’ intera istanza di processo. Questo è necessario quando, in qualunque momento durante l’ esecuzione di una istanza, si verifica un evento che va ad influire su una qualsiasi parte del processo (non necessariamente quella che si sta eseguendo). Successivamente sono stati individuati altri 23 control-flow pattern, che si sono aggiunti a questi primi 20. 36 2.4.2 Altri pattern Dopo i pattern per il flusso di controllo, l’ attività di astrazione è continuata prendendo in considerazione altre prospettive del workflow ed ha portato all’ elaborazione di ulteriori pattern, in riferimento, ad esempio, all’ utilizzo dei dati ed alla strutturazione delle risorse. Per quanto riguarda i dati, si sono riscontrate caratteristiche comuni raggruppabili in quattro differenti concetti: la visibilità, ovvero i differenti modi in cui le variabili possono essere definite e che determina dove i dati possono essere utilizzati: ad esempio, a livello di istanza di attività (variabile locale), di istanza di processo (variabile globale), ecc.; l’ interazione, che considera la capacità di scambiare dati fra le varie attività costituenti il workflow (passaggio interno) e fra workflow e risorse o servizi (passaggio esterno); il trasferimento, che analizza il modo in cui i dati del punto precedente vengono trasferiti (ad esempio, per valore o per riferimento); il routing, cioè come i dati possono influenzare altri aspetti del workflow, particolarmente il flusso di controllo (ad esempio, la successiva attività da compiere può essere determinata run time in base al valore assunto da una variabile). Sono stati confrontati differenti linguaggi esistenti per modellare workflow in base alla loro capacità di implementare i primi 20 control-flow pattern presi in considerazione e si è evidenziato che la maggior parte di essi ne supporta direttamente meno della metà. A volte alcuni, come abbiamo già visto, possono essere costruiti utilizzandone degli altri (anche se a costo di una rappresentazione meno compatta) ma per quelli più complessi generalmente ciò non è possibile. I linguaggi basati sulle reti di Petri consentono di descrivere efficacemente workflow anche complessi e di modellare molti di questi pattern. Inoltre la teoria 37 sviluppatasi alla base delle reti di Petri fornisce potenti tecniche di analisi per verificare la loro correttezza. 2.5 Reti di Petri Una rete di Petri classica è un grafo bipartito, i cui nodi possono essere di due tipi: posti o transizioni. I primi sono rappresentati da cerchi, i secondi da rettangoli. Archi orientati consentono la connessione posto-transizione e transizione-posto, mentre non è permessa la connessione fra due nodi dello stesso tipo. Definizione. Una rete di Petri è una tripla (P,T,F) dove: - P è un insieme finito di posti; - T è un insieme finito di transizioni (disgiunto da P); - F (T x P) (P x T) è la relazione di flusso, ovvero l’ insieme di tutte le coppie ordinate (P,T) e (T,P) connesse da un arco orientato. Ad ogni arco viene associato un peso n (se n=1, viene omesso). I posti possono contenere zero o più token (indicati con punti neri) e la loro distribuzione in un determinato istante di tempo rappresenta lo stato della rete, chiamata anche marcatura: M P . Un posto p viene definito posto di input di una transizione t quando esiste un arco orientato da p a t. Invece viene definito posto di output quando l’ arco va da t a p. Si utilizzano t e t per indicare, rispettivamente, l’ insieme dei posti di input e l’ insieme dei posti di output della transizione t. Alla stessa maniera possono essere definite le notazioni p e p come l’ insieme delle transizioni che hanno p, rispettivamente, come posto di output e come posto di input. Una transizione, in genere, rappresenta un evento, un’ azione, una trasformazione o un trasporto, mentre un posto un mezzo, un buffer, un luogo geografico o una condizione. I token indicano oggetti fisici o informazioni. Facendo il caso della solita compagnia di assicurazioni che deve gestire diverse richieste di indennizzo, il processo può essere così modellato: ogni richiesta viene prima 38 registrata e, dopo essere stata analizzata, si effettua il pagamento oppure si spedisce una lettera di rifiuto. Quindi si utilizzano tre posti e tre transizioni (figura 4). Figura 2.4 - rete di petri I token nel primo posto indicano la presenza di tre richieste che devono essere trattate. Lo stato della rete viene indicato con questa notazione M=[3 0 0]. Una transizione si dice abilitata se ogni suo posto di input contiene un numero di token almeno pari al peso dell’ arco che lo connette alla transizione. Una transizione abilitata può scattare e ciò determina la rimozione da ogni suo posto di input e l’ aggiunta ad ogni suo posto di output di un numero di token pari al peso degli archi che la collegano a tali posti. Si può anche dire che, quando la transizione scatta, essa consuma token dai suoi posti di input e produce token nei suoi posti di output (figura 5). Nel nostro esempio, solo la transizione registrazione è abilitata e quando scatta, la rete passa ad un altro stato (M1=[2 1 0]). Figura 2.5 - scatto di una transizione 39 Ora tutte le transizioni sono abilitate ma solo una può scattare. Lo scatto di una anziché di un’ altra significa una evoluzione futura differente per la rete. Nella versione classica, in genere, la scelta è del tutto non-deterministica, ovvero fatta a caso. Uno stato M si dice raggiungibile da uno stato M’ se esiste almeno una sequenza di transizioni tali che facendole scattare si arriva da M’ a M. Considerando una rete di Petri con stato iniziale M (PN,M), essa gode delle seguenti proprietà fondamentali: - vivezza, quando per ogni stato raggiungibile M ed ogni transizione t, esiste uno stato M’ raggiungibile da M che abilita t; - limitatezza, quando in un qualunque stato raggiungibile ogni posto possiede un numero di token inferiore a k; se per ogni posto il massimo numero di token non supera il valore 1, la rete si definisce safe. Un percorso connette dei nodi tramite una sequenza di archi ed è definito elementare se ogni nodo è unico. Data una rete di Petri un percorso C da un nodo n1 ad un nodo nk è una sequenza (n1,n2,….nk) tale che (ni,ni+1) F per 1 i k-1. C è elementare se per ogni coppia di nodi ni e nj di C, con i j, risulta ni nj. Data questa definizione si può introdurre un’ ulteriore proprietà: una rete di Petri si definisce fortemente connessa quando per ogni coppia di nodi (posti e transizioni) x e y, c’ è un percorso che collega x con y. 2.5.1 Reti di Petri di alto livello Sono state proposte molte estensioni alla versione classica: ad esempio, il colore, il tempo e la gerarchia. In una rete di Petri classica due token nello stesso posto sono indistinguibili e spesso ciò è indesiderabile. Ad esempio, nel caso di due differenti richieste di indennizzo, si desidera associare ad ognuna caratteristiche quali la sua tipologia, il numero di polizza, il nome del detentore della polizza ed il valore stimato della richiesta. Ciò può essere fatto utilizzando l’ estensione colore, ovvero si associa ad ogni token, appunto, un colore o valore che permette di identificarlo come oggetto con quelle caratteristiche. In questo caso, lo scatto di una transizione abilitata produce token nei suoi posti di output di valore ed in numero dipendenti dai valori di quelli consumati. 40 Ad esempio, ora si può verificare che, in seguito allo scatto, uno o più posti di output non ricevano alcun token in funzione delle informazioni contenute in quelli presenti nei posti di input. Ciò consente di modellare la scelta; cosa che non è possibile nella rete di Petri classica. Inoltre è possibile associare ad una transizione una condizione sul valore dei token da consumare. In questo modo la transizione è abilitata solamente quando ogni suo posto di input contiene un numero di token pari al peso dell’ arco che lo collega ad essa e, contemporaneamente, è soddisfatta tale condizione. Ad esempio, nel processo di assemblaggio di una macchina, i vari pezzi da montare (telaio, motore, ruote, ecc.) non possono essere scelti a caso bensì devono adattarsi bene l’ uno con l’ altro. Tale situazione può essere modellata con una rete di Petri colorata, in cui ognuno di questi pezzi viene rappresentato da un token, il cui colore contiene le caratteristiche principali del pezzo e la transizione assemblaggio contiene una condizione che consente di combinare fra loro pezzi che possiedono determinate caratteristiche. Contrariamente a quanto accade nella rete di Petri classica, ora la sola rappresentazione grafica non è sufficiente, ma è necessario aggiungere un testo, che specifichi tutte queste informazioni aggiuntive. Un’ altra estensione molto importante è l’ introduzione del tempo, ovvero si associa ad ogni token un valore di tempo, che indica da quale momento lo stesso sarà disponibile per essere consumato. In questo modo, i token presenti nei posti di input di una transizione possono non essere immediatamente disponibili ma necessitare dello scorrere di un certo tempo prima che possano essere utilizzati. In questo caso, quindi, una transizione è abilitata solo quando il tempo associato ai token che essa deve consumare ha un valore uguale o precedente a quello corrente. Fra più transizioni abilitate, scatta quella che lo è da un tempo maggiore. Inoltre ai token prodotti nei posti di otput può essere associato un ritardo, che deve trascorrere dal momento dello scatto prima che essi siano disponibili. Infine si può aggiungere anche la gerarchia, introducendo nella rete un nuovo blocco: un quadrato con bordo doppio. Questo rappresenta una sottorete, a sua volta costituita da posti, transizioni, archi ed eventuali ulteriori sottoprocessi. Ciò permette di 41 strutturare reti complesse in una forma più facilmente leggibile e gestibile e di consentire il riuso di reti già definite. Una rete di Petri estesa con colore, tempo e gerarchia viene definita di alto livello. 2.5.2 Reti di Petri e workflow Ora vediamo come un workflow può essere modellato da una rete di Petri di alto livello. Questa deve possedere determinate caratteristiche, ovvero deve avere una entrata (un posto senza archi in ingresso) ed un’ uscita (un posto senza archi in uscita). Inoltre deve soddisfare due requisiti fondamentali: deve sempre essere possibile raggiungere lo stato in cui è presente un token nel posto di uscita e, quando ciò si verifica, non deve essere presente nessun altro token all’ interno della rete relativo a quella stessa istanza. Ciò garantisce che questa sia stata completata correttamente. Tale rete prende il nome di workflow net. Le transizioni modellano le varie attività che costituiscono il processo, mentre i posti rappresentano le condizioni che devono verificarsi affinchè ciascuna attività possa essere eseguita. Un token nel posto di ingresso indica la presenza di una nuova istanza che deve essere eseguita, mentre un token nel posto di uscita significa che l’ istanza è stata completata. Ogni distribuzione di token presente nella rete fra questi due istanti rappresenta lo stato del processo in quel momento. Infine una transizione abilitata indica che l’ attività corrispondente può essere eseguita e lo scatto indica che è stata eseguita. La rete di Petri consente di modellare il routing sequenziale, condizionale, parallelo e iterativo e vediamo come. Per quanto riguarda il primo caso, le due attività/transizioni che devono essere eseguite sequenzialmente vengono collegate interponendo fra di loro un posto (figura 6). 42 Figura 2.6 - routing sequenziale Quando, invece, due attività possono essere eseguite contemporaneamente o non è importante l’ ordine con cui vengono eseguite, si utilizza una transizione per rappresentare l’ AND-split da cui partono due rami. Quando tale transizione scatta, produce un token in ognuno dei suoi posti di output che abilitano contemporaneamente entrambe le attività. Una volta che queste sono state eseguite, una ulteriore transizione funge da AND-join e consente di sincronizzare i due flussi paralleli (figura 7). Figura 2.7 - routing parallelo Quando si deve scegliere fra due alternative, OR-split ed OR-join sono modellati ciascuno con un posto: dal primo partono due rami che rappresentano le alternative, mentre al secondo questi due rami convergono (figura 8). In questo modo, però, la scelta a livello della rete è non deterministica ed è lasciata al sistema a run time. 43 Figura 2.8 - routing condizionale Se la si vuole, invece, modellare sulla base del valore di alcuni attributi del processo stesso, si utilizza l’ estensione colore e l’ OR-split, in questo caso, viene rappresentato da due transizioni a cui vengono associate delle precondizioni che selezionano l’ attività da svolgere in funzione del colore del token (che contiene gli attributi/dati relativi all’ istanza in questione). L’ OR-join è sempre rappresentato da un posto. Infine è possibile ripetere più volte una attività (figura 9). Figura 2.9 - iterazione Nel caso vengano processate contemporaneamente più istanze della stessa definizione di processo, queste devono poter essere gestite separatamente l’ una dall’ altra. Ciò può essere modellato in una rete di Petri in due modi: è possibile utilizzare una unica rete di Petri colorata, in cui ogni token ha un colore che contiene informazioni sull’ identità della particolare istanza a cui appartiene oppure si può utilizzare una copia della rete di Petri in questione per ciascuna istanza. Infine una rete di Petri estesa con gerarchia consente di modellare sottoprocessi all’ interno di processi complessi utilizzando sottoreti. 44 2.6 Workflow Management System Il Workflow Management System (WfMS) viene definito come “un sistema che definisce, crea e gestisce l’esecuzione di un workflow attraverso l’ uso di software. E’ capace di interpretare gli schemi, interagire con i partecipanti del workflow e invocare l’uso di strumenti ed applicazioni automatizzate” (WfMC). La nascita del WfMS ha segnato la separazione fra il sistema software che si occupa della gestione del processo e le applicazioni che eseguono effettivamente le attività necessarie per la realizzazione del processo. Tale separazione consente di creare un sistema per la gestione del workflow con funzionalità generiche e, quindi, indipendente dalle specifiche applicazioni utilizzate. Ciò ha alimentato le aspettative di chi desidera raggiungere l’ interoperabilità e l’ integrazione fra i diversi prodotti di workflow e si adopera per lo sviluppo di standard. La questione, però, è tutt’ altro che semplice. Esiste una grande varietà di processi che utilizzano la tecnologia del workflow, da quelli che hanno un ciclo di vita di minuti o che coinvolgono un piccolo gruppo locale a quelli che richiedono giorni (persino mesi) per essere eseguiti o necessitano la cooperazione di diverse aziende distribuite su un territorio esteso. Inoltre un sistema per la gestione di workflow può puntare al raggiungimento di differenti obiettivi: la flessibilità, l’ integrazione del sistema, l’ ottimizzazione del processo, ecc. e, quindi, è difficile determinare quali funzionalità deve avere un generico WfMS. Lo sforzo della WfMC in tale direzione ha portato ad identificare tre aree funzionali comuni nei workflow management system esistenti. La prima fornisce le funzioni di build-time per l’ analisi, la definizione e la rappresentazione del processo. La definizione di processo, che ne deriva, può essere espressa in una forma testuale o grafica o utilizzando un linguaggio formale. Questa è considerata l’ area in cui è consentita la maggior differenziazione fra i vari prodotti presenti sul mercato, in modo da fornire differenti funzionalità per facilitare la modellazione di tipi diversi di processo. Invece l’ opera di standardizzazione riguarda la possibilità di trasportare i dati della definizione di processo a differenti strumenti di analisi, definizione e modellazione 45 e prodotti per l’ esecuzione del processo. La freccia a tratto discontinuo in figura 10 indica che alcuni sistemi di workflow consentono di modificare dinamicamente la definizione di processo, ovvero durante l’ esecuzione di un’ istanza di processo. Figura 2.10 La seconda area funzionale è costituita da software capace di interpretare la definizione di processo, creare le istanze e controllare l’ evoluzione del processo attraverso le varie attività di cui è costituito invocando, quando necessario, le risorse umane e/o le applicazioni IT opportune. Il componente principale è il motore di workflow (workflow engine). Infine l’ ultima area funzionale gestisce l’ interazione fra le singole attività ed il software per il controllo del processo per permettere il trasferimento del controllo fra le varie attività, invocare le applicazioni e passare i dati appropriati, ecc. 2.6.1 Componenti di un WfMS Sulla base delle tre aree funzionali individuate, si può definire un modello generale di sistema di workflow, che si adatta bene alla struttura della maggior parte dei 46 prodotti presenti sul mercato e ne identifica i principali componenti. In figura 11 si fa distinzione fra i componenti software propri del sistema (rettangoli riempiti scuro), che forniscono le funzionalità sopra citate e le applicazioni esterne (rettangoli riempiti chiaro), che non fanno parte del prodotto di workflow ma possono essere invocate da questo per eseguire le attività. Inoltre i rettangoli senza riempimento rappresentano i vari dati utilizzati per il controllo e la definizione del processo. Ora analizziamo uno per uno i diversi componenti del modello. Figura 2.11 - componenti di un wfms Lo strumento per la definizione (Definition Tool) consente di specificare una rappresentazione formale del processo, in modo che questo possa essere poi eseguito dal workflow enactment service. La definizione di processo deve contenere tutte le informazioni necessarie al suo processamento: le condizioni di inizio e di completamento, le attività di cui è costituito e le regole per passare dall’ una all’ altra, i 47 compiti che devono essere assegnati all’ utente (o ad una classe di utenti, nel caso siano presenti strumenti per strutturare le risorse in ruoli e/o unità) e riferimenti alle applicazioni che possono essere invocate. Il workflow enactment service è il componente principale. Interpreta la definizione di processo, crea le istanze e controlla la loro esecuzione, aggiungendo work item nella work list degli utenti e invocando applicazioni se necessario. In altre parole assicura che le attività giuste siano eseguite nell’ ordine giusto e dalle persone e/o applicazioni giuste. Può essere costituito da più motori (sistema distribuito), che possono cooperare nell’ esecuzione del processo in vari modi. La distribuzione del lavoro fra di essi può essere fatta in base al tipo di processo, ovvero ogni motore controlla e gestisce interamente l’ esecuzione di quei processi che corrispondono ad una determinata tipologia. Altre volte, invece, ad ogni motore è consentito gestire l’ esecuzione di quelle parti del processo che richiedono l’ uso di risorse appartenenti al suo dominio di controllo oppure possono essere adottati altri meccanismi di partizionamento del lavoro. Sistemi distribuiti usano specifici protocolli per sincronizzare le operazioni e lo scambio di informazioni fra i vari motori. Se è richiesta l’ interazione dell’ utente, il motore aggiunge il work item alla worklist, che contiene appunto una lista di tutti gli item che devono essere eseguiti da un partecipante o un gruppo di partecipanti. E’ compito del worklist handler assegnare tali item all’ utente secondo due possibili modalità: presentandogli il lavoro successivo che deve portare a termine (modalità push) oppure consentendogli di selezionarlo direttamente dalla lista (modalità pull). L’ interfaccia utente è responsabile del look and feel e in molti sistemi può costituire un’ unica unità funzionale con il worklist handler. Nel caso l’ utente abbia bisogno del supporto di una applicazione locale per svolgere un compito, l’ invocazione di questa può essere effettuata dal worklist handler, al momento in cui presenta il work item all’ utente, o dall’ utente stesso. Quindi una applicazione può essere invocata direttamente dal workflow engine o, nel caso debba supportare una attività umana, dal worklist handler/utente. Tipicamente, nei sistemi di workflow sono fornite delle funzioni di supervisione, che consentono di alterare le regole per l’ allocazione del lavoro, identificare i 48 partecipanti appartenenti ad un determinato ruolo, conoscere la storia di una particolare istanza, avere informazioni sul throughput ed altre statistiche, ecc. Queste funzioni sono accessibili solo a chi possiede il privilegio di supervisore, generalmente assegnato ad una particolare workstation o utente. Per il buon funzionamento dell’ intero sistema, i vari componenti devono scambiare informazioni l’ uno con l’ altro. Si distinguono differenti tipi di dati. Quelli manipolati direttamente dalle applicazioni invocate prendono il nome di workflow application data e non sono accessibili dalle macchine di workflow, sebbene queste, quando necessario, sono responsabili del trasferimento di tali dati fra diverse applicazioni invocate in differenti punti del processo. A volte possono essere usati per determinare un cambiamento di stato, allora diventano relevant data ed, in questo caso eccezionale, sono accessibili alle macchine di workflow. Questo secondo tipo di dati, conosciuto anche come case data, viene utilizzato, insieme alla definizione di processo, dal workflow management system per controllare l’ esecuzione delle varie attività all’ interno del processo. Quindi contengono informazioni riguardanti i criteri di ingresso e di uscita di ogni singola attività, i compiti da assegnare ad utenti o le applicazioni da invocare. Infine esiste un terzo tipo di dati denominato control data. Questi sono interni al workflow management system e non accessibili alle applicazioni ed indicano lo stato delle istanze e delle attività in esecuzione. Il workflow management system non ha l’ assoluto controllo sull’ esecuzione del processo, bensì semplicemente lo gestisce, come esplicitato nella definizione stessa. Infatti, se un task deve essere eseguito, non significa che lo sarà per certo. Ad esempio, se si deve elaborare una form compilata da un cliente, può capitare che tale cliente non l’ abbia compilata. Quindi l’ istante in cui il task è abilitato dal sistema per essere eseguito e l’ istante in cui inizia l’ esecuzione effettiva non coincidono necessariamente. Si parla allora di triggering: un trigger è una condizione esterna il cui verificarsi determina l’ esecuzione di un task abilitato (ad esempio, la selezione del task in questione da parte di un utente, lo scadere di un tempo, ecc.). 49 2.6.2 Workflow Reference Model Per raggiungere l’ interoperabilità fra differenti prodotti è necessario creare un insieme standard di interfacce e di formati per lo scambio di dati fra i vari componenti. La WfMC ha sviluppato un modello di riferimento nel quale sono identificati i componenti di un generico sistema di workflow e le interfacce fra di essi. Figura 2.12 - workflow reference model Ogni interfaccia è realizzata usando il cosiddetto WAPI (Workflow Application Programming Interface), ovvero un gruppo di servizi che sono offerti da un server ad un client. Questi servizi possono essere comparati alle chiamate ad una procedura in un classico linguaggio di programmazione. Nel sistema, il Workflow Enactment Service funziona da server mentre gli altri software di supporto per la creazione della definizione di processo e per l’ amministrazione e monitoraggio del processo e le applicazioni sono i client. 50 E’ previsto in tale modello l’ interoperabilità fra differenti Workflow Enactment Service. Sono stati proposti degli standard per queste interfacce ma si sta lavorando ancora alla loro creazione. 51 52 Capitolo 3 YAWL 3.1 Introduzione Yawl (Yet another workflow language) nasce nel 2002 come linguaggio per workflow da un progetto congiunto fra la Eindhoven University of Technology e la Queensland University of Technology. Successivamente è stato creato anche un sistema open source per interpretare ed eseguire workflow scritti in tale linguaggio e che porta lo stesso nome. La prima versione è uscita nel novembre 2003. In questo capitolo viene presentato il linguaggio Yawl con i simboli che utilizza e viene analizzata la sua espressività in base alla sua capacità di rappresentare i workflow pattern individuati nel capitolo precedente. In seguito viene descritto il sistema Yawl, con i suoi componenti software che permettono la gestione e l’ esecuzione di workflow scritti in tale linguaggio. Vengono presentati: l’ editor, che fornisce un ambiente grafico per modellare ed analizzare i workflow; il motore, che gestisce l’ esecuzione di tali workflow ed un insieme di servizi inclusi nel sistema per fornire funzionalità utili allo svolgimento di alcune attività presenti nel workflow. Si accenna anche alle sue capacità (al momento attuale limitate) di gestire le risorse in ruoli e di effettuare analisi statistiche e monitorare l’ esecuzione delle varie istanze. In questo capitolo si adotta la stessa terminologia utilizzata dagli sviluppatori di Yawl, che differisce rispetto a quella introdotta nel capitolo precedente. Infatti i termini task, work item ed attività, qui, hanno un significato diverso da quanto stabilito dalla WfMC. Il primo coincide con il termine attività da questa definita e, quindi, è un generico pezzo di lavoro rappresentato come una entità logica all’ interno della specifica 53 di workflow. Quando ci si riferisce ad una determinata istanza di workflow, il termine task viene sostituito con il termine work item. Infine quando un work item passa allo stato in esecuzione prende il nome di attività. 3.2 Linguaggio Yawl I linguaggi basati sulle reti di Petri possiedono molti dei 20 pattern citati nel capitolo precedente, in particolare quelli basati sullo stato, supportati solamente da quei linguaggi che consentono di rappresentare esplicitamente lo stato (come appunto le reti di Petri). Ciò nonostante queste non permettono di modellare direttamente pattern importanti come quelli che trattano le istanze multiple, il Synchronizing Merge e quelli per la cancellazione. Sulla base di queste considerazioni nel 2002 è iniziato lo sviluppo del linguaggio Yawl da un progetto congiunto fra la Eindhoven University of Technology e la Queensland University of Technology con lo scopo di superare le limitazioni presenti nei linguaggi per workflow allora esistenti. Si ispira alle reti di Petri ma è esteso con costrutti che consentono di modellare anche quei pattern non rappresentati da esse; infatti supporta 19 dei 20 pattern presi in considerazione. Una specifica di workflow in Yawl è un insieme di workflow net (rete di workflow) che formano una gerarchia e, quindi, realizza una struttura ad albero. Un task corrisponde ad una transizione in una rete di Petri e può essere atomico o composito. Un task composito fa riferimento ad una workflow net ad un livello più basso nella gerarchia. I task atomici costituiscono le foglie della struttura ad albero. Ogni workflow net consiste di un insieme di task e condizioni (corrispondenti a posti in una rete di Petri) e possiede un’ unica condizione di input ed un’ unica condizione di output. Come nelle reti di Petri, questi due elementi (task e condizioni) sono connessi in modo da formare un grafo orientato, ma a differenza di esse, è possibile connettere task/transizioni direttamente fra loro senza necessariamente utilizzare condizioni/posti in mezzo. 54 La simbologia usata in Yawl è simile a quella delle reti di Petri: un quadrato semplice rappresenta un task atomico mentre un quadrato con bordo doppio un task composito; un cerchio rappresenta una condizione (con l’ aggiunta di notazioni particolari per la condizione di input e la condizione di output). Ulteriori simboli consentono di modellare le istanze multiple di un task atomico e di un task composito e la possibilità di cancellare una specifica regione. Figura 3.1 - simboli utilizzati nel linguaggio Yawl Per quanto riguarda le istanze multiple, Yawl permette di specificare un limite superiore ed uno inferiore per il numero di istanze che possono essere create. Inoltre consente di indicare una soglia che rappresenta quante istanze vengono completate prima che il task completii e si proceda con il successivo. Le istanze ancora non completate vengono interrotte. Se tale soglia non è specificata il task completa quando sono state completate tutte le istanze. Infine è possibile definire un ultimo parametro che può assumere i valori “statico” o “dinamico” e si riferisce alla possibilità o meno di creare nuove istanze mentre altre sono già in esecuzione. Inoltre per rappresentare i vari split e join il simbolo del task viene modificato in questo modo: 55 Figura 3.2 - simboli dei vari split e join in Yawl Si può notare come Yawl consenta di modellare direttamente le istanze multiple e le cancellazioni fornendo appositi simboli grafici. Inoltre introduce, accanto agli AND/XOR-split/join, l’ OR-split e l’ OR-join, che corrispondono rispettivamente ai pattern Scelta Multipla e Synchronizing Merge. 3.3 Sistema Yawl Successivamente alla creazione di Yawl è stato sviluppato anche un sistema open source per interpretare ed eseguire workflow scritti in tale linguaggio e che porta lo stesso nome. Esso fornisce un editor grafico per realizzare workflow in Yawl ed un motore per gestire l’ esecuzione delle istanze, oltre ad un insieme di servizi che costituiscono il cosiddetto “ambiente” di Yawl. Poiché il sistema adotta una architettura orientata al servizio, le sue funzionalità possono essere facilmente estese aggiungendo altri servizi a quelli già esistenti. Inoltre offre un supporto per la persistenza dei dati interfacciandosi a PostgreSQL. L’ architettura di questo sistema è mostrata in figura. 56 Figura 3.3 - architettura del sistema Yawl Le specifiche di workflow sono realizzate utilizzando lo Yawl designer e caricate nel motore Yawl (Yawl engine). Questo, dopo aver effettuato tutte le necessarie verifiche e la registrazione dei task, le immagazzina nello Yawl repositary. A questo punto, le specifiche caricate con successo, possono essere istanziate in qualsiasi momento attraverso il motore Yawl, che gestisce l’ esecuzione di tali istanze. L’ ambiente di un sistema Yawl è composto da un insieme di servizi. In Yawl con il termine servizio si intende senza distinzione una applicazione, un utente o una organizzazione. Infatti viene adottato il principio proprio delle architetture orientate al servizio (SOA) in cui per astrazione tutte le entità esterne o offrono o richiedono servizi. In figura sono mostrati quattro servizi: 1. Yawl worklist handler corrisponde al classico worklist handler presente nella maggior parte dei workflow management system e, come si è già detto nel capitolo precedente, svolge la funzione di assegnare compiti agli utenti del sistema; 57 2. Yawl web services broker funge da mediatore fra il motore Yawl ed i servizi web esterni che possono essere invocati per svolgere alcune operazioni (ad esempio, per poter utilizzare un servizio di pagamento online); 3. Yawl interoperability broker consente di interconnettere differenti motori di workflow; 4. custom Yawl service connette il motore Yawl con una entità presente nell’ ambiente del sistema. Infine un ultimo componente è costituito dallo Yawl manager, che fornisce funzioni di management: consente di controllare manualmente le istanze (ad esempio, se si vuole cancellare una istanza o una specifica di workflow), fornisce informazioni sullo stato delle istanze in esecuzione e dati riguardanti le istanze completate. Il motore Yawl possiede due gruppi di interfacce: il gruppo A consente l’ interazione fra lo Yawl designer e lo Yawl manager da un lato e il motore Yawl dall’ altro corrisponde alle interfacce 1 e 5 del modello di riferimento introdotto dalla WfMC; il gruppo B permette l’ interazione fra i servizi e il motore Yawl e corrisponde alle interfacce 2, 3 e 4 dello stesso modello sopra citato. Entrambi i gruppi sono specificati in WSDL. Gli utenti interagiscono con il sistema tramite un browser web, ovvero sia lo Yawl manager sia il worklist handler offrono front-end HTML. Una differenza fondamentale rispetto ai workflow management system esistenti è che il motore Yawl gestisce il flusso di controllo e i dati delle istanze di workflow ma non direttamente gli utenti. Quindi si preoccupa del “cosa” e “quando”, mentre il “come” e “da chi” è affidato ai servizi Yawl. 3.4 Editor Yawl L’ editor Yawl consente di modellare specifiche di workflow e di verificarne build time la correttezza semantica (ad esempio, rileva la presenza di eventuali deadlock 58 e di task non eseguiti) e quella sintattica, ovvero il rispetto delle regole che consentono la sua esecuzione nel motore (ad esempio, segnala la mancata definizione dei parametri per il passaggio dei dati attraverso il workflow). Una volta terminata la creazione dello schema, questo viene esportato in formato XML per poter essere elaborato dal motore. L’ editor permette anche l’ operazione inversa, ovvero di importare le specifiche in formato XML e tradurle nel formato proprietario Yawl. Consente di rappresentare i vari task (atomici, compositi, istanze multiple) ed i collegamenti fra di essi utilizzando differenti tipi di split e join (AND, OR, XOR). Permette anche di modellare le cancellazioni, come già visto. Quindi supporta 19 dei 20 control-flow pattern presi in considerazione nel capitolo precedente, fornendo una grande capacità espressiva per quanto riguarda la prospettiva del flusso di controllo di un workflow. Figura 3.4 - editor Yawl 59 La definizione di un task, atomico o composito, avviene nella cosiddetta decomposizione di task (task decomposition). Per poter essere eseguito, ogni task deve avere una decomposizione (identificata da un nome), nella quale si possono specificare le variabili utilizzate, una label da associare al task ed un servizio che deve essere invocato a tempo di esecuzione. Le decomposizioni di task definite nella specifica sono visibili a tutta la rete e più task possono condividere (riutilizzare) la stessa decomposizione, ad indicare che per loro è richiesta la stessa attività. Si può dire, quindi, che esiste una relazione di 1:N fra decomposizioni e task. Quindi, per specificare la decomposizione di un task, la si può selezionare fra quelle che sono già state create o crearne una nuova. La decomposizione di un task composito coincide con quella della sottorete a cui è collegato. Anche la rete ha la sua decomposizione, nella quale vengono definite le variabili di rete. In questo caso, però, tale decomposizione deve essere unica e non condivisibile con altre reti. Ora analizziamo in che modo l’ editor consente di definire ed utilizzare i dati all’ interno di una specifica di workflow (prospettiva dei dati) e di selezionare la risorsa che deve eseguire un task (prospettiva delle risorse). 3.4.1 Prospettiva dei dati e delle risorse Mentre la maggior parte dei workflow management system usano un linguaggio proprietario per gestire i dati, Yawl si appoggia completamente sugli standard basati su XML. E’ possibile definire tipi di dati utilizzando XML Schema e ne vengono forniti per default un certo numero di base: boolean, string, double, long, date (con il formato yyyy-mm-dd) e time (con il formato hh:mm:ss). Tramite questi, possono essere definiti tipi più complessi. Yawl usa variabili di rete per memorizzare dati che devono essere letti e/o scritti dai componenti della rete, e variabili di task, che contengono dati utilizzabili all’ interno di ogni singola istanza di task. Le prime servono per trasferire dati attraverso i vari task 60 della rete e/o con altre reti; le seconde, invece, sono usate per lo scambio di informazioni fra gli utenti del workflow ed il motore e fra i servizi che il motore invoca a tempo di esecuzione e la rete. Le variabili dichiarate in un task composito costituiscono le variabili di rete per la corrispondente sottorete. Nella definizione di una variabile, oltre il nome e il tipo, è necessario indicare l’ uso, che può essere input only (i dati possono solo essere scritti nella variabile), output only (i dati contenuti nella variabile possono solo essere letti) e input and output (i dati possono essere scritti e letti). Per le variabili di rete è possibile scegliere anche local (i dati possono essere manipolati solo internamente alla rete) e, solo in questo caso, può essere assegnato un valore iniziale. Figura 3.5 – task decomposition Yawl supporta il passaggio di dati fra i task di un processo (trasferimento interno) e fra quest’ ultimo e l’ ambiente operativo, costituito da utenti, servizi web, ecc. (trasferimento esterno). Il trasferimento interno di dati avviene fra la rete ed i suoi task utilizzando XQuery. Ad un task viene assegnato un parametro di input, che utilizza una XQuery per estrarre l’ informazione dalla variabile di rete e passarla alla corrispondente variabile di task. Allo stesso modo gli viene assegnato un parametro di output per 61 consentire il passaggio inverso. Yawl non permette il passaggio diretto di dati fra i vari task, perché la variabili di task sono locali al task al quale appartengono e, quindi, non accessibili agli altri task. Non consente neppure il passaggio diretto di dati fra le variabili di rete locali e le sue sottoreti. Figura 3.6 – definizione delle XQuery per il passaggio dei dati da e verso le variabili di rete Quando sono richiesti dei dati dall’ ambiente esterno, questi vengono forniti run time tramite una form che l’ utente deve compilare oppure invocando un servizio web. Il trasferimento esterno di dati non può essere applicato alle variabili definite locali. Ogni variabile di input, ad eccezione di quelle della rete di alto livello, riceve i dati dalla corrispondente variabile di rete utilizzando un parametro di input mentre ad ogni variabile di input della rete di alto livello o viene assegnato un valore iniziale design time o riceve i dati dall’ ambiente (ad esempio, richiedendoli all’ utente tramite una form) quando inizia l’ esecuzione della rete. Ogni variabile di output, eccetto quelle associate ai task compositi, richiede i dati dall’ ambiente una volta che la corrispondente 62 rete o task vengono eseguiti mentre ogni variabile di output associata ad un task composito riceve i dati dalla sua sottorete attraverso un parametro di output. Infine le variabili di input ed output combinano i due comportamenti precedenti. Yawl supporta il routing condizionale basato sui dati del processo. Quando un task possiede uno split XOR od OR, una espressione booleana XPath viene associata a ciascun ramo (o flusso) ed, in funzione del valore (true o false) da essa assunto al tempo di esecuzione, il ramo corrispondente verrà o meno eseguito dal motore Yawl. Tali espressioni vengono valutate nello stesso ordine con cui sono state specificate nella lista ed il flusso relativo all’ ultimo elemento è quello di default, che viene direttamente eseguito (senza valutazione) quando tutti gli altri sono risultati false. Figura 3.7 – definizione delle espressioni XPath in caso di OR/XOR-split Poiché nel caso di uno split XOR è permessa una scelta unica, appena il motore raggiunge il primo predicato valutato true, sceglie il ramo corrispondente senza proseguire nella valutazione della restante lista. Diversamente accade per lo split OR, dove ogni predicato deve essere valutato. Solamente le variabili di rete possono essere 63 utilizzate all’ interno dei predicati perché la valutazione di questi avviene dopo il completamento del task e le variabili di task non sono più accessibili. L’ editor Yawl facilita la definizione delle XQuery e delle espressioni XPath in due modi: fornendo pulsanti che generano automaticamente XQuery ed espressioni XPath compatibili ed evidenziando l’ uso di una sintassi valida o non valida da parte dell’ utente tramite l’ uso dei colori, rispettivamente, verde o rosso. Per quanto riguarda le XQuery gli errori semantici sono segnalati run time dal motore Yawl e l’ esecuzione viene bloccata. Invece espressioni booleane XPath semanticamente non valide vengono valutate false ed il processo continua la sua esecuzione. Per quanto riguarda la prospettiva delle risorse, l’ editor consente di selezionare per ogni task il ruolo o la persona che deve eseguirlo. Figura 3.8 – definizione del ruolo e/o della persona a cui è consentito l’ esecuzione di un task 64 3.5 Yawl engine Il motore è in esecuzione presso una macchina server a cui si può accedere utilizzando un browser. Differenti pagine rappresentano diverse funzionalità: Yawl home consente il log in al sistema in veste di amministratore o di utente (figura 9); Administrate è riservata agli amministratori, permette il caricamento (upload) o l’ eliminazione (unload) delle specifiche e di accedere alla pagina per la gestione delle risorse e ad altre funzioni amministrative; Workflow Specifications presenta informazioni sulle specifiche caricate e le rispettive istanze in esecuzione, consente anche il lancio di nuove istanze o la terminazione manuale di quelle già esistenti; Available Work mostra la lista dei work item disponibili per essere eseguiti dall’ utente (identificato, in base all’ autenticazione, come risorsa idonea allo svolgimento di quei compiti); Checked Out Work presenta la lista delle attività che sono in esecuzione presso un utente o un altro servizio; Logout permette di uscire dal sistema. Pertanto il caricamento e l’ eliminazione delle specifiche che devono essere eseguite viene fatto manualmente dalla pagina Administrate ed è riservato esclusivamente a chi possiede il ruolo di amministratore (come anche la gestione delle risorse e dei ruoli e l’ accesso alle funzioni di monitoraggio). Invece, a chiunque è consentito lanciare nuove istanze o cancellare quelle già in esecuzione dalla pagina Workflow Specifications. Ovviamente è possibile caricare nel motore diverse specifiche contemporaneamente in modo da consentire l’ esecuzione delle loro istanze in parallelo senza che interferiscano in alcun modo fra loro. Ogni utente che accede al sistema, previa autenticazione, trova i work item, che può eseguire, elencati nella pagina Available Work e selezionandone uno, questo scompare dalla lista dei work item in attesa di essere eseguiti e compare nella lista di quelli in esecuzione nella pagina Checked out Work. 65 Figura 3.9 – pagina di log in al sistema Yawl Yawl fornisce funzioni di base per la gestione delle risorse in ruoli e l’ assegnamento dei work item alle risorse. Infatti è possibile accedere a pagine che permettono di aggiungere, modificare ed eliminare risorse (umane o non umane), così pure di creare nuovi ruoli o cancellare quelli esistenti e di assegnare uno o più ruoli ad una risorsa. Yawl fornisce anche semplici strumenti per effettuare analisi statistiche e monitorare l’ esecuzione delle varie istanze. Attraverso una interfaccia grafica è possibile costruire query che consentano di estrarre i dati dal database per produrre report utili all’ amministrazione. 66 3.6 Servizi Yawl Yawl consente l’ interconnessione con servizi esterni, ai quali si può delegare l’ esecuzione di determinati compiti. La struttura orientata al servizio, con cui è stato realizzato il sistema, permette di estendere i servizi connessi con il motore. Inoltre la loro indipendenza da quest’ ultimo favorisce la portabilità anche in ambienti diversi da Yawl. Il servizio richiesto da un task viene specificato build time nella cosiddetta task decomposition. Questa richiede anche ulteriori informazioni in base al tipo di servizio che deve essere invocato. Ad esempio, nel caso il task richieda il servizio worklist, devono essere esplicitati quali ruoli possono vedere le istanze di tale task e quali possono prelevarle dalla worklist. Per default l’ autorizzazione è estesa a tutte le risorse. Quando una nuova istanza di workflow viene caricata nel motore, questo registra la decomposition di ogni task atomico nel servizio in essa indicato. Se tali registrazioni si concludono con un successo, il motore può creare le istanze di tali task; altrimenti viene restituito un errore, il caricamento è abortito ed ogni registrazione già avvenuta viene cancellata. Come si è già detto, Yawl consente l’ interazione con le risorse tramite la worklist, la connessione con altri motori di workflow e l’ invocazione di servizi esterni. Questi ultimi possono comunicare con il motore in due differenti modi: direttamente tramite messaggi XML/HTTP (Custom Yawl Services) o indirettamente attraverso il Yawl Web Services Invoker. I Custom Yawl Services interagiscono con il motore tramite messaggi XML/HTTP attraverso certi endpoint, di cui alcuni localizzati dalla parte del motore Yawl ed altri dalla parte del servizio. Possono essere sviluppati in qualsiasi linguaggio di programmazione ed eseguiti su qualunque piattaforma capace di mandare e ricevere messaggi HTTP. Vengono registrati nel motore specificando la loro locazione URL. Quando il servizio riceve il messagio che un work item è pronto per essere eseguito (è abilitato), lo preleva dal motore ed il work item passa allo stato in esecuzione (check out). Quando il processamento del work item si è concluso, il 67 servizio lo restituisce al motore ed il work item passa allo stato completato (check back). Yawl fornisce due Custom Yawl Services precostruiti: il Worklet Service, che introduce flessibilità nella gestione dei workflow ed il Time Service, che è capace di effettuare il check-in ed il check-out dei work item con un certo ritardo di tempo. E’ possibile estendere le funzionalità del sistema aggiungendo ulteriori servizi e per registrarli basta compilare una form presente nella pagina Administrate dell’ interfaccia HTLM del motore Yawl. Nel secondo caso, invece, il motore Yawl non interagisce direttamente con il servizio, bensì comunica con il Yawl WSInvoker che a sua volta invoca una operazione del servizio esterno. Il WSInvoker viene utilizzato quando una applicazione esterna deve essere invocata per eseguire una istanza di task in maniera sincrona e l’ interfaccia del servizio è stata descritta in WSDL. I servizi che sono connessi al motore in questo modo non hanno bisogno di essere registrati. 3.6.1 Worklet Service I Workflow management system gestiscono e controllano l’ esecuzione di processi che sono stati modellati nel build time tramite una ben determinata rappresentazione, dalla quale vengono derivate le istanze. Generalmente, essi non supportano una evoluzione dinamica del processo, ovvero non permettono di apportare modifiche run time alla sua definizione per gestire cambiamenti inaspettati o insiti nella sua normale natura. Ciò li rende adatti per processi caratterizzati da alta predicibilità e ripetitività, che costituiscono, però, solo una parte di quelli che si trovano nella realtà. Gestire una deviazione da quanto stabilito nella definizione di processo significa sospendere l’ esecuzione ed intervenire manualmente oppure addirittura l’ aborto dell’ intero processo. Quindi, per quei processi nei quali i mutamenti costituiscono un aspetto significativo della loro natura, è necessario adottare un approccio più flessibile. Utilizzare delle worklet può essere una soluzione a tale problema. Queste formano un repertorio estensibile di sottoprocessi e rappresentano un certo numero di 68 azioni differenti che possono essere intraprese in base al contesto che si verifica durante l’ esecuzione di un processo. Esiste, però, una differenza sostanziale fra un sottoprocesso modellato con una sottorete, come lo abbiamo inteso fino ad ora ed una worklet; infatti, mentre una sottorete viene staticamente assegnata alla rete genitore nel design time, una worklet viene selezionata dal repertorio nel run time ed assegnata dinamicamente alla rete genitore per svolgere un determinato task. Ciò consente di catturare a tempo di design la struttura principale del processo senza dover per forza includere tutte le possibili varianti, che, invece, vengono gestite dinamicamente durante l’ esecuzione. Una worklet non è altro che una normale specifica di workflow (infatti viene creata utilizzando l’ editor di Yawl) ed in quanto tale può, anche, essere eseguita sul motore singolarmente, come una qualsiasi altra istanza di workflow. Per assegnare una worklet ad un task, bisogna collegare quest’ ultimo al worklet service nella sua task decomposition e quando, durante l’ esecuzione, viene generato il work item, il sistema sceglie dal repertorio la worklet appropriata in base a determinati attributi associati all’ istanza in questione ed utilizzando un insieme di regole (RDR). Quindi viene effettuato il check out del work item, le sue variabili di input vengono mappate in quelle di rete della worklet selezionata e quest’ ultima viene lanciata nel motore come istanza separata rispetto all’ istanza genitore. Quando la worklet è stata completata, le sue variabili di output di rete vengono mappate nelle variabili di output del work item di origine, viene fatto il check in di quest’ ultimo e l’ esecuzione dell’ istanza genitore continua. Dal punto di vista del motore, quindi, la worklet e l’ istanza genitore sono due casi separati e spetta al Worklet Service provvedere ai collegamenti fra i due, al mapping dei dati, alla sincronizzazione ed alla creazione del log relativo alla worklet. L’ architettura di un Worklet Service in riferimento con gli altri componenti del sistema è rappresentata in figura 10. 69 Figura 3.10 – architettura del Worklet Service in Yawl Il servizio utilizza l’ interfaccia A per caricare le specifiche di worklet sul motore e l’ interfaccia B per iniziare e cancellare le istanze e per fare il check out del work item, dopo aver interrogato i dati ad esso associati ed il suo check in, una volta completata l’ esecuzione. Un qualsiasi numero di worklet può essere inserito nel repertorio da associare ad un task atomico semplice o ad un task atomico ad istanze multiple (nel qual caso le worklet lanciate per le varie istanze possono essere differenti in funzione degli attributi che queste possiedono) così come la stessa specifica di workflow può possedere più di un task che usa il Worklet Service. Inoltre una worklet può far parte di uno o più repertori, ovvero può essere riutilizzata in un certo numero di task all’ interno della stessa specifica o appartenenti a specifiche diverse. Infine è anche possibile che una specifica di worklet contenga task che, a loro volta, utilizzano il Worklet Service e che, quindi, al tempo di esecuzione vengono sostituiti con altre worklet, consentendo l’ annidamento. La scelta della worklet da eseguire run time avviene tramite l’ uso di un insieme di regole disposte a formare un albero binario. Ognuna di queste regole è del tipo “if condizione then conclusione”, dove la conclusione indica la worklet da selezionare. Da ogni nodo dell’ albero possono partire zero, uno o due rami che conducono ad altrettanti 70 nodi. L’ albero è percorso dalla radice attraverso i suoi rami valutando di volta in volta la condizione di ogni nodo incontrato: se questa è true ed il nodo possiede un figlio true, anche la condizione del nodo figlio viene valutata; se invece è false ed esiste un figlio false, è valutata la condizione di tale figlio. Quando si giunge ad un nodo terminale, se la condizione è soddisfatta, si segue la sua conclusione altrimenti si risale l’ albero fino all’ ultima regola incontrata la cui condizione era soddisfatta. Il nodo radice (corrispondente alla regola 0) contiene una condizione true ed una conclusione null di default. In realtà ogni figlio true rappresenta una regola eccezione rispetto a quella generale del nodo genitore (si dice anche che è un raffinamento), mentre ogni figlio false costituisce una regola alternativa. L’ RDR (Ripple Down Rules) Editor fornisce una interfaccia GUI, che consente di facilitare la creazione di tali regole. Ogni specifica che richiede l’ uso del Worklet Service per uno o più dei suoi task deve avere il suo insieme di alberi di regole (un albero per ogni task) il quale viene memorizzato nella forma di documento XML su un file che porta lo stesso nome della specifica ma con estensione “.xrs” (XML Rule Set). In qualunque momento (anche mentre il processo è in esecuzione), possono essere aggiunte nuove worklet al repertorio associato ad un task e queste diventano automaticamente disponibili per istanze correnti e future, purchè all’ albero relativo a quel task vengano aggiunte le corrispondenti regole. Infatti se, durante l’ esecuzione di una particolare istanza, ci si rende conto che la worklet selezionata dal sistema è inappropriata al caso in questione, si può intervenire dinamicamente e modificare la scelta introducendo un nuovo nodo all’ albero delle regole, in modo da poter gestire una situazione che non era stata considerata precedentemente. L’ aggiunta di tale nodo avviene secondo il seguente algoritmo: se la worklet selezionata è il risultato di una regola terminale soddisfatta, allora la nuova regola è aggiunta come un nodo eccezione; se, invece, essa è il risultato di una regola non terminale (ovvero la condizione della regola terminale non era soddisfatta), allora il nuovo nodo viene inserito come una alternativa al nodo terminale non soddisfatto. Una volta che è stata aggiunta la nuova regola, l’ editor comunica al worklet service tramite una interfaccia JSP/Servlet la sostituzione della worklet selezionata dal 71 sistema con quella aggiunta dinamicamente e che risulterà disponibile anche per le istanze future. L’ editor RDR fornisce strumenti differenti per la creazione di nuovi insiemi di regole e l’ aggiunta di nuove regole ad un insieme già esistente. In quest’ ultimo caso dà la possibilità di accedere direttamente all’ editor di Yawl per realizzare una nuova worklet. 72 73 Capitolo 4 LINEE GUIDA IMPLEMENTATE IN YAWL 4.1 Introduzione Il processo di cura di un paziente può essere paragonato ad un processo di business. Entrambi sono caratterizzati da un insieme di azioni da svolgere rispettando certi vincoli temporali e logici e da un insieme di decisioni da prendere per raggiungere determinati obiettivi. Da questo punto di vista, quindi, una linea guida può essere modellata come un workflow. In questo capitolo si mostra come si possono modellare le linee guida utilizzando Yawl. Sono state scelte due linee guida di esempio: una linea guida per la diagnosi ed il trattamento del diabete mellito tipo 2 e di IGT/IFG ed una linea guida per il trattamento dell’ obesità. Sono state rappresentate nell’ editor e, successivamente, si è verificata la correttezza delle due rappresentazioni eseguendole sul motore. Si utilizzano i task per modellare le azioni che devono essere compiute all’ interno di una linea guida. L’ AND-split consente l’ esecuzione parallela o in qualsiasi ordine di due o più azioni mentre lo XOR-split e le espressioni booleane XPath, associate a ciascun ramo in uscita, permettono di rappresentare la scelta automatica fra un insieme di alternative sulla base del verificarsi o meno di certe condizioni. Inoltre le condizioni possono modellare le decisioni che devono essere prese dall’ utente. Si è evidenziato, infatti, l’ esistenza di due tipi di scelte che un sistema per la gestione delle linee guida deve essere capace di implementare: quelle fatte automaticamente dal sistema sulla base di rigidi criteri e quelle che, invece, richiedono l’ interazione dell’ utente. Questo perché è importante consentire al medico di decidere, ad esempio, quale terapia farmacologica o test diagnostico adottare fra diversi 74 ugualmente possibili, così come è importante lasciare libertà decisionale laddove la linea guida prevede una valutazione soggettiva della situazione. La prima tipologia di scelta è modellata nell’ esempio della linea guida per la diagnosi del diabete mentre la seconda è presente nell’ esempio della linea guida per il trattamento dell’ obesità. In Yawl è possibile anche modellare il ciclo, nel caso in cui una o più azioni devono essere ripetute e consente di rappresentare linee guida complesse su più livelli utilizzando sottoreti. Una caratteristica molto importante per una linea guida è la possibilità di specificare un vincolo temporale, ovvero di fissare un tempo di inizio, di fine e/o la durata di una azione od un insieme di azioni. Ad esempio, per il follow up di un paziente diabetico è richiesto di effettuare una serie di esami ed accertamenti di controllo dopo un certo intervallo di tempo e, quindi, di specificare un vincolo temporale per l’ inizio di tali controlli. Come si può vedere nell’ esempio trattato in questo capitolo, ciò può essere fatto in Yawl utilizzando il Time Service. 4.2 Esempio di linea guida: diabete Come esempio è stata rappresentata in Yawl sfruttando la metodologia del workflow una linea guida per la diagnosi di “paziente diabetico tipo 2” o di paziente con ridotta tolleranza agli zuccheri (IGT) o alterata glicemia a digiuno (IFG), che viene sinteticamente chiamato “paziente con IGT/IFG”. La linea guida è costituita da un insieme di esami ed accertamenti con lo scopo di indagare su un presunto sospetto di diabete. Pertanto il criterio di eleggibilità per questa linea guida può essere individuato in uno stato sintomatologico del paziente che costituisce un campanello d’ allarme per la malattia. Il primo passo da compiere è quello di effettuare un controllo del valore glicemico a digiuno (figura 1). In base al risultato ottenuto si verifica una fra queste tre situazioni: 75 se il valore è inferiore ad una certa soglia (110 mg/dl) si esce dalla linea guida; se il valore è compreso nell’ intervallo fra 110 e 126 mg/dl, è necessario effettuare un ulteriore esame chiamato glicemia due ore dopo OGTT prima di poter fare una eventuale diagnosi; se il valore è superiore a 126 mg/dl la diagnosi è quella di diabete mellito tipo 2. Nel caso si verifichi la situazione numero 2 (glicemia a digiuno compresa fra 110 e 126 mg/dl), il paziente deve essere sottoposto al test glicemia due ore dopo OGTT, il cui risultato porta ad uscire dalla linea guida (paziente sano), se il valore è minore di 140 mg/dl; una diagnosi di paziente con IFG/IGT, se il valore è compreso fra 140 e 200 mg/dl; una diagnosi di diabete mellito tipo 2, se il valore è supera i 200 mg/dl. La linea guida è stata implementata in Yawl nel modo seguente: 1. i vari esami a cui deve sottoporsi il paziente e le possibili diagnosi a cui si perviene vengono modellati con dei task; 2. vengono rappresentati i dati necessari per determinare il flusso delle attività da eseguire run time; 3. nel motore Yawl viene verificata la correttezza della rappresentazione ottenuta con l’ editor. 76 Figura 4.1 - linea guida per la diagnosi di diabete mellito tipo 2 o di IGT/IFG Si può vedere, in figura 1, come sono stati disposti i vari task e collegati opportunamente fra loro in modo da implementare la linea guida sopra descritta. Sono presenti due XOR-split nei task controllo_glicemia e test_OGTT che consentono la scelta di una sola fra tre alternative. Il task con etichetta fine è stato aggiunto semplicemente perché Yawl non permette l’ ingresso di archi multipli nel posto di output e non ha alcuna funzionalità ai fini dell’ esecuzione del workflow. Per questo ad esso non viene assegnata alcuna decomposizione in modo da non generare alcuna attività quando viene eseguito sul motore. Nella decomposizione di rete sono state definite due variabili, entrambe locali: glicemia_a_digiuno e glicemia_a_2ore. Queste sono utilizzate all’ interno della linea guida con lo scopo di indagare sullo stato del paziente ed arrivare ad una diagnosi. Nella decomposizione del task controllo_glicemia è stata specificata glicemia_a_digiuno come variabile di output. Ciò vuol dire che, quando il work item del task passa dallo stato abilitato allo stato in esecuzione, viene presentata all’ utente una form nella quale deve essere inserito il valore da assegnare a tale variabile. Tale valore viene utilizzato prima che il work item passi allo stato completato per selezionare il task successivo da eseguire fra tre possibilità. Sono state esplicitate una XQuery per 77 consentire il passaggio del valore inserito tramite la form dalla variabile di task alla variabile di rete e tre espressioni XPath per determinare il flusso all’ uscita del task in funzione del valore assunto dalla variabile glicemia_a_digiuno. Allo stesso modo è stato fatto per il task test_OGTT. Lo scopo di questo workflow è quello di presentare al medico di medicina generale una sequenza di azioni da svolgere (esame della glicemia a digiuno, valore della glicemia due ore dopo il test OGTT) prima di arrivare ad una diagnosi. Nel caso si arrivi ad una diagnosi (sia essa di diabete o di IGT/IFG), il paziente deve essere sottoposto ad una serie di controlli e visite (follow-up) ad intervalli di tempo regolari, onde evitare il peggioramento del suo stato di salute e prevenire la comparsa delle complicanze direttamente legate a tale malattia (malattie cardiovascolari, cecità, insufficienza renale, amputazione arti inferiori). Quindi i due task diagnosi_diabete e diagnosi_IFG-IGT sono compositi, ovvero richiamano due sottoreti che implementano due ulteriori linee guida: rispettivamente, la linea guida per il follow-up del paziente diabetico e quella per il follow-up del paziente con IGT/IFG. Ognuna di esse elenca gli esami e/o visite che il paziente malato deve effettuare ad intervalli di tempo regolari nell’ arco di uno o due anni ed è stata implementata in Yawl in modo da fornire un avviso al medico allo scadere di ogni intervallo di tempo dopo il quale il paziente deve essere sottoposto ad un elenco di controlli. E’ stato possibile realizzare ciò utilizzando il Time Service, che permette il check in (passaggio dallo stato in esecuzione a quello completato) di un work item una volta trascorso un certo tempo. In figura 2 è raffigurato il workflow che rappresenta la linea guida che il medico deve seguire per sottoporre il paziente a cui è stato diagnosticato il diabete mellito tipo 2 ad un follow up annuale. 78 Figura 4.2 - linea guida per il follow-up del paziente con diabete mellito tipo 2 Il task inizio contiene un insieme di variabili di output che rappresentano una lista di controlli che il medico deve effettuare sul paziente immediatamente dopo la diagnosi: ad esempio, una visita generale, il controllo del peso e della pressione ed una prescrizione dietetica. Al tempo di esecuzione, all’ utente compare una form che deve essere compilata con i dati raccolti dalla visita. Figura 4.3 Successivamente, il task aspetta utilizza il Time Service ed imposta la variabile time ad un valore pari a 3 mesi, cosicché il task controllo1 viene abilitato solo allo 79 scadere di tale termine. Questo task presenta un’ altra form al medico con la lista dei controlli che il paziente deve fare una volta che sono trascorsi 3 mesi dalla diagnosi. Impostando le variabili come input e output vengono ricordati i valori ottenuti dalle visite precedenti e si possono sovrascrivere i nuovi valori, una volta effettuati gli esami. Figura 4.4 Si esegue di nuovo il task aspetta, che riutilizza la task decomposition precedente e fa trascorrere altri 3 mesi prima di prima di ricordare al medico che il paziente deve essere sottoposto ad altri esami. Il task controllo2 presenta all’ utente la lista dei controlli che il paziente deve effettuare dopo 6 mesi dalla diagnosi. Si continua alla stessa maniera: a 9 mesi dalla diagnosi si ripetono gli esami fatti a 3 mesi ed infine dopo 1 anno gli effettuano gli ultimi controlli prima di uscire dalla linea guida ed anche dalla specifica di workflow. La linea guida per il follow up di un paziente con IGT-IFG è implementata esattamente allo stesso modo. 80 4.3 Esempio di linea guida: obesità Come ulteriore esempio è stata rappresentata in Yawl una linea guida per il trattamento dell’ obesità. Essa inizia con una raccolta di dati (peso ed altezza) da parte dell’ utente per poter inserire il paziente in una di queste cinque categorie: paziente con peso normale, in sovrappeso, con obesità di tipo I, con obesità di tipo II e con obesità di tipo III. La classificazione viene fatta in base all’ intervallo nel quale è compreso il valore di BMI, calcolato in funzione del peso e dell’ altezza della persona. Una volta valutata la categoria di appartenenza del paziente, la linea guida presenta il corrispondente trattamento consigliato (eccezion fatta per il paziente con peso normale, per il quale la linea guida termina immediatamente). La particolarità che presenta il workflow, utilizzato in figura 5 per rappresentare questa linea guida, è che in diversi punti offre la possibilità all’ utente di effettuare una scelta. Infatti può decidere, nei casi più gravi, se iniziare un trattamento farmacologico, nel qual caso può optare per la somministrazione di una classe di farmaci anziché di un’ altra, o se ricorrere, addirittura, all’ intervento chirurgico. Lasciare al clinico l’ ultima parola su quale terapia farmacologica adottare fra diverse ugualmente possibili è una caratteristica importante di una linea guida. Così come è importante consentirgli di prendere decisioni laddove la linea guida prevede una valutazione soggettiva della situazione. Pertanto si può distinguere fra due tipi di scelte che un sistema per la gestione delle linee guida deve essere capace di implementare: quelle fatte automaticamente dal sistema sulla base di rigidi criteri e quelle che, invece, richiedono l’ interazione dell’ utente. In Yawl, il primo tipo è realizzato utilizzando un task con XOR-split ed esprimendo i criteri di scelta tramite espressioni XPath (come si è potuto vedere anche nell’ esempio precedente), mentre il secondo si può realizzare usando una condizione (rappresentata dal cerchio). Ora si analizza il workflow di figura 5 descrivendo la funzione di ogni task ed analizzando i dati utilizzati. Le variabili di rete sono: peso, altezza, bmi, normale, 81 sovrappeso, obesità_tipo1, obesità_tipo2, obesità_tipo3, classificazione, consiglio, posologia_orlistat, posologia_sibutramine ed errore e sono tutte dichiarate locali. Anche in questo esempio, si è verificata la correttezza della rappresentazione eseguendo il workflow nel motore Yawl. Figura 4.5 – linea guida per il trattamento dell’ obesità Il task misura richiede all’ utente di immettere il peso e l’ altezza del paziente. Pertanto utilizza le variabili di output peso ed altezza (entrambe di tipo double); in questo modo, al tempo di esecuzione, il motore presenta una form che deve essere compilata con i dati richiesti (figura 6). Due semplici XQuery consentono ai parametri di output di trasferire i valori immessi dal medico dalle variabili di task alle corrispondenti variabili di rete. Una ulteriore XQuery è stata definita per assegnare alla variabile di rete bmi il valore ottenuto dividendo il peso per l’ altezza (in metri) al quadrato: {(/misura/peso_in_kg/text())div(/misura/altezza_in_metri/text()*/misura/altezza_in_met ri/text())}. 82 Figura 4.6 Il task possiede uno XOR-split che consente di valutare se, per errore, l’ altezza viene espressa in centimetri anziché in metri. Quindi, l’ espressione XPath relativa al ramo che conduce al task messaggio_di_errore è la seguente: (/trattamento_obesita/altezza_in_metri>2.5)='true'. Quest’ ultimo contiene, appunto, un messaggio di errore contenuto nella variabile di input errore (tipo string) e che ricorda all’ utente di inserire l’ altezza in metri (figura 7). Figura 4.7 Il task visualizza_BMI visualizza il valore calcolato di BMI (figura 8). Quindi utilizza la variabile di input bmi, il cui valore era stato calcolato precedentemente. Figura 4.8 In uscita da questo task, le espressioni XPath, associate ai vari rami che partono dallo XOR-split, consentono di decidere quale alternativa seguire fra quattro possibili, in funzione del valore di BMI: 83 1. Se BMI è minore di 25 kg/m2, il paziente ha un peso normale per la propria statura. Pertanto si passa al task peso_normale che segnala semplicemente all’ utente questo fatto prima di uscire dalla linea guida. Esso utilizza la variabile di input (tipo string) classificazione, a cui viene assegnata, tramite una XQuery, la stringa contenuta nella variabile di rete normale (“peso normale”). 2. Se BMI è compreso fra 25 e 30 kg/m2, si ha un paziente sovrappeso; mentre se BMI appartiene all’ intervallo 30-35 kg/m2, il paziente rientra nella categoria obeso di tipo 1. Entrambe queste situazioni sono gestite all’ interno dell’ unico task sovrappeso-obesitàI, che visualizza la classificazione del paziente (sovrappeso o obesità di tipo 1, appunto) ed il consiglio di somministrare una dieta e di intraprendere una qualche attività fisica (figura 9). Pertanto utilizza la variabile di input classificazione, a cui viene assegnata, tramite XQuery, la stringa contenuta nella variabile di rete sovrappeso o quella contenuta nella variabile di rete obesità_tipo1 a seconda del caso. La XQuery è: {if (/trattamento_obesita/bmi/text()<30) then (/trattamento_obesita/sovrappeso/text()) else (/trattamento_obesita/obesita_tipo1/text())}. Infine utilizza la variabile di input consiglio di tipo string che contiene la stringa “dieta ed attività fisica”. La situazione del paziente, non eccessivamente grave, non richiede alcun trattamento aggiuntivo, per cui dopo questo task la linea guida termina. Figura 4.9 3. Se BMI è compreso fra 35 e 40 kg/m2, il paziente ha una obesità di tipo 2 e si passa al task obesitàII. Questo si comporta come il precedente, ad 84 eccezion fatta per la stringa “obesità tipo 2” visualizzata per classificare il paziente. Invece il trattamento consigliato è lo stesso: dieta ed attività fisica. 4. Se BMI supera 40 kg/m2, il paziente ha una obesità di tipo 3. Il task obesitàIII, di nuovo visualizza la stringa “obesità tipo 3” per classificare il paziente e consiglia dieta ed attività fisica. Nei casi 3 e 4 il workflow continua presentando al medico la possibilità di decidere se uscire dalla linea guida (task fine), se iniziare un trattamento farmacologico (task trattamento_farmacologico?) o, solo nell’ ultimo caso, se effettuare un intervento (task intervento?). Ovviamente la scelta di una di queste soluzioni annulla le altre. Infine se si dovesse optare per la terapia farmacologica, si può decidere di prescrivere orlistat, scegliendo di eseguire il task orlistat o sibutramine, scegliendo, invece, il task sibutramine. Ognuno di questi task utilizza una variabile di output posologia_orlistat e posologia_sibutramine, rispettivamente, che è di tipo posologia, ovvero di un tipo generato dall’ utente utilizzando XSchema (figura 10). Figura 4.10 – definizione di un tipo di dati complesso tramite XSchema Quando viene eseguito uno dei due task, compare una form che il medico deve compilare indicando la quantità e la frequenza con cui il farmaco deve essere assunto e la durata del trattamento (figura 11). 85 Figura 4.11 86 87 Conclusioni Una linea guida contiene un insieme di raccomandazioni che devono essere seguite nella gestione di una classe di pazienti in modo da promuovere la migliore pratica clinica. Per questo, tali raccomandazioni devono essere basate sulle migliori evidenze disponibili, derivanti dalle ultime ricerche scientifiche. Esistono numerose linee guida, che riguardano i diversi campi di azione del servizio sanitario: la diagnosi, la prevenzione, il trattamento di una malattia, ecc. A volte una linea guida è molto semplice e coinvolge un singolo individuo: ad esempio, quella per il vaccino contro l’ influenza è rivolta al medico di medicina generale che deve decidere se un determinato paziente a rischio deve essere vaccinato. Altre volte, invece, una linea guida è molto più complessa, può essere costituita da un insieme di passi da eseguire nel tempo e coinvolgere più persone (cura primaria, cura secondaria, nurses, assistenti domiciliari, farmacisti, analisti e tecnici di laboratorio, ecc.) che devono collaborare nella gestione del paziente. Non basta produrre linee guida di qualità, è necessario anche diffonderle e far in modo che il comportamento clinico venga modificato secondo quanto in esse contenuto. Le tecnologie dell’ informazione e della comunicazione contribuiscono alla loro disseminazione: archivi elettronici accessibili tramite Internet forniscono le versioni sempre aggiornate e programmi di simulazione ne facilitano l’ apprendimento. Si è visto, però, che ciò non è sufficiente, in quanto si riscontrano delle difficoltà reali nel memorizzare le raccomandazioni in esse contenute e nell’ applicarle quando si presenta il caso specifico di un paziente. In questo senso un contributo notevole deriva dall’ uso di sistemi software come supporto nelle decisioni cliniche durante la cura di un determinato paziente, sulla base delle raccomandazioni contenute nelle linee guida. Sistemi di questo tipo ricevono come input i dati relativi al paziente trattato e forniscono all’ utente informazioni su ciò che la linea guida, di volta in volta, raccomanda di fare. 88 Sono stati condotti diversi studi che hanno affrontato le questioni di creare un linguaggio adatto a modellare le linee guida e di sviluppare un sistema capace di interpretarlo e di fornire un supporto decisionale nel trattamento di un determinato paziente. Tale sistema deve reperire i dati utili al fine di caratterizzare lo stato clinico del paziente e determinare, in base ad esso, le successive azioni e/o decisioni previste dalla linea guida. Questi dati possono essere richiesti all’ utente tramite una form o possono essere prelevati da un database locale che contiene il fascicolo personale del paziente o da sistemi software remoti che forniscono i risultati di esami di laboratorio, ecc. Pertanto è necessaria una integrazione fra questi sistemi ed uno scambio di dati. Spesso la cura di un paziente è un processo distribuito. Il trattamento del diabete mellito, ad esempio, richiede la collaborazione fra differenti figure professionali e strutture sanitarie: medici di medicina generale, centri specialistici, ospedali, dietologi, ecc. Quindi, è di fondamentale importanza la cooperazione e lo scambio di informazioni fra i vari attori coinvolti. Da questo punto di vista la tecnologia del workflow può essere di grande aiuto grazie alla sua capacità di coordinare la distribuzione dei compiti e delle informazioni necessarie alla loro esecuzione fra i vari partecipanti al processo. Rappresentando una linea guida come un workflow, la cui esecuzione viene gestita da un’ apposito software (il Workflow Management System), si ha il vantaggio di poter coordinare tutte le figure coinvolte nella cura del paziente e, contemporaneamente, di fornire un supporto automatizzato al workflow clinico. Il Workflow Management System è “capace di interpretare gli schemi, interagire con i partecipanti del workflow ed invocare l’uso di strumenti ed applicazioni automatizzate”. Quando, nell’ esempio riportato nel capitolo 4, il medico decide di trattare il paziente obeso con una determinata terapia farmacologica, il WfMS può consentire al medico di compilare la ricetta corrispondente invocando una applicazione ad hoc. Realizzando un sistema distribuito, diverse strutture sanitarie possono cooperare per realizzare un processo di cura integrato. Infatti quando nel follow up periodico di un paziente diabetico è prevista una visita specialistica (elettrocardiogramma o visita presso un centro di diabetologia), il WfMS comunica alla struttura interessata la 89 necessità di eseguire tale visita su quel paziente, ad esempio, inserendo il relativo work item nella sua work list. Un punto di debolezza del sistema workflow è la mancanza di flessibilità. Durante il trattamento di un paziente, possono verificarsi situazioni inaspettate o di emergenza che richiedono una deviazione da quanto stabilito dalla linea guida (ad esempio, l’ aggiunta o la soppressione di un task). L’ impossibilità di gestire tali situazioni determina l’ inutilità del sistema, quando si verificano casi di questo tipo. 90 91 Bibliografia Manuale metodologico. Come produrre, diffondere e aggiornare raccomandazioni per la pratica clinica. Disponibile al sito http://www.pnlg.it Mor Peleg, Samson Tu, ed altri. Comparing Computer-Interpretable Guideline Models: A Case-Study Approach. 2003. Tu SW, Musen MA. Modeling Data and Knowledge in the EON Guideline Architecture. 2000. Dimitrios Georgakopoulos, Mark Hornick, e Amit Sheth. An overview of workfow management: From process modelling to workfow automation infrastructure. 1995. W.M.P. van der Aalst e K.M. van Hee. Workflow Management: Models, methods and systems. 2000 Workflow Management Coalition. The Workflow Reference Model. 1995. Disponibile al sito www.wfmc.org Workflow Management Coalition. Terminology & Glossary. 1999. Disponibile al sito www.wfmc.org W.M.P. van der Aalst, A.H.M. ter Hofstede, B. Kiepuszewski, e A.P. Barros. Workflow patterns. 2003. W.M.P. van der Aalst e A.H.M. ter Hofstede. YAWL: Yet Another Workflow Language. 2005. Disponibile al sito www.yawl-system.com W.M.P. van der Aalst, L. Aldred, M. Dumas, e A.H.M. ter Hofstede. Design and implementation of the YAWL system. 2003. Disponibile al sito www.yawl-system.com Michael Adams, Arthur H. M. ter Hofstede, David Edmond e Wil M. P. van der Aalst. Worklets: A Service-Oriented Implementation of Dynamic Flexibility in Workflows. 2006. Disponibile al sito www.yawl-system.com 92