Pređi na sadržaj

Vodič kroz fiskalizaciju

Najčešće greške pri fiskalizaciji web shopa i kako ih izbeći

Većina problema sa fiskalizacijom online prodaje nije u zakonu nego u detaljima integracije. Ovo su greške koje se ponavljaju od shopa do shopa, prikupljene tokom testiranja BokaPOS API-ja i WooCommerce dodatka u probnom okruženju Poreske uprave, svaka sa simptomom, uzrokom i rešenjem.

Ažurirano: 3. 9. 2026. · 7 min čitanjaMarkdown verzija

Deset grešaka na jednom mestu

Najčešće greške pri fiskalizaciji web shopa
GreškaUzrokRešenje
Račun odbijen šifrom 2804cena ili iznos sa više od dve decimale, često iz uvezene tabelecene na dve decimale, količine na tri; provera pre slanja
TAX_LABEL_NOT_CURRENToznaka ugrađena u kod ili keširana; sandbox oznake u produkcijioznake se čitaju sa GET /v1/tax-rates; mapiranje se ponavlja pri prelasku u produkciju
Refundacija ne prolazinema identifikacije kupca ili stavke ne odgovaraju originaluidentifikacija kupca obavezna; refundacija po stavkama originalnog računa
Fiskalizovane stare porudžbineautomatska fiskalizacija primenjena na porudžbine od pre povezivanjagranica aktivacije: porudžbine starije od nje se preskaču
Dva računa za jednu porudžbinuzahtev ponovljen posle isteka vremena bez idempotentnog ključaključ se čuva pre slanja; nepoznat ishod se proverava, nikad ne ponavlja
Račun u dinarima za porudžbinu u evrimaporudžbina u stranoj valuti poslata kao da je u RSDporudžbine u drugoj valuti se odbijaju, ne preračunavaju tiho
Popust veći od stavkekupon primenjen na liniju čija je vrednost manja od popustatakva porudžbina se odbija; popust se ne odbacuje tiho
Stavka bez poreza dobila 20%linija koju shop nije oporezovao mapirana na podrazumevanu oznakulinija bez poreza se odbija dok se mapiranje ne ispravi
Kupac dobio račun koji ne postojiprihvaćen zahtev, red čekanja ili e-poruka tumačeni kao fiskalizacijaračun postoji samo posle statusa FISCALIZED sa fiscalized: true
Prelazak u produkciju sa starim mapiranjemsandbox i produkcija imaju različit skup oznakakartica Porezi se mapira ponovo na dan prelaska

Decimale i zaokruživanje

V-PFR prihvata cene i iznose sa najviše dve decimale. Cena sa tri ili četiri decimale, najčešće iz uvezene tabele proizvoda ili iz automatskog obračuna popusta, vraća odbijanje sa šifrom 2804 (format). Rešenje je jednostavno: jedinična cena je konačna bruto cena zaokružena na dve decimale, količina na najviše tri, a zbir stavki mora biti jednak zbiru plaćanja.

Podmuklija varijanta je zaokruživanje poreza. Na dinarskom shopu bez decimala platforma zaokružuje porez na cele dinare, pa se iznos refundacije razlikuje od iznosa na računu za nekoliko para i svaka refundacija biva odbijena. WooCommerce dodatak zato toleranciju izvodi iz podešavanja decimala prodavnice i u belešci na porudžbini kaže kada se fiskalni iznos razlikuje od knjiženog.

Poreske oznake

Skup oznaka nije vaš: to je konfiguracija Poreske uprave koju ESIR čita pre izdavanja. U sandboxu je probni skup, u produkciji zvanične oznake Ђ, Е, Г i А. Oznaka ugrađena u kod ili sačuvana u konfiguraciji radi tačno dok se konfiguracija ne promeni, a onda odjednom ništa ne prolazi. BokaPOS zahtev sa oznakom koje nema u svežoj konfiguraciji odbija pre slanja porukom TAX_LABEL_NOT_CURRENT, sa spiskom spornih oznaka. Osvežite oznake kada dobijete tu poruku i uvek na dan prelaska u produkciju. Poseban slučaj obveznika van sistema PDV-a: Web shop van sistema PDV-a.

Refundacije

