La rete dell'interoperabilità italiana, resa navigabile.
Visualizzazione interattiva del grafo degli e-service sulla Piattaforma Digitale Nazionale Dati.
I nodi sono gli enti, gli archi le relazioni erogatore→fruitore, lo spessore il numero di servizi condivisi.
Applicazione pubblica su pdndgraph.it, senza installazione né autenticazione.
51 nodi (50 enti individuali + 1 aggregato) · 86 tipi di e-service · 343 archi · densità 0,1345 · copertura ~89% del catalogo
I nodi sono una selezione editoriale, non l'intero insieme degli enti aderenti. Vedi Cosa rappresentano i 51 nodi.
Important
La PDND è un ecosistema dinamico. Enti aderenti, e-service pubblicati, e connessioni attive cambiano di continuo. Questo grafo è una fotografia datata, non uno specchio in tempo reale della piattaforma.
| Riferimento | |
|---|---|
| Snapshot del grafo pubblicato | 2 maggio 2026 |
| Ultima esecuzione della pipeline | 19 giugno 2026, anteprima non promossa |
| Numeri PDND in tempo reale | interop.pagopa.it/numeri |
| Catalogo ufficiale e-service | api.gov.it |
Per l'ordine di grandezza dello scarto: lo snapshot di maggio registra 14.102 API pubblicate, mentre il download della pipeline del 19 giugno riporta 15.011 righe di catalogo. Chi cita numeri tratti da questo progetto dovrebbe indicare sempre la data dello snapshot. Confronto aggiornato con npm run compare-catalog.
Capire · Perché questo progetto · Stato dei dati · Il modello in numeri · Perché un grafo · Cosa emerge dal grafo
Fidarsi · Fonti e trasparenza metodologica · Pubblicazione di riferimento · Come citare
Usare · Funzionalità · Quick Start · Struttura del progetto · Tecnologie
Estendere · Pipeline di aggiornamento · Come aggiornare i dati · Contribuire · Licenza
La PDND è il pilastro dell'interoperabilità tra le Pubbliche Amministrazioni italiane: consente lo scambio sicuro e standardizzato di dati tramite API, realizzando concretamente il principio once-only, la PA non chiede a cittadini e imprese dati che già possiede.
L'ecosistema è vasto e in rapida crescita. Lo snapshot del catalogo ufficiale registrato in questo repository (maggio 2026) conta 14.102 API pubblicate, 366 sospese, e 6.388 producer distinti. I numeri aggiornati in tempo reale sono pubblicati da PagoPA su interop.pagopa.it/numeri, e il catalogo pubblico degli e-service è consultabile su api.gov.it.
Questa scala rende difficile avere una visione d'insieme: chi eroga quali servizi? Chi li fruisce? Quanto è interconnessa la rete dell'interoperabilità italiana?
Il progetto nasce per rendere visibile e navigabile quella rete. L'obiettivo è offrire una mappa interattiva che permetta a chiunque, funzionari pubblici, sviluppatori, ricercatori, cittadini, di esplorare le connessioni tra gli enti e comprendere come i dati fluiscono attraverso la Pubblica Amministrazione.
Nei fatti, i dataset open data della PDND pubblicano il catalogo degli e-service e il numero aggregato delle connessioni, ma non le coppie puntuali erogatore–fruitore. Le relazioni rappresentate in questo grafo sono state ricostruite da documentazione ufficiale pubblica (circolari, manuali operativi, presentazioni istituzionali) e dal campo attributes del catalogo. Questo progetto vuole anche essere uno stimolo affinché quei dati diventino un giorno completamente aperti.
La PDND non è un archivio statico. Il catalogo cresce con l'adesione di nuovi enti e con la pubblicazione di nuovi e-service, gli stati passano da Attivo a Sospeso e viceversa, e le versioni delle API si succedono. Ogni rappresentazione del grafo è quindi valida rispetto a un istante preciso, e va letta con la sua data accanto.
Il progetto mantiene due livelli distinti, per separare l'automazione dal dato pubblicato.
| Livello | File | Aggiornato al | Contenuto |
|---|---|---|---|
| Grafo live (curato) | src/data/pdnd-data.json |
2 maggio 2026 | 51 nodi, 86 tipi di e-service, 343 archi |
| Anteprima (automatica) | pipeline/pdnd-data.preview.json |
19 giugno 2026 | 54 enti, 218 e-service, non promossa |
L'anteprima viene rigenerata dalla pipeline mensile ma non sostituisce il grafo live: la promozione è un atto manuale, deliberato, che segue l'ispezione del report di esecuzione. Questa separazione evita che un cambiamento automatico del catalogo cancelli relazioni ricostruite e documentate a mano.
npm run compare-catalog # copertura e gap del modello rispetto al catalogo vivo
cat pipeline/last-run-report.md # report dell'ultima esecuzione della pipelineIl report di esecuzione riporta la data, il numero di righe scaricate dal catalogo, i nuovi e-service, quelli rimossi, e la ripartizione degli archi per provenienza (documentata, certificata, inferita).
I numeri riportati in questo README e nel report Zenodo si riferiscono allo snapshot di maggio 2026. Non vanno presentati come lo stato corrente della PDND. Per i valori aggiornati in tempo reale, la fonte autoritativa è interop.pagopa.it/numeri.
Valori calcolati su src/data/pdnd-data.json allo snapshot del 2 maggio 2026, riproducibili con npm run audit.
| Metrica | Valore |
|---|---|
| Nodi nel grafo | 51 (50 individuali + 1 aggregato) |
| Tipi di e-service | 86 |
| Archi distinti erogatore→fruitore | 343 |
| Relazioni erogatore–fruitore totali | 570 |
| Densità del grafo | 0,1345 |
| Copertura del catalogo ufficiale | ~89% di 14.102 endpoint |
| Snapshot del catalogo | maggio 2026 |
Composizione dei nodi per ruolo: 31 Erogatore/Fruitore, 17 Erogatore, 3 Fruitore.
Composizione per categoria: 21 Regione, 7 Ministero, 6 Comune, 3 Fisco, 2 Digitale, 2 Trasporti, 2 Tecnologia, 2 Statistica, 1 Previdenza, 1 Lavoro, 1 Imprese, 1 Anticorruzione, 1 Cultura, 1 Comuni Aggregati.
Important
51 non è il numero degli enti aderenti alla PDND. È il numero dei nodi di un modello che aggrega e seleziona deliberatamente. Leggere 51 come "51 enti su migliaia" è un fraintendimento del modello.
I 51 nodi si compongono così:
| Cosa contiene | |
|---|---|
| 50 nodi individuali | Enti rappresentati uno a uno: ministeri, enti previdenziali e fiscali, autorità, 21 Regioni, e 6 grandi Comuni |
1 nodo aggregato (comuni_agg) |
Circa 7.500 Comuni aderenti, compressi in un solo nodo perché erogano gli stessi servizi standard replicati |
Due scelte editoriali determinano questo insieme.
Aggregazione. La maggior parte degli endpoint del catalogo sono servizi comunali standard replicati da ogni Comune: Albo Pretorio, SUAP, Protocollo, Demografici, Tributi, Civici, WaaS, IoT, Trasparenza. Rappresentarli uno per uno produrrebbe migliaia di nodi quasi identici e un grafo illeggibile, senza aggiungere informazione sulla struttura della rete. I 9 e-service attribuiti al nodo aggregato corrispondono a circa 6.380 endpoint reali del catalogo.
Selezione. Lo snapshot del catalogo conta 6.388 producer distinti. Il modello ne rappresenta individualmente 50, scelti per rilevanza nella rete: gli hub erogatori nazionali, gli enti con ruolo strutturale nei domini funzionali della PA, le Regioni che superano i 25 endpoint a catalogo, e i Comuni che erogano servizi propri e non solo repliche standard. Bologna, Genova, e Padova compaiono come erogatori di servizi specifici; Milano, Roma, e Napoli come fruitori.
La conseguenza pratica riguarda l'interpretazione delle metriche. Grado, centralità, e densità sono calcolati su questo insieme selezionato, non sull'universo degli aderenti. Un grado in uscita di 34 significa "eroga verso 34 dei 50 altri nodi del modello", dove uno di quei nodi ne rappresenta a sua volta migliaia. Sono indicatori della struttura della rete rappresentata, non censimenti dell'ecosistema. I criteri completi sono in METODOLOGIA.md §3.1 e §3.2.
Note
Analogamente, ogni record in eservices rappresenta un tipo di servizio, non un singolo endpoint del catalogo PDND. Vedi METODOLOGIA.md §3.5.
L'interoperabilità è, nella sua essenza, un problema di rete: soggetti che producono dati e soggetti che li consumano, collegati da accordi e interfacce digitali. Un elenco tabulare risponde alla domanda "quali servizi esistono". Un grafo risponde a "che forma ha la rete che ne risulta", che è la domanda interessante.
Il modello è un grafo diretto pesato: i nodi sono gli enti, un arco da A a B indica che A eroga almeno un e-service fruito da B, e il peso conta i servizi condivisi sulla coppia. La direzione conta, perché la relazione non è simmetrica: il fatto che INPS eroghi verso i Comuni non implica il contrario.
La visualizzazione usa un layout force-directed (Fruchterman-Reingold), che dispone i nodi come un sistema di molle e repulsioni fino all'equilibrio: la topologia emerge da sola, senza posizionamento manuale. Le formule di grado, centralità, e densità sono in METODOLOGIA.md.
Alcune proprietà della rete diventano leggibili a colpo d'occhio. I valori seguenti sono calcolati sullo snapshot del 2 maggio 2026 e riproducibili con npm run audit. Vanno letti sul modello, non sull'universo degli aderenti: vedi Cosa rappresentano i 51 nodi.
La rete è fortemente asimmetrica. ANPR eroga verso 34 dei 50 altri nodi del modello e ne fruisce solo da 5. È il profilo puro dell'hub erogatore. All'estremo opposto, Comune di Milano e Comune di Roma compaiono con grado in uscita zero: fruiscono soltanto.
Pochi nodi reggono un quarto della rete. I primi tre erogatori concentrano il 24,5% dei 343 archi totali. La densità del grafo è 0,1345, circa un ottavo delle connessioni teoricamente possibili tra i nodi rappresentati, coerente con un'interoperabilità ancora incardinata su pochi snodi centrali.
Alcuni enti sono cerniere, non estremità. INPS eroga verso 33 nodi e fruisce da 34: sta contemporaneamente al centro del welfare come fonte e come consumatore. Il nodo aggregato dei Comuni mostra il pattern complementare, con 37 archi in ingresso e 14 in uscita, coerente con la sua natura di collettore di migliaia di enti fruitori.
I cluster tematici corrispondono ai domini della PA. Welfare (INPS, Comuni, Ministero del Lavoro), fisco (Agenzia delle Entrate, MEF, Sogei), trasparenza (ANAC, AgID) si separano spontaneamente nel layout, senza che nessuna categoria sia stata usata per posizionarli.
La lettura pratica è diretta. I nodi ad alta centralità sono i punti la cui indisponibilità propagherebbe l'impatto su molti altri enti, e una densità crescente nel tempo sarebbe il segnale che l'interoperabilità italiana si sta effettivamente distribuendo, invece di concentrarsi.
- Grafo force-directed interattivo con simulazione fisica
- 51 nodi (50 enti individuali più 1 nodo che aggrega circa 7.500 Comuni) e 86 tipi di e-service derivati dal catalogo ufficiale PDND
- 343 archi diretti erogatore→fruitore
- Drag & drop dei nodi, zoom con scroll, pan con trascinamento
- Pannello dettagli con elenco e-services erogati e fruiti per ogni ente
- Filtro per categoria (cliccabile dalla legenda) e ricerca testuale
- Frecce direzionali erogatore → fruitore
- Badge numerici con conteggio connessioni
- Colori per categoria: Ministero, Regione, Previdenza, Fisco, Digitale, ecc.
- Servizi comunali aggregati: i Comuni minori sono rappresentati come nodo unico
| Dato | Fonte ufficiale | Natura |
|---|---|---|
| Enti (nodi) | aderenti.csv, dati.gov.it |
✅ Dato aperto ufficiale |
| E-service | eservice_a_catalogo.csv, dati.gov.it |
✅ Dato aperto ufficiale |
| Connessioni (archi) | Campo attributes.certified, circolari, manuali operativi |
Caution
Le connessioni non sono un dato aperto. Enti ed e-service provengono dai dataset open data ufficiali della PDND. Le relazioni erogatore→fruitore sono ricostruite dal campo attributes.certified del catalogo e da documentazione ufficiale pubblica: circolari ANPR DAIT n. 73/2023 e n. 61/2025, presentazione ANCI/DTD sui 26 casi d'uso, manuale operativo SSU Unioncamere, documentazione I.PaC, approfondimenti tecnici specializzati. Il dato puntuale delle connessioni attive non è al momento pubblicato come dato aperto strutturato. Dettagli in METODOLOGIA.md.
Note
Aggregazione dei Comuni. La maggior parte degli endpoint del catalogo sono servizi standard replicati da ciascun Comune aderente (Albo Pretorio, SUAP, Protocollo, Demografici, Tributi, Civici, WaaS, IoT, Trasparenza). Per rendere il grafo leggibile, i Comuni minori confluiscono in un unico nodo aggregato (comuni_agg), mentre 6 grandi Comuni restano individuali: Bologna, Genova, e Padova erogano servizi specifici, Milano, Roma, e Napoli compaiono come fruitori. Le Regioni sono rappresentate individualmente quando superano i 25 endpoint nel catalogo. Vedi METODOLOGIA.md §3.1.
📄 Documentazione completa: METODOLOGIA.md
La metodologia adottata in questo progetto è documentata nel report tecnico:
Del Re, F. (2026). The PDND E-Service Network: A Graph-Based Model from Italian Open Government Data. Zenodo, v1.0.0, 3 maggio 2026. doi:10.5281/zenodo.19989954
Il report descrive il modello, le fonti, la pipeline di ricostruzione, il ruolo dei modelli linguistici come strumento di estrazione, e riporta la copertura misurata del modello rispetto al catalogo PDND ufficiale (~89% di 14.102 endpoint pubblicati). Distribuito con licenza CC-BY-4.0. Il sorgente LaTeX è in pdnd-graph-paper.
# Clona il repository
git clone https://github.com/engineering87/pdnd-eservices-graph.git
cd pdnd-eservices-graph
# Installa le dipendenze
npm install
# Avvia in sviluppo
npm run devL'app sarà disponibile su http://localhost:3000.
pdnd-eservices-graph/
├── .github/workflows/
│ ├── azure-static-web-apps-polite-plant-07967ad10.yml # CI/CD per Azure
│ └── update-graph-data.yml # Pipeline dati mensile
├── docs/
│ └── demo.gif
├── pipeline/ # ← Aggiornamento automatico del catalogo
│ ├── build-graph-data.mjs # Script di build del grafo
│ ├── entities.json # Registro entità tracciate (codici IPA)
│ ├── category-map.json # Mappa attributes.certified → nodi
│ ├── connections-overrides.json # Connessioni curate da documentazione
│ ├── pdnd-data.preview.json # Anteprima generata (NON è il dato live)
│ ├── last-run-report.md # Report dell'ultima esecuzione
│ └── README.md
├── public/
│ └── favicon.svg
├── scripts/
│ ├── update-data.mjs # Riepilogo del catalogo PDND
│ ├── audit-model.mjs # Audit interno del modello
│ ├── compare-catalog.mjs # Confronto modello vs catalogo
│ ├── compute-paper-metrics.mjs # Snippet per il report Zenodo
│ └── README.md
├── src/
│ ├── components/
│ │ └── PDNDGraph.jsx # Componente principale del grafo
│ ├── data/
│ │ └── pdnd-data.json # ← DATI LIVE: modifica questo file
│ ├── App.jsx
│ ├── index.css
│ └── main.jsx
├── index.html
├── package.json
├── staticwebapp.config.json # Config Azure Static Web Apps
├── vite.config.js
├── METODOLOGIA.md # ← Fonti, metodologia, limitazioni
└── README.md
La cartella pipeline/ contiene l'automazione che mantiene il grafo allineato allo stato corrente del catalogo PDND, eseguita mensilmente da GitHub Actions.
flowchart TD
A[("Catalogo ufficiale PDND<br/>CSV")] --> B[build-graph-data.mjs]
B --> C{{"Filtra entità tracciate<br/>entities.json"}}
C --> D["Estrae e-service<br/>nome, stato, versione"]
D --> E["Deriva archi erogatore→fruitore"]
E --> F["1· Override curati<br/>connections-overrides.json"]
E --> G["2· Baseline certificata<br/>attributes.certified"]
E --> H["3· Inferenza assistita<br/>soglia di confidenza"]
F --> I["Guard di validazione"]
G --> I
H --> I
I --> J["pipeline/pdnd-data.preview.json<br/><b>ANTEPRIMA</b>"]
J -.->|"promozione manuale"| K["src/data/pdnd-data.json<br/><b>GRAFO LIVE</b>"]
K --> L(["pdndgraph.it"])
style J fill:#fff3cd,stroke:#856404,color:#000
style K fill:#d4edda,stroke:#155724,color:#000
style L fill:#cce5ff,stroke:#004085,color:#000
L'override documentato ha precedenza sulla baseline certificata, che a sua volta ha precedenza sull'inferenza. La GitHub Action mensile committa l'anteprima su main.
Warning
Modalità non distruttiva. La pipeline non sovrascrive il grafo curato src/data/pdnd-data.json. Scrive sempre sull'anteprima pipeline/pdnd-data.preview.json. Il grafo mostrato dall'app resta quello curato finché l'anteprima non viene promossa manualmente. L'automazione può quindi girare senza rompere le relazioni documentate esistenti.
# Dry-run: scarica, calcola, stampa il report. Non scrive nulla.
node pipeline/build-graph-data.mjs
# Aggiorna l'ANTEPRIMA. Il grafo live resta intatto.
node pipeline/build-graph-data.mjs --write
# Solo archi certificati e documentati, senza inferenza
node pipeline/build-graph-data.mjs --no-aiLa derivazione degli archi per gli e-service non coperti da override documentati può usare un motore di inferenza LLM, con vincoli progettati per la riproducibilità:
- Vocabolario controllato: il modello seleziona i fruitori solo tra i nodi esistenti, non può introdurre entità nuove
- Soglia di confidenza: gli archi sotto
INFERENCE_MIN_CONF(default 0,55) vengono scartati - Cache per
catalogId: un e-service già inferito non viene rielaborato, quindi il grafo resta stabile tra le esecuzioni - Fail-safe: se la chiave manca o l'API non risponde, la pipeline prosegue con i soli archi certificati e documentati
- Determinismo: temperatura 0
Configurazione tramite le variabili INFERENCE_ENGINE (anthropic o github), ANTHROPIC_API_KEY, ANTHROPIC_MODEL, GITHUB_MODEL, INFERENCE_MIN_CONF, INFERENCE_MAX_CALLS, INFERENCE_DELAY_MS, e INFERENCE_MAX_RETRIES. Dettagli in pipeline/README.md.
Ogni arco generato dalla pipeline porta un campo origine che ne dichiara la fonte, così che la natura del dato resti leggibile a valle:
| Origine | Significato |
|---|---|
documentata |
Override da fonti ufficiali pubbliche (circolari, manuali, presentazioni) |
certificata |
Derivata dal campo attributes.certified del catalogo |
ricostruita |
Ricostruita da documentazione pubblica, senza provenienza per singolo arco |
inferita |
Stima prodotta dal motore di inferenza, con punteggio di confidenza |
Gli archi inferiti sono dichiarati come stime e non come fatti documentati. Il progetto si basa esclusivamente su informazioni già pubbliche.
Il grafo attualmente pubblicato (src/data/pdnd-data.json, modello v1) non porta la provenienza per singolo arco: i suoi archi sono ricostruiti da documentazione pubblica secondo la metodologia e vengono resi con origine ricostruita. Le origini certificata e inferita per singolo arco sono prodotte dalla pipeline nell'anteprima v2, non ancora promossa.
Il modello è pubblicato anche in formati di interscambio standard, così può essere analizzato con gli strumenti di analisi di rete senza dover interpretare il JSON specifico del progetto.
Due modi per ottenerli. Dalla cartella exports/ del repository,
rigenerabile con npm run export. Oppure dalla scheda Statistiche
dell'applicazione, dove i file sono generati direttamente nel browser: nessuna
chiamata di rete e nessun servizio esterno.
| Formato | File | Aperto con |
|---|---|---|
| GraphML | pdnd-eservices-graph-graphml.graphml |
Gephi, NetworkX, igraph, yEd |
| GEXF | pdnd-eservices-graph-gexf.gexf |
Gephi |
| CSV nodi | pdnd-eservices-graph-nodi-csv.csv |
Fogli di calcolo, R, pandas |
| CSV archi | pdnd-eservices-graph-archi-csv.csv |
Fogli di calcolo, R, pandas |
Il grafo è diretto e pesato. Un arco da a a b significa che a eroga almeno un e-service consumato da b. Il peso è il numero di e-service distinti che vanno da a a b, coerente con la definizione del report pubblicato.
Attributi dei nodi
| Campo | Tipo | Significato |
|---|---|---|
label |
stringa | Nome dell'ente |
categoria |
stringa | Famiglia istituzionale (Ministero, Regione, Fisco, ...) |
tipo |
stringa | Ruolo prevalente: erogatore, fruitore o entrambi |
aggregato |
booleano | true se il nodo rappresenta un insieme di enti |
descrizione |
stringa | Nota descrittiva |
Attributi degli archi
| Campo | Tipo | Significato |
|---|---|---|
weight |
intero | Numero di e-service distinti che fluiscono sull'arco |
origine |
stringa | Provenienza della relazione: documentata, certificata, ricostruita o inferita. Se una coppia è sostenuta da archi di provenienza diversa, le origini sono elencate separate da | |
servizi |
stringa | Nomi degli e-service che contribuiscono al peso, separati da ; |
Sono riportate anche dentro i file, nei metadati di grafo, perché restino leggibili a chi apre l'esportazione senza aver letto questa pagina.
Le relazioni erogatore-fruitore non sono pubblicate come open data: sono
ricostruite da documentazione pubblica secondo la metodologia.
Il campo origine di ogni arco ne dichiara la natura. Non sono misure dirette
degli accordi realmente attivi sulla piattaforma.
I nodi con aggregato=true rappresentano insiemi di enti: comuni_agg sta per
circa 7.500 Comuni in un solo nodo. Le misure di grado e le distribuzioni
calcolate su questo grafo non sono confrontabili con quelle di un grafo in
cui ogni ente è un nodo distinto. Per escluderli si può filtrare su quel campo.
Analisi di rete con NetworkX.
import networkx as nx
G = nx.read_graphml("pdnd-eservices-graph-graphml.graphml")
print(G.number_of_nodes(), G.number_of_edges()) # 51 343
print(round(nx.density(G), 4)) # 0.1345
# Enti che servono il maggior numero di controparti
for n, d in sorted(G.out_degree, key=lambda x: -x[1])[:3]:
print(G.nodes[n]["label"], d)
# Min. Interno (ANPR) 34
# INPS 33
# Agenzia delle Entrate 17
# Sottografo senza i nodi aggregati, per misure di grado confrontabili
reale = G.subgraph([n for n, d in G.nodes(data=True) if not d["aggregato"]])
print(reale.number_of_nodes(), reale.number_of_edges()) # 50 292Analisi tabellare con pandas.
import pandas as pd
archi = pd.read_csv("pdnd-eservices-graph-archi-csv.csv")
nodi = pd.read_csv("pdnd-eservices-graph-nodi-csv.csv")
# Composizione per provenienza degli archi
print(archi["origine"].value_counts())
# Enti per numero totale di servizi erogati
nome = nodi.set_index("id")["label"]
print(archi.groupby("Source")["Weight"].sum().sort_values(ascending=False).head(3).rename(index=nome))
# Min. Interno (ANPR) 130
# INPS 68
# Agenzia delle Entrate 42In Gephi: apri il file .gexf, oppure importa i due CSV dal laboratorio dati
(l'intestazione degli archi usa già Source, Target, Weight, Type, quindi
non serve alcuna configurazione).
Le esportazioni sono deterministiche: a parità di dato in ingresso i file
sono identici byte per byte, perché la data dello snapshot è letta dal modello e
non dall'orologio. Chi rigenera i file con npm run export ottiene esattamente
quelli pubblicati. La suite di test verifica sia questa proprietà sia che i file
in exports/ non restino disallineati rispetto al dato.
I dati di origine sono CC0 1.0 (italia/pdnd-opendata), il codice è AGPL-3.0.
Se usi questi file in una pubblicazione, cita il progetto:
DOI 10.5281/zenodo.19989954.
Apri src/data/pdnd-data.json e aggiungi un oggetto all'array enti:
{
"id": "nuovo_ente",
"name": "Nome Visibile",
"tipo": "Erogatore | Fruitore | Erogatore/Fruitore",
"categoria": "Ministero",
"descrizione": "Descrizione estesa dell'ente"
}Se la categoria è nuova, aggiungi il colore in CATEGORY_COLORS dentro src/components/PDNDGraph.jsx.
Aggiungi un oggetto all'array eservices:
{
"id": "es_nuovo",
"nome": "Nome del Servizio",
"erogatore": "id_ente_erogatore",
"fruitori": ["id_fruitore_1", "id_fruitore_2"],
"versione": "1.0",
"stato": "Attivo",
"descrizione": "Cosa fa questo e-service"
}Ricorda che un record rappresenta un tipo di servizio, non un singolo endpoint del catalogo.
Lo script update-data scarica il CSV grezzo dal repository ufficiale e mostra statistiche utili per scoprire nuovi erogatori o servizi da aggiungere:
npm run update-dataI valori dipendono dallo stato corrente del catalogo. Lo snapshot di riferimento registrato nel modello (maggio 2026) riporta 14.102 API pubblicate, 366 sospese, e 6.388 producer distinti.
Tre script complementari verificano in modo ripetibile la coerenza del modello e generano i numeri esatti dei deliverable scientifici:
npm run audit # audit interno del JSON: conteggi, gradi, consistency checks
npm run compare-catalog # confronto con il catalogo ufficiale, copertura, gap
npm run paper-metrics # snippet pgfplots/LaTeX per il report Zenodonpm run audit segnala incoerenze (ad esempio un nodo dichiarato Erogatore ma senza e-service erogati). npm run compare-catalog calcola la copertura percentuale del modello rispetto al catalogo PDND vivo. Per dettagli vedi scripts/README.md.
- React 19, UI
- Vite 8, build tool
- Canvas 2D, rendering del grafo senza dipendenze esterne
- Azure Static Web Apps, hosting
- GitHub Actions, CI/CD e pipeline dati mensile
Le Pull Request sono benvenute. Per contribuire:
- Fai un fork del repository
- Crea un branch (
git checkout -b feature/nuovo-ente) - Modifica
src/data/pdnd-data.jsono il componente - Esegui
npm run auditper verificare la coerenza del modello - Committa e pusha (
git push origin feature/nuovo-ente) - Apri una Pull Request
Le correzioni alle relazioni erogatore→fruitore sono particolarmente utili quando accompagnate dal riferimento alla fonte pubblica che le documenta.
Se questo progetto ti è stato utile in una pubblicazione, una presentazione, un report, o un altro lavoro derivato, la citazione di riferimento è il report tecnico:
Del Re, F. (2026). The PDND E-Service Network: A Graph-Based Model from Italian Open Government Data. Zenodo. https://doi.org/10.5281/zenodo.19989954
@techreport{delre2026pdnd,
author = {Del Re, Francesco},
title = {The {PDND} E-Service Network: A Graph-Based Model from
Italian Open Government Data},
institution = {Zenodo},
year = {2026},
month = {5},
doi = {10.5281/zenodo.19989954},
url = {https://doi.org/10.5281/zenodo.19989954},
version = {1.0.0}
}GitHub espone la citazione anche dal pulsante Cite this repository nella barra laterale, generato da CITATION.cff.
Note
Cosa è dovuto e cosa è richiesto. Il report su Zenodo è distribuito sotto CC-BY-4.0, quindi il suo riutilizzo richiede l'attribuzione. Il codice è sotto AGPL-3.0, che impone di conservare le note di copyright e di licenza e di rilasciare le opere derivate sotto la stessa licenza, ma non contiene un obbligo di citazione in senso accademico. La citazione del report resta quindi una richiesta, non un vincolo di licenza sul codice. Se usi il progetto in un contesto scientifico o istituzionale, citarlo è il modo corretto di rendere tracciabile la provenienza del modello, e permette a chi legge di risalire alla metodologia e ai suoi limiti dichiarati.
Questo progetto è distribuito sotto licenza AGPL-3.0, vedi LICENSE.
- Puoi usare, modificare e distribuire liberamente il codice
- Se modifichi il codice e lo distribuisci, devi rendere disponibili le modifiche sotto la stessa licenza
- Se usi questo software come servizio (es. web app accessibile da utenti), sei tenuto a rendere disponibile il codice sorgente modificato agli utenti del servizio
Se utilizzi questo progetto (o una sua derivazione) per erogare un servizio accessibile via rete, la licenza AGPL richiede che:
- gli utenti possano accedere al codice sorgente della versione in esecuzione
- eventuali modifiche apportate siano pubblicate
I dati sugli e-services provengono da PDND Open Data e sono distribuiti sotto licenza CC0 1.0 Universal (Pubblico Dominio) dalla Presidenza del Consiglio dei Ministri – Dipartimento per la Trasformazione Digitale.