WorkFlow sistema di protocollazione

Il Protocol Proxy interagisce con la piattaforma in due fasi distinte ma complementari:

  • Abilitazione e configurazione del sistema di protocollazione

  • Protocollazione dei documenti

Fase 1 - abilitazione di un nuovo servizio di protocollazione per il servizio X(happy path)

In questa fase l'amministratore della piattaforma configura un servizio, decidendo quale sistema di protocollazione abilitare per la protocollazione dei relativi servizi.

Cliccando sul bottone "abilita" la piattaforma contatta il Protocol proxy relativo tramite chiamate REST API. Con la prima chiamata, la piattaforma richiede la configurazione del form schema che verrà presentato all'Amministratore. Attraverso tale form è possibile inserire le configurazioni relative al tenant e al servizio corrente. Tali configurazioni verranno inviate via REST HTTPS al Protocol Proxy che si occuperà della persistenza di tali configurazioni.

Una volta che tale processo si è concluso, il Protocol Proxy è in grado, sfruttando tali configurazioni, di interagire con il sistema di protocollazione esterno.

Le configurazioni di protocollazione possono essere create, modificate e disabilitate. Per questo motivo il Protocol Proxy deve esporre chiamate API CRUD (dettagliate nella pagina seguente).

Fase 2 - Protocollazione dei documenti (happy path)

Prima di eseguire qualsiasi operazione, il protocollo proxy deve verificare la versione dell'evento (event_version) ed elaborare esclusivamente la versione 2, per la quale è abilitato. La versione dell'evento da considerare deve essere un valore fissato nel codice. Tutti gli eventi con event_version != 2 devono essere ignorati.

In questo diagramma, viene descritto il workflow di una pratica(ma il processo è uguale per qualsiasi altro tipo di richiesta) presentata da un utente e presa in carico da un operatore(le altre casistiche descritte nella pagina "Architettura del sistema di protocollazione" seguono lo stesso processo).

