FLOWCHART.md

May 30, 2026 ยท View on GitHub

Hack23 Logo

๐Ÿ”„ Riksdagsmonitor โ€” Flowcharts

๐Ÿ“Š Process Flows and Data Pipelines for Democratic Transparency
๐ŸŽฏ CI/CD Workflows ยท Data Pipelines ยท Content Generation ยท User Journeys

Owner Version Effective Date Review Cycle

๐Ÿ“‹ Document Owner: CEO | ๐Ÿ“„ Version: 1.3 | ๐Ÿ“… Last Updated: 2026-05-06 (UTC)
๐Ÿ”„ Review Cycle: Quarterly | โฐ Next Review: 2026-08-06
๐Ÿข Owner: Hack23 AB (Org.nr 5595347807) | ๐Ÿท๏ธ Classification: Public


๐ŸŽฏ Purpose

This document provides comprehensive flowcharts for all major processes in the Riksdagsmonitor platform. These visual process flows complement the Architecture (system structure), State Diagrams (state transitions), and Workflows (CI/CD automation) documentation.

๐Ÿ“š Architecture Documentation Map

DocumentFocusDescription
๐Ÿ›๏ธ Architecture๐Ÿ—๏ธ C4 ModelsSystem context, containers, components
๐Ÿ“Š Data Model๐Ÿ“Š DataEntity relationships and data dictionary
๐Ÿ”„ Flowchart๐Ÿ”„ ProcessesBusiness and data flow diagrams
๐Ÿ“ˆ State Diagram๐Ÿ“ˆ StatesSystem state transitions and lifecycles
๐Ÿง  Mindmap๐Ÿง  ConceptsSystem conceptual relationships
๐Ÿ’ผ SWOT๐Ÿ’ผ StrategyStrategic analysis and positioning
๐Ÿ›ก๏ธ Security Architecture๐Ÿ”’ SecurityCurrent security controls and design
๐Ÿš€ Future Security๐Ÿ”ฎ SecurityPlanned security improvements
๐ŸŽฏ Threat Model๐ŸŽฏ ThreatsSTRIDE/MITRE ATT&CK analysis
๐Ÿ”ง Workflows๐Ÿ”ง DevOpsCI/CD automation and pipelines
๐Ÿ›ก๏ธ CRA Assessmentโš–๏ธ ComplianceEU Cyber Resilience Act conformity
๐Ÿš€ Future Architecture๐Ÿ”ฎ EvolutionArchitectural evolution roadmap
๐Ÿ“Š Future Data Model๐Ÿ”ฎ DataEnhanced data architecture plans
๐Ÿ”„ Future Flowchart๐Ÿ”ฎ ProcessesImproved process workflows
๐Ÿ“ˆ Future State Diagram๐Ÿ”ฎ StatesAdvanced state management
๐Ÿง  Future Mindmap๐Ÿ”ฎ ConceptsCapability expansion plans
๐Ÿ’ผ Future SWOT๐Ÿ”ฎ StrategyFuture strategic opportunities

1. ๐Ÿ—๏ธ Build and Deployment Flow

flowchart TD
    A[Developer Push to Branch] --> B[GitHub Actions Triggered]
    B --> C[Install Dependencies]
    C --> D[HTMLHint Validation]
    D --> E{HTML Valid?}

    E -->|No| F[Report Errors]
    F --> G[Developer Fixes]
    G --> A

    E -->|Yes| H[ESLint JavaScript Check]
    H --> I[Vitest Unit Tests]
    I --> J{Tests Pass?}

    J -->|No| F
    J -->|Yes| K[Vite Build]

    K --> L[Cypress E2E Tests]
    L --> M{E2E Pass?}

    M -->|No| F
    M -->|Yes| N[Security Scans]

    N --> O[CodeQL Analysis]
    N --> P[Dependabot Check]
    N --> Q[Secret Scanning]

    O --> R{All Scans Clean?}
    P --> R
    Q --> R

    R -->|No| S[Block Merge]
    R -->|Yes| T[Create PR / Merge to Main]

    T --> U[GitHub Pages Deployment]
    U --> V[AWS CloudFront Cache Invalidation]
    V --> W[Production Live]

    style A fill:#4caf50,color:#000000
    style W fill:#4caf50,color:#000000
    style F fill:#f44336,color:#ffffff
    style S fill:#f44336,color:#ffffff

2. ๐Ÿ“ฐ News Article Generation Flow

flowchart TD
    A[Scheduled Trigger: 02:00 CET] --> B[Fetch Political Data]
    B --> C[riksdag-regering-mcp: 32 Tools]

    C --> D[Fetch Government Propositions]
    C --> E[Fetch Opposition Motions]
    C --> F[Fetch Committee Reports]

    D --> G[Aggregate Data]
    E --> G
    F --> G

    G --> H{Sufficient Data >= 5 docs?}

    H -->|No| I[Skip Generation]
    H -->|Yes| J[Generate English Article]

    J --> K[Translate to 13 Languages]
    K --> L[SV, DA, NO, FI, DE, FR, ES, NL, AR, HE, JA, KO, ZH]

    L --> M[Add Schema.org Structured Data]
    M --> N[Validate HTML: HTMLHint]
    N --> O[Validate Translations]
    O --> P{All Valid?}

    P -->|No| Q[Fix Validation Errors]
    Q --> N

    P -->|Yes| R[Create Pull Request]
    R --> S[Human Review]
    S --> T{Approved?}

    T -->|No| U[Request Changes]
    U --> J

    T -->|Yes| V[Merge to Main]
    V --> W[Deploy to Production]

    style A fill:#4caf50,color:#000000
    style W fill:#4caf50,color:#000000
    style I fill:#ff9800,color:#000000

3. ๐Ÿ“Š CIA Data Pipeline Flow

flowchart TD
    A[Daily Trigger: 03:00 CET] --> B[Fetch CIA Platform Exports]
    B --> C[19 Visualization Products]

    C --> D[Production Statistics JSON]
    C --> E[Party Performance CSV]
    C --> F[Election Forecast Data]
    C --> G[Risk Assessment Data]
    C --> H[Committee Network Data]

    D --> I[Schema Validation]
    E --> I
    F --> I
    G --> I
    H --> I

    I --> J{Schema Valid?}

    J -->|No| K[Alert: Data Quality Issue]
    K --> L[Use Cached Data]

    J -->|Yes| M[Update cia-data/ Directory]
    M --> N[Update Dashboard Statistics]
    N --> O[Invalidate LocalStorage Cache]

    O --> P[Commit Changes]
    P --> Q[GitHub Pages Deployment]
    Q --> R[CloudFront Cache Invalidation]
    R --> S[Fresh Data Available]

    L --> S

    style A fill:#4caf50,color:#000000
    style S fill:#4caf50,color:#000000
    style K fill:#ff9800,color:#000000

4. ๐Ÿ‘ค User Journey Flow

flowchart TD
    A[User Visits riksdagsmonitor.com] --> B[DNS Resolution: Route 53]
    B --> C[CloudFront Edge Location]
    C --> D[Serve Static HTML/CSS/JS]

    D --> E{Language Selection}

    E -->|English| F[index.html]
    E -->|Swedish| G[index_sv.html]
    E -->|Other 12| H[index_xx.html]

    F --> I[Load Dashboard]
    G --> I
    H --> I

    I --> J[Check LocalStorage Cache]
    J --> K{Cache Fresh?}

    K -->|Yes| L[Render from Cache]
    K -->|No| M[Fetch CIA Data from CDN]
    M --> N[Parse JSON/CSV]
    N --> O[Store in LocalStorage]
    O --> L

    L --> P[Interactive Dashboard Sections]
    P --> Q[Intelligence Overview]
    P --> R[Party Performance]
    P --> S[Government Cabinet]
    P --> T[Election Monitoring]
    P --> U[Risk Assessment]

    Q --> V[Chart.js / D3.js Visualizations]
    R --> V
    S --> V
    T --> V
    U --> V

    V --> W[User Interacts with Charts]
    W --> X{Navigate to News?}

    X -->|Yes| Y[News Article Index]
    Y --> Z[Read Article in Preferred Language]

    X -->|No| AA[Continue Dashboard Exploration]

    style A fill:#4caf50,color:#000000
    style V fill:#00bcd4,color:#000000

