Skip to content

๐Ÿ›๏ธ Dashboard: Committee Performance & Network Analyticsย #54

@pethers

Description

@pethers

๐Ÿ“‹ Issue Type

Feature - Data Visualization Dashboard

๐ŸŽฏ Objective

Implement comprehensive committee performance and network dashboard displaying productivity metrics, decision effectiveness, network connections, and temporal activity patterns across Riksdag's 15+ committees using CIA platform data with D3.js network visualizations.

๐Ÿ“Š Current State

  • No committee-specific visualizations
  • CIA committee data available but not consumed
  • No committee network diagrams
  • No productivity matrix displays

๐Ÿš€ Desired State

Interactive dashboard featuring:

  • Committee Network Diagram: D3.js network showing inter-committee connections
  • Productivity Matrix: Committee productivity over time (heat map)
  • Decision Effectiveness: Committee decision outcomes
  • Activity Patterns: Temporal committee activity (seasonal trends)
  • Committee Comparison: Cross-committee benchmarking

๐Ÿ“Š CIA Data Integration Context

CIA Product(s):

  • Committee Network Analysis Dashboard
  • Committee Productivity Metrics
  • Committee Performance Scorecard

Data Sources:

Primary CSV Files:
Committee Productivity:
- distribution_committee_productivity.csv (productivity breakdown)
- distribution_committee_productivity_matrix.csv (temporal matrix)
- percentile_committee_productivity_matrix.csv (P1-P99 percentiles)

Committee Activity:
- distribution_committee_activity.csv (activity levels)
- distribution_annual_committee_documents.csv (documents by year)
- distribution_annual_committee_assignments.csv (assignments by year)

Committee Decisions:
- view_riksdagen_committee_decisions.csv (decision records)
- view_riksdagen_committee_ballot_decision_summary.csv (ballot decisions)
- distribution_committee_decision_type_org_summary.csv (decision types)

Network Analysis:
- view_riksdagen_committee_ballot_decision_party_summary.csv (party connections)
- view_riksdagen_committee_ballot_decision_politician_summary.csv (MP connections)

Seasonal Patterns:
- percentile_seasonal_activity_patterns.csv (seasonal trends)

Sample Size: 500 rows (committee data)
Coverage: 15+ committees, 50+ years historical

Sample Data: Reference https://github.com/Hack23/cia/tree/master/service.data.impl/sample-data/

Methodology:

  • Network analysis from committee membership overlaps
  • Productivity scoring based on output volume and quality
  • Seasonal pattern detection (quarterly analysis)
  • Percentile benchmarking (P50, P75, P90)

Implementation Notes:

  • Fetch CSV files via GitHub raw content API
  • Cache locally in /data/cia/committees/
  • Update frequency: Weekly (committee activities weekly)
  • Handle 15+ Swedish Riksdag committees

๐Ÿ”ง Implementation Approach

1. Data Integration

async function loadCommitteeData() {
  const datasets = {
    productivity: 'distribution_committee_productivity_matrix.csv',
    decisions: 'view_riksdagen_committee_decisions.csv',
    activity: 'distribution_annual_committee_documents.csv',
    network: 'view_riksdagen_committee_ballot_decision_party_summary.csv',
    seasonal: 'percentile_seasonal_activity_patterns.csv'
  };
  
  const data = await fetchMultipleCIADatasets(datasets);
  
  return {
    productivityMatrix: buildProductivityMatrix(data.productivity),
    network: buildCommitteeNetwork(data.network),
    seasonal: analyzeSeasonalPatterns(data.seasonal)
  };
}

2. D3.js Network Visualization

// Committee network diagram
function renderCommitteeNetwork(data) {
  // Nodes = Committees (15+)
  // Links = Shared members or joint decisions
  // Color = Committee domain (finance, defense, etc.)
  // Size = Productivity score
  
  const svg = d3.select('#committeeNetwork')
    .append('svg')
    .attr('width', width)
    .attr('height', height);
  
  const simulation = d3.forceSimulation(nodes)
    .force('link', d3.forceLink(links).distance(150))
    .force('charge', d3.forceManyBody().strength(-200))
    .force('center', d3.forceCenter(width / 2, height / 2))
    .force('collision', d3.forceCollide().radius(50));
  
  // Add tooltips with committee details
  nodes.on('mouseover', showCommitteeTooltip)
       .on('click', showCommitteeDetails);
}

3. D3.js Productivity Heat Map

// Committee productivity matrix (time ร— committee)
function renderProductivityMatrix(data) {
  const svg = d3.select('#productivityMatrix')
    .append('svg');
  
  // Y-axis = Committees (15+)
  // X-axis = Years/Quarters
  // Color = Productivity score (green=high, red=low)
  
  const heatmap = svg.selectAll('rect')
    .data(data)
    .enter()
    .append('rect')
    .attr('x', d => xScale(d.period))
    .attr('y', d => yScale(d.committee))
    .attr('width', cellWidth)
    .attr('height', cellHeight)
    .attr('fill', d => colorScale(d.productivity))
    .on('mouseover', showProductivityTooltip);
}

4. HTML Structure

