Skip to content

Commit

Permalink
Minor csv output changes for TopDesk import
Browse files Browse the repository at this point in the history
Mainly cleans up polling station names and adds a 'type' column to indicate source of the check
  • Loading branch information
chrismostert committed May 2, 2024
1 parent 7348582 commit 7a280c0
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 19 deletions.
20 changes: 12 additions & 8 deletions src/csv_write.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import csv
import re
from typing import Dict, List, Optional
from typing import Dict, List, Literal, Optional

from eml import EML, CheckResult
from eml_types import (
Expand All @@ -14,6 +14,7 @@

HEADER_COLS = [
"Verkiezingnummer",
"Type",
"Kieskringnummer",
"Gemeentenummer",
"Gemeentenaam",
Expand All @@ -22,8 +23,8 @@
]
PROTOCOL_VERSION = "EP2024"

ZIP_CODE_PATTERN = re.compile(r"\(postcode: \d{4} ?[A-Z]{2}\)")
STEMBUREAU_PREFIX_PATTERN = re.compile(r"^Stembureau Stembureau")
ZIP_CODE_PATTERN = re.compile(r"\(\s*postcode:\s*\d{4}\s*[A-Z]{2}\s*\)")
STEMBUREAU_PREFIX_PATTERN = re.compile(r"^(Stembureau\s)+")


def _write_header(writer, metadata: EmlMetadata, description: str) -> None:
Expand Down Expand Up @@ -75,16 +76,19 @@ def _format_percentage_deviation(percentage: float) -> str:
def _format_reporting_unit_name(reporting_unit_name: Optional[str]) -> str:
return (
STEMBUREAU_PREFIX_PATTERN.sub(
"Stembureau", ZIP_CODE_PATTERN.sub("", reporting_unit_name)
"", ZIP_CODE_PATTERN.sub("", reporting_unit_name)
).strip()
if reporting_unit_name
else ""
)


def _id_cols(metadata: EmlMetadata, id: str) -> List[Optional[str]]:
def _id_cols(
metadata: EmlMetadata, id: str, type: Literal["A", "B", "C"]
) -> List[Optional[str]]:
return [
metadata.election_id,
type,
metadata.contest_identifier,
metadata.authority_id,
metadata.authority_name,
Expand Down Expand Up @@ -121,7 +125,7 @@ def write_csv_a(
inexplicable_difference or explanation_sum_difference
) and not results.already_recounted:
writer.writerow(
_id_cols(eml_metadata, id)
_id_cols(eml_metadata, id, "A")
+ [
inexplicable_difference,
explanation_sum_difference,
Expand Down Expand Up @@ -192,7 +196,7 @@ def write_csv_b(
or potentially_switched_candidates
):
writer.writerow(
_id_cols(eml_metadata, id)
_id_cols(eml_metadata, id, "B")
+ [
zero_votes,
high_invalid_vote_percentage,
Expand Down Expand Up @@ -232,4 +236,4 @@ def write_csv_c(
for _, difference in differences:
towrite.append(_format_percentage_deviation(difference))

writer.writerow(_id_cols(eml_metadata, id) + towrite)
writer.writerow(_id_cols(eml_metadata, id, "C") + towrite)
22 changes: 11 additions & 11 deletions test/test_e2e.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def test_create_csv_files_a_b():
"Kieskringnummer;14\n"
"Gemeentenummer;0505\n"
"\n"
"Verkiezingnummer;Kieskringnummer;Gemeentenummer;Gemeentenaam;Stembureaunummer;Stembureaunaam;Aantal geen verklaring voor verschil;Aantal ontbrekende verklaringen voor verschil;Al herteld;Samenvatting\n"
"Verkiezingnummer;Type;Kieskringnummer;Gemeentenummer;Gemeentenaam;Stembureaunummer;Stembureaunaam;Aantal geen verklaring voor verschil;Aantal ontbrekende verklaringen voor verschil;Al herteld;Samenvatting\n"
)
assert content == expected

Expand All @@ -49,8 +49,8 @@ def test_create_csv_files_a_b():
"Kieskringnummer;14\n"
"Gemeentenummer;0505\n"
"\n"
"Verkiezingnummer;Kieskringnummer;Gemeentenummer;Gemeentenaam;Stembureaunummer;Stembureaunaam;Stembureau met nul stemmen;Stembureau >=3.0% ongeldig;Stembureau >=3.0% blanco;Stembureau >=15 of >=2.0% verschil tussen toegelaten kiezers en uitgebrachte stemmen;Stembureau met lijst >=50.0% afwijking;Mogelijk verwisselde kandidaten;Al herteld;Samenvatting\n"
"TK2023;14;0505;Dordrecht;1;Stembureau Binnenstad;;;;ja (28);;;ja;Er is een groot verschil tussen het aantal toegelaten kiezers en het aantal uitgebrachte stemmen (28). Er is wel herteld.\n"
"Verkiezingnummer;Type;Kieskringnummer;Gemeentenummer;Gemeentenaam;Stembureaunummer;Stembureaunaam;Stembureau met nul stemmen;Stembureau >=3.0% ongeldig;Stembureau >=3.0% blanco;Stembureau >=15 of >=2.0% verschil tussen toegelaten kiezers en uitgebrachte stemmen;Stembureau met lijst >=50.0% afwijking;Mogelijk verwisselde kandidaten;Al herteld;Samenvatting\n"
"TK2023;B;14;0505;Dordrecht;1;Binnenstad;;;;ja (28);;;ja;Er is een groot verschil tussen het aantal toegelaten kiezers en het aantal uitgebrachte stemmen (28). Er is wel herteld.\n"
)
assert content == expected

Expand Down Expand Up @@ -90,9 +90,9 @@ def test_create_csv_files_a_b_2():
"Kieskringnummer;alle\n"
"Gemeentenummer;1708\n"
"\n"
"Verkiezingnummer;Kieskringnummer;Gemeentenummer;Gemeentenaam;Stembureaunummer;Stembureaunaam;Aantal geen verklaring voor verschil;Aantal ontbrekende verklaringen voor verschil;Al herteld;Samenvatting\n"
"EP2024;alle;1708;Steenwijkerland;1;Stembureau Holterberg;1;405;;Er is een onverklaard verschil tussen het aantal toegelaten kiezers en het aantal getelde stembiljetten van 406. In het proces-verbaal is ingevuld dat er 1 keer geen verklaring is voor het verschil. De verklaringen die gegeven zijn tellen niet op tot het totale verschil. Er is niet herteld.\n"
'EP2024;alle;1708;Steenwijkerland;3;"Stembureau ""De Waarschuwing""";108;;;Er is een onverklaard verschil tussen het aantal toegelaten kiezers en het aantal getelde stembiljetten van 108. Er is niet herteld.\n'
"Verkiezingnummer;Type;Kieskringnummer;Gemeentenummer;Gemeentenaam;Stembureaunummer;Stembureaunaam;Aantal geen verklaring voor verschil;Aantal ontbrekende verklaringen voor verschil;Al herteld;Samenvatting\n"
"EP2024;A;alle;1708;Steenwijkerland;1;Holterberg;1;405;;Er is een onverklaard verschil tussen het aantal toegelaten kiezers en het aantal getelde stembiljetten van 406. In het proces-verbaal is ingevuld dat er 1 keer geen verklaring is voor het verschil. De verklaringen die gegeven zijn tellen niet op tot het totale verschil. Er is niet herteld.\n"
'EP2024;A;alle;1708;Steenwijkerland;3;"""De Waarschuwing""";108;;;Er is een onverklaard verschil tussen het aantal toegelaten kiezers en het aantal getelde stembiljetten van 108. Er is niet herteld.\n'
)
assert content == expected

Expand All @@ -106,11 +106,11 @@ def test_create_csv_files_a_b_2():
"Kieskringnummer;alle\n"
"Gemeentenummer;1708\n"
"\n"
"Verkiezingnummer;Kieskringnummer;Gemeentenummer;Gemeentenaam;Stembureaunummer;Stembureaunaam;Stembureau met nul stemmen;Stembureau >=3.0% ongeldig;Stembureau >=3.0% blanco;Stembureau >=15 of >=2.0% verschil tussen toegelaten kiezers en uitgebrachte stemmen;Stembureau met lijst >=50.0% afwijking;Mogelijk verwisselde kandidaten;Al herteld;Samenvatting\n"
"EP2024;alle;1708;Steenwijkerland;1;Stembureau Holterberg;;;;ja (417);Kleurenpartij (51.7%);;;Er is een groot verschil tussen het aantal toegelaten kiezers en het aantal uitgebrachte stemmen (417). Daarnaast is er een opmerkelijk grote afwijking ten opzichte van het gemeentegemiddelde bij de volgende partijen: Kleurenpartij (51.7%). Er is niet herteld.\n"
"EP2024;alle;1708;Steenwijkerland;2;Stembureau Lege boel;ja;;;;Kleurenpartij (-51.7%);;;Er is een aantal uitgebrachte stemmen van 0. Daarnaast is er een opmerkelijk grote afwijking ten opzichte van het gemeentegemiddelde bij de volgende partijen: Kleurenpartij (-51.7%). Er is niet herteld.\n"
'EP2024;alle;1708;Steenwijkerland;3;"Stembureau ""De Waarschuwing""";;ja (3.7%);ja (3.7%);ja (108);;;;Er is een hoog percentage ongeldige stemmen (3.7%). Daarnaast is er een hoog percentage blanco stemmen (3.7%). Ook is er een groot verschil tussen het aantal toegelaten kiezers en het aantal uitgebrachte stemmen (108). Er is niet herteld.\n'
"EP2024;alle;1708;Steenwijkerland;4;Stembureau Schoolstraat;;;;ja (20.0%);Het Verschil (61.7%), Kleurenpartij (-51.7%);;;Er is een groot verschil tussen het aantal toegelaten kiezers en het aantal uitgebrachte stemmen (20.0%). Daarnaast is er een opmerkelijk grote afwijking ten opzichte van het gemeentegemiddelde bij de volgende partijen: Het Verschil (61.7%), Kleurenpartij (-51.7%). Er is niet herteld.\n"
"Verkiezingnummer;Type;Kieskringnummer;Gemeentenummer;Gemeentenaam;Stembureaunummer;Stembureaunaam;Stembureau met nul stemmen;Stembureau >=3.0% ongeldig;Stembureau >=3.0% blanco;Stembureau >=15 of >=2.0% verschil tussen toegelaten kiezers en uitgebrachte stemmen;Stembureau met lijst >=50.0% afwijking;Mogelijk verwisselde kandidaten;Al herteld;Samenvatting\n"
"EP2024;B;alle;1708;Steenwijkerland;1;Holterberg;;;;ja (417);Kleurenpartij (51.7%);;;Er is een groot verschil tussen het aantal toegelaten kiezers en het aantal uitgebrachte stemmen (417). Daarnaast is er een opmerkelijk grote afwijking ten opzichte van het gemeentegemiddelde bij de volgende partijen: Kleurenpartij (51.7%). Er is niet herteld.\n"
"EP2024;B;alle;1708;Steenwijkerland;2;Lege boel;ja;;;;Kleurenpartij (-51.7%);;;Er is een aantal uitgebrachte stemmen van 0. Daarnaast is er een opmerkelijk grote afwijking ten opzichte van het gemeentegemiddelde bij de volgende partijen: Kleurenpartij (-51.7%). Er is niet herteld.\n"
'EP2024;B;alle;1708;Steenwijkerland;3;"""De Waarschuwing""";;ja (3.7%);ja (3.7%);ja (108);;;;Er is een hoog percentage ongeldige stemmen (3.7%). Daarnaast is er een hoog percentage blanco stemmen (3.7%). Ook is er een groot verschil tussen het aantal toegelaten kiezers en het aantal uitgebrachte stemmen (108). Er is niet herteld.\n'
"EP2024;B;alle;1708;Steenwijkerland;4;Schoolstraat;;;;ja (20.0%);Het Verschil (61.7%), Kleurenpartij (-51.7%);;;Er is een groot verschil tussen het aantal toegelaten kiezers en het aantal uitgebrachte stemmen (20.0%). Daarnaast is er een opmerkelijk grote afwijking ten opzichte van het gemeentegemiddelde bij de volgende partijen: Het Verschil (61.7%), Kleurenpartij (-51.7%). Er is niet herteld.\n"
)
assert content == expected

Expand Down

0 comments on commit 7a280c0

Please sign in to comment.