# 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.

Izvor: https://bokapos.rs/vodic/greske-pri-fiskalizaciji-web-shopa · Ažurirano: 3. 9. 2026. · 7 min čitanja · Autor: BOKA GROUP DOO (BokaPOS)

**Ukratko**

- V-PFR odbija cene i iznose sa više od dve decimale, šifrom 2804.
- Poreska oznaka mora biti iz sveže konfiguracije V-PFR-a; zastarela oznaka se odbija pre slanja.
- Refundacija bez identifikacije kupca ne može da se fiskalizuje.
- Ponovno slanje istog zahteva bez idempotentnog ključa izdaje dva računa za jednu porudžbinu.
- Prihvaćen zahtev, red čekanja, e-poruka ili PDF nisu dokaz fiskalizacije; dokaz je potpisan odgovor V-PFR-a.
- Porudžbine nastale pre povezivanja ESIR-a ne fiskalizuju se naknadno, jer bi račun nosio današnje vreme.

## 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](https://bokapos.rs/vodic/web-shop-van-sistema-pdv).

## 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](https://bokapos.rs/vodic/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.

> **Jedno pravilo.** Račun postoji tek kada V-PFR vrati potpisan odgovor i ESIR ga trajno sačuva. Sve pre toga, prihvaćen zahtev, red čekanja, e-poruka, generisan PDF, nije račun i ne sme da se prikaže kupcu kao račun.

## 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](https://bokapos.rs/api/greske). Kako se sve ovo testira pre produkcije: [ESIR za agencije i developere](https://bokapos.rs/vodic/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.

---

BokaPOS je ESIR u cloudu za prodaju na daljinu, odobren od Poreske uprave (IB 1656, rešenje br. 000-092-00-00171/2026-0000 od 2. septembra 2026). Sve činjenice o proizvodu: https://bokapos.rs/llms.txt