Some checks failed
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-school (push) Successful in 42s
CI / test-go-edu-search (push) Successful in 34s
CI / test-python-klausur (push) Failing after 2m51s
CI / test-python-agent-core (push) Successful in 21s
CI / test-nodejs-website (push) Successful in 29s
sed replacement left orphaned hostname references in story page and empty lines in getApiBase functions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
353 lines
13 KiB
TypeScript
353 lines
13 KiB
TypeScript
/**
|
|
* RAG & Legal Corpus Management - Static Data
|
|
*
|
|
* Core data constants: regulations, industries, thematic groups, etc.
|
|
* Source URLs and licenses are in rag-sources.ts.
|
|
*/
|
|
|
|
import { REGULATIONS_IN_RAG } from './rag-constants'
|
|
import ragData from './rag-documents.json'
|
|
import type {
|
|
Regulation,
|
|
Industry,
|
|
ThematicGroup,
|
|
KeyIntersection,
|
|
FutureOutlookItem,
|
|
AdditionalRegulation,
|
|
LegalBasisInfo,
|
|
TabDef,
|
|
} from './types'
|
|
|
|
// Re-export source URLs, licenses and license labels from rag-sources.ts
|
|
export {
|
|
REGULATION_SOURCES,
|
|
REGULATION_LICENSES,
|
|
LICENSE_LABELS,
|
|
} from './rag-sources'
|
|
|
|
// API uses local proxy route to klausur-service
|
|
export const API_PROXY = '/api/legal-corpus'
|
|
export const DSFA_API_PROXY = '/api/dsfa-corpus'
|
|
|
|
// Import documents and metadata from JSON
|
|
export const RAG_DOCUMENTS = ragData.documents
|
|
export const DOC_TYPES = ragData.doc_types
|
|
export const INDUSTRIES_LIST = ragData.industries
|
|
|
|
// Derive REGULATIONS from JSON (backwards compatible for regulations tab)
|
|
export const REGULATIONS: Regulation[] = RAG_DOCUMENTS.filter((d: any) => d.description).map((d: any) => ({
|
|
code: d.code,
|
|
name: d.name,
|
|
fullName: d.full_name || d.name,
|
|
type: d.doc_type,
|
|
expected: 0,
|
|
description: d.description || '',
|
|
relevantFor: [] as string[],
|
|
keyTopics: [] as string[],
|
|
effectiveDate: d.effective_date || ''
|
|
}))
|
|
|
|
// Helper: Check if regulation is in RAG
|
|
export const isInRag = (code: string): boolean => code in REGULATIONS_IN_RAG
|
|
|
|
// Helper: Get known chunk count for a regulation
|
|
export const getKnownChunks = (code: string): number => REGULATIONS_IN_RAG[code]?.chunks || 0
|
|
|
|
// Known collection totals (updated: 2026-03-12)
|
|
export const COLLECTION_TOTALS = {
|
|
bp_compliance_gesetze: 63567,
|
|
bp_compliance_ce: 18183,
|
|
bp_legal_templates: 7689,
|
|
bp_compliance_datenschutz: 17459,
|
|
bp_dsfa_corpus: 8666,
|
|
bp_compliance_recht: 1425,
|
|
bp_nibis_eh: 7996,
|
|
total_legal: 81750,
|
|
total_all: 124985,
|
|
}
|
|
|
|
export const TYPE_COLORS: Record<string, string> = {
|
|
eu_regulation: 'bg-blue-100 text-blue-700',
|
|
eu_directive: 'bg-purple-100 text-purple-700',
|
|
de_law: 'bg-yellow-100 text-yellow-700',
|
|
at_law: 'bg-red-100 text-red-700',
|
|
ch_law: 'bg-rose-100 text-rose-700',
|
|
bsi_standard: 'bg-green-100 text-green-700',
|
|
national_law: 'bg-orange-100 text-orange-700',
|
|
eu_guideline: 'bg-teal-100 text-teal-700',
|
|
}
|
|
|
|
export const TYPE_LABELS: Record<string, string> = {
|
|
eu_regulation: 'EU-VO',
|
|
eu_directive: 'EU-RL',
|
|
de_law: 'DE-Gesetz',
|
|
at_law: 'AT-Gesetz',
|
|
ch_law: 'CH-Gesetz',
|
|
bsi_standard: 'BSI',
|
|
national_law: 'Nat. Gesetz',
|
|
eu_guideline: 'EDPB-GL',
|
|
}
|
|
|
|
// Industries for backward compatibility
|
|
export const INDUSTRIES: Industry[] = INDUSTRIES_LIST.map((ind: any) => ({
|
|
id: ind.id,
|
|
name: ind.name,
|
|
icon: ind.icon,
|
|
description: ''
|
|
}))
|
|
|
|
// Derive industry map from document data
|
|
export const INDUSTRY_REGULATION_MAP: Record<string, string[]> = {}
|
|
for (const ind of INDUSTRIES_LIST) {
|
|
INDUSTRY_REGULATION_MAP[ind.id] = RAG_DOCUMENTS
|
|
.filter((d: any) => d.industries.includes(ind.id) || d.industries.includes('all'))
|
|
.map((d: any) => d.code)
|
|
}
|
|
|
|
// Thematic groupings showing overlaps
|
|
export const THEMATIC_GROUPS: ThematicGroup[] = [
|
|
{
|
|
id: 'datenschutz',
|
|
name: 'Datenschutz & Privacy',
|
|
color: 'bg-blue-500',
|
|
regulations: ['GDPR', 'EPRIVACY', 'TDDDG', 'SCC', 'DPF'],
|
|
description: 'Schutz personenbezogener Daten, Einwilligung, Betroffenenrechte'
|
|
},
|
|
{
|
|
id: 'cybersecurity',
|
|
name: 'Cybersicherheit',
|
|
color: 'bg-red-500',
|
|
regulations: ['NIS2', 'EUCSA', 'CRA', 'BSI-TR-03161-1', 'BSI-TR-03161-2', 'BSI-TR-03161-3', 'DORA'],
|
|
description: 'IT-Sicherheit, Risikomanagement, Incident Response'
|
|
},
|
|
{
|
|
id: 'ai',
|
|
name: 'Kuenstliche Intelligenz',
|
|
color: 'bg-purple-500',
|
|
regulations: ['AIACT', 'PLD', 'GPSR'],
|
|
description: 'KI-Regulierung, Hochrisiko-Systeme, Haftung'
|
|
},
|
|
{
|
|
id: 'digital-markets',
|
|
name: 'Digitale Maerkte & Plattformen',
|
|
color: 'bg-green-500',
|
|
regulations: ['DSA', 'DGA', 'DATAACT', 'DSM'],
|
|
description: 'Plattformregulierung, Datenzugang, Urheberrecht'
|
|
},
|
|
{
|
|
id: 'product-safety',
|
|
name: 'Produktsicherheit & Haftung',
|
|
color: 'bg-orange-500',
|
|
regulations: ['CRA', 'PLD', 'GPSR', 'EAA', 'MACHINERY_REG', 'BLUE_GUIDE'],
|
|
description: 'Sicherheitsanforderungen, CE-Kennzeichnung, Maschinenverordnung, Barrierefreiheit'
|
|
},
|
|
{
|
|
id: 'finance',
|
|
name: 'Finanzmarktregulierung',
|
|
color: 'bg-emerald-500',
|
|
regulations: ['DORA', 'PSD2', 'AMLR', 'MiCA'],
|
|
description: 'Zahlungsdienste, Krypto-Assets, Geldwaeschebekaempfung, digitale Resilienz'
|
|
},
|
|
{
|
|
id: 'health',
|
|
name: 'Gesundheitsdaten',
|
|
color: 'bg-pink-500',
|
|
regulations: ['EHDS', 'BSI-TR-03161-1', 'BSI-TR-03161-2', 'BSI-TR-03161-3'],
|
|
description: 'Gesundheitsdatenraum, DiGA-Sicherheit, Patientenrechte'
|
|
},
|
|
{
|
|
id: 'verbraucherschutz',
|
|
name: 'Verbraucherschutz & E-Commerce',
|
|
color: 'bg-amber-500',
|
|
regulations: ['DE_PANGV', 'DE_VSBG', 'DE_PRODHAFTG', 'DE_UWG', 'DE_BFSG',
|
|
'WARENKAUF_RL', 'KLAUSEL_RL', 'UNLAUTERE_PRAKTIKEN_RL', 'PREISANGABEN_RL',
|
|
'OMNIBUS_RL', 'E_COMMERCE_RL', 'VERBRAUCHERRECHTE_RL', 'DIGITALE_INHALTE_RL'],
|
|
description: 'Widerrufsrecht, Preisangaben, Fernabsatz, AGB-Recht, Barrierefreiheit'
|
|
},
|
|
]
|
|
|
|
// Key overlaps and intersections
|
|
export const KEY_INTERSECTIONS: KeyIntersection[] = [
|
|
{
|
|
regulations: ['GDPR', 'AIACT'],
|
|
topic: 'KI und personenbezogene Daten',
|
|
description: 'Automatisierte Entscheidungen, Profiling, Erklaerbarkeit'
|
|
},
|
|
{
|
|
regulations: ['NIS2', 'CRA'],
|
|
topic: 'Cybersicherheit von Produkten',
|
|
description: 'Sicherheitsanforderungen ueber den gesamten Lebenszyklus'
|
|
},
|
|
{
|
|
regulations: ['AIACT', 'PLD'],
|
|
topic: 'KI-Haftung',
|
|
description: 'Wer haftet, wenn KI Schaeden verursacht?'
|
|
},
|
|
{
|
|
regulations: ['DSA', 'GDPR'],
|
|
topic: 'Plattform-Transparenz',
|
|
description: 'Inhaltsmoderation und Datenschutz'
|
|
},
|
|
{
|
|
regulations: ['DATAACT', 'GDPR'],
|
|
topic: 'Datenzugang vs. Datenschutz',
|
|
description: 'Balance zwischen Datenteilung und Privacy'
|
|
},
|
|
{
|
|
regulations: ['CRA', 'GPSR'],
|
|
topic: 'Digitale Produktsicherheit',
|
|
description: 'Hardware mit Software-Komponenten'
|
|
},
|
|
]
|
|
|
|
// Future outlook - proposed and discussed regulations
|
|
export const FUTURE_OUTLOOK: FutureOutlookItem[] = [
|
|
{
|
|
id: 'digital-omnibus',
|
|
name: 'EU Digital Omnibus',
|
|
status: 'proposed',
|
|
statusLabel: 'Vorgeschlagen Nov 2025',
|
|
expectedDate: '2026/2027',
|
|
description: 'Umfassendes Vereinfachungspaket fuer AI Act, DSGVO und Cybersicherheit. Ziel: 5 Mrd. EUR Einsparung bei Verwaltungskosten.',
|
|
keyChanges: [
|
|
'AI Act: Verschiebung Hochrisiko-Pflichten um bis zu 16 Monate (bis Dez 2027)',
|
|
'AI Act: Vereinfachte Dokumentation fuer KMU und Small Midcaps',
|
|
'AI Act: EU-weite regulatorische Sandbox fuer KI-Tests',
|
|
'DSGVO: Cookie-Banner-Reform - Berechtigtes Interesse statt nur Einwilligung',
|
|
'DSGVO: Automatische Privacy-Signale via Browser statt Pop-ups',
|
|
'Cybersecurity: Single Entry Point fuer Meldepflichten'
|
|
],
|
|
affectedRegulations: ['AIACT', 'GDPR', 'NIS2', 'CRA', 'EUCSA'],
|
|
source: 'https://digital-strategy.ec.europa.eu/en/library/digital-omnibus-ai-regulation-proposal'
|
|
},
|
|
{
|
|
id: 'sustainability-omnibus',
|
|
name: 'EU Nachhaltigkeits-Omnibus',
|
|
status: 'agreed',
|
|
statusLabel: 'Einigung Dez 2025',
|
|
expectedDate: 'Q1 2026',
|
|
description: 'Drastische Reduzierung der Nachhaltigkeits-Berichtspflichten. Anwendungsbereich wird stark eingeschraenkt.',
|
|
keyChanges: [
|
|
'CSRD: Nur noch Unternehmen >1.000 MA und >450 Mio EUR Umsatz berichtspflichtig',
|
|
'CSRD: Betroffene Unternehmen sinken von 50.000 auf ca. 5.000 in der EU',
|
|
'CSRD: Verschiebung Welle 2+3 um 2 Jahre (auf Geschaeftsjahr 2027)',
|
|
'CSDDD: Nur noch Unternehmen >5.000 MA und >1,5 Mrd EUR Umsatz',
|
|
'CSDDD: Sorgfaltspflichten nur noch fuer Tier-1-Lieferanten',
|
|
'CSDDD: Pruefung nur noch alle 5 Jahre statt jaehrlich'
|
|
],
|
|
affectedRegulations: ['CSRD', 'CSDDD', 'EU-Taxonomie'],
|
|
source: 'https://kpmg-law.de/erste-omnibus-verordnung-soll-die-pflichten-der-csddd-csrd-und-eu-taxonomie-lockern/'
|
|
},
|
|
{
|
|
id: 'eprivacy-withdrawal',
|
|
name: 'ePrivacy-Verordnung',
|
|
status: 'withdrawn',
|
|
statusLabel: 'Zurueckgezogen Feb 2025',
|
|
expectedDate: 'Unbekannt',
|
|
description: 'Nach 9 Jahren Verhandlung hat die EU-Kommission den Vorschlag zurueckgezogen. Die ePrivacy-Richtlinie bleibt in Kraft, Cookie-Reform kommt via DSGVO/Digital Omnibus.',
|
|
keyChanges: [
|
|
'Urspruenglicher Vorschlag: Einheitliche EU-Cookie-Regeln',
|
|
'Urspruenglicher Vorschlag: Strikte Tracking-Einwilligung',
|
|
'Status: ePrivacy-Richtlinie + TDDDG bleiben gueltig',
|
|
'Zukunft: Cookie-Reform wird Teil der DSGVO-Aenderungen'
|
|
],
|
|
affectedRegulations: ['EPRIVACY', 'TDDDG', 'GDPR'],
|
|
source: 'https://netzpolitik.org/2025/cookie-banner-und-online-tracking-eu-kommission-beerdigt-plaene-fuer-eprivacy-verordnung/'
|
|
},
|
|
{
|
|
id: 'ai-liability',
|
|
name: 'KI-Haftungsrichtlinie',
|
|
status: 'pending',
|
|
statusLabel: 'In Verhandlung',
|
|
expectedDate: '2026',
|
|
description: 'Ergaenzt den AI Act um zivilrechtliche Haftungsregeln. Erleichtert Geschaedigten die Beweisfuehrung bei KI-Schaeden.',
|
|
keyChanges: [
|
|
'Beweislasterleichterung bei KI-verursachten Schaeden',
|
|
'Offenlegungspflichten fuer KI-Anbieter im Schadensfall',
|
|
'Verknuepfung mit Produkthaftungsrichtlinie'
|
|
],
|
|
affectedRegulations: ['AIACT', 'PLD'],
|
|
source: 'https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:52022PC0496'
|
|
},
|
|
]
|
|
|
|
// Potential future regulations (not yet integrated)
|
|
export const ADDITIONAL_REGULATIONS: AdditionalRegulation[] = [
|
|
{
|
|
code: 'PSD3',
|
|
name: 'Payment Services Directive 3',
|
|
fullName: 'Richtlinie zur dritten Zahlungsdiensterichtlinie (Entwurf)',
|
|
type: 'eu_directive',
|
|
status: 'proposed',
|
|
effectiveDate: 'Voraussichtlich 2026',
|
|
description: 'Modernisierung der Zahlungsdienste-Regulierung. Staerkerer Verbraucherschutz, Open Banking 2.0, Betrugsbekaempfung. Ersetzt dann PSD2.',
|
|
relevantFor: ['Banken', 'Zahlungsdienstleister', 'Fintechs', 'E-Commerce'],
|
|
celex: '52023PC0366',
|
|
priority: 'medium'
|
|
},
|
|
{
|
|
code: 'AMLD6',
|
|
name: 'AML-Richtlinie 6',
|
|
fullName: 'Richtlinie (EU) 2024/1640 - 6. Geldwaescherichtlinie',
|
|
type: 'eu_directive',
|
|
status: 'active',
|
|
effectiveDate: '10. Juli 2027 (Umsetzung)',
|
|
description: 'Ergaenzt die AML-Verordnung. Nationale Umsetzungsvorschriften, strafrechtliche Sanktionen, AMLA-Behoerde.',
|
|
relevantFor: ['Banken', 'Krypto-Anbieter', 'Immobilienmakler', 'Gluecksspielanbieter'],
|
|
celex: '32024L1640',
|
|
priority: 'medium'
|
|
},
|
|
{
|
|
code: 'FIDA',
|
|
name: 'Financial Data Access',
|
|
fullName: 'Verordnung zum Zugang zu Finanzdaten (Entwurf)',
|
|
type: 'eu_regulation',
|
|
status: 'proposed',
|
|
effectiveDate: 'Voraussichtlich 2027',
|
|
description: 'Open Finance Framework - erweitert PSD2-Open-Banking auf Versicherungen, Investitionen, Kredite.',
|
|
relevantFor: ['Banken', 'Versicherungen', 'Fintechs', 'Datenaggregatoren'],
|
|
celex: '52023PC0360',
|
|
priority: 'medium'
|
|
},
|
|
]
|
|
|
|
// Legal basis for using EUR-Lex content
|
|
export const LEGAL_BASIS_INFO: LegalBasisInfo = {
|
|
title: 'Rechtliche Grundlage fuer RAG-Nutzung',
|
|
summary: 'EU-Rechtstexte auf EUR-Lex sind oeffentliche amtliche Dokumente und duerfen frei verwendet werden.',
|
|
details: [
|
|
{
|
|
aspect: 'EUR-Lex Dokumente',
|
|
status: 'Erlaubt',
|
|
explanation: 'Offizielle EU-Gesetzestexte, Richtlinien und Verordnungen sind gemeinfrei (Public Domain) und duerfen frei reproduziert und kommerziell genutzt werden.'
|
|
},
|
|
{
|
|
aspect: 'Text-und-Data-Mining (TDM)',
|
|
status: 'Erlaubt',
|
|
explanation: 'Art. 4 der DSM-Richtlinie (2019/790) erlaubt TDM fuer kommerzielle Zwecke, sofern kein Opt-out des Rechteinhabers vorliegt. Fuer amtliche Texte gilt kein Opt-out.'
|
|
},
|
|
{
|
|
aspect: 'AI Act Anforderungen',
|
|
status: 'Beachten',
|
|
explanation: 'Art. 53 AI Act verlangt von GPAI-Anbietern die Einhaltung des Urheberrechts. Fuer oeffentliche Rechtstexte unproblematisch.'
|
|
},
|
|
{
|
|
aspect: 'BSI-Richtlinien',
|
|
status: 'Erlaubt',
|
|
explanation: 'BSI-Publikationen sind oeffentlich zugaenglich und duerfen fuer Compliance-Zwecke verwendet werden.'
|
|
},
|
|
]
|
|
}
|
|
|
|
// Tab definitions
|
|
export const TABS: TabDef[] = [
|
|
{ id: 'overview', name: 'Uebersicht', icon: '📊' },
|
|
{ id: 'regulations', name: 'Regulierungen', icon: '📜' },
|
|
{ id: 'map', name: 'Landkarte', icon: '🗺️' },
|
|
{ id: 'search', name: 'Suche', icon: '🔍' },
|
|
{ id: 'chunks', name: 'Chunk-Browser', icon: '🧩' },
|
|
{ id: 'data', name: 'Daten', icon: '📁' },
|
|
{ id: 'ingestion', name: 'Ingestion', icon: '⚙️' },
|
|
{ id: 'pipeline', name: 'Pipeline', icon: '🔄' },
|
|
]
|