Module: Dynamic News Index Generation - Multi-Language Article Aggregation

Automated news index generation system that dynamically scans published news articles across all 14 supported languages and generates corresponding index pages with proper metadata, filtering capabilities, and SEO optimization for parliamentary intelligence.

Operational Context: This script solves the critical maintenance problem of hardcoded article arrays in static index HTML files. Instead of manually updating article lists for 14 language variants, the system autonomously discovers published articles and generates index pages with consistent structure, metadata, and search optimization.

Multi-Language Support (14 languages):

  • English (en), Swedish (sv), Danish (da), Norwegian (no), Finnish (fi)
  • German (de), French (fr), Spanish (es), Dutch (nl)
  • Arabic (ar), Hebrew (he), Japanese (ja), Korean (ko), Chinese (zh)
  • Each language includes localized titles, keywords, breadcrumbs, filtering UI

Core Functionality:

  • Scans news/ directory recursively for published HTML article files
  • Extracts article metadata: title, date, description, language, category tags
  • Aggregates articles by language code for proper index organization
  • Generates dynamic filter controls: article type, topic category, sort order
  • Creates SEO-optimized index pages with proper JSON-LD schema markup
  • Implements responsive UI with accessibility features (WCAG 2.1 AA)

Intelligence Integration:

  • Enables real-time tracking of parliamentary activity coverage
  • Identifies news gaps and coverage imbalances across political topics
  • Supports rapid content discovery for international audience segments
  • Maintains consistent intelligence narrative across language variants

Article Discovery & Categorization:

  • Prospective news: Upcoming parliamentary events (week-ahead, committee agendas)
  • Retrospective news: Completed parliamentary activities (votes, decisions)
  • Analysis pieces: Strategic interpretation of political developments
  • Breaking news: Urgent parliamentary developments and emergency situations

Topic Categories:

  • Parliament (Riksdag structure, committee reports, legislative process)
  • Government (cabinet decisions, ministry statements, regulatory actions)
  • Defense (national security, military policy, NATO/EU coordination)
  • Environment (climate policy, emissions trading, sustainability)
  • Committees (specific committee activities and cross-committee coordination)
  • Legislation (bill tracking, proposal analysis, amendments)

SEO & Accessibility:

  • Implements Open Graph meta tags for social media sharing
  • Generates JSON-LD structured data for search engine indexing
  • Provides hreflang tags for multi-language version discovery
  • Includes alt text for all images and proper heading hierarchy
  • Mobile-responsive design with proper viewport configuration

Localization Features:

  • Translated UI elements: filter labels, breadcrumbs, no-results messages
  • Localized date formats and sort options
  • Language-specific keyword optimization for search engines
  • Proper locale configuration (en_US, sv_SE, etc.)

Integration Points:

  • Invoked by CI/CD pipeline after news generation scripts
  • Feeds article discovery service for dashboard widgets
  • Consumed by search functionality and site navigation
  • Referenced by analytics tracking for page visit metrics

Data Integrity:

  • Validates article file existence before inclusion
  • Handles missing or malformed metadata gracefully
  • Provides diagnostic output for troubleshooting
  • Complies with ISO 27001:2022 A.12.6.1 (change management)

Usage: node scripts/generate-news-indexes.js

Generates: news/index.html, news/index_sv.html, ... news/index_zh.html

Version:
  • 3.0.0
Author:
  • Hack23 AB (Content Infrastructure Team)
License:
  • Apache-2.0
Source:
See:
  • NEWS_WORKFLOW_EXECUTIVE_SUMMARY.md for context
  • generate-news-enhanced.js (produces articles consumed by this indexer)
  • html-utils.js (provides HTML entity escaping)
  • WCAG 2.1 AA accessibility standards

Methods

(inner) buildSlugToLanguagesMap(articlesByLang) → {Object}

Build map of base slugs to available languages for cross-language discovery

Detects articles with the same base slug (e.g., "2026-02-14-week-ahead") across different languages and maps slug -> [language codes].

Parameters:
Name Type Description
articlesByLang Object

Articles grouped by language

Source:
Returns:

Map of slug -> array of language codes

Type
Object

(inner) classifyArticleType()

Classify article type based on content and filename. Supports detection keywords in all 14 languages.

Source:

(inner) extractDateFromJSONLD(html) → {string|null}

Extract date from JSON-LD structured data

Parameters:
Name Type Description
html string

HTML content

Source:
Returns:

Date in YYYY-MM-DD format or null

Type
string | null

