riksdagsmonitor 0.8.15 → 0.8.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/dist/lib/dashboards/coalition-dashboard.d.ts.map +1 -1
  2. package/dist/lib/dashboards/coalition-dashboard.js +25 -9
  3. package/dist/lib/dashboards/coalition-dashboard.js.map +1 -1
  4. package/dist/lib/dashboards/coalition-loader.d.ts.map +1 -1
  5. package/dist/lib/dashboards/coalition-loader.js +68 -32
  6. package/dist/lib/dashboards/coalition-loader.js.map +1 -1
  7. package/dist/lib/shared/chart-factory.d.ts +9 -2
  8. package/dist/lib/shared/chart-factory.d.ts.map +1 -1
  9. package/dist/lib/shared/chart-factory.js +9 -2
  10. package/dist/lib/shared/chart-factory.js.map +1 -1
  11. package/dist/lib/shared/theme.d.ts +1 -18
  12. package/dist/lib/shared/theme.d.ts.map +1 -1
  13. package/dist/lib/shared/theme.js +1 -18
  14. package/dist/lib/shared/theme.js.map +1 -1
  15. package/dist/scripts/analysis-reader.d.ts +2 -1
  16. package/dist/scripts/analysis-reader.d.ts.map +1 -1
  17. package/dist/scripts/analysis-reader.js.map +1 -1
  18. package/dist/scripts/data-transformers/content-generators/index.d.ts +32 -4
  19. package/dist/scripts/data-transformers/content-generators/index.d.ts.map +1 -1
  20. package/dist/scripts/data-transformers/content-generators/index.js +4 -2
  21. package/dist/scripts/data-transformers/content-generators/index.js.map +1 -1
  22. package/dist/scripts/data-transformers/content-generators/shared.d.ts +44 -2
  23. package/dist/scripts/data-transformers/content-generators/shared.d.ts.map +1 -1
  24. package/dist/scripts/data-transformers/content-generators/shared.js +9 -3
  25. package/dist/scripts/data-transformers/content-generators/shared.js.map +1 -1
  26. package/dist/scripts/generate-news-enhanced/config.d.ts +5 -4
  27. package/dist/scripts/generate-news-enhanced/config.d.ts.map +1 -1
  28. package/dist/scripts/generate-news-enhanced/config.js +3 -3
  29. package/dist/scripts/generate-news-enhanced/config.js.map +1 -1
  30. package/dist/scripts/generate-news-enhanced/generators.d.ts.map +1 -1
  31. package/dist/scripts/generate-news-enhanced/generators.js +38 -15
  32. package/dist/scripts/generate-news-enhanced/generators.js.map +1 -1
  33. package/dist/scripts/generate-news-enhanced/helpers.d.ts +1 -2
  34. package/dist/scripts/generate-news-enhanced/helpers.d.ts.map +1 -1
  35. package/dist/scripts/generate-news-enhanced/helpers.js +31 -1
  36. package/dist/scripts/generate-news-enhanced/helpers.js.map +1 -1
  37. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts +12 -1
  38. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts.map +1 -1
  39. package/dist/scripts/generate-news-enhanced/swot-analyzer.js +48 -0
  40. package/dist/scripts/generate-news-enhanced/swot-analyzer.js.map +1 -1
  41. package/dist/scripts/news-types/breaking-news.d.ts.map +1 -1
  42. package/dist/scripts/news-types/breaking-news.js +5 -1
  43. package/dist/scripts/news-types/breaking-news.js.map +1 -1
  44. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts +64 -1
  45. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts.map +1 -1
  46. package/dist/scripts/pre-article-analysis/markdown-serializer.js.map +1 -1
  47. package/dist/scripts/pre-article-analysis.d.ts.map +1 -1
  48. package/dist/scripts/pre-article-analysis.js +20 -7
  49. package/dist/scripts/pre-article-analysis.js.map +1 -1
  50. package/dist/scripts/types/article.d.ts +33 -3
  51. package/dist/scripts/types/article.d.ts.map +1 -1
  52. package/package.json +3 -3
  53. package/dist/scripts/ai-analysis/coalition-detector.d.ts +0 -28
  54. package/dist/scripts/ai-analysis/coalition-detector.d.ts.map +0 -1
  55. package/dist/scripts/ai-analysis/coalition-detector.js +0 -242
  56. package/dist/scripts/ai-analysis/coalition-detector.js.map +0 -1
  57. package/dist/scripts/ai-analysis/dashboard-analyzer.d.ts +0 -73
  58. package/dist/scripts/ai-analysis/dashboard-analyzer.d.ts.map +0 -1
  59. package/dist/scripts/ai-analysis/dashboard-analyzer.js +0 -511
  60. package/dist/scripts/ai-analysis/dashboard-analyzer.js.map +0 -1
  61. package/dist/scripts/ai-analysis/document-analyzer.d.ts +0 -196
  62. package/dist/scripts/ai-analysis/document-analyzer.d.ts.map +0 -1
  63. package/dist/scripts/ai-analysis/document-analyzer.js +0 -1001
  64. package/dist/scripts/ai-analysis/document-analyzer.js.map +0 -1
  65. package/dist/scripts/ai-analysis/domains/index.d.ts +0 -15
  66. package/dist/scripts/ai-analysis/domains/index.d.ts.map +0 -1
  67. package/dist/scripts/ai-analysis/domains/index.js +0 -494
  68. package/dist/scripts/ai-analysis/domains/index.js.map +0 -1
  69. package/dist/scripts/ai-analysis/helpers.d.ts +0 -43
  70. package/dist/scripts/ai-analysis/helpers.d.ts.map +0 -1
  71. package/dist/scripts/ai-analysis/helpers.js +0 -79
  72. package/dist/scripts/ai-analysis/helpers.js.map +0 -1
  73. package/dist/scripts/ai-analysis/index.d.ts +0 -15
  74. package/dist/scripts/ai-analysis/index.d.ts.map +0 -1
  75. package/dist/scripts/ai-analysis/index.js +0 -14
  76. package/dist/scripts/ai-analysis/index.js.map +0 -1
  77. package/dist/scripts/ai-analysis/pipeline.d.ts +0 -41
  78. package/dist/scripts/ai-analysis/pipeline.d.ts.map +0 -1
  79. package/dist/scripts/ai-analysis/pipeline.js +0 -208
  80. package/dist/scripts/ai-analysis/pipeline.js.map +0 -1
  81. package/dist/scripts/ai-analysis/political-significance.d.ts +0 -63
  82. package/dist/scripts/ai-analysis/political-significance.d.ts.map +0 -1
  83. package/dist/scripts/ai-analysis/political-significance.js +0 -227
  84. package/dist/scripts/ai-analysis/political-significance.js.map +0 -1
  85. package/dist/scripts/ai-analysis/quality-assessor.d.ts +0 -104
  86. package/dist/scripts/ai-analysis/quality-assessor.d.ts.map +0 -1
  87. package/dist/scripts/ai-analysis/quality-assessor.js +0 -554
  88. package/dist/scripts/ai-analysis/quality-assessor.js.map +0 -1
  89. package/dist/scripts/ai-analysis/swot/index.d.ts +0 -56
  90. package/dist/scripts/ai-analysis/swot/index.d.ts.map +0 -1
  91. package/dist/scripts/ai-analysis/swot/index.js +0 -360
  92. package/dist/scripts/ai-analysis/swot/index.js.map +0 -1
  93. package/dist/scripts/ai-analysis/swot/placeholders.d.ts +0 -30
  94. package/dist/scripts/ai-analysis/swot/placeholders.d.ts.map +0 -1
  95. package/dist/scripts/ai-analysis/swot/placeholders.js +0 -381
  96. package/dist/scripts/ai-analysis/swot/placeholders.js.map +0 -1
  97. package/dist/scripts/ai-analysis/types.d.ts +0 -333
  98. package/dist/scripts/ai-analysis/types.d.ts.map +0 -1
  99. package/dist/scripts/ai-analysis/types.js +0 -19
  100. package/dist/scripts/ai-analysis/types.js.map +0 -1
  101. package/dist/scripts/ai-analysis/visualisation/index.d.ts +0 -15
  102. package/dist/scripts/ai-analysis/visualisation/index.d.ts.map +0 -1
  103. package/dist/scripts/ai-analysis/visualisation/index.js +0 -179
  104. package/dist/scripts/ai-analysis/visualisation/index.js.map +0 -1
  105. package/dist/scripts/analysis-framework/cross-reference.d.ts +0 -35
  106. package/dist/scripts/analysis-framework/cross-reference.d.ts.map +0 -1
  107. package/dist/scripts/analysis-framework/cross-reference.js +0 -290
  108. package/dist/scripts/analysis-framework/cross-reference.js.map +0 -1
  109. package/dist/scripts/analysis-framework/index.d.ts +0 -79
  110. package/dist/scripts/analysis-framework/index.d.ts.map +0 -1
  111. package/dist/scripts/analysis-framework/index.js +0 -133
  112. package/dist/scripts/analysis-framework/index.js.map +0 -1
  113. package/dist/scripts/analysis-framework/lenses/citizen.d.ts +0 -29
  114. package/dist/scripts/analysis-framework/lenses/citizen.d.ts.map +0 -1
  115. package/dist/scripts/analysis-framework/lenses/citizen.js +0 -220
  116. package/dist/scripts/analysis-framework/lenses/citizen.js.map +0 -1
  117. package/dist/scripts/analysis-framework/lenses/economic.d.ts +0 -29
  118. package/dist/scripts/analysis-framework/lenses/economic.d.ts.map +0 -1
  119. package/dist/scripts/analysis-framework/lenses/economic.js +0 -227
  120. package/dist/scripts/analysis-framework/lenses/economic.js.map +0 -1
  121. package/dist/scripts/analysis-framework/lenses/government.d.ts +0 -32
  122. package/dist/scripts/analysis-framework/lenses/government.d.ts.map +0 -1
  123. package/dist/scripts/analysis-framework/lenses/government.js +0 -265
  124. package/dist/scripts/analysis-framework/lenses/government.js.map +0 -1
  125. package/dist/scripts/analysis-framework/lenses/international.d.ts +0 -29
  126. package/dist/scripts/analysis-framework/lenses/international.d.ts.map +0 -1
  127. package/dist/scripts/analysis-framework/lenses/international.js +0 -248
  128. package/dist/scripts/analysis-framework/lenses/international.js.map +0 -1
  129. package/dist/scripts/analysis-framework/lenses/media.d.ts +0 -29
  130. package/dist/scripts/analysis-framework/lenses/media.d.ts.map +0 -1
  131. package/dist/scripts/analysis-framework/lenses/media.js +0 -211
  132. package/dist/scripts/analysis-framework/lenses/media.js.map +0 -1
  133. package/dist/scripts/analysis-framework/lenses/opposition.d.ts +0 -29
  134. package/dist/scripts/analysis-framework/lenses/opposition.d.ts.map +0 -1
  135. package/dist/scripts/analysis-framework/lenses/opposition.js +0 -234
  136. package/dist/scripts/analysis-framework/lenses/opposition.js.map +0 -1
  137. package/dist/scripts/analysis-framework/methodology-types.d.ts +0 -309
  138. package/dist/scripts/analysis-framework/methodology-types.d.ts.map +0 -1
  139. package/dist/scripts/analysis-framework/methodology-types.js +0 -38
  140. package/dist/scripts/analysis-framework/methodology-types.js.map +0 -1
  141. package/dist/scripts/analysis-framework/political-classification.d.ts +0 -58
  142. package/dist/scripts/analysis-framework/political-classification.d.ts.map +0 -1
  143. package/dist/scripts/analysis-framework/political-classification.js +0 -414
  144. package/dist/scripts/analysis-framework/political-classification.js.map +0 -1
  145. package/dist/scripts/analysis-framework/political-risk-assessment.d.ts +0 -74
  146. package/dist/scripts/analysis-framework/political-risk-assessment.d.ts.map +0 -1
  147. package/dist/scripts/analysis-framework/political-risk-assessment.js +0 -656
  148. package/dist/scripts/analysis-framework/political-risk-assessment.js.map +0 -1
  149. package/dist/scripts/analysis-framework/political-threat-analysis.d.ts +0 -65
  150. package/dist/scripts/analysis-framework/political-threat-analysis.d.ts.map +0 -1
  151. package/dist/scripts/analysis-framework/political-threat-analysis.js +0 -553
  152. package/dist/scripts/analysis-framework/political-threat-analysis.js.map +0 -1
  153. package/dist/scripts/analysis-framework/significance-scorer.d.ts +0 -62
  154. package/dist/scripts/analysis-framework/significance-scorer.d.ts.map +0 -1
  155. package/dist/scripts/analysis-framework/significance-scorer.js +0 -196
  156. package/dist/scripts/analysis-framework/significance-scorer.js.map +0 -1
  157. package/dist/scripts/analysis-framework/types.d.ts +0 -138
  158. package/dist/scripts/analysis-framework/types.d.ts.map +0 -1
  159. package/dist/scripts/analysis-framework/types.js +0 -12
  160. package/dist/scripts/analysis-framework/types.js.map +0 -1
  161. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.d.ts +0 -89
  162. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.d.ts.map +0 -1
  163. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.js +0 -667
  164. package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.js.map +0 -1
  165. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.d.ts +0 -83
  166. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.d.ts.map +0 -1
  167. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.js +0 -219
  168. package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.js.map +0 -1
