Web

Cjenik u CSV ili XML formatu na web stranici: obveza i izvedba

Od 17. studenoga svaka web stranica koja prodaje građanima mora imati strojno čitljiv cjenik. Format, naziv datoteke, rok do 8:00 i greške koje treba izbjeći.

Elvir Sejfulai Autor: Elvir Sejfulai 23.09.2026. 11 min čitanja

Ažurirano 30. rujna 2026.: primjena je odgođena na 17. studenoga 2026. Vlada je 29. rujna 2026. odgodila stupanje na snagu odluka o isticanju dodatne cijene i o objavi cjenika s 1. listopada na 17. studenoga 2026. Referentni datum ostaje 10. rujna 2026. Obveza objave cjenika u CSV ili XML formatu time počinje 17. studenoga, a sve ostalo u ovom vodiču vrijedi nepromijenjeno. Članak je usklađen s novim rokom.

O sidrenoj cijeni se ovih dana piše posvuda, a druga odluka iz istog broja Narodnih novina prolazi gotovo nezapaženo. Riječ je o Odluci o objavi cjenika proizvoda i usluga (NN 101/2026), koja od 17. studenoga 2026. traži da svaki trgovac i pružatelj usluga koji ima web stranicu na njoj objavi cjenik u obliku datoteke koju računalo može pročitati. Ne PDF, ne sliku, ne tablicu na stranici. Isključivo .csv ili .xml.

Za veliki trgovački lanac to je posao IT odjela. Za frizerski salon, autoservis ili stolarsku radionicu s prezentacijskom stranicom to je nešto što do sada nikad nisu radili, a rok je 17. studenoga 2026. Ovaj vodič pokriva što točno odluka traži, kako to Ministarstvo gospodarstva tumači u službenom pojašnjenju od 18. rujna 2026. i gdje se u praksi najčešće griješi.

Širi kontekst, tko mora isticati sidrenu cijenu i koji datum vrijedi, pročitajte u vodiču Sidrena cijena od 17. studenoga 2026..

Tko mora objaviti cjenik

Svaki trgovac na malo i pružatelj usluga koji ima web stranicu. Ministarstvo je to proširilo i na one koji je nemaju za prodaju:

„Obveza se primjenjuje na sve trgovce na malo i sve pružatelje usluga koji imaju uspostavljenu mrežnu stranicu (web site) uključujući i one subjekte čija mrežna stranica služi samo primjerice u informativne/prezentacijske svrhe.“

Stranica s pet podstranica, adresom i kontakt formom dakle je dovoljna da budete obveznik. S druge strane:

„Napomena: profil na društvenim mrežama ne smatra se uspostavljenom mrežnom stranicom.“

Tko ima samo Facebook ili Instagram profil, ovu obvezu nema. Tko posluje isključivo s tvrtkama, prema tumačenju koje se oslanja na Zakon o zaštiti potrošača također nije obveznik, jer se mjere odnose na prodaju potrošačima.

Što mora biti u cjeniku

Odluka propisuje sadržaj posebno za usluge i posebno za proizvode.

Za usluge (točka IV. odluke):

  • naziv usluge,
  • maloprodajna cijena, uz informaciju je li primijenjena tijekom posebnog oblika prodaje i naziv tog oblika prodaje,
  • sidrena cijena.

Za proizvode (točka III. odluke):

  • naziv, šifra i marka,
  • jedinica mjere i cijena za jedinicu mjere, ako je primjenjivo,
  • maloprodajna cijena, uz informaciju o posebnom obliku prodaje i njegov naziv,
  • sidrena cijena,
  • barkod,
  • raspoloživost: dostupno ili nedostupno.

Raspoloživost je novost. Ministarstvo pojašnjava da se veže uz konkretni prodajni objekt i da je proizvod „dostupan“ samo ako se u trenutku objave stvarno nalazi na zalihi u tom objektu.

Za one koji rade po mjeri ili po ponudi vrijedi posebno pravilo. Ne objavljuju se pojedinačne ponude, nego elementi cijene:

„Pružatelji usluga čija cijena nije unaprijed određena, u cjeniku objavljuju elemente od kojih se formira cijena s pripadajućom dodatnom cijenom na dan 10. rujna 2026. godine, a ne pojedinačne kalkulacije izrađene po narudžbi/specifikaciji potrošača.“

Više o tome u vodiču Sidrena cijena za usluge bez fiksnog cjenika.

Naziv datoteke: propisana struktura