5. ๐Ÿ”’ Security Scanning Flow

flowchart TD
    A[Code Change Detected] --> B[GitHub Actions Security Pipeline]

    B --> C[step-security/harden-runner]
    C --> D[Egress Policy Audit]

    D --> E[CodeQL Analysis]
    E --> F{Vulnerabilities Found?}

    F -->|Yes Critical| G[Block Merge]
    F -->|Yes Low/Medium| H[Create Advisory]
    F -->|No| I[Continue Pipeline]

    I --> J[Dependabot Vulnerability Check]
    J --> K{Dependency CVEs?}

    K -->|Yes Critical| G
    K -->|Yes Low/Medium| L[Auto-Create PR for Update]
    K -->|No| M[Continue]

    M --> N[Secret Scanning]
    N --> O{Secrets Detected?}

    O -->|Yes| P[Block Immediately + Alert]
    O -->|No| Q[SLSA Provenance Attestation]

    Q --> R[Generate Build Provenance]
    R --> S[Sign with Sigstore]
    S --> T[All Security Checks Passed]

    style A fill:#4caf50,color:#000000
    style T fill:#4caf50,color:#000000
    style G fill:#f44336,color:#ffffff
    style P fill:#f44336,color:#ffffff

6. ๐ŸŒ Multi-Language Content Flow

flowchart TD
    A[Content Created in English] --> B[Generate Base HTML Structure]
    B --> C[Add Schema.org Metadata]
    C --> D[Add Open Graph Tags]

    D --> E[Translation Pipeline]
    E --> F[Nordic: SV, DA, NO, FI]
    E --> G[European: DE, FR, ES, NL]
    E --> H[Asian: JA, KO, ZH]
    E --> I[RTL: AR, HE]

    F --> J[Validate Nordic Translations]
    G --> K[Validate European Translations]
    H --> L[Validate Asian Translations]
    I --> M[Validate RTL Layout]

    J --> N{All Valid?}
    K --> N
    L --> N
    M --> N

    N -->|No| O[Fix Translation Issues]
    O --> E

    N -->|Yes| P[Update hreflang Tags]
    P --> Q[Update Sitemap.xml]
    Q --> R[Update Language Index Pages]
    R --> S[14 Language Files Ready]

    style A fill:#4caf50,color:#000000
    style S fill:#4caf50,color:#000000

๐Ÿ“‹ Process Inventory

#ProcessTriggerDurationFrequency
1Build & DeployGit push5-8 minPer commit
2News GenerationCron 02:00 CET10-15 minDaily
3CIA Data PipelineCron 03:00 CET3-5 minDaily
4User JourneyPage visit< 3sOn demand
5Security ScanningCode change5-10 minPer commit
6Multi-LanguageContent creation15-30 minPer article
7Political IntelligencePrebuild chain2-4 minPer build
8Analysis GatePre-article1-2 minPer article
9Parliamentary DataCron daily5-10 minDaily

๐Ÿ“š Architecture Documentation Map

DocumentFocusDescription
๐Ÿ›๏ธ Architecture๐Ÿ—๏ธ C4 ModelsSystem context, containers, components
๐Ÿ“Š Data Model๐Ÿ“Š DataEntity relationships and data dictionary
๐Ÿ”„ Flowchart๐Ÿ”„ ProcessesBusiness and data flow diagrams
๐Ÿ“ˆ State Diagram๐Ÿ“ˆ StatesSystem state transitions and lifecycles
๐Ÿง  Mindmap๐Ÿง  ConceptsSystem conceptual relationships
๐Ÿ’ผ SWOT๐Ÿ’ผ StrategyStrategic analysis and positioning
๐Ÿ›ก๏ธ Security Architecture๐Ÿ”’ SecurityCurrent security controls and design
๐Ÿš€ Future Security๐Ÿ”ฎ SecurityPlanned security improvements
๐ŸŽฏ Threat Model๐ŸŽฏ ThreatsSTRIDE/MITRE ATT&CK analysis
๐Ÿ”ง Workflows๐Ÿ”ง DevOpsCI/CD automation and pipelines
๐Ÿ›ก๏ธ CRA Assessmentโš–๏ธ ComplianceEU Cyber Resilience Act conformity
๐Ÿš€ Future Architecture๐Ÿ”ฎ EvolutionArchitectural evolution roadmap
๐Ÿ“Š Future Data Model๐Ÿ”ฎ DataEnhanced data architecture plans
๐Ÿ”„ Future Flowchart๐Ÿ”ฎ ProcessesImproved process workflows
๐Ÿ“ˆ Future State Diagram๐Ÿ”ฎ StatesAdvanced state management
๐Ÿง  Future Mindmap๐Ÿ”ฎ ConceptsCapability expansion plans
๐Ÿ’ผ Future SWOT๐Ÿ”ฎ StrategyFuture strategic opportunities


7. ๐Ÿ—๏ธ Complete CI/CD Pipeline Data Flow

flowchart TD
    DEV[Developer Workstation] --> GIT[Git Commit and Push]
    GIT --> GH_TRIGGER[GitHub Actions Triggered]
    GH_TRIGGER --> HARDEN[step-security/harden-runner]
    HARDEN --> EGRESS[Egress Policy Enforcement]
    EGRESS --> CHECKOUT[actions/checkout]
    CHECKOUT --> NODE_SETUP[actions/setup-node v4]
    NODE_SETUP --> NPM_INSTALL[npm ci --frozen-lockfile]
    NPM_INSTALL --> NPM_AUDIT[npm audit --audit-level=high]
    NPM_AUDIT --> AUDIT_RESULT{Audit Result?}
    AUDIT_RESULT -->|Vulnerabilities Found| AUDIT_FAIL[Fail Build + Create Issue]
    AUDIT_RESULT -->|Clean| HTMLHINT[HTMLHint Validation]
    HTMLHINT --> HTML_RESULT{HTML Valid?}
    HTML_RESULT -->|Errors| HTML_FAIL[Report Line Errors]
    HTML_RESULT -->|Valid| ESLINT[ESLint JavaScript Linting]
    ESLINT --> LINT_RESULT{Lint Pass?}
    LINT_RESULT -->|Errors| LINT_FAIL[Block Pipeline]
    LINT_RESULT -->|Clean| VITEST[Vitest Unit Test Suite]
    VITEST --> TEST_RESULT{Tests Pass?}
    TEST_RESULT -->|Failures| TEST_FAIL[Publish Test Report]
    TEST_RESULT -->|Pass| VITE_BUILD[Vite Production Build]
    VITE_BUILD --> BUILD_ARTIFACTS[Build Artifacts Generated]
    BUILD_ARTIFACTS --> CYPRESS[Cypress E2E Test Suite]
    CYPRESS --> E2E_RESULT{E2E Pass?}
    E2E_RESULT -->|Failures| E2E_FAIL[Screenshot Evidence]
    E2E_RESULT -->|Pass| CODEQL[CodeQL Security Analysis]
    CODEQL --> CODEQL_RESULT{Security Issues?}
    CODEQL_RESULT -->|Critical| BLOCK_MERGE[Block Merge + Alert]
    CODEQL_RESULT -->|Low/Med| CREATE_ADVISORY[Create Security Advisory]
    CODEQL_RESULT -->|Clean| DEP_REVIEW[actions/dependency-review-action]
    DEP_REVIEW --> DEP_RESULT{Dependency Issues?}
    DEP_RESULT -->|Found| DEP_PR[Auto-Create Dependabot PR]
    DEP_RESULT -->|Clean| SLSA[SLSA Provenance Generation]
    SLSA --> SIGSTORE[Sigstore Signing]
    SIGSTORE --> DEPLOY[GitHub Pages Deploy]
    DEPLOY --> CDN[AWS CloudFront Invalidation]
    CDN --> PROD[Production Live at riksdagsmonitor.com]

    style DEV fill:#4caf50,color:#000000
    style PROD fill:#4caf50,color:#000000
    style AUDIT_FAIL fill:#f44336,color:#ffffff
    style HTML_FAIL fill:#f44336,color:#ffffff
    style LINT_FAIL fill:#f44336,color:#ffffff
    style TEST_FAIL fill:#f44336,color:#ffffff
    style E2E_FAIL fill:#f44336,color:#ffffff
    style BLOCK_MERGE fill:#f44336,color:#ffffff