@@ -1,211 +0,0 @@
1
- /**
2
- * @module analysis-framework/lenses/media
3
- * @description Media/public discourse lens for parliamentary document analysis.
4
- *
5
- * Evaluates every document from the media and public discourse vantage point:
6
- * - Newsworthiness scoring
7
- * - Public sentiment indicators
8
- * - Narrative framing analysis
9
- * - Controversy potential
10
- *
11
- * @author Hack23 AB
12
- * @license Apache-2.0
13
- */
14
- import { detectPolicyDomains, detectNarrativeFrames } from '../../data-transformers/policy-analysis.js';
15
- import { scoreNewsworthiness } from '../../data-transformers/content-generators/newsworthiness.js';
16
- // ---------------------------------------------------------------------------
17
- // Controversy keyword banks
18
- // ---------------------------------------------------------------------------
19
- /** Topics that reliably generate media controversy */
20
- const CONTROVERSY_KEYWORDS = [
21
- 'migration', 'invandring', 'kriminalitet', 'gängbrott', 'gang crime',
22
- 'skattehöjning', 'tax rise', 'skattesänkning', 'tax cut',
23
- 'sjukvårdskris', 'healthcare crisis', 'vårdkö', 'healthcare queue',
24
- 'skolresultat', 'school results', 'klimatkris', 'climate crisis',
25
- 'pensionstrygghet', 'pension security', 'bostadskris', 'housing crisis',
26
- 'lön', 'wage', 'pensionsgap', 'pension gap', 'könsgap', 'gender gap',
27
- 'korruption', 'corruption', 'svågerpolitik', 'cronyism', 'lobbying',
28
- 'mutor', 'bribery', 'bedrägeri', 'fraud',
29
- ];
30
- /** Human-interest / emotive keywords that boost media salience */
31
- const EMOTIVE_KEYWORDS = [
32
- 'barn', 'children', 'äldre', 'elderly', 'sjuka', 'sick', 'utsatt', 'vulnerable',
33
- 'offer', 'victim', 'kris', 'crisis', 'nödläge', 'emergency', 'katastrof', 'catastrophe',
34
- 'hopp', 'hope', 'framtid', 'future', 'reform', 'förändring', 'change',
35
- ];
36
- // ---------------------------------------------------------------------------
37
- // Localised labels
38
- // ---------------------------------------------------------------------------
39
- const LENS_LABELS = {
40
- en: { lensName: 'Media & Public Discourse', stakeholder: 'Media & Public' },
41
- sv: { lensName: 'Media och offentlig debatt', stakeholder: 'Media och allmänheten' },
42
- da: { lensName: 'Medier og offentlig debat', stakeholder: 'Medier og offentlighed' },
43
- no: { lensName: 'Medier og offentlig debatt', stakeholder: 'Medier og offentligheten' },
44
- fi: { lensName: 'Media ja julkinen diskurssi', stakeholder: 'Media ja yleisö' },
45
- de: { lensName: 'Medien und öffentlicher Diskurs', stakeholder: 'Medien und Öffentlichkeit' },
46
- fr: { lensName: 'Médias et discours public', stakeholder: 'Médias et public' },
47
- es: { lensName: 'Medios y discurso público', stakeholder: 'Medios y público' },
48
- nl: { lensName: 'Media en publiek discours', stakeholder: 'Media en publiek' },
49
- ar: { lensName: 'الإعلام والخطاب العام', stakeholder: 'الإعلام والجمهور' },
50
- he: { lensName: 'תקשורת ושיח ציבורי', stakeholder: 'תקשורת וציבור' },
51
- ja: { lensName: 'メディア・公論の視点', stakeholder: 'メディア・世論' },
52
- ko: { lensName: '미디어·공론 관점', stakeholder: '미디어·여론' },
53
- zh: { lensName: '媒体与公共话语视角', stakeholder: '媒体与公众' },
54
- };
55
- function label(lang) {
56
- return LENS_LABELS[lang] ?? LENS_LABELS['en'];
57
- }
58
- function containsAny(text, keywords) {
59
- const lower = text.toLowerCase();
60
- return keywords.some(kw => lower.includes(kw.toLowerCase()));
61
- }
62
- function countKeywords(text, keywords) {
63
- const lower = text.toLowerCase();
64
- return keywords.filter(kw => lower.includes(kw.toLowerCase())).length;
65
- }
66
- // ---------------------------------------------------------------------------
67
- // Scoring helpers
68
- // ---------------------------------------------------------------------------
69
- function computeImpact(newsScore) {
70
- if (newsScore.overall >= 65)
71
- return 'high';
72
- if (newsScore.overall >= 35)
73
- return 'medium';
74
- return 'low';
75
- }
76
- function computeSentiment(doc) {
77
- const allText = [doc.titel, doc.title, doc.summary, doc.notis].filter(Boolean).join(' ');
78
- const controversyCount = countKeywords(allText, CONTROVERSY_KEYWORDS);
79
- const emotiveCount = countKeywords(allText, EMOTIVE_KEYWORDS);
80
- // High controversy typically generates negative public framing
81
- if (controversyCount >= 2)
82
- return 'negative';
83
- if (emotiveCount >= 2 && controversyCount === 0)
84
- return 'positive';
85
- return 'neutral';
86
- }
87
- // ---------------------------------------------------------------------------
88
- // Summary generation
89
- // ---------------------------------------------------------------------------
90
- function buildSummary(doc, newsScore, _lang) {
91
- const docType = doc.doktyp || doc.documentType || 'document';
92
- const allText = [doc.titel, doc.title, doc.summary, doc.notis].filter(Boolean).join(' ');
93
- const frames = detectNarrativeFrames(doc);
94
- const controversyNote = containsAny(allText, CONTROVERSY_KEYWORDS)
95
- ? ' This document touches on topics with high controversy potential and is likely to attract media attention.'
96
- : '';
97
- const frameNote = frames.length > 0
98
- ? ` Narrative frames detected: ${frames.slice(0, 2).join(', ')}.`
99
- : '';
100
- const newsworthinessLevel = newsScore.overall >= 65 ? 'high' : newsScore.overall >= 35 ? 'moderate' : 'low';
101
- return `From the media perspective, this ${docType} has ${newsworthinessLevel} newsworthiness (score: ${newsScore.overall}/100).${controversyNote}${frameNote}`.trim();
102
- }
103
- // ---------------------------------------------------------------------------
104
- // SWOT contributions
105
- // ---------------------------------------------------------------------------
106
- function buildSwotContributions(doc, newsScore, lang) {
107
- const { stakeholder } = label(lang);
108
- const contributions = [];
109
- const allText = [doc.titel, doc.title, doc.summary, doc.notis].filter(Boolean).join(' ');
110
- if (newsScore.warrantsDeepInspection) {
111
- contributions.push({
112
- quadrant: 'opportunity',
113
- forStakeholder: stakeholder,
114
- text: `High newsworthiness score (${newsScore.overall}/100) creates strong public communication opportunity for political actors.`,
115
- impact: 'high',
116
- });
117
- }
118
- if (containsAny(allText, CONTROVERSY_KEYWORDS)) {
119
- contributions.push({
120
- quadrant: 'threat',
121
- forStakeholder: stakeholder,
122
- text: 'Document addresses controversial topics with high potential for negative media framing and public backlash.',
123
- impact: 'high',
124
- });
125
- }
126
- if (newsScore.topics.length > 0) {
127
- contributions.push({
128
- quadrant: 'strength',
129
- forStakeholder: stakeholder,
130
- text: `Strategic topics detected (${newsScore.topics.slice(0, 3).join(', ')}) align with current public agenda.`,
131
- impact: 'medium',
132
- });
133
- }
134
- return contributions;
135
- }
136
- // ---------------------------------------------------------------------------
137
- // Dashboard metrics
138
- // ---------------------------------------------------------------------------
139
- function buildDashboardMetrics(doc, newsScore) {
140
- const allText = [doc.titel, doc.title, doc.summary, doc.notis].filter(Boolean).join(' ');
141
- return [
142
- { metricName: 'Newsworthiness Score', value: newsScore.overall, unit: '/100' },
143
- { metricName: 'Controversy Signals', value: countKeywords(allText, CONTROVERSY_KEYWORDS), unit: 'hits' },
144
- { metricName: 'Emotive Keywords', value: countKeywords(allText, EMOTIVE_KEYWORDS), unit: 'hits' },
145
- { metricName: 'Strategic Topics', value: newsScore.topics.length, unit: 'topics' },
146
- ];
147
- }
148
- // ---------------------------------------------------------------------------
149
- // Mindmap nodes
150
- // ---------------------------------------------------------------------------
151
- function buildMindmapNodes(doc, _lang) {
152
- const nodes = [];
153
- const allText = [doc.titel, doc.title, doc.summary, doc.notis].filter(Boolean).join(' ');
154
- const frames = detectNarrativeFrames(doc);
155
- if (containsAny(allText, CONTROVERSY_KEYWORDS)) {
156
- nodes.push({ branch: 'Controversy Risk', item: 'High Media Salience', weight: 'critical' });
157
- }
158
- for (const frame of frames.slice(0, 2)) {
159
- nodes.push({ branch: 'Narrative Frames', item: frame, weight: 'significant' });
160
- }
161
- nodes.push({ branch: 'Public Discourse', item: 'News Agenda Relevance', weight: 'moderate' });
162
- return nodes;
163
- }
164
- // ---------------------------------------------------------------------------
165
- // Confidence
166
- // ---------------------------------------------------------------------------
167
- function computeConfidence(doc, cia) {
168
- let score = 45;
169
- if (doc.fullText || doc.fullContent)
170
- score += 20;
171
- if (doc.summary || doc.notis)
172
- score += 10;
173
- if (cia)
174
- score += 15;
175
- if (doc.speeches && doc.speeches.length > 0)
176
- score += 10;
177
- return Math.min(100, score);
178
- }
179
- // ---------------------------------------------------------------------------
180
- // Public API
181
- // ---------------------------------------------------------------------------
182
- /**
183
- * Apply the Media/Public Discourse analysis lens to a single parliamentary document.
184
- *
185
- * Evaluates newsworthiness, public sentiment, narrative framing, and controversy
186
- * potential.
187
- *
188
- * @param doc - The document to analyse
189
- * @param cia - Optional CIA context
190
- * @param lang - Target language
191
- * @returns A `PerspectiveAnalysis` for the media lens
192
- */
193
- export function analyzeMediaPerspective(doc, cia, lang, precomputedDomains) {
194
- const keyActors = ['Swedish Media', 'SVT', 'DN', 'Aftonbladet', 'SR'];
195
- const domains = precomputedDomains ?? detectPolicyDomains(doc, 'en');
196
- const newsScore = scoreNewsworthiness([doc], cia);
197
- const relatedPolicies = [...domains, ...newsScore.topics.slice(0, 2)].filter(Boolean);
198
- return {
199
- lens: 'media',
200
- summary: buildSummary(doc, newsScore, lang),
201
- impact: computeImpact(newsScore),
202
- sentiment: computeSentiment(doc),
203
- keyActors: keyActors.slice(0, 5),
204
- relatedPolicies: relatedPolicies.slice(0, 5),
205
- swotContribution: buildSwotContributions(doc, newsScore, lang),
206
- dashboardMetrics: buildDashboardMetrics(doc, newsScore),
207
- mindmapNodes: buildMindmapNodes(doc, lang),
208
- confidence: computeConfidence(doc, cia),
209
- };
210
- }
211
- //# sourceMappingURL=media.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../../../../scripts/analysis-framework/lenses/media.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- /**
2
- * @module analysis-framework/lenses/opposition
3
- * @description Opposition perspective lens for parliamentary document analysis.
4
- *
5
- * Evaluates every document from the opposition's vantage point:
6
- * - Scrutiny opportunities
7
- * - Alternative policy proposals
8
- * - Electoral positioning impact
9
- * - Coalition-building potential
10
- *
11
- * @author Hack23 AB
12
- * @license Apache-2.0
13
- */
14
- import type { RawDocument, CIAContext } from '../../data-transformers/types.js';
15
- import type { Language } from '../../types/language.js';
16
- import type { PerspectiveAnalysis } from '../types.js';
17
- /**
18
- * Apply the Opposition analysis lens to a single parliamentary document.
19
- *
20
- * Evaluates scrutiny opportunities, alternative policy proposals, electoral
21
- * positioning impact, and coalition-building potential.
22
- *
23
- * @param doc - The document to analyse
24
- * @param cia - Optional CIA context
25
- * @param lang - Target language
26
- * @returns A `PerspectiveAnalysis` for the opposition lens
27
- */
28
- export declare function analyzeOppositionPerspective(doc: RawDocument, cia: CIAContext | undefined, lang: Language | string, precomputedDomains?: string[]): PerspectiveAnalysis;
29
- //# sourceMappingURL=opposition.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opposition.d.ts","sourceRoot":"","sources":["../../../../scripts/analysis-framework/lenses/opposition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAA0E,MAAM,aAAa,CAAC;AAsN/H;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,UAAU,GAAG,SAAS,EAC3B,IAAI,EAAE,QAAQ,GAAG,MAAM,EACvB,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAC5B,mBAAmB,CAyBrB"}
@@ -1,234 +0,0 @@
1
- /**
2
- * @module analysis-framework/lenses/opposition
3
- * @description Opposition perspective lens for parliamentary document analysis.
4
- *
5
- * Evaluates every document from the opposition's vantage point:
6
- * - Scrutiny opportunities
7
- * - Alternative policy proposals
8
- * - Electoral positioning impact
9
- * - Coalition-building potential
10
- *
11
- * @author Hack23 AB
12
- * @license Apache-2.0
13
- */
14
- import { detectPolicyDomains } from '../../data-transformers/policy-analysis.js';
15
- // ---------------------------------------------------------------------------
16
- // Scrutiny trigger keywords
17
- // ---------------------------------------------------------------------------
18
- /** Topics that typically attract intense opposition scrutiny */
19
- const SCRUTINY_KEYWORDS = [
20
- 'privatisering', 'privatization', 'avreglering', 'deregulation',
21
- 'skattesänkning', 'tax cut', 'neddragning', 'cut', 'nedskärning',
22
- 'socialbidrag', 'welfare', 'sjukvård', 'healthcare', 'skola', 'school',
23
- 'pension', 'arbetsmarknad', 'labour market', 'integration', 'migration',
24
- 'bostadsbrist', 'housing shortage', 'korruption', 'corruption',
25
- 'granskning', 'scrutiny', 'utredning', 'inquiry',
26
- ];
27
- // ---------------------------------------------------------------------------
28
- // Localised labels
29
- // ---------------------------------------------------------------------------
30
- const LENS_LABELS = {
31
- en: { lensName: 'Opposition Perspective', stakeholder: 'Opposition' },
32
- sv: { lensName: 'Oppositionsperspektiv', stakeholder: 'Oppositionen' },
33
- da: { lensName: 'Oppositionsperspektiv', stakeholder: 'Oppositionen' },
34
- no: { lensName: 'Opposisjonsperspektiv', stakeholder: 'Opposisjonen' },
35
- fi: { lensName: 'Opposition näkökulma', stakeholder: 'Oppositio' },
36
- de: { lensName: 'Oppositionsperspektive', stakeholder: 'Opposition' },
37
- fr: { lensName: "Perspective de l'opposition", stakeholder: "Opposition" },
38
- es: { lensName: 'Perspectiva de la oposición', stakeholder: 'Oposición' },
39
- nl: { lensName: 'Oppositieperspectief', stakeholder: 'Oppositie' },
40
- ar: { lensName: 'منظور المعارضة', stakeholder: 'المعارضة' },
41
- he: { lensName: 'פרספקטיבת האופוזיציה', stakeholder: 'האופוזיציה' },
42
- ja: { lensName: '野党の視点', stakeholder: '野党' },
43
- ko: { lensName: '야당 관점', stakeholder: '야당' },
44
- zh: { lensName: '反对党视角', stakeholder: '反对党' },
45
- };
46
- function label(lang) {
47
- return LENS_LABELS[lang] ?? LENS_LABELS['en'];
48
- }
49
- function containsAny(text, keywords) {
50
- const lower = text.toLowerCase();
51
- return keywords.some(kw => lower.includes(kw.toLowerCase()));
52
- }
53
- // ---------------------------------------------------------------------------
54
- // Scoring helpers
55
- // ---------------------------------------------------------------------------
56
- function computeImpact(doc) {
57
- const docType = doc.doktyp || doc.documentType || '';
58
- // Government propositions are prime opposition targets
59
- if (docType === 'prop')
60
- return 'high';
61
- // Committee reports signal a policy decision about to be enacted
62
- if (docType === 'bet')
63
- return 'high';
64
- // Opposition motions: medium self-originated impact
65
- if (docType === 'mot')
66
- return 'medium';
67
- return 'low';
68
- }
69
- function computeSentiment(doc) {
70
- const allText = [doc.titel, doc.title, doc.summary, doc.notis].filter(Boolean).join(' ');
71
- // Opposition motions are opportunities for the opposition → positive
72
- if (doc.doktyp === 'mot')
73
- return 'positive';
74
- // Scrutiny-triggering content from the government is an opportunity
75
- if (doc.doktyp === 'prop' && containsAny(allText, SCRUTINY_KEYWORDS))
76
- return 'positive';
77
- // Committee reports passing government proposals: negative for opposition
78
- if (doc.doktyp === 'bet')
79
- return 'negative';
80
- return 'neutral';
81
- }
82
- // ---------------------------------------------------------------------------
83
- // Summary generation
84
- // ---------------------------------------------------------------------------
85
- function buildSummary(doc, cia, _lang, domains) {
86
- const title = doc.titel || doc.title || 'Untitled';
87
- const docType = doc.doktyp || doc.documentType || 'document';
88
- const domainPhrase = domains.length > 0 ? ` in ${domains.slice(0, 2).join(' and ')}` : '';
89
- const denialNote = cia
90
- ? ` Note: approximately ${cia.overallMotionDenialRate ?? 99}% of opposition motions are denied.`
91
- : '';
92
- if (docType === 'mot') {
93
- return `From the opposition perspective, this motion${domainPhrase} signals a policy alternative and positions the party electorally.${denialNote} Success in passage is unlikely, but the motion builds party profile and accountability record.`;
94
- }
95
- const scrutiny = containsAny(title, SCRUTINY_KEYWORDS);
96
- const scrutinyNote = scrutiny ? ' This document creates scrutiny opportunities the opposition should exploit in debates and committee hearings.' : '';
97
- return `From the opposition perspective, this ${docType}${domainPhrase} warrants scrutiny for alignment with citizen welfare and democratic accountability.${scrutinyNote}`.trim();
98
- }
99
- // ---------------------------------------------------------------------------
100
- // SWOT contributions
101
- // ---------------------------------------------------------------------------
102
- function buildSwotContributions(doc, cia, lang) {
103
- const { stakeholder } = label(lang);
104
- const contributions = [];
105
- const docType = doc.doktyp || doc.documentType || '';
106
- const allText = [doc.titel, doc.title, doc.summary, doc.notis].filter(Boolean).join(' ');
107
- if (docType === 'prop' && containsAny(allText, SCRUTINY_KEYWORDS)) {
108
- contributions.push({
109
- quadrant: 'opportunity',
110
- forStakeholder: stakeholder,
111
- text: 'Government proposal touches politically sensitive topics, creating scrutiny and differentiation opportunities.',
112
- impact: 'high',
113
- });
114
- }
115
- if (docType === 'mot') {
116
- contributions.push({
117
- quadrant: 'strength',
118
- forStakeholder: stakeholder,
119
- text: 'Opposition motion on record, building electoral positioning and demonstrating policy alternative.',
120
- impact: 'medium',
121
- });
122
- }
123
- if (cia && cia.coalitionStability.stabilityScore < 50) {
124
- contributions.push({
125
- quadrant: 'opportunity',
126
- forStakeholder: stakeholder,
127
- text: `Coalition fragility (stability: ${cia.coalitionStability.stabilityScore}) creates defection recruitment opportunities.`,
128
- impact: 'high',
129
- });
130
- }
131
- if (cia && cia.overallMotionDenialRate && cia.overallMotionDenialRate > 95) {
132
- contributions.push({
133
- quadrant: 'threat',
134
- forStakeholder: stakeholder,
135
- text: `High motion denial rate (${cia.overallMotionDenialRate}%) limits legislative impact of opposition proposals.`,
136
- impact: 'medium',
137
- });
138
- }
139
- return contributions;
140
- }
141
- // ---------------------------------------------------------------------------
142
- // Dashboard metrics
143
- // ---------------------------------------------------------------------------
144
- function buildDashboardMetrics(_doc, cia) {
145
- const metrics = [];
146
- if (cia) {
147
- metrics.push({
148
- metricName: 'Motion Denial Rate',
149
- value: cia.overallMotionDenialRate ?? 99,
150
- unit: '%',
151
- });
152
- metrics.push({
153
- metricName: 'Coalition Stability',
154
- value: cia.coalitionStability.stabilityScore,
155
- unit: 'score',
156
- });
157
- }
158
- return metrics;
159
- }
160
- // ---------------------------------------------------------------------------
161
- // Mindmap nodes
162
- // ---------------------------------------------------------------------------
163
- function buildMindmapNodes(doc, _lang, domains) {
164
- const nodes = [];
165
- const docType = doc.doktyp || doc.documentType || '';
166
- nodes.push({
167
- branch: 'Scrutiny Targets',
168
- item: docType === 'prop' ? 'Government Bill Accountability' : 'Legislative Oversight',
169
- weight: docType === 'prop' ? 'critical' : 'significant',
170
- });
171
- for (const domain of domains.slice(0, 2)) {
172
- nodes.push({
173
- branch: 'Electoral Positioning',
174
- item: domain,
175
- weight: 'moderate',
176
- });
177
- }
178
- return nodes;
179
- }
180
- // ---------------------------------------------------------------------------
181
- // Confidence
182
- // ---------------------------------------------------------------------------
183
- function computeConfidence(doc, cia) {
184
- let score = 40;
185
- if (doc.fullText || doc.fullContent)
186
- score += 20;
187
- if (doc.summary || doc.notis)
188
- score += 10;
189
- if (cia)
190
- score += 20;
191
- if (doc.speeches && doc.speeches.length > 0)
192
- score += 10;
193
- return Math.min(100, score);
194
- }
195
- // ---------------------------------------------------------------------------
196
- // Public API
197
- // ---------------------------------------------------------------------------
198
- /**
199
- * Apply the Opposition analysis lens to a single parliamentary document.
200
- *
201
- * Evaluates scrutiny opportunities, alternative policy proposals, electoral
202
- * positioning impact, and coalition-building potential.
203
- *
204
- * @param doc - The document to analyse
205
- * @param cia - Optional CIA context
206
- * @param lang - Target language
207
- * @returns A `PerspectiveAnalysis` for the opposition lens
208
- */
209
- export function analyzeOppositionPerspective(doc, cia, lang, precomputedDomains) {
210
- // Key actors: opposition parties in parliament
211
- const keyActors = ['Opposition Leader', 'Shadow Cabinet'];
212
- if (cia) {
213
- // Include parties that are not the largest governing bloc
214
- const parties = (cia.partyPerformance ?? []).slice(0, 4).map(p => p.partyName);
215
- keyActors.push(...parties);
216
- }
217
- if (doc.parti)
218
- keyActors.unshift(doc.parti);
219
- const domains = precomputedDomains ?? detectPolicyDomains(doc, 'en');
220
- const relatedPolicies = [...domains, 'Electoral Programme', 'Parliamentary Scrutiny'].filter(Boolean);
221
- return {
222
- lens: 'opposition',
223
- summary: buildSummary(doc, cia, lang, domains),
224
- impact: computeImpact(doc),
225
- sentiment: computeSentiment(doc),
226
- keyActors: [...new Set(keyActors)].slice(0, 5),
227
- relatedPolicies: relatedPolicies.slice(0, 5),
228
- swotContribution: buildSwotContributions(doc, cia, lang),
229
- dashboardMetrics: buildDashboardMetrics(doc, cia),
230
- mindmapNodes: buildMindmapNodes(doc, lang, domains),
231
- confidence: computeConfidence(doc, cia),
232
- };
233
- }
234
- //# sourceMappingURL=opposition.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opposition.js","sourceRoot":"","sources":["../../../../scripts/analysis-framework/lenses/opposition.ts"],"names":[],"mappings":"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"}