Deze repository bevat scripts die als hulpmiddel dienen voor het uitvoeren van Onderdeel A van het Controleprotocol Centraal Stembureau. De scripts worden door Wonderbit op het platform teluitslagen uitgevoerd, waarbij een geüploadde .zip
met tellingsbestanden (.eml
) en proces verbalen in .odt
formaat de trigger zijn.
De functie create_csv_files
in main.py
is het ingangspunt voor de code. Parameters voor het aanroepen van deze functie zijn:
path_to_xml
: het pad naar het.eml.xml
bestand waarover je de controle uit wilt voeren. Dit is dus een EML tellingsbestand (id=510[a-dqrs]
)dest_a
,dest_b
,dest_c
: paden waar respectievelijk controlebestandena
,b
enc
weggeschreven moeten worden. De precieze inhoud van deze bestanden wordt hieronder beschrevenpath_to_odt
: optionele parameter, pad naar een proces verbaal in.odt
formaat. Geldige bestanden zijnModel_Na31-1.odt
voor een decentrale- enModel_Na31-2.odt
voor een centrale stemopneming.path_to_neighbourhood_data
: optionele parameter, pad naar wijkdata in.parquet
of.csv
formaat. Indata/
staat het meest recente beschikbare bestand. (CBS update deze eens in de zoveel tijd, dus deze zal niet altijd 100% up-to-date zijn).
Hieronder een korte beschrijving van de controles die onderdeel zijn van HCP. Deze zijn geïmplementeerd in protocol_checks.py
en worden aangeroepen in EML::run_protocol
in eml.py
.
Naam controle | Beschrijving | Output |
---|---|---|
check_zero_votes |
Controleert of het totaal aantal stemmen (getelde + ongeldige + blanco stemmen) gelijk is aan 0 | In b.csv een "ja" in de kolom "Stembureau met nul stemmen" bij stembureaus waar dit het geval is |
check_inexplicable_difference |
Geeft de waarde terug die ingevuld is onder 'geen verklaring' in de EML | In a.csv een waarde in de kolom "Aantal geen verklaring voor verschil" bij stembureaus mits deze ongelijk is aan 0 |
check_explanation_sum_difference |
Geeft het verschil tussen (het totaal aantal stemmen en het aantal toegelaten kiezers) en de som van de ingevulde verklaringen. Dus bij 6 stemmen, 5 toegelaten kiezers en een som van verklaringen van 0 is deze waarde 1 ((6-5) - 0 ) |
In a.csv het aantal dat uit deze verschilberekening komt in de kolom "Aantal ontbrekende verklaringen voor verschil" mits deze ongelijk is aan 0 |
check_too_many_rejected_votes |
Controleert of het percentage blanco of ongeldige stemmen ten opzichte van het totaal aantal uitgebrachte stemmen groter of gelijk is aan een in te stellen percentage. | In b.csv een "ja ({percentage} %)" in de bijbehorende kolom bij stembureaus waar dit het geval is |
check_too_many_differences |
Controleert of het absolute verschil tussen toegelaten kiezers ten het totaal aantal uitgebrachte stemmen groter of gelijk is aan een in te stellen percentage of absoluuut aantal. | In b.csv een "ja ({percentage} %)" of "ja ({aantal} )" in de bijbehorende kolom bij stembureaus waar dit het geval is |
check_parties_with_large_percentage_difference |
Controleert of er partijen zijn die bij een stembureau een percentage stemmen heeft behaald dat ten minste een in te stellen aantal percentagepunten verschilt van het gemiddelde in die gemeente. Voor de berekening van het gemiddelde in die gemeente wordt het betreffende stembureau niet meegenomen | In b.csv de namen van de partijen waarvoor dit het geval is, gescheiden door een komma bij de stembureaus waar dit het geval is |
check_potentially_switched_candidates |
Controleert of voorkeursstemmen tussen twee kandidaten op dezelfde lijst mogelijk verwisseld zijn. Dat wil zeggen dat een van de kandidaten veel meer (in te stellen hoeveel) stemmen heeft gekregen dan verwacht terwijl een ander veel minder gekregen heeft dan verwacht. | In b.csv de paren kandidaten waarvoor dit het geval is, gescheiden door een , in het formaat: "Mogelijke verwisseling op lijst i (lijstnaam ). Kandidaat j had v_j stemmen maar verwachting was e_j . Kandidaat k had v_k stemmen maar verwachting was e_k " |
Naast de checks die hierboven beschreven zijn, kan ook het proces-verbaal dat bij een telbestand meegeleverd wordt geparsed worden. Het doel hiervan is om stembureau's te identificeren die al een hertelling uitgevoerd hebben. Als dit het geval is, dan wordt in a.csv
de waarde "x of ja" toegevoegd aan de kolom "Al herteld". In alle gevallen moet zowel het nummer als de naam van het stembureau genoteerd staan om zeker te weten dat we deze koppelen aan het juiste stembureau in de EML. Is deze koppeling om welke reden dan ook niet mogelijk, dan gaat dit script er van uit dat er niet herteld is.
De informatie is afkomstig uit:
Stembureaus die onder 3b. of 3c. genoteerd staan.
Stembureaus die onder 7. genoteerd staan.