Skip to content

About

In diesem Repository wollen wir das Wahllokalsystem der Landeshauptstadt München, das initial zur Bundestagswahl 2017 eingeführt wurde, veröffentlichen. Anlass dafür ist eine geplante Lifecyclemaßnahme. Da wir im Rahmen dieser Maßnahme die gesamte Anwendung betrachten, bot es sich an entsprechend der OpenSource-Strategie der Landeshauptstadt München, die Anwendung OpenSource zu stellen.

Am Ende soll die Anwendung für Interessierte vollständig zur Verfügung stehen.

Was kann die Software

Der Hauptfokus der Software liegt auf den Handlungen am Wahltag. Sie unterstützt bei der Eröffnung des Wahllokals, indem man z.B. anhand einer Checkliste prüfen kann, dass alle notwendigen Materialien für die Durchführung vorhanden sind. Während der Zeit der Stimmabgabe wird übermittelt, wie viele Wähler*innen bereits im Wahllokal waren. Des Weiteren werden über die Software wahlrelevante Vorkommnisse dokumentiert.

Außerdem wird zu definierten Zeitpunkten abgefragt, welche Mitglieder des Wahlvorstandes im Wahllokal anwesend sind. So wird sichergestellt, dass das Gremium zu jeder Zeit ausreichend besetzt ist.

Während der Stimmauszählung, und der damit verbundenen Erstellung der Niederschrift, unterstützt das System den Wahlvorstand bei der korrekten Erfassung der Daten. Dazu gibt es zahlreiche Regeln und Konsistenzprüfungen, die dem Wahlvorstand Feedback geben, ob die erfassten Daten korrekt sind.

Das Wahlamt kann über das System den Wahlbezirken wichtige Informationen zukommen lassen.

Übersicht der Funktionen des Wahllokalsystems im zeitlichen Kontext einer Wahl
Übersicht der Funktionen des Wahllokalsystems im zeitlichen Kontext einer Wahl

Fachliche Anforderungen

Im Folgenden werden die fachlichen Anforderungen an die Software je nach Funktion näher beschrieben. Die Einordnung in die Grafik lässt sich der jeweiligen Überschrift "📃 UseCase: Titel" entnehmen.

Wahllokalsystem UI

Das Wahllokalsystem ist die Anwendung, die am Wahltag vom Wahlvorstand bedient wird.

📃 UseCase: Initiales Laden der Daten

In einem ersten Schritt nach dem Login werden die hinterlegten Daten des angemeldeten Benutzers geladen. Kommt es hier zu einem Fehler, wird der Wahlvorstand dazu aufgefordert, sich beim Wahlamt zu melden. Ist der Schritt erfolgreich, müssen anschließend alle für die Wahlen wichtigen Daten ebenfalls erfolgreich geladen werden. Schlägt das Laden fehl, kann die Initialisierungs-Anfrage für die betroffenen Daten wiederholt werden. Bei bestimmten fehlenden Daten wird dem Nutzer der Zugriff auf die Anwendung verwehrt, bei anderen, mit niedrigerer Priorität, ist der Zugriff auf die Anwendung trotzdem möglich. Das erfolgreiche Laden ermöglicht später auch eine reibungslose Nutzung im Offline-Modus.

Folgende Daten werden bei einer Kommunalwahl von beiden Wahlbezirksarten "Urnenwahlbezirk" und "Briefwahlbezirk" geladen: Wahlvorstand, Wahlvorschläge, Kopfdaten, Konfigurationen, Handbuch, Wahlvorbereitung, Eröffnungsuhrzeit, Ereignisse, Druckstatus, Stapel c - gültige Stimmzettel, Stapel c - ungültige Stimmzettel, Stapel b - ungekennzeichnete Stimmzettel, Begründung - Stapel a, Stapel d, Stapel a, Stapel b, Begründung Stapel ab, Stapel b-c, FortsetzungsUhrzeit, UnterbrechungsUhrzeit

Kommunalwahl-Daten, die nur in einem Urnenwahlbezirk geladen werden

UngültigeWahlscheine, A-Werte, Wählerverzeichnis, Schließungsuhrzeit, Stimmabgabevermerke, Stimmzettel, Begründung - Stimmzettel

Kommunalwahl-Daten, die nur in einem Briefwahlbezirk geladen werden

Erfasste Wahlbriefe, Zugelassene Wahlbriefe, Wahlscheine, Stimmzettelumschläge, Begründung - Stimmzettelumschläge, Stapel b - leere Stimmzettelumschläge

📃 UseCase: Erfassung von Ereignissen

Zu jeder Zeit der Wahlhandlung kann der Nutzer Ereignisse in der Anwendung erfassen. Jedes Ereignis hat folgende Pflichtfelder:

  • eine (berechnete) Ereignisart (siehe Infobox "Ereignisse im Urnenwahlbezirk")
  • ein Datum mit Uhrzeit
  • eine aussagekräftige Beschreibung mit mindestens 4 und maximal 500 Zeichen.

