Skip to content

Commit 1b9d560

Browse files
aborrusoclaude
andauthored
fix(bill-progress): valorizza presentation_date e iniziativa sul ramo Camera (#74) (#75)
Le due colonne erano hardcoded a stringa vuota, pur essendo il dato presente sull'atto (dc:date, ocd:iniziativa) e già letto da bills list. Due OPTIONAL nella query esistente, nessuna chiamata di rete in più. Proiettarle in SELECT DISTINCT è sicuro: sono proprietà dell'atto, non dello stato, e hanno cardinalità 1 (verificato su leg. 17/18/19). Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent a0efdc1 commit 1b9d560

1 file changed

Lines changed: 12 additions & 3 deletions

File tree

src/tools/bill-progress.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -273,10 +273,16 @@ async function cameraIterTimeline(
273273
// dedup (ogni risorsa-stato è unica) e reintrodurrebbe righe visivamente
274274
// duplicate quando due ?st hanno stessi titolo/date/stato. Serve solo come
275275
// tie-breaker deterministico in ORDER BY per stabilizzare la paginazione.
276+
// ?pres e ?ini invece si possono proiettare: sono proprietà dell'atto, non
277+
// dello stato, e hanno cardinalità 1 (verificato su leg. 17, 18 e 19: zero
278+
// atti con più di un dc:date o più di un ocd:iniziativa), quindi non
279+
// moltiplicano le righe della timeline.
276280
const query = `${OCD_PREFIXES}
277-
SELECT DISTINCT ?titolo ?date ?stato WHERE {
281+
SELECT DISTINCT ?titolo ?date ?stato ?pres ?ini WHERE {
278282
<${uri}> ocd:rif_statoIter ?st .
279283
OPTIONAL { <${uri}> dc:title ?titolo }
284+
OPTIONAL { <${uri}> dc:date ?pres }
285+
OPTIONAL { <${uri}> ocd:iniziativa ?ini }
280286
?st dc:date ?date .
281287
?st dc:title ?stato .
282288
${filters.join("\n ")}
@@ -305,8 +311,11 @@ OFFSET ${opts.offset ?? 0}`;
305311
title: decodeHtml(r.titolo ?? ""),
306312
status: decodeHtml(r.stato ?? ""),
307313
status_date: fmtDate(r.date),
308-
presentation_date: "",
309-
initiative_description: "",
314+
// dc:date dell'atto è la data di presentazione (formato YYYYMMDD come
315+
// ?date, quindi stesso fmtDate). Di norma coincide con il primo stato
316+
// dell'iter, ma non sempre: in leg. 19 divergono su 23 atti.
317+
presentation_date: fmtDate(r.pres),
318+
initiative_description: r.ini ?? "",
310319
nature: "",
311320
legislature: leg,
312321
phase: id ? `C.${id}` : "",

0 commit comments

Comments
 (0)