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
| Greška | Uzrok | Rešenje |
|---|---|---|
| Račun odbijen šifrom 2804 | cena ili iznos sa više od dve decimale, često iz uvezene tabele | cene na dve decimale, količine na tri; provera pre slanja |
TAX_LABEL_NOT_CURRENT | oznaka ugrađena u kod ili keširana; sandbox oznake u produkciji | oznake se čitaju sa GET /v1/tax-rates; mapiranje se ponavlja pri prelasku u produkciju |
| Refundacija ne prolazi | nema identifikacije kupca ili stavke ne odgovaraju originalu | identifikacija kupca obavezna; refundacija po stavkama originalnog računa |
| Fiskalizovane stare porudžbine | automatska fiskalizacija primenjena na porudžbine od pre povezivanja | granica aktivacije: porudžbine starije od nje se preskaču |
| Dva računa za jednu porudžbinu | zahtev ponovljen posle isteka vremena bez idempotentnog ključa | ključ se čuva pre slanja; nepoznat ishod se proverava, nikad ne ponavlja |
| Račun u dinarima za porudžbinu u evrima | porudžbina u stranoj valuti poslata kao da je u RSD | porudžbine u drugoj valuti se odbijaju, ne preračunavaju tiho |
| Popust veći od stavke | kupon primenjen na liniju čija je vrednost manja od popusta | takva porudžbina se odbija; popust se ne odbacuje tiho |
| Stavka bez poreza dobila 20% | linija koju shop nije oporezovao mapirana na podrazumevanu oznaku | linija bez poreza se odbija dok se mapiranje ne ispravi |
| Kupac dobio račun koji ne postoji | prihvaćen zahtev, red čekanja ili e-poruka tumačeni kao fiskalizacija | račun postoji samo posle statusa FISCALIZED sa fiscalized: true |
| Prelazak u produkciju sa starim mapiranjem | sandbox i produkcija imaju različit skup oznaka | kartica 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.
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.Ponavljanje samo kada ništa nije poslato
Odgovor 503 sa
retryable: trueznač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.Nepoznat ishod se proverava
Status
OUTCOME_UNKNOWNznači da je zahtev možda stigao, a odgovor nije. Sistem pamti identifikator operacije i proveravaGET /v1/operations/{id}dok se ishod ne razreši; nov zahtev za istu prodaju se ne šalje.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.