8. ๐Ÿ“ฐ News Generation Pipeline Data Flow

flowchart TD
    CRON[Cron Trigger 02:00 CET Daily] --> WORKFLOW[GitHub Actions Workflow]
    WORKFLOW --> MCP_INIT[Initialize MCP Client]
    MCP_INIT --> MCP_SERVER[riksdag-regering-mcp Server]
    MCP_SERVER --> TOOL_LIST[Enumerate 32 Available Tools]
    TOOL_LIST --> FETCH_PROPS[Fetch Government Propositions]
    TOOL_LIST --> FETCH_MOT[Fetch Opposition Motions]
    TOOL_LIST --> FETCH_BET[Fetch Committee Betankanden]
    TOOL_LIST --> FETCH_ANFOR[Fetch Anforanden Speeches]
    TOOL_LIST --> FETCH_VOT[Fetch Voteringar Voting Records]
    WORKFLOW --> SCB_FETCH[scb-mcp: Fetch SCB statistical context<br/>optional โ€” graceful fallback]
    WORKFLOW --> WB_FETCH[world-bank-mcp: Fetch WGI governance + long-horizon indicators<br/>optional โ€” graceful fallback]
    WORKFLOW --> IMF_FETCH[imf-ts-client via bash: WEO / Fiscal Monitor / IFS<br/>pure-TS, no MCP โ€” optional, graceful fallback]
    FETCH_PROPS --> RAW_DATA[Raw Data Aggregation]
    FETCH_MOT --> RAW_DATA
    FETCH_BET --> RAW_DATA
    FETCH_ANFOR --> RAW_DATA
    FETCH_VOT --> RAW_DATA
    SCB_FETCH --> RAW_DATA
    WB_FETCH --> RAW_DATA
    IMF_FETCH --> RAW_DATA
    RAW_DATA --> DATA_CHECK{Sufficient Data?}
    DATA_CHECK -->|Less than 5 docs| SKIP[Skip Generation Log]
    DATA_CHECK -->|5+ docs| TRANSFORM[Data Transformation Layer]
    TRANSFORM --> DEDUP[Deduplication Engine]
    DEDUP --> RELEVANCE[Relevance Scoring]
    RELEVANCE --> CONTEXT_BUILD[Context Package Assembly]
    CONTEXT_BUILD --> LLM_PROMPT[Claude Opus Prompt Construction]
    LLM_PROMPT --> BEDROCK[Amazon Bedrock API Call]
    BEDROCK --> LLM_RESPONSE[LLM Response Received]
    LLM_RESPONSE --> QUALITY_CHECK{Quality Score >= 0.8?}
    QUALITY_CHECK -->|Low Quality| RETRY[Retry with Enhanced Prompt]
    RETRY --> BEDROCK
    QUALITY_CHECK -->|High Quality| EN_ARTICLE[English Article Generated]
    EN_ARTICLE --> TRANSLATE_SV[Translate to Swedish]
    EN_ARTICLE --> TRANSLATE_DA[Translate to Danish]
    EN_ARTICLE --> TRANSLATE_NO[Translate to Norwegian]
    EN_ARTICLE --> TRANSLATE_FI[Translate to Finnish]
    EN_ARTICLE --> TRANSLATE_DE[Translate to German]
    EN_ARTICLE --> TRANSLATE_FR[Translate to French]
    EN_ARTICLE --> TRANSLATE_ES[Translate to Spanish]
    EN_ARTICLE --> TRANSLATE_NL[Translate to Dutch]
    EN_ARTICLE --> TRANSLATE_AR[Translate to Arabic RTL]
    EN_ARTICLE --> TRANSLATE_HE[Translate to Hebrew RTL]
    EN_ARTICLE --> TRANSLATE_JA[Translate to Japanese]
    EN_ARTICLE --> TRANSLATE_KO[Translate to Korean]
    EN_ARTICLE --> TRANSLATE_ZH[Translate to Chinese]
    TRANSLATE_SV --> SCHEMA_ORG[Schema.org NewsArticle Markup]
    TRANSLATE_DA --> SCHEMA_ORG
    TRANSLATE_NO --> SCHEMA_ORG
    TRANSLATE_FI --> SCHEMA_ORG
    TRANSLATE_DE --> SCHEMA_ORG
    TRANSLATE_FR --> SCHEMA_ORG
    TRANSLATE_ES --> SCHEMA_ORG
    TRANSLATE_NL --> SCHEMA_ORG
    TRANSLATE_AR --> SCHEMA_ORG
    TRANSLATE_HE --> SCHEMA_ORG
    TRANSLATE_JA --> SCHEMA_ORG
    TRANSLATE_KO --> SCHEMA_ORG
    TRANSLATE_ZH --> SCHEMA_ORG
    SCHEMA_ORG --> OG_TAGS[Open Graph Meta Tags]
    OG_TAGS --> HREFLANG[Hreflang Alternate Links]
    HREFLANG --> HTML_VALIDATE[HTMLHint Validation]
    HTML_VALIDATE --> HTML_OK{Valid HTML?}
    HTML_OK -->|Errors| FIX_HTML[Fix Template Errors]
    FIX_HTML --> HTML_VALIDATE
    HTML_OK -->|Valid| GIT_COMMIT[Git Commit with Metadata]
    GIT_COMMIT --> CREATE_PR[Create Pull Request]
    CREATE_PR --> HUMAN_REVIEW[Human Review Queue]
    HUMAN_REVIEW --> REVIEW_DECISION{Approved?}
    REVIEW_DECISION -->|Rejected| DISCARD[Discard Article]
    REVIEW_DECISION -->|Approved| MERGE[Merge to Main]
    MERGE --> DEPLOY_PIPELINE[Deployment Pipeline]
    DEPLOY_PIPELINE --> NEWS_LIVE[News Article Live in 14 Languages]

    style CRON fill:#2196f3,color:#ffffff
    style NEWS_LIVE fill:#4caf50,color:#000000
    style SKIP fill:#ff9800,color:#000000
    style DISCARD fill:#f44336,color:#ffffff

9. ๐Ÿ“Š CIA Data Integration Data Flow

