Skip to content

Erfassung Stapel A (Gültige Stimmen) OBW - UW #1286

@Nic12345678

Description

@Nic12345678

Beschreibung

Als Benutzer des Wahllokalsystems im Wahllokal, möchte ich in der Auszählungsphase am Wahltag die Anzahl der zweifelsfrei gültigen Stimmen eines Wahlvorschlags erfassen, ändern und speichern.

Akzeptanzkriterien:

  • Anzahl der gültigen Stimmen kann pro Wahlvorschlag erfasst werden;
  • Die Erfasste Anzahl der gültigen Stimmen kann als StapelA gespeichert werden;
  • Beim öffnen der Erfassungsmaske wird:
    - [ ] falls vorhanden die zuletzt gespeicherten Daten angezeigt, sonst eine leere Tabelle mit so viele Zeilen wie Wahlvorschläge, ein Eingabefeld pro Wahlvorschlag und ein readonly Feld pro Wahlvorschlag mit der Anzahl der unter Beschluss, im Stapel C erfasste Anzahl nach Beschluss gültiger Stimmen für jeden Wahlvorschlag, sowie die Summe pro Wahlvorschlag;
    - [ ] Eine readonly Übersicht der bisher erfassten ungültigen Stimmabgaben;
    - [ ] Ein readonly Bereich mit der Prüfung der Konsistenz zwischen den ausgezählten Stimmabgaben und den erwarteten Stimmabgaben (siehe Umsetzungshinweise).

Umsetzungshinweise (Code-Abschnitte sollen als Pseudocode verstanden werden )

Vorhandene HTML-Bausteine der Erfassungsmaske:

Eine Tabelle mit der Überschrift "Gültige Stimmabgaben" mit 5 Spalten wie folgt:
  1. laufende Nummerierung der Wahlvorschläge in der Form D [wahlvorschlag.ordnungszahl];
  2. Name des Wahlvorschlags (Partei + Name des Direktkandidaten [wahlvorschlag.kurzname, kandidat.name]);
  3. eine Spalte Stapel a: zweifelsfrei gültig mit Number-Input-Felder (Eingaben Ganzzahlen >= 0) Pflichtfeld, falls kein Direktkandidat, dann Feld inaktiv und Tab-Index Übersprung;
  4. eine Spalte Stapel c: laut Beschluss gültig als nicht veränderbarer Text mit den Zahlen aus den in lautBeschlussGueltig (Stapel C gültige) geladenen Zahlen;
  5. Eine Spalte "Insgesamt"

Am Ende der Tabelle ist eine Zeile "Gültige Stimmabgaben insgesamt";

Eine Tabelle mit der Überschrift "Ungültige Stimmabgaben" mit 2 Spalten und 3 Zeilen wie folgt:
  1. in der ersten Spalte kommt der Name des Stapels in der die hier angezeigten ungültigen Stimmabgaben erfasst wurden (Stapel b: ungekennzeichnet, Stapel c: laut Beschluss ungültig );
  2. in der zweiten Spelte kommen die Zahlen aus den links benannten Stapeln;

Anschließend eine Zeile "Insgesamt".

Save-Button
  • - es gibt einen Button "Speichern und weiter" der bei invalider (auch fehlender) Eingabe in den Input-Feldern, inaktiv ist und es kann nicht gespeichert werden;

  • - der Button ist inaktiv, wenn keine valide Eingabe oder wenn die Auszählung für diese Wahl abgeschlossen ist (Store: niederschriftGedruckt = true);
    - [ ] - die Betätigung des Buttons führt zu einer Überprüfung ob die in den Input-Feldern erfassten gültigen Stimmen + ungültigen Stimmen mit der unter Stimmzettelumschläege erfasste anzahlWaehler übereinstimmt;

  • - ist keine Übereinstimmung gegeben, wird eine generische leere Methode "saveStapelA" aufgerufen. Die Implementierung dieser Methode wird in einem Integrationsissue implementiert und ist kein Akzeptanzkriterium.

  • - die Betätigung des Buttons führt zur Speicherung des Stapel OBW_A:

            `postStapel( "OBW_A", self.wahlid, self.wahlbezirkID, ergebnisse)`
    
             `ergebnisse` - hat das gleiche JSON-Format wie oben beim Laden beschrieben.
    
