# Session-Uebergabe: Strukturelles Chunking + Re-Ingestion **Datum:** 2026-05-02 **Uebergeben von:** Pipeline-Session (01.05 - 02.05.2026) ## Was wurde erledigt | Block | Was | Status | |-------|-----|--------| | **D2** | RAG-Service speichert section/section_title/paragraph/paragraph_num/page in Qdrant | ✅ | | **D3** | Control Generator liest strukturelle Metadaten, page in source_citation | ✅ | | **D4** | BGB § 312k Validierung — Overlap-Bug gefunden + gefixt | ✅ | | **D5** | 430/436 Dokumente re-ingestiert mit neuem Chunking | ✅ | | **HTML-Fix** | HTML-Stripping + Charset-Erkennung (ISO-8859-1) | ✅ | | **pdfplumber** | Als PDF-Backend hinzugefuegt, PDF_EXTRACTION_BACKEND=auto | ✅ | ## Ergebnisse der Re-Ingestion | Dokumenttyp | Section-Rate | Anmerkung | |-------------|-------------|-----------| | **DE Gesetze (TXT)** | **95-100%** | Exzellent | | **HTML (gesetze-im-internet.de)** | **97.6%** | War 0%, nach Fix perfekt | | **EDPB/DSK Leitlinien (PDF)** | **80-98%** | Gut | | **EU-Amtsblatt-PDFs (AI Act, CRA, NIS2, DSGVO)** | **13-35%** | OFFEN — siehe unten | | **Tech-Specs (JSON, MD)** | **0%** | Erwartet, keine §/Artikel | **Gesamt: 69.888 Chunks in 6 Collections, 430 von 436 Dokumenten.** ## Offene Probleme ### 1. EU-Amtsblatt-PDFs (~40 Dokumente, 13-35% Section-Rate) **Ursache:** EU Official Journal PDFs verwenden mehrspaltige Layouts. Sowohl pypdf als auch pdfplumber extrahieren gebrochene Woerter (`"Ar tik el"` statt `"Artikel"`). Kein PDF-Extractor loest das zuverlaessig. **Empfohlene Loesung:** EU-Verordnungen als HTML von EUR-Lex herunterladen statt PDF. EUR-Lex bietet alle Verordnungen als sauberes HTML. Unser HTML-Stripping + Legal Chunker funktioniert perfekt dafuer. **Betroffene Dokumente (Beispiele):** - ai_act_2024_1689.pdf (33%) → HTML von EUR-Lex - cra_2024_2847.pdf (34%) → HTML von EUR-Lex - nis2_2022_2555.pdf (13%) → HTML von EUR-Lex - dsgvo_2016_679.pdf (0%) → HTML von EUR-Lex - amlr_2024_1624.pdf (12%) → HTML von EUR-Lex - Alle Dateien mit `_20XX_XXXX.pdf` Pattern im bp_compliance_ce Collection ### 2. 3 komplett fehlende PDFs Diese wurden NIE erfolgreich in Qdrant gespeichert: - `edpb_controller_processor_07_2020.pdf` — KEINE CHUNKS - `edpb_gl_7_2020.pdf` — KEINE CHUNKS - `edpb_rtbf_05_2019.pdf` — KEINE CHUNKS **Ursache:** Timeout bei Upload (selbst mit 3600s). Die PDFs sind gross und die Embedding-Generierung dauert zu lange. **Loesung:** Manuell aufteilen (Split in Abschnitte) oder als kleinere Teile hochladen. ### 3. 1 korrupte PDF - `dsk_kpnr_3.pdf` — 500 Internal Server Error bei Extraktion ## Commits dieser Session ``` 93099b2 feat(pipeline): structural metadata end-to-end (Blocks D2-D4) ddad58f fix(rag): strip HTML tags before chunking + D5 re-ingestion scripts a459636 fix(rag): HTML charset detection + opening block tag newlines 75dda9a feat(embedding): add pdfplumber backend for multi-column PDF extraction 41183ff fix(docker): set PDF_EXTRACTION_BACKEND to auto (was pymupdf) ``` ## Kritische Dateien | Datei | Aenderung | |-------|-----------| | `embedding-service/main.py` | Overlap-Bug-Fix, pdfplumber-Backend | | `rag-service/api/documents.py` | D2 Payload-Felder + HTML-Erkennung | | `rag-service/html_utils.py` | HTML-Stripping + Charset-Erkennung (NEU) | | `rag-service/embedding_client.py` | ChunkResult Dataclass (D2) | | `control-pipeline/services/rag_client.py` | page-Feld in RAGSearchResult (D3) | | `control-pipeline/services/control_generator.py` | section-Prioritaet + page (D3) | | `control-pipeline/scripts/reingest_d5.py` | Re-Ingestion Script (NEU) | | `control-pipeline/scripts/reingest_d5_config.py` | Config + Helpers (NEU) | | `docker-compose.yml` | PDF_EXTRACTION_BACKEND=auto | ## Naechste Schritte (Block E) ### E1: EU-Verordnungen als HTML von EUR-Lex ersetzen 1. Liste aller EU-Amtsblatt-PDFs mit <50% Section-Rate erstellen 2. EUR-Lex HTML-Versionen herunterladen (CELEX-Nummern sind in den Qdrant-Payloads) 3. Alte PDF-Chunks loeschen, HTML-Versionen hochladen 4. Qualitaetspruefung → erwartete Section-Rate >90% ### E2: 3 fehlende EDPB-PDFs aufteilen + hochladen ### E3: Fehlende Gesetze ingestieren (BGB aktuell, ArbZG, MuSchG, etc.) Siehe Masterplan Block E in `jazzy-snacking-creek.md` ## DB-Stand | Collection | Chunks | Dokumente | |-----------|--------|-----------| | bp_compliance_ce | ~18.000 | ~60 | | bp_compliance_gesetze | ~31.500 | ~98 | | bp_compliance_datenschutz | ~15.000 | ~107 | | bp_dsfa_corpus | ~3.500 | ~30 | | bp_legal_templates | ~2.000 | ~100 | | **Gesamt** | **~70.000** | **~430** | ## Tests ```bash # Embedding-Service (58 Tests) cd embedding-service && python3 -m pytest test_chunking.py test_d4_bgb.py -v # RAG-Service (32 Tests) cd rag-service && PYTHONPATH=. python3 -m pytest tests/ -v # Control-Pipeline (387 Tests) PYTHONPATH=control-pipeline python3 -m pytest control-pipeline/tests/ -v ``` ## Memory-Dateien (lesen!) Alle unter `/Users/benjaminadmin/.claude/projects/-Users-benjaminadmin-Projekte-breakpilot-core/memory/`: - `MEMORY.md` — Index - `project_structural_chunking.md` — Architektur-Entscheidung - `feedback_legal_source_licensing.md` — Rule 1/2/3 - `project_control_pipeline_masterplan.md` — Gesamtplan A-G