Come funziona
Cosa questo sito non fa
- Non dà consulenza legale. Nessuna segnalazione è un parere, e nessuna può essere usata al posto di uno.
- Non dichiara illegittima o incostituzionale alcuna norma. L’unico soggetto che può farlo è la Corte costituzionale. Quando una pronuncia esiste la citiamo; non ne produciamo di nuove.
- Non usa un modello linguistico per decidere se due norme si contraddicono. Il modello, dove viene usato, estrae campi da un comma alla volta e non vede mai due norme insieme. La contraddizione è una query su quei campi.
- Non assegna punteggi di qualità legislativa, non produce classifiche politiche, non attribuisce responsabilità a partiti, governi o singoli.
- Non raccoglie voti. Trasformerebbe un osservatore in un attore politico, e renderebbe ogni segnalazione contestabile per motivi estranei ai dati.
- Non promette che il silenzio sia una buona notizia. Che una norma non compaia qui significa che i controlli attivi, sulla porzione di corpus che abbiamo, non hanno trovato nulla. Non significa che la norma sia coerente.
Il modello estrae, il codice giudica
Il modo ovvio di cercare contraddizioni fra norme è dare due testi a un modello linguistico e chiedergli se si contraddicono. È anche il modo che rende un progetto come questo indifendibile: la risposta è plausibile, non riproducibile, non verificabile, e la sua accuratezza non è misurabile.
Qui funziona al contrario. Per ogni comma si estrae una proposizione normalizzata:
- soggetto e fattispecie — chi, in quali circostanze;
- modalità deontica — obbligo, divieto, permesso, potere, onere;
- oggetto della condotta;
- termine, se presente;
- conseguenza o sanzione;
- condizioni ed eccezioni;
- ambito di applicazione;
- URN, comma e finestra di vigenza.
A questo punto la contraddizione non è un giudizio, è un JOIN: stessa modalità deontica, stesso soggetto, fattispecie sovrapposta, vigenze che si intersecano, valore divergente. L’errore del modello resta confinato all’estrazione, dove si misura a campione; e ogni segnalazione mostra i due testi originali sopra ai campi estratti, così chi legge può dirci se abbiamo sbagliato l’estrazione o se il conflitto è reale. Sono due errori diversi.
Il filtro temporale non è opzionale. Due norme mai vigenti contemporaneamente non sono in contraddizione. Il motore scarta ogni coppia la cui intersezione di vigenza è vuota prima di qualunque altro confronto.
I controlli attivi
Ogni controllo ha una regola scritta, che compare in chiaro nella scheda di ogni segnalazione che produce. Non è documentazione: è la cosa che il codice esegue.
| Controllo | Livello | Cosa cerca | Precisione attesa |
|---|---|---|---|
| Modifica a una norma già abrogata | 1 | Un atto modifica un articolo di un altro atto che, alla data in cui la modifica prende effetto, risultava già abrogato. | ~100% (attraversamento del grafo, nessuna estrazione) |
| Rinvio a una norma abrogata | 1 | Una norma ancora in vigore rinvia a un atto che è stato successivamente abrogato. | ~100% sul fatto (rinvio e abrogazione sono entrambi nel grafo); la qualificazione come problema dipende dalla natura recettizia o formale del rinvio |
| Rinvio a un articolo che non esiste | 1 | Una norma rinvia a un articolo che, nel testo vigente dell’atto richiamato, non è presente. | ~100% quando il testo del bersaglio è completo; i falsi positivi residui vengono dalla numerazione degli allegati |
| Decreto attuativo mai emanato | 1 | Una norma prevede un provvedimento attuativo entro un termine; il termine è scaduto e il provvedimento non risulta pubblicato. | ~100% sugli atti con copertura verificata in Gazzetta Ufficiale |
| Fonte secondaria che incide su fonte primaria | 2 | Un atto di rango regolamentare modifica o abroga direttamente una disposizione di rango legislativo. | 70-85%: la delegificazione autorizzata è un caso legittimo e frequente |
| Stesso adempimento, termini diversi | 3 | Due norme contemporaneamente vigenti impongono lo stesso adempimento allo stesso soggetto con termini diversi. | 50-80%, dipende dalla qualità del vocabolario del verticale |
I controlli di livello 1 sono puramente deterministici: attraversano il grafo delle relazioni fra norme e confrontano date. Nessuna intelligenza artificiale è coinvolta. Il livello 2 applica regole sui metadati di fonte e competenza. Il livello 3 si attiva soltanto sui domini dotati di un vocabolario controllato.
E non su tutta la legislazione di quei domini: ogni dominio dichiara l’elenco degli atti su cui il confronto lavora, perché le parole non bastano a delimitare una materia. «Concessione» sta nel codice dei contratti pubblici e nel codice della navigazione del 1942; «collaudo» negli appalti e nel collaudo dei veicoli. Finché abbiamo attivato il confronto su ogni norma che contenesse una di quelle parole, ha accostato materie che non c’entrano niente. L’elenco degli atti di ciascun dominio è pubblicato nella pagina Dati: si può contare.
La soglia di pubblicazione
Un tipo di controllo viene pubblicato soltanto quando la revisione umana su campione supera l’85% di precisione, con almeno 30 revisioni. Sotto soglia, o sotto la dimensione minima di campione, le sue segnalazioni restano nella coda interna e non compaiono su questo sito.
La regola è codificata, non dichiarata: il gate è applicato nel punto di esportazione dei dati, non lasciato alla disciplina di chi pubblica. Una precisione del 100% su tre casi non è una precisione, ed è il motivo del campione minimo. La pagina Dati mostra la precisione corrente di ogni controllo, compresi quelli che non pubblicano e il perché.
Da dove vengono i dati
Il corpus proviene dagli open data di Normattiva, in formato Akoma Ntoso, con licenza CC BY 4.0. Usiamo le API di export e le collezioni predefinite previste dal portale: non c’è nel nostro codice un percorso che faccia scraping del sito di consultazione.
Il corpus di legittimità della Corte di cassazione non è disponibile in blocco: il livello giurisprudenziale è quindi trattato per citazione — linkiamo gli estremi, non ospitiamo il testo.
Le fonti hanno errori, e alcuni li abbiamo trovati. In più di un caso un riferimento negli open data risulta ancorato a un atto diverso da quello che il testo nomina: se lo prendessimo per buono produrremmo una segnalazione che sembra un errore del legislatore ed è un errore di marcatura. Per questo gli archi in cui il testo e l’ancoraggio non concordano nascono a bassa confidenza e i controlli di livello 1 li ignorano. I casi trovati sono documentati.
Se pensi che una segnalazione sia sbagliata
Ogni scheda ha un pulsante «Non è un conflitto». Apre una issue pubblica sul repository, senza registrazione. Le risposte alimentano il gold standard e cambiano la precisione misurata del controllo che ha prodotto la segnalazione: possono farlo scendere sotto soglia e toglierlo dal sito.
Il pulsante non si chiama «segnala un falso positivo» di proposito. «Non è un conflitto» è una valutazione giuridica, che un professionista dà volentieri; l’altra è un bug report, e presuppone che qualcuno lavori gratis per noi.