feat(rag): Add DACH legal corpus ingestion (DE/AT/CH laws)

Add 29 new regulations (7 DE + 7 AT + 4 CH + 11 P2/P3) with country
metadata, legal corpus text excerpts, and updated RAG admin UI with
AT/CH type colors and labels. Fix module path in deploy script.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
BreakPilot Dev
2026-02-11 09:24:33 +01:00
parent 9fe0a27a60
commit f927c0c205
13 changed files with 1784 additions and 4 deletions

View File

@@ -0,0 +1,204 @@
"""
Country Metadata for EU/EWR Compliance Coverage.
Provides entry points (DPA URLs, legal portals, languages) for all EU/EWR countries.
DACH countries have full RAG coverage; others have entry-point metadata for system prompt injection.
Usage:
from country_metadata import COUNTRY_METADATA, get_country_context, DACH_COUNTRIES
"""
from typing import Dict, Optional
COUNTRY_METADATA: Dict[str, dict] = {
"EU": {
"country_name": "Europaeische Union",
"language_codes": ["de", "en", "fr"],
"legal_portal": {"name": "EUR-Lex", "url": "https://eur-lex.europa.eu/"},
"dpa": {"name": "European Data Protection Board (EDPB)", "url": "https://edpb.europa.eu/"},
"rag_coverage": "full",
"priority_modules": ["DSI", "VVT", "TOMs", "AGB", "Impressum", "Retention", "DSFA", "AVV", "Cookies"],
},
"DE": {
"country_name": "Deutschland",
"language_codes": ["de"],
"legal_portal": {"name": "Gesetze im Internet", "url": "https://www.gesetze-im-internet.de/"},
"dpa": {"name": "Datenschutzkonferenz (DSK)", "url": "https://www.datenschutzkonferenz-online.de/"},
"rag_coverage": "full",
"priority_modules": ["DSI", "VVT", "TOMs", "AGB", "Impressum", "Retention", "DSFA", "AVV", "Cookies"],
},
"AT": {
"country_name": "Oesterreich",
"language_codes": ["de"],
"legal_portal": {"name": "Rechtsinformationssystem (RIS)", "url": "https://www.ris.bka.gv.at/"},
"dpa": {"name": "Datenschutzbehoerde (DSB)", "url": "https://www.dsb.gv.at/"},
"rag_coverage": "full",
"priority_modules": ["DSI", "VVT", "TOMs", "AGB", "Impressum", "Retention", "DSFA", "AVV", "Cookies"],
},
"CH": {
"country_name": "Schweiz",
"language_codes": ["de", "fr", "it"],
"legal_portal": {"name": "Fedlex", "url": "https://www.fedlex.admin.ch/"},
"dpa": {"name": "EDOEB", "url": "https://www.edoeb.admin.ch/"},
"rag_coverage": "full",
"priority_modules": ["DSI", "VVT", "TOMs", "AGB", "Impressum", "Retention", "DSFA", "AVV", "Cookies"],
},
"FR": {
"country_name": "Frankreich",
"language_codes": ["fr"],
"legal_portal": {"name": "Legifrance", "url": "https://www.legifrance.gouv.fr/"},
"dpa": {"name": "CNIL", "url": "https://www.cnil.fr/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT", "TOMs", "AGB", "Impressum", "Retention"],
},
"IT": {
"country_name": "Italien",
"language_codes": ["it"],
"legal_portal": {"name": "Normattiva", "url": "https://www.normattiva.it/"},
"dpa": {"name": "Garante per la protezione dei dati personali", "url": "https://www.garanteprivacy.it/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT", "TOMs", "AGB", "Impressum", "Retention"],
},
"ES": {
"country_name": "Spanien",
"language_codes": ["es"],
"legal_portal": {"name": "BOE", "url": "https://www.boe.es/"},
"dpa": {"name": "AEPD", "url": "https://www.aepd.es/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT", "TOMs", "AGB", "Impressum", "Retention"],
},
"NL": {
"country_name": "Niederlande",
"language_codes": ["nl"],
"legal_portal": {"name": "Overheid.nl", "url": "https://wetten.overheid.nl/"},
"dpa": {"name": "Autoriteit Persoonsgegevens", "url": "https://www.autoriteitpersoonsgegevens.nl/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT", "TOMs", "AGB", "Impressum", "Retention"],
},
"BE": {
"country_name": "Belgien",
"language_codes": ["fr", "nl", "de"],
"legal_portal": {"name": "eJustice Belgium", "url": "https://www.ejustice.just.fgov.be/"},
"dpa": {"name": "Autorite de protection des donnees (APD)", "url": "https://www.autoriteprotectiondonnees.be/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT", "TOMs", "AGB", "Impressum", "Retention"],
},
"LU": {
"country_name": "Luxemburg",
"language_codes": ["fr", "de"],
"legal_portal": {"name": "Legilux", "url": "https://legilux.public.lu/"},
"dpa": {"name": "CNPD", "url": "https://cnpd.public.lu/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT", "TOMs", "AGB", "Impressum", "Retention"],
},
"IE": {
"country_name": "Irland",
"language_codes": ["en"],
"legal_portal": {"name": "Irish Statute Book", "url": "https://www.irishstatutebook.ie/"},
"dpa": {"name": "Data Protection Commission (DPC)", "url": "https://www.dataprotection.ie/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT", "TOMs", "AGB", "Impressum", "Retention"],
},
"DK": {
"country_name": "Daenemark",
"language_codes": ["da"],
"legal_portal": {"name": "Retsinformation", "url": "https://www.retsinformation.dk/"},
"dpa": {"name": "Datatilsynet", "url": "https://www.datatilsynet.dk/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT", "TOMs"],
},
"SE": {
"country_name": "Schweden",
"language_codes": ["sv"],
"legal_portal": {"name": "Riksdagen", "url": "https://www.riksdagen.se/"},
"dpa": {"name": "IMY (Integritetsskyddsmyndigheten)", "url": "https://www.imy.se/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT", "TOMs"],
},
"FI": {
"country_name": "Finnland",
"language_codes": ["fi", "sv"],
"legal_portal": {"name": "Finlex", "url": "https://www.finlex.fi/"},
"dpa": {"name": "Tietosuojavaltuutetun toimisto", "url": "https://tietosuoja.fi/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT", "TOMs"],
},
"NO": {
"country_name": "Norwegen",
"language_codes": ["no"],
"legal_portal": {"name": "Lovdata", "url": "https://lovdata.no/"},
"dpa": {"name": "Datatilsynet", "url": "https://www.datatilsynet.no/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT", "TOMs"],
},
"IS": {
"country_name": "Island",
"language_codes": ["is"],
"legal_portal": {"name": "Althingi", "url": "https://www.althingi.is/"},
"dpa": {"name": "Personuvernd", "url": "https://www.personuvernd.is/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT"],
},
"LI": {
"country_name": "Liechtenstein",
"language_codes": ["de"],
"legal_portal": {"name": "Gesetze.li", "url": "https://www.gesetze.li/"},
"dpa": {"name": "Datenschutzstelle", "url": "https://www.datenschutzstelle.li/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT", "TOMs"],
},
"UK": {
"country_name": "Vereinigtes Koenigreich",
"language_codes": ["en"],
"legal_portal": {"name": "Legislation.gov.uk", "url": "https://www.legislation.gov.uk/"},
"dpa": {"name": "Information Commissioner's Office (ICO)", "url": "https://ico.org.uk/"},
"rag_coverage": "entry_point",
"priority_modules": ["DSI", "VVT", "TOMs", "AGB", "Impressum", "Retention"],
},
}
DACH_COUNTRIES = {"DE", "AT", "CH"}
def get_country_context(country_code: str) -> Optional[str]:
"""
Generate context string for system prompt injection.
For DACH countries: Full RAG search hint.
For other countries: Entry point with DPA and legal portal URLs.
"""
meta = COUNTRY_METADATA.get(country_code.upper())
if not meta:
return None
lines = [f"Land: {meta['country_name']} ({country_code.upper()})"]
lines.append(f"Sprachen: {', '.join(meta['language_codes'])}")
lines.append(f"Rechtsportal: {meta['legal_portal']['name']}{meta['legal_portal']['url']}")
lines.append(f"Datenschutzbehoerde: {meta['dpa']['name']}{meta['dpa']['url']}")
if meta["rag_coverage"] == "full":
lines.append(f"RAG-Abdeckung: VOLLSTAENDIG — Suche in bp_legal_corpus fuer nationale Gesetze verfuegbar.")
lines.append(f"Compliance-Module: {', '.join(meta['priority_modules'])}")
else:
lines.append(f"RAG-Abdeckung: Einstiegspunkt — Keine nationalen Gesetze im RAG. Verweise auf das Rechtsportal und die Datenschutzbehoerde.")
lines.append(f"Hinweis: Fuer detaillierte rechtliche Informationen zu {meta['country_name']} bitte das Rechtsportal oder die DPA konsultieren.")
return "\n".join(lines)
def get_all_countries_summary() -> str:
"""Generate a summary of all covered countries for overview display."""
lines = ["Laenderabdeckung EU/EWR:"]
lines.append("")
lines.append("VOLLSTAENDIG (DACH):")
for code in sorted(DACH_COUNTRIES):
meta = COUNTRY_METADATA[code]
lines.append(f" {code}: {meta['country_name']} — DPA: {meta['dpa']['name']}")
lines.append("")
lines.append("EINSTIEGSPUNKTE:")
for code, meta in sorted(COUNTRY_METADATA.items()):
if code not in DACH_COUNTRIES and code != "EU":
lines.append(f" {code}: {meta['country_name']} — DPA: {meta['dpa']['name']}")
return "\n".join(lines)