Begründung-Dialog (kein Akzeptanzkriterium nur informativ, Umsetzung in #1290 und #1292)

Hier muss man eine Begründung für die Abweichung eingeben dann Button-Speichern und Weiter oder über Button "Eingabe ändern" wird das Dialog geschlossen und man befindet sich weiter auf der Maske.

Eine Tabelle mit der Überschrift "Prüfung des Auszählungsergebnisses" mit 2 Spalten und 3 Zeilen folgt:
  1. in der ersten Spalte kommen untereinander die Strings: Ausgezählte Stimmabgaben , Erwartete Stimmabgaben ;
  2. in der zweiten Spelte kommen die Zahlen aus den links benannten Quellen;

Anschließend eine Zeile "Abweichung : Zeile1 - Zeile2". Wenn diese Differenz != 0 ist, dann ist die ganze Zeile in einem angemessenen Fehler-Farbton (z.Bsp. rosa / transparentes rot )

Geladene Daten beim Anzeigen der Komponente (Maske)

  • gueltigeErgebnisse = ergebnismeldungclient.getStapel('OBW_A', wahlid, wahlbezirkID);
    Falls vorhanden soll ein Objekt in der Form sein:
    { "stapelart": "OBW_A", "wahlID": "OBW-WAHL-ID", "wahlbezirkID": "eineWahlbezirkID", "ergebnisse": [ { "ergebnis": "2", "wahlvorschlagsordnungszahl": 1, "wahlvorschlagID": "CSU-Identifikator" }, { "ergebnis": "2", "wahlvorschlagsordnungszahl": 2, "wahlvorschlagID": "SPD-Identifikator" }]}

  • ungekennzeichneteStimmzettel = ergebnismeldungclient.getStapel('OBW_B_UNGEKENNZEICHNET', wahlid, wahlbezirkID);
    (für das erwartete Datenformat siehe Step3: Erfassung Stapel B (ungekennzeichnete))

  • lautBeschlussGueltig = ergebnismeldungclient.getStapel('OBW_C_GUELTIG', wahlid, wahlbezirkID);
    (für das erwartete Datenformat siehe Step2: Erfassung Stapel C)

  • lautBeschlussUngueltig = ergebnismeldungclient.getStapel('OBW_C_UNGUELTIG', wahlid, wahlbezirkID);
    (für das erwartete Datenformat siehe Step2: Erfassung Stapel C)

  • stimmzettelAnzahl = ergebnismeldungclient.getStimmzettel_Umschlaege(wahlid, wahlbezirkID);

           `{"anzahlWaehler": 555, "wahlID": "OBW-WAHL-ID", "wahlbezirkID": "einewbID"}`
    
  • wahlvorschlaege = basisdatenclient.getWahlvorschlaege(wahlid, wahlbezirkID);

Falls vorhanden soll ein Objekt in der Form:


{"wahlID":"OBW-WAHL-ID", "wahlbezirkID": "eineWahlbezirkID",
"stimmzettelgebietID":"stimmzettelgebietID",
"wahlvorschlaege":
[{"erhaeltStimmen":true,
"identifikator":"CSU-Identifikator",
"kurzname":"CSU & für München",
"ordnungszahl":1,
"kandidaten": [{"identifikator":"kandId1", "name":"AKandName1", 
   "listenposition":2,"direktkandidat":false,"tabellenSpalteInNiederschrift":0,"einzelbewerber":false},
   {"identifikator":"kandId2", "name":"AKandName2","listenposition":1, "direktkandidat":true, "tabellenSpalteInNiederschrift":0, 
  "einzelbewerber":false}]
},
{"erhaeltStimmen":true,
"identifikator":"SPD-Identifikator",
"kurzname":"SPD","ordnungszahl":2,
   "kandidaten":[{"identifikator":"kandId21", name":"AKandName21", "listenposition":1, "direktkandidat":false, 
   "tabellenSpalteInNiederschrift":0,"einzelbewerber":false}, {"identifikator":"kandId22", "name":"AKandName22", "listenposition":2, 
   "direktkandidat":true, "tabellenSpalteInNiederschrift":0, "einzelbewerber":false}]
}]}

kommen.

  • die Komponente kennt ob die Wahl (OBW) abgeschlossen wurde niederschriftGedruckt (aus dem Store zu dieser Wahl);

  • die Komponente kennt die wahlbezirksart des Wahllokals (aus dem Store);

  • die Komponente kennt ob dieser StapelA bereits erfasst wurde aus dem Store, z.Bsp. state.wahlen.wahlen[this.wahlid].stapel.OBW_A;

Aufgerufene RessourcenURLs:

Stimmzettelumschläge

  • getStimmzettel_Umschlaege(wahlID, wahlbezirkID) URL: ergebnismeldung/businessActions/stimmzettelumschlaege/${wahlID}/${wahlbezirkID}

StapelDaten

  • getStapel(OBW_A | OBW_B_UNGEKENNZEICHNET | OBW_C_GUELTIG | OBW_C_UNGUELTIG, wahlID, wahlbezirkID) URL: ergebnismeldung/businessActions/ergebnisse/${wahlID}/${wahlbezirkID}/${stapelart}
  • postStapel(OBW_A, this.wahlid, this.wahlbezirkID, ergebnisseToSend) URL: ergebnismeldung/businessActions/ergebnisse/${wahlID}/${wahlbezirkID}/${stapelart};

Begründung

  • getBegruendung(wahlID, wahlbezirkID, stapelart) URL: ergebnismeldung/businessActions/begruendung/${wahlID}/${wahlbezirkID}/${stapelart};
  • postBegruendung(begruendung) URL: ergebnismeldung/businessActions/begruendung/${begruendung.wahlID}/${begruendung.wahlbezirkID}/${begruendung.stapelart};

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions