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,290 +0,0 @@
1
- /**
2
- * @module analysis-framework/cross-reference
3
- * @description Cross-document relationship detection for parliamentary document batches.
4
- *
5
- * Detects the following relationship types between documents:
6
- * - `responds-to` — Motion responding to a government proposition
7
- * - `amends` — Amendment document modifying an existing act
8
- * - `implements` — Implementation measure for an EU directive or treaty commitment
9
- * - `contradicts` — Conflicting policy positions between two documents
10
- * - `related-topic` — Thematically related documents sharing policy domains
11
- *
12
- * @author Hack23 AB
13
- * @license Apache-2.0
14
- */
15
- import { detectPolicyDomains } from '../data-transformers/policy-analysis.js';
16
- import { extractPropRef } from '../data-transformers/document-analysis.js';
17
- // ---------------------------------------------------------------------------
18
- // Constants
19
- // ---------------------------------------------------------------------------
20
- /** Minimum domain overlap to classify two documents as `related-topic` */
21
- const RELATED_TOPIC_DOMAIN_OVERLAP = 2;
22
- /** EU implementation keywords */
23
- const EU_IMPL_KEYWORDS = [
24
- 'implementering', 'implementation', 'genomförande', 'transponering', 'transposition',
25
- 'genomföra', 'implementera', 'med anledning av eu', 'eu-direktiv', 'eu directive',
26
- ];
27
- /** Amendment keywords */
28
- const AMEND_KEYWORDS = [
29
- 'ändring', 'amendment', 'ändringslag', 'ändringsförordning', 'tillägg', 'addition',
30
- 'komplettering', 'supplement', 'uppdatering', 'update', 'revision',
31
- ];
32
- /** Conflict indicator terms (paired policy positions) */
33
- const CONFLICT_PAIRS = [
34
- ['skattehöjning', 'skattesänkning'],
35
- ['tax increase', 'tax cut'],
36
- ['privatisering', 'förstatligande'],
37
- ['privatization', 'nationalization'],
38
- ['avreglering', 'reglering'],
39
- ['deregulation', 'regulation'],
40
- ['immigration increase', 'immigration decrease'],
41
- ['fler i arbete', 'bidragsbegränsning'],
42
- ];
43
- // ---------------------------------------------------------------------------
44
- // Helper utilities
45
- // ---------------------------------------------------------------------------
46
- export function docId(doc) {
47
- return doc.dok_id || doc.url || doc.titel || doc.title || 'unknown';
48
- }
49
- function docText(doc) {
50
- return [doc.titel, doc.title, doc.summary, doc.notis].filter(Boolean).join(' ').toLowerCase();
51
- }
52
- function containsAny(text, keywords) {
53
- return keywords.some(kw => text.includes(kw.toLowerCase()));
54
- }
55
- // ---------------------------------------------------------------------------
56
- // Individual link detectors
57
- // ---------------------------------------------------------------------------
58
- /**
59
- * Detect "responds-to" links: motions that reference a specific proposition.
60
- */
61
- function detectRespondsTo(docs) {
62
- const links = [];
63
- const propositions = docs.filter(d => d.doktyp === 'prop' || d.documentType === 'prop');
64
- for (const motion of docs.filter(d => d.doktyp === 'mot' || d.documentType === 'mot')) {
65
- const title = motion.titel || motion.title || '';
66
- const propRef = extractPropRef(title);
67
- if (!propRef)
68
- continue;
69
- // Match against propositions in the batch by dok_id or title substring
70
- const matched = propositions.find(p => (p.dok_id && p.dok_id.includes(propRef)) ||
71
- ((p.titel || p.title || '').includes(propRef)));
72
- if (matched) {
73
- links.push({
74
- sourceId: docId(motion),
75
- targetId: docId(matched),
76
- type: 'responds-to',
77
- reason: `Motion references proposition ${propRef}`,
78
- confidence: 95,
79
- });
80
- }
81
- }
82
- return links;
83
- }
84
- /**
85
- * Detect "implements" links: documents implementing EU directives or treaty commitments.
86
- */
87
- function detectImplements(docs, domainCache) {
88
- const links = [];
89
- const implementers = docs.filter(d => containsAny(docText(d), EU_IMPL_KEYWORDS));
90
- const directives = docs.filter(d => containsAny(docText(d), ['eu-direktiv', 'eu directive', 'förordning', 'fördrag']));
91
- for (const impl of implementers) {
92
- for (const dir of directives) {
93
- if (docId(impl) === docId(dir))
94
- continue;
95
- // Heuristic: same policy domain and implementation keyword
96
- const implDomains = domainCache.get(docId(impl)) ?? [];
97
- const dirDomains = domainCache.get(docId(dir)) ?? [];
98
- const overlap = implDomains.filter(d => dirDomains.includes(d));
99
- if (overlap.length >= 1) {
100
- links.push({
101
- sourceId: docId(impl),
102
- targetId: docId(dir),
103
- type: 'implements',
104
- reason: `Implementation document shares domain(s) ${overlap.join(', ')} with directive/treaty document`,
105
- confidence: 60,
106
- });
107
- }
108
- }
109
- }
110
- return links;
111
- }
112
- /**
113
- * Detect "amends" links: documents explicitly amending earlier legislation.
114
- */
115
- function detectAmends(docs) {
116
- const links = [];
117
- const amenders = docs.filter(d => containsAny(docText(d), AMEND_KEYWORDS));
118
- for (const amender of amenders) {
119
- for (const other of docs) {
120
- if (docId(amender) === docId(other))
121
- continue;
122
- // If the amending doc's title references keywords from another doc's title
123
- const amenderTitle = (amender.titel || amender.title || '').toLowerCase();
124
- const otherTitle = (other.titel || other.title || '').toLowerCase();
125
- if (otherTitle.length > 5 && amenderTitle.includes(otherTitle.slice(0, Math.min(20, otherTitle.length)))) {
126
- links.push({
127
- sourceId: docId(amender),
128
- targetId: docId(other),
129
- type: 'amends',
130
- reason: `Amending document title overlaps with target document title`,
131
- confidence: 55,
132
- });
133
- }
134
- }
135
- }
136
- return links;
137
- }
138
- /**
139
- * Test whether `text` contains the term, using word-boundary regex when the
140
- * term is a substring of its conflict partner (e.g. "reglering" inside
141
- * "avreglering"). This prevents compound-word matches from masking the
142
- * simpler term.
143
- */
144
- function matchesTerm(text, term, regex) {
145
- if (!regex)
146
- return text.includes(term);
147
- return regex.test(text);
148
- }
149
- function escapeForRegex(s) {
150
- return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
151
- }
152
- /** Pre-computed flags: true when one conflict term is a substring of the other */
153
- const BOUNDARY_FLAGS = CONFLICT_PAIRS.map(([a, b]) => [b.includes(a), a.includes(b)]);
154
- /**
155
- * Pre-compiled regex patterns for conflict terms that need word-boundary matching.
156
- * `null` means the term can use simple `includes()`.
157
- */
158
- const TERM_REGEXES = CONFLICT_PAIRS.map(([a, b], idx) => {
159
- const [aNeedsBoundary, bNeedsBoundary] = BOUNDARY_FLAGS[idx];
160
- return [
161
- aNeedsBoundary ? new RegExp(`(?<![a-zåäö])${escapeForRegex(a)}`, 'i') : null,
162
- bNeedsBoundary ? new RegExp(`(?<![a-zåäö])${escapeForRegex(b)}`, 'i') : null,
163
- ];
164
- });
165
- /**
166
- * Detect "contradicts" links: documents with opposing policy positions.
167
- */
168
- function detectContradicts(docs) {
169
- const links = [];
170
- for (let i = 0; i < docs.length; i++) {
171
- for (let j = i + 1; j < docs.length; j++) {
172
- const docA = docs[i];
173
- const docB = docs[j];
174
- const textA = docText(docA);
175
- const textB = docText(docB);
176
- for (let p = 0; p < CONFLICT_PAIRS.length; p++) {
177
- const [termA, termB] = CONFLICT_PAIRS[p];
178
- const [regexA, regexB] = TERM_REGEXES[p];
179
- const aHasA = matchesTerm(textA, termA.toLowerCase(), regexA);
180
- const aHasB = matchesTerm(textA, termB.toLowerCase(), regexB);
181
- const bHasA = matchesTerm(textB, termA.toLowerCase(), regexA);
182
- const bHasB = matchesTerm(textB, termB.toLowerCase(), regexB);
183
- // True contradiction: one doc has term A, the other has term B (not both)
184
- if ((aHasA && !aHasB) && (bHasB && !bHasA)) {
185
- links.push({
186
- sourceId: docId(docA),
187
- targetId: docId(docB),
188
- type: 'contradicts',
189
- reason: `Conflicting policy positions: "${termA}" vs "${termB}"`,
190
- confidence: 65,
191
- });
192
- break; // One contradiction per pair is enough
193
- }
194
- if ((aHasB && !aHasA) && (bHasA && !bHasB)) {
195
- links.push({
196
- sourceId: docId(docA),
197
- targetId: docId(docB),
198
- type: 'contradicts',
199
- reason: `Conflicting policy positions: "${termB}" vs "${termA}"`,
200
- confidence: 65,
201
- });
202
- break;
203
- }
204
- }
205
- }
206
- }
207
- return links;
208
- }
209
- /**
210
- * Detect "related-topic" links: documents sharing multiple policy domains.
211
- */
212
- function detectRelatedTopics(docs, domainCache) {
213
- const links = [];
214
- for (let i = 0; i < docs.length; i++) {
215
- for (let j = i + 1; j < docs.length; j++) {
216
- const idA = docId(docs[i]);
217
- const idB = docId(docs[j]);
218
- const domainsA = domainCache.get(idA) ?? [];
219
- const domainsB = domainCache.get(idB) ?? [];
220
- const overlap = domainsA.filter(d => domainsB.includes(d));
221
- if (overlap.length >= RELATED_TOPIC_DOMAIN_OVERLAP) {
222
- links.push({
223
- sourceId: idA,
224
- targetId: idB,
225
- type: 'related-topic',
226
- reason: `Shares ${overlap.length} policy domain(s): ${overlap.join(', ')}`,
227
- confidence: Math.min(90, 40 + overlap.length * 15),
228
- });
229
- }
230
- }
231
- }
232
- return links;
233
- }
234
- // ---------------------------------------------------------------------------
235
- // Deduplication
236
- // ---------------------------------------------------------------------------
237
- /**
238
- * Remove duplicate links (same source, target, and type), keeping the
239
- * entry with the highest confidence.
240
- */
241
- function deduplicateLinks(links) {
242
- const seen = new Map();
243
- for (const link of links) {
244
- const key = `${link.sourceId}||${link.targetId}||${link.type}`;
245
- const existing = seen.get(key);
246
- if (!existing || link.confidence > existing.confidence) {
247
- seen.set(key, link);
248
- }
249
- }
250
- return Array.from(seen.values());
251
- }
252
- // ---------------------------------------------------------------------------
253
- // Public API
254
- // ---------------------------------------------------------------------------
255
- /**
256
- * Detect cross-document relationships in a batch of parliamentary documents.
257
- *
258
- * Identifies five relationship types:
259
- * - `responds-to` — Motion cites a government proposition
260
- * - `implements` — Implementation document for an EU directive or treaty
261
- * - `amends` — Document explicitly amending earlier legislation
262
- * - `contradicts` — Documents with opposing policy positions
263
- * - `related-topic` — Thematically related documents (≥2 shared domains)
264
- *
265
- * @param docs - Batch of documents to cross-reference
266
- * @param precomputedMap - Optional pre-computed domain map (docId → domains).
267
- * When provided, avoids redundant `detectPolicyDomains`
268
- * calls for documents already analysed in `analyzeDocuments()`.
269
- * @returns Deduplicated array of detected `DocumentLink` objects
270
- */
271
- export function detectCrossDocumentLinks(docs, precomputedMap) {
272
- if (docs.length < 2)
273
- return [];
274
- // Re-use caller-provided domain map or build one from scratch
275
- const domainCache = precomputedMap ?? new Map();
276
- if (!precomputedMap) {
277
- for (const doc of docs) {
278
- domainCache.set(docId(doc), detectPolicyDomains(doc, 'en'));
279
- }
280
- }
281
- const all = [
282
- ...detectRespondsTo(docs),
283
- ...detectImplements(docs, domainCache),
284
- ...detectAmends(docs),
285
- ...detectContradicts(docs),
286
- ...detectRelatedTopics(docs, domainCache),
287
- ];
288
- return deduplicateLinks(all);
289
- }
290
- //# sourceMappingURL=cross-reference.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cross-reference.js","sourceRoot":"","sources":["../../../scripts/analysis-framework/cross-reference.ts"],"names":[],"mappings":"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"}
@@ -1,79 +0,0 @@
1
- /**
2
- * @module analysis-framework
3
- * @description Multi-perspective document analysis framework orchestrator.
4
- *
5
- * Applies all six analysis lenses to every parliamentary document:
6
- * 1. Government 🏛️ — Policy execution, budget implications, coalition alignment
7
- * 2. Opposition ⚖️ — Scrutiny opportunities, electoral positioning
8
- * 3. Citizen 👥 — Service delivery, rights, cost-of-living
9
- * 4. Economic 💰 — GDP/employment, business regulation, trade
10
- * 5. International 🌍 — EU alignment, Nordic cooperation, treaty obligations
11
- * 6. Media 📰 — Newsworthiness, narrative framing, controversy
12
- *
13
- * Integration points:
14
- * - **SWOT Generator** — `perspective.swotContribution` entries
15
- * - **Dashboard Generator** — `perspective.dashboardMetrics` entries
16
- * - **Mindmap Generator** — `perspective.mindmapNodes` entries
17
- * - **Article Content** — `result.keyInsights` and per-lens `summary`
18
- * - **Newsworthiness** — `result.overallSignificance` drives article focus
19
- *
20
- * @example
21
- * ```typescript
22
- * import { analyzeDocument, analyzeDocuments } from './analysis-framework/index.js';
23
- * const result = analyzeDocument(doc, cia, 'en');
24
- * console.log(result.overallSignificance); // 1–10
25
- * ```
26
- *
27
- * @author Hack23 AB
28
- * @license Apache-2.0
29
- */
30
- import type { RawDocument, CIAContext } from '../data-transformers/types.js';
31
- import type { Language } from '../types/language.js';
32
- import type { DocumentAnalysisResult, BatchAnalysisResult } from './types.js';
33
- /**
34
- * Apply all six analysis lenses to a single parliamentary document.
35
- *
36
- * Cross-document links are set to an empty array because this function
37
- * operates on a single document without batch context. Use
38
- * `analyzeDocuments()` to get inter-document relationships.
39
- *
40
- * @param doc - The parliamentary document to analyse
41
- * @param cia - Optional CIA context (coalition stability, party performance, etc.)
42
- * @param lang - Target language for all generated text (default: 'en')
43
- * @param precomputedDomains - Optional pre-computed policy domains for this document.
44
- * When provided (e.g. from `analyzeDocuments()`), avoids a
45
- * redundant `detectPolicyDomains` call.
46
- * @returns A complete `DocumentAnalysisResult`
47
- */
48
- export declare function analyzeDocument(doc: RawDocument, cia?: CIAContext, lang?: Language | string, precomputedDomains?: string[]): DocumentAnalysisResult;
49
- /**
50
- * Apply all six analysis lenses to a batch of parliamentary documents.
51
- *
52
- * Also performs cross-document relationship detection across the entire batch.
53
- *
54
- * Performance target: 6 lenses × 30 documents < 120 seconds.
55
- * The implementation is synchronous and CPU-bound; network calls are not made.
56
- * Typical execution: ~1–5ms per document.
57
- *
58
- * @param docs - Documents to analyse
59
- * @param cia - Optional CIA context shared across all documents
60
- * @param lang - Target language for all generated text (default: 'en')
61
- * @returns A `BatchAnalysisResult` containing per-document results and
62
- * cross-document links detected across the whole batch
63
- */
64
- export declare function analyzeDocuments(docs: RawDocument[], cia?: CIAContext, lang?: Language | string): BatchAnalysisResult;
65
- export type { AnalysisLens, ImpactLevel, Sentiment, SwotContribution, DashboardMetric, MindmapNode, MindmapNodeWeight, PerspectiveAnalysis, DocumentLink, DocumentLinkType, DocumentAnalysisResult, BatchAnalysisResult, } from './types.js';
66
- export { detectCrossDocumentLinks, docId } from './cross-reference.js';
67
- export { computeSignificanceScore, computeOverallConfidence, extractKeyInsights } from './significance-scorer.js';
68
- export { analyzeGovernmentPerspective } from './lenses/government.js';
69
- export { analyzeOppositionPerspective } from './lenses/opposition.js';
70
- export { analyzeCitizenPerspective } from './lenses/citizen.js';
71
- export { analyzeEconomicPerspective } from './lenses/economic.js';
72
- export { analyzeInternationalPerspective } from './lenses/international.js';
73
- export { analyzeMediaPerspective } from './lenses/media.js';
74
- export type { PoliticalClassification, PublicInterestSensitivity, DemocraticIntegrityImpact, PolicyUrgency, EconomicImpact, GovernanceImpact, PoliticalCapitalImpact, LegislativeImpact, OverallClassification, PoliticalRiskCategory, LikelihoodLevel, RiskImpactLevel, PoliticalRiskAssessment, PoliticalRiskProfile, ThreatCategory, ThreatAgent, ThreatSeverity, PoliticalThreatAnalysis, PoliticalThreatProfile, MethodologyAnalysis, } from './methodology-types.js';
75
- export { LIKELIHOOD_PROBABILITY, IMPACT_WEIGHT } from './methodology-types.js';
76
- export { classifyPoliticalDocument, classifyPoliticalDocuments } from './political-classification.js';
77
- export { assessPoliticalRisk, assessSingleRiskCategory, computeRiskScore, deriveRiskPriority } from './political-risk-assessment.js';
78
- export { analysePoliticalThreats, analysePoliticalThreats as analyzePoliticalThreats, analyseSingleThreatCategory, analyseSingleThreatCategory as analyzeSingleThreatCategory, } from './political-threat-analysis.js';
79
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../scripts/analysis-framework/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAoBpB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,WAAW,EAChB,GAAG,CAAC,EAAE,UAAU,EAChB,IAAI,GAAE,QAAQ,GAAG,MAAa,EAC9B,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAC5B,sBAAsB,CAyBxB;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,WAAW,EAAE,EACnB,GAAG,CAAC,EAAE,UAAU,EAChB,IAAI,GAAE,QAAQ,GAAG,MAAa,GAC7B,mBAAmB,CA4BrB;AAMD,YAAY,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAClH,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAM5D,YAAY,EACV,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,cAAc,EACd,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE/E,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AACtG,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACrI,OAAO,EACL,uBAAuB,EACvB,uBAAuB,IAAI,uBAAuB,EAClD,2BAA2B,EAC3B,2BAA2B,IAAI,2BAA2B,GAC3D,MAAM,gCAAgC,CAAC"}
@@ -1,133 +0,0 @@
1
- /**
2
- * @module analysis-framework
3
- * @description Multi-perspective document analysis framework orchestrator.
4
- *
5
- * Applies all six analysis lenses to every parliamentary document:
6
- * 1. Government 🏛️ — Policy execution, budget implications, coalition alignment
7
- * 2. Opposition ⚖️ — Scrutiny opportunities, electoral positioning
8
- * 3. Citizen 👥 — Service delivery, rights, cost-of-living
9
- * 4. Economic 💰 — GDP/employment, business regulation, trade
10
- * 5. International 🌍 — EU alignment, Nordic cooperation, treaty obligations
11
- * 6. Media 📰 — Newsworthiness, narrative framing, controversy
12
- *
13
- * Integration points:
14
- * - **SWOT Generator** — `perspective.swotContribution` entries
15
- * - **Dashboard Generator** — `perspective.dashboardMetrics` entries
16
- * - **Mindmap Generator** — `perspective.mindmapNodes` entries
17
- * - **Article Content** — `result.keyInsights` and per-lens `summary`
18
- * - **Newsworthiness** — `result.overallSignificance` drives article focus
19
- *
20
- * @example
21
- * ```typescript
22
- * import { analyzeDocument, analyzeDocuments } from './analysis-framework/index.js';
23
- * const result = analyzeDocument(doc, cia, 'en');
24
- * console.log(result.overallSignificance); // 1–10
25
- * ```
26
- *
27
- * @author Hack23 AB
28
- * @license Apache-2.0
29
- */
30
- import { detectPolicyDomains } from '../data-transformers/policy-analysis.js';
31
- import { analyzeGovernmentPerspective } from './lenses/government.js';
32
- import { analyzeOppositionPerspective } from './lenses/opposition.js';
33
- import { analyzeCitizenPerspective } from './lenses/citizen.js';
34
- import { analyzeEconomicPerspective } from './lenses/economic.js';
35
- import { analyzeInternationalPerspective } from './lenses/international.js';
36
- import { analyzeMediaPerspective } from './lenses/media.js';
37
- import { detectCrossDocumentLinks, docId } from './cross-reference.js';
38
- import { computeSignificanceScore, computeOverallConfidence, extractKeyInsights, } from './significance-scorer.js';
39
- // ---------------------------------------------------------------------------
40
- // Core per-document analysis
41
- // ---------------------------------------------------------------------------
42
- /**
43
- * Apply all six analysis lenses to a single parliamentary document.
44
- *
45
- * Cross-document links are set to an empty array because this function
46
- * operates on a single document without batch context. Use
47
- * `analyzeDocuments()` to get inter-document relationships.
48
- *
49
- * @param doc - The parliamentary document to analyse
50
- * @param cia - Optional CIA context (coalition stability, party performance, etc.)
51
- * @param lang - Target language for all generated text (default: 'en')
52
- * @param precomputedDomains - Optional pre-computed policy domains for this document.
53
- * When provided (e.g. from `analyzeDocuments()`), avoids a
54
- * redundant `detectPolicyDomains` call.
55
- * @returns A complete `DocumentAnalysisResult`
56
- */
57
- export function analyzeDocument(doc, cia, lang = 'en', precomputedDomains) {
58
- // Reuse caller-provided domains or compute once per document
59
- const domains = precomputedDomains ?? detectPolicyDomains(doc, 'en');
60
- const perspectives = [
61
- analyzeGovernmentPerspective(doc, cia, lang, domains),
62
- analyzeOppositionPerspective(doc, cia, lang, domains),
63
- analyzeCitizenPerspective(doc, cia, lang, domains),
64
- analyzeEconomicPerspective(doc, cia, lang, domains),
65
- analyzeInternationalPerspective(doc, cia, lang, domains),
66
- analyzeMediaPerspective(doc, cia, lang, domains),
67
- ];
68
- const overallSignificance = computeSignificanceScore(doc, cia, perspectives, domains);
69
- const confidenceScore = computeOverallConfidence(doc, perspectives);
70
- const keyInsights = extractKeyInsights(perspectives);
71
- return {
72
- document: doc,
73
- overallSignificance,
74
- perspectives,
75
- crossDocumentLinks: [],
76
- keyInsights,
77
- confidenceScore,
78
- };
79
- }
80
- // ---------------------------------------------------------------------------
81
- // Batch analysis
82
- // ---------------------------------------------------------------------------
83
- /**
84
- * Apply all six analysis lenses to a batch of parliamentary documents.
85
- *
86
- * Also performs cross-document relationship detection across the entire batch.
87
- *
88
- * Performance target: 6 lenses × 30 documents < 120 seconds.
89
- * The implementation is synchronous and CPU-bound; network calls are not made.
90
- * Typical execution: ~1–5ms per document.
91
- *
92
- * @param docs - Documents to analyse
93
- * @param cia - Optional CIA context shared across all documents
94
- * @param lang - Target language for all generated text (default: 'en')
95
- * @returns A `BatchAnalysisResult` containing per-document results and
96
- * cross-document links detected across the whole batch
97
- */
98
- export function analyzeDocuments(docs, cia, lang = 'en') {
99
- const startMs = Date.now();
100
- // Per-document analyses (no cross-references yet)
101
- // Build a shared domain map so detectCrossDocumentLinks() doesn't re-compute.
102
- const domainMap = new Map();
103
- const results = docs.map(doc => {
104
- const domains = detectPolicyDomains(doc, 'en');
105
- domainMap.set(docId(doc), domains);
106
- return analyzeDocument(doc, cia, lang, domains);
107
- });
108
- // Cross-document link detection across the full batch — reuses domain map
109
- const crossDocumentLinks = detectCrossDocumentLinks(docs, domainMap);
110
- // Attach relevant links to each document result
111
- for (const result of results) {
112
- const id = docId(result.document);
113
- result.crossDocumentLinks = crossDocumentLinks.filter(link => link.sourceId === id || link.targetId === id);
114
- }
115
- return {
116
- results,
117
- crossDocumentLinks,
118
- processingTimeMs: Date.now() - startMs,
119
- };
120
- }
121
- export { detectCrossDocumentLinks, docId } from './cross-reference.js';
122
- export { computeSignificanceScore, computeOverallConfidence, extractKeyInsights } from './significance-scorer.js';
123
- export { analyzeGovernmentPerspective } from './lenses/government.js';
124
- export { analyzeOppositionPerspective } from './lenses/opposition.js';
125
- export { analyzeCitizenPerspective } from './lenses/citizen.js';
126
- export { analyzeEconomicPerspective } from './lenses/economic.js';
127
- export { analyzeInternationalPerspective } from './lenses/international.js';
128
- export { analyzeMediaPerspective } from './lenses/media.js';
129
- export { LIKELIHOOD_PROBABILITY, IMPACT_WEIGHT } from './methodology-types.js';
130
- export { classifyPoliticalDocument, classifyPoliticalDocuments } from './political-classification.js';
131
- export { assessPoliticalRisk, assessSingleRiskCategory, computeRiskScore, deriveRiskPriority } from './political-risk-assessment.js';
132
- export { analysePoliticalThreats, analysePoliticalThreats as analyzePoliticalThreats, analyseSingleThreatCategory, analyseSingleThreatCategory as analyzeSingleThreatCategory, } from './political-threat-analysis.js';
133
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../scripts/analysis-framework/index.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- /**
2
- * @module analysis-framework/lenses/citizen
3
- * @description Citizen perspective lens for parliamentary document analysis.
4
- *
5
- * Evaluates every document from the citizen's vantage point:
6
- * - Service delivery impact
7
- * - Rights and freedoms implications
8
- * - Cost of living effects
9
- * - Democratic participation impact
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 Citizen analysis lens to a single parliamentary document.
19
- *
20
- * Evaluates service delivery impact, rights and freedoms implications,
21
- * cost of living effects, and democratic participation impact.
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 citizen lens
27
- */
28
- export declare function analyzeCitizenPerspective(doc: RawDocument, cia: CIAContext | undefined, lang: Language | string, precomputedDomains?: string[]): PerspectiveAnalysis;
29
- //# sourceMappingURL=citizen.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"citizen.d.ts","sourceRoot":"","sources":["../../../../scripts/analysis-framework/lenses/citizen.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;AAyN/H;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,UAAU,GAAG,SAAS,EAC3B,IAAI,EAAE,QAAQ,GAAG,MAAM,EACvB,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAC5B,mBAAmB,CAiBrB"}