Statistical intelligence data loader providing comprehensive parliamentary and government statistics from the CIA production database. This module implements automated extraction of aggregated political intelligence metrics including member demographics, voting patterns, committee composition, and legislative productivity. Data feeds the riksdagsmonitor homepage and statistical dashboards.
Data Source: CIA (Consolidation of Intelligence Architecture) Production Database URL: https://github.com/Hack23/cia/master/service.data.impl/sample-data/extraction_summary_report.csv Update Schedule: Daily at 02:57 CET (following CIA extraction jobs) Format: CSV with aggregated statistics (no personal data) Freshness: 24-hour update window with fallback caching
Statistical Metrics Provided:
- Parliamentary Member Demographics: Age distribution, gender balance, party affiliation
- Legislative Productivity: Bills introduced, passed, rejected, pending by type
- Committee Composition: Members per committee, party representation, attendance
- Voting Patterns: Party consensus, polarization indices, coalition behavior
- Government Performance: Policy implementation status, regulatory actions, spending
- Public Opinion Indicators: Survey data links (when available from CIA)
- Historical Trends: Year-over-year statistical comparisons
Intelligence Applications:
- Homepage Statistics: Display current-term parliamentary statistics
- Dashboard Visualization: Trend analysis and comparative metrics
- Report Generation: Statistical context for news articles
- Predictive Modeling: Historical pattern analysis for forecasting
- Bench-marking: Compare Swedish Parliament against other legislatures
Data Processing Pipeline:
Stage 1 - Data Fetching: Downloads extraction_summary_report.csv from CIA GitHub repository via HTTPS. Implements cache management with 24-hour TTL to minimize network requests. Supports fallback to cached data during network outages or API unavailability. Includes health checks validating data freshness and file format.
Stage 2 - CSV Parsing: Parses CSV text into structured JavaScript objects. Handles:
- Multiple header formats (legacy CIA versions)
- Missing values and sparse data
- Type coercion for numeric fields
- Date format normalization
- Character encoding (UTF-8 with BOM handling)
Stage 3 - Data Validation: Validates parsed statistics against expected ranges and patterns:
- Completeness checks (all required fields populated)
- Semantic validation (member count > 0, percentages 0-100)
- Temporal ordering (dates in correct sequence)
- Cross-field consistency (e.g., counts sum correctly)
- Freshness validation (data not older than X days)
Stage 4 - Cache Management: Persists validated data to local cache (cia-data/production-stats.json) with metadata including parse timestamp, source version, and validation status. Implements intelligent cache invalidation on format changes or major updates.
ISMS Compliance Matrix:
ISO 27001:2022 Controls:
- A.5.33 (Protection of Records): Source attribution and audit via Git
- A.5.34 (Privacy/PII): Public officials only, no sensitive attributes
- A.8.10 (Information Deletion): Documented retention, no excessive storage
- A.8.19 (Security in Use): HTTPS-only, CSP headers, no cleartext
- A.5.23 (Access Control): GitHub authentication, branch protection
NIST CSF 2.0 Categories:
- PR.DS-5 (Protections Against Data Leaks): Public data only, HTTPS
- ID.AM-5 (Resources Prioritized): Classified as PUBLIC data
- GV.RK-01 (Governance): Data classification, retention policies
CIS Controls v8.1:
- Control 3.1 (Data Inventory): Documented public data sources
- Control 14.2 (Security in Development): No hardcoded secrets
GDPR Compliance:
- Article 6(1)(e): Processing for public interest (democratic transparency)
- Article 9(2)(e): Political opinions manifestly made public (voting records)
- Article 17 (Right to Erasure): Not applicable (historical records)
Swedish Transparency Law:
- Tryckfrihetsförordningen (TryF): Public access to government information
- Offentlighetsprincipen: Democratic principle of transparency
- Riksdagen.se: Official access to parliamentary data
- Version:
- 2.0.0
- License:
- Apache-2.0
- Source:
- See:
-
- https://github.com/Hack23/cia CIA Project - Consolidation of Intelligence Architecture
- https://riksdagen.se Swedish Parliament Official Website
- https://regeringen.se Swedish Government Official Website
- ./mcp-client.js MCP client for real-time data
- docs/STATISTICAL_INTELLIGENCE.md Statistical analysis methodology
- docs/CIA_DATA_INTEGRATION.md CIA data pipeline documentation
- docs/COMPLIANCE_MATRIX.md ISMS/GDPR compliance mapping
Methods
(inner) extractStatistics(data) → {Object}
Extract key statistics from parsed CSV data
Parameters:
| Name | Type | Description |
|---|---|---|
data |
Array.<Object> | Parsed CSV rows |
- Source:
Returns:
Statistics object
- Type
- Object
(inner) fetchCSV(url) → {Promise.<string>}
Fetch CSV from URL via HTTPS
Parameters:
| Name | Type | Description |
|---|---|---|
url |
string | CSV URL |
- Source:
Returns:
CSV text
- Type
- Promise.<string>
(inner) getCachedData(cacheFile, maxAgeHours) → {Object|null}
Check if cached data is fresh
Parameters:
| Name | Type | Description |
|---|---|---|
cacheFile |
string | Path to cache file |
maxAgeHours |
number | Maximum cache age in hours |
- Source:
Returns:
Cached data if fresh, null otherwise
- Type
- Object | null
(async, inner) main()
Main execution
- Source:
(inner) parseCSV(csvText) → {Array.<Object>}
Parse CSV text into array of objects
Parameters:
| Name | Type | Description |
|---|---|---|
csvText |
string | Raw CSV text |
- Source:
Returns:
Parsed rows
- Type
- Array.<Object>
(inner) saveCache(cacheFile, data)
Save statistics to cache file
Parameters:
| Name | Type | Description |
|---|---|---|
cacheFile |
string | Path to cache file |
data |
Object | Statistics data |
- Source: