Prawo UE z oficjalnego repozytorium CELLAR/EUR-Lex
Skill do pracy z prawem Unii Europejskiej — przy każdym pytaniu o prawo UE oraz przy tworzeniu
i analizie umów i pism, gdzie trzeba przywołać przepis unijny, zweryfikować podstawę prawną lub datę
stosowania. Cytowanie przepisów UE z pamięci albo z portali jest zawodne (nowelizacje, sprostowania,
różne daty stosowania) — ten skill sięga do źródła pierwotnego: CELLAR, wspólnego repozytorium
Urzędu Publikacji UE, które zasila EUR-Lex (SPARQL + REST, bez rejestracji i klucza).
Kolejność źródeł (przepis ≠ internet)
- Treść przepisu UE — wyłącznie z EUR-Lex/CELLAR. Nigdy nie cytuj brzmienia z pamięci ani
z portali. Jeśli wynik wyszukiwania internetowego podał brzmienie — zweryfikuj przez
eurlex.py,
zanim go użyjesz w odpowiedzi.
- Internet — tylko do orzecznictwa TSUE (curia.europa.eu), doktryny i identyfikacji aktów.
Po identyfikacji wróć do CELLAR po tekst.
- Pytanie bez wskazanego przepisu („czy to zgodne z prawem UE…", „czy RODO pozwala…") to też
zadanie dla tego skilla — najpierw ustal akt (tabela niżej lub
szukaj), pobierz przepisy
(tekst --fragment), dopiero potem ewentualnie internet po orzecznictwo.
- Granica PL/UE: rozporządzenie UE stosuje się wprost; dyrektywa działa przez TRANSPOZYCJĘ —
polską ustawę wdrażającą sprawdzaj skillem prawo-pl-eli (ELI Sejmu). Przy pytaniach mieszanych
(np. RODO + polska ustawa o ochronie danych) używaj OBU skilli.
- Delegując research subagentowi, wpisz do jego promptu: „treść przepisów UE pobieraj wyłącznie
przez
scripts/eurlex.py (skill prawo-eu-eurlex); internet tylko do orzecznictwa i doktryny".
Narzędzie
Wszystko robi helper scripts/eurlex.py (tylko biblioteka standardowa Pythona — bez instalacji,
bez klucza API). Skrypt leży obok tego pliku SKILL.md — NIE zakładaj, że to ~/.claude/skills/
(skill zainstalowany jako plugin leży w katalogu pluginów; w Claude Code:
${CLAUDE_PLUGIN_ROOT}/skills/prawo-eu-eurlex). Uruchamiaj wyłącznie helper z bieżącego pakietu:
# 1) Claude Code: przy ładowaniu skilla podstawia ${CLAUDE_PLUGIN_ROOT} (pełna ścieżka poniżej).
EURLEX="${CLAUDE_PLUGIN_ROOT}/skills/prawo-eu-eurlex/scripts/eurlex.py"
# 2) Codex / Claude Desktop / instalacja ręczna: katalog TEGO pliku SKILL.md (Claude Code podaje go
# jako „Base directory for this skill”, Codex w liście skilli) — podstaw go zamiast <katalog skilla>.
[ -f "$EURLEX" ] || EURLEX="<katalog skilla>/scripts/eurlex.py"
# 3) Piaskownica (Cowork, czat z code execution): katalog pluginu bywa NIEWIDOCZNY dla powłoki — wtedy
# pobierz DOKŁADNIE tę wersję helpera (tag = wersja z nagłówka tego pliku). Suma SHA-256 jest
# sprawdzana w kodzie przed zapisem i przed każdym uruchomieniem; niezgodna = helper nie startuje.
[ -f "$EURLEX" ] || EURLEX=$(python3 - <<'EOF'
import hashlib, os, sys, urllib.request
WERSJA, SHA256 = "2.0.1", "6e6e8aa6646d8578345b1b06107922b6d6a1851bb42019683d5d5f2a074eeb33"
URL = f"https://raw.githubusercontent.com/jamarpl21/prawo-pl-eli/v{WERSJA}/plugins/prawo-eu-eurlex/skills/prawo-eu-eurlex/scripts/eurlex.py"
p = os.path.join(os.environ.get("TMPDIR", "/tmp"), f"prawo-eu-eurlex-{WERSJA}", "eurlex.py")
try:
dane = open(p, "rb").read() if os.path.exists(p) else urllib.request.urlopen(URL, timeout=30).read()
except Exception as e:
sys.exit(f"BŁĄD: nie udało się pobrać helpera ({e}). Bez helpera NIE cytuj prawa z pamięci ani z portali — poinformuj użytkownika.")
if hashlib.sha256(dane).hexdigest() != SHA256:
os.path.exists(p) and os.remove(p)
sys.exit("BŁĄD: suma SHA-256 helpera nie zgadza się z SKILL.md — helper NIE zostanie uruchomiony. Nie cytuj prawa z pamięci ani z portali — poinformuj użytkownika.")
os.makedirs(os.path.dirname(p), exist_ok=True); open(p, "wb").write(dane); print(p)
EOF
) && [ -f "$EURLEX" ] || exit 1
python3 "$EURLEX" <komenda> [...]
Nie szukaj helpera przez find po katalogach użytkownika ani systemu i nie pobieraj go z żadnego innego źródła niż przypięty tag z sumą wyżej (żadnego main, żadnej innej wersji z cache) — inna wersja helpera to inne wyniki.
(W przykładach niżej python3 scripts/eurlex.py oznacza python3 "$EURLEX", jeśli nie jesteś
w katalogu skilla.)
Identyfikator aktu to numer CELEX (np. 32016R0679 = sektor 3 legislacja, rok 2016, R =
rozporządzenie, nr 0679); akceptowane też: CELEX:32016R0679, forma ELI reg/2016/679,
wersje skonsolidowane 02016R0679-20160504, sprostowania 32016R0679R(01), traktaty 12012E/TXT.
Komendy
- szukaj — znajdź akt po frazie z tytułu (domyślnie tytuły polskie):
python3 scripts/eurlex.py szukaj "sztucznej inteligencji" --typ REG --limit 5
(opcje: --typ REG|DIR|DEC, --rok, --jezyk pol|eng|…, --obowiazujace, --limit)
Fraza dopasowuje się DOSŁOWNIE do tytułu, a tytuły są odmienione — podawaj RDZEŃ albo formę
z tytułu („danych osobowych"/„osobow", nie „dane osobowe"; RODO ma w tytule „ochrony osób
fizycznych w związku z przetwarzaniem danych osobowych"). Zero trafień z mianownika to NIE
dowód, że aktu nie ma.
- meta — metadane: pełny tytuł, typ, daty, status, ELI:
python3 scripts/eurlex.py meta 32016R0679
- Daty pochodzą z metadanych AKTU BAZOWEGO. CELLAR trzyma wejście w życie i daty rozpoczęcia
stosowania w JEDNEJ właściwości i ich nie rozróżnia: jedna data = „Wejście w życie"; kilka dat =
„Wejście w życie / stosowanie" (najwcześniejsza to z reguły wejście w życie) — którą datą objęty
jest dany przepis, ustal z przepisów końcowych (
tekst --fragment na ostatnim artykule).
- Dyrektywa: osobno „Termin transpozycji" (bywa kilka — różne zakresy); polską ustawę
wdrażającą sprawdź skillem prawo-pl-eli.
meta na CELEX-ie skonsolidowanym (0…-YYYYMMDD) pokazuje „Stan na (konsolidacja)", listę
aktów ujętych w konsolidacji oraz daty i status aktu bazowego — data w CELEX-ie konsolidacji
NIE jest datą wejścia w życie ani stosowania aktu.
- Akt zmieniany (lista aktów zmieniających): narzędzie ostrzega, że daty stosowania z aktu
bazowego mogą być nieaktualne (nowelizacja mogła przesunąć terminy — tak AI Act po 2026/1744) i
każe sprawdzić artykuł o stosowaniu w najnowszej wersji skonsolidowanej. Same sprostowania nie
zmieniają dat i nie wywołują ostrzeżenia.
- skonsolidowany — WERSJE SKONSOLIDOWANE aktu (odpowiednik tekstu jednolitego; data w CELEX
= stan prawny na):
python3 scripts/eurlex.py skonsolidowany 32006L0112
- tekst — treść aktu (XHTML → czysty tekst), domyślnie po polsku. Do pojedynczego artykułu
używaj
--fragment (pełny akt to setki tysięcy znaków):
python3 scripts/eurlex.py tekst 02016R0679-20160504 --fragment "art. 28"
python3 scripts/eurlex.py tekst 32024R1689 --fragment "profilowanie" (pełnotekstowo)
--jezyk eng — inna wersja językowa; --pdf ŚCIEŻKA zapisuje urzędowy PDF.
Fragment kończy się na granicy jednostki redakcyjnej (następny artykuł/rozdział/załącznik) oraz
na końcu części normatywnej: formuła „Sporządzono w…", podpisy i blok przypisów końcowych
(rozpoznawany po strukturze XHTML CELLAR) NIE wchodzą do fragmentu ostatniego artykułu; formuła
„Niniejsze rozporządzenie wiąże w całości…" zostaje przy nim. Przypisy czytaj bez --fragment
albo frazą z przypisu.
404 na wersji skonsolidowanej z listy skonsolidowany (np. pierwsza, tożsama z aktem bazowym)
oznacza, że CELLAR nie serwuje już tej ZASTĄPIONEJ wersji — narzędzie wskazuje najnowszą.
- odniesienia — nowelizacje, sprostowania, uchylenia w obie strony („UCHYLONY PRZEZ" /
„Uchyla", także dorozumiane), akty zmieniane, podstawa prawna; na akcie uchylonym pierwsza linia
mówi wprost „AKT UCHYLONY przez … — NIE OBOWIĄZUJE":
python3 scripts/eurlex.py odniesienia 32016R0679 (→ uchyla 31995L0046)
- każda komenda przyjmuje
--json oraz --strict; obie flagi działają przed komendą i po niej.
Zero trafień / nierozpoznana odpowiedź API kończą się komunikatem i kodem wyjścia ≠ 0 — także z --json
(nie dostaniesz pustego JSON-a, który wyglądałby jak „sprawdzone, nic nie ma”; dotyczy też szukaj).
--json dla meta zwraca obiekt: meta (surowe wiersze tej pracy), akt_bazowy (na wersji
skonsolidowanej), zmieniajace, wersje_skonsolidowane, ostrzezenia.
- Co sprawdza
--strict, a czego nie. Każda kontrola wykonuje się PRZED emisją wyniku; awaria
kontroli (SPARQL niedostępny) blokuje wynik zamiast udawać „brak". Blokuje: tekst aktu bazowego,
gdy istnieją wersje skonsolidowane, i starszą wersję skonsolidowaną, gdy jest nowsza (także w
meta); meta AKTU BAZOWEGO, gdy akt był zmieniany (daty stosowania mogą być nieaktualne —
użyj meta/tekst najnowszej konsolidacji). Nie blokuje: meta aktu bazowego bez nowelizacji
(konsolidacja z samych sprostowań → tylko ostrzeżenie), meta najnowszej wersji skonsolidowanej
(daty aktu bazowego idą z ostrzeżeniem). --strict NIE weryfikuje treści dat z przepisami
końcowymi ani nie wykrywa zmian, których CELLAR jeszcze nie zaindeksował.
Narzędzie samo ostrzega: na akcie bazowym podpowiada najnowszą wersję skonsolidowaną; na wersji
skonsolidowanej przypomina o jej dokumentacyjnym charakterze i o nowszych wersjach. Nie ignoruj
tych ostrzeżeń.
Akty bazowe najczęstszych aktów (pomiń szukaj)
Numery CELEX są niezmienne — dla poniższych zaczynaj od skonsolidowany <CELEX> (a przy braku
wersji skonsolidowanych czytaj akt bazowy):
| Akt |
CELEX |
| RODO / GDPR |
32016R0679 |
| AI Act (akt o sztucznej inteligencji) |
32024R1689 |
| DORA (operacyjna odporność cyfrowa) |
32022R2554 |
| NIS2 (dyrektywa o cyberbezpieczeństwie) |
32022L2555 |
| DSA (akt o usługach cyfrowych) |
32022R2065 |
| DMA (akt o rynkach cyfrowych) |
32022R1925 |
| MiCA (rynki kryptoaktywów) |
32023R1114 |
| eIDAS (identyfikacja elektroniczna) |
32014R0910 |
| PSD2 (usługi płatnicze) |
32015L2366 |
| Dyrektywa o prawach konsumentów |
32011L0083 |
| ePrivacy (łączność elektroniczna) |
32002L0058 |
| Karta praw podstawowych UE |
12012P/TXT |
| TFUE (Traktat o funkcjonowaniu UE) |
12012E/TXT |
Zasady (ważne — dlaczego)
- Najpierw właściwy akt i wersja, potem cytat. Typowy przepływ: tabela wyżej (albo
szukaj) →
skonsolidowany <CELEX> → tekst <najnowsza wersja> --fragment "art. N". Cytowanie aktu
bazowego sprzed nowelizacji to częsty błąd.
- Wejście w życie ≠ rozpoczęcie stosowania ≠ termin transpozycji. RODO weszło w życie
24.05.2016, a stosuje się od 25.05.2018; AI Act stosuje się ETAPAMI (różne daty dla różnych
rozdziałów); dyrektywa wiąże państwa od terminu transpozycji.
meta pokazuje wszystkie daty
CELLAR (bez rozróżnienia, która to stosowanie) — przy kilku datach sprawdź przepisy końcowe
aktu (tekst --fragment na ostatnim artykule) i odnieś do DATY zdarzenia/sprawy. Po
nowelizacji daty z metadanych aktu bazowego mogą być nieaktualne (AI Act: art. 113 zmieniony
przez 2026/1744 — część terminów przesunięta) — wtedy artykuł o stosowaniu czytaj z najnowszej
wersji skonsolidowanej, a daty z meta traktuj jako pierwotne. Data w CELEX-ie wersji
skonsolidowanej to „stan na" konsolidacji, nie data aktu.
- Wersja skonsolidowana ma charakter dokumentacyjny (nie jest tekstem autentycznym) — świetna
do analizy, ale w piśmie urzędowym/sądowym wskaż akt bazowy + akty zmieniające (
odniesienia).
Do DOSŁOWNEGO cytatu pobierz urzędowy PDF (tekst … --pdf).
- Wszystkie wersje językowe są równorzędnie autentyczne. Przy wątpliwości interpretacyjnej
porównaj polską z angielską:
tekst <CELEX> --jezyk eng --fragment "art. N".
- Zawsze podawaj CELEX i ELI przy cytacie (np. „art. 28 ust. 3 RODO, CELEX 32016R0679",
meta zwraca ELI). To pozwala odbiorcy zweryfikować źródło.
- Baza może nie mieć najświeższych zmian (indeksacja bywa opóźniona) — przy sprawie na konkretną
datę zaznacz w odpowiedzi: „stan wg CELLAR na dzień X — do potwierdzenia".
Czego ten skill NIE obejmuje
- orzecznictwa TSUE z uzasadnieniami (wyroki → curia.europa.eu; CELLAR ma sektor 6, ale tylko
metadane i sentencje — nie analizuj wyroków samym tym skillem),
- prawa krajowego, w tym polskiej transpozycji dyrektyw — użyj skilla prawo-pl-eli,
- projektów w toku procesu legislacyjnego (COM/SEC, prace PE i Rady — inne źródła),
- wyszukiwarki pełnotekstowej EUR-Lex (SOAP, wymaga rejestracji — ten skill jej nie używa;
szukaj działa po tytułach, frazy w treści szukaj przez tekst --fragment).
Jeśli zagadnienie wymaga tych źródeł — powiedz to wprost, nie udawaj, że CELLAR je pokryje.
Przykładowy przepływ
Pytanie: „czy klauzula powierzenia w tej umowie jest zgodna z art. 28 RODO?" (przykład — stan na
czerwiec 2026):
- Tabela: RODO =
32016R0679 → skonsolidowany 32016R0679 → najnowsza wersja 02016R0679-20160504.
tekst 02016R0679-20160504 --fragment "art. 28" → pełna treść artykułu po polsku
(+ automatyczne przypomnienie o dokumentacyjnym charakterze wersji skonsolidowanej).
- Porównaj klauzulę z wymogami art. 28 ust. 3 lit. a–h; przy wątpliwości językowej:
tekst … --jezyk eng --fragment "art. 28".
- W odpowiedzi: cytat, CELEX, ELI i data stanu prawnego; polska ustawa wdrożeniowa (UODO) →
skill prawo-pl-eli.
1---2name: prawo-eu-eurlex3description: Odpytuje OFICJALNE repozytorium prawa UE — CELLAR/EUR-Lex Urzędu Publikacji (SPARQL + REST, bez klucza): wyszukiwanie aktów, pełny tekst PO POLSKU i w 23 innych językach, WERSJE SKONSOLIDOWANE, pojedyncze artykuły, metadane, nowelizacje, uchylenia, sprostowania, podstawa prawna — po numerze CELEX lub ELI. Używaj przy KAŻDYM pytaniu o prawo UE: rozporządzenia (RODO/GDPR, AI Act, DORA, DSA, DMA, MiCA, eIDAS), dyrektywy (NIS2, konsumenckie, ePrivacy, PSD2), decyzje, traktaty i Karta — TAKŻE gdy przepis nie jest jeszcze znany. Wywołuj PRZED wyszukiwaniem w internecie: treść przepisu UE cytuj WYŁĄCZNIE z EUR-Lex/CELLAR, nigdy z pamięci ani portali; internet tylko do orzecznictwa TSUE i doktryny. Polską implementację dyrektywy sprawdzaj skillem prawo-pl-eli. Wyzwalaj przy: „co mówi RODO/AI Act o…", „art. X rozporządzenia/dyrektywy…", „CELEX", „czy zgodne z prawem UE", „od kiedy stosuje się…". EU law from the official EUR-Lex/CELLAR — always use for EU law questions BEFORE web search.4---56# Prawo UE z oficjalnego repozytorium CELLAR/EUR-Lex78Skill do pracy z prawem Unii Europejskiej — przy **każdym pytaniu o prawo UE** oraz przy **tworzeniu9i analizie umów i pism**, gdzie trzeba przywołać przepis unijny, zweryfikować podstawę prawną lub datę10stosowania. Cytowanie przepisów UE z pamięci albo z portali jest zawodne (nowelizacje, sprostowania,11różne daty stosowania) — ten skill sięga do **źródła pierwotnego**: CELLAR, wspólnego repozytorium12Urzędu Publikacji UE, które zasila EUR-Lex (SPARQL + REST, bez rejestracji i klucza).1314## Kolejność źródeł (przepis ≠ internet)15161. **Treść przepisu UE — wyłącznie z EUR-Lex/CELLAR.** Nigdy nie cytuj brzmienia z pamięci ani17 z portali. Jeśli wynik wyszukiwania internetowego podał brzmienie — zweryfikuj przez `eurlex.py`,18 zanim go użyjesz w odpowiedzi.192. **Internet — tylko do orzecznictwa TSUE (curia.europa.eu), doktryny i identyfikacji aktów.**20 Po identyfikacji wróć do CELLAR po tekst.213. **Pytanie bez wskazanego przepisu** („czy to zgodne z prawem UE…", „czy RODO pozwala…") to też22 zadanie dla tego skilla — najpierw ustal akt (tabela niżej lub `szukaj`), pobierz przepisy23 (`tekst --fragment`), dopiero potem ewentualnie internet po orzecznictwo.244. **Granica PL/UE:** rozporządzenie UE stosuje się wprost; dyrektywa działa przez TRANSPOZYCJĘ —25 polską ustawę wdrażającą sprawdzaj skillem **prawo-pl-eli** (ELI Sejmu). Przy pytaniach mieszanych26 (np. RODO + polska ustawa o ochronie danych) używaj OBU skilli.275. **Delegując research subagentowi**, wpisz do jego promptu: „treść przepisów UE pobieraj wyłącznie28 przez `scripts/eurlex.py` (skill prawo-eu-eurlex); internet tylko do orzecznictwa i doktryny".2930## Narzędzie3132Wszystko robi helper `scripts/eurlex.py` (tylko biblioteka standardowa Pythona — bez instalacji,33bez klucza API). Skrypt leży **obok tego pliku SKILL.md** — NIE zakładaj, że to `~/.claude/skills/`34(skill zainstalowany jako plugin leży w katalogu pluginów; w Claude Code:35`${CLAUDE_PLUGIN_ROOT}/skills/prawo-eu-eurlex`). Uruchamiaj wyłącznie helper z bieżącego pakietu:3637```38# 1) Claude Code: przy ładowaniu skilla podstawia ${CLAUDE_PLUGIN_ROOT} (pełna ścieżka poniżej).39EURLEX="${CLAUDE_PLUGIN_ROOT}/skills/prawo-eu-eurlex/scripts/eurlex.py"40# 2) Codex / Claude Desktop / instalacja ręczna: katalog TEGO pliku SKILL.md (Claude Code podaje go41# jako „Base directory for this skill”, Codex w liście skilli) — podstaw go zamiast <katalog skilla>.42[ -f "$EURLEX" ] || EURLEX="<katalog skilla>/scripts/eurlex.py"43# 3) Piaskownica (Cowork, czat z code execution): katalog pluginu bywa NIEWIDOCZNY dla powłoki — wtedy44# pobierz DOKŁADNIE tę wersję helpera (tag = wersja z nagłówka tego pliku). Suma SHA-256 jest45# sprawdzana w kodzie przed zapisem i przed każdym uruchomieniem; niezgodna = helper nie startuje.46[ -f "$EURLEX" ] || EURLEX=$(python3 - <<'EOF'47import hashlib, os, sys, urllib.request48WERSJA, SHA256 = "2.0.1", "6e6e8aa6646d8578345b1b06107922b6d6a1851bb42019683d5d5f2a074eeb33"49URL = f"https://raw.githubusercontent.com/jamarpl21/prawo-pl-eli/v{WERSJA}/plugins/prawo-eu-eurlex/skills/prawo-eu-eurlex/scripts/eurlex.py"50p = os.path.join(os.environ.get("TMPDIR", "/tmp"), f"prawo-eu-eurlex-{WERSJA}", "eurlex.py")51try:52 dane = open(p, "rb").read() if os.path.exists(p) else urllib.request.urlopen(URL, timeout=30).read()53except Exception as e:54 sys.exit(f"BŁĄD: nie udało się pobrać helpera ({e}). Bez helpera NIE cytuj prawa z pamięci ani z portali — poinformuj użytkownika.")55if hashlib.sha256(dane).hexdigest() != SHA256:56 os.path.exists(p) and os.remove(p)57 sys.exit("BŁĄD: suma SHA-256 helpera nie zgadza się z SKILL.md — helper NIE zostanie uruchomiony. Nie cytuj prawa z pamięci ani z portali — poinformuj użytkownika.")58os.makedirs(os.path.dirname(p), exist_ok=True); open(p, "wb").write(dane); print(p)59EOF60) && [ -f "$EURLEX" ] || exit 161python3 "$EURLEX" <komenda> [...]62```6364Nie szukaj helpera przez `find` po katalogach użytkownika ani systemu i nie pobieraj go z żadnego innego źródła niż przypięty tag z sumą wyżej (żadnego `main`, żadnej innej wersji z cache) — inna wersja helpera to inne wyniki.6566(W przykładach niżej `python3 scripts/eurlex.py` oznacza `python3 "$EURLEX"`, jeśli nie jesteś67w katalogu skilla.)6869Identyfikator aktu to numer **CELEX** (np. `32016R0679` = sektor 3 legislacja, rok 2016, R =70rozporządzenie, nr 0679); akceptowane też: `CELEX:32016R0679`, forma ELI `reg/2016/679`,71wersje skonsolidowane `02016R0679-20160504`, sprostowania `32016R0679R(01)`, traktaty `12012E/TXT`.7273### Komendy7475- **szukaj** — znajdź akt po frazie z tytułu (domyślnie tytuły polskie):76 `python3 scripts/eurlex.py szukaj "sztucznej inteligencji" --typ REG --limit 5`77 (opcje: `--typ REG|DIR|DEC`, `--rok`, `--jezyk pol|eng|…`, `--obowiazujace`, `--limit`)78 Fraza dopasowuje się DOSŁOWNIE do tytułu, a tytuły są odmienione — podawaj RDZEŃ albo formę79 z tytułu („danych osobowych"/„osobow", nie „dane osobowe"; RODO ma w tytule „ochrony osób80 fizycznych w związku z przetwarzaniem danych osobowych"). Zero trafień z mianownika to NIE81 dowód, że aktu nie ma.82- **meta** — metadane: pełny tytuł, typ, daty, status, ELI: `python3 scripts/eurlex.py meta 32016R0679`83 - **Daty pochodzą z metadanych AKTU BAZOWEGO.** CELLAR trzyma wejście w życie i daty rozpoczęcia84 stosowania w JEDNEJ właściwości i ich nie rozróżnia: jedna data = „Wejście w życie"; kilka dat =85 „Wejście w życie / stosowanie" (najwcześniejsza to z reguły wejście w życie) — którą datą objęty86 jest dany przepis, ustal z przepisów końcowych (`tekst --fragment` na ostatnim artykule).87 - **Dyrektywa:** osobno „Termin transpozycji" (bywa kilka — różne zakresy); polską ustawę88 wdrażającą sprawdź skillem prawo-pl-eli.89 - **`meta` na CELEX-ie skonsolidowanym** (`0…-YYYYMMDD`) pokazuje „Stan na (konsolidacja)", listę90 aktów ujętych w konsolidacji oraz daty i status **aktu bazowego** — data w CELEX-ie konsolidacji91 NIE jest datą wejścia w życie ani stosowania aktu.92 - **Akt zmieniany** (lista aktów zmieniających): narzędzie ostrzega, że daty stosowania z aktu93 bazowego mogą być nieaktualne (nowelizacja mogła przesunąć terminy — tak AI Act po 2026/1744) i94 każe sprawdzić artykuł o stosowaniu w najnowszej wersji skonsolidowanej. Same sprostowania nie95 zmieniają dat i nie wywołują ostrzeżenia.96- **skonsolidowany** — WERSJE SKONSOLIDOWANE aktu (odpowiednik tekstu jednolitego; data w CELEX97 = stan prawny na): `python3 scripts/eurlex.py skonsolidowany 32006L0112`98- **tekst** — treść aktu (XHTML → czysty tekst), domyślnie po polsku. **Do pojedynczego artykułu99 używaj `--fragment`** (pełny akt to setki tysięcy znaków):100 `python3 scripts/eurlex.py tekst 02016R0679-20160504 --fragment "art. 28"`101 `python3 scripts/eurlex.py tekst 32024R1689 --fragment "profilowanie"` (pełnotekstowo)102 `--jezyk eng` — inna wersja językowa; `--pdf ŚCIEŻKA` zapisuje urzędowy PDF.103 Fragment kończy się na granicy jednostki redakcyjnej (następny artykuł/rozdział/załącznik) oraz104 na końcu części normatywnej: formuła „Sporządzono w…", podpisy i blok przypisów końcowych105 (rozpoznawany po strukturze XHTML CELLAR) NIE wchodzą do fragmentu ostatniego artykułu; formuła106 „Niniejsze rozporządzenie wiąże w całości…" zostaje przy nim. Przypisy czytaj bez `--fragment`107 albo frazą z przypisu.108 404 na wersji skonsolidowanej z listy `skonsolidowany` (np. pierwsza, tożsama z aktem bazowym)109 oznacza, że CELLAR nie serwuje już tej ZASTĄPIONEJ wersji — narzędzie wskazuje najnowszą.110- **odniesienia** — nowelizacje, sprostowania, **uchylenia w obie strony** („UCHYLONY PRZEZ" /111 „Uchyla", także dorozumiane), akty zmieniane, podstawa prawna; na akcie uchylonym pierwsza linia112 mówi wprost „AKT UCHYLONY przez … — NIE OBOWIĄZUJE":113 `python3 scripts/eurlex.py odniesienia 32016R0679` (→ uchyla 31995L0046)114- każda komenda przyjmuje `--json` oraz `--strict`; obie flagi działają przed komendą i po niej.115 Zero trafień / nierozpoznana odpowiedź API kończą się komunikatem i kodem wyjścia ≠ 0 — także z `--json`116 (nie dostaniesz pustego JSON-a, który wyglądałby jak „sprawdzone, nic nie ma”; dotyczy też `szukaj`).117 `--json` dla `meta` zwraca obiekt: `meta` (surowe wiersze tej pracy), `akt_bazowy` (na wersji118 skonsolidowanej), `zmieniajace`, `wersje_skonsolidowane`, `ostrzezenia`.119- **Co sprawdza `--strict`, a czego nie.** Każda kontrola wykonuje się PRZED emisją wyniku; awaria120 kontroli (SPARQL niedostępny) blokuje wynik zamiast udawać „brak". Blokuje: `tekst` aktu bazowego,121 gdy istnieją wersje skonsolidowane, i starszą wersję skonsolidowaną, gdy jest nowsza (także w122 `meta`); `meta` AKTU BAZOWEGO, gdy akt był zmieniany (daty stosowania mogą być nieaktualne —123 użyj `meta`/`tekst` najnowszej konsolidacji). Nie blokuje: `meta` aktu bazowego bez nowelizacji124 (konsolidacja z samych sprostowań → tylko ostrzeżenie), `meta` najnowszej wersji skonsolidowanej125 (daty aktu bazowego idą z ostrzeżeniem). `--strict` NIE weryfikuje treści dat z przepisami126 końcowymi ani nie wykrywa zmian, których CELLAR jeszcze nie zaindeksował.127128Narzędzie samo ostrzega: na akcie bazowym podpowiada najnowszą wersję skonsolidowaną; na wersji129skonsolidowanej przypomina o jej dokumentacyjnym charakterze i o nowszych wersjach. Nie ignoruj130tych ostrzeżeń.131132### Akty bazowe najczęstszych aktów (pomiń `szukaj`)133134Numery CELEX są niezmienne — dla poniższych zaczynaj od `skonsolidowany <CELEX>` (a przy braku135wersji skonsolidowanych czytaj akt bazowy):136137| Akt | CELEX |138|---|---|139| RODO / GDPR | `32016R0679` |140| AI Act (akt o sztucznej inteligencji) | `32024R1689` |141| DORA (operacyjna odporność cyfrowa) | `32022R2554` |142| NIS2 (dyrektywa o cyberbezpieczeństwie) | `32022L2555` |143| DSA (akt o usługach cyfrowych) | `32022R2065` |144| DMA (akt o rynkach cyfrowych) | `32022R1925` |145| MiCA (rynki kryptoaktywów) | `32023R1114` |146| eIDAS (identyfikacja elektroniczna) | `32014R0910` |147| PSD2 (usługi płatnicze) | `32015L2366` |148| Dyrektywa o prawach konsumentów | `32011L0083` |149| ePrivacy (łączność elektroniczna) | `32002L0058` |150| Karta praw podstawowych UE | `12012P/TXT` |151| TFUE (Traktat o funkcjonowaniu UE) | `12012E/TXT` |152153## Zasady (ważne — dlaczego)1541551. **Najpierw właściwy akt i wersja, potem cytat.** Typowy przepływ: tabela wyżej (albo `szukaj`) →156 `skonsolidowany <CELEX>` → `tekst <najnowsza wersja> --fragment "art. N"`. Cytowanie aktu157 bazowego sprzed nowelizacji to częsty błąd.1582. **Wejście w życie ≠ rozpoczęcie stosowania ≠ termin transpozycji.** RODO weszło w życie159 24.05.2016, a stosuje się od 25.05.2018; AI Act stosuje się ETAPAMI (różne daty dla różnych160 rozdziałów); dyrektywa wiąże państwa od terminu transpozycji. `meta` pokazuje wszystkie daty161 CELLAR (bez rozróżnienia, która to stosowanie) — przy kilku datach sprawdź przepisy końcowe162 aktu (`tekst --fragment` na ostatnim artykule) i odnieś do DATY zdarzenia/sprawy. **Po163 nowelizacji daty z metadanych aktu bazowego mogą być nieaktualne** (AI Act: art. 113 zmieniony164 przez 2026/1744 — część terminów przesunięta) — wtedy artykuł o stosowaniu czytaj z najnowszej165 wersji skonsolidowanej, a daty z `meta` traktuj jako pierwotne. Data w CELEX-ie wersji166 skonsolidowanej to „stan na" konsolidacji, nie data aktu.1673. **Wersja skonsolidowana ma charakter dokumentacyjny** (nie jest tekstem autentycznym) — świetna168 do analizy, ale w piśmie urzędowym/sądowym wskaż akt bazowy + akty zmieniające (`odniesienia`).169 Do DOSŁOWNEGO cytatu pobierz urzędowy PDF (`tekst … --pdf`).1704. **Wszystkie wersje językowe są równorzędnie autentyczne.** Przy wątpliwości interpretacyjnej171 porównaj polską z angielską: `tekst <CELEX> --jezyk eng --fragment "art. N"`.1725. **Zawsze podawaj CELEX i ELI** przy cytacie (np. „art. 28 ust. 3 RODO, CELEX 32016R0679",173 `meta` zwraca ELI). To pozwala odbiorcy zweryfikować źródło.1746. Baza może nie mieć najświeższych zmian (indeksacja bywa opóźniona) — przy sprawie na konkretną175 datę zaznacz w odpowiedzi: „stan wg CELLAR na dzień X — do potwierdzenia".176177## Czego ten skill NIE obejmuje178179- **orzecznictwa TSUE z uzasadnieniami** (wyroki → curia.europa.eu; CELLAR ma sektor 6, ale tylko180 metadane i sentencje — nie analizuj wyroków samym tym skillem),181- **prawa krajowego, w tym polskiej transpozycji dyrektyw** — użyj skilla **prawo-pl-eli**,182- **projektów w toku procesu legislacyjnego** (COM/SEC, prace PE i Rady — inne źródła),183- **wyszukiwarki pełnotekstowej EUR-Lex** (SOAP, wymaga rejestracji — ten skill jej nie używa;184 `szukaj` działa po tytułach, frazy w treści szukaj przez `tekst --fragment`).185Jeśli zagadnienie wymaga tych źródeł — powiedz to wprost, nie udawaj, że CELLAR je pokryje.186187## Przykładowy przepływ188189Pytanie: „czy klauzula powierzenia w tej umowie jest zgodna z art. 28 RODO?" (przykład — stan na190czerwiec 2026):1911. Tabela: RODO = `32016R0679` → `skonsolidowany 32016R0679` → najnowsza wersja `02016R0679-20160504`.1922. `tekst 02016R0679-20160504 --fragment "art. 28"` → pełna treść artykułu po polsku193 (+ automatyczne przypomnienie o dokumentacyjnym charakterze wersji skonsolidowanej).1943. Porównaj klauzulę z wymogami art. 28 ust. 3 lit. a–h; przy wątpliwości językowej:195 `tekst … --jezyk eng --fragment "art. 28"`.1964. W odpowiedzi: cytat, CELEX, ELI i data stanu prawnego; polska ustawa wdrożeniowa (UODO) →197 skill prawo-pl-eli.