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.
- package/dist/lib/dashboards/coalition-dashboard.d.ts.map +1 -1
- package/dist/lib/dashboards/coalition-dashboard.js +25 -9
- package/dist/lib/dashboards/coalition-dashboard.js.map +1 -1
- package/dist/lib/dashboards/coalition-loader.d.ts.map +1 -1
- package/dist/lib/dashboards/coalition-loader.js +68 -32
- package/dist/lib/dashboards/coalition-loader.js.map +1 -1
- package/dist/lib/shared/chart-factory.d.ts +9 -2
- package/dist/lib/shared/chart-factory.d.ts.map +1 -1
- package/dist/lib/shared/chart-factory.js +9 -2
- package/dist/lib/shared/chart-factory.js.map +1 -1
- package/dist/lib/shared/theme.d.ts +1 -18
- package/dist/lib/shared/theme.d.ts.map +1 -1
- package/dist/lib/shared/theme.js +1 -18
- package/dist/lib/shared/theme.js.map +1 -1
- package/dist/scripts/analysis-reader.d.ts +2 -1
- package/dist/scripts/analysis-reader.d.ts.map +1 -1
- package/dist/scripts/analysis-reader.js.map +1 -1
- package/dist/scripts/data-transformers/content-generators/index.d.ts +32 -4
- package/dist/scripts/data-transformers/content-generators/index.d.ts.map +1 -1
- package/dist/scripts/data-transformers/content-generators/index.js +4 -2
- package/dist/scripts/data-transformers/content-generators/index.js.map +1 -1
- package/dist/scripts/data-transformers/content-generators/shared.d.ts +44 -2
- package/dist/scripts/data-transformers/content-generators/shared.d.ts.map +1 -1
- package/dist/scripts/data-transformers/content-generators/shared.js +9 -3
- package/dist/scripts/data-transformers/content-generators/shared.js.map +1 -1
- package/dist/scripts/generate-news-enhanced/config.d.ts +5 -4
- package/dist/scripts/generate-news-enhanced/config.d.ts.map +1 -1
- package/dist/scripts/generate-news-enhanced/config.js +3 -3
- package/dist/scripts/generate-news-enhanced/config.js.map +1 -1
- package/dist/scripts/generate-news-enhanced/generators.d.ts.map +1 -1
- package/dist/scripts/generate-news-enhanced/generators.js +38 -15
- package/dist/scripts/generate-news-enhanced/generators.js.map +1 -1
- package/dist/scripts/generate-news-enhanced/helpers.d.ts +1 -2
- package/dist/scripts/generate-news-enhanced/helpers.d.ts.map +1 -1
- package/dist/scripts/generate-news-enhanced/helpers.js +31 -1
- package/dist/scripts/generate-news-enhanced/helpers.js.map +1 -1
- package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts +12 -1
- package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts.map +1 -1
- package/dist/scripts/generate-news-enhanced/swot-analyzer.js +48 -0
- package/dist/scripts/generate-news-enhanced/swot-analyzer.js.map +1 -1
- package/dist/scripts/news-types/breaking-news.d.ts.map +1 -1
- package/dist/scripts/news-types/breaking-news.js +5 -1
- package/dist/scripts/news-types/breaking-news.js.map +1 -1
- package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts +64 -1
- package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts.map +1 -1
- package/dist/scripts/pre-article-analysis/markdown-serializer.js.map +1 -1
- package/dist/scripts/pre-article-analysis.d.ts.map +1 -1
- package/dist/scripts/pre-article-analysis.js +20 -7
- package/dist/scripts/pre-article-analysis.js.map +1 -1
- package/dist/scripts/types/article.d.ts +33 -3
- package/dist/scripts/types/article.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/scripts/ai-analysis/coalition-detector.d.ts +0 -28
- package/dist/scripts/ai-analysis/coalition-detector.d.ts.map +0 -1
- package/dist/scripts/ai-analysis/coalition-detector.js +0 -242
- package/dist/scripts/ai-analysis/coalition-detector.js.map +0 -1
- package/dist/scripts/ai-analysis/dashboard-analyzer.d.ts +0 -73
- package/dist/scripts/ai-analysis/dashboard-analyzer.d.ts.map +0 -1
- package/dist/scripts/ai-analysis/dashboard-analyzer.js +0 -511
- package/dist/scripts/ai-analysis/dashboard-analyzer.js.map +0 -1
- package/dist/scripts/ai-analysis/document-analyzer.d.ts +0 -196
- package/dist/scripts/ai-analysis/document-analyzer.d.ts.map +0 -1
- package/dist/scripts/ai-analysis/document-analyzer.js +0 -1001
- package/dist/scripts/ai-analysis/document-analyzer.js.map +0 -1
- package/dist/scripts/ai-analysis/domains/index.d.ts +0 -15
- package/dist/scripts/ai-analysis/domains/index.d.ts.map +0 -1
- package/dist/scripts/ai-analysis/domains/index.js +0 -494
- package/dist/scripts/ai-analysis/domains/index.js.map +0 -1
- package/dist/scripts/ai-analysis/helpers.d.ts +0 -43
- package/dist/scripts/ai-analysis/helpers.d.ts.map +0 -1
- package/dist/scripts/ai-analysis/helpers.js +0 -79
- package/dist/scripts/ai-analysis/helpers.js.map +0 -1
- package/dist/scripts/ai-analysis/index.d.ts +0 -15
- package/dist/scripts/ai-analysis/index.d.ts.map +0 -1
- package/dist/scripts/ai-analysis/index.js +0 -14
- package/dist/scripts/ai-analysis/index.js.map +0 -1
- package/dist/scripts/ai-analysis/pipeline.d.ts +0 -41
- package/dist/scripts/ai-analysis/pipeline.d.ts.map +0 -1
- package/dist/scripts/ai-analysis/pipeline.js +0 -208
- package/dist/scripts/ai-analysis/pipeline.js.map +0 -1
- package/dist/scripts/ai-analysis/political-significance.d.ts +0 -63
- package/dist/scripts/ai-analysis/political-significance.d.ts.map +0 -1
- package/dist/scripts/ai-analysis/political-significance.js +0 -227
- package/dist/scripts/ai-analysis/political-significance.js.map +0 -1
- package/dist/scripts/ai-analysis/quality-assessor.d.ts +0 -104
- package/dist/scripts/ai-analysis/quality-assessor.d.ts.map +0 -1
- package/dist/scripts/ai-analysis/quality-assessor.js +0 -554
- package/dist/scripts/ai-analysis/quality-assessor.js.map +0 -1
- package/dist/scripts/ai-analysis/swot/index.d.ts +0 -56
- package/dist/scripts/ai-analysis/swot/index.d.ts.map +0 -1
- package/dist/scripts/ai-analysis/swot/index.js +0 -360
- package/dist/scripts/ai-analysis/swot/index.js.map +0 -1
- package/dist/scripts/ai-analysis/swot/placeholders.d.ts +0 -30
- package/dist/scripts/ai-analysis/swot/placeholders.d.ts.map +0 -1
- package/dist/scripts/ai-analysis/swot/placeholders.js +0 -381
- package/dist/scripts/ai-analysis/swot/placeholders.js.map +0 -1
- package/dist/scripts/ai-analysis/types.d.ts +0 -333
- package/dist/scripts/ai-analysis/types.d.ts.map +0 -1
- package/dist/scripts/ai-analysis/types.js +0 -19
- package/dist/scripts/ai-analysis/types.js.map +0 -1
- package/dist/scripts/ai-analysis/visualisation/index.d.ts +0 -15
- package/dist/scripts/ai-analysis/visualisation/index.d.ts.map +0 -1
- package/dist/scripts/ai-analysis/visualisation/index.js +0 -179
- package/dist/scripts/ai-analysis/visualisation/index.js.map +0 -1
- package/dist/scripts/analysis-framework/cross-reference.d.ts +0 -35
- package/dist/scripts/analysis-framework/cross-reference.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/cross-reference.js +0 -290
- package/dist/scripts/analysis-framework/cross-reference.js.map +0 -1
- package/dist/scripts/analysis-framework/index.d.ts +0 -79
- package/dist/scripts/analysis-framework/index.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/index.js +0 -133
- package/dist/scripts/analysis-framework/index.js.map +0 -1
- package/dist/scripts/analysis-framework/lenses/citizen.d.ts +0 -29
- package/dist/scripts/analysis-framework/lenses/citizen.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/lenses/citizen.js +0 -220
- package/dist/scripts/analysis-framework/lenses/citizen.js.map +0 -1
- package/dist/scripts/analysis-framework/lenses/economic.d.ts +0 -29
- package/dist/scripts/analysis-framework/lenses/economic.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/lenses/economic.js +0 -227
- package/dist/scripts/analysis-framework/lenses/economic.js.map +0 -1
- package/dist/scripts/analysis-framework/lenses/government.d.ts +0 -32
- package/dist/scripts/analysis-framework/lenses/government.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/lenses/government.js +0 -265
- package/dist/scripts/analysis-framework/lenses/government.js.map +0 -1
- package/dist/scripts/analysis-framework/lenses/international.d.ts +0 -29
- package/dist/scripts/analysis-framework/lenses/international.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/lenses/international.js +0 -248
- package/dist/scripts/analysis-framework/lenses/international.js.map +0 -1
- package/dist/scripts/analysis-framework/lenses/media.d.ts +0 -29
- package/dist/scripts/analysis-framework/lenses/media.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/lenses/media.js +0 -211
- package/dist/scripts/analysis-framework/lenses/media.js.map +0 -1
- package/dist/scripts/analysis-framework/lenses/opposition.d.ts +0 -29
- package/dist/scripts/analysis-framework/lenses/opposition.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/lenses/opposition.js +0 -234
- package/dist/scripts/analysis-framework/lenses/opposition.js.map +0 -1
- package/dist/scripts/analysis-framework/methodology-types.d.ts +0 -309
- package/dist/scripts/analysis-framework/methodology-types.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/methodology-types.js +0 -38
- package/dist/scripts/analysis-framework/methodology-types.js.map +0 -1
- package/dist/scripts/analysis-framework/political-classification.d.ts +0 -58
- package/dist/scripts/analysis-framework/political-classification.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/political-classification.js +0 -414
- package/dist/scripts/analysis-framework/political-classification.js.map +0 -1
- package/dist/scripts/analysis-framework/political-risk-assessment.d.ts +0 -74
- package/dist/scripts/analysis-framework/political-risk-assessment.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/political-risk-assessment.js +0 -656
- package/dist/scripts/analysis-framework/political-risk-assessment.js.map +0 -1
- package/dist/scripts/analysis-framework/political-threat-analysis.d.ts +0 -65
- package/dist/scripts/analysis-framework/political-threat-analysis.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/political-threat-analysis.js +0 -553
- package/dist/scripts/analysis-framework/political-threat-analysis.js.map +0 -1
- package/dist/scripts/analysis-framework/significance-scorer.d.ts +0 -62
- package/dist/scripts/analysis-framework/significance-scorer.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/significance-scorer.js +0 -196
- package/dist/scripts/analysis-framework/significance-scorer.js.map +0 -1
- package/dist/scripts/analysis-framework/types.d.ts +0 -138
- package/dist/scripts/analysis-framework/types.d.ts.map +0 -1
- package/dist/scripts/analysis-framework/types.js +0 -12
- package/dist/scripts/analysis-framework/types.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.d.ts +0 -89
- package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.js +0 -667
- package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.js.map +0 -1
- package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.d.ts +0 -83
- package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.d.ts.map +0 -1
- package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.js +0 -219
- package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.js.map +0 -1
|
@@ -1,414 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module analysis-framework/political-classification
|
|
3
|
-
* @description Political classification engine implementing 7-dimension scoring
|
|
4
|
-
* for parliamentary documents.
|
|
5
|
-
*
|
|
6
|
-
* Inspired by ISMS CLASSIFICATION.md (Impact Analysis Matrix — Confidentiality,
|
|
7
|
-
* Integrity, Availability levels), adapted for political intelligence analysis.
|
|
8
|
-
*
|
|
9
|
-
* ## Dimensions
|
|
10
|
-
* | ISMS Dimension | Political Dimension |
|
|
11
|
-
* |-------------------------|----------------------------------|
|
|
12
|
-
* | Confidentiality | Public Interest Sensitivity |
|
|
13
|
-
* | Integrity | Democratic Integrity Impact |
|
|
14
|
-
* | Availability | Policy Urgency |
|
|
15
|
-
* | Financial Impact | Economic Impact |
|
|
16
|
-
* | Operational Impact | Governance Impact |
|
|
17
|
-
* | Reputational Impact | Political Capital Impact |
|
|
18
|
-
* | Regulatory Impact | Legislative Impact |
|
|
19
|
-
*
|
|
20
|
-
* The engine is **pure** — deterministic for the same input, no side effects.
|
|
21
|
-
*
|
|
22
|
-
* @author Hack23 AB
|
|
23
|
-
* @license Apache-2.0
|
|
24
|
-
*/
|
|
25
|
-
// ---------------------------------------------------------------------------
|
|
26
|
-
// Keyword banks
|
|
27
|
-
// ---------------------------------------------------------------------------
|
|
28
|
-
/** Keywords indicating explosive public interest / political controversy */
|
|
29
|
-
const EXPLOSIVE_KEYWORDS = [
|
|
30
|
-
'tidöavtal', 'misstroende', 'misstroendevotum', 'regeringskris',
|
|
31
|
-
'koalitionskris', 'oenighet', 'spricka', 'uteslutning', 'partiledare',
|
|
32
|
-
'skandal', 'korruption', 'mutor', 'fusk', 'avgå', 'avgångskrav',
|
|
33
|
-
'riksrätt', 'konstitutionsbrott', 'olaglig', 'brottslig',
|
|
34
|
-
'crisis', 'scandal', 'corruption', 'resignation', 'impeachment',
|
|
35
|
-
];
|
|
36
|
-
/** Keywords indicating politically sensitive content */
|
|
37
|
-
const SENSITIVE_KEYWORDS = [
|
|
38
|
-
'invandring', 'migration', 'flyktingar', 'asyl', 'integration',
|
|
39
|
-
'skattehöjning', 'skattesänkning', 'välfärdsreform', 'sjukvård',
|
|
40
|
-
'NATO', 'försvar', 'militär', 'beredskap', 'säkerhetspolitik',
|
|
41
|
-
'klimat', 'energi', 'kärnkraft', 'abort', 'dödshjälp',
|
|
42
|
-
'kriminalitet', 'gängkriminalitet', 'polisen', 'rättsstat',
|
|
43
|
-
'immigration', 'defense', 'security', 'climate', 'nuclear', 'crime',
|
|
44
|
-
];
|
|
45
|
-
/** Keywords signalling immediate constitutional or democratic urgency */
|
|
46
|
-
const CONSTITUTIONAL_KEYWORDS = [
|
|
47
|
-
'grundlag', 'regeringsform', 'riksdagsordning', 'vallag', 'folkomröstning',
|
|
48
|
-
'konstitution', 'konstitutionell', 'grundlagsskyddad', 'fri- och rättigheter',
|
|
49
|
-
'constitutional', 'fundamental law', 'referendum', 'rights',
|
|
50
|
-
];
|
|
51
|
-
/** Keywords indicating legislative (riksdag-level) impact */
|
|
52
|
-
const LEGISLATIVE_KEYWORDS = [
|
|
53
|
-
'riksdagen beslutar', 'proposition', 'lagstiftning', 'lag om',
|
|
54
|
-
'ändring i lagen', 'lagändring', 'ny lag', 'lagens tillämpning',
|
|
55
|
-
'parliament decides', 'legislation', 'law amendment', 'new law',
|
|
56
|
-
];
|
|
57
|
-
/** Keywords indicating regulatory/ordinance level impact */
|
|
58
|
-
const REGULATORY_KEYWORDS = [
|
|
59
|
-
'förordning', 'föreskrift', 'myndighetsföreskrift', 'reglering',
|
|
60
|
-
'regulation', 'ordinance', 'regulatory', 'rule change',
|
|
61
|
-
];
|
|
62
|
-
/** Keywords for economic/fiscal significance */
|
|
63
|
-
const ECONOMIC_HIGH_KEYWORDS = [
|
|
64
|
-
'statsbudget', 'budgetproposition', 'ramproposition', 'statsskuld',
|
|
65
|
-
'BNP', 'konjunktur', 'inflation', 'ränta', 'riksbanken',
|
|
66
|
-
'skatteintäkter', 'skatteuttag', 'anslag', 'miljarder',
|
|
67
|
-
'GDP', 'budget', 'fiscal', 'monetary', 'inflation', 'interest rate', 'billions',
|
|
68
|
-
];
|
|
69
|
-
/** Committees with systemic governance impact */
|
|
70
|
-
const SYSTEMIC_GOVERNANCE_COMMITTEES = new Set(['FiU', 'KU', 'FöU', 'UU']);
|
|
71
|
-
/** Document types that are at least standard public-interest sensitivity */
|
|
72
|
-
const STANDARD_SENSITIVITY_TYPES = new Set(['prop', 'bet', 'sou', 'prot']);
|
|
73
|
-
/** Committees with significant governance impact */
|
|
74
|
-
const SIGNIFICANT_GOVERNANCE_COMMITTEES = new Set(['JuU', 'SoU', 'SfU', 'AU', 'MJU', 'UbU', 'SkU']);
|
|
75
|
-
/** Document types with immediate policy urgency */
|
|
76
|
-
const IMMEDIATE_URGENCY_TYPES = new Set(['bet', 'prot']);
|
|
77
|
-
/** Document types with short-term policy urgency */
|
|
78
|
-
const SHORT_TERM_URGENCY_TYPES = new Set(['prop', 'ip', 'sou']);
|
|
79
|
-
/** Document types with medium-term policy urgency */
|
|
80
|
-
const MEDIUM_TERM_URGENCY_TYPES = new Set(['skr', 'ds', 'dir', 'mot']);
|
|
81
|
-
// ---------------------------------------------------------------------------
|
|
82
|
-
// Numeric dimension value maps (for score computation)
|
|
83
|
-
// ---------------------------------------------------------------------------
|
|
84
|
-
const SENSITIVITY_SCORES = {
|
|
85
|
-
explosive: 100, sensitive: 70, standard: 40, routine: 10,
|
|
86
|
-
};
|
|
87
|
-
const DEMOCRATIC_SCORES = {
|
|
88
|
-
critical: 100, significant: 70, moderate: 40, minor: 10,
|
|
89
|
-
};
|
|
90
|
-
const URGENCY_SCORES = {
|
|
91
|
-
immediate: 100, 'short-term': 70, 'medium-term': 40, 'long-term': 10,
|
|
92
|
-
};
|
|
93
|
-
const ECONOMIC_SCORES = {
|
|
94
|
-
transformative: 100, major: 70, moderate: 40, minimal: 10,
|
|
95
|
-
};
|
|
96
|
-
const GOVERNANCE_SCORES = {
|
|
97
|
-
systemic: 100, significant: 70, procedural: 40, routine: 10,
|
|
98
|
-
};
|
|
99
|
-
const POLITICAL_CAPITAL_SCORES = {
|
|
100
|
-
'career-defining': 100, significant: 70, notable: 40, negligible: 10,
|
|
101
|
-
};
|
|
102
|
-
const LEGISLATIVE_SCORES = {
|
|
103
|
-
constitutional: 100, legislative: 70, regulatory: 40, administrative: 10,
|
|
104
|
-
};
|
|
105
|
-
// ---------------------------------------------------------------------------
|
|
106
|
-
// Dimension weights (must sum to 1.0)
|
|
107
|
-
// ---------------------------------------------------------------------------
|
|
108
|
-
const DIMENSION_WEIGHTS = {
|
|
109
|
-
publicInterestSensitivity: 0.20,
|
|
110
|
-
democraticIntegrityImpact: 0.20,
|
|
111
|
-
policyUrgency: 0.10,
|
|
112
|
-
economicImpact: 0.15,
|
|
113
|
-
governanceImpact: 0.15,
|
|
114
|
-
politicalCapitalImpact: 0.10,
|
|
115
|
-
legislativeImpact: 0.10,
|
|
116
|
-
};
|
|
117
|
-
// ---------------------------------------------------------------------------
|
|
118
|
-
// Dimension scorers
|
|
119
|
-
// ---------------------------------------------------------------------------
|
|
120
|
-
function containsAny(text, keywords) {
|
|
121
|
-
const lower = text.toLowerCase();
|
|
122
|
-
return keywords.some(kw => lower.includes(kw.toLowerCase()));
|
|
123
|
-
}
|
|
124
|
-
function getDocText(doc) {
|
|
125
|
-
const fullContentText = doc.fullContent
|
|
126
|
-
? doc.fullContent.replace(/<[^>]+>/g, ' ')
|
|
127
|
-
: undefined;
|
|
128
|
-
const primaryText = doc.fullText ?? fullContentText;
|
|
129
|
-
return [
|
|
130
|
-
doc.titel, doc.rubrik, doc.undertitel, doc.title,
|
|
131
|
-
doc.summary, doc.notis, primaryText,
|
|
132
|
-
].filter(Boolean).join(' ');
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Derive normalized document type from RawDocument.
|
|
136
|
-
* Falls back from `doktyp` to `documentType`, lowercased and trimmed.
|
|
137
|
-
*/
|
|
138
|
-
function getDocType(doc) {
|
|
139
|
-
return String(doc.doktyp ?? doc.documentType ?? '').toLowerCase().trim();
|
|
140
|
-
}
|
|
141
|
-
function classifyPublicInterestSensitivity(doc, cia) {
|
|
142
|
-
const text = getDocText(doc);
|
|
143
|
-
if (containsAny(text, EXPLOSIVE_KEYWORDS))
|
|
144
|
-
return 'explosive';
|
|
145
|
-
// Unstable coalition elevates sensitivity of policy documents
|
|
146
|
-
if (cia?.coalitionStability?.stabilityScore !== undefined && cia.coalitionStability.stabilityScore < 30) {
|
|
147
|
-
if (containsAny(text, SENSITIVE_KEYWORDS))
|
|
148
|
-
return 'explosive';
|
|
149
|
-
}
|
|
150
|
-
if (containsAny(text, SENSITIVE_KEYWORDS))
|
|
151
|
-
return 'sensitive';
|
|
152
|
-
// Government propositions and committee reports are always at least standard
|
|
153
|
-
if (STANDARD_SENSITIVITY_TYPES.has(getDocType(doc)))
|
|
154
|
-
return 'standard';
|
|
155
|
-
return 'routine';
|
|
156
|
-
}
|
|
157
|
-
function classifyDemocraticIntegrityImpact(doc) {
|
|
158
|
-
const text = getDocText(doc);
|
|
159
|
-
if (containsAny(text, CONSTITUTIONAL_KEYWORDS))
|
|
160
|
-
return 'critical';
|
|
161
|
-
// Constitutional/oversight committee involvement is significant
|
|
162
|
-
if (doc.organ === 'KU' || doc.organ === 'FiU')
|
|
163
|
-
return 'significant';
|
|
164
|
-
// Propositions always have at least moderate democratic integrity impact
|
|
165
|
-
const docType = getDocType(doc);
|
|
166
|
-
if (docType === 'prop' || docType === 'bet')
|
|
167
|
-
return 'moderate';
|
|
168
|
-
return 'minor';
|
|
169
|
-
}
|
|
170
|
-
function classifyPolicyUrgency(doc) {
|
|
171
|
-
const docType = getDocType(doc);
|
|
172
|
-
if (IMMEDIATE_URGENCY_TYPES.has(docType))
|
|
173
|
-
return 'immediate';
|
|
174
|
-
if (SHORT_TERM_URGENCY_TYPES.has(docType))
|
|
175
|
-
return 'short-term';
|
|
176
|
-
if (MEDIUM_TERM_URGENCY_TYPES.has(docType))
|
|
177
|
-
return 'medium-term';
|
|
178
|
-
return 'long-term';
|
|
179
|
-
}
|
|
180
|
-
function classifyEconomicImpact(doc, cia) {
|
|
181
|
-
const text = getDocText(doc);
|
|
182
|
-
if (containsAny(text, ECONOMIC_HIGH_KEYWORDS)) {
|
|
183
|
-
// Budget propositions or finance committee documents are transformative
|
|
184
|
-
if (doc.organ === 'FiU' || getDocType(doc) === 'prop')
|
|
185
|
-
return 'transformative';
|
|
186
|
-
return 'major';
|
|
187
|
-
}
|
|
188
|
-
// Fiscal instability amplifies economic impact
|
|
189
|
-
if (cia?.coalitionStability?.stabilityScore !== undefined && cia.coalitionStability.stabilityScore < 40) {
|
|
190
|
-
return 'major';
|
|
191
|
-
}
|
|
192
|
-
if (getDocType(doc) === 'prop' || getDocType(doc) === 'bet')
|
|
193
|
-
return 'moderate';
|
|
194
|
-
return 'minimal';
|
|
195
|
-
}
|
|
196
|
-
function classifyGovernanceImpact(doc) {
|
|
197
|
-
const committee = doc.organ ?? doc.committee ?? '';
|
|
198
|
-
if (SYSTEMIC_GOVERNANCE_COMMITTEES.has(committee))
|
|
199
|
-
return 'systemic';
|
|
200
|
-
if (SIGNIFICANT_GOVERNANCE_COMMITTEES.has(committee))
|
|
201
|
-
return 'significant';
|
|
202
|
-
if (getDocType(doc) === 'prop' || getDocType(doc) === 'bet')
|
|
203
|
-
return 'procedural';
|
|
204
|
-
return 'routine';
|
|
205
|
-
}
|
|
206
|
-
function classifyPoliticalCapitalImpact(doc, cia) {
|
|
207
|
-
const text = getDocText(doc);
|
|
208
|
-
// Crisis keywords or coalition instability → career-defining
|
|
209
|
-
if (containsAny(text, EXPLOSIVE_KEYWORDS))
|
|
210
|
-
return 'career-defining';
|
|
211
|
-
// Interpellations targeting ministers are notable at minimum
|
|
212
|
-
const docType = getDocType(doc);
|
|
213
|
-
if (docType === 'ip' || docType === 'fr') {
|
|
214
|
-
if (doc.mottagare && doc.mottagare.length > 0)
|
|
215
|
-
return 'significant';
|
|
216
|
-
return 'notable';
|
|
217
|
-
}
|
|
218
|
-
// Unstable coalition elevates political capital stakes
|
|
219
|
-
if (cia?.coalitionStability?.stabilityScore !== undefined && cia.coalitionStability.stabilityScore < 50) {
|
|
220
|
-
return 'significant';
|
|
221
|
-
}
|
|
222
|
-
if (docType === 'prop' || docType === 'bet')
|
|
223
|
-
return 'notable';
|
|
224
|
-
return 'negligible';
|
|
225
|
-
}
|
|
226
|
-
function classifyLegislativeImpact(doc) {
|
|
227
|
-
const text = getDocText(doc);
|
|
228
|
-
if (containsAny(text, CONSTITUTIONAL_KEYWORDS))
|
|
229
|
-
return 'constitutional';
|
|
230
|
-
if (containsAny(text, LEGISLATIVE_KEYWORDS))
|
|
231
|
-
return 'legislative';
|
|
232
|
-
if (containsAny(text, REGULATORY_KEYWORDS))
|
|
233
|
-
return 'regulatory';
|
|
234
|
-
// Committee reports and propositions change legislation by default
|
|
235
|
-
if (getDocType(doc) === 'bet' || getDocType(doc) === 'prop')
|
|
236
|
-
return 'legislative';
|
|
237
|
-
return 'administrative';
|
|
238
|
-
}
|
|
239
|
-
// ---------------------------------------------------------------------------
|
|
240
|
-
// Overall classification derivation
|
|
241
|
-
// ---------------------------------------------------------------------------
|
|
242
|
-
/**
|
|
243
|
-
* Derive the overall classification from the composite numeric score.
|
|
244
|
-
*
|
|
245
|
-
* Thresholds:
|
|
246
|
-
* - ≥70 → critical
|
|
247
|
-
* - ≥50 → high
|
|
248
|
-
* - ≥30 → medium
|
|
249
|
-
* - <30 → low
|
|
250
|
-
*/
|
|
251
|
-
function deriveOverallClassification(score) {
|
|
252
|
-
if (score >= 70)
|
|
253
|
-
return 'critical';
|
|
254
|
-
if (score >= 50)
|
|
255
|
-
return 'high';
|
|
256
|
-
if (score >= 30)
|
|
257
|
-
return 'medium';
|
|
258
|
-
return 'low';
|
|
259
|
-
}
|
|
260
|
-
// ---------------------------------------------------------------------------
|
|
261
|
-
// Score computation
|
|
262
|
-
// ---------------------------------------------------------------------------
|
|
263
|
-
/**
|
|
264
|
-
* Compute the weighted composite classification score (0–100).
|
|
265
|
-
*/
|
|
266
|
-
function computeClassificationScore(dimensions) {
|
|
267
|
-
const weighted = SENSITIVITY_SCORES[dimensions.publicInterestSensitivity] * DIMENSION_WEIGHTS.publicInterestSensitivity +
|
|
268
|
-
DEMOCRATIC_SCORES[dimensions.democraticIntegrityImpact] * DIMENSION_WEIGHTS.democraticIntegrityImpact +
|
|
269
|
-
URGENCY_SCORES[dimensions.policyUrgency] * DIMENSION_WEIGHTS.policyUrgency +
|
|
270
|
-
ECONOMIC_SCORES[dimensions.economicImpact] * DIMENSION_WEIGHTS.economicImpact +
|
|
271
|
-
GOVERNANCE_SCORES[dimensions.governanceImpact] * DIMENSION_WEIGHTS.governanceImpact +
|
|
272
|
-
POLITICAL_CAPITAL_SCORES[dimensions.politicalCapitalImpact] * DIMENSION_WEIGHTS.politicalCapitalImpact +
|
|
273
|
-
LEGISLATIVE_SCORES[dimensions.legislativeImpact] * DIMENSION_WEIGHTS.legislativeImpact;
|
|
274
|
-
return Math.min(100, Math.max(0, Math.round(weighted)));
|
|
275
|
-
}
|
|
276
|
-
// ---------------------------------------------------------------------------
|
|
277
|
-
// Rationale builder
|
|
278
|
-
// ---------------------------------------------------------------------------
|
|
279
|
-
function buildRationale(doc, dimensions) {
|
|
280
|
-
const rationale = [];
|
|
281
|
-
const docType = getDocType(doc) || 'unknown';
|
|
282
|
-
const committee = doc.organ ?? doc.committee ?? 'unknown';
|
|
283
|
-
// Public interest sensitivity
|
|
284
|
-
if (dimensions.publicInterestSensitivity === 'explosive') {
|
|
285
|
-
rationale.push('Explosive public interest: Keywords indicate scandal, crisis, or coalition threat');
|
|
286
|
-
}
|
|
287
|
-
else if (dimensions.publicInterestSensitivity === 'sensitive') {
|
|
288
|
-
rationale.push('Sensitive topic: immigration, defence, climate, or tax policy detected');
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
rationale.push(`Public interest sensitivity rated as "${dimensions.publicInterestSensitivity}": no explosive or highly sensitive triggers detected`);
|
|
292
|
-
}
|
|
293
|
-
// Democratic integrity impact
|
|
294
|
-
if (dimensions.democraticIntegrityImpact === 'critical') {
|
|
295
|
-
rationale.push('Critical democratic integrity: Constitutional law or fundamental rights involved');
|
|
296
|
-
}
|
|
297
|
-
else if (dimensions.democraticIntegrityImpact === 'significant') {
|
|
298
|
-
rationale.push(`Significant democratic impact: Committee ${committee} has oversight/constitutional role`);
|
|
299
|
-
}
|
|
300
|
-
else {
|
|
301
|
-
rationale.push(`Democratic integrity impact rated as "${dimensions.democraticIntegrityImpact}": limited or routine implications for democratic processes`);
|
|
302
|
-
}
|
|
303
|
-
// Economic impact
|
|
304
|
-
if (dimensions.economicImpact === 'transformative') {
|
|
305
|
-
rationale.push('Transformative economic impact: Budget or macro-level fiscal content detected');
|
|
306
|
-
}
|
|
307
|
-
else if (dimensions.economicImpact === 'major') {
|
|
308
|
-
rationale.push('Major economic impact: Significant fiscal or monetary policy implications');
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
rationale.push(`Economic impact rated as "${dimensions.economicImpact}": no major fiscal or monetary signals detected`);
|
|
312
|
-
}
|
|
313
|
-
// Governance impact
|
|
314
|
-
if (dimensions.governanceImpact === 'systemic') {
|
|
315
|
-
rationale.push(`Systemic governance impact: Committee ${committee} drives cross-government policy`);
|
|
316
|
-
}
|
|
317
|
-
else {
|
|
318
|
-
rationale.push(`Governance impact rated as "${dimensions.governanceImpact}": ${committee} committee scope`);
|
|
319
|
-
}
|
|
320
|
-
// Legislative impact
|
|
321
|
-
if (dimensions.legislativeImpact === 'constitutional') {
|
|
322
|
-
rationale.push('Constitutional legislative impact: Affects fundamental law or constitutional order');
|
|
323
|
-
}
|
|
324
|
-
else if (dimensions.legislativeImpact === 'legislative') {
|
|
325
|
-
rationale.push(`Legislative impact: Document type ${docType} typically creates or amends statutes`);
|
|
326
|
-
}
|
|
327
|
-
else {
|
|
328
|
-
rationale.push(`Legislative impact rated as "${dimensions.legislativeImpact}": no statutory or constitutional changes detected`);
|
|
329
|
-
}
|
|
330
|
-
// Policy urgency
|
|
331
|
-
if (dimensions.policyUrgency === 'immediate') {
|
|
332
|
-
rationale.push('Immediate policy urgency: Time-critical document requiring prompt attention');
|
|
333
|
-
}
|
|
334
|
-
else if (dimensions.policyUrgency === 'short-term') {
|
|
335
|
-
rationale.push('Short-term policy urgency: Active legislative or committee timeline');
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
rationale.push(`Policy urgency rated as "${dimensions.policyUrgency}": standard parliamentary timeline`);
|
|
339
|
-
}
|
|
340
|
-
// Political capital impact
|
|
341
|
-
if (dimensions.politicalCapitalImpact === 'career-defining') {
|
|
342
|
-
rationale.push('Career-defining political capital impact: Major reputational stakes for actors involved');
|
|
343
|
-
}
|
|
344
|
-
else if (dimensions.politicalCapitalImpact === 'significant') {
|
|
345
|
-
rationale.push('Significant political capital impact: Notable reputational consequences');
|
|
346
|
-
}
|
|
347
|
-
else {
|
|
348
|
-
rationale.push(`Political capital impact rated as "${dimensions.politicalCapitalImpact}": limited reputational stakes`);
|
|
349
|
-
}
|
|
350
|
-
return rationale;
|
|
351
|
-
}
|
|
352
|
-
// ---------------------------------------------------------------------------
|
|
353
|
-
// Public API
|
|
354
|
-
// ---------------------------------------------------------------------------
|
|
355
|
-
/**
|
|
356
|
-
* Classify a parliamentary document across 7 political dimensions.
|
|
357
|
-
*
|
|
358
|
-
* Applies the ISMS-inspired Political Classification Framework to produce
|
|
359
|
-
* a multi-dimensional classification with an aggregated score and rationale.
|
|
360
|
-
*
|
|
361
|
-
* The function is **pure** — deterministic for the same input, no side effects.
|
|
362
|
-
*
|
|
363
|
-
* @param doc - The parliamentary document to classify
|
|
364
|
-
* @param cia - Optional CIA context (coalition stability influences several dimensions)
|
|
365
|
-
* @returns Complete 7-dimension political classification
|
|
366
|
-
*
|
|
367
|
-
* @example
|
|
368
|
-
* ```typescript
|
|
369
|
-
* const classification = classifyPoliticalDocument(doc, ciaContext);
|
|
370
|
-
* console.log(classification.overallClassification); // 'critical' | 'high' | 'medium' | 'low'
|
|
371
|
-
* console.log(classification.classificationScore); // 0-100
|
|
372
|
-
* ```
|
|
373
|
-
*/
|
|
374
|
-
export function classifyPoliticalDocument(doc, cia) {
|
|
375
|
-
const publicInterestSensitivity = classifyPublicInterestSensitivity(doc, cia);
|
|
376
|
-
const democraticIntegrityImpact = classifyDemocraticIntegrityImpact(doc);
|
|
377
|
-
const policyUrgency = classifyPolicyUrgency(doc);
|
|
378
|
-
const economicImpact = classifyEconomicImpact(doc, cia);
|
|
379
|
-
const governanceImpact = classifyGovernanceImpact(doc);
|
|
380
|
-
const politicalCapitalImpact = classifyPoliticalCapitalImpact(doc, cia);
|
|
381
|
-
const legislativeImpact = classifyLegislativeImpact(doc);
|
|
382
|
-
const dimensions = {
|
|
383
|
-
publicInterestSensitivity,
|
|
384
|
-
democraticIntegrityImpact,
|
|
385
|
-
policyUrgency,
|
|
386
|
-
economicImpact,
|
|
387
|
-
governanceImpact,
|
|
388
|
-
politicalCapitalImpact,
|
|
389
|
-
legislativeImpact,
|
|
390
|
-
};
|
|
391
|
-
const classificationScore = computeClassificationScore(dimensions);
|
|
392
|
-
const overallClassification = deriveOverallClassification(classificationScore);
|
|
393
|
-
const rationale = buildRationale(doc, dimensions);
|
|
394
|
-
return {
|
|
395
|
-
...dimensions,
|
|
396
|
-
overallClassification,
|
|
397
|
-
classificationScore,
|
|
398
|
-
rationale,
|
|
399
|
-
};
|
|
400
|
-
}
|
|
401
|
-
/**
|
|
402
|
-
* Classify a batch of parliamentary documents.
|
|
403
|
-
*
|
|
404
|
-
* Applies `classifyPoliticalDocument` to each document independently.
|
|
405
|
-
* Useful for batch processing in the news generation pipeline.
|
|
406
|
-
*
|
|
407
|
-
* @param docs - Array of documents to classify
|
|
408
|
-
* @param cia - Optional shared CIA context for all documents
|
|
409
|
-
* @returns Array of classifications, one per input document
|
|
410
|
-
*/
|
|
411
|
-
export function classifyPoliticalDocuments(docs, cia) {
|
|
412
|
-
return docs.map(doc => classifyPoliticalDocument(doc, cia));
|
|
413
|
-
}
|
|
414
|
-
//# sourceMappingURL=political-classification.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"political-classification.js","sourceRoot":"","sources":["../../../scripts/analysis-framework/political-classification.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module analysis-framework/political-risk-assessment
|
|
3
|
-
* @description Political risk scoring engine implementing Likelihood × Impact
|
|
4
|
-
* risk assessment for parliamentary documents.
|
|
5
|
-
*
|
|
6
|
-
* Inspired by ISMS Risk_Assessment_Methodology.md (Quantitative risk scoring),
|
|
7
|
-
* adapted for political intelligence analysis of Swedish parliamentary context.
|
|
8
|
-
*
|
|
9
|
-
* ## Risk Categories
|
|
10
|
-
* - Coalition Stability — Government collapse or realignment risk
|
|
11
|
-
* - Policy Implementation — Policy failure or stalling risk
|
|
12
|
-
* - Democratic Process — Threat to democratic norms and institutions
|
|
13
|
-
* - Economic Policy — Fiscal/monetary policy decision risk
|
|
14
|
-
* - Social Cohesion — Societal division or unrest risk
|
|
15
|
-
* - International Standing — Sweden's international position risk
|
|
16
|
-
*
|
|
17
|
-
* ## Scoring Formula
|
|
18
|
-
* Risk Score = likelihood_probability × impact_weight × 10
|
|
19
|
-
* With current scales (almost-certain=0.90, transformative=10), the
|
|
20
|
-
* practical maximum is 90. Values are clamped to [0, 100] for safety.
|
|
21
|
-
*
|
|
22
|
-
* The engine is **pure** — deterministic for the same input, no side effects.
|
|
23
|
-
*
|
|
24
|
-
* @author Hack23 AB
|
|
25
|
-
* @license Apache-2.0
|
|
26
|
-
*/
|
|
27
|
-
import type { RawDocument, CIAContext } from '../data-transformers/types.js';
|
|
28
|
-
import type { PoliticalRiskAssessment, PoliticalRiskProfile, PoliticalRiskCategory, LikelihoodLevel, RiskImpactLevel } from './methodology-types.js';
|
|
29
|
-
/**
|
|
30
|
-
* Compute a risk score from likelihood and impact.
|
|
31
|
-
*
|
|
32
|
-
* Formula: likelihood_probability × impact_weight × 10
|
|
33
|
-
* With current scales (almost-certain=0.90, transformative=10), the
|
|
34
|
-
* practical maximum is 90. Values are clamped to [0, 100] for safety.
|
|
35
|
-
*/
|
|
36
|
-
export declare function computeRiskScore(likelihood: LikelihoodLevel, impact: RiskImpactLevel): number;
|
|
37
|
-
/**
|
|
38
|
-
* Derive priority tier from risk score.
|
|
39
|
-
*/
|
|
40
|
-
export declare function deriveRiskPriority(score: number): 'critical' | 'high' | 'medium' | 'low';
|
|
41
|
-
/**
|
|
42
|
-
* Assess political risk for a parliamentary document across all 6 risk categories.
|
|
43
|
-
*
|
|
44
|
-
* Applies the ISMS-inspired Likelihood × Impact methodology to each category
|
|
45
|
-
* and returns a complete risk profile with composite scoring and priority ranking.
|
|
46
|
-
*
|
|
47
|
-
* The function is **pure** — deterministic for the same input, no side effects.
|
|
48
|
-
*
|
|
49
|
-
* @param doc - The parliamentary document to assess
|
|
50
|
-
* @param cia - Optional CIA context (coalition stability data improves accuracy)
|
|
51
|
-
* @returns Complete political risk profile with per-category assessments
|
|
52
|
-
*
|
|
53
|
-
* @example
|
|
54
|
-
* ```typescript
|
|
55
|
-
* const profile = assessPoliticalRisk(doc, ciaContext);
|
|
56
|
-
* console.log(profile.overallRiskLevel); // 'critical' | 'high' | 'medium' | 'low'
|
|
57
|
-
* console.log(profile.compositeRiskScore); // 0–100
|
|
58
|
-
* console.log(profile.dominantRisk); // highest-priority category
|
|
59
|
-
* ```
|
|
60
|
-
*/
|
|
61
|
-
export declare function assessPoliticalRisk(doc: RawDocument, cia?: CIAContext): PoliticalRiskProfile;
|
|
62
|
-
/**
|
|
63
|
-
* Assess political risk for a specific category only.
|
|
64
|
-
*
|
|
65
|
-
* Use when you need a targeted assessment for a single risk dimension
|
|
66
|
-
* rather than the full 6-category profile.
|
|
67
|
-
*
|
|
68
|
-
* @param doc - The parliamentary document to assess
|
|
69
|
-
* @param category - The specific risk category to assess
|
|
70
|
-
* @param cia - Optional CIA context
|
|
71
|
-
* @returns Risk assessment for the specified category
|
|
72
|
-
*/
|
|
73
|
-
export declare function assessSingleRiskCategory(doc: RawDocument, category: PoliticalRiskCategory, cia?: CIAContext): PoliticalRiskAssessment;
|
|
74
|
-
//# sourceMappingURL=political-risk-assessment.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"political-risk-assessment.d.ts","sourceRoot":"","sources":["../../../scripts/analysis-framework/political-risk-assessment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,eAAe,EAChB,MAAM,wBAAwB,CAAC;AA4ehC;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,eAAe,GACtB,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAKxF;AAgGD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,GAAG,CAAC,EAAE,UAAU,GACf,oBAAoB,CAkBtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,qBAAqB,EAC/B,GAAG,CAAC,EAAE,UAAU,GACf,uBAAuB,CAEzB"}
|