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”.
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
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.
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.
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.
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.
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.
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 |
Gli utenti possono commentare le votazioni utilizzando il modulo già descritto per il commento degli atti.