flowchart TD
    CRON2[Cron Trigger 03:00 CET Daily] --> CIA_FETCH[Fetch CIA Platform JSON Export]
    CIA_FETCH --> CIA_URL[https://cia.hack23.com/api/export]
    CIA_URL --> HTTP_CHECK{HTTP Response?}
    HTTP_CHECK -->|4xx/5xx| ERROR_LOG[Log Error + Use Cache]
    HTTP_CHECK -->|200 OK| SCHEMA_VAL[JSON Schema Validation]
    SCHEMA_VAL --> SCHEMA_CHECK{Schema Valid?}
    SCHEMA_CHECK -->|Invalid| SCHEMA_ERROR[Log Schema Error + Use Cache]
    SCHEMA_CHECK -->|Valid| PARSE[Parse JSON Data]
    PARSE --> PARTY_DATA[Party Statistics Extraction]
    PARSE --> MEMBER_DATA[Member Records Extraction]
    PARSE --> VOTE_DATA[Voting Records Extraction]
    PARSE --> COMMITTEE_DATA[Committee Data Extraction]
    PARSE --> DOCUMENT_DATA[Document Statistics Extraction]
    PARTY_DATA --> TRANSFORM_PARTY[Transform Party Stats]
    MEMBER_DATA --> TRANSFORM_MEMBERS[Transform Member Data]
    VOTE_DATA --> TRANSFORM_VOTES[Transform Vote Patterns]
    COMMITTEE_DATA --> TRANSFORM_COMMITTEES[Transform Committee Data]
    DOCUMENT_DATA --> TRANSFORM_DOCS[Transform Document Stats]
    TRANSFORM_PARTY --> DATA_MERGE[Data Merge Layer]
    TRANSFORM_MEMBERS --> DATA_MERGE
    TRANSFORM_VOTES --> DATA_MERGE
    TRANSFORM_COMMITTEES --> DATA_MERGE
    TRANSFORM_DOCS --> DATA_MERGE
    DATA_MERGE --> CACHE_WRITE[Write to Local Cache]
    CACHE_WRITE --> FRESHNESS_TAG[Tag with Timestamp]
    FRESHNESS_TAG --> INTEGRITY_HASH[Compute Integrity Hash]
    INTEGRITY_HASH --> CACHE_STORE[Store in cia-data/ Directory]
    CACHE_STORE --> DASHBOARD_RENDER[Dashboard Rendering Engine]
    DASHBOARD_RENDER --> CHART_DATA[Chart.js Data Preparation]
    CHART_DATA --> PARTY_CHARTS[Party Distribution Charts]
    CHART_DATA --> MEMBER_CHARTS[Member Activity Charts]
    CHART_DATA --> VOTE_CHARTS[Voting Pattern Charts]
    CHART_DATA --> COMMITTEE_CHARTS[Committee Charts]
    PARTY_CHARTS --> HTML_INJECT[Inject into Dashboard HTML]
    MEMBER_CHARTS --> HTML_INJECT
    VOTE_CHARTS --> HTML_INJECT
    COMMITTEE_CHARTS --> HTML_INJECT
    HTML_INJECT --> RESPONSIVE_CHECK[Responsive Layout Validation]
    RESPONSIVE_CHECK --> A11Y_CHECK[Accessibility Audit]
    A11Y_CHECK --> FINAL_DASHBOARD[Dashboard Ready]
    ERROR_LOG --> STALE_BANNER[Show Stale Data Banner]
    SCHEMA_ERROR --> STALE_BANNER
    STALE_BANNER --> FINAL_DASHBOARD

    style CRON2 fill:#2196f3,color:#ffffff
    style FINAL_DASHBOARD fill:#4caf50,color:#000000
    style ERROR_LOG fill:#ff9800,color:#000000
    style SCHEMA_ERROR fill:#ff9800,color:#000000

10. ๐ŸŒ User Request Data Flow

flowchart LR
    USER[User Browser] --> DNS[DNS Resolution]
    DNS --> ROUTE53[AWS Route 53]
    ROUTE53 --> HEALTH{Origin Healthy?}
    HEALTH -->|Healthy| CLOUDFRONT[AWS CloudFront CDN]
    HEALTH -->|Unhealthy| GHPAGES[GitHub Pages Fallback]
    CLOUDFRONT --> CACHE_HIT{Cache Hit?}
    CACHE_HIT -->|Hit| CACHED_RESP[Serve Cached Response]
    CACHE_HIT -->|Miss| S3_ORIGIN[S3 Origin Fetch]
    S3_ORIGIN --> REGION_CHECK{Primary Region?}
    REGION_CHECK -->|us-east-1 Up| S3_PRIMARY[S3 us-east-1]
    REGION_CHECK -->|us-east-1 Down| S3_SECONDARY[S3 eu-west-1]
    S3_PRIMARY --> TLS_RESP[TLS 1.3 Encrypted Response]
    S3_SECONDARY --> TLS_RESP
    TLS_RESP --> CLOUDFRONT
    CACHED_RESP --> BROWSER_RENDER[Browser Renders HTML]
    CLOUDFRONT --> BROWSER_RENDER
    GHPAGES --> BROWSER_RENDER
    BROWSER_RENDER --> CSS_LOAD[Load styles.css]
    BROWSER_RENDER --> JS_LOAD[Load Modules from js/]
    BROWSER_RENDER --> LANG_DETECT[Language Detection]
    LANG_DETECT --> LANG_REDIRECT{User Language?}
    LANG_REDIRECT -->|SV| SV_PAGE[index_sv.html]
    LANG_REDIRECT -->|DE| DE_PAGE[index_de.html]
    LANG_REDIRECT -->|FR| FR_PAGE[index_fr.html]
    LANG_REDIRECT -->|Other| EN_PAGE[index.html]
    SV_PAGE --> CHARTJS[Chart.js Initialization]
    DE_PAGE --> CHARTJS
    FR_PAGE --> CHARTJS
    EN_PAGE --> CHARTJS
    CHARTJS --> CIA_API[Fetch CIA Data JSON]
    CIA_API --> RENDER_CHARTS[Render Interactive Charts]
    RENDER_CHARTS --> LANG_SWITCHER[Language Switcher Component]
    LANG_SWITCHER --> FINAL_PAGE[Complete Interactive Page]

    style USER fill:#4caf50,color:#000000
    style FINAL_PAGE fill:#4caf50,color:#000000
    style GHPAGES fill:#ff9800,color:#000000

11. ๐Ÿ”’ Security Scanning Data Flow

flowchart TD
    CODE_CHANGE[Code Change or PR Created] --> SECURITY_PIPELINE[Security Pipeline Triggered]
    SECURITY_PIPELINE --> HARDEN_RUNNER[step-security/harden-runner]
    HARDEN_RUNNER --> EGRESS_AUDIT[Egress Traffic Audit Log]
    EGRESS_AUDIT --> PARALLEL_SCANS[Parallel Security Scans]
    PARALLEL_SCANS --> CODEQL_SCAN[CodeQL JavaScript/TypeScript Analysis]
    PARALLEL_SCANS --> DEP_SCAN[Dependency Vulnerability Scan]
    PARALLEL_SCANS --> SECRET_SCAN[GitHub Secret Scanning]
    PARALLEL_SCANS --> SCORECARD[OpenSSF Scorecard]
    CODEQL_SCAN --> CODEQL_QUERIES[Run CWE Query Suite]
    CODEQL_QUERIES --> XSS_CHECK[XSS Vulnerability Detection]
    CODEQL_QUERIES --> INJECTION_CHECK[Injection Pattern Detection]
    CODEQL_QUERIES --> DATAFLOW_CHECK[Data Flow Analysis]
    XSS_CHECK --> CODEQL_RESULTS[CodeQL Results]
    INJECTION_CHECK --> CODEQL_RESULTS
    DATAFLOW_CHECK --> CODEQL_RESULTS
    CODEQL_RESULTS --> CODEQL_SEVERITY{Severity?}
    CODEQL_SEVERITY -->|Critical/High| BLOCK_PR[Block PR Merge]
    CODEQL_SEVERITY -->|Medium/Low| CODEQL_ADVISORY[Create GitHub Advisory]
    CODEQL_SEVERITY -->|None| CODEQL_PASS[CodeQL Pass]
    DEP_SCAN --> DEP_CVE[CVE Database Lookup]
    DEP_CVE --> DEP_NVDB[National Vulnerability Database]
    DEP_NVDB --> DEP_SEVERITY{CVE Severity?}
    DEP_SEVERITY -->|Critical| BLOCK_PR
    DEP_SEVERITY -->|High| DEP_AUTO_PR[Auto Dependabot PR]
    DEP_SEVERITY -->|Low/Med| DEP_TRACK[Track in Security Tab]
    DEP_SEVERITY -->|None| DEP_PASS[Dependencies Pass]
    SECRET_SCAN --> PATTERN_MATCH[Pattern Matching Engine]
    PATTERN_MATCH --> TOKEN_DETECT[API Key Patterns]
    TOKEN_DETECT --> SECRET_RESULT{Secret Found?}
    SECRET_RESULT -->|Yes| IMMEDIATE_BLOCK[Immediate Block + Alert Owner]
    SECRET_RESULT -->|No| SECRET_PASS[Secret Scan Pass]
    SCORECARD --> BRANCH_PROT[Branch Protection Score]
    SCORECARD --> TOKEN_PERMS[Token Permissions Score]
    SCORECARD --> SIGNED_RELEASES[Signed Releases Score]
    SCORECARD --> DEPENDENCY_PINNED[Dependency Pinning Score]
    BRANCH_PROT --> SCORECARD_TOTAL[Overall Scorecard Score]
    TOKEN_PERMS --> SCORECARD_TOTAL
    SIGNED_RELEASES --> SCORECARD_TOTAL
    DEPENDENCY_PINNED --> SCORECARD_TOTAL
    SCORECARD_TOTAL --> BADGE_UPDATE[Update README Badge]
    CODEQL_PASS --> ALL_PASS{All Scans Pass?}
    DEP_PASS --> ALL_PASS
    SECRET_PASS --> ALL_PASS
    BADGE_UPDATE --> ALL_PASS
    ALL_PASS -->|Yes| SLSA_ATTEST[SLSA Provenance Attestation]
    SLSA_ATTEST --> SIGN[Sigstore Signing]
    SIGN --> BUILD_PROVENANCE[Build Provenance Record]
    BUILD_PROVENANCE --> MERGE_ALLOWED[PR Merge Allowed]
    ALL_PASS -->|No| BLOCK_PR

    style CODE_CHANGE fill:#4caf50,color:#000000
    style MERGE_ALLOWED fill:#4caf50,color:#000000
    style BLOCK_PR fill:#f44336,color:#ffffff
    style IMMEDIATE_BLOCK fill:#f44336,color:#ffffff

12. ๐ŸŒ Multi-Language Content Pipeline

flowchart TD
    SOURCE_EN[Source English Content] --> TEMPLATE[HTML Template Engine]
    TEMPLATE --> BASE_HTML[Base HTML Structure]
    BASE_HTML --> META_LAYER[Metadata Layer]
    META_LAYER --> SCHEMA_NEWS[Schema.org NewsArticle]
    META_LAYER --> OG_META[Open Graph Protocol]
    META_LAYER --> TWITTER_CARD[Twitter Card Tags]
    META_LAYER --> CANONICAL[Canonical URL]
    SCHEMA_NEWS --> HREFLANG_GEN[Hreflang Tag Generator]
    OG_META --> HREFLANG_GEN
    TWITTER_CARD --> HREFLANG_GEN
    CANONICAL --> HREFLANG_GEN
    HREFLANG_GEN --> TRANSLATE_ENGINE[Translation Engine]
    TRANSLATE_ENGINE --> NORDIC_BRANCH[Nordic Language Branch]
    TRANSLATE_ENGINE --> CENTRAL_EU_BRANCH[Central European Branch]
    TRANSLATE_ENGINE --> ROMANCE_BRANCH[Romance Language Branch]
    TRANSLATE_ENGINE --> ASIAN_BRANCH[Asian Language Branch]
    TRANSLATE_ENGINE --> RTL_BRANCH[RTL Language Branch]
    NORDIC_BRANCH --> SWEDISH[SV Swedish - index_sv.html]
    NORDIC_BRANCH --> DANISH[DA Danish - index_da.html]
    NORDIC_BRANCH --> NORWEGIAN[NO Norwegian - index_no.html]
    NORDIC_BRANCH --> FINNISH[FI Finnish - index_fi.html]
    CENTRAL_EU_BRANCH --> GERMAN[DE German - index_de.html]
    CENTRAL_EU_BRANCH --> DUTCH[NL Dutch - index_nl.html]
    ROMANCE_BRANCH --> FRENCH[FR French - index_fr.html]
    ROMANCE_BRANCH --> SPANISH[ES Spanish - index_es.html]
    ASIAN_BRANCH --> JAPANESE[JA Japanese - index_ja.html]
    ASIAN_BRANCH --> KOREAN[KO Korean - index_ko.html]
    ASIAN_BRANCH --> CHINESE[ZH Chinese - index_zh.html]
    RTL_BRANCH --> ARABIC[AR Arabic - index_ar.html]
    RTL_BRANCH --> HEBREW[HE Hebrew - index_he.html]
    SWEDISH --> VALIDATE_NORDIC[Validate Nordic Scripts]
    DANISH --> VALIDATE_NORDIC
    NORWEGIAN --> VALIDATE_NORDIC
    FINNISH --> VALIDATE_NORDIC
    GERMAN --> VALIDATE_EU[Validate EU Languages]
    DUTCH --> VALIDATE_EU
    FRENCH --> VALIDATE_EU
    SPANISH --> VALIDATE_EU
    JAPANESE --> VALIDATE_ASIAN[Validate Asian Scripts]
    KOREAN --> VALIDATE_ASIAN
    CHINESE --> VALIDATE_ASIAN
    ARABIC --> VALIDATE_RTL[Validate RTL Layout]
    HEBREW --> VALIDATE_RTL
    VALIDATE_NORDIC --> SITEMAP_UPDATE[Update Sitemap Files]
    VALIDATE_EU --> SITEMAP_UPDATE
    VALIDATE_ASIAN --> SITEMAP_UPDATE
    VALIDATE_RTL --> SITEMAP_UPDATE
    SITEMAP_UPDATE --> SITEMAP_EN[sitemap.html]
    SITEMAP_UPDATE --> SITEMAP_SV[sitemap_sv.html]
    SITEMAP_UPDATE --> SITEMAP_OTHERS[sitemap_xx.html x12]
    SITEMAP_EN --> SEO_AUDIT[SEO Quality Audit]
    SITEMAP_SV --> SEO_AUDIT
    SITEMAP_OTHERS --> SEO_AUDIT
    SEO_AUDIT --> SEO_CHECK{SEO Valid?}
    SEO_CHECK -->|Issues| SEO_FIX[Fix Meta Tags]
    SEO_FIX --> SEO_AUDIT
    SEO_CHECK -->|Valid| ALL_14_READY[14 Language Files Ready]

    style SOURCE_EN fill:#4caf50,color:#000000
    style ALL_14_READY fill:#4caf50,color:#000000
    style SEO_FIX fill:#ff9800,color:#000000

13. โœ… Data Validation and Quality Check Flow

flowchart TD
    DATA_INGEST[Data Ingestion from Riksdag API] --> SCHEMA_VAL[JSON Schema Validation]
    SCHEMA_VAL --> SCHEMA_OK{Schema Valid?}
    SCHEMA_OK -->|Invalid| SCHEMA_ERR[Log Schema Violation]
    SCHEMA_ERR --> FALLBACK_CACHE[Load from Cache]
    SCHEMA_OK -->|Valid| TYPE_CHECK[Type Coercion Check]
    TYPE_CHECK --> NULL_CHECK[Null Value Inspection]
    NULL_CHECK --> REQUIRED_CHECK[Required Fields Check]
    REQUIRED_CHECK --> REQUIRED_OK{All Required Fields Present?}
    REQUIRED_OK -->|Missing| FILL_DEFAULTS[Apply Default Values]
    FILL_DEFAULTS --> RANGE_CHECK
    REQUIRED_OK -->|Present| RANGE_CHECK[Numeric Range Validation]
    RANGE_CHECK --> RANGE_OK{Values in Range?}
    RANGE_OK -->|Out of Range| CLAMP[Clamp to Valid Range + Flag]
    CLAMP --> DATE_CHECK
    RANGE_OK -->|In Range| DATE_CHECK[Date Format Validation]
    DATE_CHECK --> DATE_OK{Dates Valid?}
    DATE_OK -->|Invalid| DATE_FIX[Normalize Date Formats]
    DATE_FIX --> ENCODING_CHECK
    DATE_OK -->|Valid| ENCODING_CHECK[Character Encoding Check UTF-8]
    ENCODING_CHECK --> ENCODE_OK{UTF-8 Valid?}
    ENCODE_OK -->|Invalid| ENCODE_FIX[Re-encode to UTF-8]
    ENCODE_FIX --> DEDUP_CHECK
    ENCODE_OK -->|Valid| DEDUP_CHECK[Duplicate Detection]
    DEDUP_CHECK --> DUP_FOUND{Duplicates?}
    DUP_FOUND -->|Yes| DEDUP_REMOVE[Remove Duplicates]
    DEDUP_REMOVE --> SEMANTIC_CHECK
    DUP_FOUND -->|No| SEMANTIC_CHECK[Semantic Consistency Check]
    SEMANTIC_CHECK --> CROSS_REF[Cross-Reference Validation]
    CROSS_REF --> XREF_OK{Cross-References Valid?}
    XREF_OK -->|Broken| XREF_FIX[Flag Broken References]
    XREF_FIX --> QUALITY_SCORE
    XREF_OK -->|Valid| QUALITY_SCORE[Compute Quality Score 0-100]
    QUALITY_SCORE --> SCORE_THRESHOLD{Score >= 75?}
    SCORE_THRESHOLD -->|Below Threshold| QUARANTINE[Quarantine for Review]
    SCORE_THRESHOLD -->|Above Threshold| APPROVED_DATA[Data Approved for Use]
    APPROVED_DATA --> HASH_SIGN[Compute SHA-256 Hash]
    HASH_SIGN --> STORE_VALIDATED[Store Validated Data]
    FALLBACK_CACHE --> STALE_FLAG[Mark Data as Stale]

    style DATA_INGEST fill:#2196f3,color:#ffffff
    style APPROVED_DATA fill:#4caf50,color:#000000
    style SCHEMA_ERR fill:#f44336,color:#ffffff
    style QUARANTINE fill:#ff9800,color:#000000
    style STALE_FLAG fill:#ff9800,color:#000000

14. ๐Ÿ” Content Integrity and Audit Trail Flow

flowchart TD
    CONTENT_CREATE[Content Created by Pipeline] --> METADATA[Attach Content Metadata]
    METADATA --> TIMESTAMP[UTC Timestamp]
    METADATA --> PIPELINE_ID[Pipeline Run ID]
    METADATA --> DATA_SOURCES[Source Data References]
    METADATA --> AUTHOR[Generation Method: LLM or Template]
    TIMESTAMP --> HASH_COMPUTE[Compute SHA-256 Hash]
    PIPELINE_ID --> HASH_COMPUTE
    DATA_SOURCES --> HASH_COMPUTE
    AUTHOR --> HASH_COMPUTE
    HASH_COMPUTE --> CONTENT_HASH[Content Hash Digest]
    CONTENT_HASH --> GIT_STAGE[Stage in Git]
    GIT_STAGE --> GIT_COMMIT[Git Commit with Signed Message]
    GIT_COMMIT --> COMMIT_HASH[Git Commit SHA]
    COMMIT_HASH --> PROVENANCE[SLSA Provenance Record]
    PROVENANCE --> SIGSTORE[Sigstore Transparency Log]
    SIGSTORE --> AUDIT_TRAIL[Immutable Audit Trail]
    AUDIT_TRAIL --> GH_AUDIT[GitHub Audit Log]
    AUDIT_TRAIL --> COMMIT_LOG[Git Commit Log]
    AUDIT_TRAIL --> SLSA_LOG[SLSA Build Log]
    GH_AUDIT --> INTEGRITY_MONITOR[Integrity Monitor]
    COMMIT_LOG --> INTEGRITY_MONITOR
    SLSA_LOG --> INTEGRITY_MONITOR
    INTEGRITY_MONITOR --> TAMPER_DETECT{Tamper Detected?}
    TAMPER_DETECT -->|Yes| INCIDENT_ALERT[Trigger Incident Response]
    INCIDENT_ALERT --> CONTENT_QUARANTINE[Quarantine Affected Content]
    CONTENT_QUARANTINE --> ROLLBACK[Git Revert to Last Known Good]
    TAMPER_DETECT -->|No| INTEGRITY_CONFIRMED[Integrity Confirmed]
    INTEGRITY_CONFIRMED --> PUBLISH_GATE[Publishing Gate]
    PUBLISH_GATE --> PUBLISHED[Content Published]

    style CONTENT_CREATE fill:#2196f3,color:#ffffff
    style PUBLISHED fill:#4caf50,color:#000000
    style INCIDENT_ALERT fill:#f44336,color:#ffffff
    style CONTENT_QUARANTINE fill:#f44336,color:#ffffff

15. ๐Ÿ—๏ธ GitHub Actions Runner Hardening Flow

flowchart TD
    RUNNER_START[GitHub Actions Runner Starts] --> HARDEN_INIT[step-security/harden-runner Action]
    HARDEN_INIT --> POLICY_LOAD[Load Egress Policy]
    POLICY_LOAD --> ALLOWED_DOMAINS[Allowed Domains Whitelist]
    ALLOWED_DOMAINS --> GITHUB_COM[github.com]
    ALLOWED_DOMAINS --> NPM_REG[registry.npmjs.org]
    ALLOWED_DOMAINS --> CODEQL_CDN[codeql.github.com]
    ALLOWED_DOMAINS --> SIGSTORE[sigstore.dev]
    GITHUB_COM --> IPTABLES[iptables Rules Applied]
    NPM_REG --> IPTABLES
    CODEQL_CDN --> IPTABLES
    SIGSTORE --> IPTABLES
    IPTABLES --> NETMON[Network Traffic Monitor]
    NETMON --> TRAFFIC_CAPTURE[Capture All Egress]
    TRAFFIC_CAPTURE --> ALLOWED_CHECK{Destination Allowed?}
    ALLOWED_CHECK -->|Allowed| PERMIT[Permit Traffic]
    ALLOWED_CHECK -->|Blocked| DENY_LOG[Log Denied Traffic]
    DENY_LOG --> ALERT_EGRESS[Alert Security Team]
    PERMIT --> JOB_EXEC[Job Steps Execute]
    JOB_EXEC --> STEP_PERMISSIONS[Per-Step Token Permissions]
    STEP_PERMISSIONS --> CHECKOUT_PERM[checkout: read contents]
    STEP_PERMISSIONS --> DEPLOY_PERM[deploy: write pages]
    STEP_PERMISSIONS --> SECURITY_PERM[security-events: write]
    CHECKOUT_PERM --> AUDIT_EVENT[Audit Event Emitted]
    DEPLOY_PERM --> AUDIT_EVENT
    SECURITY_PERM --> AUDIT_EVENT
    AUDIT_EVENT --> GH_AUDIT_LOG[GitHub Audit Log]
    JOB_EXEC --> JOB_COMPLETE[Job Completes]
    JOB_COMPLETE --> RUNNER_TEARDOWN[Runner Ephemeral Teardown]
    RUNNER_TEARDOWN --> NO_PERSIST[No Data Persists]

    style RUNNER_START fill:#2196f3,color:#ffffff
    style NO_PERSIST fill:#4caf50,color:#000000
    style DENY_LOG fill:#f44336,color:#ffffff
    style ALERT_EGRESS fill:#f44336,color:#ffffff

16. ๐Ÿง  Political Intelligence Generation Flow

flowchart TD
    TRIGGER[generate-political-intelligence.ts] --> CATALOG[catalog.ts<br/>Load article-types.json registry]
    CATALOG --> STREAMS[daily-streams.ts<br/>Identify active streams per horizon]
    STREAMS --> HORIZON{Horizon Stratification}
    HORIZON --> H72[T+72h Short-term]
    HORIZON --> H7D[T+7d Weekly]
    HORIZON --> H30D[T+30d Monthly]
    HORIZON --> H90D[T+90d Quarterly]
    HORIZON --> H365D[T+365d Annual]
    HORIZON --> H1460D[T+1460d Election cycle]

    H72 --> I18N[i18n/<br/>14-language translation]
    H7D --> I18N
    H30D --> I18N
    H90D --> I18N
    H365D --> I18N
    H1460D --> I18N

    I18N --> RENDER[render/<br/>Template-based HTML rendering]
    RENDER --> OUTPUT[Output: political-intelligence*.html<br/>14 language variants]

    style TRIGGER fill:#2196f3,color:#ffffff
    style OUTPUT fill:#4caf50,color:#000000
    style HORIZON fill:#ff9800,color:#000000
    style CATALOG fill:#9c27b0,color:#ffffff
    style STREAMS fill:#9c27b0,color:#ffffff
    style RENDER fill:#9c27b0,color:#ffffff

17. โœ… Analysis Gate Validation Flow

flowchart TD
    INPUT[analysis/daily/DATE/ folder] --> CHECK1{Check 1:<br/>Artifact existence<br/>23 files across Families A-D}
    CHECK1 -->|Pass| CHECK2{Check 2:<br/>No stub content}
    CHECK1 -->|Fail| FAILED[โŒ Gate FAILED<br/>Missing artifacts]

    CHECK2 -->|Pass| CHECK3{Check 3:<br/>Minimum word count}
    CHECK2 -->|Fail| FAILED

    CHECK3 -->|Pass| CHECK4{Check 4:<br/>Evidence citations}
    CHECK3 -->|Fail| FAILED

    CHECK4 -->|Pass| CHECK5{Check 5:<br/>Mermaid diagrams present}
    CHECK4 -->|Fail| FAILED

    CHECK5 -->|Pass| CHECK6{Check 6:<br/>Pass-2 iteration evidence}
    CHECK5 -->|Fail| FAILED

    CHECK6 -->|Pass| CHECK7{Check 7:<br/>Cross-references valid}
    CHECK6 -->|Fail| FAILED

    CHECK7 -->|Pass| CHECK8{Check 8:<br/>Data-source audit trail}
    CHECK7 -->|Fail| FAILED

    CHECK8 -->|Pass| CHECK9A{Check 9a:<br/>Political classification}
    CHECK8 -->|Fail| FAILED

    CHECK9A -->|Pass| CHECK9B{Check 9b:<br/>Agency evidence}
    CHECK9A -->|Fail| FAILED

    CHECK9B -->|Pass| PASSED[โœ… Gate PASSED<br/>Article generation proceeds]
    CHECK9B -->|Fail| FAILED

    FAILED --> BLOCK[Block article pipeline<br/>Return error details]

    style INPUT fill:#2196f3,color:#ffffff
    style PASSED fill:#4caf50,color:#000000
    style FAILED fill:#f44336,color:#ffffff
    style BLOCK fill:#f44336,color:#ffffff
    style CHECK1 fill:#ff9800,color:#000000
    style CHECK9B fill:#ff9800,color:#000000

18. ๐Ÿ“ฅ Parliamentary Data Download Flow

flowchart TD
    TRIGGER[download-parliamentary-data.ts] --> PROPS[Fetch Propositions<br/>from data.riksdagen.se]
    TRIGGER --> MOTIONS[Fetch Motions<br/>from data.riksdagen.se]
    TRIGGER --> BET[Fetch Betรคnkanden<br/>from data.riksdagen.se]

    PROPS --> VALIDATE_P[Validate & transform]
    MOTIONS --> VALIDATE_M[Validate & transform]
    BET --> VALIDATE_B[Validate & transform]

    VALIDATE_P --> DATA_DIR[Output: data/ directory]
    VALIDATE_M --> DATA_DIR
    VALIDATE_B --> DATA_DIR

    TRIGGER --> VOTING[fetch-voting-records.ts<br/>Download voting records]
    VOTING --> VOTE_DATA[Voting data validated]
    VOTE_DATA --> DATA_DIR

    TRIGGER --> CALENDAR[fetch-calendar.ts<br/>Download calendar events]
    CALENDAR --> CAL_DATA[Calendar data validated]
    CAL_DATA --> DATA_DIR

    DATA_DIR --> READY[Parliamentary data ready<br/>for analysis pipeline]

    style TRIGGER fill:#2196f3,color:#ffffff
    style READY fill:#4caf50,color:#000000
    style DATA_DIR fill:#ff9800,color:#000000
    style VOTING fill:#9c27b0,color:#ffffff
    style CALENDAR fill:#9c27b0,color:#ffffff

Updated Process Inventory

#ProcessTriggerDurationFrequencySecurity Controls
1Build and DeployGit push5-8 minPer commitSLSA, CodeQL, harden-runner
2News GenerationCron 02:00 CET10-15 minDailyData validation, HTMLHint
3CIA Data PipelineCron 03:00 CET3-5 minDailySchema validation, integrity hash
4User JourneyPage visit< 3sOn demandTLS 1.3, CSP headers, HSTS
5Security ScanningCode change5-10 minPer commitCodeQL, Dependabot, secret scan
6Multi-LanguageContent creation15-30 minPer articleHTMLHint, schema validation
7CI/CD Full PipelineGit push8-12 minPer commitFull security gate suite
8MCP News PipelineCron daily10-15 minDailyLLM quality check
9CIA Data IntegrationCron daily3-5 minDailySchema validate, integrity hash
10Data ValidationPer data fetch1-2 minPer fetch9-stage validation pipeline
11Content IntegrityPer content< 1 minPer articleGit signatures, Sigstore (build artifacts)
12Runner HardeningPer jobContinuousPer jobiptables, egress audit
13Political IntelligencePrebuild chain2-4 minPer buildHTMLHint, schema validation
14Analysis GatePre-article1-2 minPer article9-check validation (23 artifacts)
15Parliamentary DataCron daily5-10 minDailyData validation, freshness check

Riksdagsmonitor Architecture Portfolio

DocumentFocusDescription
๐Ÿ›๏ธ Architecture๐Ÿ—๏ธ C4 ModelsSystem context, containers, components
๐Ÿ“Š Data Model๐Ÿ“Š DataEntity relationships and data dictionary
๐Ÿ”„ Flowchart๐Ÿ”„ ProcessesBusiness and data flow diagrams (this document)
๐Ÿ“ˆ State Diagram๐Ÿ“ˆ StatesSystem state transitions and lifecycles
๐Ÿง  Mindmap๐Ÿง  ConceptsSystem conceptual relationships
๐Ÿ’ผ SWOT๐Ÿ’ผ StrategyStrategic analysis and positioning
๐Ÿ›ก๏ธ Security Architecture๐Ÿ”’ SecurityCurrent security controls and design
๐ŸŽฏ Threat Model๐ŸŽฏ ThreatsSTRIDE/MITRE ATT&CK analysis
๐Ÿš€ Future Architecture๐Ÿ”ฎ EvolutionArchitectural evolution roadmap
๐Ÿ”„ Future Flowchart๐Ÿ”ฎ ProcessesImproved process workflows

Hack23 ISMS Policies


๐Ÿ“‹ Document Control:
โœ… Approved by: James Pether Sรถrling, CEO
๐Ÿ“ค Distribution: Public
๐Ÿท๏ธ Classification: Confidentiality: Public
๐Ÿ“… Effective Date: 2026-02-25
โฐ Next Review: 2026-05-25
๐ŸŽฏ Framework Compliance: ISO 27001 NIST CSF 2.0 CIS Controls


๐ŸŒ IMF Economic-Data Pipeline (Current State)

Status: โœ… Implemented and in production. IMF is the primary economic-data source today, accessed via the pure-TypeScript client scripts/imf-client.ts (no MCP server). World Bank handles governance / environment / social residue only; SCB provides Swedish-specific ground truth. Authority: .github/aw/ECONOMIC_DATA_CONTRACT.md v2.1 ยท hub: analysis/imf/.

flowchart LR
    classDef primary fill:#0a4f8f,color:#fff,stroke:#00d9ff,stroke-width:2px
    classDef secondary fill:#3a3a3a,color:#ddd,stroke:#888
    classDef gate fill:#ff006e,color:#fff,stroke:#fff

    Start([news-* workflow trigger]) --> Domain{Identify economic class}
    Domain -->|Macro / Fiscal / Monetary / External / Trade| IMF[(IMF SDMX 3.0 + Datamapper REST<br/>scripts/imf-client.ts)]:::primary
    Domain -->|Governance / Environment / Social residue| WB[(World Bank API<br/>worldbank-mcp)]:::secondary
    Domain -->|Swedish-specific monthly / regional| SCB[(SCB PxWeb v2<br/>scb-mcp)]:::secondary

    IMF --> Vintage{Vintage age > 6 months?}:::gate
    Vintage -->|Yes| Annotate[Annotate stale + downgrade confidence]
    Vintage -->|No| Cache[Cache: vintage-tagged ยท SHA-256 pinned<br/>analysis/daily/*/economic-data.json]
    Annotate --> Cache
    Cache --> Provenance[Emit economicProvenance:<br/>provider=imf, dataflow, indicator, vintage]
    WB --> Cache
    SCB --> Cache

    Provenance --> Compose[Article composition]
    Compose --> Lint{IMF-first lint<br/>scripts/article-quality-enhancer.ts}:::gate
    Lint -->|WB economic citation w/o IMF cross-ref| Reject([Block โ€” open issue])
    Lint -->|Pass| Publish([Publish article])

Current production state (2026-04-24):

  • scripts/imf-client.ts, scripts/imf-context.ts, scripts/imf-fetch.ts, scripts/imf-codes.ts โ€” implemented, tested, and called by every news-* workflow
  • 24 indicators across 10 IMF dataflows (WEO / FM / IFS / BOP / DOTS / GFS_COFOG / PCPS / ER / MFS_IR / MFS_PR) catalogued in analysis/imf/indicators-inventory.json
  • Vintage discipline (>6 mo โ†’ annotation) enforced by tests/imf-inventory.test.ts (13 assertions) and tests/economic-context-multi-provider.test.ts (asserts IMF queried before WB)
  • Egress allow-list: www.imf.org, api.imf.org pinned in every workflow network: block

๐Ÿ›๏ธ Statskontoret Data Flow (Current State)

flowchart TD
    Start[News / analysis workflow needs agency or budget-execution context]
    Decision{Context type?}
    Start --> Decision
    Decision -->|Agency structure / headcount| MF[Statskontoret Myndighetsfรถrteckning]
    Decision -->|Annual budget outturn| AU[Statskontoret ร…rsutfall]
    Decision -->|Monthly budget outturn| MU[Statskontoret Mรฅnadsutfall]
    Decision -->|Macro projection| IMF[IMF WEO/FM]
    MF --> CLI[statskontoret-fetch.ts]
    AU --> CLI
    MU --> CLI
    CLI --> Discover[discover: extract Excel / CSV ZIP links]
    CLI --> Headcount[headcount: parse XLSX and aggregate department time series]
    Discover --> Persist[analysis/data/statskontoret JSON + meta]
    Headcount --> Persist
    Persist --> Article[Article / dashboard context with source URL and freshness]

Key gates: HTTPS-only source, source catalogue validation, parser tests, provenance sidecars, and optional-enrichment fallback.


๐Ÿ”— Hack23 Ecosystem

๐ŸŒ Platforms ๐Ÿ“ฆ Open-Source Projects ๐Ÿ›ก๏ธ Governance & Standards
๐Ÿ—ณ๏ธ Riksdagsmonitor โ€” Swedish Parliament intelligence
๐Ÿ‡ช๐Ÿ‡บ EU Parliament Monitor โ€” European coverage
๐Ÿ•ต๏ธ Citizen Intelligence Agency โ€” political-data engine
๐ŸŒ Hack23 AB โ€” corporate site
๐Ÿ“ฐ Hack23 Blog โ€” engineering & policy
๐Ÿ’ผ Hack23 on LinkedIn
๐Ÿ—ณ๏ธ Hack23/riksdagsmonitor
๐Ÿ•ต๏ธ Hack23/cia
๐Ÿ‡ช๐Ÿ‡บ Hack23/euparliamentmonitor
๐Ÿ”Œ Hack23/european-parliament-mcp
โœ… Hack23/cia-compliance-manager
๐Ÿฅ‹ Hack23/black-trigram
๐Ÿ  Hack23/homepage
๐Ÿ›ก๏ธ Hack23 ISMS-PUBLIC โ€” public ISMS
๐Ÿ”’ Information Security Policy
๐Ÿค– AI Policy
๐Ÿงช Secure Development Policy
๐ŸŽฏ Threat Modeling Policy
โš ๏ธ Vulnerability Management
๐Ÿท๏ธ Classification Framework

OpenSSF Best Practices OpenSSF Scorecard ISO 27001:2022 NIST CSF 2.0 CIS Controls v8.1 Apache 2.0

๐Ÿ—ณ๏ธ Empower citizens ยท ๐Ÿ” Strengthen democratic accountability ยท ๐Ÿ•ต๏ธ Illuminate the political process

ยฉ 2008โ€“2026 Hack23 AB (Org.nr 559534-7807) ยท Maintainer: James Pether Sรถrling, CISSP CISM