Ovo je dio koji najviše iznenađuje. Naziv datoteke nije proizvoljan. Mora sadržavati pet elemenata, tim redom:

  1. oblik ili vrstu objekta (npr. prodavaonica, servis, salon, webshop),
  2. adresu objekta,
  3. oznaku objekta,
  4. broj pohrane,
  5. datum i vrijeme slanja datoteke.

Ministarstvo daje primjere:

prodavaonica_Ilica 150 Zagreb_P-01_104_01.10.2026_07:45
servis_Vukovarska 20 Osijek_U-03_015_01.10.2026_07:45

Ako imate samo jednu lokaciju i nemate interne oznake, kao oznaku objekta možete upisati P-01, NP, 01 ili slično. Broj pohrane je redni broj datoteke u vašoj evidenciji: prva objava je 001, sljedeća 002 i tako dalje.

Tri pravila za više lokacija i webshop:

  • Svaka lokacija ima svoju datoteku, čak i kada su asortiman i cijene identični.
  • Sve datoteke jednog subjekta imaju istu strukturu stupaca, odnosno XML elemenata.
  • Webshop dobiva zasebnu datoteku, s oblikom objekta „webshop“ u nazivu, iako su sve cijene već vidljive u trgovini. Pojašnjenje ne kaže koja adresa ide u naziv za webshop. Logičan izbor je adresa sjedišta.

Zamka: dvotočka i razmaci u nazivu

Primjer Ministarstva sadrži dvotočku (07:45) i razmake. To tehnički nije svugdje moguće:

  • Windows ne dopušta dvotočku u nazivu datoteke. Ako datoteku izvozite iz Excela na Windows računalu, ne možete je spremiti pod tim imenom.
  • WordPress preimenuje datoteke pri uploadu kroz medijsku knjižnicu. Funkcija koja čisti nazive uklanja dvotočke i zareze, a razmake pretvara u crtice. Iz servis_Vukovarska 20 Osijek_U-03_015_01.10.2026_07:45.csv nastaje servis_Vukovarska-20-Osijek_U-03_015_01.10.2026_0745.csv.
  • Shopify i većina drugih sustava također prilagođavaju nazive pri uploadu.
  • U URL-u razmak postaje %20, a dvotočka se u nekim alatima kodira kao %3A.

Linux poslužitelji dvotočku i razmake prihvaćaju bez problema. Najpouzdanije je zato datoteku generirati izravno na poslužitelju (skriptom ili dodatkom) ili je prenijeti putem FTP-a, a ne kroz medijsku knjižnicu CMS-a. Nakon objave otvorite stvarni URL i provjerite je li naziv ostao onakav kakav ste namjeravali.

Format datoteke: što odluka ne kaže

Odluka traži CSV ili XML, ali ne propisuje nazive stupaca, kodiranje znakova, razdjelnik ni decimalni zarez. To je prostor za greške koje neće pasti na inspekciji, ali hoće kod alata koji cijene prikupljaju automatski. Naše preporuke:

  • UTF-8 kodiranje. Inače se č, ć, ž, š i đ pretvaraju u nečitljive znakove. Hrvatski Excel pri spremanju CSV-a često ne koristi UTF-8, pa birajte opciju „CSV UTF-8“.
  • Jedan razdjelnik, dosljedno. Standardni CSV koristi zarez. Hrvatski Excel sprema s točkom-zarezom jer je zarez decimalni znak. Oboje se može strojno pročitati, ali ne mijenjajte razdjelnik od objave do objave.
  • Decimalna točka u iznosima, bez oznake valute i razmaka: 17.00, a ne 17,00 €. Valutu možete navesti u zasebnom stupcu.
  • Prvi redak sa zaglavljem i jasnim nazivima stupaca.
  • Stupac s datumom sidrene cijene. Nije izričito propisan, ali usluga uvedena u studenom ima drugi referentni datum od one koja je postojala 10. rujna. Bez tog stupca iz datoteke se to ne vidi.

Primjer CSV cjenika za usluge

naziv_usluge,maloprodajna_cijena,posebni_oblik_prodaje,naziv_posebnog_oblika_prodaje,sidrena_cijena,datum_sidrene_cijene,valuta
Muško šišanje,17.00,NE,,15.00,2026-09-10,EUR
Žensko šišanje i fen,32.00,DA,Jesenska akcija,35.00,2026-09-10,EUR
Bojanje izrasta,45.00,NE,,45.00,2026-09-10,EUR
Keratinski tretman,90.00,NE,,90.00,2026-11-03,EUR

