Skip to content

Funzionalità votazioni

scaloni edited this page Feb 12, 2012 · 4 revisions

8. Funzionalità votazioni

Una votazione viene inserita sulla piattaforma per via automatica (API) o tramite interfaccia di back-end dai moderatori del sito. Oltre a generare un nuovo record della tabella votazione, ogni votazione inserita crea n nuovi record della tabella votazione_has_carica, dove n è il numero dei componenti il consiglio comunale.

La tabella votazione_has_carica contiene i voti dei singoli consiglieri nelle singole votazioni ed è formata da campi tipo:

  • carica_id (chiave esterna)
  • votazione_id (chiave esterna)
  • voto (favorevole, contrario, astenuto, assente, missione)
  • ribelle (bool, default 0) → vedi dopo

Il valore missione nel campo voto indica una sorta di “assenza giustificata”.

8.1 Controllo di integrità della votazione

Quando una votazione viene inserita, prima della sua pubblicazione, è necessario che il sistema controlli l'integrità dei dati. Fondamentalmente ci sono due gruppi di dati che devono essere congruenti:

  • Il riepilogo della votazioni, i dati di presenti, assenti e favorevoli, contrari e astenuti
  • I dati dei voti dei singoli consiglieri

Di conseguenza i controlli di congruenza da effettuare sono:

  • Il numero totale dei record della tabella votazione_has_carica con riferimento alla votazione in esame è uguale al numero di consiglieri in carica
  • Il numero totale dei votanti (presenti in tabella votazione) è uguale alla somma dei voti dei singoli consiglieri non assenti (favorevoli/contrari/astenuti nella tabella votazione_has_carica)
  • Il numero dei favorevoli/contrari/astenuti/assenti nel riepilogo (tabella votazione) è uguale alla somma dei singoli consiglieri favorevoli/contrari/astenuti/assenti (tabella votazione_has_carica)

Di seguito le azioni che il sistema compie nel caso il controllo di integrità sia positivo o negativo:

  • Esito positivo
    • pubblica la votazione
    • avvia script per calcolo “voto dei gruppi” (vedi dopo)
    • avvia script per calcolo “voti ribelli” (vedi dopo)
  • Esito negativo
    • Non pubblica la votazione
    • Invia email di notifica ai moderatori

8.2 Voti dei gruppi

Nel caso una votazione abbia passato il controllo di integrità e sia quindi stata pubblicata, si passa al calcolo del voto dei gruppi nella votazione. Vale solamente per le votazioni in consiglio e non in giunta e commissioni.

Per questo abbiamo bisogno di una tabella votazione_has_gruppo con i seguenti campi:

  • gruppo_id (chiave esterna)
  • votazione_id (chiave esterna)
  • voto

Il procedimento di calcolo del voto di un gruppo è il seguente:

  • il voto espresso dalla maggioranza dei componenti facenti parte del gruppo alla data della votazione e presenti alla votazione
  • nel caso in cui non ci sia una maggioranza (p.e. in un gruppo di 10 componenti ci sono 5 favorevoli e 5 contrari oppure sono tutti assenti), al gruppo verrà assegnato il voto nd (non disponibile).

Di conseguenza i valori del campo voto della tabella votazione_has_gruppo potranno essere favorevole/contrario/astenuto/nd.

8.3 Voti ribelli

Per voto ribelle si intende il voto di un singolo consigliere diverso dalla maggioranza del proprio gruppo di appartenenza. Vale solamente per le votazioni in consiglio e non in giunta e commissioni. Quando un voto è stato pubblicato ed è stato calcolato anche il voto dei gruppi si procede al calcolo dei consiglieri ribelli. Il calcolo è banale, in quanto confronta il valore del campo voto della tabella votazione_has_carica con quello della tabella votazione_has_gruppo.

Nel caso in cui un consigliere sia presente (favorevole/contrario/astenuto) ed abbia votato diversamente dal proprio gruppo va assegnato al campo ribelle in votazione_has_carica il valore 1 tranne nei seguenti casi:

Voto consigliere Voto gruppo Valore da assegnare al campo ribelle in votazione_has_carica
Qualsiasi Nd 0
Assente/Missione Qualsiasi 0

Per ottimizzare l'applicazione è consigliato inserire due campi nel db con funzione di cache:

  • numero_di_ribelli nella tabella votazione. Permette di visualizzare rapidamente il numero dei ribelli nelle liste dei voti e nella pagina di una votazione
  • voti_ribelli nella tabella cariche. Permette di visualizzare rapidamente il numero di ribellioni nella pagina di un politico-consigliere.

8.4 Votazioni chiave

Per voti chiave si intendono le votazioni più importanti. I moderatori del sito avranno la possibilità di indicare questo tipo di votazioni dall'interfaccia di back-end. Per questo è necessario aggiungere un campo keyvote (bool, default 0) nella tabella votazione.

8.5 Collegare una votazione ad un atto

Una votazione può essere riferita ad uno o più atti. Per questo è necessario prevedere una tabella m-n (votazione_has_atto) con i seguenti campi:

  • votazione_id (chiave esterna)
  • atto_id (chiave_esterna)

Nel caso in cui il sistema di import non fosse in grado di collegare automaticamente la votazione con gli atti, è necessario prevedere una funzione di back-end che permetta ai moderatori di effettuare i collegamenti.

8.6 Titolo aggiuntivo di una votazione

Il moderatore può inoltre inserire un titolo aggiuntivo (titolo giornalistico) alla votazione. Per questo è necessario aggiungere un campo titolo_aggiuntivo (varchar, default null) alla tabella votazione. Le regole di visualizzazione del titolo di una votazione seguono quelle descritte per un atto.

8.7 News generate da una votazione

Una votazione non ha delle news dedicate specificatamente ma la pubblicazione di una votazione, passato quindi il controllo di integrità descritto precedentemente, determina le seguenti azioni:

Oggetto destinatario della news Priorità
Atti collegati (come descritto in precedenza) II
Politico (votante o assente) II

8.8 Commenti degli utenti ad una votazione

Gli utenti possono commentare le votazioni utilizzando il modulo già descritto per il commento degli atti.