Il portale PEM-DASI è stato realizzato per digitalizzare e gestire a distanza la fase di presentazioni degli Atti di iniziativa dei consiglieri regionali ed automatizzare alcune fasi del loro iter. Il suo sviluppo è stato inizialmente studiato per digitalizzare la presentazione degli emendamenti/subemendamenti ai progetti di legge (modulo PEM) e, a seguito del riscontro positivo da parte degli utilizzatori, è stato esteso alla presentazione degli atti di indirizzo e sindacato ispettivo, realizzando il modulo DASI.
Il modulo DASI e il modulo PEM sono ospitati nella medesima piattaforma, ci sarà quindi un doppio canale di accesso:
un canale per la presentazione degli Emendamenti ai progetti di legge, nell’ambiente quindi legato a una specifica seduta e attivato in concomitanza della stessa;
un canale per la presentazione degli ATTI di indirizzo e sindacato ispettivo, non necessariamente legato a una specifica seduta del Consiglio.
Va puntualizzato che, per i due canali di accesso, la categoria di utenti non è coincidente: gli assessori, in quanto non sono consiglieri o sono sospesi dalla carica, non accederanno al canale DASI.
Gli emendamenti sono proposte di modifica riferite ad uno specifico punto di un progetto di legge (titolo, articolo, comma, allegato, ecc.) prima che questo venga votato dall’assemblea legislativa regionale. I subemendamenti sono invece proposte di modifica riferite ad un emendamento precedentemente presentato. Il Portale PEM aiuta a de-materializzare e informatizzare le procedure del Consiglio Regionale per la presentazione di emendamenti/subemendamenti (EM/SUBEM).
Gli atti di indirizzo e di sindacato ispettivo sono atti, tipici della tradizione parlamentare, attraverso i quali il Consiglio esercita la funzione di controllo sull’esecutivo e concorre alla determinazione dell’indirizzo politico (articolo 14, comma 1, dello Statuto d’autonomia).
Gli strumenti di indirizzo politico, denominati ATTI DI INDIRIZZO, previsti dal Regolamento generale sono mozioni, ordini del giorno e risoluzioni:
La funzione di controllo invece, come definita a livello parlamentare, si estrinseca (anche) nell’attività di sindacato ispettivo (ATTI DI SINDACATO ISPETTIVO), e viene tradizionalmente esercitata attraverso gli strumenti tipici dell’interpellanza (ITL), dell’interrogazione (ITR) e dell’interrogazione a risposta immediata (IQT).
Questo repository contiene il codice sorgente e la documentazione del portale PEM-DASI. L'obiettivo del Portale è di informatizzare e rendere più efficiente e funzionale la procedura di deposito (numerazione e marcatura temporale) degli emendamenti ai progetti di legge e degli atti di indirizzo e di sindacato ispettivo, con un’applicazione multiutente con livelli di informatizzazione e automazione più o meno ampi, a seconda delle varie fasi del processo. L'applicazione, unica, è stata divisa a livello funzionale in due moduli denominati modulo PEM e modulo DASI.
Il Modulo PEM permette di:
Il Modulo DASI permette di:
Maggiori dettagli sulle funzionalità possono essere lette nella documentazione per l’utente finale:
All'interno della release, oltre al presente file README.md e al file di licenza LICENSE.md, sono presenti le seguenti cartelle:
Database: struttura di configurazione del database e sua documentazione
Documentazione: documentazione varia sull'installazione e sull'utilizzo del Portale PEM-DASI
Sorgenti API: sorgenti dei moduli API utilizzati dal Portale PEM-DASI
Sorgenti Client: sorgenti della parte client del Portale PEM-DASI
Sorgenti modulo di stampa asincrona: Sorgenti del modulo di stampa asincrona degli Emendamenti in formato pdf
Il repository corrente ha 3 branches:
Branch master: contiene il codice e la documentazione di PEM-DASI nella versione attuale e su cui verranno effettuati gli aggiornamenti e le ulteriori modifiche evolutive
Branch v2.2-beta: contiene il codice e la documentazione di PEM-DASI in versione 2.2 ovvero il modulo PEM con le ultime modifiche evolutive e il modulo DASI per la digitalizzazione della presentazione degli atti di sindacato ispettivo e d'indirizzo
Branch v2.0-stable: contiene il codice e la documentazione della versione PEM 2.0 ovvero il modulo PEM per la digitalizzazione della presentazione degli emendamenti senza le ultime modifiche evolutive effettuate
La versione pubblicata del software PEM-DASI è l’evoluzione di una prima versione di PEM (PEM v 1.0), sviluppata con tecnologia Microsoft ASP.net su Framework .NET 4.5. La nuova versione (PEM 2.0) è stata realizzata con l’obiettivo di migliorare e superare alcuni limiti del vecchio portale offrendo i seguenti vantaggi:
La nuova versione (PEM 2.0) è stata sviluppata utilizzando la tecnologia Microsoft MVC (model view controller) utilizzando C# come linguaggio di programmazione e il Framework .NET 4.7.2.
Successivamente la piattaforma PEM v2.0, utilizzata per digitalizzare gli emendamenti/subemendamenti ai progetti di legge, è stata estesa per la digitalizzazione degli altri atti tipici delle assemblee regionali sviluppando il modulo DASI per la Digitalizzazione Atti di Sindacato ispettivo e d'Indirizzo PEM-DASI v2.2
Il portale PEM-DASI è stato progettato e sviluppato in modo da separare in maniera netta la parte server da quella client e allo stesso tempo fornire intefacce progrmmabili (API) di tipo web che possono essere richiamate ed utilizzate per altri scopi da altre applicazioni.
Le componenti principale del sistema risultano essere quelle in figura e descritte di seguito:
NOTA: Il progetto in produzione presso il Consiglio regionale della Lombardia utilizza un ulteriore webservices per la pubblicazione dei dai dati relativi agli emendamenti sul dataset dedicato all’interno del portale www.dati.lombardia.it. Questa funzionzionalità non è attiva nel sorgente pubblicato e tutte le chiamate al webservices sono state disabilitate attraverso l’impostazione della chiave presente nel web.config (AbilitaOpenData = 0)
Come accennato il modulo API è la parte core della soluzione PEM-DASI e contiene tutta la logica applicativa e di interfacciamento alla base dati. L’API dialoga pertanto sia con il modulo client, per l’invio di tutte le informazioni necessarie alla creazione delle pagine web finali, sia con il DBMS per la lettura e la memorizzazione dei dati. Per l’interfacciamento con il database è stato sviluppato un layer con EntityFramework 6. Questo agevola l’utilizzo anche di altri provider nel caso non si voglia usare Microsoft SQL server. Per tutti i database supportati fare riferimento alla guida Panoramica di Entity Framework 6 - EF6 | Microsoft Docs
Le richieste all’API vengono soddisfatte solo se il richiedente risulta correttamente autenticato ed autorizzato ad accedere alla risorsa/funzionalità richiesta. Per l’autenticazione, l’API fornisce un endpoint (di tipo allow-anonimous) che permette il riconoscimento tramite username e password. In caso di corretta autenticazione viene fornito un token (JWT) che dovrà essere utilizzato per tutte le successive richieste all’API. Il token è una stringa crittografata di caratteri con una scadenza configurabile e contiene i dati dell’utente (ruoli e gruppi di appartenenza). Per informazioni più dettagliate su JWT token si può consultare la seguente guida: JSON Web Tokens - jwt.io
Per evitare il proliferare di utenze e password, in Consiglio regionale della Lombardia, si è scelto di utilizzare, come primo livello di accesso al portale, gli stessi user name e password utilizzati per l’accesso al dominio di rete interna. Per effettuare l’autenticazione viene utilizzato un webservice soap che si interfaccia con il repository delle utenze di rete.
Per rendere il portale PEM-DASI immediatamente riusabile, è possibile utilizzare delle credenziali (username e password) memorizzate sul database interno di PEM-DASI. Per attivare questo tipo di autenticazione è necessario impostare la chiave AutenticazioneAD = 0 nel web.config dell’applicazione.
Il modulo API è stato sviluppato secondo una logica di sotto-progetti per separare logicamente le diverse tipologie di operazioni. Tale scelta è stata effettuata seguendo la logica del riuso in modo da consentire la sostituzione/rielaborazione di una singola componente facilitando l’integrazione con le tecnologie in uso presso le diverse amministrazioni. I sotto-progetti realizzati sono i seguenti:
La soluzione del progetto in Visual Studio risulta quella in figura:
Il sotto-progetto API costituisce la parte principale della parte API in quanto contiene e rende disponibili tutte le funzioni necessarie per gestire i vari oggetti del progetto. Secondo la logica MVC sono stati sviluppati i seguenti controller:
La parte API di PEM-DASI è stata realizzata utilizzando librerie opensource in modo da rendere tutta l'applicazione priva di strumenti coperti da licenze proprietarie e quindi con codice sorgente non modificabile. Per quanto riguarda la stampa in PDF degli Atti di Sindacato ispettivo e d'Indirizzo (Modulo DASI), per migliorare le performance, la qualità dell'output e soprattutto gestire le criticità dovute all'inserimento di testi complessi effettuando il "copia/incolla" da documenti Microsoft Word, la libreria opensource ITextSharp è stata sostituita con libreria a pagamento IronPDF (vedere il paragrafo "Licenze dei componenti di terze parti" per costi e maggiori informazioni).
Nel progetto è comunque disponibile la libreria opensource ITextSharp, ancora utilizzata per la stampa degli emendamenti, e il codice per generare le stampe pdf utilizzando questa libreria, mettendo così a disposizione una versione completamente opensource e gratuita di PEM/DASI (il codice è tenuto aggiornato e compatibile con la libreria ITextSharp fino alla versione corrente della piattaforma - ver 2.2 - nelle versioni successive non si garantisce lo sviluppo di codice che utilizza ITextSharp)
Il modulo client si occupa si generare le pagine web finali composte da html e librerie javscript e css. Le pagine vengono inviate ai web-browser per la visualizzazione. Il modulo CLIENT dialoga con il modulo API per la creazione delle pagine e la gestione dei diversi comandi e funzionalità del portale PEM-DASI. Come detto tutta la logica applicativa, la gestione dei permessi e l’interfacciamento con il database viene effettuato dal modulo API. Questo tipo di struttura separa in maniera netta l’interfaccia utente dalle logiche di business consentendo un’agevole sostituzione della parte client, ad esempio con un’App per dispositivi mobili Apple o Android.
Così come effettuato per il modulo API anche il modulo CLIENT è stato sviluppato secondo una logica di sotto-progetti per separare logicamente le diverse tipologie di operazioni per agevolare il riuso dell’applicazione permettendo la sostituzione/rielaborazione di singole componenti. I sotto-progetti realizzati nel modulo CLIENT sono i seguenti:
La soluzione del progetto in Visual Studio risulta quella in figura:
Il sotto-progetto Client costituisce la parte principale della parte CLIENT. Secondo la logica MVC sono stati sviluppati i seguenti controller:
La parte di interfaccia utente di PEM-DASI è stata realizzata utilizzando le tecnologie attualmente più evolute che consentono la visualizzazione responsive dell’applicazione. Particolare attenzione è stata dedicata alla scelta di librerie opensource in modo da rendere tutta l'applicazione priva di strumenti coperti da licenze proprietarie e quindi con codice sorgente non modificabile. In quest'ottica si può affermare che la piattaforma PEM-DASI è pianmente in linea con la logica del riuso e consente la più ampia possibilità di personalizzazione. In particolare, sono stati utilizzati:
Per rendere il portale PEM-DASI adattabile ad esigenze di layout differenti e personalizzabili, la visualizzazione e la stampa degli atti e dei fascicoli è stata sviluppata utilizzando dei templates html. Attraverso questi templates, contenuti nella cartella Template nel progetto API, è possibile personalizzare il layout degli emendamenti, degli atti e dei fascicoli sia nella versione html (per visualizzazione a video e per invio tramite email) sia nella versione pdf.
Come detto precedentemente, per una questione di performance, le stampe in pdf vengono generalmente effettuate in modalità asincrona. Per tala gestione è stato sviluppato un servizio windows (GAMScheduler), un programma di interfaccia (Scheduer) che permette la configurazione di tale servizio e un job di stampa che si occupa di generare e inviare via email, le stampe pdf.
Servizio sviluppato in C# utilizzando la libreria Quartz.NET (Quartz.NET (quartz-scheduler.net)) Il servizio legge le configurazioni dallo schedulatore, carica tramite reflection la dll del job e la schedula passandogli i parametri letti sempre da configurazione nello scheduler. Tutta la documentazione relativa alla libreria Quarts.NET è reperibile nel sito ufficiale Quartz.NET Quick Start Guide | Quartz.NET (quartz-scheduler.net)
Programma windows form sviluppato in C# che gestisce il servizio di windows GAMScheduler, la schedulazione e la configurazione dei job. La schedulazione del job viene gestita tramite cronExpression (triggers_config.json). La configurazione viene gestita tramite file jobs_config.json.
E’ un estensione dell’interfaccia IJob ereditata da Quartz ed esegue queste lavorazioni:
La soluzione del progetto in Visual Studio risulta quella in figura:
Il codice sorgente pubblicato è relativo alla piattaforma PEM-DASI nella release 2.2, che integra il modulo PEM e il modulo DASI ed è l'evoluzione di una prima versione di PEM sviluppata in asp.net. La versione 2.0 separa la parte client dell’applicazione da quella server attraverso lo sviluppo di API dedicate e introduce miglioramenti nelle performance e nella gestione delle stampe pdf. L’introduzione delle API per la gestione dei dati e delle elaborazioni principali facilita lo sviluppo di App per dispositivi mobili (Apple e Android).
La piattaforma PEM/DASI è stata realizzata con librerie opensource gratuite e tutte le sue funzionalità sono state sviluppate utilizzando queste librerie. Per quanto riguarda la stampa in PDF degli Atti di Sindacato ispettivo e d'Indirizzo (Modulo DASI), per migliorare le performance, la qualità dell'output e soprattutto gestire le criticità dovute all'inserimento di testi effettuando il "copia/incolla" da documenti Microsoft Word, è stata aggiunta ed è utilizzata dal Consiglio regionale della lombardia la libreria a pagamento IronPDF (vedere il paragrafo "Licenze dei componenti di terze parti" per costi e maggiori informazioni).
Nel progetto è comunque disponibile la libreria opensource ITextSharp e tutto il codice per generare le stampe pdf degli atti utilizzando questa libreria, mettendo così a disposizione una versione completamente opensource e gratuita di PEM/DASI (il codice è tenuto aggiornato e compatibile con la libreria ITextSharp fino alla versione corrente della piattaforma - ver 2.2 - nelle versioni successive non si garantisce lo sviluppo di codice che utilizza ITextSharp)
NOTA: Io modulo DASI è attualmente in fase di test e viene rilasciato in versione beta.
Specifiche tecniche server:
Specifiche tecniche client:
L'installazione prevede la creazione del database tramite lo script fornito; la compilazione dei sorgenti Client e Api; la creazione di due application su IIS, una per la Api e una per il Client; la configurazione dei file web.config, sia dell'Api sia del Client, impostando i parametri di configurazione del proprio ambiente. Al termine, la compilazione, l'installazione e la schedulazione del modulo di stampa asincrona.
Per la procedura completa di installazione fare riferimento alla documentazione specifica:
Portale PEM-DASI - Presentazione EMendamenti e Digitalizzazione Atti di Sindacato ispettivo e d'Indirizzo 2020-2022 (c) Consiglio Regionale dell Lombardia
Concesso in licenza GNU Affero General Public Licence version 3 (SPDX: AGPL-3.0)
All'interno del codice del Portale PEM-DASI sono stati utilizzati i seguenti componenti di terze parti, nell'ambito delle relative licenze qui indicate:
Log4net https://github.com/apache/logging-log4net con licenza Apache-2.0 License
ITextSharp https://github.com/itext/itextsharp con licenza GNU Affero General Public License version 3
Trumbowyg https://github.com/Alex-D/Trumbowyg con licenza MIT License
Materialize https://github.com/Dogfalo/materialize/tree/master con licenza MIT License
Quartz.NET (quartz-scheduler.net) https://www.quartz-scheduler.net/ con licenza Apache 2.0 License
ExpressionBuilder (dbelmont/ExpressionBuilder) https://github.com/dbelmont/ExpressionBuilder con licenza Apache 2.0 License
Newtonsoft.json - MIT License https://www.nuget.org/packages/Newtonsoft.Json con licenza MIT License
AutoMapper https://www.nuget.org/packages/AutoMapper/ con licenza MIT License
NPOI https://www.nuget.org/packages/NPOI/ con licenza Apache 2.0 License
La licenza per questo repository è GNU Affero General Public Licence version 3 (SPDX: AGPL-3.0). Non è possibile utilizzare l'opera salvo nel rispetto della Licenza.
È possibile ottenere una copia della Licenza al seguente indirizzo: https://opensource.org/licenses/AGPL-3.0
Salvo diversamente indicato dalla legge applicabile o concordato per iscritto, il software distribuito secondo i termini della Licenza è distribuito "TAL QUALE", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o implicite.
Si veda la Licenza per la lingua specifica che disciplina le autorizzazioni e le limitazioni secondo i termini della Licenza.
Si veda il file LICENSE.md all'interno del repository per i riferimenti completi.
Il logo della Regione Lombardia è di proprietà esclusiva di Regione Lombardia e per tanto non è rilasciato sotto licenza aperta.