Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion docs/lod-wiki/senato/votazione-tipo-semantico.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ title: Tipo semantico di una votazione (finale/fiducia) NON in osr:tipoVotazione
description: osr:tipoVotazione è la modalità di voto (elettronica/nominale/segreta), non il tipo semantico. "Votazione finale" e "questione di fiducia" vivono solo nel rdfs:label.
resource: http://dati.senato.it/osr/Votazione
tags: [senato, osr, votazione, tipoVotazione, fiducia, finale, label]
timestamp: 2026-07-07
timestamp: 2026-07-11
---

# Trappola
Expand All @@ -21,6 +21,24 @@ timestamp: 2026-07-07

Filtrare `--type` o `osr:tipoVotazione` per "finale" o "fiducia" restituisce **0 righe** — non perché il dato manchi, ma perché è la proprietà sbagliata.

Nota Virtuoso: il literal di `osr:tipoVotazione` è tipizzato `xsd:string`, quindi il match con un literal **semplice** (`osr:tipoVotazione "elettronica"`) torna **vuoto** — è un problema di uguaglianza di *term* (`"elettronica"` ≠ `"elettronica"^^xsd:string`). Due forme che funzionano (verificato leg. 19: 7821 vs 0): tipizzare il literal nel triple pattern — `osr:tipoVotazione "elettronica"^^xsd:string` — oppure filtrare con `FILTER(STR(?t) = "elettronica")` (cfr. [[trappole]]).

# Dettaglio nominativo per tipo (roll call): la scelta individuale c'è solo per i voti di merito

`senato-vote-detail` restituisce le righe per-senatore **per tutte le modalità di voto**, non solo per `nominale con appello` (verificato 2026-07-11, leg. 19). La differenza vera non è "c'è / non c'è il dettaglio", ma **cosa** contiene il dettaglio: la scelta espressa (Favorevole, Contrario, Astenuto) oppure solo le presenze (Presente non votante, In congedo/missione).

| `osr:tipoVotazione` | righe per-senatore | scelta espressa (Fav./Contr./Astenuto)? |
|---|---|---|
| `elettronica` | sì | **sì** (voto di merito) |
| `nominale con appello` | sì | **sì** (voto di merito) |
| `controprova` | sì | **sì** (voto di merito) |
| `verifica numero legale` | sì | **NO** — solo presenze (conteggio del quorum) |
| `segreta` | sì | **NO** — solo presenze (voto segreto) |

Prova sul voto segreto `19-155-52`: 15 `Presente non votante` + 21 `In congedo/missione`, **zero** scelte espresse (né Favorevole, né Contrario, né Astenuto). È costituzionalmente corretto: il voto segreto registra chi era presente, non come ha votato. Lo stesso vale per la `verifica numero legale`, che è un semplice conteggio del numero legale, non un voto su un provvedimento.

**Regola pratica per l'orchestratore/LLM:** la domanda "come ha votato il singolo senatore X?" è rispondibile solo per i voti di **merito** (`elettronica`, `nominale con appello`, `controprova`). Su `segreta` e `verifica numero legale` **non** dedurre né inventare il sì/no: la scelta non esiste nel dato, ci sono solo le presenze. Non serve un campo booleano dedicato (`roll_call_available`): il segnale è **derivabile** dal campo `type` già esposto da `senato-votes` — la scelta individuale c'è quando `type ∉ {"segreta", "verifica numero legale"}`.

# Dove vive il tipo semantico

Nel **`rdfs:label`** della votazione, come testo. Pattern verificati (leg. 19):
Expand Down
1 change: 1 addition & 0 deletions skills/italian-parliament-cli/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,3 +131,4 @@ Quando ricostruisci iter, voti o schede, il rischio è la **confabulazione su sc
- Use `--limit` to cap results during exploration
- URIs from `list` commands can be passed to `show` commands
- **Senato confidence votes have empty `ddl_uri` at the source**, but `senato-votes list --ddl-uri <uri>` **now returns the *fiducia* anyway** (it resolves the DDL's seduta dates and re-links the confidence vote of that day). Still check `ddl_uri` on any "final" vote found by date: it may belong to a different act (unified text).
- **Senato — quando c'è il voto individuale**: `senato-vote-detail` dà il sì/no del singolo senatore solo per i voti di **merito** (`type` = `elettronica`, `nominale con appello`, `controprova`). Per `segreta` (voto segreto) e `verifica numero legale` (conteggio del quorum) restituisce solo le presenze (`Presente non votante`, `In congedo/missione`), **mai** una scelta espressa (né `Favorevole`, né `Contrario`, né `Astenuto`): la scelta non è nel dato. Non dedurre il voto individuale su queste due modalità.
1 change: 1 addition & 0 deletions skills/italian-parliament-mcp/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ Use `rank` with `rankBy`: `aic-primo-firmatario`, `aic-cofirmatario`, `bills-pri
**Who voted how (Senato)**
1. `senato-votes` → get vote URI (filter by `ddlUri` for votes on a bill, or by date)
2. `senato-vote-detail` with the URI. Each row includes the senator's `group_label` at the vote date, so the group breakdown comes directly (no need to cross-reference).
- **When is the individual choice available?** Only for *merit* votes (`type` from `senato-votes` = `elettronica`, `nominale con appello`, `controprova`). For `segreta` (secret ballot) and `verifica numero legale` (quorum count) the source does **not** record the individual choice — `senato-vote-detail` returns only presence rows (`Presente non votante`, `In congedo/missione`), never an expressed choice (neither `Favorevole`, nor `Contrario`, nor `Astenuto`). That's correct: report "scelta individuale non registrata (voto segreto / verifica del numero legale)", don't infer the vote on those two types.

**Iter completo di una legge (Camera → Senato → pubblicazione)**
Non generare la timeline a memoria: costruiscila dai tool, passo per passo. `bill-progress` è la spina dorsale.
Expand Down
2 changes: 1 addition & 1 deletion src/tools/senato-vote-detail.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ SELECT DISTINCT ?senator_uri ?group_label WHERE {
export const senatoVoteDetailTool: Tool<typeof inputSchema> = {
name: "senato-vote-detail",
description:
"[SENATO] Voto individuale di ogni senatore in una singola votazione d'Assemblea: come ha votato (Favorevole, Contrario, Astenuto, Presente non votante, In congedo/missione), con nome e gruppo di appartenenza alla data del voto. Richiede l'URI della votazione (da senato-votes).",
"[SENATO] Voto individuale di ogni senatore in una singola votazione d'Assemblea: come ha votato (Favorevole, Contrario, Astenuto, Presente non votante, In congedo/missione), con nome e gruppo di appartenenza alla data del voto. Richiede l'URI della votazione (da senato-votes). ATTENZIONE: la scelta espressa (Favorevole, Contrario, Astenuto) è registrata solo per i voti di merito (type 'elettronica', 'nominale con appello', 'controprova'). Per i voti 'segreta' (voto segreto) e 'verifica numero legale' (conteggio del quorum) il tool restituisce SOLO le presenze (Presente non votante, In congedo/missione) e MAI una scelta espressa (né Favorevole, né Contrario, né Astenuto) — è corretto così, non dedurre né inventare il voto del singolo senatore su queste due modalità.",
inputSchema,
examples: [
"italianparliament senato-vote-detail show --vote-uri http://dati.senato.it/votazione/19-167-42",
Expand Down