Primijetite drugi redak: usluga je na akciji, pa je maloprodajna cijena niža od sidrene, a akcija je označena i imenovana. U zadnjem retku je usluga uvedena 3. studenoga, pa njezina sidrena cijena nosi taj datum.

Primjer XML cjenika za usluge

<?xml version="1.0" encoding="UTF-8"?>
<cjenik oblik_objekta="servis" adresa="Vukovarska 20 Osijek" oznaka_objekta="U-03" broj_pohrane="015" vrijeme_objave="2026-11-17T07:45:00+01:00">
  <usluga>
    <naziv>Zamjena ulja i filtera</naziv>
    <maloprodajna_cijena valuta="EUR">45.00</maloprodajna_cijena>
    <posebni_oblik_prodaje>NE</posebni_oblik_prodaje>
    <sidrena_cijena datum="2026-09-10" valuta="EUR">42.00</sidrena_cijena>
  </usluga>
  <usluga>
    <naziv>Norma sat</naziv>
    <maloprodajna_cijena valuta="EUR">48.00</maloprodajna_cijena>
    <posebni_oblik_prodaje>NE</posebni_oblik_prodaje>
    <sidrena_cijena datum="2026-09-10" valuta="EUR">48.00</sidrena_cijena>
  </usluga>
</cjenik>

Za pružatelja usluga s jednim objektom i dvadesetak stavki CSV je jednostavniji: možete ga održavati i u tabličnom kalkulatoru. XML ima smisla ako cjenik ionako generira softver.

Kada se cjenik ažurira

Rokovi su različiti za trgovce i za pružatelje usluga:

TrgovciPružatelji usluga
Koliko čestoJednom dnevno, radnim danomPri svakoj promjeni cijene
RokDo 8:00 ujutro za tekući danDo 8:00 ujutro na dan kada promjena stupa na snagu
Promjene tijekom danaNe zahtijevaju novu objavuNe zahtijevaju novu objavu
ArhivaNajmanje 30 danaNajmanje 30 dana

Frizer koji cijene mijenja dvaput godišnje dakle objavljuje novu datoteku dvaput godišnje. Webshop objavljuje svakog radnog dana, pa mu treba automatizacija.

Zamka: vremenska zona poslužitelja

Rok od 8:00 odnosi se na hrvatsko vrijeme. Većina poslužitelja i planera zadataka radi u UTC-u. Obveza počinje 17. studenoga 2026., dok je Hrvatska na zimskom vremenu (UTC+1), a od 28. ožujka 2027. prelazi na ljetno (UTC+2). Zadatak postavljen na 7:00 UTC u studenom se izvrši u 8:00, na samoj granici roka, a od kraja ožujka u 9:00, dakle prekasno.

Najjednostavnije rješenje je postaviti automatsko generiranje dovoljno rano da bude u roku u oba razdoblja, primjerice u 5:30 UTC, što je 7:30 ljeti i 6:30 zimi. Vrijeme u nazivu datoteke i u samoj datoteci pišite po hrvatskom vremenu.

Arhiva od 30 dana

Stari cjenici ne smiju nestati kad objavite novi. Moraju ostati javno dostupni najmanje 30 dana. Budući da naziv datoteke sadrži datum, vrijeme i broj pohrane, nova datoteka ionako neće prebrisati staru. Dovoljno je na stranici s cjenicima prikazati popis svih datoteka iz zadnjih 30 dana. Starije možete ukloniti, ali ih ne morate.

Gdje na stranici objaviti cjenik

Odluka ne propisuje lokaciju. Praktično rješenje koje preporučujemo:

  • Zasebna stranica, primjerice vasadomena.hr/cjenik/, na kojoj je poveznica na trenutno važeću datoteku i popis arhivskih.
  • Poveznica u podnožju stranice („Cjenik“), kako bi je mogao pronaći i čovjek i automatski alat.
  • Datoteke dostupne izravnim linkom, bez prijave, bez kolačića i bez JavaScripta koji ih tek treba učitati.

Zamka: zaštita od botova blokira upravo one koji trebaju čitati cjenik

Odluka traži da omogućite „uporabu softverskih alata i automatiziranih programa za prikupljanje podataka o cijenama“. Ministarstvo pojašnjava da je to ispunjeno samim objavljivanjem CSV ili XML datoteke. Ali samo ako do nje automatski alat stvarno može doći.

