{
  "dataset": "OpenParliament EU",
  "component": "methodology",
  "methodologies": [
    {
      "slug": "attendance",
      "name": "MEP Attendance",
      "short_description": "Share of eligible roll-call votes where the MEP cast a position (For, Against or Abstain).",
      "formula": "attendance = votes_cast / total_eligible_votes",
      "included": "Votes where the MEP recorded For, Against or Abstain.",
      "excluded": "Votes outside the MEP's mandate (before joining or after leaving). Internal procedural votes that did not require a position.",
      "limitations": "Attendance does not explain why a MEP was absent. Reasons can include parental leave, illness, official EU missions, or political reasons. The score should be interpreted as a participation indicator, not a measure of dedication.",
      "parameters": {},
      "published_at": "2026-05-01",
      "is_current": true,
      "version": "v1.0"
    },
    {
      "slug": "cosignatures",
      "name": "Co-signature / Co-authorship Network",
      "short_description": "Counts how often two MEPs appear as authors on the same parliamentary document or question.",
      "formula": "edge_count(A,B) = count(distinct documents where A and B both have participation role AUTHOR)",
      "included": "Official EP plenary documents and parliamentary questions with structured person participation data. Only participants mapped to known MEP IDs are counted. Pair counts are grouped by parliamentary term and document type.",
      "excluded": "Roll-call voting similarity, absences, non-author participation roles, unmapped persons, and documents where the upstream source does not expose structured authors. Amendments should be enabled only after validating author extraction quality for the specific source.",
      "limitations": "This metric is shared authorship/co-signature evidence. Unless the source identifies a primary author or signature order, it should not be interpreted as \u201cMEP B signed MEP A\u2019s initiative\u201d. Current v1 group/country breakdowns use current MEP affiliations, not historical affiliation on the document date.",
      "parameters": {
        "min_role": "AUTHOR",
        "pair_order": "canonical member_a_id < member_b_id"
      },
      "published_at": "2026-06-27",
      "is_current": true,
      "version": "v1.0"
    },
    {
      "slug": "delegation-cohesion",
      "name": "Delegation Cohesion",
      "short_description": "How unified a country's delegation is across all roll-call votes.",
      "formula": "cohesion = average over votes of (majority_position_count / expressed_positions_count)",
      "included": "All roll-call votes where at least one MEP from the country cast an expressed position.",
      "excluded": "Absent positions (the MEP did not vote). Votes where no MEP from the country was eligible.",
      "limitations": "A high cohesion does not mean all MEPs share the same ideology \u2014 it can reflect a small delegation with similar national priorities, or coordination on specific topics. Cohesion can vary substantially by topic.",
      "parameters": {},
      "published_at": "2026-05-01",
      "is_current": true,
      "version": "v1.0"
    },
    {
      "slug": "delegation-loyalty",
      "name": "National Delegation Alignment",
      "short_description": "How often a MEP votes with the majority position of their national delegation (MEPs from the same country).",
      "formula": "delegation_loyalty = votes_matching_delegation_majority / eligible_expressed_votes",
      "included": "Votes where the MEP cast For, Against or Abstain AND the national delegation had a clear majority position.",
      "excluded": "Votes where the MEP was absent. Votes where the national delegation had no clear majority (delegation split). Votes from before the MEP joined.",
      "limitations": "National delegations include MEPs from different political groups, so a national majority emerges from cross-group consensus. A high alignment can indicate strong national interest on a topic; a low one can indicate the MEP follows their European group over their national peers.",
      "parameters": {},
      "published_at": "2026-05-01",
      "is_current": true,
      "version": "v1.0"
    },
    {
      "slug": "group-loyalty",
      "name": "Group Loyalty",
      "short_description": "How often a MEP votes with the majority position of their European political group.",
      "formula": "group_loyalty = votes_matching_group_majority / eligible_expressed_votes",
      "included": "Votes where the MEP cast For, Against or Abstain AND the political group had a clear majority position.",
      "excluded": "Votes where the MEP was absent. Votes where the group had no clear majority (split vote). Votes from before the MEP joined the current group.",
      "limitations": "A high group loyalty does not mean the MEP agrees with everything \u2014 political groups negotiate joint positions before voting. A low loyalty can indicate ideological divergence, a national party deviating from EU group position, or principled opposition on specific files.",
      "parameters": {},
      "published_at": "2026-05-01",
      "is_current": true,
      "version": "v1.0"
    },
    {
      "slug": "importance",
      "name": "Vote Importance Score",
      "short_description": "Prioritisation indicator (0\u2013100) combining 8 transparent factors per vote.",
      "formula": "score = vote_type + legislative + topic + group_division + country_division + close_vote + turnout + rebel_votes; score = min(100, score)",
      "included": "All roll-call votes. Every factor contributes independently and is fully visible in the breakdown.",
      "excluded": "No votes are excluded \u2014 even procedural votes receive a (typically low) score.",
      "limitations": "The score is a navigation tool, not a judgement of whether the vote was good or bad. Some procedurally important votes may be hard to detect from title metadata alone. Native procedure type is not exposed by the upstream data source, so legislative weight is heuristic.",
      "parameters": {},
      "published_at": "2026-05-15",
      "is_current": true,
      "version": "v0.1"
    },
    {
      "slug": "similarity",
      "name": "MEP Similarity",
      "short_description": "How often two MEPs cast the same expressed position across votes where both were present.",
      "formula": "similarity = same_position_votes / comparable_expressed_votes",
      "included": "Votes where both MEPs cast For, Against or Abstain.",
      "excluded": "Votes where either MEP was absent. Votes outside the overlapping mandate of both MEPs.",
      "limitations": "Similarity does not imply political agreement on substance \u2014 two MEPs can vote the same way for opposite reasons. It also does not weigh the political importance of individual votes.",
      "parameters": {},
      "published_at": "2026-05-01",
      "is_current": true,
      "version": "v1.0"
    },
    {
      "slug": "topic-rules",
      "name": "Topic Classification (rule-based)",
      "short_description": "Assigns one primary and up to 3 secondary topics per vote using keyword rules, concept mappings, and country detection.",
      "formula": "confidence = min(0.98, 0.45 + min(0.4, total_weight \u00d7 0.18) + min(0.15, evidence_count \u00d7 0.05))",
      "included": "All votes are eligible. Each topic accepts a vote if its confidence exceeds 0.55.",
      "excluded": "Votes with no matching keywords or concept mappings receive no topic. Topics with confidence below the threshold are not stored.",
      "limitations": "Some procedural votes have generic titles (\"Amendment 12\") that cannot be classified without additional metadata. The rule-based classifier favours precision over recall \u2014 it is deliberately conservative.",
      "parameters": {},
      "published_at": "2026-05-22",
      "is_current": true,
      "version": "v0.1"
    }
  ]
}