[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f1wkhgvow20wz5":3,"$f195bnucb8uunc":152},{"data":4},[5],{"id":6,"slug":7,"locale":8,"type":9,"title":10,"subtitle":11,"summary":12,"body":13,"primary_topic":14,"knowledge_status":15,"practical_validation":16,"workflow_status":17,"author_id":18,"published_at":19,"updated_at":19,"review_due_at":20,"canonical_url":21,"seo_title":10,"seo_description":12,"hero_asset_id":20,"reading_time":22,"version":23,"technology_versions":24,"review_frequency_days":25,"parent_content_id":26,"sort_in_parent":27,"hub_entry_status":28,"content_blocks":29,"hero_alt_text":21,"hero_caption":21,"hero_credit":21,"publication_scope":142,"access_level":143,"approved_at":144,"approved_by":145,"review_note":21,"home_enabled":146,"home_slot":147,"home_variant":148,"home_priority":149,"home_eyebrow":20,"home_valid_from":20,"home_valid_to":20,"home_image_asset_id":20,"promotion_kind":150,"sponsor_name":20,"sponsor_url":20,"sponsor_disclosure":151},"84f9988f-8cd7-4a9e-91e5-55c98ea43803","modernizzazione-legacy-sanitario-saga-process-manager","it","CAPSULE","Saga e Process Manager: coordinare workflow distribuiti senza transazione globale","Gestire processi lunghi tra più bounded context, con stato, timeout e compensazioni esplicite.","Saga e Process Manager coordinano processi che attraversano più servizi quando una singola transazione ACID non può coprire l'intero workflow.","Quando nasce il problema\nUn processo può attraversare più bounded context: accettazione, assegnazione letto, preparazione cartella, ordini iniziali, documentazione. Non è opportuno racchiudere tutto in una transazione distribuita che blocca database e servizi. Ogni contesto deve poter confermare localmente la propria operazione.\nSaga\nUna Saga è una sequenza di transazioni locali collegate. Se un passo successivo fallisce, si applicano azioni compensative dove il dominio lo consente. Una compensazione non è un rollback tecnico: è una nuova azione di business che porta il sistema in uno stato valido.\nProcess Manager\nIl Process Manager è un componente con stato che conosce l'avanzamento del processo e decide il prossimo comando in base agli eventi ricevuti. È utile quando il workflow ha timeout, ramificazioni, retry e più partecipanti.\nChoreography e orchestration\nChoreography: ogni servizio reagisce agli eventi e produce nuovi eventi. È semplice per flussi lineari ma può diventare difficile da comprendere quando aumentano i passaggi.\n\nOrchestration: un Process Manager invia comandi ai partecipanti e registra lo stato. Rende il flusso più visibile ma introduce un coordinatore da progettare come componente di processo, non come nuovo monolite di business logic.\n\nCompensazioni\nNon tutto è compensabile. Un documento firmato, una comunicazione già inviata o un evento clinico registrato possono richiedere rettifica o annullamento tracciato, non cancellazione. Il modello della Saga deve rispettare auditabilità e semantica del dominio.\nQuando NON usare una Saga\nUna singola transazione locale nel bounded context è sufficiente.\n\nIl flusso è una semplice fan-out di notifiche senza stato di processo.\n\nIl problema è solo affidabilità del publish: basta Outbox.\n\nSi sta usando la Saga per nascondere bounded context disegnati male e che dovrebbero condividere la stessa transazione.\n\nOsservabilità\nOgni istanza di processo dovrebbe avere processId\u002FcorrelationId, stato corrente, step completati, ultimo errore, retry count, deadline e audit trail. Senza questa visibilità, i workflow distribuiti diventano più difficili da operare del legacy che volevano sostituire.\n\nSaga è un pattern di consistenza di processo, non un sostituto del modello di dominio: va usato solo quando una business transaction attraversa davvero più boundary autonomi.","58ba728e-da9d-409d-a6c7-31325e3773a8","REVIEWED","NOT_PERFORMED","PUBLISHED","fbbfd4b6-f4c7-4740-94a6-f81eb8fbb1b2","2026-08-25T18:18:46.065Z",null,"",8,3,{},365,"776fc737-dda9-4c82-bd56-b6ba0b7148d6",14,"AVAILABLE",[30,138],{"id":31,"type":32,"version":33,"doc":34},"078f42a4-112c-5e00-b5af-4abf954160cd","rich_text",1,{"type":35,"content":36},"doc",[37,45,50,55,59,64,68,73,89,94,98,103,129,134],{"type":38,"attrs":39,"content":41},"heading",{"level":40},2,[42],{"type":43,"text":44},"text","Quando nasce il problema",{"type":46,"content":47},"paragraph",[48],{"type":43,"text":49},"Un processo può attraversare più bounded context: accettazione, assegnazione letto, preparazione cartella, ordini iniziali, documentazione. Non è opportuno racchiudere tutto in una transazione distribuita che blocca database e servizi. Ogni contesto deve poter confermare localmente la propria operazione.",{"type":38,"attrs":51,"content":52},{"level":40},[53],{"type":43,"text":54},"Saga",{"type":46,"content":56},[57],{"type":43,"text":58},"Una Saga è una sequenza di transazioni locali collegate. Se un passo successivo fallisce, si applicano azioni compensative dove il dominio lo consente. Una compensazione non è un rollback tecnico: è una nuova azione di business che porta il sistema in uno stato valido.",{"type":38,"attrs":60,"content":61},{"level":40},[62],{"type":43,"text":63},"Process Manager",{"type":46,"content":65},[66],{"type":43,"text":67},"Il Process Manager è un componente con stato che conosce l'avanzamento del processo e decide il prossimo comando in base agli eventi ricevuti. È utile quando il workflow ha timeout, ramificazioni, retry e più partecipanti.",{"type":38,"attrs":69,"content":70},{"level":40},[71],{"type":43,"text":72},"Choreography e orchestration",{"type":74,"content":75},"bulletList",[76,83],{"type":77,"content":78},"listItem",[79],{"type":46,"content":80},[81],{"type":43,"text":82},"Choreography: ogni servizio reagisce agli eventi e produce nuovi eventi. È semplice per flussi lineari ma può diventare difficile da comprendere quando aumentano i passaggi.",{"type":77,"content":84},[85],{"type":46,"content":86},[87],{"type":43,"text":88},"Orchestration: un Process Manager invia comandi ai partecipanti e registra lo stato. Rende il flusso più visibile ma introduce un coordinatore da progettare come componente di processo, non come nuovo monolite di business logic.",{"type":38,"attrs":90,"content":91},{"level":40},[92],{"type":43,"text":93},"Compensazioni",{"type":46,"content":95},[96],{"type":43,"text":97},"Non tutto è compensabile. Un documento firmato, una comunicazione già inviata o un evento clinico registrato possono richiedere rettifica o annullamento tracciato, non cancellazione. Il modello della Saga deve rispettare auditabilità e semantica del dominio.",{"type":38,"attrs":99,"content":100},{"level":40},[101],{"type":43,"text":102},"Quando NON usare una Saga",{"type":74,"content":104},[105,111,117,123],{"type":77,"content":106},[107],{"type":46,"content":108},[109],{"type":43,"text":110},"Una singola transazione locale nel bounded context è sufficiente.",{"type":77,"content":112},[113],{"type":46,"content":114},[115],{"type":43,"text":116},"Il flusso è una semplice fan-out di notifiche senza stato di processo.",{"type":77,"content":118},[119],{"type":46,"content":120},[121],{"type":43,"text":122},"Il problema è solo affidabilità del publish: basta Outbox.",{"type":77,"content":124},[125],{"type":46,"content":126},[127],{"type":43,"text":128},"Si sta usando la Saga per nascondere bounded context disegnati male e che dovrebbero condividere la stessa transazione.",{"type":38,"attrs":130,"content":131},{"level":40},[132],{"type":43,"text":133},"Osservabilità",{"type":46,"content":135},[136],{"type":43,"text":137},"Ogni istanza di processo dovrebbe avere processId\u002FcorrelationId, stato corrente, step completati, ultimo errore, retry count, deadline e audit trail. Senza questa visibilità, i workflow distribuiti diventano più difficili da operare del legacy che volevano sostituire.",{"id":139,"type":140,"version":33,"text":141},"a1032616-853c-508d-9e60-e60795b74f2f","callout","Saga è un pattern di consistenza di processo, non un sostituto del modello di dominio: va usato solo quando una business transaction attraversa davvero più boundary autonomi.","PORTAL","ANONYMOUS","2026-08-25T18:18:44.682Z","794a9185-136c-4415-ab23-cd144eb5870e",false,"LATEST","AUTO",0,"EDITORIAL","Sponsorizzato",{"sources":153,"secondaryTopics":154,"tags":155,"primaryTopic":156,"technologies":160},[],[],[],[157],{"id":14,"name":158,"slug":159},"Software Architecture","software-architecture",[]]