Umowy jednostek sektora finansów publicznych z Centralnego Rejestru Umów
Skill do jawnego rejestru umów sektora publicznego. Sięga do publicznego API
Centralnego Rejestru Umów JSFP (https://rejestrumow.gov.pl, uruchomionego
1.07.2026 na podstawie art. 34a ustawy o finansach publicznych): umowy zawierane przez
jednostki sektora finansów publicznych — urzędy, gminy, powiaty, szpitale, uczelnie,
sądy, instytucje kultury — z pełnymi danymi stron (nazwa, NIP/REGON, adres), przedmiotem,
wartością, okresem obowiązywania i zmianami (aneksy, rozwiązania, wyłączenia jawności).
Używaj go, gdy pytanie dotyczy tego, z kim i na co jednostka publiczna zawarła umowę.
Podział ról (który skill do czego)
- Umowy JSFP (kto, z kim, na co, za ile) → ten skill. Zamawiający i wykonawcy,
kwoty, aneksy, wyłączenia jawności.
- Treść przepisów → prawo-pl-eli (ustawa o finansach publicznych — art. 34a–34b,
Prawo zamówień publicznych, u.d.i.p.).
- Orzecznictwo o jawności umów / dostępie do informacji publicznej →
prawo-pl-cbosa (sądy administracyjne), prawo-pl-saos (SN, sądy powszechne).
- Delegując research subagentowi, wpisz: „umowy JSFP pobieraj przez
scripts/rejestrumow.py (skill prawo-pl-rejestr-umow); treść przepisów przez
scripts/eli.py (prawo-pl-eli)".
Narzędzie
Wszystko robi helper scripts/rejestrumow.py (tylko biblioteka standardowa Pythona — bez
instalacji). Skrypt leży obok tego pliku SKILL.md (<katalog skilla>/scripts/rejestrumow.py)
— NIE zakładaj, że to ~/.claude/skills/prawo-pl-rejestr-umow (skill zainstalowany jako plugin
leży w katalogu pluginów; w Claude Code: ${CLAUDE_PLUGIN_ROOT}/skills/prawo-pl-rejestr-umow).
Uruchamiaj wyłącznie helper z bieżącego pakietu:
# 1) Claude Code: przy ładowaniu skilla podstawia ${CLAUDE_PLUGIN_ROOT} (pełna ścieżka poniżej).
REJ="${CLAUDE_PLUGIN_ROOT}/skills/prawo-pl-rejestr-umow/scripts/rejestrumow.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 "$REJ" ] || REJ="<katalog skilla>/scripts/rejestrumow.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 "$REJ" ] || REJ=$(python3 - <<'EOF'
import hashlib, os, sys, urllib.request
WERSJA, SHA256 = "2.0.1", "2e68aa08505ed5b99630b661de43a91ebf231323685a182404eb7751c74e96d2"
URL = f"https://raw.githubusercontent.com/jamarpl21/prawo-pl-eli/v{WERSJA}/plugins/prawo-pl-rejestr-umow/skills/prawo-pl-rejestr-umow/scripts/rejestrumow.py"
p = os.path.join(os.environ.get("TMPDIR", "/tmp"), f"prawo-pl-rejestr-umow-{WERSJA}", "rejestrumow.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 "$REJ" ] || exit 1
python3 "$REJ" <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/rejestrumow.py oznacza python3 "$REJ", jeśli nie
jesteś w katalogu skilla.)
Komendy
- najnowsze — ostatnio opublikowane umowy:
python3 scripts/rejestrumow.py najnowsze --limit 10
- szukaj — wyszukiwarka umów (filtry można łączyć dowolnie):
python3 scripts/rejestrumow.py szukaj "remont drogi" --woj dolnośląskie --sort priceDesc
python3 scripts/rejestrumow.py szukaj --jsfp "urząd gminy" --od 2026-07-01 --wartosc-od 100000
python3 scripts/rejestrumow.py szukaj --wykonawca "NAZWA SPÓŁKI" (albo --wykonawca-nip)
python3 scripts/rejestrumow.py szukaj --regon 000001301 --rola dowolna (podmiot po dowolnej stronie)
python3 scripts/rejestrumow.py szukaj --zmiana-rodzaj TSU02 --zmiana-od 2026-08-01 (umowy z aneksem)
Fraza szuka w przedmiocie umowy. Rola podmiotu jest rozłączna (zweryfikowane:
Uniwersytet Wrocławski = 455 umów jako zamawiający + 17 jako wykonawca = 472 „dowolnie"):
--jsfp/--regon/--nip = TYLKO zamawiający (JSFP), --wykonawca/--wykonawca-nip/ --wykonawca-regon = TYLKO druga strona (także gdy jest nią inna JSFP), --rola dowolna
= podmiot z --jsfp/--regon/--nip po którejkolwiek stronie (--rola wykonawca = to samo
co --wykonawca*). Pytanie „ile umów ZAWARŁA jednostka X" → domyślna rola; „wszystkie
umowy, w których X występuje" → --rola dowolna. NIP/REGON podawaj cyframi (kreski silnik
usuwa; API porównuje dosłownie). --woj/--powiat/--gmina/--miejscowosc = adres
zamawiającego. Zmiany umów: --zmiana-rodzaj KOD (kod słownika: TSU02 aneks, TSU05
rozwiązanie, TSU06 wypowiedzenie, TSU07 odstąpienie, TSU10 wygaśnięcie, inne;
nazwa zamiast kodu → błąd), --zmiana-od/--zmiana-do (data zmiany). Daty RRRR-MM-DD
(--od/--do = zawarcie, --pub-od/--pub-do = publikacja), --status Aktywna|Nieaktywna
(dokładnie tak), --sort (m.in. priceDesc, publicationDateDesc, executionDateAsc),
--limit N (maks. 50 — większy jest obcinany z komunikatem), --strona N (od 0; silnik
pisze „Kolejna strona" tylko gdy istnieje, „Ostatnia strona", „poza zakresem" albo „poza
oknem API"). Zaawansowane: --zapytanie '<json>' — surowe body ze wszystkimi sekcjami
filtrów (references/api.md); API ignoruje nieznane pola po cichu — zła nazwa pola =
cały rejestr (364 tys. umów) udający wynik; porównuj total z najnowsze.
- umowa — pełne szczegóły po idUmowy (UUID z wyników szukania):
python3 scripts/rejestrumow.py umowa 958e7d59-057b-4eb4-8f55-e664638f393a
Pokazuje numer, status, okres, wartość (liczbą; obok ewentualny „opis wartości" — dowolny
tekst jednostki, NIE gwarantowana kwota słownie), strony z NIP/REGON i pełnym adresem
(ulica, kod, miejscowość, gmina/dzielnica, powiat, województwo), finansowanie ze środków
UE/zagranicznych, aneksy i zmiany, wyłączenia jawności (zakres, podstawa, wyłączający).
- slownik — słowniki API:
python3 scripts/rejestrumow.py slownik rodzaje_zmian_umowy
(kraje, strony_umowy, rodzaje_zmian_umowy, podstawy_wylaczenia_jawnosci,
zakres_wylaczenia_jawnosci).
- każda komenda przyjmuje
--json oraz --strict (blokuje wynik bez zweryfikowanej kompletności); 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”).
Typowy przepływ: szukaj <filtry> → wybierz idUmowy → umowa <idUmowy> → strony,
kwoty, aneksy do odpowiedzi.
Zasady (ważne — dlaczego)
- Rejestr obejmuje TYLKO umowy zawarte od 1.07.2026 (start obowiązku z art. 34a
u.f.p.). Brak umowy w rejestrze ≠ jej nieistnienie: wcześniejsze umowy, umowy poniżej
ustawowego progu wartości i wyłączone ustawowo nie trafiają do rejestru — zaznacz to
w odpowiedzi. Aktualny próg i wyłączenia weryfikuj w art. 34a u.f.p. (prawo-pl-eli).
- Dane wpisują kierownicy JSFP ręcznie — nazwy bywają skracane, z literówkami,
a daty przekłamane (system blokuje daty wsteczne, co jednostki obchodzą aneksami —
bywa to opisane w komentarzu zmiany). Szukając podmiotu, preferuj REGON/NIP nad
nazwę; przy nazwie próbuj krótkich rdzeni.
- Zawsze podawaj idUmowy + JSFP + datę zawarcia przy cytowaniu (np. „umowa
NI.2720.53.2026 Dolnośląskiej Służby Dróg i Kolei z 7.07.2026, idUmowy 958e7d59-…") —
UUID jest stabilnym identyfikatorem, a link
https://rejestrumow.gov.pl/umowa/<idUmowy>
działa w przeglądarce.
- Okno wyszukiwania to 10 000 wyników (200 stron po 50) — przy większej liczbie
trafień (nagłówek „Pasujących umów" pokazuje realną) ogon zbioru jest NIEOSIĄGALNY
żadną stroną: silnik ostrzega, na ostatniej osiągalnej stronie pisze „okno wyczerpane",
a
--strona spoza okna kończy komunikatem „poza oknem API" (exit ≠ 0, także z --json).
Zawężaj zakresami dat/województwem/wartością; --strict blokuje zbiór > 10 000 jako
niekompletny. „Brak wyników" znaczy zweryfikowane zero trafień — strona spoza mniejszego
zbioru to „poza zakresem (stron: M)", nie zero.
- Wartość może być niejawna albo opisowa — sprawdzaj w szczegółach pola wyłączenia
jawności (podstawę prawną wyłączenia wskazuje jednostka) i „opis wartości" (wolny tekst;
bywa kwotą słownie, bywa powtórzeniem przedmiotu, często pusty).
- Pełna lista endpointów, sekcji filtrów i pułapek:
references/api.md.
Czego ten skill NIE obejmuje
- ogłoszeń o zamówieniach publicznych (przetargi, SWZ, oferty → BZP
ezamowienia.gov.pl
/ TED — internet); rejestr pokazuje ZAWARTE umowy, nie postępowania,
- umów sprzed 1.07.2026 oraz umów podmiotów spoza sektora finansów publicznych
(spółki komunalne/Skarbu Państwa nie są JSFP),
- treści przepisów (→ prawo-pl-eli) ani orzecznictwa o jawności umów
(→ prawo-pl-cbosa, prawo-pl-saos),
- treści samych umów (PDF-ów) — rejestr zawiera metadane, nie skany; o treść
wystąp do jednostki w trybie u.d.i.p.
Jeśli zagadnienie wymaga tych źródeł — powiedz to wprost, nie udawaj, że rejestr je pokryje.
Przykładowy przepływ
Pytanie: „na co gmina X wydaje ostatnio najwięcej i kto jest wykonawcą?"
szukaj --jsfp "gmina X" --sort priceDesc --limit 10 → największe umowy ZAWARTE przez
gminę jako zamawiającego (jeśli pusto: znajdź REGON gminy i szukaj --regon <REGON>;
umowy, w których gmina jest wykonawcą dla innej JSFP, pokaże dopiero --rola dowolna).
umowa <idUmowy> → wykonawca (NIP/REGON, adres), opis wartości, aneksy.
- (opcjonalnie) inne umowy tego wykonawcy w całym sektorze:
szukaj --wykonawca-nip <NIP>; umowy gminy zmienione aneksem: szukaj --regon <REGON> --zmiana-rodzaj TSU02.
- (opcjonalnie) podstawa prawna jawności: skill prawo-pl-eli
(
tekst <u.f.p.> --fragment "art. 34a").
- W odpowiedzi: JSFP + wykonawca + wartość + data zawarcia + idUmowy; dopisz, że rejestr
obejmuje umowy od 1.07.2026 i dane wpisują jednostki.
1---2name: prawo-pl-rejestr-umow3description: Odpytuje publiczne API Centralnego Rejestru Umów JSFP (rejestrumow.gov.pl) — jawny rejestr umów zawieranych od 1.07.2026 przez jednostki sektora finansów publicznych: urzędy, gminy, szpitale, uczelnie, sądy. Używaj przy pytaniach „jakie umowy zawarł urząd/gmina/szpital X", „z kim i na ile ma umowę…", „kto dostał zlecenie od…", „ile jednostka płaci za…", przy due diligence kontrahenta z sektora publicznego, analizie wydatków publicznych i kontroli obywatelskiej. Wyszukiwanie po przedmiocie umowy, nazwie/REGON/NIP zamawiającego i wykonawcy, województwie, dacie i wartości; pełne szczegóły umowy (strony z adresami, aneksy, wyłączenia jawności). Read-only, bez klucza. Podstawa prawna (art. 34a–34b ustawy o finansach publicznych) → prawo-pl-eli; ogłoszenia o zamówieniach publicznych (BZP/TED) poza zakresem. Public contracts register of Polish public finance sector entities (JSFP) from its official API.4---56# Umowy jednostek sektora finansów publicznych z Centralnego Rejestru Umów78Skill do **jawnego rejestru umów sektora publicznego**. Sięga do publicznego API9**Centralnego Rejestru Umów JSFP** (`https://rejestrumow.gov.pl`, uruchomionego101.07.2026 na podstawie art. 34a ustawy o finansach publicznych): umowy zawierane przez11jednostki sektora finansów publicznych — urzędy, gminy, powiaty, szpitale, uczelnie,12sądy, instytucje kultury — z pełnymi danymi stron (nazwa, NIP/REGON, adres), przedmiotem,13wartością, okresem obowiązywania i zmianami (aneksy, rozwiązania, wyłączenia jawności).14Używaj go, gdy pytanie dotyczy tego, **z kim i na co jednostka publiczna zawarła umowę**.1516## Podział ról (który skill do czego)17181. **Umowy JSFP (kto, z kim, na co, za ile) → ten skill.** Zamawiający i wykonawcy,19 kwoty, aneksy, wyłączenia jawności.202. **Treść przepisów → prawo-pl-eli** (ustawa o finansach publicznych — art. 34a–34b,21 Prawo zamówień publicznych, u.d.i.p.).223. **Orzecznictwo** o jawności umów / dostępie do informacji publicznej →23 **prawo-pl-cbosa** (sądy administracyjne), **prawo-pl-saos** (SN, sądy powszechne).244. **Delegując research subagentowi**, wpisz: „umowy JSFP pobieraj przez25 `scripts/rejestrumow.py` (skill prawo-pl-rejestr-umow); treść przepisów przez26 `scripts/eli.py` (prawo-pl-eli)".2728## Narzędzie2930Wszystko robi helper `scripts/rejestrumow.py` (tylko biblioteka standardowa Pythona — bez31instalacji). Skrypt leży **obok tego pliku SKILL.md** (`<katalog skilla>/scripts/rejestrumow.py`)32— NIE zakładaj, że to `~/.claude/skills/prawo-pl-rejestr-umow` (skill zainstalowany jako plugin33leży w katalogu pluginów; w Claude Code: `${CLAUDE_PLUGIN_ROOT}/skills/prawo-pl-rejestr-umow`).34Uruchamiaj wyłącznie helper z bieżącego pakietu:3536```37# 1) Claude Code: przy ładowaniu skilla podstawia ${CLAUDE_PLUGIN_ROOT} (pełna ścieżka poniżej).38REJ="${CLAUDE_PLUGIN_ROOT}/skills/prawo-pl-rejestr-umow/scripts/rejestrumow.py"39# 2) Codex / Claude Desktop / instalacja ręczna: katalog TEGO pliku SKILL.md (Claude Code podaje go40# jako „Base directory for this skill”, Codex w liście skilli) — podstaw go zamiast <katalog skilla>.41[ -f "$REJ" ] || REJ="<katalog skilla>/scripts/rejestrumow.py"42# 3) Piaskownica (Cowork, czat z code execution): katalog pluginu bywa NIEWIDOCZNY dla powłoki — wtedy43# pobierz DOKŁADNIE tę wersję helpera (tag = wersja z nagłówka tego pliku). Suma SHA-256 jest44# sprawdzana w kodzie przed zapisem i przed każdym uruchomieniem; niezgodna = helper nie startuje.45[ -f "$REJ" ] || REJ=$(python3 - <<'EOF'46import hashlib, os, sys, urllib.request47WERSJA, SHA256 = "2.0.1", "2e68aa08505ed5b99630b661de43a91ebf231323685a182404eb7751c74e96d2"48URL = f"https://raw.githubusercontent.com/jamarpl21/prawo-pl-eli/v{WERSJA}/plugins/prawo-pl-rejestr-umow/skills/prawo-pl-rejestr-umow/scripts/rejestrumow.py"49p = os.path.join(os.environ.get("TMPDIR", "/tmp"), f"prawo-pl-rejestr-umow-{WERSJA}", "rejestrumow.py")50try:51 dane = open(p, "rb").read() if os.path.exists(p) else urllib.request.urlopen(URL, timeout=30).read()52except Exception as e:53 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.")54if hashlib.sha256(dane).hexdigest() != SHA256:55 os.path.exists(p) and os.remove(p)56 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.")57os.makedirs(os.path.dirname(p), exist_ok=True); open(p, "wb").write(dane); print(p)58EOF59) && [ -f "$REJ" ] || exit 160python3 "$REJ" <komenda> [...]61```6263Nie 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.6465(W przykładach niżej `python3 scripts/rejestrumow.py` oznacza `python3 "$REJ"`, jeśli nie66jesteś w katalogu skilla.)6768### Komendy6970- **najnowsze** — ostatnio opublikowane umowy:71 `python3 scripts/rejestrumow.py najnowsze --limit 10`72- **szukaj** — wyszukiwarka umów (filtry można łączyć dowolnie):73 `python3 scripts/rejestrumow.py szukaj "remont drogi" --woj dolnośląskie --sort priceDesc`74 `python3 scripts/rejestrumow.py szukaj --jsfp "urząd gminy" --od 2026-07-01 --wartosc-od 100000`75 `python3 scripts/rejestrumow.py szukaj --wykonawca "NAZWA SPÓŁKI"` (albo `--wykonawca-nip`)76 `python3 scripts/rejestrumow.py szukaj --regon 000001301 --rola dowolna` (podmiot po dowolnej stronie)77 `python3 scripts/rejestrumow.py szukaj --zmiana-rodzaj TSU02 --zmiana-od 2026-08-01` (umowy z aneksem)78 Fraza szuka w **przedmiocie umowy**. **Rola podmiotu jest rozłączna** (zweryfikowane:79 Uniwersytet Wrocławski = 455 umów jako zamawiający + 17 jako wykonawca = 472 „dowolnie"):80 `--jsfp/--regon/--nip` = TYLKO zamawiający (JSFP), `--wykonawca/--wykonawca-nip/81 --wykonawca-regon` = TYLKO druga strona (także gdy jest nią inna JSFP), `--rola dowolna`82 = podmiot z `--jsfp/--regon/--nip` po którejkolwiek stronie (`--rola wykonawca` = to samo83 co `--wykonawca*`). Pytanie „ile umów ZAWARŁA jednostka X" → domyślna rola; „wszystkie84 umowy, w których X występuje" → `--rola dowolna`. NIP/REGON podawaj cyframi (kreski silnik85 usuwa; API porównuje dosłownie). `--woj/--powiat/--gmina/--miejscowosc` = adres86 zamawiającego. Zmiany umów: `--zmiana-rodzaj KOD` (kod słownika: `TSU02` aneks, `TSU05`87 rozwiązanie, `TSU06` wypowiedzenie, `TSU07` odstąpienie, `TSU10` wygaśnięcie, `inne`;88 nazwa zamiast kodu → błąd), `--zmiana-od/--zmiana-do` (data zmiany). Daty `RRRR-MM-DD`89 (`--od/--do` = zawarcie, `--pub-od/--pub-do` = publikacja), `--status Aktywna|Nieaktywna`90 (dokładnie tak), `--sort` (m.in. `priceDesc`, `publicationDateDesc`, `executionDateAsc`),91 `--limit N` (maks. 50 — większy jest obcinany z komunikatem), `--strona N` (od 0; silnik92 pisze „Kolejna strona" tylko gdy istnieje, „Ostatnia strona", „poza zakresem" albo „poza93 oknem API"). Zaawansowane: `--zapytanie '<json>'` — surowe body ze wszystkimi sekcjami94 filtrów (`references/api.md`); **API ignoruje nieznane pola po cichu** — zła nazwa pola =95 cały rejestr (364 tys. umów) udający wynik; porównuj total z `najnowsze`.96- **umowa** — pełne szczegóły po idUmowy (UUID z wyników szukania):97 `python3 scripts/rejestrumow.py umowa 958e7d59-057b-4eb4-8f55-e664638f393a`98 Pokazuje numer, status, okres, wartość (liczbą; obok ewentualny „opis wartości" — dowolny99 tekst jednostki, NIE gwarantowana kwota słownie), strony z NIP/REGON i pełnym adresem100 (ulica, kod, miejscowość, gmina/dzielnica, powiat, województwo), finansowanie ze środków101 UE/zagranicznych, aneksy i zmiany, wyłączenia jawności (zakres, podstawa, wyłączający).102- **slownik** — słowniki API: `python3 scripts/rejestrumow.py slownik rodzaje_zmian_umowy`103 (`kraje`, `strony_umowy`, `rodzaje_zmian_umowy`, `podstawy_wylaczenia_jawnosci`,104 `zakres_wylaczenia_jawnosci`).105- każda komenda przyjmuje `--json` oraz `--strict` (blokuje wynik bez zweryfikowanej kompletności); obie flagi działają przed komendą i po niej.106 Zero trafień / nierozpoznana odpowiedź API kończą się komunikatem i kodem wyjścia ≠ 0 — także z `--json`107 (nie dostaniesz pustego JSON-a, który wyglądałby jak „sprawdzone, nic nie ma”).108109Typowy przepływ: `szukaj <filtry>` → wybierz idUmowy → `umowa <idUmowy>` → strony,110kwoty, aneksy do odpowiedzi.111112## Zasady (ważne — dlaczego)1131141. **Rejestr obejmuje TYLKO umowy zawarte od 1.07.2026** (start obowiązku z art. 34a115 u.f.p.). Brak umowy w rejestrze ≠ jej nieistnienie: wcześniejsze umowy, umowy poniżej116 ustawowego progu wartości i wyłączone ustawowo nie trafiają do rejestru — zaznacz to117 w odpowiedzi. Aktualny próg i wyłączenia weryfikuj w art. 34a u.f.p. (prawo-pl-eli).1182. **Dane wpisują kierownicy JSFP ręcznie** — nazwy bywają skracane, z literówkami,119 a daty przekłamane (system blokuje daty wsteczne, co jednostki obchodzą aneksami —120 bywa to opisane w komentarzu zmiany). Szukając podmiotu, preferuj **REGON/NIP** nad121 nazwę; przy nazwie próbuj krótkich rdzeni.1223. **Zawsze podawaj idUmowy + JSFP + datę zawarcia** przy cytowaniu (np. „umowa123 NI.2720.53.2026 Dolnośląskiej Służby Dróg i Kolei z 7.07.2026, idUmowy 958e7d59-…") —124 UUID jest stabilnym identyfikatorem, a link `https://rejestrumow.gov.pl/umowa/<idUmowy>`125 działa w przeglądarce.1264. **Okno wyszukiwania to 10 000 wyników** (200 stron po 50) — przy większej liczbie127 trafień (nagłówek „Pasujących umów" pokazuje realną) ogon zbioru jest NIEOSIĄGALNY128 żadną stroną: silnik ostrzega, na ostatniej osiągalnej stronie pisze „okno wyczerpane",129 a `--strona` spoza okna kończy komunikatem „poza oknem API" (exit ≠ 0, także z `--json`).130 Zawężaj zakresami dat/województwem/wartością; `--strict` blokuje zbiór > 10 000 jako131 niekompletny. „Brak wyników" znaczy zweryfikowane zero trafień — strona spoza mniejszego132 zbioru to „poza zakresem (stron: M)", nie zero.1335. **Wartość może być niejawna albo opisowa** — sprawdzaj w szczegółach pola wyłączenia134 jawności (podstawę prawną wyłączenia wskazuje jednostka) i „opis wartości" (wolny tekst;135 bywa kwotą słownie, bywa powtórzeniem przedmiotu, często pusty).1366. Pełna lista endpointów, sekcji filtrów i pułapek: `references/api.md`.137138## Czego ten skill NIE obejmuje139140- **ogłoszeń o zamówieniach publicznych** (przetargi, SWZ, oferty → BZP `ezamowienia.gov.pl`141 / TED — internet); rejestr pokazuje ZAWARTE umowy, nie postępowania,142- **umów sprzed 1.07.2026** oraz umów podmiotów spoza sektora finansów publicznych143 (spółki komunalne/Skarbu Państwa nie są JSFP),144- **treści przepisów** (→ **prawo-pl-eli**) ani **orzecznictwa** o jawności umów145 (→ **prawo-pl-cbosa**, **prawo-pl-saos**),146- **treści samych umów** (PDF-ów) — rejestr zawiera metadane, nie skany; o treść147 wystąp do jednostki w trybie u.d.i.p.148Jeśli zagadnienie wymaga tych źródeł — powiedz to wprost, nie udawaj, że rejestr je pokryje.149150## Przykładowy przepływ151152Pytanie: „na co gmina X wydaje ostatnio najwięcej i kto jest wykonawcą?"1531. `szukaj --jsfp "gmina X" --sort priceDesc --limit 10` → największe umowy ZAWARTE przez154 gminę jako zamawiającego (jeśli pusto: znajdź REGON gminy i `szukaj --regon <REGON>`;155 umowy, w których gmina jest wykonawcą dla innej JSFP, pokaże dopiero `--rola dowolna`).1562. `umowa <idUmowy>` → wykonawca (NIP/REGON, adres), opis wartości, aneksy.1573. (opcjonalnie) inne umowy tego wykonawcy w całym sektorze:158 `szukaj --wykonawca-nip <NIP>`; umowy gminy zmienione aneksem: `szukaj --regon <REGON>159 --zmiana-rodzaj TSU02`.1604. (opcjonalnie) podstawa prawna jawności: skill prawo-pl-eli161 (`tekst <u.f.p.> --fragment "art. 34a"`).1625. W odpowiedzi: JSFP + wykonawca + wartość + data zawarcia + idUmowy; dopisz, że rejestr163 obejmuje umowy od 1.07.2026 i dane wpisują jednostki.