Il portale per accedere alla PDND e
inviare messaggi tramite la App IO
Il progetto è sviluppato per guidare la digitalizzazione dell'Ente. Il portale funge da gateway unificato per l'interoperabilità dei dati tramite la PDND (Piattaforma Digitale Nazionale Dati) e la gestione delle comunicazioni verso il cittadino tramite App IO.
OpenMSP è un client backend sviluppato in Django, con interfaccia basata su Bootstrap Italia, che permette l'interoperabilità con la Piattaforma Digitale Nazionale Dati (PDND) e l'invio di messaggi ai cittadini tramite App IO.
- Interoperabilità PDND: Consultazione diretta delle API rese disponibili dai soggetti erogatori.
- Comunicazione Cittadino: Strumento per comunicare direttamente con il cittadino tramite App IO.
- Operazioni Massive: Supporto all'importazione di file XLSX/CSV per query e invii multipli, ottimizzando i flussi di lavoro.
OpenMSP orchestra le chiamate verso diversi endpoint della PDND per centralizzare le informazioni:
Consultazione e verifica dei domicili digitali con controlli formali sui Codici Fiscali e verifica minorenni.
- Soggetti: Persone fisiche (INAD), Imprese e professionisti (INI-PEC), Pubblica Amministrazione (IPA).
- Modalità: Ricerca singola o massiva (import da file XLSX/CSV) con stampa ed esportazione dei risultati.
Interrogazione dettagliata della banca dati nazionale:
- Generalità: Cognome, Nome, Sesso, Data/Luogo di nascita, Stato civile, C.I. e ID ANPR.
- Residenza: Indirizzo completo e data di decorrenza.
- Stato di Famiglia: Schede anagrafiche di tutti i componenti del nucleo familiare.
- Matrimonio: Stato matrimoniale, estremi atto ed eventuale annullamento/divorzio.
- Cittadinanza: Verifica della cittadinanza del soggetto.
- Esistenza in vita: Verifica dell'esistenza in vita del soggetto.
Restituzione di tutti i dati indicati nella visura camerale per soggetti iscritti:
- Dettagli sedi, legali rappresentanti, domicilio digitale, codici ATECO, iscrizioni ad albi, statuti, soci, capitale sociale, ecc.
Restituzione di tutti i dati indicanti la formazione dalla scuola primaria all'università:
- ANIS (Istruzione Superiore ed universitaria): Consultazione iscrizioni e titoli conseguiti presso Istituti di Formazione Superiore ed Universitari (modalità singola o massiva).
- ANIST (Istruzione di primo e secondo grado): Consultazione frequenza e titoli conseguiti presso Istituti di primo e secondo grado (modalità singola o massiva).
Nuove integrazioni disponibili dalla versione 1.3.0:
- INPS - ISEE: Richiesta attestazione ISEE per residenti.
- INPS - DURC: Consultazione DURC in corso di validità in modalità singola e massiva, con possibilità di acquisizione del file PDF.
- MIT (Trasporti): Consultazione patenti possedute e verifica contrassegni disabili/targhe (Piattaforma Unica Nazionale Informatica dei Contrassegni Unici).
- CNF (Forense): Verifica iscrizione di un soggetto all'albo degli avvocati.
Modulo completo per la gestione delle notifiche verso l'App dei servizi pubblici.
- Check Utente: Verifica se il CF è attivo su App IO e se il servizio dell'Ente è attivo (include check formale CF e maggiore età). Disponibile anche in modalità massiva.
- Invio Messaggi: Invio messaggi personalizzati attingendo dal catalogo servizi pagoPA (inclusi eventuali estremi di pagamento).
- Invio Massivo: Caricamento file XLSX/CSV per invii multipli con informazioni personalizzate per ogni cittadino.
- Invio Massivo tramite "Composer": Caricamento file XLSX/CSV per invii multipli con la possibilità di comporre il messaggio attraverso la funzione "Campi unione".
- Gestione Connettori: Configurazione parametri di interconnessione per le API attivate.
- Permessi Operatori: Gestione granulare delle abilitazioni per singolo operatore (permesso/diniego consultazione banche dati o invio messaggi).
- Python 3.12+
- Django 5.2+
- design-django-theme (Bootstrap Italia)
- Librerie crittografiche (per la firma dei voucher PDND)
- Accesso sviluppatore su Self Care PagoPA
-
Clona il repository:
git clone https://github.com/lsantalu/OpenMSP.git cd OpenMSP -
Crea un virtual environment e attivalo:
python -m venv env source env/bin/activate # Su Windows: env\Scripts\activate
-
Installa le dipendenze:
pip install -r requirements.txt
-
Copia il file
.env_examplein.enve configuralo:cp .env_example .env
-
Copia il database di esempio:
cp db_example.sqlite3 db.sqlite3
-
Esegui le migrazioni del database:
python manage.py migrate
-
Avvia il server di sviluppo:
python manage.py runserver
L'accesso al sito avviene su http://localhost:8000
- Utente: admin
- Password: Admin123+
Il progetto include configurazione Docker in docker/Dockerfile, docker/docker-compose.yml e docker/entrypoint.sh.
Avvio:
docker compose -f docker/docker-compose.yml up -d --buildDettagli principali:
container_name:openmsp_container- Porta esposta:
8000:8000 - Volume persistente:
sqlite_data:/app/db_data - Il file
.envviene reso persistente nel volume come/app/db_data/.env - Il database viene reso persistente nel volume come
/app/db_data/db.sqlite3
Comandi utili:
docker compose -f docker/docker-compose.yml logs -f
docker compose -f docker/docker-compose.yml downEsempio di 2 istanze separate (porte, container e volume persistente distinti):
# Istanza 1
CONTAINER_NAME=openmsp_1 HOST_PORT=8001 SQLITE_VOLUME_NAME=openmsp_1_sqlite_data \
docker compose -p openmsp1 -f docker/docker-compose.yml up -d --build
# Istanza 2
CONTAINER_NAME=openmsp_2 HOST_PORT=8002 SQLITE_VOLUME_NAME=openmsp_2_sqlite_data \
docker compose -p openmsp2 -f docker/docker-compose.yml up -d --buildCrea o aggiorna il file .env nella root del progetto con i parametri seguenti:
DJANGO_SECRET_KEY = 'my_password_django_complex6m^*)p!ryk)=xcpn9*rxpznm'
DEBUG = False
ALLOWED_HOSTS = '["your.domain.com"]'
DJANGO_BOOTSTRAP_ITALIA_USE_CDN = True
DJANGO_BOOTSTRAP_ITALIA_CDN = 'https://cdn.jsdelivr.net/npm/bootstrap-italia@2.17.0/dist'
EMAIL_HOST = 'mail.host.com'
EMAIL_PORT = 465
EMAIL_USE_SSL = True
EMAIL_USE_TLS = False
EMAIL_HOST_USER = 'noreply@host.com'
EMAIL_HOST_PASSWORD = 'my_password'
DEFAULT_FROM_EMAIL = 'noreply@host.com'
EMAIL_BACKUP_ADDRESS = 'info@host.com'
EMAIL_BACKUP_PASSWORD = 'my_backup_password'
EMAIL_BACKUP_ON = True
AUTH_2FA = True
TWO_FACTOR_ISSUER = 'OpenMSP'
AUTH_LDAP_SERVER_URI = 'ldap://example.com:389'
AUTH_LDAP_BIND_DN = 'cn=my_binding_username,ou=my_ou,dc=example.com'
AUTH_LDAP_BIND_PASSWORD = 'my_secret'
AUTH_LDAP_USER_SEARCH_BASEDN = 'ou=my_ou,dc=example.com'
### per OpenLDAP
AUTH_LDAP_USER_SEARCH_FILTER = '(uid=%(user)s)'
AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName","last_name": "sn","email": "mail",}
### per Active Directory
AUTH_LDAP_USER_SEARCH_FILTER = '(sAMAccountName=%(user)s)'
AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName","last_name": "sn","email": "userPrincipalName"}
AUTH_LDAP_NO_NEW_USERS = True
AUTH_LDAP_CONNECTION_OPTIONS = {"OPT_PROTOCOL_VERSION": 3, "OPT_REFERRALS": 0}
### Opzioni globali ldap_set_option(), servono ad esempio per la verifica TLS su LDAPS
AUTH_LDAP_GLOBAL_OPTIONS = {}Se il login via LDAPS fallisce con certificate verify failed, indica in AUTH_LDAP_GLOBAL_OPTIONS il file della CA che firma il certificato LDAP ({"OPT_X_TLS_CACERTFILE": "/app/ca/ca-ente.pem"}, con il file montato nel container) invece di disattivare la verifica ({"OPT_X_TLS_REQUIRE_CERT": 0}, ammissibile solo in staging o rete interna controllata).
Nota: usa una sola coppia AUTH_LDAP_USER_SEARCH_FILTER e AUTH_LDAP_USER_ATTR_MAP in base al tuo provider LDAP (OpenLDAP o Active Directory).
Per aggiornare la struttura del database e, quando previsto, il file .env tra le diverse versioni, utilizza gli script presenti nella directory update/. Gli script sono progettati per essere eseguiti in modo incrementale.
Se desideri aggiornare alla versione più recente (es. 1.3), puoi eseguire direttamente l'ultimo script disponibile. Se il database è fermo a più versioni precedenti, lo script rileverà automaticamente la situazione e invocherà i passaggi intermedi necessari.
Esempio: eseguendo update_to_1.3.sh su un database 1.1.0, verrà automaticamente chiamato prima update_to_1.2.sh.
update/update_to_1.1.sh: Aggiornamento alla versione 1.1.0.update/update_to_1.2.sh: Aggiornamento alla versione 1.2.0 (include logica incrementale).update/update_to_1.3.sh: Aggiornamento alla versione 1.3.0 (include logica incrementale).
Uso (non interattivo):
./update/update_to_1.3.sh [path/to/db.sqlite3] [path/to/.env]Uso (interattivo):
chmod +x update/update_to_1.3.sh
./update/update_to_1.3.sh- Verifica Versione: Ogni script verifica la versione attuale del DB prima di procedere.
- Backup Automatico: Viene creato un backup
.bakdel database prima di ogni modifica; il backup del file.envdipende dallo script eseguito e dalle sincronizzazioni previste per quella versione. - Migrazioni Django: Gli script eseguono automaticamente
makemigrationsemigrateal termine della procedura. - Sincronizzazione Parametri: Alcuni script sincronizzano parametri applicativi e variabili
.envse previsti per quella versione.
Questo progetto utilizza librerie e componenti di terze parti. Di seguito l'elenco delle licenze per i pacchetti presenti in requirements.txt:
- apscheduler
- django-compressor
- django-extensions
- django-sass-processor
- gunicorn
- libsass
- markdown-it-py
- openpyxl
- python-decouple
- python-jose
- PyJWT
- pytz
- pyzipper
- whitenoise
- xmltodict
- cryptography (o BSD)
- pyOpenSSL
- requests
- html2text: GPLv3
- Pillow: HPND (Historical Permission Notice and Disclaimer)
- typing-extensions: PSF (Python Software Foundation License)
Tutti i marchi riportati appartengono ai legittimi proprietari; marchi di terzi, nomi di prodotti, nomi commerciali, nomi corporativi e società citati possono essere marchi di proprietà dei rispettivi titolari o marchi registrati di altre società e sono stati utilizzati a puro scopo esplicativo per favorire l’integrazione, senza alcun fine di violazione dei diritti di Copyright vigenti.
Sviluppato da OpenCED di Santalucia Luca - openced.it.
