civilista-archivio — Conversione e indicizzazione della Knowledge Base
Cosa fa
Trasforma documenti (in primis PDF a testo nativo: Rassegne del Massimario, sentenze, atti di causa, dottrina) in Markdown pulito con marcatori di pagina e genera un indice a due livelli che rende la KB interrogabile a basso costo di token e — soprattutto — ancorabile: ogni citazione potrà essere ricondotta a un file e a una pagina reali.
Due ragioni per cui esiste:
- Economia di contesto. Un PDF viene letto come immagine, costoso a ogni interrogazione. Il Markdown è testo: leggibile, grep-abile, riusabile a costo minimo.
- Guardrail anti-allucinazione. L'indice è il presupposto del protocollo quote-then-claim: non si cita ciò che non è nell'indice.
I due livelli dell'indice
- Strutturale (concetto → fonte : pagina): PARTE / SEZIONE / CAPITOLO con il loro titolo-concetto e la pagina di inizio nel corpo. Serve a navigare per argomento (es. "CAPITOLO X — LE OBBLIGAZIONI IN GENERALE", "CAPITOLO VIII — COMUNIONE E CONDOMINIO").
- Citazionale (Rv → fonte : pagina → massima): ogni sentenza realmente presente, con numero Rv, pagina e citazione testuale. È il backbone del grounding.
Indice master e Markdown convertiti vivono in KNOWLEDGE_BASE/_INDICE/
(zona GLOBALE) oppure in FASCICOLI/<caso>/_INDICE/ (zona di causa).
Come si aggiorna una zona (uso normale)
# 1) metti i PDF nella zona, es. KNOWLEDGE_BASE/02_GIURISPRUDENZA/
# 2) converti + indicizza + rigenera indice e registro, in un colpo solo:
python3 skills/civilista-archivio/scripts/aggiorna_indice.py KNOWLEDGE_BASE
# stessa cosa per un fascicolo:
python3 skills/civilista-archivio/scripts/aggiorna_indice.py FASCICOLI/<caso>
Converte solo i PDF nuovi o modificati; gli altri li salta.
Uso puntuale (un singolo documento)
python3 skills/civilista-archivio/scripts/converti_indicizza.py \
<input.pdf> KNOWLEDGE_BASE/_INDICE/ --titolo "Etichetta leggibile della fonte"
python3 skills/civilista-archivio/scripts/genera_indice_master.py \
KNOWLEDGE_BASE/_INDICE/ KNOWLEDGE_BASE/_INDICE/INDICE.md
Dipendenza: pdfplumber (pip install pdfplumber).
Le fonti civili da cui partire
La KB del kit nasce da due serie ufficiali dell'Ufficio del Massimario:
- Rassegne annuali — Gli orientamenti delle Sezioni Civili (3 volumi per anno): l'orientamento consolidato, ma pubblicate con 12-18 mesi di ritardo;
- Rassegne mensili della giurisprudenza civile: le massime del mese, con ~4-5 mesi di ritardo — sono ciò che copre il periodo per cui l'annuale non è ancora uscita.
Gli URL e le altre fonti civili aperte (pronunce segnalate, rinvii pregiudiziali ex art. 363-bis,
open data della Corte costituzionale) sono elencati con licenze e limiti in
documentazione/FONTI_CIVILI.md.
Prima di pubblicare o condividere i Markdown: oscurare i difensori
Le rassegne mensili riportano sotto ogni massima la riga delle parti nella forma
E. (COGNOME NOME) contro A. (COGNOME NOME): le parti sono già ridotte a iniziale dalla fonte,
i difensori no. Prima di pubblicare o inviare i .md:
python3 skills/civilista-archivio/scripts/oscura_difensori.py KNOWLEDGE_BASE/_INDICE
# --dry-run per contare senza scrivere
Sostituisce il nominativo con [omissis] e lascia intatti massima, estremi, classificazione,
presidente/estensore/relatore/P.M. (dati istituzionali della citazione) e l'ancoraggio alle pagine.
Non usarlo sui documenti di causa di un fascicolo: lì i nomi servono.
Quando l'avvocato porta materiale proprio (sentenze di merito, pareri, atti di causa),
va indicizzato nella zona giusta: la giurisprudenza generale in KNOWLEDGE_BASE/,
il materiale di una causa in FASCICOLI/<caso>/ — lo scoping è per costruzione.
Banca dati delle pronunce segnalate — sincronizzazione settimanale
Le pronunce civili segnalate dall'Ufficio del Massimario (pagina "Giurisprudenza Civile" del
sito della Corte) sono raccolte da una pipeline centrale nel repo pubblico
Synthos-Logic/giurisprudenza-db, aggiornata ogni lunedì. Ogni scheda porta la massima
ufficiale, l'esito in sintesi, la classificazione per materia e il link al PDF autentico
pubblicato dalla Corte: fonte verificabile con un clic.
Per scaricarla o aggiornarla (repo pubblico: non serve alcun account GitHub):
python3 skills/civilista-archivio/scripts/sincronizza_giurisprudenza.py KNOWLEDGE_BASE
# --solo-segnalate evita la copia dell'archivio della Corte costituzionale
# --tutto Consulta completa dal 1956 (default: ultimi 10 anni)
Lo script mantiene una cache git locale (primo scaricamento una tantum, poi solo differenze),
copia in 02_GIURISPRUDENZA/SEGNALATE/, 02_GIURISPRUDENZA/RINVII_PREGIUDIZIALI/ e
02_GIURISPRUDENZA/CONSULTA/, e reindicizza la zona.
Rinvii pregiudiziali ex art. 363-bis c.p.c. (RINVII_PREGIUDIZIALI/): sono le questioni che un
giudice di merito ha rimesso alla Corte sospendendo il giudizio. Nel civile fanno le veci delle
questioni SU pendenti del penale. Non sono precedenti e non si citano come autorità: servono a
sapere che il punto è controverso e che la Corte si pronuncerà — utili per istanze di sospensione,
motivi in subordine e scelte di strategia. Il quesito integrale sta nel PDF dell'ordinanza di
rimessione linkato in scheda, non sulla pagina della Corte: va letto lì, non riassunto.
Avvertenze:
- la cartella
SEGNALATE/è di proprietà della pipeline: le modifiche locali vengono sovrascritte al sync successivo. Le note personali vanno altrove in KB. - le segnalate non hanno ancora numero Rv (arriva con la Rassegna annuale): si citano per numero/anno con riferimento alla scheda e al PDF ufficiale. Quando la stessa pronuncia comparirà nella Rassegna annuale con Rv, si preferisce la citazione con Rv.
- alcune schede riportano più numeri (
numeri_collegati): sono pronunce gemelle che la Corte pubblica insieme. Vanno citate per il numero pertinente al caso.
Limiti — leggere con attenzione
- NON fa OCR. Se il PDF è una scansione (poco testo estraibile) lo script si ferma e lo segnala: va prima passato per un OCR. Non convertire mai una scansione "alla cieca".
- L'estrazione strutturale è tarata sulle Rassegne annuali (PARTE/SEZIONE/CAPITOLO).
Nei volumi annuali il sommario di ciascuna parte viene talvolta indicizzato due volte
(voce del sommario + voce del corpo, a pagine consecutive): è rumore noto, non un errore
di ancoraggio. Le Rassegne mensili non hanno quella struttura: il loro indice strutturale
è vuoto per costruzione e la ricerca per concetto si fa con
grepsul.mdo dal registro citazionale (che per le mensili è ricco: ogni massima porta la sua classificazione per materia). - L'indice citazionale riconosce tre forme reali:
annuale civile
Sez. 2, n. 13949/2024, Varrone, Rv. 671693-01; mensile civileSez. U, Ordinanza interlocutoria n. 26471 del 01/10/2025 (Rv. 676180-01); penaleSez. 3, n. 23006 del 22/06/2026, Rossi, Rv. …. Più le varianti (Sez. U.,S.U.,Sez. 6 - L, relatore andato a capo, "n. … del 2024"). Copertura misurata sulla Rassegna annuale 2024 vol. I: 1.178 su 1.207 occorrenze "Rv.". - I richiami non sono citazioni. Nelle mensili il blocco "Massime precedenti Vedi: N. … del … Rv. …" rimanda a precedenti che non stanno in quel documento: non vengono indicizzati, ed è voluto — il registro citazionale deve contenere solo massime realmente leggibili alla pagina indicata. Restano fuori, per la stessa ragione, i richiami orfani "la medesima decisione (Rv. …)".
- Tutto il prodotto è materiale di lavoro: la conversione non sostituisce la lettura della fonte ufficiale da parte dell'avvocato.
PROTOCOLLO quote-then-claim (grounding obbligatorio)
Quando si cita giurisprudenza che dovrebbe essere nella KB, l'ordine è vincolante:
- Cerca prima nell'indice. Per concetto → indice strutturale o
grepsul.md. Per una sentenza →grepdel numero Rv o della parte nel registro citazionale. - Vai alla pagina e leggi. Apri il
.mdal marcatore<!-- pag. N -->indicato. - Incolla la massima testuale, con l'indicazione
(fonte, p. N). Si afferma solo ciò che si è letto. - Se non è nell'indice → si dichiara "non presente in KB". NON si cita a memoria, NON si "ricostruisce" il numero. L'astensione è il comportamento corretto: meglio un buco dichiarato che una citazione inventata.
Regola d'oro: ciò che non è nell'indice non esiste, ai fini della citazione. L'avvocato verifica comunque sulla banca dati ufficiale prima del deposito.