Ovo je kostur projekta. Ništa u ovom repozitoriju ne dohvaća podatke: nema
nijednog mrežnog poziva i nijednog parsera stvarnog dokumenta. Provjereno
pretragom nad izvornim kodom 7.8.2026.: grep za requests, urllib, httpx,
socket, playwright i za bilo koji http:// ili https:// u jezgra/,
dohvat/ i testovi/ vraća nula pogodaka. U docs/ stoje nazivi poslužitelja
kojima je izvidnica pristupala, bez putanja i bez naziva parametara.
Postoji jezgra koja opisuje oblik izlaza i brani ga od dvije poznate greške,
razrješivač veze katastarske čestice i zemljišnoknjižnog uloška, tablica od 13
determinističkih pravila, 191 test, skica sloja dohvata bez ijednog poziva, i
spisi u docs/. Sve tvrdnje o dohvatljivosti pojedinog servisa potječu iz
izvidnice provedene 7.8.2026., iz jednog ranijeg predmeta i iz mjerenja
spojivosti od 7.8.2026., dakle iz ručnih poziva i skripte izvan ovog koda, a ne
iz koda koji ovdje stoji.
Namjera: usporedba dviju evidencija o istoj katastarskoj čestici, sa zabilježenim izvorom, doslovnim upitom i datumom uz svaki redak.
Autor: Hrvoje Matej, hrvoje.matej.l@gmail.com
Sve brojke u ovim datotekama su iz jednog snimka stanja. Registri se mijenjaju i servisi padaju; brojka bez nadnevka ovdje ne vrijedi ništa.
In English. Skeleton of a project that compares two Croatian public
registries about the same cadastral parcel: the land registry (ownership,
encumbrances, annotations) and the cadastre (possession, land use, area). Output
is a list of claims, each carrying its source, the literal query, the retrieval
timestamp and one of three states: finding, no finding, not checked. Nothing
here retrieves data: the repository contains no network call. A manual
measurement on 2026-08-07 (100 parcels, four cadastral municipalities) linked
land-registry and cadastre records for 86 of 100 parcels; the measuring script
and the fetched data are not part of this repository, only the resulting
resolver is (jezgra/razrjesivac.py). Owner names never reach the output; only
a one-way digest does. Legal boundary and the reasons the output carries no
risk score are in docs/pravna_granica.md.
Snimak stanja 7.8.2026.
| Datoteka | Sadrži | Stanje |
|---|---|---|
docs/arhitektura.md |
lanac od upita do dosjea, s mjestom na kojem danas staje | zapis namjere |
docs/izvori.md |
18 izvora sa stupcem je li provjeren otvaranjem, uz dva isključena odlukom | ručna provjera 7.8.2026. |
docs/pravna_granica.md |
što izlaz ne smije sadržavati i po kojem članku | pravna revizija 7.8.2026. |
PLAN.md |
prva četiri tjedna, sa pragom i uvjetom prekida po tjednu | plan, nijedan tjedan nije proveden |
jezgra/model.py |
oblik nalaza i dosjea; nalaz bez izvora ili bez datuma podiže iznimku pri konstrukciji, ne pri ispisu | radi, pod testom |
jezgra/prazno.py |
četiri stanja odgovora izvora, tako da se "nije pronađeno" ne može pomiješati s "potvrđeno nema" | radi, pod testom |
jezgra/pravila.py |
13 determinističkih pravila P01 do P13, svako s težinom, pravnom osnovom i objavljenim pragom | radi, pod testom; bez izmjerene bazične stope |
jezgra/razrjesivac.py |
kanonizacija oznake čestice iz prakse (ZEM, ZGR, G-sufiks, zvjezdica) i kaskada triju strategija spajanja čestice s uloškom, s pouzdanostima iz mjerenja 7.8.2026. | radi, pod testom nad lažiranim izvorima; mjerna skripta nije u repozitoriju |
jezgra/geometrija.py |
površina po formuli vezice, točka u poligonu, udaljenost i dodir dvaju poligona, bez vanjskih biblioteka | radi, pod testom |
testovi/ |
191 test, uključujući skupinu koja pokušava zaobići četiri stanja | prolaze; pokrivaju jezgru, ne dohvat |
dohvat/skica_izvora.py |
oblik sloja dohvata: ograničavanje ritma, vrijeme uz svaki odgovor, zabrana povratka None |
skica, prijenos se ubacuje izvana; nema nijedan test |
primjeri/dosje_primjer.md |
kako izgleda izlaz | izmišljeni podaci, označeno u zaglavlju; pisan rukom, kod koji bi ga proizveo ne postoji |
Nema: skrapera, parsera zemljišnoknjižnog izvatka ni posjedovnog lista, baze, uzorka. Jedno mjerenje nad stvarnim podacima postoji, spojivost dviju evidencija iz sljedećeg odjeljka, ali skripta koja ga je izvela i dohvaćeni podaci nisu u repozitoriju; u kodu je ostala samo kaskada koja je iz mjerenja proizašla.
Pokretanje testova:
cd DOSJE && python3 -m unittest discover -s testovi
Stanje 7.8.2026.: Ran 191 tests, OK. Bez vanjskih ovisnosti izvan
standardne biblioteke.
Jedino mjerenje nad stvarnim podacima u ovom projektu, izvedeno 7.8.2026. Pitanje: za koliko se katastarskih čestica automatski nađe njihov zemljišnoknjižni uložak.
Uzorak: 100 čestica, po 25 iz četiri katastarske općine (Split, Krk, Osijek, Vinkovci I), sjeme odabira 20260807 zapisano prije prvog dohvata. Prag uspjeha postavljen prije mjerenja: 0,80.
| k.o. | naivno podudaranje | kaskada |
|---|---|---|
| Split | 0,12 (3/25) | 0,52 (13/25) |
| Krk | 0,32 (8/25) | 1,00 (25/25) |
| Osijek | 1,00 (25/25) | 1,00 (25/25) |
| Vinkovci I | 0,96 (24/25) | 0,92 (23/25) |
| ukupno | 0,60 (60/100) | 0,86 (86/100) |
Preciznost: proizvedeno je 87 spojeva, priznato 86, jedan oboren u ručnoj provjeri (Split 115/3, uložak s praznim A1). Od 86 priznatih, 83 imaju identičnu površinu u oba zapisa; tri odstupanja su objašnjena, nijedan spoj nije proturječan. U k.o. Vinkovci I kaskada je priznala jedan spoj manje od naivnog podudaranja; pravilo mjerenja je da se nepotvrdiva veza ne priznaje, jer je pogrešan spoj gori od izostanka spoja.
Trošak: dva javna zahtjeva i oko pola sekunde mrežnog vremena po čestici (izmjereni prosjek strategije K1 je 0,54 s).
Po strategijama, kako stoji i u docstringovima jezgra/razrjesivac.py: K1
(državna tablica veza parcelLinks) spojila 85/100 uz 0 pogrešnih u ručnim
provjerama; K2 (goli broj uz strogu potvrdu parcelId ili identične površine)
1/100 povrh K1; K3 (identifikacijski sloj) 0 priznatih, 1 proizveden pa oboren.
Redoslijed kaskade je redoslijed iz mjerenja.
Ograde, obvezne uz gornje brojke.
- "Nijedan pogrešan spoj" znači "nijedno proturječje raspoloživih signala" (oznaka, parcelId, površina), a ne neovisnu potvrdu svakog spoja uvidom u isprave.
- Uzorak je zamjenski: izvorna stotina čestica nije bila dostupna, pa je izvučena nova sa zapisanim sjemenom.
- Okvir odabira su bazeni od oko 300 čestica po općini, ne cijele općine, pa se brojke ne smiju čitati kao svojstvo cijele katastarske općine.
- Mjerenje se iz ovog repozitorija ne može ponoviti: mjerna skripta i dohvaćeni podaci nisu u njemu, u skladu s pravilom da dohvaćeni sadržaj ne ulazi u repozitorij. U kodu su ostale kaskada, kanonizacija i brojke u docstringovima.
U ranijoj verziji ovih zapisa stajala je tvrdnja da upotrebljiv ključ spajanja zemljišne knjige i katastra ne postoji, izvedena iz spojivosti od 0,60.
Ta je tvrdnja bila pogrešna, i uzrok je poučniji od same brojke: mjerna
skripta priznavala je spoj samo pri znakovnoj jednakosti oznaka čestice. Stara
izmjera (Split, Krk) vodi građevinske i zemljišne čestice u odvojenim
brojevnim nizovima, s oblicima ZEM 22/3, 43/G, 22/1G, *710, koje
znakovna jednakost nikad ne spoji s oblikom iz druge evidencije. Skripta je
dakle mjerila pad vlastite usporedbe, a ne stanje registara. Kanonizacija
oznake i kaskada strategija podigle su spojivost sa 0,60 na 0,86 na istom
uzorku, iznad praga od 0,80.
Greška se objavljuje s uzrokom jer objavljena greška s uzrokom vrijedi više od
prešućene, i jer je isti oblik greške, čitanje pada vlastitog upita kao
činjenice o registru, već jednom proizveo lažan negativan nalaz (vidi
jezgra/prazno.py).
Polazna teza je bila: unesi česticu ili adresu, dobij pravni dosje s nalazima poredanim po težini, koji odgovara na osam pitanja. Provjera je od nje oduzela sljedeće.
Tri od osam stavki nemaju izvor. Uporabna dozvola nema nacionalni registar s
upitom po čestici. Ostavinski postupak ima jedini praktičan izvor u e-Oglasnoj
ploči sudova, koja je isključena odlukom (razlog u
docs/izvori.md). Pomorsko dobro se ne može
odgovoriti jer je granica rješenje, a ne prostorni sloj, i jer sloj
ps:ProtectedSite na obalnom pravokutniku vraća nula zapisa ondje gdje
katastarski sloj vraća 195. Dvije stavke su djelomične: šuma i neuknjižena
zgrada. Potpuno pokrivene su tri: tereti i služnosti, kulturno dobro kroz
zabilježbu, neusklađenost zemljišne knjige i katastra. Puna tablica je u
docs/izvori.md.
Adresa kao ulaz ne radi. Nijedan provjeren izvor ne daje deterministički put
adresa u česticu. INSPIRE filtar po nationalCadastralReference pao je s
procurjelom Oracle greškom ORA-01000 (provjereno 7.8.2026.), pa radi samo
upit po pravokutniku. Ulaz je k.o. i broj čestice. Kupac stana zna adresu.
Poredak po težini ne smije biti slobodna ocjena. Ako težinu dodjeljuje jezični model nad konkretnim predmetom, to je pravno mišljenje po čl. 3. Zakona o odvjetništvu. Poredak ostaje samo po objavljenoj determinističkoj tablici.
Niša nije prazna. Katastor.hr prodaje "Provjeru nekretnine" za 120 EUR s isporukom 48 do 72 sata i tvrdi 1500+ klijenata (cjenik otvoren 7.8.2026.).
Bazična stopa neslaganja nije poznata. U jednom ranijem predmetu, na osam čestica, na šest je barem jedna usporedba pokazala razliku. Taj je predmet odabran zato što je bio sporan, pa se iz njega bazična stopa ne smije čitati. Mjerenje na slučajnom uzorku od 200 čestica nije provedeno. Posljedica je da nijedno od 13 napisanih pravila zasad nije isporučivo, jer se po vlastitoj odluci nalaz bez bazične stope ne isporučuje.
Jedina brojka koja je izgledala kao neovisna provjera servisa nije to bila.
Površina jedne zgrade iz prostornog servisa poklapala se s ranije prikupljenom
vrijednošću i s posjedovnim listom. Tri iste brojke bile su tri prijepisa iste
atributne vrijednosti. Kad se ista površina usporedi s geometrijom iz istog
zapisa, izračun odstupa oko 20 %. Nijedan servis iz izvidnice, dakle, nije
neovisno provjeren na točnost. Zapis je u testovi/test_geometrija.py.
Prva verzija koda kršila je vlastitu pravnu granicu. Pravila P01 i P11
upisivala su normalizirano ime vlasnika u dokaz uz nalaz, odakle je ime ulazilo
i u JSON izlaz. To je izravno proturječilo odjeljku 4. dokumenta
docs/pravna_granica.md. Ispravljeno u reviziji 7.8.2026.; u izlaz sada ulazi
samo skraćeni jednosmjerni sažetak, a test pada ako se ime vrati.
Pet stvari čini ga težim nego što izgleda.
Ulaz nije jedan broj. Broj čestice nosi zvjezdicu za zgradu i kosu crtu za
poddiobu: *678, 1234/5, 1234, a stara izmjera dodaje i oblike ZEM 22/3,
43/G, 22/1G. U jednom ranijem predmetu upit bez zvjezdice, nad oznakom koja
je nosi, proizveo je zaključak da zgrada u katastru ne postoji, a postoji.
Jedan znak razlike proizveo je lažan negativan nalaz. Kanonizacija tih oblika
stoji u jezgra/razrjesivac.py (kanoniziraj), pod testom; izvorni zapis se
pritom nikad ne gubi. Katastarska općina se uz to pojavljuje u tri oblika koja
se ne izvode jedan iz drugoga: naziv, šesteroznamenkasta šifra i broj glavne
knjige, a nijedan servis ne prima sva tri.
Glavni izvor nema sučelja za strojni pristup. Javna pretraga zemljišnoknjižnog izvatka i posjedovnog lista je Angular aplikacija bez stabilnih imena polja. Dohvat se izvodi vođenjem preglednika. Koliko je to krhko je izmjereno: u jednom kasnijem prolazu postojećeg alata svih sedam upita palo je s porukom "ne nalazim polje za broj čestice". Sedam od sedam. Strojno čitljivi SOAP servisi postoje, ali traže token i odobrenje tijela.
Polje koje nosi najvrjedniju usporedbu nije dohvaćeno. Površina u
zemljišnoknjižnom izvatku stoji iza kontrole Manje... u sučelju. U 14 ranije
dohvaćenih izvadaka to polje nema vrijednost. Bez razvijanja te kontrole
usporedba površina ne postoji.
Prazan odgovor mora ostati prazan odgovor. Izlaz treba tri stanja, ne dva: nalaz, nema nalaza, nije provjereno. Razlika je konkretna. "Nema tereta!" u teretovnici je graničnik i znači nema nalaza. Površina koja se nije pročitala nije nema nalaza nego nije provjereno. Proizvod koji drugo prikaže kao prvo radi grešku pred kojom upozorava ranije zapisano pravilo: prazan odgovor je hipoteza, ne nalaz. Ista se greška u jednom predmetu pojavila dvaput nezavisno.
U kodu se ta razlika drži u jezgra/prazno.py, koje četiri stanja odgovora
razdvaja tako da se ne mogu tiho pomiješati: if ishod: podiže iznimku, čitanje
vrijednosti iz nepoznanice podiže iznimku, a objekt je zapečaćen pa se stanje ne
može prepisati. testovi/test_zaobilazenje.py te zapreke pokušava srušiti i
zapisuje i ono što od pokušaja prolazi.
Nalaz bez bazične stope nije nalaz. Razlika između vlasnika iz zemljišne knjige i osobe iz posjedovnog lista često nije pogreška nego ustroj: zemljišna knjiga upisuje vlasnika, katastar posjednika. Pravilo koje označi svaku takvu razliku označit će normalno stanje. Zato uz svaki nalaz mora stajati koliko se često okida. To je izravan prijenos discipline iz projekta HINT, gdje uz svaki rezultat modela stoji trivijalna osnovica, i gdje se pokazalo da rezultat od 0,8631 na jednoj mjeri odgovara bacanju kocke na drugoj.
Lanac je opisan u docs/arhitektura.md, s dijagramom i
tablicom prohodnosti po koracima.
Danas lanac staje na dohvatu: nijedan izvor se ne poziva iz ovog koda. Napisano je ono što stoji iznad i ispod dohvata, dakle kanonski oblik oznake čestice, kaskada spajanja čestice s uloškom, geometrijski račun, tablica pravila i oblik izlaza. Nije napisano ono što bi ih hranilo. To nije zastoj zbog pogreške nego stanje kostura.
Praktična posljedica koju treba reći izravno: 13 pravila i 191 test pokazuju da se jezgra ponaša kako je opisana, a ne da sustav radi. Nijedno pravilo dosad nije pokrenuto nad stvarno dohvaćenim podatkom. Djelomična iznimka je razrješivač: njegova je kaskada oblikovana prema mjerenju nad stvarnim podacima od 7.8.2026., ali je u ovom repozitoriju pokrenuta samo nad lažiranim izvorima u testovima.
Prvi korak koji se piše je dohvat zemljišnoknjižnog izvatka s razvijenom
kontrolom Manje..., jer bez tog polja najvrjednija usporedba ne postoji.
Arhitektura je preuzeta iz HINT-a i nije nova: prikupljanje, ekstrakcija polja,
determinističko spajanje po ključu. Ključ je ovdje par (katastarska općina,
broj čestice) umjesto OIB-a. Isječci koji pokazuju kako to izgleda u radnom kodu
stoje u projektu HINT, u primjeri/entity_matcher_isjecak.py i
primjeri/db_upsert_isjecak.py. Nisu dio ovog repozitorija.
Navedeno jer nedovršeno koje je priznato vrijedi više od prešućenog. Popis je ažuriran nakon revizije 7.8.2026.; ranija verzija tvrdila je da je napisano 0 pravila i da testova nema, što je u međuvremenu prestalo biti točno, pa je bio netočan u vlastitu korist obrnutog smjera.
Nije napisano uopće:
- dohvat i parsiranje, dakle sve što bi jezgru uopće hranilo podacima
- dohvat polja "Površina" iz zemljišnoknjižnog izvatka, bez kojeg pravilo P03 uvijek završava u skupini D
- čitanje GML-a; geometrijski račun postoji, ulaz u njega ne
- tablica preslika triju oblika oznake katastarske općine
- ijedan test nad
dohvat/skica_izvora.py; taj je modul napisan i neproviren - mjerna skripta spojivosti; mjerenje iz gornjeg odjeljka izvedeno je kodom koji nije u repozitoriju i iz ovog se koda ne može ponoviti
Napisano, ali neisporučivo:
- 13 pravila od procijenjenih 40 do 60. Nijedno nema izmjerenu bazičnu stopu, a bez nje se po vlastitoj odluci ne isporučuje. Isporučivih pravila je dakle 0
- kaskada u
jezgra/razrjesivac.py: strategije su pod testom nad lažiranim izvorima (PodaciSpajanjase lažira), a kroz stvaran sloj dohvata nisu pokrenute nijednom, jer taj sloj ne postoji - brojevi članaka uz pravila nisu neovisno provjereni u Narodnim novinama; to
stoji i u zaglavlju
jezgra/pravila.py primjeri/dosje_primjer.mdje pisan rukom. Kod daje isti sadržaj u drugom obliku, ali pripovjedne odjeljke "Što to znači za kupca" ne piše nitko
Nije izmjereno:
- mjerenje na slučajnom uzorku od 200 čestica iz plana, s pragovima upisanima
prije mjerenja (nacrt testa je u
docs/arhitektura.md); izmjerena spojivost od 0,86 pokriva samo korak spajanja, ne prohodnost čitanja izvadaka ni stopu neslaganja - stopa lažnih negativa izlučivača oznaka iz slobodnog teksta očevidnika
- prohodnost dohvata izvadaka; ranija mjera je 7 od 7 palih upita, ali iz drugog alata
- neovisna potvrda spojeva iz mjerenja spojivosti uvidom u isprave; "0 pogrešnih" znači samo da nijedan raspoloživi signal nije proturječan
Nije obavljeno izvan koda:
- zahtjev po čl. 29. Zakona o pravu na pristup informacijama nadležnom ministarstvu; mora biti podnesen prije prvog sustavnog dohvata, rok tijela je 15 dana
- provjera naziva u sudskom registru i registru žigova, ne pretragom weba
Sažetak s člancima je u
docs/pravna_granica.md. Ukratko, iz njega slijedi
četvero što izlaz ne smije sadržavati:
- Ocjenu rizika i preporuku o postupanju, jer je pravno mišljenje rezervirana djelatnost po čl. 5. st. 1. Zakona o odvjetništvu, a čl. 313. Kaznenog zakona obilježje veže uz naplatu.
- Vrijednosnu brojku, po čl. 66. Zakona o procjeni vrijednosti nekretnina. Ako izlaz preuzme oblik procjembenog elaborata, po sadržaju postaje elaborat bez obzira na naslov.
- Ime vlasnika, ni prikazano ni pohranjeno. Zemljišna knjiga jest javna
(ZZK čl. 7. st. 1.), ali je pretraga po imenu i OIB-u po ZZK čl. 28. st. 1. do
3. rezervirana. Baza pretraživa po vlasniku ne smije nastati. Proizvod ne
odgovara na pitanje tko je vlasnik, nego samo podudaraju li se upisi. U kodu
to provodi
jezgra/pravila.pyfunkcijomoznaka_osobe, a čuva testtest_ime_vlasnika_ne_izlazi_u_dosje. - Obećanje da hvata sve. Slučaj objavljen 2021. u emisiji Provjereno pokazuje kupca s čistom zemljišnom knjigom koji je nakon sedam godina parnice izgubio stan zbog srodstva koje nije stajalo ni u jednoj evidenciji. Ovakav proizvod taj slučaj ne hvata.
Ako tekst dosjea generira jezični model, to mora biti označeno po čl. 50. Uredbe (EU) 2024/1689, koji se primjenjuje od 2.8.2026.
Dohvaćeni sadržaj, spisi i osobni podaci nisu i neće biti dio ovog repozitorija.
Copyright (c) 2026 Hrvoje Matej.
Objavljeno pod licencom Apache License 2.0. Puni tekst je u
LICENSE.