Aller au contenu principal
Petanque Life

Elections & Voting

F01.03 8 fonctionnalités Livré

En bref

Elections & Voting handles the full election cycle for federation positions plus the digital meetings (AGM, board, committee, EGM) where those elections happen — eligibility resolution per OrgNode level, secret online ballots, proxy chains with anti-circularity guards, quorum checks, tie-break detection, versioned signed minutes and an append-only audit log built to satisfy national association law and FIPJP statutes.

Comment ça fonctionne

An Election document carries scheduling, eligibility predicates and candidates. Voter eligibility is resolved per federation level: who can vote in an FFPJP national election differs from a club AGM, and the eligibility service consults the OrgNode tree, license status, membership age and any explicit denylist. When a candidate registers, their profile and platform are stored against the election.

Voting opens at the scheduled time. Each ballot is cast through the secure online voting endpoint, anonymised by separating the voter-identity check from the ballot-storage write — the ElectionAuditLog model validator and the service-layer _sanitize_details helper both enforce ballot secrecy so even a compromised audit reader cannot reconstruct individual votes. Proxy voting is layered on top: a voter can grant a proxy to another voter, but proxy chains are blocked (A→B→C is rejected), proxies can be limited to specific positions, max_proxies_per_voter is configurable per tenant and revocations carry a structured revocation_reason.

When voting closes the count runs with quorum verification and tie-break detection; results land at GET /public/elections/{id}/results. Around the election sits the Meeting domain (PL-T104) — a state machine draft → notice_sent → in_progress → concluded → minutes_draft → awaiting_signatures → signed. Each MeetingAgendaItem can include a voting widget with simple/2-thirds/3-quarters/consensus thresholds.

MeetingMinutes are versioned, content-hashed (SHA-256) and the signed PDF is WORM-archived. Signing runs through a pluggable adapter — BankID, Freja eID (qualified electronic signature), DocuSign, Clickwrap or eIDAS Wallet — gated by the tenant's SigningConfig.allowed_providers and require_qualified_signature flag. Two scheduled jobs (meeting-reminder-dispatch, minutes-signature-expiry) keep the workflow moving, and the Freja webhook is HMAC-SHA256-validated.

Capacités clés

  • Schedule and announce elections with eligibility rules tailored per OrgNode level.
  • Run secret online ballots whose audit trail provably cannot reconstruct individual votes.
  • Support proxy voting with chain prevention, position scoping and configurable per-voter caps.
  • Detect quorum failures and tied results during count and publish verifiable outcomes.
  • Drive AGMs, board meetings and EGMs through a notice-to-signed-minutes state machine.
  • Sign minutes with qualified electronic signatures via BankID, Freja eID, DocuSign or eIDAS.

En pratique

An SBF club secretary needs to convene an extraordinary general meeting on a Friday evening to approve revised statutes. She creates the Meeting in state draft, attaches the agenda item with a 2-thirds voting widget, and triggers notice_sent — the platform mails every eligible member with a unique join link. Two members cannot attend and grant her their proxies (chain block engages and stops a third member from re-delegating).

At the meeting, in_progress, she opens the vote — 18 in favour, 4 against, 2 abstain, 2-thirds threshold met. Minutes are drafted, content-hashed, and routed to the chair and two adjusters for Freja eID signing. When the third signature lands, the WORM-archived PDF replaces the draft and the meeting transitions to signed.

The ElectionAuditLog and minutes-signature-expiry job take over from there.

Fonctionnalités de ce sous-système

8
ID Status Fonctionnalités
F01.03.01 Livré Election scheduling and announcement ✅ PL-F0103a
F01.03.02 Livré Candidate registration and profile ✅ PL-F0103a
F01.03.03 Livré Voter eligibility rules per federation level ✅ PL-F0103a
F01.03.04 Livré Secure online voting (anonymous, verifiable) ✅ PL-F0103a
F01.03.05 Livré Vote counting and result publication ✅ PL-F0103b
F01.03.06 Livré Proxy voting support ✅ PL-F0103b
F01.03.07 Livré Audit trail on voting processes ✅ PL-F0103b
F01.03.08 Livré Governance meetings (AGM, board, committee) with quorum, voting, minutes and QES signing via Freja eID/BankID/DocuSign ✅ PL-T104