๐ CIA JSON Export System - Static CDN Deployment
May 24, 2026 ยท View on GitHub
Comprehensive Political Intelligence Data for JavaScript Applications
Version: 1.1.0
Date: 2024-12-03
Purpose: Static JSON data exports for CDN hosting and JavaScript consumption
Update Frequency: Daily automated updates
โ Schema Validation Status
The 5 JSON export schemas are continuously validated against 138 relevant CSV sample data files (filtered from 210+ total files) to ensure correctness. See VALIDATION_README.md for details.
Latest Validation: 5 schemas validated, 138 files analyzed (View Report)
Test Coverage: 18 unit tests covering field parsing, type inference, and validation logic (Run Tests)
Validation Notes:
- 125 field mismatches documented between original projected schemas and actual implemented data
- Mismatches represent fields that were planned but not yet implemented in the database
- Data-validated schemas (
*-schema-validated.md) reflect actual current data structure (Summary) - Intelligence schema passes with 0 mismatches โ
๐ Business Context & Product Integration
These JSON specifications are the technical foundation for the CIA product portfolio, enabling all 6 product lines with structured political intelligence data.
Business Strategy Documentation
- BUSINESS_PRODUCT_DOCUMENT.md - Complete business strategy with product-to-data mapping (โฌ46M TAM)
- BUSINESS_PRODUCT_DOCUMENT.md#technical-data-specifications - Product-to-Data Mapping Table
- BUSINESS_PRODUCT_DOCUMENT.md#appendix-e-product-to-data-mapping - Comprehensive traceability from features to data
Market Opportunity
The JSON specifications power products serving 5 customer segments with โฌ46M Total Addressable Market:
- Political Consulting (โฌ15M TAM) - Politician risk assessment, voting statistics
- Media & Journalism (โฌ8M TAM) - Real-time political monitoring, investigative data
- Academic Research (โฌ5M TAM) - Comprehensive datasets, bulk exports
- Corporate Affairs (โฌ12M TAM) - Government affairs monitoring, regulatory tracking
- Financial Services (โฌ20M+ TAM) - Political risk intelligence, early warning systems
Product Line Integration
| Product Line | JSON Schemas Used | Revenue Potential | Customer Segments |
|---|---|---|---|
| Political Intelligence API | politician-schema.md, party-schema.md | โฌ630K/year | Political consulting, media, academic |
| Advanced Analytics Suite | intelligence-schema.md, All schemas | โฌ855K/year | Corporate affairs, NGOs, political parties |
| Risk Intelligence Feed | intelligence-schema.md | โฌ1.77M/year | Financial services, corporate risk, consulting |
| Predictive Analytics | intelligence-schema.md, party-schema.md | โฌ2.05M/year | Strategic consulting, corporate strategy, campaigns |
| White-Label Platform | All schemas | โฌ1.7M-4.7M/year | Government agencies, international orgs, consulting |
| Decision Intelligence | intelligence-schema.md, ministry-schema.md | โฌ2.09M/year | Lobbying, corporate affairs, media |
Total Annual Revenue Potential: โฌ9.1M+ from JSON-powered products
๐ฏ Executive Summary
The CIA JSON Export System transforms the comprehensive political intelligence database into structured, versioned JSON files optimized for static CDN hosting. This enables lightweight JavaScript applications, data visualization tools, and third-party integrations to access Swedish political data without direct database connections.
Key Benefits
- ๐ High Performance: Static JSON files served via CDN with global edge caching
- ๐ฐ Cost-Effective: Eliminate database query costs, pay only for storage and bandwidth
- ๐ Secure: Read-only data access, no database credentials exposed
- ๐ Universal Access: CORS-enabled, accessible from any JavaScript application
- ๐ฑ Mobile-Friendly: Optimized JSON sizes for mobile and low-bandwidth scenarios
- ๐ Always Current: Daily automated updates from live database
Data Coverage
| Entity Type | Records | Update Frequency | Avg File Size |
|---|---|---|---|
| Politicians | ~350 active | Daily | ~2.5 MB |
| Parties | 8 parliamentary | Daily | ~500 KB |
| Ministries | 12 government | Daily | ~800 KB |
| Committees | 15 riksdag | Daily | ~600 KB |
| Intelligence Products | Risk scores, trends | Daily | ~1.2 MB |
Implementation Status
โ v1.36 Update (2024-12-08): Core JSON export service layer completed
Implemented Components:
- โ
IntelligenceExportService - Service interface for JSON exports (
service.data.api) - โ
IntelligenceExportServiceImpl - Jackson-based JSON serialization (
service.data.impl) - โ Export DTOs - Data transfer objects for risk assessments, coalition alignment, temporal trends
- โ Unit Tests - Comprehensive tests with Mockito (6/6 passing)
- โ Build Integration - Clean compile and test pass in CI/CD pipeline
Ready for Integration:
exportRiskAssessments()- Exports all rule violations with severity and metadataexportCoalitionAlignment()- Exports party alignment matrix with voting cohesionexportTemporalTrends()- Exports decision trends with daily/weekly/monthly moving averageswriteJsonToFile()- File writer for CDN-ready static JSON generation
Next Steps:
- REST endpoint integration (planned)
- Scheduled daily export job (planned)
- CDN deployment automation (planned)
Technical Foundation: Service layer built on Spring Framework with JPA/Hibernate, using existing DAO layer for database access to:
RuleViolationDAOโ Risk assessment data (50 behavioral rules)ViewRiksdagenCoalitionAlignmentMatrixDAOโ Coalition alignment dataViewDecisionTemporalTrendsDAOโ Temporal trend analysis data
๐ Table of Contents
- Architecture Overview
- JSON Schema Specifications
- Data Categories & Labels
- Field Completeness Validation
- File Structure & Naming
- CDN Deployment Guide
- JavaScript Usage Examples
- Update & Versioning Strategy
- API Compatibility
๐๏ธ Architecture Overview
%%{
init: {
"theme": "base",
"themeVariables": {
"primaryColor": "#e8f5e9",
"primaryTextColor": "#2e7d32",
"lineColor": "#4caf50",
"secondaryColor": "#e3f2fd",
"tertiaryColor": "#fff3e0",
"primaryBorderColor": "#2e7d32",
"fontSize": "16px"
}
}
}%%
graph TB
subgraph "๐ Data Source Layer"
DB[(PostgreSQL Database<br/>85 Views)]
VIEWS["Intelligence Views<br/>Politicians, Parties,<br/>Ministries, Committees"]
end
subgraph "๐ Export Pipeline"
EXPORT[JSON Export Service<br/>Java/Spring]
TRANSFORM[Data Transformation<br/>Schema Mapping]
VALIDATE[JSON Validation<br/>Schema Compliance]
end
subgraph "๐ฆ Storage Layer"
S3[S3 Bucket<br/>Static JSON Files]
VERSIONS["Version Control<br/>v1, v2, latest"]
end
subgraph "๐ CDN Distribution"
CDN[CloudFront CDN<br/>Global Edge Locations]
CACHE[Edge Caching<br/>24h TTL]
end
subgraph "๐ฅ Consumer Applications"
WEB[Web Applications<br/>JavaScript/React]
VIZ[Data Visualizations<br/>D3.js/Chart.js]
MOBILE[Mobile Apps<br/>Hybrid/PWA]
THIRD[Third-Party APIs<br/>Integrations]
end
DB --> VIEWS
VIEWS --> EXPORT
EXPORT --> TRANSFORM
TRANSFORM --> VALIDATE
VALIDATE --> S3
S3 --> VERSIONS
VERSIONS --> CDN
CDN --> CACHE
CACHE --> WEB
CACHE --> VIZ
CACHE --> MOBILE
CACHE --> THIRD
style DB fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
style EXPORT fill:#bbdefb,stroke:#1976d2,stroke-width:3px
style S3 fill:#fff9c4,stroke:#f57f17,stroke-width:3px
style CDN fill:#ffccbc,stroke:#d84315,stroke-width:3px
style WEB fill:#e1bee7,stroke:#7b1fa2,stroke-width:3px
Data Flow Pipeline
- ๐ฅ Data Extraction: Query materialized views from PostgreSQL database
- ๐ Transformation: Map database records to JSON schema with labels
- โ Validation: Verify JSON schema compliance and data quality
- ๐พ Storage: Write versioned JSON files to S3 bucket
- ๐ Distribution: Invalidate CDN cache and propagate to edge locations
- ๐ Consumption: JavaScript applications fetch JSON via HTTPS
๐ JSON Schema Specifications
Schema Design Principles
- Consistent Structure: All JSON files follow standardized patterns
- Rich Metadata: Include timestamps, versions, source attribution
- Multi-Level Descriptions: Short (tweet), long (paragraph), detailed (essay)
- Category Labels: Hierarchical classification system
- Relationship Links: Cross-references between entities
- Performance Optimized: Minimal nesting, efficient serialization
Common JSON Structure
{
"metadata": {
"version": "1.0.0",
"generated": "2024-11-24T02:23:58Z",
"source": "Citizen Intelligence Agency",
"schema": "politician-profile",
"recordCount": 349,
"dataDate": "2024-11-23"
},
"data": [
{
"id": "unique-identifier",
"labels": {
"category": "primary-classification",
"subcategories": ["tag1", "tag2"],
"descriptions": {
"short": "One-line summary (max 140 chars)",
"long": "Paragraph description (max 500 chars)",
"detailed": "Comprehensive overview with context"
}
},
"attributes": {
// Entity-specific fields
},
"relationships": {
// Cross-references to related entities
},
"intelligence": {
// Analytical metrics and scores
}
}
]
}
Schema-to-Product Mapping
Each JSON schema directly supports specific product features and customer use cases:
| Schema File | Product Lines | Key Features | Business Value | Customer Segments |
|---|---|---|---|---|
| politician-schema.md | Political Intelligence API, Advanced Analytics, Risk Intelligence | Politician profiles, voting records, risk scores, activity metrics | Core API product, โฌ15M TAM | Political consulting, media, academic |
| party-schema.md | Political Intelligence API, Advanced Analytics, Predictive Analytics | Party performance, coalition patterns, voting trends | Coalition analysis, โฌ12M TAM | Corporate affairs, political consulting |
| committee-schema.md | Advanced Analytics, Decision Intelligence | Committee composition, proposal tracking, effectiveness metrics | Legislative monitoring, โฌ8M TAM | Government affairs, lobbying |
| ministry-schema.md | Decision Intelligence, White-Label Platform | Government ministry data, decision flows, policy effectiveness | Regulatory forecasting, โฌ10M TAM | Corporate risk, consulting firms |
| intelligence-schema.md | Risk Intelligence, Predictive Analytics, Decision Intelligence | Risk assessment, predictions, decision analytics, trend forecasting | Premium analytics, โฌ30M+ TAM | Financial services, strategic consulting |
See Complete Product Documentation: BUSINESS_PRODUCT_DOCUMENT.md
Data Model Overview
%%{
init: {
"theme": "base",
"themeVariables": {
"primaryColor": "#e1f5ff",
"primaryTextColor": "#0277bd",
"lineColor": "#0288d1",
"secondaryColor": "#c8e6c9",
"tertiaryColor": "#fff9c4",
"primaryBorderColor": "#0277bd",
"fontSize": "14px"
}
}
}%%
graph LR
subgraph "Core Entities"
POL[Politician<br/>349 active<br/>~9KB each]
PARTY[Party<br/>8 parliamentary<br/>~7KB each]
COMM[Committee<br/>15 riksdag<br/>~17KB each]
MIN[Ministry<br/>12 government<br/>~19KB each]
end
subgraph "Intelligence Products"
RISK[Risk Assessment<br/>50 behavioral rules<br/>~14KB]
COAL[Coalition Alignment<br/>Party alignment matrix<br/>~9KB]
TREND[Temporal Trends<br/>Multi-timeframe<br/>~13KB]
end
subgraph "Advanced Analysis"
CAREER[Career Path<br/>10-level hierarchy<br/>~5KB]
ELECTION[Election Proximity<br/>5-phase tracking<br/>~11KB]
LONGIT[Longitudinal<br/>Multi-semester<br/>~10KB]
end
subgraph "Relationships"
REL_POL_PARTY[Member of]
REL_POL_COMM[Serves on]
REL_POL_MIN[Minister in]
REL_PARTY_COAL[Aligns with]
REL_COMM_MIN[Oversees]
end
POL -->|REL_POL_PARTY| PARTY
POL -->|REL_POL_COMM| COMM
POL -->|REL_POL_MIN| MIN
PARTY -->|REL_PARTY_COAL| PARTY
COMM -->|REL_COMM_MIN| MIN
POL -.->|Generates| RISK
PARTY -.->|Generates| COAL
POL -.->|Generates| TREND
POL -.->|Tracked by| CAREER
POL -.->|Analyzed by| ELECTION
PARTY -.->|Tracked by| LONGIT
style POL fill:#bbdefb,stroke:#1976d2,stroke-width:2px
style PARTY fill:#c8e6c9,stroke:#388e3c,stroke-width:2px
style COMM fill:#ffccbc,stroke:#d84315,stroke-width:2px
style MIN fill:#fff9c4,stroke:#f57f17,stroke-width:2px
style RISK fill:#f8bbd0,stroke:#c2185b,stroke-width:2px
style CAREER fill:#e1bee7,stroke:#7b1fa2,stroke-width:2px
Entity Relationships:
- Politicians are members of parties and serve on committees
- Some politicians are ministers in government ministries
- Committees oversee specific ministries
- Parties form coalitions and align on voting
- All entities generate intelligence products and analytics
Schema Versions and Field Validation
The JSON export system maintains two versions of each schema to handle the difference between planned features and current implementation:
Original Schemas (Projected Features)
- Files:
*-schema.md(e.g.,politician-schema.md) - Purpose: Define the complete vision for JSON exports including future features
- Fields: Include both implemented and planned analytical fields
- Usage: Guide for API development and feature roadmap
Data-Validated Schemas (Current Reality)
- Files:
*-schema-validated.md(e.g.,politician-schema-validated.md) - Purpose: Reflect actual available data in current database
- Fields: Only fields with data in sample CSV files (138 files analyzed)
- Usage: Accurate representation of what can be exported today
- Summary: VALIDATED_SCHEMAS_SUMMARY.md
Field Mismatch Summary (Original vs. Validated):
- Politician: 46 projected โ 12 validated (74% not yet implemented)
- Party: 43 projected โ 3 validated (93% not yet implemented)
- Committee: 26 projected โ 2 validated (92% not yet implemented)
- Ministry: 29 projected โ 1 validated (97% not yet implemented)
- Intelligence: Fully aligned โ (0 mismatches)
Why mismatches exist: The original schemas were created as a forward-looking specification before all database views were populated with data. The validated schemas show what's currently available, while original schemas guide future implementation.
Detailed Schema Documentation
All schemas are documented in Markdown format with:
- Entity structure and field definitions
- Database view mappings (from 85 available views)
- Sample data with real examples
- Mermaid diagrams for visual representation
- Intelligence applications and use cases
Complete Schema Catalog:
- schemas/politician-schema.md - 19,893 bytes, comprehensive politician data model
- schemas/party-schema.md - 19,748 bytes, party performance and coalition analytics
- schemas/committee-schema.md - 10,245 bytes, committee composition and proposals
- schemas/ministry-schema.md - 10,949 bytes, government ministry performance
- schemas/intelligence-schema.md - 17,122 bytes, risk assessment and predictive models
Database View Integration: All schemas map to specific database views documented in DATABASE_VIEW_INTELLIGENCE_CATALOG.md (85 views total).
Example JSON Files (CDN-Ready)
The following example files demonstrate the complete JSON export format for each intelligence product:
Core Entity Examples
| Example File | Schema | Description | File Size | Update Frequency |
|---|---|---|---|---|
| politician-example.json | politician-schema.md | Comprehensive politician profiles with voting, activity, and risk data | ~9 KB | Daily |
| party-example.json | party-schema.md | Party performance, coalition, and electoral analytics | ~7 KB | Daily |
| committee-example.json | committee-schema.md | Committee composition, productivity, and decision patterns | ~17 KB | Daily |
| ministry-example.json | ministry-schema.md | Ministry organization, budget, and performance metrics | ~19 KB | Daily |
Intelligence Product Examples
| Example File | Schema | Description | File Size | Update Frequency |
|---|---|---|---|---|
| risk-assessment-example.json | intelligence-schema.md | Risk assessment with 50 behavioral rules catalog | ~14 KB | Daily |
| coalition-alignment-example.json | intelligence-schema.md | Coalition alignment matrix and party voting patterns | ~9 KB | Daily |
| temporal-trends-example.json | intelligence-schema.md | Temporal trend analysis (daily/weekly/monthly/annual) | ~13 KB | Daily |
Advanced Analysis Examples (v1.58-v1.61)
| Example File | Schema | Description | File Size | Update Frequency |
|---|---|---|---|---|
| politician-career-path-example.json | politician-schema.md | Career progression with 10-level hierarchy and risk assessment | ~5 KB | Daily |
| election-proximity-trends-example.json | intelligence-schema.md | Quarterly activity tracking relative to election dates | ~11 KB | Daily |
| party-longitudinal-performance-example.json | party-schema.md | Multi-semester performance trends with forecasting | ~10 KB | Daily |
๐ Complete Documentation: See examples/EXAMPLES_README.md for comprehensive guide to all examples.
Intelligence Products Coverage:
- โ Risk Assessments: Complete 50-rule risk catalog with entity-level assessments
- โ Coalition Analysis: Party alignment matrix with voting cohesion metrics
- โ Temporal Trends: Multi-timeframe trend analysis for intelligence monitoring
- โ Politician Profiles: Individual politician data with risk and performance scores
- โ Party Analytics: Party-level performance and coalition stability metrics
- โ Committee Analysis: Productivity, decision patterns, and influence metrics
- โ Ministry Performance: Budget execution, policy effectiveness, and predictions
- โ Career Progression: 10-level career path with behavioral and network metrics
- โ Election Cycle Analysis: Pre-election activity surge detection and phase classification
- โ Longitudinal Trends: Multi-semester performance tracking with forecasting indicators
โ Field Completeness Validation
Overview
The JSON export system includes automated validation to ensure sample CSV files contain all required fields for JSON transformation. This prevents API failures and ensures data product completeness.
Validation Script
Location: json-export-specs/validate-field-completeness.sh
Purpose: Validates that sample CSV files contain the required database columns to support all 5 JSON export schemas.
Running Validation
# From json-export-specs directory
bash validate-field-completeness.sh
# With detailed output
bash validate-field-completeness.sh --verbose
# Generate markdown report (automatic)
# Report saved to: FIELD_COMPLETENESS_REPORT.md
Validation Results
| Schema | Primary CSV | Required Fields | Status |
|---|---|---|---|
| politician-schema.md | view_riksdagen_politician_sample.csv | 21 fields | โ 100% |
| party-schema.md | view_riksdagen_party_sample.csv | 6 fields | โ 100% |
| committee-schema.md | view_riksdagen_committee_sample.csv | 7 fields | โ 100% |
| ministry-schema.md | view_riksdagen_goverment_sample.csv | 8 fields | โ 100% |
| intelligence-schema.md | table_rule_violation_sample.csv | 9 fields | โ 100% |
Overall Completeness: 100% (all required fields present across all schemas)
Schema-to-CSV Mappings
Each JSON schema maps to specific database views and tables:
Politician Schema
- Primary CSV:
view_riksdagen_politician_sample.csv(sample extract; row counts may vary, column structure validated by CI) - Required Fields: person_id, first_name, last_name, party, born_year, gender, total_days_served, active, and 13 more
- Additional CSVs: view_riksdagen_vote_data_ballot_politician_summary_sample.csv, view_riksdagen_politician_document_summary_sample.csv
Party Schema
- Primary CSV:
view_riksdagen_party_sample.csv(sample extract; row counts may vary, column structure validated by CI) - Required Fields: party_id, party_name, head_count, total_documents, documents_last_year, registered_date
- Additional CSVs: view_riksdagen_party_summary_sample.csv, view_riksdagen_party_ballot_support_annual_summary_sample.csv
Committee Schema
- Primary CSV:
view_riksdagen_committee_sample.csv(sample extract; row counts may vary, column structure validated by CI) - Required Fields: embedded_id_org_code, current_member_size, active, total_documents, total_assignments, first/last_assignment_date
- Additional CSVs: view_committee_productivity_sample.csv
Ministry Schema
- Primary CSV:
view_riksdagen_goverment_sample.csv(sample extract; row counts may vary, column structure validated by CI) - Required Fields: name_id, active, current_member_size, total_documents, total_propositions, total_government_bills, first/last_assignment_date
- Additional CSVs: view_ministry_decision_impact_sample.csv
Intelligence Schema
- Primary CSV:
table_rule_violation_sample.csv(sample extract; row counts may vary, column structure validated by CI) - Required Fields: rule_name, reference_id, resource_type, status, name, rule_description, rule_group, detected_date, positive
- Additional CSVs: view_riksdagen_politician_summary_sample.csv, view_riksdagen_party_summary_sample.csv, and decision flow views
CI Integration
Field completeness validation runs automatically on:
- Pull requests modifying JSON schemas or sample CSV files
- Pushes to master/develop branches
- Changes to the validation script itself
Workflow: .github/workflows/validate-field-completeness.yml
Uses bash script validation following repository patterns with harden-runner security.
Troubleshooting
Missing Fields:
- Check database view definition for correct column names
- Verify sample CSV extraction query includes all required fields
- Re-extract sample data:
SELECT * FROM view_name LIMIT 50 - Re-run validation to confirm completeness:
bash validate-field-completeness.sh
CSV Not Found:
- Verify view exists in database schema
- Check sample-data directory for correct filename
- Extract sample if missing:
psql -d cia_dev -c "COPY (SELECT * FROM view_name LIMIT 50) TO '/path/sample.csv' CSV HEADER" - Re-run validation:
bash validate-field-completeness.sh
Field Name Mismatch:
- Database columns use snake_case (e.g.,
first_name) - JSON schemas use camelCase (e.g.,
firstName) - Validation checks database column names, not JSON field names
Related Documentation
- FIELD_COMPLETENESS_REPORT.md - Detailed validation report
- BUSINESS_PRODUCT_DOCUMENT.md - Product-to-data mappings
- DATABASE_VIEW_INTELLIGENCE_CATALOG.md - Complete view catalog
๐ท๏ธ Data Categories & Labels
Label System Architecture
%%{
init: {
"theme": "base",
"themeVariables": {
"primaryColor": "#e3f2fd",
"primaryTextColor": "#1565c0",
"lineColor": "#42a5f5",
"secondaryColor": "#f3e5f5",
"tertiaryColor": "#fff3e0",
"primaryBorderColor": "#1565c0",
"fontSize": "14px"
}
}
}%%
graph TB
ROOT[Entity Root]
subgraph "๐๏ธ Politicians"
POL_CAT[Category: Politician]
POL_SUB1[Active Member]
POL_SUB2[Former Member]
POL_SUB3[Minister]
POL_SUB4[Committee Chair]
end
subgraph "๐ญ Parties"
PARTY_CAT[Category: Party]
PARTY_SUB1[Government Coalition]
PARTY_SUB2[Opposition]
PARTY_SUB3[Left Wing]
PARTY_SUB4[Right Wing]
PARTY_SUB5[Center]
end
subgraph "๐ข Ministries"
MIN_CAT[Category: Ministry]
MIN_SUB1[Policy Area]
MIN_SUB2[Budget Size]
MIN_SUB3[Coalition Member]
end
subgraph "๐ฅ Committees"
COM_CAT[Category: Committee]
COM_SUB1[Standing Committee]
COM_SUB2[Policy Domain]
COM_SUB3[Activity Level]
end
ROOT --> POL_CAT
ROOT --> PARTY_CAT
ROOT --> MIN_CAT
ROOT --> COM_CAT
POL_CAT --> POL_SUB1
POL_CAT --> POL_SUB2
POL_CAT --> POL_SUB3
POL_CAT --> POL_SUB4
PARTY_CAT --> PARTY_SUB1
PARTY_CAT --> PARTY_SUB2
PARTY_CAT --> PARTY_SUB3
PARTY_CAT --> PARTY_SUB4
PARTY_CAT --> PARTY_SUB5
MIN_CAT --> MIN_SUB1
MIN_CAT --> MIN_SUB2
MIN_CAT --> MIN_SUB3
COM_CAT --> COM_SUB1
COM_CAT --> COM_SUB2
COM_CAT --> COM_SUB3
style POL_CAT fill:#bbdefb,stroke:#1976d2,stroke-width:3px
style PARTY_CAT fill:#c8e6c9,stroke:#388e3c,stroke-width:3px
style MIN_CAT fill:#fff9c4,stroke:#f57f17,stroke-width:3px
style COM_CAT fill:#ffccbc,stroke:#d84315,stroke-width:3px
Category Definitions
Politicians
- Primary Categories: Active Member, Former Member, Minister, Committee Chair, Party Leader
- Subcategories: Electoral District, Party Affiliation, Committee Memberships, Cabinet Positions
- Intelligence Tags: High Risk, Rising Star, Coalition Broker, Policy Expert, Media Influencer
Parties
- Primary Categories: Government Coalition, Opposition, Parliamentary, Extra-Parliamentary
- Subcategories: Ideological Spectrum (Left, Center, Right), Policy Focus, Coalition History
- Intelligence Tags: Stable, Volatile, Growing, Declining, Swing Voter Appeal
Ministries
- Primary Categories: Cabinet Ministry, Administrative Agency, Policy Domain
- Subcategories: Budget Allocation, Staff Size, Coalition Control, Reform Agenda
- Intelligence Tags: High Performance, Budget Concerns, Reform Focus, Crisis Management
Committees
- Primary Categories: Standing Committee, Special Committee, EU Committee
- Subcategories: Policy Domain, Activity Level, Cross-Party Cooperation
- Intelligence Tags: Productive, Contentious, Consensus-Building, Media Focus
๐ File Structure & Naming
Directory Layout
json-export/
โโโ v1.0.0/ # Version directory
โ โโโ metadata.json # Export metadata
โ โโโ politicians/
โ โ โโโ index.json # All politicians list
โ โ โโโ active.json # Active politicians only
โ โ โโโ by-party/
โ โ โ โโโ s.json # Social Democrats
โ โ โ โโโ m.json # Moderates
โ โ โ โโโ ...
โ โ โโโ by-committee/
โ โ โ โโโ au.json # Foreign Affairs
โ โ โ โโโ ju.json # Justice
โ โ โ โโโ ...
โ โ โโโ profiles/
โ โ โโโ {personId}.json # Individual profiles
โ โ โโโ ...
โ โโโ parties/
โ โ โโโ index.json # All parties
โ โ โโโ parliamentary.json # Parliamentary parties
โ โ โโโ profiles/
โ โ โ โโโ {partyId}.json # Individual party profiles
โ โ โ โโโ ...
โ โ โโโ analytics/
โ โ โโโ voting-cohesion.json
โ โ โโโ electoral-trends.json
โ โ โโโ coalition-matrix.json
โ โโโ ministries/
โ โ โโโ index.json
โ โ โโโ current-government.json
โ โ โโโ profiles/
โ โ โ โโโ {ministryId}.json
โ โ โ โโโ ...
โ โ โโโ performance/
โ โ โโโ budget-execution.json
โ โ โโโ policy-effectiveness.json
โ โโโ committees/
โ โ โโโ index.json
โ โ โโโ standing.json
โ โ โโโ profiles/
โ โ โ โโโ {committeeId}.json
โ โ โ โโโ ...
โ โ โโโ productivity/
โ โ โโโ legislation-output.json
โ โ โโโ decision-timeline.json
โ โโโ intelligence/
โ โโโ risk-assessments.json
โ โโโ trend-analysis.json
โ โโโ coalition-stability.json
โ โโโ voting-patterns.json
โ โโโ predictive-analytics.json
โโโ latest/ # Symlink to current version
โโโ ... (mirrors v1.0.0 structure)
Naming Conventions
- Version Format: Semantic versioning (MAJOR.MINOR.PATCH)
- File Names: Lowercase, hyphen-separated, descriptive
- IDs: Use official identifiers from source systems
- Timestamps: ISO 8601 format (UTC)
๐ CDN Deployment Guide
Recommended CDN Options
Option 1: AWS S3 + CloudFront (Recommended)
Cost: ~$15-30/month for 100GB storage + 1TB transfer
# 1. Create S3 bucket
aws s3 mb s3://cia-json-export --region eu-north-1
# 2. Configure public read access
aws s3api put-bucket-policy --bucket cia-json-export --policy '{
"Version": "2012-10-17",
"Statement": [{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::cia-json-export/*"
}]
}'
# 3. Enable CORS
aws s3api put-bucket-cors --bucket cia-json-export --cors-configuration '{
"CORSRules": [{
"AllowedOrigins": ["*"],
"AllowedMethods": ["GET", "HEAD"],
"AllowedHeaders": ["*"],
"MaxAgeSeconds": 3600
}]
}'
# 4. Create CloudFront distribution
aws cloudfront create-distribution --origin-domain-name cia-json-export.s3.amazonaws.com
Configuration:
- Cache Behavior: 24-hour TTL
- Compression: Gzip enabled
- HTTPS: Required
- Query String Forwarding: None
- Geo Restrictions: None
Option 2: Cloudflare Pages
Cost: Free tier (unlimited bandwidth)
- Create Cloudflare account
- Add custom domain or use pages.dev subdomain
- Deploy via Git integration or Wrangler CLI
- Configure caching rules and CORS headers
Option 3: Netlify
Cost: Free tier (100GB bandwidth/month)
# Deploy with Netlify CLI
npm install -g netlify-cli
netlify deploy --prod --dir=json-export
CORS Configuration
{
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, HEAD, OPTIONS",
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Max-Age": "86400",
"Cache-Control": "public, max-age=86400"
}
๐ป JavaScript Usage Examples
Basic Fetch Example
// Fetch all politicians
async function fetchPoliticians() {
const response = await fetch('https://cdn.cia.se/v1.0.0/politicians/index.json');
const data = await response.json();
console.log(`Loaded ${data.metadata.recordCount} politicians`);
return data.data;
}
// Fetch specific politician profile
async function fetchPoliticianProfile(personId) {
const response = await fetch(`https://cdn.cia.se/v1.0.0/politicians/profiles/${personId}.json`);
return response.json();
}
React Integration
import { useState, useEffect } from 'react';
function PoliticianList() {
const [politicians, setPoliticians] = useState([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetch('https://cdn.cia.se/v1.0.0/politicians/active.json')
.then(res => res.json())
.then(data => {
setPoliticians(data.data);
setLoading(false);
})
.catch(err => console.error('Failed to load politicians:', err));
}, []);
if (loading) return <div>Loading...</div>;
return (
<div>
<h2>Active Politicians ({politicians.length})</h2>
<ul>
{politicians.map(pol => (
<li key={pol.id}>
{pol.attributes.firstName} {pol.attributes.lastName}
({pol.attributes.party})
<p>{pol.labels.descriptions.short}</p>
</li>
))}
</ul>
</div>
);
}
Vue.js Integration
<template>
<div>
<h2>Parliamentary Parties</h2>
<div v-for="party in parties" :key="party.id">
<h3>{{ party.attributes.name }}</h3>
<p>{{ party.labels.descriptions.long }}</p>
<span>Members: {{ party.intelligence.memberCount }}</span>
</div>
</div>
</template>
<script>
export default {
data() {
return {
parties: []
};
},
async mounted() {
const response = await fetch('https://cdn.cia.se/v1.0.0/parties/parliamentary.json');
const data = await response.json();
this.parties = data.data;
}
};
</script>
Data Visualization (D3.js)
// Load and visualize party voting cohesion
async function visualizePartyVoting() {
const response = await fetch('https://cdn.cia.se/v1.0.0/parties/analytics/voting-cohesion.json');
const data = await response.json();
const svg = d3.select('#chart')
.append('svg')
.attr('width', 800)
.attr('height', 400);
// Create bar chart showing party cohesion scores
svg.selectAll('rect')
.data(data.data)
.enter()
.append('rect')
.attr('x', (d, i) => i * 90 + 50)
.attr('y', d => 350 - d.intelligence.cohesionScore * 3)
.attr('width', 70)
.attr('height', d => d.intelligence.cohesionScore * 3)
.attr('fill', d => d.attributes.color);
}
๐ Update & Versioning Strategy
Update Schedule
%%{
init: {
"theme": "base",
"themeVariables": {
"primaryColor": "#fff9c4",
"primaryTextColor": "#f57f17",
"lineColor": "#fbc02d",
"secondaryColor": "#e1bee7",
"tertiaryColor": "#e8f5e9",
"primaryBorderColor": "#f57f17",
"fontSize": "14px"
}
}
}%%
gantt
title Daily Update Cycle
dateFormat HH:mm
axisFormat %H:%M
section Data Collection
Extract from DB Views :a1, 01:00, 30m
Transform to JSON :a2, after a1, 20m
Validate Schema :a3, after a2, 10m
section Versioning
Generate Version Tag :b1, after a3, 5m
Create Archive :b2, after b1, 10m
section Deployment
Upload to S3 :c1, after b2, 15m
Invalidate CDN Cache :c2, after c1, 5m
Update Latest Symlink :c3, after c2, 2m
section Validation
Health Check :d1, after c3, 10m
Send Notifications :d2, after d1, 2m
Semantic Versioning
- MAJOR: Breaking schema changes (incompatible with previous versions)
- MINOR: New fields added, backward compatible
- PATCH: Bug fixes, data corrections, no schema change
Version Migration
// Version compatibility checker
function checkVersion(requiredVersion, currentVersion) {
const [reqMajor] = requiredVersion.split('.');
const [curMajor] = currentVersion.split('.');
return reqMajor === curMajor;
}
// Fetch with version fallback
async function fetchWithFallback(path, preferredVersion = 'latest') {
try {
const url = `https://cdn.cia.se/${preferredVersion}/${path}`;
return await fetch(url).then(r => r.json());
} catch (err) {
console.warn(`Failed to fetch ${preferredVersion}, trying v1.0.0`);
return await fetch(`https://cdn.cia.se/v1.0.0/${path}`).then(r => r.json());
}
}
๐ API Compatibility
RESTful URL Patterns
The JSON export structure mimics RESTful API conventions:
| Pattern | Example | Description |
|---|---|---|
/{entity}/index.json | /politicians/index.json | List all entities |
/{entity}/{filter}.json | /politicians/active.json | Filtered list |
/{entity}/by-{field}/{value}.json | /politicians/by-party/s.json | Group by field |
/{entity}/profiles/{id}.json | /politicians/profiles/0123456789.json | Individual profile |
/{entity}/{category}/{metric}.json | /parties/analytics/voting-cohesion.json | Analytical data |
Query Parameters (Future Enhancement)
While static JSON doesn't support query parameters, future enhancements could include:
- Pre-generated filtered views for common queries
- GraphQL layer for complex queries
- API Gateway with caching tier
๐ Performance Optimization
File Size Optimization
| Optimization | Strategy | Savings |
|---|---|---|
| Minification | Remove whitespace | ~15-20% |
| Gzip Compression | CDN-level compression | ~70-80% |
| Pagination | Split large datasets | Variable |
| Selective Fields | Minimal vs. full profiles | ~40-50% |
| Lazy Loading | Load on-demand | N/A |
Caching Strategy
// Service Worker caching for offline support
self.addEventListener('fetch', event => {
if (event.request.url.includes('cdn.cia.se')) {
event.respondWith(
caches.open('cia-data-v1').then(cache => {
return cache.match(event.request).then(response => {
return response || fetch(event.request).then(response => {
cache.put(event.request, response.clone());
return response;
});
});
})
);
}
});
๐ Security Considerations
Data Privacy
- Only public information included (no personal contact details)
- Compliance with GDPR and Swedish data protection laws
- No tracking or analytics in JSON files
Access Control
- Public read access (no authentication required)
- HTTPS-only (TLS 1.2+ required)
- Rate limiting at CDN level
- No write access from client side
Integrity Verification
// Verify data integrity with checksum
async function verifyDataIntegrity(url, expectedHash) {
const response = await fetch(url);
const data = await response.text();
const buffer = new TextEncoder().encode(data);
const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);
const hashArray = Array.from(new Uint8Array(hashBuffer));
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
return hashHex === expectedHash;
}
๐ Additional Resources
Related Documentation
- DATABASE_VIEW_INTELLIGENCE_CATALOG.md - Source data views
- DATA_ANALYSIS_INTOP_OSINT.md - Intelligence frameworks
- BUSINESS_PRODUCT_DOCUMENT.md - Product strategy
- ARCHITECTURE.md - System architecture
Schema Documentation
- Politician JSON Schema
- Party JSON Schema
- Ministry JSON Schema
- Committee JSON Schema
- Intelligence Products Schema
Tools & Libraries
- JSON Schema Validator
- D3.js Data Visualization
- Chart.js
- React Query - Data fetching
- SWR - React hooks for data fetching
๐ค Contributing
For questions, issues, or contributions related to the JSON export system:
- Review existing schemas and documentation
- Test changes with sample data
- Validate JSON schema compliance
- Submit pull request with clear description
- Ensure backward compatibility
๐ License
The JSON export system and generated data files are licensed under the Apache License 2.0, consistent with the Citizen Intelligence Agency platform.
Last Updated: 2024-11-24
Maintained By: Citizen Intelligence Agency Development Team
Contact: See CONTRIBUTING.md