View File

@@ -1,8 +1,9 @@
"""
Legal Corpus Ingestion for UCCA RAG Integration.
Indexes all 19 regulations from the Compliance Hub into Qdrant for
Indexes all regulations from the Compliance Hub into Qdrant for
semantic search during UCCA assessments and explanations.
Includes EU regulations, DACH national laws, and EDPB guidelines.
Collections:
- bp_legal_corpus: All regulation texts (GDPR, AI Act, CRA, BSI, etc.)
@@ -84,7 +85,7 @@ class Regulation:
requirement_count: int = 0
# All 19 regulations from Compliance Hub
# All regulations from Compliance Hub (EU + DACH national laws + guidelines)
REGULATIONS: List[Regulation] = [
Regulation(
code="GDPR",
@@ -323,6 +324,348 @@ REGULATIONS: List[Regulation] = [
celex="32023R1114",
requirement_count=149,
),
# =====================================================================
# DACH National Laws — Deutschland (P1)
# =====================================================================
Regulation(
code="DE_DDG",
name="Digitale-Dienste-Gesetz",
full_name="Digitale-Dienste-Gesetz (DDG)",
regulation_type="de_law",
source_url="https://www.gesetze-im-internet.de/ddg/",
description="Deutsches Umsetzungsgesetz zum DSA. Regelt Impressumspflicht (§5), Informationspflichten fuer digitale Dienste und Cookies.",
requirement_count=30,
),
Regulation(
code="DE_BGB_AGB",
name="BGB AGB-Recht",
full_name="BGB §§305-310, 312-312k — AGB und Fernabsatz",
regulation_type="de_law",
source_url="https://www.gesetze-im-internet.de/bgb/",
description="Deutsches AGB-Recht (§§305-310 BGB) und Fernabsatzrecht (§§312-312k BGB). Klauselverbote, Inhaltskontrolle, Widerrufsrecht, Button-Loesung.",
local_path="DE_BGB_AGB.txt",
requirement_count=40,
),
Regulation(
code="DE_EGBGB",
name="EGBGB Art. 246-248",
full_name="Einfuehrungsgesetz zum BGB — Informationspflichten",
regulation_type="de_law",
source_url="https://www.gesetze-im-internet.de/bgbeg/",
description="Informationspflichten bei Verbrauchervertraegen (Art. 246), Fernabsatz (Art. 246a), E-Commerce (Art. 246c).",
local_path="DE_EGBGB.txt",
requirement_count=20,
),
Regulation(
code="DE_UWG",
name="UWG Deutschland",
full_name="Gesetz gegen den unlauteren Wettbewerb (UWG)",
regulation_type="de_law",
source_url="https://www.gesetze-im-internet.de/uwg_2004/",
description="Unlauterer Wettbewerb: irrefuehrende Werbung, Spam-Verbot, Preisangaben, Online-Marketing-Regeln.",
requirement_count=25,
),
Regulation(
code="DE_HGB_RET",
name="HGB Aufbewahrung",
full_name="HGB §§238-261, 257 — Handelsbuecher und Aufbewahrungsfristen",
regulation_type="de_law",
source_url="https://www.gesetze-im-internet.de/hgb/",
description="Buchfuehrungspflicht, Aufbewahrungsfristen 6/10 Jahre, Anforderungen an elektronische Aufbewahrung.",
local_path="DE_HGB_RET.txt",
requirement_count=15,
),
Regulation(
code="DE_AO_RET",
name="AO Aufbewahrung",
full_name="Abgabenordnung §§140-148 — Steuerliche Aufbewahrungspflichten",
regulation_type="de_law",
source_url="https://www.gesetze-im-internet.de/ao_1977/",
description="Steuerliche Buchfuehrungs- und Aufbewahrungspflichten. 6/10 Jahre Fristen, Datenzugriff durch Finanzbehoerden.",
local_path="DE_AO_RET.txt",
requirement_count=12,
),
Regulation(
code="DE_TKG",
name="TKG 2021",
full_name="Telekommunikationsgesetz 2021",
regulation_type="de_law",
source_url="https://www.gesetze-im-internet.de/tkg_2021/",
description="Telekommunikationsregulierung: Kundenschutz, Datenschutz, Vertragslaufzeiten, Netzinfrastruktur.",
requirement_count=45,
),
# =====================================================================
# DACH National Laws — Oesterreich (P1)
# =====================================================================
Regulation(
code="AT_ECG",
name="E-Commerce-Gesetz AT",
full_name="E-Commerce-Gesetz (ECG) Oesterreich",
regulation_type="at_law",
source_url="https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=20001703",
description="Oesterreichisches E-Commerce-Gesetz: Impressum/Offenlegungspflicht (§5), Informationspflichten, Haftung von Diensteanbietern.",
language="de",
requirement_count=30,
),
Regulation(
code="AT_TKG",
name="TKG 2021 AT",
full_name="Telekommunikationsgesetz 2021 Oesterreich",
regulation_type="at_law",
source_url="https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=20011678",
description="Oesterreichisches TKG: Cookie-Bestimmungen (§165), Kommunikationsgeheimnis, Endgeraetezugriff.",
language="de",
requirement_count=40,
),
Regulation(
code="AT_KSCHG",
name="KSchG Oesterreich",
full_name="Konsumentenschutzgesetz (KSchG) Oesterreich",
regulation_type="at_law",
source_url="https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10002462",
description="Konsumentenschutz: AGB-Kontrolle (§6 Klauselverbote, §9 Verbandsklage), Ruecktrittsrecht, Informationspflichten.",
language="de",
requirement_count=35,
),
Regulation(
code="AT_FAGG",
name="FAGG Oesterreich",
full_name="Fern- und Auswaertsgeschaefte-Gesetz (FAGG) Oesterreich",
regulation_type="at_law",
source_url="https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=20008847",
description="Fernabsatzrecht: Informationspflichten, Widerrufsrecht 14 Tage, Button-Loesung, Ausnahmen.",
language="de",
requirement_count=20,
),
Regulation(
code="AT_UGB_RET",
name="UGB Aufbewahrung AT",
full_name="UGB §§189-216, 212 — Rechnungslegung und Aufbewahrung Oesterreich",
regulation_type="at_law",
source_url="https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10001702",
description="Oesterreichische Rechnungslegungspflicht und Aufbewahrungsfristen (7 Jahre). Buchfuehrung, Jahresabschluss.",
local_path="AT_UGB_RET.txt",
language="de",
requirement_count=15,
),
Regulation(
code="AT_BAO_RET",
name="BAO §132 AT",
full_name="Bundesabgabenordnung §132 — Aufbewahrung Oesterreich",
regulation_type="at_law",
source_url="https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10003940",
description="Steuerliche Aufbewahrungspflicht 7 Jahre fuer Buecher, Aufzeichnungen und Belege. Grundstuecke 22 Jahre.",
language="de",
requirement_count=5,
),
Regulation(
code="AT_MEDIENG",
name="MedienG §§24-25 AT",
full_name="Mediengesetz §§24-25 Oesterreich — Impressum und Offenlegung",
regulation_type="at_law",
source_url="https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10000719",
description="Impressum/Offenlegungspflicht fuer periodische Medien und Websites in Oesterreich.",
language="de",
requirement_count=10,
),
# =====================================================================
# DACH National Laws — Schweiz (P1)
# =====================================================================
Regulation(
code="CH_DSV",
name="DSV Schweiz",
full_name="Datenschutzverordnung (DSV) Schweiz — SR 235.11",
regulation_type="ch_law",
source_url="https://www.fedlex.admin.ch/eli/cc/2022/568/de",
description="Ausfuehrungsverordnung zum revDSG: Meldepflichten, DSFA-Verfahren, Auslandtransfers, technische Massnahmen.",
language="de",
requirement_count=30,
),
Regulation(
code="CH_OR_AGB",
name="OR AGB/Aufbewahrung CH",
full_name="Obligationenrecht — AGB-Kontrolle und Aufbewahrung Schweiz (SR 220)",
regulation_type="ch_law",
source_url="https://www.fedlex.admin.ch/eli/cc/27/317_321_377/de",
description="Art. 8 OR (AGB-Inhaltskontrolle), Art. 19/20 (Vertragsfreiheit), Art. 957-958f (Buchfuehrung, 10 Jahre Aufbewahrung).",
local_path="CH_OR_AGB.txt",
language="de",
requirement_count=20,
),
Regulation(
code="CH_UWG",
name="UWG Schweiz",
full_name="Bundesgesetz gegen den unlauteren Wettbewerb Schweiz (SR 241)",
regulation_type="ch_law",
source_url="https://www.fedlex.admin.ch/eli/cc/1988/223_223_223/de",
description="Lauterkeitsrecht: Impressumspflicht, irrefuehrende Werbung, aggressive Verkaufsmethoden, AGB-Transparenz.",
language="de",
requirement_count=20,
),
Regulation(
code="CH_FMG",
name="FMG Schweiz",
full_name="Fernmeldegesetz Schweiz (SR 784.10)",
regulation_type="ch_law",
source_url="https://www.fedlex.admin.ch/eli/cc/1997/2187_2187_2187/de",
description="Telekommunikationsregulierung: Fernmeldegeheimnis, Cookies/Tracking (Art. 45c), Spam-Verbot, Datenschutz.",
language="de",
requirement_count=25,
),
# =====================================================================
# Deutschland P2
# =====================================================================
Regulation(
code="DE_PANGV",
name="PAngV",
full_name="Preisangabenverordnung (PAngV 2022)",
regulation_type="de_law",
source_url="https://www.gesetze-im-internet.de/pangv_2022/",
description="Preisangaben: Gesamtpreis, Grundpreis, Streichpreise (§11), Online-Preisauszeichnung.",
requirement_count=15,
),
Regulation(
code="DE_DLINFOV",
name="DL-InfoV",
full_name="Dienstleistungs-Informationspflichten-Verordnung",
regulation_type="de_law",
source_url="https://www.gesetze-im-internet.de/dlinfov/",
description="Informationspflichten fuer Dienstleister: Identitaet, Kontakt, Berufshaftpflicht, AGB-Zugang.",
requirement_count=10,
),
Regulation(
code="DE_BETRVG",
name="BetrVG §87",
full_name="Betriebsverfassungsgesetz §87 Abs.1 Nr.6",
regulation_type="de_law",
source_url="https://www.gesetze-im-internet.de/betrvg/",
description="Mitbestimmung bei technischer Ueberwachung: Betriebsrat-Beteiligung bei IT-Systemen, die Arbeitnehmerverhalten ueberwachen koennen.",
requirement_count=5,
),
# =====================================================================
# Oesterreich P2
# =====================================================================
Regulation(
code="AT_ABGB_AGB",
name="ABGB AGB-Recht AT",
full_name="ABGB §§861-879, 864a — AGB-Kontrolle Oesterreich",
regulation_type="at_law",
source_url="https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10001622",
description="Geltungskontrolle (§864a), Sittenwidrigkeitskontrolle (§879 Abs.3), allgemeine Vertragsregeln.",
local_path="AT_ABGB_AGB.txt",
language="de",
requirement_count=10,
),
Regulation(
code="AT_UWG",
name="UWG Oesterreich",
full_name="Bundesgesetz gegen den unlauteren Wettbewerb Oesterreich",
regulation_type="at_law",
source_url="https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10002665",
description="Lauterkeitsrecht AT: irrefuehrende Geschaeftspraktiken, aggressive Praktiken, Preisauszeichnung.",
language="de",
requirement_count=15,
),
# =====================================================================
# Schweiz P2
# =====================================================================
Regulation(
code="CH_GEBUV",
name="GeBuV Schweiz",
full_name="Geschaeftsbuecher-Verordnung Schweiz (SR 221.431)",
regulation_type="ch_law",
source_url="https://www.fedlex.admin.ch/eli/cc/2002/468_468_468/de",
description="Ausfuehrungsvorschriften zur Buchfuehrung: elektronische Aufbewahrung, Integritaet, Datentraeger.",
language="de",
requirement_count=10,
),
Regulation(
code="CH_ZERTES",
name="ZertES Schweiz",
full_name="Bundesgesetz ueber die elektronische Signatur (SR 943.03)",
regulation_type="ch_law",
source_url="https://www.fedlex.admin.ch/eli/cc/2016/752/de",
description="Elektronische Signatur und Zertifizierung: Qualifizierte Signaturen, Zertifizierungsdiensteanbieter.",
language="de",
requirement_count=10,
),
# =====================================================================
# Deutschland P3
# =====================================================================
Regulation(
code="DE_GESCHGEHG",
name="GeschGehG",
full_name="Gesetz zum Schutz von Geschaeftsgeheimnissen",
regulation_type="de_law",
source_url="https://www.gesetze-im-internet.de/geschgehg/",
description="Schutz von Geschaeftsgeheimnissen: Definition, angemessene Geheimhaltungsmassnahmen, Reverse Engineering.",
requirement_count=10,
),
Regulation(
code="DE_BSIG",
name="BSI-Gesetz",
full_name="Gesetz ueber das Bundesamt fuer Sicherheit in der Informationstechnik (BSIG)",
regulation_type="de_law",
source_url="https://www.gesetze-im-internet.de/bsig_2009/",
description="BSI-Aufgaben, KRITIS-Meldepflichten, IT-Sicherheitsstandards, Zertifizierung.",
requirement_count=20,
),
Regulation(
code="DE_USTG_RET",
name="UStG §14b",
full_name="Umsatzsteuergesetz §14b — Aufbewahrung von Rechnungen",
regulation_type="de_law",
source_url="https://www.gesetze-im-internet.de/ustg_1980/",
description="Aufbewahrungspflicht fuer Rechnungen: 10 Jahre, Grundstuecke 20 Jahre, elektronische Aufbewahrung.",
local_path="DE_USTG_RET.txt",
requirement_count=5,
),
# =====================================================================
# Schweiz P3
# =====================================================================
Regulation(
code="CH_ZGB_PERS",
name="ZGB Persoenlichkeitsschutz CH",
full_name="Zivilgesetzbuch Art. 28-28l — Persoenlichkeitsschutz Schweiz (SR 210)",
regulation_type="ch_law",
source_url="https://www.fedlex.admin.ch/eli/cc/24/233_245_233/de",
description="Persoenlichkeitsschutz: Recht am eigenen Bild, Schutz der Privatsphaere, Gegendarstellungsrecht.",
language="de",
requirement_count=8,
),
# =====================================================================
# 3 fehlgeschlagene Quellen mit alternativen URLs nachholen
# =====================================================================
Regulation(
code="LU_DPA_LAW",
name="Datenschutzgesetz Luxemburg",
full_name="Loi du 1er aout 2018 — Datenschutzgesetz Luxemburg",
regulation_type="national_law",
source_url="https://legilux.public.lu/eli/etat/leg/loi/2018/08/01/a686/jo",
description="Luxemburgisches Datenschutzgesetz: Organisation der CNPD, nationale DSGVO-Ergaenzung.",
language="fr",
requirement_count=40,
),
Regulation(
code="DK_DATABESKYTTELSESLOVEN",
name="Databeskyttelsesloven DK",
full_name="Databeskyttelsesloven — Datenschutzgesetz Daenemark",
regulation_type="national_law",
source_url="https://www.retsinformation.dk/eli/lta/2018/502",
description="Daenisches Datenschutzgesetz als ergaenzende Bestimmungen zur DSGVO. Reguliert durch Datatilsynet.",
language="da",
requirement_count=30,
),
Regulation(
code="EDPB_GUIDELINES_1_2022",
name="EDPB GL Bussgelder",
full_name="EDPB Leitlinien 04/2022 zur Berechnung von Bussgeldern nach der DSGVO",
regulation_type="eu_guideline",
source_url="https://www.edpb.europa.eu/system/files/2023-05/edpb_guidelines_042022_calculationofadministrativefines_en.pdf",
description="EDPB-Leitlinien zur Berechnung von Verwaltungsbussgeldern unter der DSGVO.",
language="en",
requirement_count=15,
),
]
@@ -887,7 +1230,7 @@ async def main():
import argparse
parser = argparse.ArgumentParser(description="Legal Corpus Ingestion for UCCA")
parser.add_argument("--ingest-all", action="store_true", help="Ingest all 19 regulations")
parser.add_argument("--ingest-all", action="store_true", help="Ingest all regulations")
parser.add_argument("--ingest", nargs="+", metavar="CODE", help="Ingest specific regulations by code")
parser.add_argument("--status", action="store_true", help="Show collection status")
parser.add_argument("--search", type=str, help="Test search query")
@@ -902,7 +1245,7 @@ async def main():
print(json.dumps(status, indent=2))
elif args.ingest_all:
print("Ingesting all 19 regulations...")
print(f"Ingesting all {len(REGULATIONS)} regulations...")
results = await ingestion.ingest_all()
print("\nResults:")
for code, count in results.items():