# Interface VotingRecord

Voting record for a plenary vote.

Represents a single roll-call vote conducted during a plenary session. Includes vote topic, timestamp, aggregate results, final outcome, and optionally individual MEP voting positions. Roll-call votes are recorded electronically and published for transparency.

Vote Types:

- Legislative votes (ordinary/special legislative procedure)
- Budget votes
- Resolution votes
- Procedural votes
- Amendments

Quorum: Simple majority of component MEPs (currently 353 of 705) Special Majorities: Some votes require absolute majority or 2/3 majority

Data Source: EP API `/voting-records`

#### Interface

VotingRecord

#### Example

    const vote: VotingRecord = {
      id: "VOTE-2024-11-20-001",
      sessionId: "P9-2024-11-20",
      topic: "Amendment 47 to Digital Services Act",
      date: "2024-11-20T14:30:00Z",
      votesFor: 385,
      votesAgainst: 210,
      abstentions: 45,
      result: "ADOPTED",
      mepVotes: {
        "person/124936": "FOR",
        "person/100000": "AGAINST",
        "person/198765": "ABSTAIN"
      }
    };

    // Calculate total participation
    const totalVotes = vote.votesFor + vote.votesAgainst + vote.abstentions;
    console.log(`${totalVotes} MEPs participated in this vote`);

#### Example

    // Vote without individual MEP positions (aggregate only)
    const aggregateVote: VotingRecord = {
      id: "VOTE-2024-11-21-015",
      sessionId: "P9-2024-11-21",
      topic: "Approval of 2025 Budget",
      date: "2024-11-21T18:45:00Z",
      votesFor: 420,
      votesAgainst: 180,
      abstentions: 55,
      result: "ADOPTED"
    };

#### See

- PlenarySession for session context
- MEP for voter information
- https://www.europarl.europa.eu/plenary/en/votes.html

interface VotingRecord {
abstentions: number;
date: string;
id: string;
result: "ADOPTED" | "REJECTED";
sessionId: string;
topic: string;
votesAgainst: number;
votesFor: number;
mepVotes?: Record<string, "FOR" | "AGAINST" | "ABSTAIN">;
}

- Defined in types/ep/plenary.ts:253

##### Index

### Properties

abstentions
date
id
result
sessionId
topic
votesAgainst
votesFor
mepVotes?

## Properties

### abstentions

abstentions: number

Number of abstentions.

Count of MEPs who abstained from the vote. Abstention is a recorded position distinct from absence.

EP API Field: `abstentions` Min Value: 0 Max Value: Current EP size (typically 705)

#### Example

    45

#### Example

    55

- Defined in types/ep/plenary.ts:358

### date

date: string

Vote timestamp.

Date and time when the vote was conducted in ISO 8601 format with timezone (UTC). Precise timing important for procedural records and vote sequencing.

EP API Field: `date` or `timestamp` Format: ISO 8601 datetime with timezone (YYYY-MM-DDTHH:MM:SSZ) Validation: Must be valid ISO 8601 datetime

#### Example

    "2024-11-20T14:30:00Z"

#### Example

    "2024-11-21T18:45:00Z"

- Defined in types/ep/plenary.ts:314

### id

id: string

Unique voting record identifier.

Format: "VOTE-{date}-{sequence}" where sequence is vote number within the session day.

EP API Field: `identifier` Format Pattern: `VOTE-YYYY-MM-DD-NNN` Validation: Must match `/^VOTE-\d{4}-\d{2}-\d{2}-\d{3}$/`

#### Example

    "VOTE-2024-11-20-001"

#### Example

    "VOTE-2024-11-20-042"

- Defined in types/ep/plenary.ts:267

### result

result: "ADOPTED" | "REJECTED"

Vote result outcome.

Final outcome of the vote based on voting rules (typically simple majority). "ADOPTED" means the measure passed, "REJECTED" means it failed.

EP API Field: `result`

Values:

- "ADOPTED" - Measure passed (votesFor > votesAgainst, meeting quorum)
- "REJECTED" - Measure failed (votesFor <= votesAgainst or quorum not met)

#### Example

    "ADOPTED"

#### Example

    "REJECTED"

- Defined in types/ep/plenary.ts:376

### sessionId

sessionId: string

Associated plenary session ID.

References the plenary session where this vote took place. Links vote to session context including location and broader agenda.

EP API Field: `sessionId` Format: Matches PlenarySession.id format

#### Example

    "P9-2024-11-20"

#### See

PlenarySession for session details

- Defined in types/ep/plenary.ts:282

### topic

topic: string

Vote topic or subject matter.

Human-readable description of what was being voted on. May include legislative reference, amendment number, or resolution title. Typically concise (50-200 characters).

EP API Field: `title` or `subject` Max Length: Typically 200 characters

#### Example

    "Amendment 47 to Digital Services Act (Article 5)"

#### Example

    "Motion for resolution on climate emergency"

#### Example

    "Final vote on 2025 EU Budget"

- Defined in types/ep/plenary.ts:298

### votesAgainst

votesAgainst: number

Number of votes against.

Count of MEPs who voted "AGAINST" or "NO" on the measure.

EP API Field: `against` Min Value: 0 Max Value: Current EP size (typically 705)

#### Example

    210

#### Example

    180

- Defined in types/ep/plenary.ts:343

### votesFor

votesFor: number

Number of votes in favor.

Count of MEPs who voted "FOR" or "YES" on the measure. Combined with votesAgainst and abstentions determines outcome.

EP API Field: `for` or `favour` Min Value: 0 Max Value: Current EP size (typically 705)

#### Example

    385

#### Example

    420

- Defined in types/ep/plenary.ts:329

### `Optional` mepVotes

mepVotes?: Record<string, "FOR" | "AGAINST" | "ABSTAIN">

Individual MEP voting positions.

Map of MEP IDs to their vote position for this specific vote. Optional as individual positions may not always be published or may be available separately. Used for transparency and voting pattern analysis.

EP API Field: `individualVotes` Key: MEP ID (format: "person/{id}") Value: Vote position enum

Vote Positions:

- "FOR" - Voted in favor
- "AGAINST" - Voted against
- "ABSTAIN" - Abstained from voting

#### Example

    {
       *   "person/124936": "FOR",
       *   "person/100000": "AGAINST",
       *   "person/198765": "ABSTAIN"
       * }

#### See

MEP for MEP details

- Defined in types/ep/plenary.ts:403