Weiterhin gibt es einige Verhaltensregeln für die Ereigniserfassung:

  • Wenn keine Ereignisse vorgefallen sind, muss dies explizit durch das Aktivieren einer Checkbox bestätigt werden, um die Maske speichern zu können.
  • Sind Ereignisse eingetreten, müssen diese einzeln erfasst werden.
  • Bei Bedarf können eingetragene Ereignisse wieder gelöscht werden.
  • Das Löschen aller eingetragenen Ereignisse aktiviert automatisch die Checkboxen "Keine Ereignisse vorgefallen".
  • Das Eintragen neuer Ereignisse, wenn vorher noch keine gespeichert wurden, deaktiviert die Checkboxen automatisch.

Diese Relationen werden für jeden Wahlbezirk in den Attributen keineVorfaelle und keineVorkommnisse gespeichert, die sich daraus berechnen, ob es Einträge mit der entsprechenden Ereignisart gibt.

Ereignisse im Urnenwahlbezirk

Im Urnenwahlbezirk wird zwischen Vorfällen, die am Wahltag während oder vor der Stimmabgabe auftreten, und Vorkommnissen, die während der Auszählung auftreten, unterschieden. Vorkommnisse können also auch an einem Tag nach der Wahl auftreten und erfasst werden. Wird die Uhrzeit eines Vorkommnisses nachträglich auf vor der Wahlschließung gesetzt, passt sich auch die Ereignisart des Eintrags entsprechend an und wird zu einem Vorfall, und andersherum. Sobald die Schliessungsuhrzeit gespeichert wird, wird die Ereignisart der Ereignisse ebenfalls neu berechnet. Dementsprechend ist die Ereignisart eng verknüpft mit dem zugehörigen Datum und der Uhrzeit.

Ereignisse im Briefwahlbezirk

Im Briefwahlbezirk werden nur Vorkommnisse erfasst. Dies ist erst möglich, sobald für mindestens eine Wahl eine Wahlurne geöffnet wurde.

Vor der Auszählung

Vor der Stimmabgabe

📃 UseCase: Erfassung der Anwesenheit des Wahlvorstands

Beim Start der Anwendung wurden alle Wahlvorstandsmitglieder geladen, die für diesen Tag im Wahlbezirk eingeteilt sind. Die Liste der Wahlvorstandsmitglieder ist nach Funktion in folgender Reihenfolge sortiert:

  1. Wahlvorsteher*in
  2. Stellvertretung Wahlvorsteher*in
  3. Schriftführer*in
  4. Stellvertretung Schriftführer*in
  5. Beisitzer*in

Bei gleicher Funktion wird zusätzlich nach Familienname und Vorname sortiert.

Für alle Mitglieder, die tatsächlich anwesend sind, muss die Anwesenheit manuell per Checkbox erfasst werden. Die Anwesenheit kann nur bei Erfüllung folgender Bedingungen gespeichert werden:

  • es muss mindestens ein Wahlvorsteher oder dessen Stellvertreter anwesend sein
  • es muss mindestens ein Schriftführer oder dessen Stellvertreter anwesend sein
  • vor der Wahlschließung müssen mindestens 3 Mitglieder anwesend sein
  • nach der Wahlschließung müssen mindestens 5 Mitglieder anwesend sein

Der Nutzer der Anwendung wird durch eine Fehlermeldung darauf hingewiesen, wenn diese Bedingungen nicht erfüllt sind. Über einen "Aktualisieren"-Button, welcher den Wahlvorstand mit einem forceUpdate-Flag neu lädt, kann der Nutzer erzwingen, die Mitglieder durch eine mögliche neue Zusammensetzung zu überschreiben.

📃 UseCase: Druck einer Wahlvorstand-Nachbesetzung im Briefwahlbezirk

In manchen Fällen ist es in einem Briefwahlbezirk notwendig, eine Nachbesetzung zu organisieren. Hierzu kann der Nutzer über den Button Nachbesetzung drucken ein entsprechendes PDF-Dokument generieren lassen, welches im Anschluss gedruckt und ausgefüllt werden kann.

📃 UseCase: Vorbereitung der Wahlhandlung - Prüfung der Ausstattung des Wahllokals

Für jede an dem entsprechenden Tag stattfindende Wahl muss die Anzahl der zur Verfügung gestellten Wahlurnen erfasst werden. Der Nutzer muss bestätigen, dass die Wahlurnen vor der Nutzung leer waren und versiegelt wurden, um speichern zu können.

Abstimmungsschutzvorrichtungen im Urnenwahlbezirk

In jedem Urnenwahllokal müssen gewisse Abstimmungsschutzvorrichtungen gewährleistet sein, um das Wahlgeheimnis nicht zu gefährden. Dementsprechend muss die Summe der Anzahl der Tische mit Sichtblenden, der Nebenräume im Wahlraum, sowie der Wahlkabinen insgesamt mindestens 1 ergeben, bevor der Nutzer speichern kann.

📃 UseCase: Wahl eröffnen

Der Nutzer wird dazu aufgefordert, die Uhrzeit einzutragen, zu welcher die Stimmabgabe begonnen wurde, beziehungsweise zu welcher der Wahlvorstand zusammengetreten ist. Um speichern zu können, darf der Nutzer keine Zeit eingeben, die in der Zukunft liegt. Außerdem müssen die folgenden Grenzwerte je nach Wahlbezirksart berücksichtigt werden:

Erfassung der Öffnung des Wahllokals im Urnenwahlbezirk

Die früheste Zeit, zu der das Wahllokal geöffnet werden kann, ist der Standardwert von 8 Uhr und wird mit dem Konfigurationsparameter FRUEHESTE_EROEFFNUNGSUHRZEIT_UW geladen. Die späteste Zeit zur Öffnung richtet sich nach dem Konfigurationsparameter FRUEHESTE_SCHLIESSUNGSUHRZEIT_UW mit einem Standardwert von 18 Uhr.

Erfassung des Zusammentretens des Wahlvorstands im Briefwahlbezirk

Die früheste Zeit, zu welcher der Wahlvorstand zusammentreten kann, ist der Standardwert von 15 Uhr und wird mit dem Konfigurationsparameter FRUEHESTE_EROEFFNUNGSUHRZEIT_BW geladen.

📃 UseCase: Erfassung der erhaltenen Wahlbriefe

Briefwahlbezirk

In einem Briefwahlbezirk werden die erhaltenen Wahlbriefe erfasst. Die dabei relevanten Werte sind die Anzahl der Wahlbriefe, die vor 18 Uhr übergeben wurden. Dabei muss mindestens ein Wahlbrief erfasst werden. Ebenso gilt es die Anzahl der Verzeichnisse der für ungültig erklärten Wahlscheine sowie die Anzahl der Nachträge zu den Verzeichnissen zu erfassen. Erst nach der Angabe dieser drei Werte können die Informationen gespeichert werden. Optional ist die Angabe einer Anzahl an nachgelieferten Wahlbriefen nach 18 Uhr. Sollte es nachgelieferte Wahlbriefe geben, so muss eine Uhrzeit dazu angegeben werden.

Während der Stimmabgabe

📃 UseCase: Erfassung der absoluten Wahlbeteiligung

Urnenwahlbezirk

In einem Urnenwahlbezirk kann nach der Öffnung der Wahl die Anzahl der Wähler, die das Wahllokal besuchen, erfasst werden. Jedes Mal, wenn der Nutzer auf den entsprechenden Button klickt, wird die Wähleranzahl um 1 erhöht. Alternativ kann der Nutzer das Feld über seine Tastatur steuern. Wenn er sich nicht in einem Input-Feld befindet, kann er die Taste + drücken, oder, wenn der Zählbutton fokussiert ist, die Tasten Eingabe oder Leertaste.

📃 UseCase: Wahl schliessen

Erfassung der Schließung des Wahllokals im Urnenwahlbezirk

Analog zur Öffnung der Wahl, wird sie vor der Auszählung auch wieder geschlossen. Die früheste Zeit zur Schließung richtet sich nach dem Konfigurationsparameter FRUEHESTE_SCHLIESSUNGSUHRZEIT_UW mit einem Standardwert von 18 Uhr. Auch diese darf nicht in der Zukunft liegen.

Briefwahlbezirk

Im Briefwahlbezirk gibt es keine "Schließung" des Wahllokals. Es wird aber eine Uhrzeit mit dem UseCase Erfassung abgegebener Stimmen übermittelt, welche der Schliessungsuhrzeit im Urnenwahllokal gleicht. Die früheste Zeit, die übermittelt werden kann richtet sich nach dem Konfigurationsparameter FRUEHESTE_SCHLIESSUNGSUHRZEIT_BW mit einem Standardwert von 18 Uhr.

📃 UseCase: Überprüfung der ungültigen Wahlscheine

Urnenwahlbezirk

In einem Urnenwahlbezirk muss, wenn jemand mit Wahlschein kommt, geprüft werden, ob dieser Wahlschein gültig ist. Dazu gibt es in der Anwendung eine Liste ungültiger Wahlscheine. Der Nutzer gibt die Nummer des Wahlscheins ein und sucht. Nach der Suche erhält der Nutzer Feedback darüber, ob der Wahlschein gültig oder ungültig ist. Entsprechend werden auch Handlungsanweisungen angezeigt. Ist der Wahlschein ungültig, werden in der Fehlermeldung neben der Wahlscheinnummer auch Vor- und Familienname angezeigt.

Um suchen zu können, muss eine Wahlscheinnummer vorhanden sein. Die Wahlscheinnummer muss außerdem im Bereich von 1 bis 9999999 liegen.

Nach einer Suche kann über den Button, der zuvor die Suche ausgeführt hat, die Suche zurückgesetzt werden. Dabei werden die Eingabe und Handlungsanweisungen entfernt. Die Suche wird ebenfalls zurückgesetzt, wenn der Nutzer die Wahlscheinnummer verändert.

Zur Unterstützung des Wahlvorstands wird ein Bild angezeigt, das helfen soll, die Stelle, wo die Wahlnummer steht, zu identifizieren.

Die vorhandene Liste kann über den Aktualisieren-Button erneut geladen werden.

Ist die Liste leer oder konnte die Liste nicht geladen werden, erhält der Nutzer entsprechende Fehlermeldungen angezeigt.