Refundacija traži dve stvari koje web shop obično nema pri ruci: identifikaciju kupca i tačne stavke originalnog računa. Identifikacija je zvanični kod i broj, na primer 10: sa PIB-om firme, 20: sa brojem lične karte ili 23: sa brojem pasoša; bez nje refundacija ne može da se fiskalizuje. Stavke se refundiraju u celim jedinicama po ceni sa računa; refundacija iznosa bez stavki nije fiskalna refundacija. Kada se novac vraća u gotovini, uz refundaciju se izdaje i kopija sa linijom za potpis kupca. Ceo tok, sa primerima delimične refundacije: Refundacija u web shopu.

Dupli računi i nepoznat ishod

Najskuplja greška je ona koja izgleda kao opreznost: veza pukne, sistem ne dobije odgovor, pa pošalje zahtev ponovo. Ako je prvi zahtev ipak stigao do Poreske uprave, sada postoje dva računa za jednu porudžbinu. Ispravna integracija radi obrnuto.

  1. Ključ pre slanja

    Idempotentni ključ se izvodi iz porudžbine i radnje (order-4127-sale-1) i čuva se pre prvog slanja. Isti zahtev sa istim ključem vraća isti račun, ma koliko puta ponovljen.

  2. Ponavljanje samo kada ništa nije poslato

    Odgovor 503 sa retryable: true znači da V-PFR nije bio dostupan i da ništa nije otišlo. Tada se isti zahtev ponavlja istim ključem, uz rastuće čekanje, ograničen broj puta.

  3. Nepoznat ishod se proverava

    Status OUTCOME_UNKNOWN znači da je zahtev možda stigao, a odgovor nije. Sistem pamti identifikator operacije i proverava GET /v1/operations/{id} dok se ishod ne razreši; nov zahtev za istu prodaju se ne šalje.

  4. Nov ključ tek posle jasnog neuspeha

    Nov ključ, a time i mogućnost novog računa, nastaje samo kada je prethodna operacija odbijena ili kada ste odustali od ponavljanja onoga što nikad nije poslato.

Valuta, popusti i linije bez poreza

Tri greške dolaze iz istog izvora: ESIR koji ćuti kad nešto ne razume. Porudžbina u evrima poslata kao dinarska daje račun sa pogrešnim iznosom. Kupon veći od vrednosti linije ili se tiho odbaci ili napravi negativnu stavku. Linija za koju shop nije obračunao porez, ako dobije podrazumevanu oznaku od 20%, na računu nosi porez koji kupac nije platio. U sva tri slučaja pravo rešenje je isto: zahtev se odbija sa jasnom porukom dok se podaci ne isprave, a ne šalje se dalje u nadi da će proći.

Stare porudžbine

Kada uključite automatsku fiskalizaciju, ona ne sme da zahvati porudžbine nastale pre povezivanja ESIR-a. Fiskalni račun nosi vreme koje V-PFR dodeli pri potpisu, pa bi porudžbina od pre dva meseca dobila današnji datum. WooCommerce dodatak zato pamti trenutak aktivacije i starije porudžbine nikad ne fiskalizuje. Kako sa takvim porudžbinama postupiti, pitanje je za knjigovođu.

Puna lista kodova grešaka BokaPOS API-ja, sa pravilom šta sme da se ponovi: Greške. Kako se sve ovo testira pre produkcije: ESIR za agencije i developere.

Česta pitanja

Zašto je V-PFR odbio račun sa šifrom 2804?

Šifra 2804 znači pogrešan format, najčešće cenu ili iznos sa više od dve decimale. Zaokružite cene na dve decimale, količine na tri, i proverite da se zbir stavki poklapa sa zbirom plaćanja.

Šta znači TAX_LABEL_NOT_CURRENT?

Bar jedna poreska oznaka u zahtevu nije u svežoj konfiguraciji V-PFR-a. Pročitajte oznake ponovo sa GET /v1/tax-rates i mapirajte na one koje su vraćene; sandbox i produkcija imaju različit skup.

Smem li da pošaljem zahtev ponovo kad istekne vreme?

Samo isti zahtev sa istim idempotentnim ključem, i samo kada odgovor kaže da ništa nije poslato. Ako je ishod nepoznat, nov zahtev se ne šalje; proverava se stanje operacije dok se ne razreši.

Mogu li da fiskalizujem stare porudžbine?

Ne kroz ESIR, jer bi račun nosio današnje vreme umesto vremena porudžbine. Porudžbine od pre povezivanja rešavajte sa knjigovođom.

Zašto refundacija traži broj lične karte ili PIB?

Propisi traže identifikaciju kupca na svakoj refundaciji. Bez zvaničnog koda i broja, na primer PIB-a firme ili broja lične karte, refundacija ne može da se fiskalizuje.