<section id="committee-dashboard" class="dashboard-container">
  <h2>๐Ÿ›๏ธ Committee Performance & Network</h2>
  
  <div class="dashboard-grid">
    <div class="chart-card wide">
      <h3>Committee Network Diagram</h3>
      <div id="committeeNetwork" role="img" aria-label="Committee network connections"></div>
      <table class="sr-only" id="committeeNetworkTable">
        <!-- Accessible fallback -->
      </table>
    </div>
    
    <div class="chart-card wide">
      <h3>Productivity Matrix (2020-2026)</h3>
      <div id="productivityMatrix"></div>
    </div>
    
    <div class="chart-card">
      <h3>Committee Comparison</h3>
      <canvas id="committeeComparisonChart"></canvas>
    </div>
    
    <div class="chart-card">
      <h3>Decision Effectiveness</h3>
      <canvas id="decisionEffectivenessChart"></canvas>
    </div>
    
    <div class="chart-card wide">
      <h3>Seasonal Activity Patterns</h3>
      <canvas id="seasonalPatternsChart"></canvas>
    </div>
  </div>
</section>

5. Committee List (Swedish Riksdag)

const COMMITTEES = [
  { code: 'AU', name: 'Foreign Affairs Committee', color: '#1e88e5' },
  { code: 'CU', name: 'Civil Affairs Committee', color: '#43a047' },
  { code: 'FiU', name: 'Finance Committee', color: '#fb8c00' },
  { code: 'FรถU', name: 'Defense Committee', color: '#e53935' },
  { code: 'JuU', name: 'Justice Committee', color: '#8e24aa' },
  { code: 'KU', name: 'Constitutional Committee', color: '#3949ab' },
  { code: 'KrU', name: 'Cultural Affairs Committee', color: '#00acc1' },
  { code: 'MjU', name: 'Environment Committee', color: '#7cb342' },
  { code: 'NU', name: 'Business Committee', color: '#ff6f00' },
  { code: 'SkU', name: 'Taxation Committee', color: '#d32f2f' },
  { code: 'SoU', name: 'Social Insurance Committee', color: '#c2185b' },
  { code: 'TU', name: 'Transport Committee', color: '#0097a7' },
  { code: 'UbU', name: 'Education Committee', color: '#5e35b1' },
  { code: 'UFรถU', name: 'Foreign Defense Committee', color: '#f57c00' },
  { code: 'UU', name: 'Foreign Affairs Sub-Committee', color: '#1565c0' }
];

6. Accessibility

  • Network diagram keyboard navigation
  • Alternative tables for all visualizations
  • ARIA labels and descriptions
  • High contrast mode
  • Focus indicators

๐Ÿค– Recommended Agent

data-visualization-specialist - Expert in D3.js network diagrams, heat maps, and committee analytics

Rationale: Requires advanced D3.js expertise for network diagrams and heat maps, plus understanding of Swedish parliamentary committee structure.

Custom Instructions:

- Use D3.js v7+ for network diagram and heat map
- Use Chart.js for time series and bar charts
- Implement committee network with 15+ nodes
- Create productivity heat map (quarters ร— committees)
- Use committee-specific color coding
- Add zoom/pan to network diagram
- Ensure WCAG 2.1 AA accessibility
- Support all 14 languages (committee names)
- Cache committee data locally
- Update weekly (committee activities)
- No JavaScript frameworks (vanilla JS + D3/Chart.js)

โœ… Acceptance Criteria

Data Integration

  • CIA committee CSV files fetched and parsed
  • Productivity matrix data processed
  • Network connections calculated
  • Seasonal patterns analyzed
  • Local caching in /data/cia/committees/

Network Diagram

  • D3.js force-directed graph with 15+ committees
  • Committee-specific colors assigned
  • Node size = productivity score
  • Links = shared members/decisions
  • Interactive: click for details, drag to rearrange
  • Zoom and pan functionality

Productivity Matrix

  • D3.js heat map (time ร— committee)
  • Color scale: green (high) to red (low)
  • Interactive tooltips with details
  • Quarterly or annual view toggle
  • Percentile benchmarks displayed

Quality

  • HTML validation passes
  • WCAG 2.1 AA compliance
  • Color-blind friendly palette
  • Responsive design (320px-1440px+)
  • Load time < 4 seconds
  • D3.js v7+ and Chart.js via CDN with SRI

Seasonal Analysis

  • Seasonal activity patterns displayed
  • Q1-Q4 breakdown
  • Identify high/low activity periods
  • Trend lines for multi-year patterns

Multi-Language

  • Committee names localized (14 languages)
  • Swedish abbreviations (AU, FiU, etc.) preserved
  • Chart labels translated
  • Tooltips localized

Documentation

  • Committee network methodology
  • Productivity scoring explained
  • Seasonal pattern detection algorithm
  • Update ARCHITECTURE.md with committee component

๐Ÿ“š References

๐Ÿท๏ธ Labels

type:feature, priority:high, component:visualization, component:data-integration, agent:data-visualization-specialist, cia-data, dashboard, committee-analytics, network-diagram, heat-map

๐ŸŒ Multi-Language Support

All 14 languages supported with localized committee names

๐Ÿ” Security & Compliance

  • Public Data: Parliamentary committee records (public domain)
  • No PII: Aggregated committee-level data
  • HTTPS-only: Secure data transmission
  • SRI: D3.js and Chart.js with integrity hashes
  • ISMS: Follows committee data standards

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions