Skip to content

Commit b778568

Browse files
author
superpios
committed
docs(README): guida d'uso passo-passo (prerequisiti, adattamento, esecuzione, output, mappatura)
1 parent 72ab591 commit b778568

1 file changed

Lines changed: 79 additions & 15 deletions

File tree

README.md

Lines changed: 79 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,35 +8,99 @@ Nessuna pista dimostra, suggerisce o implica illecito, spreco, frode o responsab
88
**Progetto collegato** al repository madre [DoveVannoINostriSoldi](https://github.com/Italian-Builders-Org/DoveVannoINostriSoldi) (Fase 5 della ROADMAP).
99

1010
## Cosa fa
11-
- Legge le tabelle di relazione (CSV) esportate da `investigative-explorer-dvns` (in `data/relations/` dell'Explorer); lo schema di ogni pista in uscita è in `docs/FORMATO_PISTA.md`
11+
- Prende le tabelle di relazione dell'Explorer e le **adatta** nel formato atteso dal motore (`scripts/adapt_explorer.py`)
1212
- Applica regole dichiarative estremamente caute (YAML)
13-
- Produce piste in JSON + Markdown con provenienza completa
14-
- È completamente deterministico (stesso input → stesso output)
13+
- Produce piste in **JSON + Markdown** con provenienza completa
14+
- È **completamente deterministico** (stesso input → stesso output)
1515

1616
## Cosa non fa
1717
- Non stabilisce responsabilità, illeciti o sprechi
1818
- Non risolve omonimie
1919
- Non somma perimetri contabili diversi
2020
- Non usa etichette valutative
2121

22-
## Avvio rapido
22+
---
23+
24+
## Come usarlo (guida passo-passo)
25+
26+
### 0. Prerequisiti
27+
- Python 3.10+ installato
28+
- Le tabelle di relazione dell'Explorer disponibili localmente in `<EXPLORE>/data/relations/`
29+
(se non le hai, clona/aggiorna `investigative-explorer-dvns` e genera le relazioni con i suoi script;
30+
i file attesi sono ad es. `persona_incarico_ente__incarichi_nominativi_shard.csv`,
31+
`awards__affidamenti_diretti.csv`, `cig_ente__affidamenti_diretti.csv`).
32+
33+
### 1. Installazione
2334
```bash
35+
git clone https://github.com/superpios/investigative-leads-generator
36+
cd investigative-leads-generator
2437
pip install -r requirements.txt
25-
# 1) Adatta le tabelle di relazione dell'Explorer nel formato atteso dal generatore
26-
python scripts/adapt_explorer.py --relations <EXPLORE>/data/relations --output data/input
27-
# 2) Applica le regole (deterministico, fail-closed)
28-
python scripts/apply_rules.py --input data/input --output data/leads --rules rules/rules_v0.1.yaml
2938
```
3039

31-
| File | Contenuto |
40+
### 2. Adatta le tabelle dell'Explorer → input del generatore
41+
Lo schema dell'Explorer (`subject_key`, `object_key`, `period`, …) è diverso da quello che il
42+
motore si aspetta: `adapt_explorer.py` rinomina i campi in modo esplicito e revisionabile.
43+
44+
```bash
45+
python scripts/adapt_explorer.py \
46+
--relations "<EXPLORE>/data/relations" \
47+
--output data/input
48+
```
49+
Questo scrive in `data/input/` tre CSV normalizzati:
50+
`incarichi.csv`, `affidamenti_diretti.csv`, `cig_enti.csv`.
51+
52+
### 3. Genera le piste
53+
```bash
54+
python scripts/apply_rules.py \
55+
--input data/input \
56+
--output data/leads \
57+
--rules rules/rules_v0.1.yaml
58+
```
59+
Oppure, equivalente, tramite il wrapper:
60+
```bash
61+
python scripts/generate_leads.py
62+
```
63+
64+
### 4. Cosa ottieni
65+
In `data/leads/`:
66+
- `leads_v0.1.json` — tutte le piste (una lista di oggetti)
67+
- `LEAD-<REGOLA>-<hash>.md` — una pagina Markdown per pista
68+
69+
Ogni pista contiene **sempre** tutti i campi di `docs/FORMATO_PISTA.md`
70+
(`id`, `title`, `observed_facts`, `sources`, `period`, `rule_id`,
71+
`why_worth_checking`, `what_cannot_be_claimed`, `generation_date`, `disclaimer`).
72+
Esempio di `title`: *"Nominativo presente in 5 incarichi su enti diversi – anno 2025"*.
73+
74+
### 5. Opzioni
75+
- `--generation-date YYYY-MM-DD`: forza la data di riferimento. Se omessa, viene **derivata
76+
deterministicamente** dai dati (anno massimo nei periodi osservati) — mai l'orario di esecuzione.
77+
- Su dati reali dell'Explorer l'esecuzione produce poche piste (es. 8 nell'ultimo test:
78+
1 `REGOLA-001`, 7 `REGOLA-002`, 0 `REGOLA-003`); è voluto: le regole sono conservative.
79+
80+
---
81+
82+
## Comportamento importante
83+
- **Deterministico**: stesso input → stesso output. `generation_date` deriva dai dati, non da `datetime.now()`.
84+
- **Fail-closed**: se `data/input/` è vuoto o mancano colonne obbligatorie, **non viene emessa
85+
alcuna pista** (nessun errore, nessuna inferenza). Nessun dato lascia mai la macchina.
86+
87+
## Mappatura Explorer → generatore
88+
| Tabella Explorer | → colonne generatore |
3289
| --- | --- |
33-
| docs/REGOLE_SEGNALAZIONE.md | Regole attive + principi vincolanti |
34-
| docs/FORMATO_PISTA.md | Schema obbligatorio di ogni pista |
35-
| docs/LIMITI.md | Limiti metodologici e interpretativi |
90+
| `persona_incarico_ente__*` | `person_name=subject_key`, `entity_id=object_key`, `year=period[:4]` |
91+
| `awards__affidamenti_diretti` | `awardee=subject_key`, `entity_id=object_key`, `award_date=period`, `procedure_type="affidamento diretto"` |
92+
| `cig_ente__affidamenti_diretti` | `cig=subject_key`, `subject_id=object_key` |
93+
94+
La provenienza (`source_dataset`, `source_record_id`, `source_url`) è preservata in ogni pista.
95+
Dettagli e logica in `scripts/adapt_explorer.py` e `docs/REGOLE_SEGNALAZIONE.md`.
3696

37-
## Note di implementazione
38-
- **Determinismo**: `generation_date` è derivato dai dati (anno massimo nei periodi osservati), non dall'orario di esecuzione. Stesso input → stesso output, in conformità al principio 6 di `docs/REGOLE_SEGNALAZIONE.md`.
39-
- **Fail-closed**: in assenza di file o di campi obbligatori non viene emessa alcuna pista (nessun errore, nessuna inferenza).
97+
## Documentazione
98+
| File | Contenuto |
99+
| --- | --- |
100+
| `docs/REGOLE_SEGNALAZIONE.md` | Regole attive + principi vincolanti |
101+
| `docs/FORMATO_PISTA.md` | Schema obbligatorio di ogni pista |
102+
| `docs/LIMITI.md` | Limiti metodologici e interpretativi |
103+
| `templates/lead_template.md` | Template illustrativo (il motore scrive il Markdown inline) |
40104

41105
## Licenza
42106
GNU Affero General Public License v3.0

0 commit comments

Comments
 (0)