(inner) extractFromFilename()

Extract date from filename (YYYY-MM-DD format)

Source:

(inner) extractMetaContent()

Extract content from meta tags

Fixed: regex now properly handles apostrophes and special characters in content

Source:

(inner) extractTags()

Extract tags from article:tag meta tags

Source:

(inner) extractTitle()

Extract title from tag</p> </div> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line469">line 469</a> </li></ul></dd> </dl> <h4 class="name" id="~extractTopics"><span class="type-signature">(inner) </span>extractTopics<span class="signature">()</span><span class="type-signature"></span></h4> <div class="description"> <p>Extract topics from article tags. Supports topic detection keywords in all 14 languages.</p> </div> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line619">line 619</a> </li></ul></dd> </dl> <h4 class="name" id="~generateAllIndexes"><span class="type-signature">(inner) </span>generateAllIndexes<span class="signature">()</span><span class="type-signature"></span></h4> <div class="description"> <p>Main generation function</p> </div> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line1247">line 1247</a> </li></ul></dd> </dl> <h4 class="name" id="~generateAvailableLanguages"><span class="type-signature">(inner) </span>generateAvailableLanguages<span class="signature">(languages, currentLang)</span><span class="type-signature"> → {string}</span></h4> <div class="description"> <p>Generate "Available in" text with language badges</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>languages</code></td> <td class="type"> <span class="param-type">Array</span> </td> <td class="description last"><p>Array of language codes</p></td> </tr> <tr> <td class="name"><code>currentLang</code></td> <td class="type"> <span class="param-type">string</span> </td> <td class="description last"><p>Current display language</p></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line384">line 384</a> </li></ul></dd> </dl> <h5>Returns:</h5> <div class="param-desc"> <p>HTML for available languages display</p> </div> <dl> <dt> Type </dt> <dd> <span class="param-type">string</span> </dd> </dl> <h4 class="name" id="~generateHreflangTags"><span class="type-signature">(inner) </span>generateHreflangTags<span class="signature">()</span><span class="type-signature"></span></h4> <div class="description"> <p>Generate hreflang tags for all languages</p> </div> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line1170">line 1170</a> </li></ul></dd> </dl> <h4 class="name" id="~generateIndexHTML"><span class="type-signature">(inner) </span>generateIndexHTML<span class="signature">(langKey, languageArticles, allArticlesByLang)</span><span class="type-signature"></span></h4> <div class="description"> <p>Generate index HTML for a specific language</p> <p>Each language index displays only articles in that specific language. Articles include metadata about which other languages they're available in for cross-language discovery indicators.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>langKey</code></td> <td class="type"> <span class="param-type">string</span> </td> <td class="description last"><p>Language code (en, sv, etc.)</p></td> </tr> <tr> <td class="name"><code>languageArticles</code></td> <td class="type"> <span class="param-type">Array</span> </td> <td class="description last"><p>Articles in the target language only</p></td> </tr> <tr> <td class="name"><code>allArticlesByLang</code></td> <td class="type"> <span class="param-type">Object</span> </td> <td class="description last"><p>All articles grouped by language</p></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line799">line 799</a> </li></ul></dd> </dl> <h4 class="name" id="~generateLanguageBadge"><span class="type-signature">(inner) </span>generateLanguageBadge<span class="signature">(lang, isRTL)</span><span class="type-signature"> → {string}</span></h4> <div class="description"> <p>Generate language badge HTML for an article</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th>Default</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>lang</code></td> <td class="type"> <span class="param-type">string</span> </td> <td class="default"> </td> <td class="description last"><p>Language code (e.g., 'en', 'sv')</p></td> </tr> <tr> <td class="name"><code>isRTL</code></td> <td class="type"> <span class="param-type">boolean</span> </td> <td class="default"> false </td> <td class="description last"><p>Whether the current display language is RTL</p></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line355">line 355</a> </li></ul></dd> </dl> <h5>Returns:</h5> <div class="param-desc"> <p>HTML for language badge</p> </div> <dl> <dt> Type </dt> <dd> <span class="param-type">string</span> </dd> </dl> <h4 class="name" id="~generateLanguageNotice"><span class="type-signature">(inner) </span>generateLanguageNotice<span class="signature">()</span><span class="type-signature"></span></h4> <div class="description"> <p>Generate language availability notice for non-EN/SV indexes</p> </div> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line1216">line 1216</a> </li></ul></dd> </dl> <h4 class="name" id="~generateLanguageSwitcherNav"><span class="type-signature">(inner) </span>generateLanguageSwitcherNav<span class="signature">(currentLang)</span><span class="type-signature"> → {string}</span></h4> <div class="description"> <p>Generate language switcher navigation for news index pages</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>currentLang</code></td> <td class="type"> <span class="param-type">string</span> </td> <td class="description last"><p>Current language code</p></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line367">line 367</a> </li></ul></dd> </dl> <h5>Returns:</h5> <div class="param-desc"> <p>HTML for language switcher nav</p> </div> <dl> <dt> Type </dt> <dd> <span class="param-type">string</span> </dd> </dl> <h4 class="name" id="~generateRTLStyles"><span class="type-signature">(inner) </span>generateRTLStyles<span class="signature">()</span><span class="type-signature"></span></h4> <div class="description"> <p>Generate minimal RTL-specific styles All other styles are now in styles.css under .news-page scope</p> </div> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line1191">line 1191</a> </li></ul></dd> </dl> <h4 class="name" id="~getAllArticlesWithLanguageInfo"><span class="type-signature">(inner) </span>getAllArticlesWithLanguageInfo<span class="signature">(articlesByLang)</span><span class="type-signature"> → {Array}</span></h4> <div class="description"> <p>Get all articles with language information for cross-language discovery</p> <p>NOTE: This function is currently UNUSED in production but preserved for potential future use. It was implemented for Issue #155's cross-language discovery feature but the requirement changed to language-specific filtering (each index shows only articles in its target language).</p> <p>If cross-language discovery is needed again, this function can be used instead of passing articlesByLang[langKey] to generateIndexHTML() on line 958.</p> <p>This function collects ALL articles from all languages and enriches each with metadata about which language versions are available for the same slug.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>articlesByLang</code></td> <td class="type"> <span class="param-type">Object</span> </td> <td class="description last"><p>Articles grouped by language</p></td> </tr> </tbody> </table> <dl class="details"> <dt class="important tag-deprecated">Deprecated:</dt><dd><ul class="dummy"><li>Currently unused - kept for potential future cross-language discovery</li></ul></dd> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line750">line 750</a> </li></ul></dd> </dl> <h5>Returns:</h5> <div class="param-desc"> <p>All articles with availableLanguages field</p> </div> <dl> <dt> Type </dt> <dd> <span class="param-type">Array</span> </dd> </dl> <h4 class="name" id="~normalizeDateString"><span class="type-signature">(inner) </span>normalizeDateString<span class="signature">(dateStr)</span><span class="type-signature"> → {string}</span></h4> <div class="description"> <p>Normalize date string to YYYY-MM-DD format Handles full ISO timestamps, simple dates, etc.</p> </div> <h5>Parameters:</h5> <table class="params"> <thead> <tr> <th>Name</th> <th>Type</th> <th class="last">Description</th> </tr> </thead> <tbody> <tr> <td class="name"><code>dateStr</code></td> <td class="type"> <span class="param-type">string</span> </td> <td class="description last"><p>Date string in various formats</p></td> </tr> </tbody> </table> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line480">line 480</a> </li></ul></dd> </dl> <h5>Returns:</h5> <div class="param-desc"> <p>Date in YYYY-MM-DD format</p> </div> <dl> <dt> Type </dt> <dd> <span class="param-type">string</span> </dd> </dl> <h4 class="name" id="~parseArticleMetadata"><span class="type-signature">(inner) </span>parseArticleMetadata<span class="signature">()</span><span class="type-signature"></span></h4> <div class="description"> <p>Parse HTML file to extract article metadata</p> </div> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line400">line 400</a> </li></ul></dd> </dl> <h4 class="name" id="~scanNewsArticles"><span class="type-signature">(inner) </span>scanNewsArticles<span class="signature">()</span><span class="type-signature"></span></h4> <div class="description"> <p>Scan news directory and group articles by language</p> </div> <dl class="details"> <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="scripts_generate-news-indexes.js.html">scripts/generate-news-indexes.js</a>, <a href="scripts_generate-news-indexes.js.html#line656">line 656</a> </li></ul></dd> </dl> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-Analytics_CoalitionIntelligence.html">Analytics/CoalitionIntelligence</a></li><li><a href="module-Analytics_CommitteeIntelligence.html">Analytics/CommitteeIntelligence</a></li><li><a href="module-Article%2520Quality%2520Enhancer%2520-%2520Economist-Style%2520Content%2520Validation%2520Framework.html">Article Quality Enhancer - Economist-Style Content Validation Framework</a></li><li><a href="module-BehavioralAnalysis_AnomalyDetection.html">BehavioralAnalysis/AnomalyDetection</a></li><li><a href="module-CIA%2520Schema%2520Synchronization%2520-%2520Upstream%2520Schema%2520Caching%2520System.html">CIA Schema Synchronization - Upstream Schema Caching System</a></li><li><a href="module-CIA%2520Schema%2520Update%2520Detection%2520-%2520Upstream%2520Change%2520Monitoring.html">CIA Schema Update Detection - Upstream Change Monitoring</a></li><li><a href="module-ChartUtils.html">ChartUtils</a></li><li><a href="module-CoalitionIntelligence_StatusAnalysis.html">CoalitionIntelligence/StatusAnalysis</a></li><li><a href="module-ContentGeneration_BreakingNews.html">ContentGeneration/BreakingNews</a></li><li><a href="module-ContentGeneration_CommitteeAnalysis.html">ContentGeneration/CommitteeAnalysis</a></li><li><a href="module-ContentGeneration_GovernmentPolicy.html">ContentGeneration/GovernmentPolicy</a></li><li><a href="module-ContentGeneration_OppositionAnalysis.html">ContentGeneration/OppositionAnalysis</a></li><li><a href="module-ContentGeneration_ProspectiveAnalysis.html">ContentGeneration/ProspectiveAnalysis</a></li><li><a href="module-DashboardIntegration.html">DashboardIntegration</a></li><li><a href="module-DataPipeline_CIADataLoader.html">DataPipeline/CIADataLoader</a></li><li><a href="module-Dynamic%2520News%2520Index%2520Generation%2520-%2520Multi-Language%2520Article%2520Aggregation.html">Dynamic News Index Generation - Multi-Language Article Aggregation</a></li><li><a href="module-ElectionIntelligence_CycleAnalysis.html">ElectionIntelligence/CycleAnalysis</a></li><li><a href="module-ElectionIntelligence_PreElectionMonitoring.html">ElectionIntelligence/PreElectionMonitoring</a></li><li><a href="module-GovernmentIntelligence_MinistryAnalysis.html">GovernmentIntelligence/MinistryAnalysis</a></li><li><a href="module-HTML%2520Utilities%2520-%2520DOM%2520Manipulation%2520and%2520XSS%2520Prevention%2520Framework.html">HTML Utilities - DOM Manipulation and XSS Prevention Framework</a></li><li><a href="module-IndividualIntelligence_PoliticianProfiling.html">IndividualIntelligence/PoliticianProfiling</a></li><li><a href="module-Infrastructure_Accessibility.html">Infrastructure/Accessibility</a></li><li><a href="module-Infrastructure_TypeGeneration.html">Infrastructure/TypeGeneration</a></li><li><a href="module-Infrastructure_VisualEvidence.html">Infrastructure/VisualEvidence</a></li><li><a href="module-Infrastructure_WorkflowOrchestration.html">Infrastructure/WorkflowOrchestration</a></li><li><a href="module-Intelligence%2520Operations_Article%2520Template%2520Generation.html">Intelligence Operations/Article Template Generation</a></li><li><a href="module-Intelligence%2520Operations_Automated%2520News%2520Generation.html">Intelligence Operations/Automated News Generation</a></li><li><a href="module-Intelligence%2520Operations_CIA%2520Statistical%2520Intelligence.html">Intelligence Operations/CIA Statistical Intelligence</a></li><li><a href="module-Intelligence%2520Operations_Data%2520Transformation%2520Pipeline.html">Intelligence Operations/Data Transformation Pipeline</a></li><li><a href="module-Intelligence%2520Operations_Editorial%2520Intelligence%2520Framework.html">Intelligence Operations/Editorial Intelligence Framework</a></li><li><a href="module-Intelligence%2520Operations_MCP%2520Intelligence%2520Server%2520Client.html">Intelligence Operations/MCP Intelligence Server Client</a></li><li><a href="module-Intelligence_Forecasting.html">Intelligence/Forecasting</a></li><li><a href="module-Intelligence_Internationalization.html">Intelligence/Internationalization</a></li><li><a href="module-Intelligence_Orchestration.html">Intelligence/Orchestration</a></li><li><a href="module-Intelligence_Visualization.html">Intelligence/Visualization</a></li><li><a href="module-Logger.html">Logger</a></li><li><a href="module-News%2520Backport%2520Generation%2520-%2520Historical%2520Article%2520Migration%2520System.html">News Backport Generation - Historical Article Migration System</a></li><li><a href="module-OSINT_DataAcquisition.html">OSINT/DataAcquisition</a></li><li><a href="module-Party%2520Variants%2520-%2520Political%2520Party%2520Name%2520Normalization%2520Framework.html">Party Variants - Political Party Name Normalization Framework</a></li><li><a href="module-PoliticalIntelligence_PartyAnalysis.html">PoliticalIntelligence/PartyAnalysis</a></li><li><a href="module-RiskAssessment_AnomalyDetection.html">RiskAssessment/AnomalyDetection</a></li><li><a href="module-Sitemap%2520Generation%2520-%2520Multi-Language%2520SEO%2520Infrastructure.html">Sitemap Generation - Multi-Language SEO Infrastructure</a></li><li><a href="module-Statistics%2520Update%2520from%2520CIA%2520Database%2520-%2520Automated%2520Metrics%2520Synchronization.html">Statistics Update from CIA Database - Automated Metrics Synchronization</a></li><li><a href="module-TemporalIntelligence_SeasonalAnalysis.html">TemporalIntelligence/SeasonalAnalysis</a></li><li><a href="module-UIUtilities_NavigationEnhancement.html">UIUtilities/NavigationEnhancement</a></li><li><a href="module-Validation_CrossReferenceTracking.html">Validation/CrossReferenceTracking</a></li><li><a href="module-Validation_EveningAnalysis.html">Validation/EveningAnalysis</a></li><li><a href="module-Validation_LanguageMetadata.html">Validation/LanguageMetadata</a></li><li><a href="module-Validation_SchemaValidation.html">Validation/SchemaValidation</a></li><li><a href="module-Validation_TranslationQuality.html">Validation/TranslationQuality</a></li><li><a href="module-Validation_VisualRegression.html">Validation/VisualRegression</a></li><li><a href="module-Vocabulary%2520Extraction%2520-%2520Political%2520Terminology%2520Pattern%2520Analysis.html">Vocabulary Extraction - Political Terminology Pattern Analysis</a></li></ul><h3>Classes</h3><ul><li><a href="module-BehavioralAnalysis_AnomalyDetection-AnomalyAlertSystem.html">AnomalyAlertSystem</a></li><li><a href="module-BehavioralAnalysis_AnomalyDetection-AnomalyDetectionCharts.html">AnomalyDetectionCharts</a></li><li><a href="module-BehavioralAnalysis_AnomalyDetection-AnomalyDetectionDashboard.html">AnomalyDetectionDashboard</a></li><li><a href="module-BehavioralAnalysis_AnomalyDetection-AnomalyDetectionDataManager.html">AnomalyDetectionDataManager</a></li><li><a href="module-ElectionIntelligence_CycleAnalysis-ElectionCycleCharts.html">ElectionCycleCharts</a></li><li><a href="module-ElectionIntelligence_CycleAnalysis-ElectionCycleDashboard.html">ElectionCycleDashboard</a></li><li><a href="module-ElectionIntelligence_CycleAnalysis-ElectionCycleDataManager.html">ElectionCycleDataManager</a></li><li><a href="module-GovernmentIntelligence_MinistryAnalysis-AccessibilityTable.html">AccessibilityTable</a></li><li><a href="module-GovernmentIntelligence_MinistryAnalysis-DataCache.html">DataCache</a></li><li><a href="module-GovernmentIntelligence_MinistryAnalysis-DataFetcher.html">DataFetcher</a></li><li><a href="module-GovernmentIntelligence_MinistryAnalysis-DecisionImpactChart.html">DecisionImpactChart</a></li><li><a href="module-GovernmentIntelligence_MinistryAnalysis-InfluenceChart.html">InfluenceChart</a></li><li><a href="module-GovernmentIntelligence_MinistryAnalysis-MinistryDashboard.html">MinistryDashboard</a></li><li><a href="module-GovernmentIntelligence_MinistryAnalysis-ProductivityChart.html">ProductivityChart</a></li><li><a href="module-GovernmentIntelligence_MinistryAnalysis-RiskHeatMap.html">RiskHeatMap</a></li><li><a href="module-Infrastructure_WorkflowOrchestration.WorkflowStateCoordinator.html">WorkflowStateCoordinator</a></li><li><a href="module-Intelligence%2520Operations_MCP%2520Intelligence%2520Server%2520Client.MCPClient.html">MCPClient</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.5</a> </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>