Provjerite ne blokira li je nešto od ovoga:

  • robots.txt s pravilom Disallow koje pokriva mapu s cjenicima,
  • Cloudflare zaštita od botova ili izazov („Checking your browser…“) na cijeloj domeni,
  • sigurnosni dodaci za WordPress koji ograničavaju broj zahtjeva ili blokiraju nepoznate programe,
  • zaštita lozinkom koja je ostala s razvojne verzije stranice.

Ako koristite takvu zaštitu, napravite iznimku za putanju s cjenicima. Provjera je jednostavna: otvorite URL datoteke u pregledniku u privatnom načinu rada i iz naredbenog retka, primjerice s curl -I. Oba moraju vratiti status 200 i sadržaj datoteke, a ne stranicu s izazovom.

Tri načina izvedbe

Mali pružatelj usluga, cijene se rijetko mijenjaju. Cjenik vodite u tabličnom kalkulatoru, izvezete ga kao CSV UTF-8, preimenujete prema propisanoj strukturi i prenesete na poslužitelj putem FTP-a. Na stranici /cjenik/ dodate poveznicu. Pri svakoj promjeni cijene ponovite postupak s novim brojem pohrane.

Webshop. Cijene se mijenjaju često, pa ručni rad ne dolazi u obzir. Cjenik se generira iz baze trgovine planiranim zadatkom svakog radnog dana, s raspoloživošću iz stanja zaliha. Za WooCommerce to je dodatak ili kratka prilagođena funkcija, za Shopify aplikacija ili vanjska skripta koja čita podatke putem API-ja. Kako sidrenu cijenu prikazati i na samoj stranici proizvoda opisali smo u vodiču Sidrena cijena u webshopu.

Više lokacija. Jedna skripta, jedna struktura, zasebna datoteka za svaku lokaciju i za webshop. Oznake objekata definirajte jednom i ne mijenjajte ih.

Kontrolni popis prije 17. studenoga

  1. Popis usluga ili proizvoda s aktualnom i sidrenom cijenom je gotov.
  2. Datoteka je u UTF-8 kodiranju, s dosljednim razdjelnikom i zaglavljem.
  3. Naziv datoteke sadrži oblik objekta, adresu, oznaku, broj pohrane, datum i vrijeme.
  4. Webshop ima zasebnu datoteku, svaka lokacija svoju.
  5. Datoteka se otvara izravnim linkom, bez prijave i bez izazova za botove.
  6. Stranica s cjenicima je povezana iz podnožja.
  7. Stare datoteke ostaju dostupne 30 dana.
  8. Za webshop: automatsko generiranje radnim danom prije 8:00 po hrvatskom vremenu, provjereno za ljetno i zimsko vrijeme.
  9. Za usluge: dogovoreno je tko objavljuje novu datoteku pri promjeni cijene.

Česta pitanja

Imam samo prezentacijsku stranicu bez cijena. Moram li objaviti cjenik?

Ministarstvo kaže da obveza vrijedi i za stranice koje služe samo za informiranje i predstavljanje. Ako prodajete građanima, objavite cjenik, a ako nemate fiksne cijene, u njega stavite elemente od kojih se cijena formira.

Može li cjenik biti PDF ili tablica na stranici?

Ne. Odluka traži isključivo .csv ili .xml datoteku. PDF i HTML tablica mogu postojati uz nju, ali je ne zamjenjuju.

Mogu li cjenik objaviti na Facebooku?

Profil na društvenoj mreži nije mrežna stranica, pa tamo obveze nema. Ako imate i web stranicu, cjenik ide na nju.

Koliko često pružatelj usluga mora ažurirati cjenik?

Pri svakoj promjeni cijene, najkasnije do 8:00 ujutro na dan kada nova cijena počinje vrijediti. Ako se cijene ne mijenjaju, ista datoteka ostaje važeća.

Moram li imati API?

Ne. Ministarstvo pojašnjava da se obveza omogućavanja automatiziranog dohvaćanja podataka „ispunjava već samim objavljivanjem cjenika u .csv ili .xml obliku na mrežnoj stranici subjekta“.

Izvori

Ovaj članak objašnjava propise i službeno tumačenje Ministarstva te daje tehničke preporuke. Nije pravni savjet za vašu konkretnu situaciju.

Spremni za rast vašeg poslovanja?

Dogovorimo kratki razgovor. Pregledat ćemo vašu web stranicu, oglase, SEO i recenzije te vam poslati pisani plan, bez obzira angažirate li nas ili ne.