Skip to content

Commit 5a010c1

Browse files
aborrusoclaude
andauthored
docs(senato): dettaglio nominativo per ogni voto tranne la segreta (#53)
* docs(senato): dettaglio nominativo disponibile per ogni voto tranne la segreta Verifica empirica (leg.19): senato-vote-detail restituisce le righe per-senatore per TUTTE le modalità di osr:tipoVotazione, non solo 'nominale con appello'. L'unica eccezione è il voto SEGRETO, che alla fonte non registra la scelta: torna solo le presenze (Presente non votante, In congedo/missione), mai Favorevole/Contrario. Il segnale 'roll_call_available' non serve come campo nuovo: è derivabile da type !== 'segreta', già esposto da senato-votes. - senato-vote-detail: description col caveat voto segreto (agent-friendly) - wiki votazione-tipo-semantico.md: tabella dettaglio per tipo + nota STR() - skill CLI + MCP: nota voto segreto Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(senato): includi verifica numero legale tra i voti senza scelta individuale Greptile (P1) + Copilot: la regola diceva type !== segreta, ma anche verifica numero legale (conteggio del quorum) registra solo presenze, mai Favorevole/Contrario — come già indicava la tabella. Verificato: - controprova 19-410-27: 89 Contrario + 46 Favorevole (voto di merito) - verifica num. legale 19-334-1: solo presenze, 0 Favorevole/Contrario Segnale corretto: la scelta individuale c'è per i voti di merito (elettronica, nominale con appello, controprova), NON per segreta e verifica numero legale → type non in {segreta, verifica numero legale}. - allineati tool description, wiki, skill CLI+MCP - wiki timestamp 2026-07-07 → 2026-07-11 (Copilot) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(senato): includi Astenuto tra le scelte assenti + forma literal tipizzato Copilot (2ª passata): - La scelta espressa include anche Astenuto, non solo Favorevole/Contrario. Su segreta e verifica numero legale mancano tutte e tre (solo presenze). - Nota Virtuoso: aggiunta la forma con literal tipizzato osr:tipoVotazione "elettronica"^^xsd:string come alternativa a STR() (verificato: 7821 con tipizzato vs 0 con literal semplice). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 019ca1f commit 5a010c1

4 files changed

Lines changed: 22 additions & 2 deletions

File tree

docs/lod-wiki/senato/votazione-tipo-semantico.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ title: Tipo semantico di una votazione (finale/fiducia) NON in osr:tipoVotazione
44
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.
55
resource: http://dati.senato.it/osr/Votazione
66
tags: [senato, osr, votazione, tipoVotazione, fiducia, finale, label]
7-
timestamp: 2026-07-07
7+
timestamp: 2026-07-11
88
---
99

1010
# Trappola
@@ -21,6 +21,24 @@ timestamp: 2026-07-07
2121

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

24+
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]]).
25+
26+
# Dettaglio nominativo per tipo (roll call): la scelta individuale c'è solo per i voti di merito
27+
28+
`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).
29+
30+
| `osr:tipoVotazione` | righe per-senatore | scelta espressa (Fav./Contr./Astenuto)? |
31+
|---|---|---|
32+
| `elettronica` || **** (voto di merito) |
33+
| `nominale con appello` || **** (voto di merito) |
34+
| `controprova` || **** (voto di merito) |
35+
| `verifica numero legale` || **NO** — solo presenze (conteggio del quorum) |
36+
| `segreta` || **NO** — solo presenze (voto segreto) |
37+
38+
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.
39+
40+
**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"}`.
41+
2442
# Dove vive il tipo semantico
2543

2644
Nel **`rdfs:label`** della votazione, come testo. Pattern verificati (leg. 19):

skills/italian-parliament-cli/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,4 @@ Quando ricostruisci iter, voti o schede, il rischio è la **confabulazione su sc
131131
- Use `--limit` to cap results during exploration
132132
- URIs from `list` commands can be passed to `show` commands
133133
- **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).
134+
- **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à.

skills/italian-parliament-mcp/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ Use `rank` with `rankBy`: `aic-primo-firmatario`, `aic-cofirmatario`, `bills-pri
107107
**Who voted how (Senato)**
108108
1. `senato-votes` → get vote URI (filter by `ddlUri` for votes on a bill, or by date)
109109
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).
110+
- **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.
110111

111112
**Iter completo di una legge (Camera → Senato → pubblicazione)**
112113
Non generare la timeline a memoria: costruiscila dai tool, passo per passo. `bill-progress` è la spina dorsale.

src/tools/senato-vote-detail.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ SELECT DISTINCT ?senator_uri ?group_label WHERE {
6868
export const senatoVoteDetailTool: Tool<typeof inputSchema> = {
6969
name: "senato-vote-detail",
7070
description:
71-
"[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).",
71+
"[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à.",
7272
inputSchema,
7373
examples: [
7474
"italianparliament senato-vote-detail show --vote-uri http://dati.senato.it/votazione/19-167-42",

0 commit comments

Comments
 (0)