Metodologie
Pipeline-ul e-Lex — de la legis.md la AKN 3.0 + ELI URI + Schema.org
Context
Sursa primară: legis.md (ARIJ, Min. Justiției). Texte legale RM sunt domeniu public conform Legii 230/2022 art. 8. Sursa canonică legală rămâne Monitorul Oficial.
Bariere existente: HTML/PDF nestructurat, fără URI stabili per act, fără format machine-readable, fără federație. Cloudflare blochează automated access fără browser real.
Țintă: pipeline automat legis.md → AKN 3.0 + ELI URI + Schema.org
reutilizabil pe toate cele ~150 000 acte normative ale RM.
Pipeline (9 etape)
| Etapa | Ce face | Artefact |
|---|---|---|
| acquire | Download HTML+PDF prin nodriver+xvfb (bypass Cloudflare) | data/raw/<doc_id>/<ts>/ |
| normalize | Curăță HTML (widgets, popups, scripts) păstrând semantica (sup/sub/b/tables/footnotes) | data/interim/.../clean.html |
| extract | HTML → IR typed tree (Titlu/Capitol/Section/Articol/Alineat/Litera) prin CUPRINS-driven 3-pass parser | parsed-structure.json |
| crosscheck | 6 verificări (C1–C6): numerotare, integritate text, similarity vs HTML/PDF | validation/crosscheck-final-report.md |
| akn | IR → Akoma Ntoso 3.0 XML cu lxml builder; FRBR + body + tables + transposition + amendments | data/out/<doc_id>/<stem>.xml |
| eli | Generează ELI URI (Work / Expression / Manifestation) + JSON-LD | <stem>.jsonld |
| bundle | Static HTML site (524 pagini) + Schema.org JSON-LD pe fiecare pagină + manifest | data/out/<doc_id>/site/ |
| pillar4 | Sitemap + Atom feed + ELI discovery + robots.txt + Link headers (federație) | aceleași în site/ |
| serve | FastAPI viewer cu content negotiation HTML/AKN/JSON-LD/PDF | http://192.168.0.51:8765 |
Fiecare etapă este idempotentă, are CLI propriu prin click,
și salvează artefactul intermediar pe disc (regula: nu ține în memorie).
7 criterii de calitate (definiția "100%")
- 1. Round-trip HTML. AKN → renderer → text. Diff cu textul HTML normalizat = 0 bytes semnificative.
- 2. Round-trip PDF. Text PDF (PyMuPDF) după normalizare = text AKN. Diff documentat.
- 3. Schema validation. AKN XML trece XSD oficial AKN 3.0 fără warnings.
- 4. ELI URI uniqueness. Fiecare identificator unic în act; expression URI se schimbă cu versiunea.
- 5. Numeric integrity. Counts în IR (titluri/articole/alineate) coincid cu cuprinsul HTML.
- 6. No silent loss. Orice nod HTML necapturat în IR e logat ca orphan cu motivul.
- 7. Reproducibility.
make alldintr-un repo curat dădata/out/identic byte-by-byte.
Pentru release un act trebuie să aibă toate cele 7 criterii green.
Vezi docs/quality-protocol.md pentru detalii.
Decizii arhitecturale-cheie
- CUPRINS-driven parsing (golden source pentru titluri și articole) — reduce eroarea cu 95%
- nodriver + xvfb pentru bypass Cloudflare prin Chromium real
- lxml builder pentru AKN XML (nu Bluebell — incompatibil cu specificul MD)
- Multi-version registry — fiecare versiune = doc_id distinct pe legis.md (250 versiuni descoperite pentru CF)
- Content negotiation prin HTTP Accept (HTML / AKN XML / JSON-LD / PDF)
- Three-tier footnotes:
<authorialNote>/<notes>/<analysis><textualMod>
Toate deciziile arhitecturale sunt documentate în docs/decisions.md
în format ADR (Architecture Decision Records).
Riscuri
- Sursa nestabilă. legis.md se poate schimba/muta. Snapshot-uri pin'ate cu sha256 acoperă parțial.
- "100% vs HTML" ≠ 100% vs lege reală. Reproducem ce dă legis.md. Sursa canonică legală: Monitorul Oficial.
- Versionare CF. 250 consolidări istorice — pilot lucrează doar cu cea curentă (2026-05-01).
- Scaling 150K acte. Storage strategy: Postgres + JSONB + AKN XML + Redis (planificat după pilot).
Documentația tehnică completă: docs/methodology.md, docs/decisions.md,
docs/quality-protocol.md în repo-ul e-Lex.
Registrul ELI (compliance) · API documentation · Statistici corpus