/** * Election Cycle * * Models election timing, triggers, and scheduling * * Research Foundation: * - Schleiter & Morgan-Jones (2009): Citizens, Presidents, and Assemblies * - Strøm & Müller (1999): Policy, Office, or Votes? * - IPU PARLINE database: Electoral systems worldwide * * Key Findings: * - Parliamentary democracies: 48-60 months (4-5 years) * - Presidential democracies: Fixed 48-72 months * - Early elections: 15-25% probability in parliamentary systems * - Authoritarian regimes: Variable or no elections * * @module elections/ElectionCycle */ import { Government } from '../core/Government.js'; import { Coalition } from '../coalition/Coalition.js'; /** * Election state tracking */ export interface ElectionState { /** Months since last election */ monthsSinceLastElection: number; /** Next scheduled election (month) */ nextScheduledElection: number; /** Is election scheduled for next month? */ electionScheduled: boolean; /** Reason for upcoming election */ electionReason?: 'REGULAR' | 'EARLY' | 'COALITION_COLLAPSE' | 'NO_CONFIDENCE'; } /** * Initialize election state for government */ export declare function initializeElectionState(government: Government, currentMonth?: number): ElectionState; /** * Update election state (call each month) * * @param state - Current election state * @param government - Government * @param coalition - Current coalition (if any) * @param currentMonth - Current simulation month * @param rng - Random number generator * @returns Updated election state */ export declare function updateElectionState(state: ElectionState, government: Government, coalition: Coalition | null, currentMonth: number, rng?: () => number): ElectionState; /** * Check if government holds elections * * Some government types don't have elections */ export declare function holdsElections(government: Government): boolean; /** * Get months until next election */ export declare function getMonthsUntilNextElection(state: ElectionState, currentMonth: number): number; /** * Get election frequency for government type (months) */ export declare function getElectionFrequency(government: Government): number; /** * Check if early elections are allowed */ export declare function allowsEarlyElections(government: Government): boolean; /** * Calculate vote of confidence probability * * In parliamentary systems, opposition can force vote of confidence * If government loses, early election triggered * * Research: Occurs 1-2% of months in unstable coalitions */ export declare function calculateNoConfidenceProbability(coalition: Coalition, monthsSinceLastElection: number, publicSupport: number): number;