diff --git a/scripts/data-transformers.ts b/scripts/data-transformers.ts index 3217ee15..1e317052 100644 --- a/scripts/data-transformers.ts +++ b/scripts/data-transformers.ts @@ -427,8 +427,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party}: ${n} motion${n > 1 ? 's' : ''} filed`, otherCommittee: 'Other committees', otherDocuments: 'Other documents', - policySignificanceTouches: (domains: string): string => `Touches on ${domains}. Committee review and potential chamber vote will determine the proposal's fate.`, - policySignificanceGeneric: 'Requires committee review and chamber debate before a decision is reached.' + policySignificanceTouches: (domains: string): string => `Touches on ${domains}.`, + policySignificanceGeneric: 'Requires committee review and chamber debate before a decision is reached.', + generalMatters: 'General matters' }, sv: { whyMatters: 'Varför denna vecka är viktig', @@ -497,8 +498,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party}: ${n} motion${n > 1 ? 'er' : ''} inlämnade`, otherCommittee: 'Övriga utskott', otherDocuments: 'Övriga dokument', - policySignificanceTouches: (domains: string): string => `Berör ${domains}. Utskottsbehandling och eventuell kammaromröstning avgör om förslaget får genomslag.`, - policySignificanceGeneric: 'Kräver utskottsbehandling och kammardebatt innan beslut fattas.' + policySignificanceTouches: (domains: string): string => `Berör ${domains}.`, + policySignificanceGeneric: 'Kräver utskottsbehandling och kammardebatt innan beslut fattas.', + generalMatters: 'Övriga frågor' }, da: { whyMatters: 'Hvorfor denne uge er vigtig', @@ -567,8 +569,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party}: ${n} forslag indgivet`, otherCommittee: 'Andre udvalg', otherDocuments: 'Andre dokumenter', - policySignificanceTouches: (domains: string): string => `Berører ${domains}. Udvalgsbehandling og afstemning afgør forslagets skæbne.`, - policySignificanceGeneric: 'Kræver udvalgsbehandling og kammerdebat, før der træffes afgørelse.' + policySignificanceTouches: (domains: string): string => `Berører ${domains}.`, + policySignificanceGeneric: 'Kræver udvalgsbehandling og kammerdebat, før der træffes afgørelse.', + generalMatters: 'Generelle spørgsmål' }, no: { whyMatters: 'Hvorfor denne uken er viktig', @@ -637,8 +640,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party}: ${n} forslag innsendt`, otherCommittee: 'Andre komiteer', otherDocuments: 'Andre dokumenter', - policySignificanceTouches: (domains: string): string => `Berører ${domains}. Komitébehandling og avstemning avgjør forslagets skjebne.`, - policySignificanceGeneric: 'Krever komitébehandling og kammerdebatt før avgjørelse fattes.' + policySignificanceTouches: (domains: string): string => `Berører ${domains}.`, + policySignificanceGeneric: 'Krever komitébehandling og kammerdebatt før avgjørelse fattes.', + generalMatters: 'Generelle spørsmål' }, fi: { whyMatters: 'Miksi tämä viikko on tärkeä', @@ -707,8 +711,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party}: ${n} aloitetta jätetty`, otherCommittee: 'Muut valiokunnat', otherDocuments: 'Muut asiakirjat', - policySignificanceTouches: (domains: string): string => `Koskee aloja ${domains}. Valiokuntakäsittely ja äänestys ratkaisevat ehdotuksen kohtalon.`, - policySignificanceGeneric: 'Vaatii valiokuntakäsittelyn ja täysistuntokeskustelun ennen päätöksentekoa.' + policySignificanceTouches: (domains: string): string => `Koskee aloja ${domains}.`, + policySignificanceGeneric: 'Vaatii valiokuntakäsittelyn ja täysistuntokeskustelun ennen päätöksentekoa.', + generalMatters: 'Yleiset asiat' }, de: { whyMatters: 'Warum diese Woche wichtig ist', @@ -777,8 +782,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party}: ${n} Antrag${n > 1 ? 'e' : ''} eingereicht`, otherCommittee: 'Sonstige Ausschüsse', otherDocuments: 'Sonstige Dokumente', - policySignificanceTouches: (domains: string): string => `Betrifft ${domains}. Ausschussberatung und Abstimmung bestimmen das Schicksal des Vorschlags.`, - policySignificanceGeneric: 'Erfordert Ausschussberatung und Kammerdebatte vor einer Entscheidung.' + policySignificanceTouches: (domains: string): string => `Betrifft ${domains}.`, + policySignificanceGeneric: 'Erfordert Ausschussberatung und Kammerdebatte vor einer Entscheidung.', + generalMatters: 'Allgemeine Angelegenheiten' }, fr: { whyMatters: 'Pourquoi cette semaine est importante', @@ -847,8 +853,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party} : ${n} motion${n > 1 ? 's' : ''} déposée${n > 1 ? 's' : ''}`, otherCommittee: 'Autres commissions', otherDocuments: 'Autres documents', - policySignificanceTouches: (domains: string): string => `Touche aux domaines ${domains}. L'examen en commission et le vote détermineront le sort de la proposition.`, - policySignificanceGeneric: 'Nécessite un examen en commission et un débat en séance avant toute décision.' + policySignificanceTouches: (domains: string): string => `Touche aux domaines ${domains}.`, + policySignificanceGeneric: 'Nécessite un examen en commission et un débat en séance avant toute décision.', + generalMatters: 'Questions générales' }, es: { whyMatters: 'Por qué esta semana es importante', @@ -917,8 +924,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party}: ${n} moción${n > 1 ? 'es' : ''} presentada${n > 1 ? 's' : ''}`, otherCommittee: 'Otras comisiones', otherDocuments: 'Otros documentos', - policySignificanceTouches: (domains: string): string => `Toca los ámbitos de ${domains}. La revisión en comisión y la votación determinarán el destino de la propuesta.`, - policySignificanceGeneric: 'Requiere revisión en comisión y debate en cámara antes de tomar una decisión.' + policySignificanceTouches: (domains: string): string => `Toca los ámbitos de ${domains}.`, + policySignificanceGeneric: 'Requiere revisión en comisión y debate en cámara antes de tomar una decisión.', + generalMatters: 'Asuntos generales' }, nl: { whyMatters: 'Waarom deze week belangrijk is', @@ -987,8 +995,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party}: ${n} motie${n > 1 ? 's' : ''} ingediend`, otherCommittee: 'Overige commissies', otherDocuments: 'Overige documenten', - policySignificanceTouches: (domains: string): string => `Raakt aan ${domains}. Commissiebehandeling en stemming bepalen het lot van het voorstel.`, - policySignificanceGeneric: 'Vereist commissiebehandeling en plenair debat voor een besluit wordt genomen.' + policySignificanceTouches: (domains: string): string => `Raakt aan ${domains}.`, + policySignificanceGeneric: 'Vereist commissiebehandeling en plenair debat voor een besluit wordt genomen.', + generalMatters: 'Algemene zaken' }, ar: { whyMatters: 'لماذا هذا الأسبوع مهم', @@ -1057,8 +1066,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party}: ${n} اقتراح${n > 1 ? 'ات' : ''} مقدمة`, otherCommittee: 'لجان أخرى', otherDocuments: 'وثائق أخرى', - policySignificanceTouches: (domains: string): string => `يتعلق بمجالات ${domains}. ستحدد المراجعة في اللجنة والتصويت مصير المقترح.`, - policySignificanceGeneric: 'يتطلب مراجعة في اللجنة ونقاش في الجلسة العامة قبل اتخاذ القرار.' + policySignificanceTouches: (domains: string): string => `يتعلق بمجالات ${domains}.`, + policySignificanceGeneric: 'يتطلب مراجعة في اللجنة ونقاش في الجلسة العامة قبل اتخاذ القرار.', + generalMatters: 'مسائل عامة' }, he: { whyMatters: 'למה השבוע הזה חשוב', @@ -1127,8 +1137,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party}: ${n} הצע${n > 1 ? 'ות' : 'ה'} הוגש${n > 1 ? 'ו' : 'ה'}`, otherCommittee: 'ועדות אחרות', otherDocuments: 'מסמכים אחרים', - policySignificanceTouches: (domains: string): string => `נוגע בתחומי ${domains}. בחינה בוועדה והצבעה יקבעו את גורל ההצעה.`, - policySignificanceGeneric: 'מחייב בחינה בוועדה ודיון במליאה לפני קבלת החלטה.' + policySignificanceTouches: (domains: string): string => `נוגע בתחומי ${domains}.`, + policySignificanceGeneric: 'מחייב בחינה בוועדה ודיון במליאה לפני קבלת החלטה.', + generalMatters: 'עניינים כלליים' }, ja: { whyMatters: 'なぜ今週が重要か', @@ -1197,8 +1208,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party}:${n}件の動議を提出`, otherCommittee: 'その他の委員会', otherDocuments: 'その他の文書', - policySignificanceTouches: (domains: string): string => `${domains}に関連します。委員会審査と採決が提案の行方を決定します。`, - policySignificanceGeneric: '決定前に委員会審査と本会議討論が必要です。' + policySignificanceTouches: (domains: string): string => `${domains}に関連します。`, + policySignificanceGeneric: '決定前に委員会審査と本会議討論が必要です。', + generalMatters: '一般事項' }, ko: { whyMatters: '이번 주가 중요한 이유', @@ -1267,8 +1279,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party}: ${n}건의 동의안 제출`, otherCommittee: '기타 위원회', otherDocuments: '기타 문서', - policySignificanceTouches: (domains: string): string => `${domains} 분야에 관련됩니다. 위원회 심사와 표결이 제안의 운명을 결정합니다.`, - policySignificanceGeneric: '결정 전에 위원회 심사와 본회의 토론이 필요합니다.' + policySignificanceTouches: (domains: string): string => `${domains} 분야에 관련됩니다.`, + policySignificanceGeneric: '결정 전에 위원회 심사와 본회의 토론이 필요합니다.', + generalMatters: '일반 사항' }, zh: { whyMatters: '为什么本周很重要', @@ -1337,8 +1350,9 @@ export const CONTENT_LABELS: Record = { partyMotionsFiled: (party: string, n: number): string => `${party}:提交了${n}项动议`, otherCommittee: '其他委员会', otherDocuments: '其他文件', - policySignificanceTouches: (domains: string): string => `涉及${domains}领域。委员会审查和表决将决定提案的命运。`, - policySignificanceGeneric: '在作出决定之前需要委员会审查和全体辩论。' + policySignificanceTouches: (domains: string): string => `涉及${domains}领域。`, + policySignificanceGeneric: '在作出决定之前需要委员会审查和全体辩论。', + generalMatters: '一般事项' } }; @@ -1862,7 +1876,7 @@ function generateCommitteeContent(data: ArticleContentData, lang: Language | str

${titleHtml}

${L(lang, 'committee')}: ${escapeHtml(committeeName)}

${escapeHtml(String(reportSigVal))} ${summaryHtml}

-

${escapeHtml(String(whatThisMeansVal))}: ${generatePolicySignificance(report, lang)}

+

${escapeHtml(String(whatThisMeansVal))}: ${generateDeepPolicyAnalysis(report, lang, 'bet')}

${escapeHtml(String(readFullVal))}: ${docName}

`; @@ -1886,6 +1900,19 @@ function generateCommitteeContent(data: ArticleContentData, lang: Language | str content += `
  • ${escapeHtml(takeaway1)}
  • \n`; content += `
  • ${escapeHtml(takeaway2)}
  • \n`; + + // Cross-committee domain analysis: identify which policy areas span multiple committees + const allDomains = new Set(); + reports.forEach(r => { detectPolicyDomains(r, lang).forEach(d => allDomains.add(d)); }); + if (allDomains.size > 0) { + const isSv = lang === 'sv'; + const domainList = Array.from(allDomains).slice(0, 3).join(', '); + const crossAnalysis = isSv + ? `Betänkandena berör ${escapeHtml(domainList)} – ett mönster som tyder på breda lagstiftningsprioriteringar denna session.` + : `Reports span ${escapeHtml(domainList)} — a cross-committee pattern signalling the government's broad legislative priorities this session.`; + content += `
  • ${crossAnalysis}
  • \n`; + } + content += ` \n \n`; return content; @@ -1944,7 +1971,7 @@ function generatePropositionsContent(data: ArticleContentData, lang: Language |

    ${titleHtml}

    ${escapeHtml(String(propSigVal))} ${summaryHtml}${referredLine}

    -

    ${escapeHtml(String(whyItMattersVal))}: ${generatePolicySignificance(prop, lang)}

    +

    ${escapeHtml(String(whyItMattersVal))}: ${generateDeepPolicyAnalysis(prop, lang, 'prop')}

    ${escapeHtml(String(readFullVal))}: ${docName}

    `; @@ -1954,19 +1981,38 @@ function generatePropositionsContent(data: ArticleContentData, lang: Language | content += `\n

    ${L(lang, 'policyImplications')}

    \n`; content += `
    \n`; - // Group by referred committee for policy domain analysis + // Count unique policy domains across all propositions for accurate "N policy domains" text + const allPropDomains = new Set(); + propositions.forEach(p => detectPolicyDomains(p, lang).forEach(d => allPropDomains.add(d))); + const domainCount = allPropDomains.size; + + // Group by referred committee for government priority signal (separate from domain count) const byCommittee: Record = {}; propositions.forEach(p => { const c = p.organ || p.committee || 'unknown'; byCommittee[c] = (byCommittee[c] || 0) + 1; }); - const domainCount = Object.keys(byCommittee).length; const implicationFn = L(lang, 'policyImplicationsContext') as string | ((propCount: number, domainCount: number) => string); const implication = typeof implicationFn === 'function' ? implicationFn(propositions.length, domainCount) : `These ${propositions.length} propositions touch on ${domainCount} policy domains.`; content += `

    ${escapeHtml(String(implication))}

    \n`; + + // Government priority signal: identify the committee receiving the most propositions + const sortedCommittees = Object.entries(byCommittee) + .filter(([c]) => c !== 'unknown') + .sort(([, a], [, b]) => b - a); + if (sortedCommittees.length > 0) { + const [topCommittee, topCount] = sortedCommittees[0]; + const topName = getCommitteeName(topCommittee, lang); + const isSv = lang === 'sv'; + const priorityNote = isSv + ? `${escapeHtml(topName)} tar emot ${topCount} av propositionerna – ett tecken på att detta är ett centralt prioriterat område för regeringen denna session.` + : `${escapeHtml(topName)} receives ${topCount} of the propositions — a strong signal of government priority in this policy area this session.`; + content += `

    ${priorityNote}

    \n`; + } + content += `
    \n`; return content; @@ -2028,12 +2074,12 @@ function generateMotionsContent(data: ArticleContentData, lang: Language | strin // Group motions by party for strategic analysis const byParty: Record = {}; motions.forEach(motion => { - const party = (motion.parti && motion.parti !== 'Unknown') ? motion.parti : 'other'; + const party = normalizePartyKey(motion.parti); if (!byParty[party]) byParty[party] = []; byParty[party].push(motion); }); - // Opposition strategy section + // Opposition strategy section with per-party analysis const partyCount = Object.keys(byParty).filter(p => p !== 'other').length; if (partyCount > 1) { content += `\n

    ${L(lang, 'oppositionStrategy')}

    \n`; @@ -2042,109 +2088,37 @@ function generateMotionsContent(data: ArticleContentData, lang: Language | strin ? strategyFn(partyCount) : `Motions from ${partyCount} different parties reveal the breadth of opposition political criticism and alternative policy agendas.`; content += `

    ${escapeHtml(String(strategyContext))}

    \n`; + // Per-party analysis with domain focus + content += generateOppositionStrategySection(motions, lang); } - /** Render a single motion entry block */ - const renderMotion = (motion: RawDocument): string => { - const titleText = motion.titel || motion.title || ''; - const escapedTitle = escapeHtml(titleText); - const titleHtml = (motion.titel && !motion.title) - ? svSpan(escapedTitle, lang) - : escapedTitle; - const docName = escapeHtml(motion.dokumentnamn || motion.dok_id || titleText); - - // Use enriched author and party data, with fallback parsing from raw notis. - // Treat 'Unknown' sentinel (set by enrichDocumentsWithContent) as missing so - // we attempt parseMotionAuthorParty before giving up. - const unknownVal = L(lang, 'unknown'); - let authorName = (motion.intressent_namn !== 'Unknown' ? motion.intressent_namn : null) || motion.author || ''; - let partyName = (motion.parti !== 'Unknown' ? motion.parti : '') || ''; - if (!authorName || authorName === 'Unknown') { - const rawText = motion.summary || motion.notis || motion.fullText || motion.titel || motion.rubrik || ''; - const parsed = parseMotionAuthorParty(rawText); - if (parsed) { authorName = parsed.author; partyName = partyName || parsed.party; } - } - if (!authorName) authorName = typeof unknownVal === 'string' ? unknownVal : 'Unknown'; - const authorLine = partyName - ? `${escapeHtml(authorName)} (${escapeHtml(partyName)})` - : escapeHtml(authorName); - - // Use enhanced summary based on metadata (cleanMotionText strips Swedish boilerplate) - const summaryText = generateEnhancedSummary(motion, 'motion', lang); - const motionDefaultVal = L(lang, 'motionDefault'); - // Only wrap in Swedish-language span when the content comes from a Swedish source - const isSwedishContent = (motion.titel && !motion.title) - || (motion.summary || motion.notis || '').includes('Motion till riksdagen'); - const summaryHtml = (summaryText && summaryText !== motionDefaultVal && isSwedishContent) - ? svSpan(escapeHtml(summaryText), lang) - : escapeHtml(summaryText || (typeof motionDefaultVal === 'string' ? motionDefaultVal : '')); - - const readFullVal = L(lang, 'readFullMotion'); - const whyItMattersVal = L(lang, 'whyItMatters'); - - return ` -
    -

    ${titleHtml}

    -

    ${L(lang, 'filedBy')}: ${authorLine}

    -

    ${summaryHtml}

    -

    ${escapeHtml(String(whyItMattersVal))}: ${generatePolicySignificance(motion, lang)}

    -

    ${escapeHtml(String(readFullVal))}: ${docName}

    -
    -`; - }; - - // Group motions by parent proposition to eliminate repetitive section headers - const { grouped, independent } = groupMotionsByProposition(motions); - - if (grouped.size > 0) { - const responsesLabel = lang === 'sv' ? 'Svar på propositioner' - : lang === 'de' ? 'Antworten auf Regierungsvorlagen' - : lang === 'fr' ? 'Réponses aux propositions gouvernementales' - : lang === 'es' ? 'Respuestas a proposiciones del gobierno' - : lang === 'da' ? 'Svar på regeringsforslag' - : lang === 'no' ? 'Svar på regjeringforslag' - : lang === 'fi' ? 'Vastaukset hallituksen esityksiin' - : lang === 'nl' ? 'Antwoorden op regeringsvoorstellen' - : lang === 'ar' ? 'ردود على مقترحات الحكومة' - : lang === 'he' ? 'תשובות להצעות הממשלה' - : lang === 'ja' ? '政府提案への回答' - : lang === 'ko' ? '정부 제안에 대한 응답' - : lang === 'zh' ? '对政府提案的回应' - : 'Responses to Government Propositions'; - - content += `\n

    ${responsesLabel}

    \n`; - - grouped.forEach((propMotions, propRef) => { - // Get prop title from first motion (strip the prop reference prefix from the title) - const firstTitle = propMotions[0]?.titel || propMotions[0]?.title || ''; - const propTitleMatch = firstTitle.match(/med anledning av prop\.\s+\S+\s+(.*)/i); - const propTitle = propTitleMatch?.[1]?.trim() || propRef; - - content += `

    ${escapeHtml(`Prop. ${propRef}: ${propTitle}`)}

    \n`; - - propMotions.forEach(motion => { content += renderMotion(motion); }); + // Group motions by primary policy theme for thematic analysis + const byTheme: Record = {}; + motions.forEach(motion => { + const domains = detectPolicyDomains(motion, lang); + const theme = domains[0] || String(L(lang, 'generalMatters')); + if (!byTheme[theme]) byTheme[theme] = []; + byTheme[theme].push(motion); + }); + const themeCount = Object.keys(byTheme).length; + + if (themeCount > 1) { + // Thematic sections: group motions by policy area + content += `\n

    ${L(lang, 'thematicAnalysis')}

    \n`; + Object.entries(byTheme).forEach(([theme, themeMotions]) => { + content += `\n

    ${escapeHtml(theme)} (${themeMotions.length})

    \n`; + themeMotions.forEach(motion => { + // Demote motion entry headings one level when inside a themed section + const entryHtml = renderMotionEntry(motion, lang); + const demotedHtml = entryHtml + .replace(/]*)?>/g, '') + .replace(/<\/h3>/g, ''); + content += demotedHtml; + }); }); - } - - if (independent.length > 0) { - if (grouped.size > 0) { - const indepLabel = lang === 'sv' ? 'Övriga motioner' - : lang === 'de' ? 'Sonstige Anträge' - : lang === 'fr' ? 'Autres motions' - : lang === 'es' ? 'Otras mociones' - : lang === 'da' ? 'Andre forslag' - : lang === 'no' ? 'Andre forslag' - : lang === 'fi' ? 'Muut aloitteet' - : lang === 'nl' ? 'Overige moties' - : lang === 'ar' ? 'اقتراحات أخرى' - : lang === 'he' ? 'הצעות אחרות' - : lang === 'ja' ? 'その他の動議' - : lang === 'ko' ? '기타 동의' - : lang === 'zh' ? '其他动议' - : 'Independent Motions'; - content += `\n

    ${indepLabel}

    \n`; - } - independent.forEach(motion => { content += renderMotion(motion); }); + } else { + // Single theme or no detection: flat list + motions.forEach(motion => { content += renderMotionEntry(motion, lang); }); } // Party activity breakdown @@ -2167,76 +2141,313 @@ function generateMotionsContent(data: ArticleContentData, lang: Language | strin } /** - * Generate policy significance context for a document based on its metadata + * Render a single motion entry div (shared between flat list and themed sections). */ -function generatePolicySignificance(doc: RawDocument, lang: Language | string): string { +function renderMotionEntry(motion: RawDocument, lang: Language | string): string { + const titleText = motion.titel || motion.title || ''; + const escapedTitle = escapeHtml(titleText); + const titleHtml = (motion.titel && !motion.title) + ? svSpan(escapedTitle, lang) + : escapedTitle; + const docName = escapeHtml(motion.dokumentnamn || motion.dok_id || titleText); + + // Use enriched author and party data, with fallback parsing from raw notis. + // Treat 'Unknown' sentinel (set by enrichDocumentsWithContent) as missing so + // we attempt parseMotionAuthorParty before giving up. + const unknownVal = L(lang, 'unknown'); + let authorName = (motion.intressent_namn !== 'Unknown' ? motion.intressent_namn : null) || motion.author || ''; + let partyName = (motion.parti !== 'Unknown' ? motion.parti : '') || ''; + if (!authorName || authorName === 'Unknown') { + const rawText = motion.summary || motion.notis || motion.fullText || motion.titel || motion.rubrik || ''; + const parsed = parseMotionAuthorParty(rawText); + if (parsed) { authorName = parsed.author; partyName = partyName || parsed.party; } + } + if (!authorName) authorName = typeof unknownVal === 'string' ? unknownVal : 'Unknown'; + const authorLine = partyName + ? `${escapeHtml(authorName)} (${escapeHtml(partyName)})` + : escapeHtml(authorName); + + // Use enhanced summary based on metadata (cleanMotionText strips Swedish boilerplate) + const summaryText = generateEnhancedSummary(motion, 'motion', lang); + const motionDefaultVal = L(lang, 'motionDefault'); + // Only wrap in Swedish-language span when the content comes from a Swedish source + const isSwedishContent = (motion.titel && !motion.title) + || (motion.summary || motion.notis || '').includes('Motion till riksdagen'); + const summaryHtml = (summaryText && summaryText !== motionDefaultVal && isSwedishContent) + ? svSpan(escapeHtml(summaryText), lang) + : escapeHtml(summaryText || (typeof motionDefaultVal === 'string' ? motionDefaultVal : '')); + + const readFullVal = L(lang, 'readFullMotion'); + const whyItMattersVal = L(lang, 'whyItMatters'); + + return ` +
    +

    ${titleHtml}

    +

    ${L(lang, 'filedBy')}: ${authorLine}

    +

    ${summaryHtml}

    +

    ${escapeHtml(String(whyItMattersVal))}: ${generateDeepPolicyAnalysis(motion, lang, 'mot')}

    +

    ${escapeHtml(String(readFullVal))}: ${docName}

    +
    +`; +} + +/** + * Detect policy domains from a document's title and committee code. + * Returns a deduplicated array of localised domain strings. + */ +function detectPolicyDomains(doc: RawDocument, lang: Language | string = 'en'): string[] { const title = (doc.titel || doc.title || '').toLowerCase(); const organ = doc.organ || doc.committee || ''; + const isSv = lang === 'sv'; + const set = new Set(); + + if (title.includes('skatt') || title.includes('tax') || title.includes('budget') || title.includes('finans') + || title.includes('makrotillsyn') || title.includes('macroprudential') + || organ === 'SkU' || organ === 'FiU') + set.add(isSv ? 'finanspolitik' : 'fiscal policy'); + if (title.includes('försvar') || title.includes('defen') || title.includes('militär') || title.includes('nato') + || organ === 'FöU') + set.add(isSv ? 'försvars- och säkerhetspolitik' : 'defence and security policy'); + if (title.includes('miljö') || title.includes('klimat') || title.includes('environ') || title.includes('energi') + || title.includes('förnybart') || title.includes('renewable') || title.includes('koldioxid') + || title.includes('hållbar') || title.includes('sustain') + || organ === 'MJU') + set.add(isSv ? 'miljö- och klimatpolitik' : 'environmental and climate policy'); + if (title.includes('utbildning') || title.includes('educ') || title.includes('skola') || title.includes('högskola') + || organ === 'UbU') + set.add(isSv ? 'utbildningspolitik' : 'education policy'); + if (title.includes('vård') || title.includes('hälsa') || title.includes('health') || title.includes('omsorg') + || organ === 'SoU') + set.add(isSv ? 'hälso- och sjukvårdspolitik' : 'healthcare policy'); + if (title.includes('migration') || title.includes('invandring') || title.includes('asyl') || title.includes('utlänning') + || organ === 'SfU') + set.add(isSv ? 'migrationspolitik' : 'migration policy'); + if (/\beu\b/.test(title) || title.includes('europa') || title.includes('utrik') || title.includes('foreign') + || organ === 'UU') + set.add(isSv ? 'EU- och utrikespolitik' : 'EU and foreign affairs'); + if (title.includes('brott') || title.includes('straff') || title.includes('polis') || title.includes('justice') + || title.includes('kriminal') || organ === 'JuU') + set.add(isSv ? 'rättspolitik' : 'justice policy'); + if (title.includes('arbetsmarknad') || title.includes('labour') || title.includes('anställning') + || title.includes('facklig') || organ === 'AU') + set.add(isSv ? 'arbetsmarknadspolitik' : 'labour market policy'); + if (title.includes('bostad') || title.includes('housing') || title.includes('hyra') || title.includes('bostadsrätt') + || title.includes('lagfart') || title.includes('fastighet') + || organ === 'CU') + set.add(isSv ? 'bostadspolitik' : 'housing policy'); + if (title.includes('trafik') || title.includes('transport') || title.includes('järnväg') || title.includes('väg') + || organ === 'TU') + set.add(isSv ? 'transportpolitik' : 'transport policy'); + if (title.includes('näring') || title.includes('handel') || title.includes('trade') || title.includes('industri') + || title.includes('företag') || organ === 'NU') + set.add(isSv ? 'näringspolitik' : 'trade and industry policy'); + + return Array.from(set); +} - // Infer policy domain from title keywords and committee (deduplicated) - const policyHintSet = new Set(); - const addHint = (hint: string): void => { policyHintSet.add(hint); }; - - if (title.includes('skatt') || title.includes('tax') || organ === 'SkU' || organ === 'FiU') { - addHint(lang === 'sv' ? 'finanspolitik' : 'fiscal policy'); - } - if (title.includes('försvar') || title.includes('defen') || organ === 'FöU') { - addHint(lang === 'sv' ? 'försvars- och säkerhetspolitik' : 'defence and security policy'); - } - if (title.includes('miljö') || title.includes('klimat') || title.includes('environ') || organ === 'MJU') { - addHint(lang === 'sv' ? 'miljö- och klimatpolitik' : 'environmental and climate policy'); - } - if (title.includes('utbildning') || title.includes('educ') || organ === 'UbU') { - addHint(lang === 'sv' ? 'utbildningspolitik' : 'education policy'); - } - if (title.includes('vård') || title.includes('hälsa') || title.includes('health') || organ === 'SoU') { - addHint(lang === 'sv' ? 'hälso- och sjukvårdspolitik' : 'healthcare policy'); - } - if (title.includes('migration') || title.includes('invandring') || organ === 'SfU') { - addHint(lang === 'sv' ? 'migrationspolitik' : 'migration policy'); - } - if (title.includes('eu') || title.includes('europa') || organ === 'UU') { - addHint(lang === 'sv' ? 'EU- och utrikespolitik' : 'EU and foreign affairs'); - } - if (title.includes('brott') || title.includes('straff') || title.includes('justice') || organ === 'JuU') { - addHint(lang === 'sv' ? 'rättspolitik' : 'justice policy'); - } - if (title.includes('arbetsmarknad') || title.includes('labour') || organ === 'AU') { - addHint(lang === 'sv' ? 'arbetsmarknadspolitik' : 'labour market policy'); - } - if (title.includes('bostad') || title.includes('housing') || organ === 'CU') { - addHint(lang === 'sv' ? 'bostadspolitik' : 'housing policy'); - } - if (title.includes('trafik') || title.includes('transport') || organ === 'TU') { - addHint(lang === 'sv' ? 'transportpolitik' : 'transport policy'); - } - if (title.includes('näring') || title.includes('handel') || title.includes('trade') || organ === 'NU') { - addHint(lang === 'sv' ? 'näringspolitik' : 'trade and industry policy'); - } - - if (policyHintSet.size > 0) { - const domains = Array.from(policyHintSet).join(', '); - const doktyp = doc.doktyp || doc.documentType || ''; - // Type-specific implication sentences - let implication: string; - if (lang === 'sv') { - if (doktyp === 'mot') { - implication = 'Motionen signalerar partiets politiska ståndpunkt; bifall är osannolikt utan regeringsstöd.'; - } else if (doktyp === 'bet') { - implication = 'Kommitténs ståndpunkt avgör propositionens väg i kammaren.'; - } else { - implication = 'Utskottsgranskning och kammarvotering avgör propositionens öde.'; +type _LangPair = { en: Record; sv: Record }; + +/** Module-level constant — allocated once, shared across all calls. */ +const DOMAIN_ANALYSES: Record = { + 'fiscal policy': { + en: { + mot: 'Fiscal policy motions directly challenge the government\'s budget assumptions and signal opposition readiness to contest tax and spending priorities.', + bet: 'The Finance Committee\'s position on fiscal matters is usually decisive — the chamber almost always follows its recommendation on budgetary questions.', + default: 'Government fiscal proposals must clear rigorous Finance Committee scrutiny and align with Sweden\'s fiscal surplus rule, making the committee\'s verdict pivotal.' + }, + sv: { + mot: 'Finanspolitiska motioner utmanar direkt regeringens budgetantaganden och signalerar oppositionens beredskap att bestrida skatte- och utgiftsprioriteringar.', + bet: 'Finansutskottets ståndpunkt i finanspolitiska frågor är i regel avgörande – kammaren följer nästan alltid utskottets rekommendation.', + default: 'Regeringens finanspolitiska förslag måste klara finansutskottets granskning och harmonisera med överskottsmålet för att nå bifall.' } - } else { - if (doktyp === 'mot') { - implication = 'This motion signals a policy position; passage requires government or majority support.'; - } else if (doktyp === 'bet') { - implication = 'The committee vote will be determinative for the legislation\'s path forward.'; - } else { - implication = 'Parliamentary committee review and chamber debate will shape the final outcome.'; + }, + 'defence and security policy': { + en: { + mot: 'Defence motions carry heightened strategic significance following Sweden\'s NATO accession, pressing the government on long-term security commitments.', + bet: 'Committee reports on defence shape Sweden\'s military posture and NATO integration trajectory — decisions here have multi-decade consequences.', + default: 'Defence proposals engage Sweden\'s NATO obligations and cross-party consensus-building mechanisms for national security legislation.' + }, + sv: { + mot: 'Försvarsrelaterade motioner har förhöjd strategisk betydelse efter Sveriges NATO-inträde och pressar regeringen om långsiktiga säkerhetsåtaganden.', + bet: 'Utskottsbetänkanden om försvar formar Sveriges militära inriktning och NATO-integration – besluten har konsekvenser i decennier.', + default: 'Försvarspropositioner engagerar Sveriges NATO-förpliktelser och mekanismer för brett partistöd inom säkerhetspolitiken.' + } + }, + 'environmental and climate policy': { + en: { + mot: 'Climate motions reflect growing parliamentary pressure for faster decarbonisation, often targeting specific industries or the pace of policy implementation.', + bet: 'The Environment Committee\'s recommendations balance climate ambition against economic competitiveness — its position sets the legislative baseline.', + default: 'Environmental proposals must navigate competing interests from industry, regional governments, and EU climate commitments, making parliamentary support critical.' + }, + sv: { + mot: 'Klimatmotioner speglar växande parlamentariskt tryck för snabbare koldioxidminskning och riktar sig ofta mot specifika branscher.', + bet: 'Miljöutskottet väger klimatambition mot ekonomisk konkurrenskraft – dess rekommendation sätter lagstiftningens utgångspunkt.', + default: 'Miljöförslag måste navigera konkurrerande intressen från industrin, regionerna och EU:s klimatåtaganden.' + } + }, + 'healthcare policy': { + en: { + mot: 'Healthcare motions typically target gaps in regional service delivery, pressing for national minimum standards, additional funding, or new patient rights.', + bet: 'Social Affairs Committee reports on healthcare set the framework for Sweden\'s regionally delivered but nationally financed health system.', + default: 'Healthcare proposals require coordination between national government, regional councils, and professional bodies — a complexity that shapes the legislative timeline.' + }, + sv: { + mot: 'Hälso- och sjukvårdsmotioner riktar sig typiskt mot brister i regionala tjänster och driver på för nationella miniminivåer eller nya patienträttigheter.', + bet: 'Socialutskottets betänkanden om hälso- och sjukvård sätter ramarna för det regionalt levererade men nationellt finansierade hälsosystemet.', + default: 'Hälso- och sjukvårdspropositioner kräver samordning mellan stat, regioner och professioner – en komplexitet som formar lagstiftningens tidslinje.' + } + }, + 'migration policy': { + en: { + mot: 'Migration motions reflect one of Sweden\'s most contested policy areas, with parties divided on asylum rules, integration requirements, and deportation procedures.', + bet: 'The Social Insurance Committee\'s migration reports navigate Sweden\'s EU law obligations and UN Refugee Convention commitments alongside domestic political pressures.', + default: 'Migration proposals must balance EU regulatory obligations with national political imperatives, making cross-party support essential for durable legislation.' + }, + sv: { + mot: 'Migrationsmotioner speglar ett av Sveriges mest omtvistade politikområden, med partier delade om asylregler, integrationskrav och återvändanderutiner.', + bet: 'Socialförsäkringsutskottets migrationsbetänkanden navigerar Sveriges åtaganden enligt EU-rätten och FN:s flyktingkonvention.', + default: 'Migrationspropositioner måste balansera EU-rättsliga förpliktelser med nationella politiska imperativ.' + } + }, + 'EU and foreign affairs': { + en: { + mot: 'EU and foreign affairs motions signal parliamentary expectations for government negotiating positions — influential despite executive prerogative in external relations.', + bet: 'The Foreign Affairs Committee\'s reports on EU matters reflect Sweden\'s positioning within the bloc and may bind future negotiating postures.', + default: 'EU and foreign affairs proposals engage Sweden\'s treaty obligations and often require coordination with European partners before domestic enactment.' + }, + sv: { + mot: 'EU- och utrikespolitiska motioner signalerar parlamentets förväntningar på regeringens förhandlingspositioner.', + bet: 'Utrikesutskottets betänkanden om EU-frågor speglar Sveriges positionering inom unionen och kan binda framtida förhandlingslinjer.', + default: 'EU- och utrikespropositioner engagerar Sveriges fördragsförpliktelser och kräver samordning med europeiska partner.' + } + }, + 'justice policy': { + en: { + mot: 'Justice motions address crime, sentencing, and policing — areas with high public salience where opposition parties frequently press for tougher or more targeted measures.', + bet: 'The Justice Committee shapes the criminal law framework; its reports on sentencing and policing directly affect prosecution practice and enforcement priorities.', + default: 'Justice proposals balance rule-of-law principles, human rights obligations, and public safety demands — requiring careful drafting to withstand constitutional scrutiny.' + }, + sv: { + mot: 'Rättsliga motioner rör brott, straff och polis – frågor med hög allmän relevans där oppositionen ofta driver på för hårdare åtgärder.', + bet: 'Justitieutskottet formar den straffrättsliga ramen; dess betänkanden om straffsatser och polisverksamhet påverkar direkt åklagarnas praxis.', + default: 'Rättsliga propositioner balanserar rättsstatsprinciper, mänskliga rättigheter och allmän säkerhet.' + } + }, + 'labour market policy': { + en: { + mot: 'Labour market motions engage sensitive negotiations between employers, unions, and the state — every motion sends a signal to Sweden\'s social partners.', + bet: 'The Labour Committee\'s reports on workplace legislation must navigate collective bargaining autonomy while setting minimum statutory floors.', + default: 'Labour market proposals enter an arena where tripartite negotiation shapes the final legislative outcome as much as parliamentary votes.' + }, + sv: { + mot: 'Arbetsmarknadsmotioner engagerar känsliga förhandlingar mellan arbetsgivare, fackförbund och stat – varje motion signalerar till parterna.', + bet: 'Arbetsmarknadsutskottets betänkanden om arbetsplatslagar måste navigera kollektivavtalens självständighet.', + default: 'Arbetsmarknadspropositioner träder in i en arena där trepartsförhandlingar formar det slutliga lagstiftningsresultatet.' + } + }, + 'housing policy': { + en: { + mot: 'Housing motions reflect structural tension between demand for affordable homes and constraints of planning law, rent regulation, and construction cost pressures.', + bet: 'The Civil Affairs Committee\'s housing reports address one of Sweden\'s most persistent policy challenges, where committee decisions unlock or block major regulatory change.', + default: 'Housing proposals must reconcile competing interests from municipalities, property owners, tenants, and developers — a coalition rarely achieved quickly.' + }, + sv: { + mot: 'Bostadsmotioner speglar strukturell spänning mellan efterfrågan på prisvärda bostäder och begränsningarna i plan- och hyreslagstiftning.', + bet: 'Civilutskottets bostadsbetänkanden hanterar en av Sveriges mest ihållande politiska utmaningar.', + default: 'Bostadspropositioner måste balansera konkurrerande intressen från kommuner, fastighetsägare, hyresgäster och byggföretag.' + } + }, + 'transport policy': { + en: { + mot: 'Transport motions address infrastructure investment, road safety, and public transit — areas where regional and national interests frequently diverge.', + bet: 'The Transport Committee\'s reports guide Sweden\'s national infrastructure planning cycle, directly affecting long-term investment priorities.', + default: 'Transport proposals engage the national infrastructure budget, regional equity, and climate transition targets — all must be balanced in committee deliberation.' + }, + sv: { + mot: 'Transportmotioner rör infrastrukturinvesteringar, trafiksäkerhet och kollektivtrafik – frågor där regionala och nationella intressen ofta divergerar.', + bet: 'Trafikutskottets betänkanden vägleder Sveriges nationella infrastrukturplanering och påverkar direkt långsiktiga investeringsprioriteringar.', + default: 'Transportpropositioner engagerar den nationella infrastrukturbudgeten, regional jämlikhet och klimatomställningsmål.' + } + }, + 'trade and industry policy': { + en: { + mot: 'Industry and trade motions often target competitiveness, innovation, or trade agreements — signalling party positions ahead of EU-level or bilateral negotiations.', + bet: 'The Committee on Industry and Trade shapes Sweden\'s business environment through reports that set conditions for investment, innovation, and exports.', + default: 'Industry and trade proposals engage international commitments, EU single-market rules, and domestic competitiveness imperatives simultaneously.' + }, + sv: { + mot: 'Näringspolitiska motioner riktar sig ofta mot konkurrenskraft, innovation eller handelsavtal och signalerar partipositioner inför förhandlingar.', + bet: 'Näringsutskottets betänkanden formar Sveriges affärsmiljö och sätter villkoren för investeringar och export.', + default: 'Näringspolitiska propositioner engagerar internationella åtaganden, EU:s inre marknadsregler och inhemsk konkurrenskraft.' + } + }, + 'education policy': { + en: { + mot: 'Education motions reflect deep disagreements on school standards, teacher pay, and the role of independent schools — one of Sweden\'s most contested domestic debates.', + bet: 'The Education Committee\'s reports directly shape curriculum standards, funding formulas, and school regulation — decisions with long generational consequences.', + default: 'Education proposals must balance national curriculum standards with municipal delivery autonomy and the contested role of private providers in the Swedish school system.' + }, + sv: { + mot: 'Utbildningsmotioner speglar djupa meningsskiljaktigheter om skolstandard, lärarlöner och friskolornas roll.', + bet: 'Utbildningsutskottets betänkanden formar direkt läroplaner, finansieringsmodeller och skolreglering.', + default: 'Utbildningspropositioner måste balansera nationella läroplaner med kommunalt leveransansvar och de privata aktörernas omstridda roll.' } } - return `Touches on ${escapeHtml(domains)}. ${implication}`; +}; + +/** Module-level constant — allocated once, shared across all calls. */ +const EN_DOMAIN_MAP: Record = { + 'finanspolitik': 'fiscal policy', + 'försvars- och säkerhetspolitik': 'defence and security policy', + 'miljö- och klimatpolitik': 'environmental and climate policy', + 'utbildningspolitik': 'education policy', + 'hälso- och sjukvårdspolitik': 'healthcare policy', + 'migrationspolitik': 'migration policy', + 'EU- och utrikespolitik': 'EU and foreign affairs', + 'rättspolitik': 'justice policy', + 'arbetsmarknadspolitik': 'labour market policy', + 'bostadspolitik': 'housing policy', + 'transportpolitik': 'transport policy', + 'näringspolitik': 'trade and industry policy' +}; + +/** + * Return a substantive domain-specific and type-specific analysis sentence. + * Each of 12 policy domains has tailored text for motions (mot), committee + * reports (bet), and propositions/default, in both English and Swedish. + */ +function getDomainSpecificAnalysis(primaryDomain: string, doktyp: string, lang: Language | string): string { + const isSv = lang === 'sv'; + + const lookupKey = EN_DOMAIN_MAP[primaryDomain] ?? primaryDomain; + const entry = DOMAIN_ANALYSES[lookupKey]; + if (!entry) return ''; + + const langEntry = isSv ? entry.sv : entry.en; + const typeKey = (doktyp === 'mot' || doktyp === 'bet') ? doktyp : 'default'; + return langEntry[typeKey] ?? langEntry['default'] ?? ''; +} + +/** + * Generate policy significance context for a document based on its metadata. + * Uses the localised policySignificanceTouches label plus a domain-specific + * analysis sentence instead of generic boilerplate. + * @param impliedDoktyp - document type inferred from the calling context + * ('mot', 'bet', 'prop') when doc.doktyp / doc.documentType is absent. + */ +function generatePolicySignificance(doc: RawDocument, lang: Language | string, impliedDoktyp?: string): string { + const domains = detectPolicyDomains(doc, lang); + + if (domains.length > 0) { + const domainsStr = domains.join(', '); + const touchesFn = L(lang, 'policySignificanceTouches') as string | ((d: string) => string); + const baseText = typeof touchesFn === 'function' + ? touchesFn(escapeHtml(domainsStr)) + : `Touches on ${escapeHtml(domainsStr)}.`; + + const doktyp = doc.doktyp || doc.documentType || impliedDoktyp || ''; + const deepAnalysis = getDomainSpecificAnalysis(domains[0] ?? '', doktyp, lang); + return deepAnalysis ? `${baseText} ${deepAnalysis}` : baseText; } // Generic significance when no domain detected @@ -2244,6 +2455,101 @@ function generatePolicySignificance(doc: RawDocument, lang: Language | string): return typeof genericVal === 'string' ? genericVal : 'Requires committee review and chamber debate before a decision is reached.'; } +/** + * Generate deep policy analysis for a single document entry. + * Only uses `fullText` / `fullContent` (enriched content fetched separately) + * as the passage source — summary/notis are already shown in the summary line + * above in structured views and must not be duplicated here. + * Falls back to generatePolicySignificance when no enriched text is available. + * @param impliedDoktyp - document type inferred from the calling context + * ('mot', 'bet', 'prop') when doc.doktyp / doc.documentType is absent. + */ +function generateDeepPolicyAnalysis(doc: RawDocument, lang: Language | string, impliedDoktyp?: string): string { + const effectiveDoktyp = doc.doktyp || doc.documentType || impliedDoktyp || ''; + const rawText = doc.fullText || doc.fullContent || ''; + if (rawText && !isPersonProfileText(rawText)) { + const cleanedText = (effectiveDoktyp === 'mot' && rawText.includes('Motion till riksdagen')) + ? cleanMotionText(rawText) + : rawText; + const passage = extractKeyPassage(cleanedText, 300); + if (passage) { + const isSwedishSource = !!(doc.titel && !doc.title); + const passageHtml = isSwedishSource + ? svSpan(escapeHtml(passage), lang) + : escapeHtml(passage); + return `${passageHtml} ${generatePolicySignificance(doc, lang, impliedDoktyp)}`; + } + } + return generatePolicySignificance(doc, lang, impliedDoktyp); +} + +/** + * Normalise a raw `parti` field to a canonical party key. + * Maps missing, empty, or any capitalisation of 'unknown' to 'other'. + * Used in both generateMotionsContent (party grouping) and + * generateOppositionStrategySection so both sections treat the sentinel + * identically regardless of capitalisation. + */ +function normalizePartyKey(parti: unknown): string { + const raw = typeof parti === 'string' ? parti.trim() : ''; + return !raw || raw.toLowerCase() === 'unknown' ? 'other' : raw; +} + +/** + * Generate an opposition-strategy analysis paragraph. + * Identifies which party is most active, what policy areas they focus on, + * and which other party follows — turning raw party counts into narrative. + */ +function generateOppositionStrategySection(motions: RawDocument[], lang: Language | string): string { + const byParty: Record = {}; + motions.forEach(m => { + const party = normalizePartyKey(m.parti); + if (!byParty[party]) byParty[party] = []; + byParty[party].push(m); + }); + + const sortedParties = Object.entries(byParty) + .filter(([p]) => p !== 'other') + .sort(([, a], [, b]) => b.length - a.length); + + if (sortedParties.length === 0) return ''; + + const [topParty, topMotions] = sortedParties[0]; + + // Identify primary policy domain(s) for the most-active party + const topDomainSet = new Set(); + topMotions.forEach(m => { + detectPolicyDomains(m, lang).forEach(d => topDomainSet.add(d)); + }); + const topDomains = Array.from(topDomainSet).slice(0, 2); + + const isSv = lang === 'sv'; + const count = topMotions.length; + let text = ''; + + if (isSv) { + const domainList = topDomains.join(' och '); + text = `${escapeHtml(topParty)} är mest aktiv med ${count} motion${count !== 1 ? 'er' : ''}`; + if (domainList) text += `, med fokus på ${escapeHtml(domainList)}`; + text += '.'; + } else { + const domainList = topDomains.join(' and '); + text = `${escapeHtml(topParty)} leads opposition activity with ${count} motion${count !== 1 ? 's' : ''}`; + if (domainList) text += `, focused on ${escapeHtml(domainList)}`; + text += '.'; + } + + if (sortedParties.length > 1) { + const [secondParty, secondMotions] = sortedParties[1]; + const n = secondMotions.length; + text += isSv + ? ` ${escapeHtml(secondParty)} följer med ${n} motion${n !== 1 ? 'er' : ''}.` + : ` ${escapeHtml(secondParty)} follows with ${n} motion${n !== 1 ? 's' : ''}.`; + } + + return `

    ${text}

    \n`; +} + /** * Extract the most analytically useful excerpt from full document text. * Returns first substantive paragraph (skips short headings/metadata lines). @@ -2302,7 +2608,7 @@ function generateDocumentIntelligenceAnalysis(doc: RawDocument, docType: string, } // ── PRIMARY: policy domain significance derived from document content ──── - const significance = generatePolicySignificance(doc, lang); + const significance = generatePolicySignificance(doc, lang, docType); parts.push(`${escapeHtml(String(L(lang, 'whatThisMeans')))}: ${significance}`); // ── PRIMARY: related speeches (direct evidence from the chamber) ───────── @@ -2433,13 +2739,11 @@ function generateGenericContent(data: ArticleContentData, lang: Language | strin content += `
  • ${escapeHtml(typeDescriptions.join(', '))} processed this period
  • \n`; } - // Policy domains + // Policy domains — show labels only to keep the bullet concise const allDomains = new Set(); const enrichedCount = docs.filter(d => d.contentFetched).length; docs.forEach(doc => { - const sig = generatePolicySignificance(doc, lang); - const genericVal = L(lang, 'policySignificanceGeneric'); - if (sig !== genericVal) allDomains.add(sig); + detectPolicyDomains(doc, lang).forEach(d => allDomains.add(d)); }); if (allDomains.size > 0) { const policyContextVal = L(lang, 'policyContext'); diff --git a/scripts/types/content.ts b/scripts/types/content.ts index a4e95c54..6a3ffe0d 100644 --- a/scripts/types/content.ts +++ b/scripts/types/content.ts @@ -102,4 +102,5 @@ export interface ContentLabelSet { otherDocuments: string; policySignificanceTouches: (domains: string) => string; policySignificanceGeneric: string; + generalMatters: string; } diff --git a/sitemap.xml b/sitemap.xml index 53dd73e6..810e0410 100755 --- a/sitemap.xml +++ b/sitemap.xml @@ -3,7 +3,7 @@ xmlns:xhtml="http://www.w3.org/1999/xhtml"> https://riksdagsmonitor.com/index.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 1.0 @@ -23,91 +23,91 @@ https://riksdagsmonitor.com/index_sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 0.9 https://riksdagsmonitor.com/index_da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 0.7 https://riksdagsmonitor.com/index_no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 0.7 https://riksdagsmonitor.com/index_fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 0.7 https://riksdagsmonitor.com/index_de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 0.7 https://riksdagsmonitor.com/index_fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 0.7 https://riksdagsmonitor.com/index_es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 0.7 https://riksdagsmonitor.com/index_nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 0.7 https://riksdagsmonitor.com/index_ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 0.7 https://riksdagsmonitor.com/index_he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 0.7 https://riksdagsmonitor.com/index_ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 0.7 https://riksdagsmonitor.com/index_ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 0.7 https://riksdagsmonitor.com/index_zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z daily 0.7 https://riksdagsmonitor.com/politician-dashboard.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.8 https://riksdagsmonitor.com/dashboard/index.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.8 @@ -127,85 +127,85 @@ https://riksdagsmonitor.com/dashboard/index_sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.8 https://riksdagsmonitor.com/dashboard/index_da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.7 https://riksdagsmonitor.com/dashboard/index_no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.7 https://riksdagsmonitor.com/dashboard/index_fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.7 https://riksdagsmonitor.com/dashboard/index_de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.7 https://riksdagsmonitor.com/dashboard/index_fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.7 https://riksdagsmonitor.com/dashboard/index_es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.7 https://riksdagsmonitor.com/dashboard/index_nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.7 https://riksdagsmonitor.com/dashboard/index_ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.7 https://riksdagsmonitor.com/dashboard/index_he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.7 https://riksdagsmonitor.com/dashboard/index_ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.7 https://riksdagsmonitor.com/dashboard/index_ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.7 https://riksdagsmonitor.com/dashboard/index_zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z weekly 0.7 https://riksdagsmonitor.com/sitemap.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.6 @@ -226,85 +226,85 @@ https://riksdagsmonitor.com/sitemap_sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.5 https://riksdagsmonitor.com/sitemap_da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.4 https://riksdagsmonitor.com/sitemap_no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.4 https://riksdagsmonitor.com/sitemap_fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.4 https://riksdagsmonitor.com/sitemap_de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.4 https://riksdagsmonitor.com/sitemap_fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.4 https://riksdagsmonitor.com/sitemap_es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.4 https://riksdagsmonitor.com/sitemap_nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.4 https://riksdagsmonitor.com/sitemap_ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.4 https://riksdagsmonitor.com/sitemap_he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.4 https://riksdagsmonitor.com/sitemap_ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.4 https://riksdagsmonitor.com/sitemap_ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.4 https://riksdagsmonitor.com/sitemap_zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.4 https://riksdagsmonitor.com/news/ - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z daily 0.9 @@ -322,67 +322,67 @@ https://riksdagsmonitor.com/news/index_sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z daily 0.9 https://riksdagsmonitor.com/news/index_da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z daily 0.7 https://riksdagsmonitor.com/news/index_no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z daily 0.7 https://riksdagsmonitor.com/news/index_fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z daily 0.7 https://riksdagsmonitor.com/news/index_de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z daily 0.7 https://riksdagsmonitor.com/news/index_fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z daily 0.7 https://riksdagsmonitor.com/news/index_es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z daily 0.7 https://riksdagsmonitor.com/news/index_nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z daily 0.7 https://riksdagsmonitor.com/news/index_ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z daily 0.7 https://riksdagsmonitor.com/news/index_he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z daily 0.7 https://riksdagsmonitor.com/news/2026-02-10-biodiversity-citizenship-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -391,7 +391,7 @@ https://riksdagsmonitor.com/news/2026-02-10-biodiversity-citizenship-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -400,7 +400,7 @@ https://riksdagsmonitor.com/news/2026-02-10-pm-eu-summit-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -409,7 +409,7 @@ https://riksdagsmonitor.com/news/2026-02-10-pm-eu-summit-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -418,7 +418,7 @@ https://riksdagsmonitor.com/news/2026-02-10-week-ahead-feb-10-17-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -427,7 +427,7 @@ https://riksdagsmonitor.com/news/2026-02-10-week-ahead-feb-10-17-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -436,7 +436,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -457,7 +457,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -478,7 +478,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -499,7 +499,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -520,7 +520,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -541,7 +541,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -562,7 +562,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -583,7 +583,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -604,7 +604,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -625,7 +625,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -646,7 +646,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -667,7 +667,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -688,7 +688,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -709,7 +709,7 @@ https://riksdagsmonitor.com/news/2026-02-13-evening-analysis-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -730,7 +730,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -751,7 +751,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -772,7 +772,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -793,7 +793,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -814,7 +814,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -835,7 +835,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -856,7 +856,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -877,7 +877,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -898,7 +898,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -919,7 +919,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -940,7 +940,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -961,7 +961,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -982,7 +982,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1003,7 +1003,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1024,7 +1024,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-fiscal-welfare-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1033,7 +1033,7 @@ https://riksdagsmonitor.com/news/2026-02-14-committee-reports-fiscal-welfare-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1042,7 +1042,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1063,7 +1063,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1084,7 +1084,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1105,7 +1105,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1126,7 +1126,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1147,7 +1147,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1168,7 +1168,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1189,7 +1189,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1210,7 +1210,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1231,7 +1231,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1252,7 +1252,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1273,7 +1273,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1294,7 +1294,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1315,7 +1315,7 @@ https://riksdagsmonitor.com/news/2026-02-14-government-propositions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1336,7 +1336,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1357,7 +1357,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1378,7 +1378,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1399,7 +1399,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1420,7 +1420,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1441,7 +1441,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1462,7 +1462,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1483,7 +1483,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1504,7 +1504,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1525,7 +1525,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1546,7 +1546,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1567,7 +1567,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1588,7 +1588,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1609,7 +1609,7 @@ https://riksdagsmonitor.com/news/2026-02-14-opposition-motions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1630,7 +1630,7 @@ https://riksdagsmonitor.com/news/2026-02-14-week-ahead-feb-14-20-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1639,7 +1639,7 @@ https://riksdagsmonitor.com/news/2026-02-14-week-ahead-feb-14-20-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1648,7 +1648,7 @@ https://riksdagsmonitor.com/news/2026-02-14-week-ahead-feb-15-21-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1660,7 +1660,7 @@ https://riksdagsmonitor.com/news/2026-02-14-week-ahead-feb-15-21-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1672,7 +1672,7 @@ https://riksdagsmonitor.com/news/2026-02-14-week-ahead-feb-15-21-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1684,7 +1684,7 @@ https://riksdagsmonitor.com/news/2026-02-14-week-ahead-feb-15-21-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1696,7 +1696,7 @@ https://riksdagsmonitor.com/news/2026-02-14-week-ahead-feb-15-21-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1708,7 +1708,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1729,7 +1729,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1750,7 +1750,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1771,7 +1771,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1792,7 +1792,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1813,7 +1813,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1834,7 +1834,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1855,7 +1855,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1876,7 +1876,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1897,7 +1897,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1918,7 +1918,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1939,7 +1939,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1960,7 +1960,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -1981,7 +1981,7 @@ https://riksdagsmonitor.com/news/2026-02-16-committee-reports-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2002,7 +2002,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2023,7 +2023,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2044,7 +2044,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2065,7 +2065,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2086,7 +2086,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2107,7 +2107,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2128,7 +2128,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2149,7 +2149,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2170,7 +2170,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2191,7 +2191,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2212,7 +2212,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2233,7 +2233,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2254,7 +2254,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2275,7 +2275,7 @@ https://riksdagsmonitor.com/news/2026-02-16-evening-analysis-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2296,7 +2296,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2317,7 +2317,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2338,7 +2338,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2359,7 +2359,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2380,7 +2380,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2401,7 +2401,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2422,7 +2422,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2443,7 +2443,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2464,7 +2464,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2485,7 +2485,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2506,7 +2506,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2527,7 +2527,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2548,7 +2548,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2569,7 +2569,7 @@ https://riksdagsmonitor.com/news/2026-02-16-government-propositions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2590,7 +2590,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2611,7 +2611,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2632,7 +2632,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2653,7 +2653,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2674,7 +2674,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2695,7 +2695,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2716,7 +2716,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2737,7 +2737,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2758,7 +2758,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2779,7 +2779,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2800,7 +2800,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2821,7 +2821,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2842,7 +2842,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2863,7 +2863,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-interpellations-offensive-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2884,7 +2884,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2905,7 +2905,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2926,7 +2926,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2947,7 +2947,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2968,7 +2968,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -2989,7 +2989,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3010,7 +3010,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3031,7 +3031,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3052,7 +3052,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3073,7 +3073,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3094,7 +3094,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3115,7 +3115,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3136,7 +3136,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3157,7 +3157,7 @@ https://riksdagsmonitor.com/news/2026-02-16-opposition-motions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3178,7 +3178,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3199,7 +3199,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3220,7 +3220,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3241,7 +3241,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3262,7 +3262,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3283,7 +3283,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3304,7 +3304,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3325,7 +3325,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3346,7 +3346,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3367,7 +3367,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3388,7 +3388,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3409,7 +3409,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3430,7 +3430,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3451,7 +3451,7 @@ https://riksdagsmonitor.com/news/2026-02-17-committee-reports-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3472,7 +3472,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3493,7 +3493,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3514,7 +3514,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3535,7 +3535,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3556,7 +3556,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3577,7 +3577,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3598,7 +3598,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3619,7 +3619,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3640,7 +3640,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3661,7 +3661,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3682,7 +3682,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3703,7 +3703,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3724,7 +3724,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3745,7 +3745,7 @@ https://riksdagsmonitor.com/news/2026-02-17-evening-analysis-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3766,7 +3766,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3787,7 +3787,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3808,7 +3808,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3829,7 +3829,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3850,7 +3850,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3871,7 +3871,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3892,7 +3892,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3913,7 +3913,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3934,7 +3934,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3955,7 +3955,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3976,7 +3976,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -3997,7 +3997,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4018,7 +4018,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4039,7 +4039,7 @@ https://riksdagsmonitor.com/news/2026-02-17-foreign-policy-security-push-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4060,7 +4060,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4081,7 +4081,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4102,7 +4102,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4123,7 +4123,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4144,7 +4144,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4165,7 +4165,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4186,7 +4186,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4207,7 +4207,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4228,7 +4228,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4249,7 +4249,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4270,7 +4270,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4291,7 +4291,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4312,7 +4312,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4333,7 +4333,7 @@ https://riksdagsmonitor.com/news/2026-02-17-government-propositions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4354,7 +4354,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4375,7 +4375,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4396,7 +4396,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4417,7 +4417,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4438,7 +4438,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4459,7 +4459,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4480,7 +4480,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4501,7 +4501,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4522,7 +4522,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4543,7 +4543,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4564,7 +4564,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4585,7 +4585,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4606,7 +4606,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4627,7 +4627,7 @@ https://riksdagsmonitor.com/news/2026-02-17-opposition-motions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4648,7 +4648,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4669,7 +4669,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4690,7 +4690,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4711,7 +4711,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4732,7 +4732,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4753,7 +4753,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4774,7 +4774,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4795,7 +4795,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4816,7 +4816,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4837,7 +4837,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4858,7 +4858,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4879,7 +4879,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4900,7 +4900,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4921,7 +4921,7 @@ https://riksdagsmonitor.com/news/2026-02-18-committee-reports-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4942,7 +4942,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4963,7 +4963,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -4984,7 +4984,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5005,7 +5005,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5026,7 +5026,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5047,7 +5047,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5068,7 +5068,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5089,7 +5089,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5110,7 +5110,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5131,7 +5131,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5152,7 +5152,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5173,7 +5173,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5194,7 +5194,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5215,7 +5215,7 @@ https://riksdagsmonitor.com/news/2026-02-18-evening-analysis-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5236,7 +5236,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5257,7 +5257,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5278,7 +5278,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5299,7 +5299,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5320,7 +5320,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5341,7 +5341,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5362,7 +5362,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5383,7 +5383,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5404,7 +5404,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5425,7 +5425,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5446,7 +5446,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5467,7 +5467,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5488,7 +5488,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5509,7 +5509,7 @@ https://riksdagsmonitor.com/news/2026-02-18-foreign-policy-debate-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5530,7 +5530,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5551,7 +5551,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5572,7 +5572,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5593,7 +5593,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5614,7 +5614,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5635,7 +5635,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5656,7 +5656,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5677,7 +5677,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5698,7 +5698,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5719,7 +5719,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5740,7 +5740,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5761,7 +5761,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5782,7 +5782,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5803,7 +5803,7 @@ https://riksdagsmonitor.com/news/2026-02-18-government-propositions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5824,7 +5824,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5845,7 +5845,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5866,7 +5866,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5887,7 +5887,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5908,7 +5908,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5929,7 +5929,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5950,7 +5950,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5971,7 +5971,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -5992,7 +5992,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6013,7 +6013,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6034,7 +6034,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6055,7 +6055,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6076,7 +6076,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6097,7 +6097,7 @@ https://riksdagsmonitor.com/news/2026-02-18-opposition-motions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6118,7 +6118,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6139,7 +6139,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6160,7 +6160,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6181,7 +6181,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6202,7 +6202,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6223,7 +6223,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6244,7 +6244,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6265,7 +6265,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6286,7 +6286,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6307,7 +6307,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6328,7 +6328,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6349,7 +6349,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6370,7 +6370,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6391,7 +6391,7 @@ https://riksdagsmonitor.com/news/2026-02-18-parliamentary-questions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6412,7 +6412,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6433,7 +6433,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6454,7 +6454,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6475,7 +6475,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6496,7 +6496,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6517,7 +6517,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6538,7 +6538,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6559,7 +6559,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6580,7 +6580,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6601,7 +6601,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6622,7 +6622,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6643,7 +6643,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6664,7 +6664,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6685,7 +6685,7 @@ https://riksdagsmonitor.com/news/2026-02-19-committee-reports-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6706,7 +6706,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6727,7 +6727,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6748,7 +6748,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6769,7 +6769,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6790,7 +6790,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6811,7 +6811,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6832,7 +6832,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6853,7 +6853,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6874,7 +6874,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6895,7 +6895,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6916,7 +6916,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6937,7 +6937,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6958,7 +6958,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -6979,7 +6979,7 @@ https://riksdagsmonitor.com/news/2026-02-19-evening-analysis-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7000,7 +7000,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7021,7 +7021,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7042,7 +7042,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7063,7 +7063,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7084,7 +7084,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7105,7 +7105,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7126,7 +7126,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7147,7 +7147,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7168,7 +7168,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7189,7 +7189,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7210,7 +7210,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7231,7 +7231,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7252,7 +7252,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7273,7 +7273,7 @@ https://riksdagsmonitor.com/news/2026-02-19-government-propositions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7294,7 +7294,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7315,7 +7315,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7336,7 +7336,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7357,7 +7357,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7378,7 +7378,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7399,7 +7399,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7420,7 +7420,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7441,7 +7441,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7462,7 +7462,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7483,7 +7483,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7504,7 +7504,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7525,7 +7525,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7546,7 +7546,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7567,7 +7567,7 @@ https://riksdagsmonitor.com/news/2026-02-19-opposition-motions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7588,7 +7588,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7609,7 +7609,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7630,7 +7630,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7651,7 +7651,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7672,7 +7672,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7693,7 +7693,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7714,7 +7714,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7735,7 +7735,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7756,7 +7756,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7777,7 +7777,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7798,7 +7798,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7819,7 +7819,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7840,7 +7840,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7861,7 +7861,7 @@ https://riksdagsmonitor.com/news/2026-02-20-committee-reports-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7882,7 +7882,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7903,7 +7903,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7924,7 +7924,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7945,7 +7945,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7966,7 +7966,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -7987,7 +7987,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8008,7 +8008,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8029,7 +8029,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8050,7 +8050,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8071,7 +8071,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8092,7 +8092,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8113,7 +8113,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8134,7 +8134,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8155,7 +8155,7 @@ https://riksdagsmonitor.com/news/2026-02-20-evening-analysis-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8176,7 +8176,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8197,7 +8197,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8218,7 +8218,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8239,7 +8239,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8260,7 +8260,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8281,7 +8281,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8302,7 +8302,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8323,7 +8323,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8344,7 +8344,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8365,7 +8365,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8386,7 +8386,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8407,7 +8407,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8428,7 +8428,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8449,7 +8449,7 @@ https://riksdagsmonitor.com/news/2026-02-20-government-propositions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8470,7 +8470,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8491,7 +8491,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8512,7 +8512,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8533,7 +8533,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8554,7 +8554,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8575,7 +8575,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8596,7 +8596,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8617,7 +8617,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8638,7 +8638,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8659,7 +8659,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8680,7 +8680,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8701,7 +8701,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8722,7 +8722,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8743,7 +8743,7 @@ https://riksdagsmonitor.com/news/2026-02-20-immigration-reform-reports-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8764,7 +8764,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8785,7 +8785,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8806,7 +8806,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8827,7 +8827,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8848,7 +8848,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8869,7 +8869,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8890,7 +8890,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8911,7 +8911,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8932,7 +8932,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8953,7 +8953,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8974,7 +8974,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -8995,7 +8995,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9016,7 +9016,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9037,7 +9037,7 @@ https://riksdagsmonitor.com/news/2026-02-20-opposition-motions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9058,7 +9058,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9079,7 +9079,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9100,7 +9100,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9121,7 +9121,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9142,7 +9142,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9163,7 +9163,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9184,7 +9184,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9205,7 +9205,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9226,7 +9226,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9247,7 +9247,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9268,7 +9268,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9289,7 +9289,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9310,7 +9310,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9331,7 +9331,7 @@ https://riksdagsmonitor.com/news/2026-02-20-week-ahead-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9352,7 +9352,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9373,7 +9373,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9394,7 +9394,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9415,7 +9415,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9436,7 +9436,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9457,7 +9457,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9478,7 +9478,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9499,7 +9499,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9520,7 +9520,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9541,7 +9541,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9562,7 +9562,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9583,7 +9583,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9604,7 +9604,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9625,7 +9625,7 @@ https://riksdagsmonitor.com/news/2026-02-21-ai-strategy-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9646,7 +9646,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9667,7 +9667,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9688,7 +9688,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9709,7 +9709,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9730,7 +9730,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9751,7 +9751,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9772,7 +9772,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9793,7 +9793,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9814,7 +9814,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9835,7 +9835,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9856,7 +9856,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9877,7 +9877,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9898,7 +9898,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9919,7 +9919,7 @@ https://riksdagsmonitor.com/news/2026-02-22-committee-reports-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9940,7 +9940,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9961,7 +9961,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -9982,7 +9982,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10003,7 +10003,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10024,7 +10024,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10045,7 +10045,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10066,7 +10066,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10087,7 +10087,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10108,7 +10108,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10129,7 +10129,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10150,7 +10150,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10171,7 +10171,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10192,7 +10192,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10213,7 +10213,7 @@ https://riksdagsmonitor.com/news/2026-02-22-government-propositions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10234,7 +10234,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10255,7 +10255,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10276,7 +10276,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10297,7 +10297,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10318,7 +10318,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10339,7 +10339,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10360,7 +10360,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10381,7 +10381,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10402,7 +10402,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10423,7 +10423,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10444,7 +10444,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10465,7 +10465,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10486,7 +10486,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10507,7 +10507,7 @@ https://riksdagsmonitor.com/news/2026-02-22-justice-reform-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10528,7 +10528,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10549,7 +10549,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10570,7 +10570,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10591,7 +10591,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10612,7 +10612,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10633,7 +10633,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10654,7 +10654,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10675,7 +10675,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10696,7 +10696,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10717,7 +10717,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10738,7 +10738,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10759,7 +10759,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10780,7 +10780,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10801,7 +10801,7 @@ https://riksdagsmonitor.com/news/2026-02-22-month-ahead-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10822,7 +10822,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10843,7 +10843,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10864,7 +10864,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10885,7 +10885,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10906,7 +10906,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10927,7 +10927,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10948,7 +10948,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10969,7 +10969,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -10990,7 +10990,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11011,7 +11011,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11032,7 +11032,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11053,7 +11053,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11074,7 +11074,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11095,7 +11095,7 @@ https://riksdagsmonitor.com/news/2026-02-22-monthly-review-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11116,7 +11116,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11137,7 +11137,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11158,7 +11158,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11179,7 +11179,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11200,7 +11200,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11221,7 +11221,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11242,7 +11242,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11263,7 +11263,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11284,7 +11284,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11305,7 +11305,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11326,7 +11326,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11347,7 +11347,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11368,7 +11368,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11389,7 +11389,7 @@ https://riksdagsmonitor.com/news/2026-02-22-opposition-motions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11410,7 +11410,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11431,7 +11431,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11452,7 +11452,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11473,7 +11473,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11494,7 +11494,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11515,7 +11515,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11536,7 +11536,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11557,7 +11557,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11578,7 +11578,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11599,7 +11599,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11620,7 +11620,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11641,7 +11641,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11662,7 +11662,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11683,7 +11683,7 @@ https://riksdagsmonitor.com/news/2026-02-22-week-ahead-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11704,7 +11704,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11725,7 +11725,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11746,7 +11746,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11767,7 +11767,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11788,7 +11788,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11809,7 +11809,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11830,7 +11830,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11851,7 +11851,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11872,7 +11872,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11893,7 +11893,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11914,7 +11914,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11935,7 +11935,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11956,7 +11956,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11977,7 +11977,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekend-security-preparedness-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -11998,7 +11998,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12019,7 +12019,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12040,7 +12040,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12061,7 +12061,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12082,7 +12082,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12103,7 +12103,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12124,7 +12124,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12145,7 +12145,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12166,7 +12166,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12187,7 +12187,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12208,7 +12208,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12229,7 +12229,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12250,7 +12250,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12271,7 +12271,7 @@ https://riksdagsmonitor.com/news/2026-02-22-weekly-review-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -12292,7 +12292,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12313,7 +12313,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12334,7 +12334,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12355,7 +12355,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12376,7 +12376,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12397,7 +12397,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12418,7 +12418,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12439,7 +12439,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12460,7 +12460,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12481,7 +12481,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12502,7 +12502,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12523,7 +12523,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12544,7 +12544,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12565,7 +12565,7 @@ https://riksdagsmonitor.com/news/2026-02-23-chamber-debates-update-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12586,7 +12586,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12607,7 +12607,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12628,7 +12628,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12649,7 +12649,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12670,7 +12670,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12691,7 +12691,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12712,7 +12712,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12733,7 +12733,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12754,7 +12754,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12775,7 +12775,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12796,7 +12796,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12817,7 +12817,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12838,7 +12838,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12859,7 +12859,7 @@ https://riksdagsmonitor.com/news/2026-02-23-climate-accountability-push-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12880,7 +12880,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-en.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12901,7 +12901,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-ar.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12922,7 +12922,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-da.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12943,7 +12943,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-de.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12964,7 +12964,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-es.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -12985,7 +12985,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-fi.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13006,7 +13006,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-fr.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13027,7 +13027,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-he.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13048,7 +13048,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-ja.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13069,7 +13069,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-ko.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13090,7 +13090,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-nl.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13111,7 +13111,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-no.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13132,7 +13132,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-sv.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13153,7 +13153,7 @@ https://riksdagsmonitor.com/news/2026-02-23-evening-analysis-zh.html - 2026-02-23T18:38:58.222Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13174,7 +13174,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13195,7 +13195,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-ar.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13216,7 +13216,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-da.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13237,7 +13237,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-de.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13258,7 +13258,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-es.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13279,7 +13279,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-fi.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13300,7 +13300,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-fr.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13321,7 +13321,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-he.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13342,7 +13342,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-ja.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13363,7 +13363,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-ko.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13384,7 +13384,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-nl.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13405,7 +13405,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-no.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13426,7 +13426,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13447,7 +13447,7 @@ https://riksdagsmonitor.com/news/2026-02-23-opposition-motions-zh.html - 2026-02-23T18:12:09.000Z + 2026-02-23T21:06:11.000Z monthly 0.8 @@ -13468,7 +13468,7 @@ https://riksdagsmonitor.com/news/2026-02-committee-reports-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -13477,7 +13477,7 @@ https://riksdagsmonitor.com/news/2026-02-committee-reports-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -13486,7 +13486,7 @@ https://riksdagsmonitor.com/news/2026-02-government-propositions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -13495,7 +13495,7 @@ https://riksdagsmonitor.com/news/2026-02-government-propositions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -13504,7 +13504,7 @@ https://riksdagsmonitor.com/news/2026-02-opposition-motions-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -13513,7 +13513,7 @@ https://riksdagsmonitor.com/news/2026-02-opposition-motions-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -13522,7 +13522,7 @@ https://riksdagsmonitor.com/news/2026-02-parliament-agenda-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -13531,7 +13531,7 @@ https://riksdagsmonitor.com/news/2026-02-parliament-agenda-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -13540,7 +13540,7 @@ https://riksdagsmonitor.com/news/2026-02-week-ahead-en.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 @@ -13549,7 +13549,7 @@ https://riksdagsmonitor.com/news/2026-02-week-ahead-sv.html - 2026-02-23T18:12:09.000Z + 2026-02-23T18:23:39.000Z monthly 0.8 diff --git a/tests/data-transformers.test.ts b/tests/data-transformers.test.ts index 1ac96cfe..0c99eb48 100644 --- a/tests/data-transformers.test.ts +++ b/tests/data-transformers.test.ts @@ -1034,10 +1034,10 @@ describe('Data Transformers', () => { reports: [{ titel: 'EU-frågor och europa', organ: 'UU', url: 'https://example.com/1', dok_id: 'UU1' }] } as MockArticlePayload, 'committee-reports', 'en') as string; - // Should only appear once, not duplicated - const matches = content.match(/EU and foreign affairs/g); - expect(matches).not.toBeNull(); - expect(matches!.length).toBe(1); + // Domain must appear (it IS detected) — may appear in multiple analytical sections + // but must never be listed twice in a single domain string (deduplication check) + expect(content).toMatch(/EU and foreign affairs/); + expect(content).not.toContain('EU and foreign affairs, EU and foreign affairs'); }); it('should produce generic significance for unknown domains', () => { @@ -1057,6 +1057,275 @@ describe('Data Transformers', () => { }); }); + describe('Domain-specific policy analysis (getDomainSpecificAnalysis)', () => { + it('should include substantive fiscal committee report analysis — not just generic boilerplate', () => { + const content = generateArticleContent({ + reports: [{ titel: 'Skattereform', organ: 'FiU', url: 'https://example.com/1', dok_id: 'FiU1' }] + } as MockArticlePayload, 'committee-reports', 'en') as string; + + // New domain-specific sentence should mention Finance Committee or fiscal framework + expect(content).toMatch(/Finance Committee|fiscal surplus rule|budgetary/i); + }); + + it('should include substantive defence motion analysis', () => { + const content = generateArticleContent({ + motions: [{ titel: 'Försvarspolitik', parti: 'M', url: 'https://example.com/1', dok_id: 'M1' }] + } as MockArticlePayload, 'motions', 'en') as string; + + // New domain-specific sentence should mention NATO or security commitments + expect(content).toMatch(/NATO|security commitments|strategic/i); + }); + + it('should include substantive climate committee report analysis', () => { + const content = generateArticleContent({ + reports: [{ titel: 'Klimatpolitik', organ: 'MJU', url: 'https://example.com/1', dok_id: 'MJU1' }] + } as MockArticlePayload, 'committee-reports', 'en') as string; + + // New domain-specific sentence should mention decarbonisation or climate ambition + expect(content).toMatch(/decarboni|climate ambition|Environment.*Committee|legislative baseline/i); + }); + + it('should include substantive healthcare committee report analysis', () => { + const content = generateArticleContent({ + reports: [{ titel: 'Hälso- och sjukvård', organ: 'SoU', url: 'https://example.com/1', dok_id: 'SoU1' }] + } as MockArticlePayload, 'committee-reports', 'en') as string; + + // New domain-specific sentence should mention regional councils or health system + expect(content).toMatch(/regional|Social Affairs Committee|health system/i); + }); + + it('should not contain old generic implication "signals a policy position"', () => { + const content = generateArticleContent({ + motions: [{ titel: 'Skattefrågor', parti: 'S', url: 'https://example.com/1', dok_id: 'S1' }] + } as MockArticlePayload, 'motions', 'en') as string; + + // Old boilerplate should be gone + expect(content).not.toContain('This motion signals a policy position; passage requires government or majority support.'); + }); + + it('should use mot-specific analysis even when doktyp field is absent from motion doc', () => { + // No doktyp field — generateMotionsContent injects implied 'mot' type + const content = generateArticleContent({ + motions: [{ titel: 'Klimatpolitik', parti: 'MP', url: 'https://example.com/1', dok_id: 'M1' }] + } as MockArticlePayload, 'motions', 'en') as string; + + // mot-specific text: "growing parliamentary pressure for faster decarbonisation" + expect(content).toContain('decarbonisation'); + // NOT the default proposition fallback "navigate competing interests" + expect(content).not.toContain('navigate competing interests from industry'); + }); + + it('should use bet-specific analysis even when doktyp field is absent from report doc', () => { + // No doktyp field — generateCommitteeContent injects implied 'bet' type + const content = generateArticleContent({ + reports: [{ titel: 'Klimatpolitik', organ: 'MJU', url: 'https://example.com/1', dok_id: 'R1' }] + } as MockArticlePayload, 'committee-reports', 'en') as string; + + // bet-specific text: "legislative baseline" + expect(content).toContain('legislative baseline'); + // NOT the climate-mot text ("decarbonisation") + expect(content).not.toContain('decarbonisation'); + }); + + it('should not include redundant "Committee review" procedural sentence in policySignificanceTouches', () => { + const content = generateArticleContent({ + motions: [{ titel: 'Skattefrågor', parti: 'S', url: 'https://example.com/1', dok_id: 'M1' }] + } as MockArticlePayload, 'motions', 'en') as string; + + // The policySignificanceTouches label no longer appends the procedural sentence + expect(content).not.toContain('Committee review and potential chamber vote will determine the proposal\'s fate.'); + }); + + it('should detect "förnybartdirektivet" as environmental/climate policy', () => { + const content = generateArticleContent({ + motions: [{ titel: 'Tillståndsprövning enligt förnybartdirektivet', parti: 'S', url: 'https://example.com/1', dok_id: 'M1' }] + } as MockArticlePayload, 'motions', 'en') as string; + + expect(content).toContain('environmental and climate policy'); + expect(content).toContain('decarbonisation'); + }); + + it('should detect "makrotillsyn" as fiscal policy', () => { + const content = generateArticleContent({ + motions: [{ titel: 'Utveckling av makrotillsynsområdet', parti: 'S', url: 'https://example.com/1', dok_id: 'M1' }] + } as MockArticlePayload, 'motions', 'en') as string; + + expect(content).toContain('fiscal policy'); + }); + + it('should detect "bostadsrätt" and "lagfart" as housing policy', () => { + const content = generateArticleContent({ + motions: [{ titel: 'Identitetskrav vid lagfart och åtgärder mot kringgåenden av bostadsrättslagen', parti: 'V', url: 'https://example.com/1', dok_id: 'M1' }] + } as MockArticlePayload, 'motions', 'en') as string; + + expect(content).toContain('housing policy'); + expect(content).toContain('Housing motions reflect structural tension'); + }); + + it('should produce Swedish domain-specific analysis for sv language', () => { + const content = generateArticleContent({ + motions: [{ titel: 'Försvarspolitik', parti: 'M', url: 'https://example.com/1', dok_id: 'M1' }] + } as MockArticlePayload, 'motions', 'sv') as string; + + // Should contain Swedish domain-specific text about NATO + expect(content).toMatch(/NATO|säkerhetsåtaganden|strategisk/i); + }); + }); + + describe('Thematic grouping in motions content', () => { + it('should group motions by policy theme when multiple domains detected', () => { + const content = generateArticleContent({ + motions: [ + { titel: 'Skattefrågor och budget', parti: 'S', url: 'https://example.com/1', dok_id: 'M1' }, + { titel: 'Försvarspolitik och NATO', parti: 'M', url: 'https://example.com/2', dok_id: 'M2' } + ] + } as MockArticlePayload, 'motions', 'en') as string; + + // Thematic Analysis section should appear when multiple domains exist + expect(content).toContain('Thematic Analysis'); + }); + + it('should render thematic section headings for each policy domain', () => { + const content = generateArticleContent({ + motions: [ + { titel: 'Skattefrågor', parti: 'S', url: 'https://example.com/1', dok_id: 'M1' }, + { titel: 'Klimat och miljö', parti: 'MP', url: 'https://example.com/2', dok_id: 'M2' } + ] + } as MockArticlePayload, 'motions', 'en') as string; + + expect(content).toContain('fiscal policy'); + expect(content).toContain('environmental and climate policy'); + }); + + it('should not render Thematic Analysis section when all motions share one domain', () => { + const content = generateArticleContent({ + motions: [ + { titel: 'Skattefrågor del 1', parti: 'S', url: 'https://example.com/1', dok_id: 'M1' }, + { titel: 'Skattefrågor del 2', parti: 'M', url: 'https://example.com/2', dok_id: 'M2' } + ] + } as MockArticlePayload, 'motions', 'en') as string; + + // Single theme = flat list, no Thematic Analysis heading + expect(content).not.toContain('Thematic Analysis'); + }); + }); + + describe('Opposition strategy per-party analysis', () => { + it('should name the most active party in opposition strategy section', () => { + const content = generateArticleContent({ + motions: [ + { titel: 'Skattefrågor', parti: 'S', url: 'https://example.com/1', dok_id: 'M1' }, + { titel: 'Bostadspolitik', parti: 'S', url: 'https://example.com/2', dok_id: 'M2' }, + { titel: 'Försvarspolitik', parti: 'M', url: 'https://example.com/3', dok_id: 'M3' } + ] + } as MockArticlePayload, 'motions', 'en') as string; + + // S is most active with 2 motions + expect(content).toContain('S'); + expect(content).toContain('leads opposition activity'); + }); + + it('should mention the second most active party', () => { + const content = generateArticleContent({ + motions: [ + { titel: 'Skattefrågor', parti: 'S', url: 'https://example.com/1', dok_id: 'M1' }, + { titel: 'Bostadspolitik', parti: 'S', url: 'https://example.com/2', dok_id: 'M2' }, + { titel: 'Försvarspolitik', parti: 'M', url: 'https://example.com/3', dok_id: 'M3' } + ] + } as MockArticlePayload, 'motions', 'en') as string; + + // M follows with 1 motion + expect(content).toContain('M follows with'); + }); + }); + + describe('Government priority analysis in propositions', () => { + it('should include government priority signal when multiple propositions share a committee', () => { + const content = generateArticleContent({ + propositions: [ + { titel: 'Budget 2026', organ: 'FiU', url: 'https://example.com/p1', dok_id: 'P1' }, + { titel: 'Skattepolitik', organ: 'FiU', url: 'https://example.com/p2', dok_id: 'P2' }, + { titel: 'Miljölag', organ: 'MJU', url: 'https://example.com/p3', dok_id: 'P3' } + ] + } as MockArticlePayload, 'propositions', 'en') as string; + + // Should mention FiU receives the most (2) propositions + expect(content).toMatch(/Finance Committee.*2|2.*Finance Committee/); + expect(content).toContain('government priority'); + }); + + it('domainCount reflects actual policy domains, not committee count', () => { + // 3 propositions, all sent to FiU (1 committee) but touching 2 distinct domains + const content = generateArticleContent({ + propositions: [ + { titel: 'Klimatlag miljö', organ: 'FiU', url: 'https://example.com/p1', dok_id: 'P1' }, + { titel: 'Försvarsbudget militär', organ: 'FiU', url: 'https://example.com/p2', dok_id: 'P2' }, + { titel: 'Extra budgetanslag', organ: 'FiU', url: 'https://example.com/p3', dok_id: 'P3' } + ] + } as MockArticlePayload, 'propositions', 'en') as string; + + // Committee count is 1 (all FiU) but domain count should be > 1 (climate + defence + fiscal) + // The text must NOT say "1 policy domain" when multiple domains are detected + expect(content).not.toMatch(/touch on 1 policy domain[^s]/); + }); + }); + + describe('Cross-committee analysis in committee reports', () => { + it('should include cross-committee domain analysis in key takeaways', () => { + const content = generateArticleContent({ + reports: [ + { titel: 'Skattereform', organ: 'FiU', url: 'https://example.com/1', dok_id: 'FiU1' }, + { titel: 'Försvarspolitik', organ: 'FöU', url: 'https://example.com/2', dok_id: 'FöU1' } + ] + } as MockArticlePayload, 'committee-reports', 'en') as string; + + // Cross-committee analysis should identify domains spanning committees + expect(content).toMatch(/cross-committee|broad legislative|multi-front/i); + }); + + it('should list detected policy domains in the cross-committee analysis', () => { + const content = generateArticleContent({ + reports: [ + { titel: 'Klimat och miljö', organ: 'MJU', url: 'https://example.com/1', dok_id: 'MJU1' } + ] + } as MockArticlePayload, 'committee-reports', 'en') as string; + + // The cross-committee section should name detected domains + expect(content).toContain('environmental and climate policy'); + }); + }); + + describe('generateDeepPolicyAnalysis with fullText enrichment', () => { + it('falls back to domain-specific policy significance when no fullText is available', () => { + // When only summary/notis are present (no fullText), deepPolicyAnalysis falls back + // to generatePolicySignificance — the summary is already shown in the line above + const content = generateArticleContent({ + reports: [{ + titel: 'Skattereform', + organ: 'FiU', + url: 'https://example.com/1', + dok_id: 'FiU1' + } as unknown as { titel: string; organ: string; url: string; dok_id: string }] + } as MockArticlePayload, 'committee-reports', 'en') as string; + + // Fallback: domain-specific analysis is still present + expect(content).toMatch(/Finance Committee|fiscal surplus rule|fiscal policy/i); + }); + + it('should NOT add extra data-translate span when summary is already shown above', () => { + const content = generateArticleContent({ + reports: [{ titel: 'Test', summary: 'Förslaget innebär att', url: '#', organ: 'SoU' }] + } as MockArticlePayload, 'committee-reports', 'sv') as string; + + // Exactly 2: one for title, one for summary — deepPolicyAnalysis uses only fullText, + // so summary/notis are NOT re-wrapped, avoiding a third span. + // Uses lang='sv' because svSpan adds data-translate="true" only for Swedish articles. + const matches = content.match(/data-translate="true"/g); + expect(matches).not.toBeNull(); + expect(matches!.length).toBe(2); + }); + }); + describe('URL sanitization in generated content', () => { it('should reject javascript: URLs in report links', () => { const content = generateArticleContent({ @@ -1125,7 +1394,7 @@ describe('Data Transformers', () => { 'committeeCountContext', 'committeeActivityTakeaway', 'committeeMomentumTakeaway', 'oppositionStrategyContext', 'policyImplicationsContext', 'genericOverview', 'partyMotionsFiled', 'otherCommittee', 'otherDocuments', - 'policySignificanceTouches', 'policySignificanceGeneric', + 'policySignificanceTouches', 'policySignificanceGeneric', 'generalMatters', 'politicalContext', 'policyImplications', 'keyTakeaways', 'thematicAnalysis', 'legislativePipeline', 'oppositionStrategy', 'coalitionDynamics', 'whatThisMeans', 'whyItMatters', 'committeeBreakdown', 'propsBreakdown', @@ -1157,6 +1426,258 @@ describe('Data Transformers', () => { expect(typeof CONTENT_LABELS.en.policySignificanceGeneric).toBe('string'); expect(CONTENT_LABELS.en.policySignificanceGeneric).toContain('committee review'); }); + + it('should have localized generalMatters for sv (not English)', () => { + expect(CONTENT_LABELS.sv.generalMatters).toBe('Övriga frågor'); + expect(CONTENT_LABELS.sv.generalMatters).not.toBe('General matters'); + }); + + it('should use localized generalMatters as fallback theme in motions thematic grouping', () => { + // One detectable domain (försvar) + one undetectable → 2 themes → thematic section shown + const svContent = generateArticleContent({ + motions: [ + { titel: 'Försvarspolitik och NATO', parti: 'M', url: 'https://example.com/1', dok_id: 'M1' }, + { titel: 'Med anledning av misc policy', parti: 'S', url: 'https://example.com/2', dok_id: 'M2' } + ] + } as MockArticlePayload, 'motions', 'sv') as string; + + // Swedish fallback should be "Övriga frågor", not the English "General matters" + expect(svContent).toContain('Övriga frågor'); + expect(svContent).not.toContain('>General matters<'); + }); + + it('should collect domain labels (not full analysis sentences) in generic content policy context', () => { + const content = generateArticleContent({ + documents: [ + { titel: 'Skattefrågor', doktyp: 'mot', url: 'https://example.com/1', dok_id: 'D1' }, + { titel: 'Försvarspolitik', doktyp: 'bet', url: 'https://example.com/2', dok_id: 'D2' } + ] + } as MockArticlePayload, 'weekly-review', 'en') as string; + + // Should show domain labels, not full multi-sentence analysis + if (content.includes('Policy context')) { + const policyLine = content.split('\n').find(l => l.includes('Policy context')); + if (policyLine) { + // Each domain-label entry should be short — not contain full analysis sentences + expect(policyLine).not.toContain('Fiscal policy motions directly challenge'); + expect(policyLine).not.toContain('signals opposition readiness'); + } + } + }); + }); +}); + +describe('generateContentTitle', () => { + /** Minimal RawDocument shapes that carry Swedish keyword content */ + const klimatDoc = { titel: 'Förslag om klimatanpassning och utsläppshandel', rubrik: '' }; + const försvarDoc = { titel: 'Proposition om försvarsutgifter och NATO-samarbete', rubrik: '' }; + const bostadDoc = { titel: 'Motion om bostadsmark och byggande i städerna', rubrik: '' }; + const ekonomiDoc = { titel: 'Budgetproposition med skatteändringar och ekonomi', rubrik: '' }; + + it('returns null when fewer than 2 domains are detected', () => { + const result = generateContentTitle([], 'en', 'motions'); + expect(result).toBeNull(); + }); + + it('returns null for documents without Swedish keyword matches', () => { + const docs = [{ titel: 'Unknown parliamentary document', rubrik: '' }]; + const result = generateContentTitle(docs, 'en', 'motions'); + expect(result).toBeNull(); + }); + + describe('motions', () => { + it('builds an English content title from 2 domains', () => { + const result = generateContentTitle([klimatDoc, försvarDoc], 'en', 'motions'); + expect(result).not.toBeNull(); + expect(result!.title).toContain('Opposition'); + expect(result!.title).not.toBe('Opposition Motions: Battle Lines This Week'); + }); + + it('title contains both detected domain names', () => { + const result = generateContentTitle([klimatDoc, försvarDoc], 'en', 'motions'); + expect(result!.title).toContain('Environment'); + expect(result!.title).toContain('Defense'); + }); + + it('subtitle includes document count', () => { + const docs = [klimatDoc, försvarDoc, bostadDoc]; + const result = generateContentTitle(docs, 'en', 'motions'); + expect(result!.subtitle).toContain('3'); + }); + + it('produces a Swedish (sv) title', () => { + const result = generateContentTitle([klimatDoc, försvarDoc], 'sv', 'motions'); + expect(result!.title).toContain('Oppositionen'); + expect(result!.title).toContain('Miljö'); + expect(result!.title).toContain('Försvar'); + }); + + it('falls back to English template for unknown language code', () => { + const result = generateContentTitle([klimatDoc, försvarDoc], 'xx', 'motions'); + expect(result!.title).toContain('Opposition'); + }); + }); + + describe('propositions', () => { + it('builds an English content title', () => { + const result = generateContentTitle([ekonomiDoc, bostadDoc], 'en', 'propositions'); + expect(result).not.toBeNull(); + expect(result!.title).toContain('Government'); + expect(result!.title).toContain('Economy'); + expect(result!.title).toContain('Housing'); + }); + + it('produces a Swedish (sv) title', () => { + const result = generateContentTitle([ekonomiDoc, bostadDoc], 'sv', 'propositions'); + expect(result!.title).toContain('Regeringen'); + expect(result!.title).toContain('Ekonomi'); + expect(result!.title).toContain('Bostäder'); + }); + }); + + describe('committee-reports', () => { + it('builds an English content title', () => { + const result = generateContentTitle([klimatDoc, ekonomiDoc], 'en', 'committee-reports'); + expect(result).not.toBeNull(); + expect(result!.title).toContain('Committees'); + expect(result!.title).toContain('Environment'); + expect(result!.title).toContain('Economy'); + }); + + it('produces a Swedish (sv) title', () => { + const result = generateContentTitle([klimatDoc, ekonomiDoc], 'sv', 'committee-reports'); + expect(result!.title).toContain('Utskotten'); + expect(result!.title).toContain('Miljö'); + expect(result!.title).toContain('Ekonomi'); + }); + }); + + describe('domain frequency ranking', () => { + it('picks the most frequent domain first', () => { + const docs = [klimatDoc, klimatDoc, ekonomiDoc]; + const result = generateContentTitle(docs, 'en', 'motions'); + // environment appears twice, economy once — environment should be d1 (earlier in title) + expect(result).not.toBeNull(); + const title = result!.title; + const envIdx = title.indexOf('Environment'); + const ecoIdx = title.indexOf('Economy'); + expect(envIdx).toBeGreaterThanOrEqual(0); + expect(ecoIdx).toBeGreaterThanOrEqual(0); + expect(envIdx).toBeLessThan(ecoIdx); + }); + }); + + describe('14-language coverage', () => { + const langs = ['en', 'sv', 'da', 'no', 'fi', 'de', 'fr', 'es', 'nl', 'ar', 'he', 'ja', 'ko', 'zh'] as const; + for (const lang of langs) { + it(`returns a non-null result for lang="${lang}"`, () => { + const result = generateContentTitle([klimatDoc, ekonomiDoc], lang, 'motions'); + expect(result).not.toBeNull(); + expect(result!.title.length).toBeGreaterThan(0); + expect(result!.subtitle.length).toBeGreaterThan(0); + }); + } + }); +}); + +describe('generateMotionsContent author/party sentinel fix (#454)', () => { + it('falls back to parseMotionAuthorParty when intressent_namn is Unknown sentinel', () => { + const content = generateArticleContent({ + motions: [{ + titel: 'Motion till riksdagen 2025/26:123 av Anna Andersson (M) om skattelättnad', + intressent_namn: 'Unknown', + parti: 'Unknown', + url: '#', + dok_id: 'MOT123', + }] + } as MockArticlePayload, 'motions', 'en') as string; + expect(content).toContain('Anna Andersson'); + expect(content).toContain('(M)'); + expect(content).not.toContain('Unknown (Unknown)'); + }); + + it('keeps real author name when intressent_namn is not a sentinel', () => { + const content = generateArticleContent({ + motions: [{ + titel: 'Test motion', + intressent_namn: 'Lars Pettersson', + parti: 'S', + url: '#', + dok_id: 'MOT999', + }] + } as MockArticlePayload, 'motions', 'en') as string; + expect(content).toContain('Lars Pettersson'); + expect(content).toContain('(S)'); + }); +}); + +describe('groupMotionsByProposition (#462) / thematic grouping (#460)', () => { + it('groups same-domain motions under a single thematic heading', () => { + const content = generateArticleContent({ + motions: [ + { + titel: 'med anledning av prop. 2025/26:118 Tillståndsprövning enligt förnybartdirektivet', + intressent_namn: 'Anna Björk', + parti: 'M', + url: '#', + dok_id: 'MOT_A', + }, + { + titel: 'med anledning av prop. 2025/26:118 Tillståndsprövning enligt förnybartdirektivet', + intressent_namn: 'Lars Svensson', + parti: 'SD', + url: '#', + dok_id: 'MOT_B', + }, + ] + } as MockArticlePayload, 'motions', 'en') as string; + // Both motions share climate/energy domain — they render in a flat list (themeCount=1), + // no separate "Thematic Analysis" section header needed for a single theme. + // Both motion entries should be present. + expect(content).toContain('MOT_A'); + expect(content).toContain('MOT_B'); + // No old proposition-based grouping headers + expect(content).not.toContain('Responses to Government Propositions'); + }); + + it('groups motions by policy theme across different domains', () => { + const content = generateArticleContent({ + motions: [ + { + titel: 'med anledning av prop. 2025/26:50 Bostadsfrågor', + intressent_namn: 'Maja Berg', + parti: 'C', + url: '#', + dok_id: 'MOT_PROP', + }, + { + titel: 'Fristående motion om transportpolitik', + intressent_namn: 'Erik Holm', + parti: 'V', + url: '#', + dok_id: 'MOT_IND', + }, + ] + } as MockArticlePayload, 'motions', 'en') as string; + // Thematic grouping should be used — no old flat-list headings + expect(content).not.toContain('Responses to Government Propositions'); + expect(content).not.toContain('Independent Motions'); + // Both motion entries should still be present + expect(content).toContain('MOT_PROP'); + expect(content).toContain('MOT_IND'); + }); + + it('renders all motions without old proposition-grouping header when none reference a proposition', () => { + const content = generateArticleContent({ + motions: [ + { titel: 'Om utbildningspolitik', intressent_namn: 'Per Nord', parti: 'KD', url: '#', dok_id: 'M1' }, + { titel: 'Om sjukvård', intressent_namn: 'Gun Öst', parti: 'MP', url: '#', dok_id: 'M2' }, + ] + } as MockArticlePayload, 'motions', 'en') as string; + expect(content).not.toContain('Responses to Government Propositions'); + expect(content).not.toContain('Independent Motions'); + expect(content).toContain('M1'); + expect(content).toContain('M2'); }); }); @@ -1305,7 +1826,7 @@ describe('generateMotionsContent author/party sentinel fix (#454)', () => { }); describe('groupMotionsByProposition (#462)', () => { - it('renders a grouped section header for motions referencing the same proposition', () => { + it('renders all motions with same theme in a flat list without a prop section header', () => { const content = generateArticleContent({ motions: [ { @@ -1324,16 +1845,14 @@ describe('groupMotionsByProposition (#462)', () => { }, ] } as MockArticlePayload, 'motions', 'en') as string; - // Should have exactly one section header for the prop (not two h3 with the full prop title) - const propHeaderMatches = content.match(/Prop\. 2025\/26:118/g); - expect(propHeaderMatches).not.toBeNull(); - expect(propHeaderMatches!.length).toBe(1); + // New behavior: thematic grouping — same theme → flat list, no prop section header + expect(content).not.toContain('Responses to Government Propositions'); // Both motion entries should still be present expect(content).toContain('MOT_A'); expect(content).toContain('MOT_B'); }); - it('separates independent motions from proposition-linked motions', () => { + it('renders motions with thematic grouping when multiple policy themes detected', () => { const content = generateArticleContent({ motions: [ { @@ -1352,8 +1871,10 @@ describe('groupMotionsByProposition (#462)', () => { }, ] } as MockArticlePayload, 'motions', 'en') as string; - expect(content).toContain('Responses to Government Propositions'); - expect(content).toContain('Independent Motions'); + // New behavior: thematic grouping replaces proposition-based grouping + expect(content).toContain('Thematic Analysis'); + expect(content).not.toContain('Responses to Government Propositions'); + expect(content).not.toContain('Independent Motions'); expect(content).toContain('MOT_PROP'); expect(content).toContain('MOT_IND'); });