-
Notifications
You must be signed in to change notification settings - Fork 1
Description
๐ 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
- Repository: https://github.com/Hack23/riksdagsmonitor
- CIA Sample Data: https://github.com/Hack23/cia/tree/master/service.data.impl/sample-data
- CIA Committee Analysis: Focus on committee_* CSV files
- Swedish Riksdag Committees: https://www.riksdagen.se/sv/utskott-eu-namnden/
- D3.js Force Graph: https://d3-graph-gallery.com/network.html
- D3.js Heat Map: https://d3-graph-gallery.com/heatmap.html
- ISMS Policy: https://github.com/Hack23/ISMS-PUBLIC/blob/main/Secure_Development_Policy.md
๐ท๏ธ 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