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,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"}
|