Una volta che la pratica è stata presa in carico dell'operatore essa deve essere protocollata. La piattaforma produce un evento di tipo documento sul topic "documents". Il Protocol Proxy, consuma tale evento:

  • Per poter protocollare correttamente il documento, è fondamentale verificare l'esistenza delle configurazioni relative al tenant e al servizio pertinenti. Questa operazione può essere eseguita attraverso la verifica del campo "document.RemoteCollection.ID," che identifica il servizio, e "document.tenantId," che identifical'ID del tenant. Questi campi dovrebbero essere confrontati con gli ID delle configurazioni corrispondenti precedentemente salvate nello storage. Nel caso in cui tali configurazioni non siano disponibili, il documento dovrà essere semplicemente ignorato, procedendo all'evento successivo.

  • Una volta assicuratosi di dover protocollare il documento in esame, il Protocol Proxy deve verificare che il documento non sia già stato protocollato. Un evento è protocollato quando l'oggetto "document_number" è valorizzato con almeno il numero di protocollo. Nel caso il documento sia già stato protocollato, l'evento va semplicemente ignorato.

  • Una volta superate le precedenti verifiche, Protocol Proxy può interagire con il sistema di protocollazione esterno per la protocollazione del documento.

  • Se la protocollazione va a buon fine, il documento verrà modificato con i dati di protocollazione(vedi sezione successive) e quindi necessario aggiornare anche il campo "update_at" con il timestamp corrente (time.now()) in formato ISO 8601 (es: "2023-11-10T10:54:44+00:00")

  • Il Protocol Proxy produce un nuovo evento di tipo document sul topic "documents" con in aggiunta le informazioni di protocollazione(valorizzando l'oggetto "registration_info").

  • A questo punto la piattaforma, in ascolto sullo stesso topic, provvederà ad aggiornare il suo stato interno.

Altri campi da popolare quando si produce un evento

Quando viene generato un evento, il protocollo proxy deve assegnare i seguenti valori:

  • app_id:" <nome del servizio>:<versione corrente del servizio>. Es: "protocol-proxy-fake:1.1.1"

  • event_created_at: es: "2023-11-23T14:14:23+00:00"

  • event_id: stringa UUID autogenerata che identifica univocamente l'evento

Casi di errore - sistema di retry

In un sistema a eventi che utilizza il pattern event sourcing, è possibile che alcuni eventi non vengano processati correttamente a causa di errori temporanei come per esempio una comunicazione interrotta tra il Protocol Proxy e il sistema di protocollazione esterno. In questo caso basterebbe tentare nuovamente il consumo dello stesso evento più volte finché il problema non viene risolto.

La piattaforma offre questo tipo di possibilità attraverso l'implementazione di un meccanismo di retry che legge da un topic(retry_queue) specifico tutti gli eventi falliti e li reinserisce nei vari topic di origine in base a una politica di retry scelta a monte.

Il servizio che si occupa di questo meccanismo è in grado di gestire eventi eterogenei provenienti da diversi topic. Questo è possibile solo se il servizio è a conoscenza del topic di origine in cui reinserire gli eventi da processare nuovamente.

Per questo motivo, qualsiasi servizio si voglia avvalere del meccanismo di retry, deve modificare l'evento fallito inserendo il topic in cui si vuole che sia reinserito e poi produrre l'evento nel topic di retry impostato tramite variabile d'ambiente.

I metadati da inserire nell'evento sono nella seguente forma:

   "retry_meta":
   {
     "original_topic": "documents"
   }

Quando l'oggetto sarà reinserito nel topic "document" dal Retry Orchestrator, l'oggetto "retry_meta" avrà dei campi aggiuntivi utili per attuare la politica di retry. Tali campi, sono gestiti e utili unicamente al Retry Orchestrator. Il Protocol Proxy non si deve quindi preoccupare di tale oggetto una volta inserito l'oggetto "retry_meta" con il campo "original_topic" valorizzato una tantum.

Use case : protocollazione avvenuta a metà e deve essere ripresa da do dove è stata interrotta

Nel caso in cui la protocollazione richieda diversi step(come per esempio protocollazione del documento principale e a seguito la protocollazione dei vari allegati) e questa venga interrotta a metà, l'evento dovrà essere inserito nella coda di retry assime alle informazioni relative allo stato corrente in modo da riprendere la protocollazione da dove è stata interrotta.

In tale circostanza, è possibile inserire liberamente tutti i campi rilevanti per il monitoraggio dello stato all'interno dell'oggetto "retry_meta". Questa flessibilità consente di adattare i dati alle specifiche esigenze, garantendo un controllo accurato del processo di protocollazione e prevenendo duplicazioni delle operazioni.

La fascicolazione dei documenti protocollati

La Fascicolazione di un documento rappresenta l'attribuzione dello stesso ad una unità archivistica – “il fascicolo” - che raggruppa un insieme di documenti appartenenti al medesimo procedimento. Non tutti i sistemi di protocollazione offrono questa funzionalità. In questo caso la valorizzazione del campo "folder_number" deve essere discussa e definita a seconda dei casi.

Interazione Protocol Proxy<--> Piattaforma Opencity

Durante la fase di protocollazione, è possibile che il Protocol Proxy debba utilizzare le API della piattaforma per ottenere le informazioni necessarie per eseguire il processo di protocollazione. Un esempio pratico di ciò riguarda la protocollazione degli allegati. Il sistema di protocollazione richiede che il base64 del file allegato sia incluso nel payload della chiamata. Tuttavia, nel documento digitale sono presenti solo i link per scaricare i file. Pertanto, sarà compito del Protocol Proxy autenticarsi sulla piattaforma per recuperare il Token JWS e successivamente chiamare l'API specifica per ottenere il file necessario da cui calcolare il Base64.

Il token può essere recuperato con la seguente chiamata:

  • Username : admin

  • Password: admin

  • Basepath: estratto dal campo "Url" di ogni allegato

  • Endpoint : /lang/api/auth

  • method: POST

  • header Content-Type: application/json

  • payload : { "username": "admin", "password": "admin" }

  • Response: 200 -> {"token": "eyDIJeiojf...."}

  • Response: 401 -> { "code": 401, "message": "Credenziali non valide." }

  • Response 400 -> HTML body

Le API della piattaforma sono documentate al seguente link: https://servizi.comune-qa.bugliano.pi.it/lang/api/doc Calcolo del basepath per recuperare il token L'url per API auth deve essere estratta da campo url di ogni attachment: quindi dal seguente documento avremo una post auth all'endpoint https://servizi.comune-di-vicenza.it/lang/api/auth con credenziali fornite tramite variabili d'ambiente(utente e password). Mentre nel secondo caso avremo una post auth all'endpoint https://servizi.comune-di-bugliano.it/lang/api/auth con credenziali fornite tramite variabili d'ambiente(utente e password). NOTA BENE: nel seguente esempio abbiamo un array di attachments in cui due url appartengono a due comuni diversi. Questo nel mondo reale non può succedere. Il base url è lo stesso per tutto il documento(cioè un documento appartiene ad un solo comune). Sono stati utilizzati due comuni diversi allo scopo di sottolineare la parte di url che cambia nella costruzione dell'endpoint della API di autenticazione.

"attachments": [
	{
		"name": "dummy.pdf",
		"description": "Allegato - dummy.pdf",
		"mime_type": "application/pdf",
		"url": "https://servizi.comune-di-vicenza.it/lang/api/applications/1a30529e-9c41-4352-9198-1fac44c5e911/attachments/a4c81464-ee91-449a-b2a3-7010c59fdee7?version=1",
		"md5": "",
		"filename": "dummy.pdf"
	},
	{
		"name": "dummy2.pdf",
		"description": "Allegato - dummy2.pdf",
		"mime_type": "application/pdf",
		"url": "https://servizi.comune-di-bugliano.it/lang/api/applications/1a30529e-9c41-4352-9198-1fac44c5e911/attachments/d284be8a-2700-48a9-aa4b-fc0136674548?version=1",
		"md5": "",
		"filename": "dummy2.pdf"
	}
],

Interazione Protocol Proxy <--> Sistema di protocollazione esterno

Last updated

Logo

Documentazione Opencity Italia