feat(kb): ingest rechtsprechung corpus

This commit is contained in:
2026-09-15 15:27:28 +02:00
parent 1594aa9cbd
commit 5209539ba3
365 changed files with 33112 additions and 51 deletions
+106 -1
View File
@@ -134,4 +134,109 @@ def test_ris_entry(tmp_path, monkeypatch):
assert 'legal_bases: ["TestG"]' in md
assert "## § 1. Geltungsbereich" in md
assert "(1) Dieses Gesetz gilt für alle." in md
assert "ris-nso-06" in md # ID-Zeile im Body
assert "ris-nso-06" in md # ID-Zeile im Body
def _rj_catalog():
return {"source": "rj", "updated": None, "next_seq": 1, "entries": {}}
def _rj_stats():
return {"rj_written": 0, "rj_unparsed": [], "rj_empty": []}
def test_rj_rechtssatz_preserves_court_date_and_norm(tmp_path, monkeypatch):
root = tmp_path / ".rechtsprechung"
source = root / "originale" / "JJR_test.md"
source.parent.mkdir(parents=True)
source.write_text(
"# Rechtssatz\n\n"
"**Gericht:** OGH\n"
"**Entscheidungsdatum:** 15. 7. 1954\n"
"**Geschäftszahl:** 4 Ob 100/54\n"
"**Norm:** AngG § 26 Z 4\n"
"**Rechtssatz:** Ein Austrittsgrund ist unverzüglich geltend zu machen.\n",
encoding="utf-8",
)
monkeypatch.setattr(ing, "RJ_DIR", root)
slug, md = ing.rj_entry(source, _rj_catalog(), _rj_stats())
assert slug == "rj_jjr-test"
assert "id: rj-rjs-001" in md
assert 'chapter: "OGH-Rechtssatz"' in md
assert "stand: 1954-07" in md
assert 'legal_bases: ["AngG § 26 Z 4"]' in md
assert "## Rechtssatz" in md
def test_rj_volltext_splits_long_reasoning_at_paragraphs(tmp_path, monkeypatch):
root = tmp_path / ".rechtsprechung"
source = root / "originale" / "JJT_test.md"
source.parent.mkdir(parents=True)
paragraphs = [f"Absatz {i}: " + "x" * 900 for i in range(5)]
source.write_text(
"# Entscheidung\n\n"
"**Gericht:** OGH\n"
"**Entscheidungsdatum:** 1. 2. 2020\n"
"**Geschäftszahl:** 1 Ob 2/20a\n\n---\n\n"
+ "\n\n".join(paragraphs),
encoding="utf-8",
)
monkeypatch.setattr(ing, "RJ_DIR", root)
_, md = ing.rj_entry(source, _rj_catalog(), _rj_stats())
assert "## Begründung (1)" in md
assert "## Begründung (2)" in md
def test_rj_norm_supports_h2_and_flat_wording(tmp_path, monkeypatch):
root = tmp_path / ".rechtsprechung"
h2_source = root / "gesetze" / "AngG_§15.md"
flat_source = root / "gesetze" / "ABGB_§1435.md"
h2_source.parent.mkdir(parents=True)
h2_source.write_text(
"# Angestelltengesetz\n\n**Kurztitel:** Angestelltengesetz\n"
"**Abkürzung:** AngG\n**§/Artikel/Anlage:** § 15\n\n---\n\n"
"## § 15\n\nWortlaut.\n\n## Zuletzt aktualisiert am\n\n1. 7. 2023\n",
encoding="utf-8",
)
flat_source.write_text(
"# ABGB\n\n**Kurztitel:** ABGB\n**Abkürzung:** ABGB\n"
"**§/Artikel/Anlage:** § 1435\n\n---\n\nDer Wortlaut ohne H2.\n",
encoding="utf-8",
)
monkeypatch.setattr(ing, "RJ_DIR", root)
catalog = _rj_catalog()
_, h2_md = ing.rj_entry(h2_source, catalog, _rj_stats())
_, flat_md = ing.rj_entry(flat_source, catalog, _rj_stats())
assert "stand: 2023-07" in h2_md
assert 'legal_bases: ["AngG § 15"]' in h2_md
assert "## § 15 Wortlaut" in h2_md
assert "stand: 2026-09" in flat_md
assert "stand-abruf" in flat_md
assert "## Normtext" in flat_md
def test_rj_eugh_marks_lexetius_copy_as_nonofficial(tmp_path, monkeypatch):
root = tmp_path / ".rechtsprechung"
source = root / "originale" / "EUGH_C-29-1991.md"
source.parent.mkdir(parents=True)
source.write_text(
"# EuGH C-29/91\n\n"
"**URL:** https://www.lexetius.com/1992,1\n"
"**Offizielle Fassung:** https://eur-lex.europa.eu/example\n\n---\n\n"
"Urteil vom 19. 5. 1992\n\nEntscheidungsgründe.",
encoding="utf-8",
)
monkeypatch.setattr(ing, "RJ_DIR", root)
_, md = ing.rj_entry(source, _rj_catalog(), _rj_stats())
assert 'work: "EuGH Rechtsprechung (Textwiedergabe lexetius, nicht amtlich)"' in md
assert "stand: 1992-05" in md
assert "Textwiedergabe (nicht amtlich): https://www.lexetius.com/1992,1" in md
assert "amtliche Fassung: https://eur-lex.europa.eu/example" in md