feat: law-source-eurlex 0.1.0 (source.eu-recht)
All checks were successful
CI / Linux x86_64 (Forgejo) (push) Successful in 1m45s

Fetch one EU legal act from EUR-Lex by CELEX number and return its
FORMEX-4 XML content-addressed (SHA-256), so a flow's audit trail
pins the exact Gesetzesstand it processed.

- CELLAR content negotiation (application/xml;type=fmx4) on
  publications.europa.eu; 303 multiple-choice item selection
- host-pinned redirect handling (max 3 hops), 64 MB body cap
- consolidated CELEX (0...-YYYYMMDD) yields consolidation_date
- net permission pinned to publications.europa.eu; no auth
- 10 unit tests (no network), wasm32-wasip2 build green

Signed-off-by: flemming-it <sf@flemming.it>
This commit is contained in:
flemming-it 2026-07-17 00:29:06 +02:00
commit 0e768ae6db
16 changed files with 1726 additions and 0 deletions

46
MODULE.de.md Normal file
View file

@ -0,0 +1,46 @@
# source.eu-recht
<!-- chain:io-card:start -->
<!-- Generated by `chain doc` from module.yaml — do not edit by hand. -->
![law-source-eurlex inputs and outputs](law-source-eurlex.io.de.svg)
<!-- chain:io-card:end -->
EU-Rechtsakte per CELEX-Nummer von EUR-Lex holen
## Was es tut
Löst eine CELEX-Nummer auf (z. B. `32016R0679` für die DSGVO oder
konsolidiert `02016R0679-20160504`), ruft den Rechtsakt vom
öffentlichen EUR-Lex-Endpunkt ab und liefert das FORMEX-4-XML plus
einen Metadaten-Datensatz. Die geholten Bytes sind inhaltsadressiert
(SHA-256) — das Prüfprotokoll des Flows hält damit den exakten
Gesetzesstand fest; ein späterer Abruf „derselben" CELEX-Nummer, den
EUR-Lex anders rendert, wird sichtbar statt still.
Ausschließlich öffentliche EUR-Lex-Daten; die Netzwerk-Berechtigung
ist auf `publications.europa.eu` festgelegt (CELLAR, der Speicher des
EU-Amts für Veröffentlichungen hinter EUR-Lex).
## Verwendung
```yaml
steps:
- id: fetch
use: source.eu-recht@^0
with:
celex: "32016R0679"
language: "DE" # optional, Standard DE
- id: normalize
use: text.akoma-normalize@^0 # ab 0.2 mit FORMEX-4-Adapter
with:
content: "{{ fetch.formex }}"
mime: "application/x-formex+xml"
```
Ausgaben: `formex` (Bytes, `application/xml`) und `meta` (JSON mit
`celex`, `language`, `url`, `source_sha256`, `byte_len` sowie
`consolidation_date` bei konsolidierten CELEX-Nummern).
## Lizenz
Apache-2.0 — ein Ch∆In-Plattform-Modul (Flemming.AI).