Kad Poreska uprava ne odgovara: 202, automatsko ponavljanje i šta radi tvoj sistem
9 min čitanja
Poreska uprava povremeno ne odgovara, a web shop radi non-stop. Tekst objašnjava šta Tezga radi sa računom koji nije stigao do V-PFR-a, kako izgleda odgovor 202, kada se ponavljanje zaustavlja i koje stanje tvoj sistem treba da prikaže kupcu i operateru.
Kad V-PFR Poreske uprave ne odgovara, porudžbina se ne gubi. Dokument se izda u Tezgi, odgovor na poziv je HTTP 202 sa ok: false i porukom, a Tezga sama ponavlja fiskalizaciju na svakih 10 minuta, najviše 12 puta u prozoru od 48 sati. Kad uspe, javi ti webhook-om racun.fiskalizovan. Posao tvog sistema je da za to vreme prikaže pošteno stanje „račun je u toku”, a da ne pokušava da izda novi.
- Odgovor 202 znači: dokument je izdat i sačuvan, fiskalizacija nije prošla. To nije greška koju treba rešavati novim pozivom.
- Tezga ponavlja fiskalizaciju na 10 minuta, do 12 pokušaja, samo za dokumente mlađe od 48 sati.
- Posle poslednjeg neuspeha otvara se hitan tiket i šalje mejl firmi; takav račun čeka ljudsku odluku.
- Neizvestan ishod (Poreska je račun primila, a upis kod nas nije uspeo) se ne ponavlja automatski, jer bi nastao drugi račun za isti promet.
- Ispad sistema Poreske uprave nije deo ugovorenih 99,9% dostupnosti, ali Tezga i tada prima porudžbine i izdaje dokumente.
Šta je odgovor 202 i šta znači za porudžbinu?
Poziv POST /order ima dva uspešna ishoda. Odgovor 200 znači da je dokument izdat i fiskalizovan. Odgovor 202 znači da je dokument izdat, ali ga Poreska uprava još nije prihvatila: telo nosi ok: false, status greska i poruku u polju fiskalGreska, a opis fiskalnog dela (fiskalni) je prazan. Dokument i dalje ima svoj broj, pa ga tvoj sistem može da veže za porudžbinu.
Isti obrazac važi za refundaciju, avans i kopiju: dokument nastane, a PFR ga nije prihvatio. Kod storna i pune refundacije ponovljen zahtev šalje istu refundaciju, dok se refundacija po stavkama ne ponavlja ručno, jer fiskalizaciju ponavlja Tezga.
Ponavljanje radi bez tvog učešća. Tvoj sistem u tom vremenu samo prikazuje stanje i čeka događaj.
Kada se ponavljanje ne radi automatski?
Granice su namerne, da ponavljanje ne postane bušenje državnog servisa i da ne napravi dupli račun. Tri slučaja ostaju čoveku, a svaki se vidi kao tiket u aplikaciji:
| Slučaj | Zašto se ne ponavlja | Šta se dešava umesto toga |
|---|---|---|
| Neizvestan ishod | Poreska je račun primila (zapis nosi PFR broj), a upis kod nas nije uspeo; ponavljanje bi napravilo drugi račun za isti promet | Ljudska odluka, bez automatskog ponavljanja |
| Firma bez bezbednosnog elementa | Sertifikat ne stiže sam, pa ponavljanje ne pomaže | Jedan sistemski tiket po firmi, ne po računu; račun se ponavlja posle unosa sertifikata |
| Firma na lokalnom procesoru (L-PFR), račun nastaje u oblaku | Zahtev sa našeg servera ne može da stigne do procesora u objektu firme | Tiket sa pravim lekom: prelazak na V-PFR za račune iz oblaka |
Pretplata se u ponavljanju namerno ne proverava: promet je već nastao, pa obaveza evidentiranja ne prestaje time što je nalog zamrznut.
Šta tvoj sistem treba da prikaže?
Porudžbina u ovom scenariju ima tri stanja, a ne dva. Prvo, račun još nije traženo izdati. Drugo, račun je izdat, ali nije fiskalizovan (odgovor 202). Treće, račun je fiskalizovan i ima PFR broj, QR i javni link. Ako tvoj sistem zna samo „uspelo” i „neuspelo”, svaki 202 će izgledati kao greška i neko će pokušati da je ispravi novim pozivom.
- Kupac. Potvrda porudžbine odmah, bez fiskalnog linka. Link i PDF računa šalji kad stigne
racun.fiskalizovan, iz javnog linka u događaju. Mejl sa računom iz Tezge ne ide dok fiskalizacija nije uspela. - Operater. Prikaz „račun u toku” uz vreme prvog pokušaja, a ne crvena greška.
- Isti poziv ponovo. Ponavljanje sa istim
externalIdne pravi drugi račun, ali ništa ne popravlja: fiskalizaciju ponavlja Tezga. - Nikad nov
externalId. Nov broj za istu porudžbinu pravi drugi dokument, a to je upravo ono što zaštita od dupliranja treba da spreči.
Kako se prati i kad treba reagovati?
Postoje tri izvora. Prvi je događaj racun.greska u trenutku neuspeha, a racun.fiskalizovan kad prođe. Drugi je GET /documents po externalId, za dnevno usklađivanje otvorenih porudžbina. Treći je javna strana statusa, bez prijave: baza, fiskalizacija sa procentom uspešnih računa u poslednja 24 sata, slanje mejlova i spisak tekućih i poslednjih deset incidenata. Nadzor na svakih 10 minuta proverava V-PFR, SUF, SEF, mejl i bazu, a korisnici aplikacije vide traku da problem nije kod njih.
Alarm ima smisla na starost: dokument izdat pre više od, recimo, dva sata a bez PFR broja je neobično, a stariji od 48 sati je van automatskog ponavljanja. Prag tvoje firme je poslovna odluka, ali brojka mora da postoji.
Šta ovo znači za ugovor i SLA?
Ugovorenih 99,9% mesečne dostupnosti meri dostupnost API-ja za izdavanje računa i javnih strana računa, i ne ulazi ispad sistema Poreske uprave (V-PFR, SUF), na koji Tezga ne može da utiče. Ipak, i tada Tezga prima porudžbine, izdaje dokumente i sama ponavlja fiskalizaciju. Pregled uslova je na strani ugovor sa dobavljačem fiskalnog API-ja.
Za čist web shop V-PFR je dovoljan: L-PFR je potreban obvezniku koji promet na malo ne obavlja isključivo preko interneta. Pojmovi su u rečniku: V-PFR i L-PFR.
Izvori: Zakon o fiskalizaciji (Sl. glasnik RS 153/2020, 96/2021, 138/2022), član 6 stav 4; Tehničko uputstvo za ESIR (purs.gov.rs); OpenAPI opis Tezga eKase, verzija 1.6.0 (pos.narbiz.com/api/openapi.json), ИБ 1597; javna strana statusa (tezgafiskal.com/status). Tekst nije pravni savet.
Česta pitanja
Da li porudžbina propada kad Poreska uprava ne radi?
Ne. Dokument se izda i sačuva, odgovor je 202 sa ok: false, a Tezga sama ponavlja fiskalizaciju. Porudžbina u tvom sistemu ostaje validna, samo je račun u stanju „izdat, nije fiskalizovan” dok pokušaj ne prođe.
Koliko dugo Tezga ponavlja fiskalizaciju?
Na svakih 10 minuta, najviše 12 pokušaja po dokumentu, i samo za dokumente mlađe od 48 sati. Posle poslednjeg neuspeha otvara se hitan tiket i šalje mejl firmi, a dokument ostaje za ljudsku odluku.
Treba li da pošaljem isti zahtev ponovo kad dobijem 202?
Ne treba, jer fiskalizaciju ponavlja Tezga. Ponovljen zahtev sa istim externalId ne pravi drugi račun, ali ni ne ubrzava fiskalizaciju. Nikad ne šalji nov externalId za istu porudžbinu.
Kako da znam da je račun posle ponavljanja prošao?
Stiže webhook racun.fiskalizovan sa PFR brojem i javnim linkom, a stanje je uvek dostupno kroz GET /documents po tvom externalId. Preporuka je da koristiš oba: događaj za brzinu, upit za usklađivanje.
Šta je neizvestan ishod i zašto se ne ponavlja?
To je slučaj kad je Poreska uprava račun primila, a upis kod nas nije uspeo. Ponavljanje bi državi poslalo drugi račun za isti promet, pa takav dokument čeka ljudsku odluku, a ne automatiku.
Da li kupac dobija račun mejlom dok fiskalizacija ne prođe?
Ne. Mejl sa računom ne ide kupcu dok fiskalizacija nije uspela, jer račun bez fiskalnog QR koda ne bi bio gotov. Link i PDF uzmi iz javnog linka u događaju racun.fiskalizovan i pošalji ih iz svog sistema.
Računa li se pad Poreske uprave u ugovorenu dostupnost?
Ne. Ugovorenih 99,9% meri dostupnost Tezginog API-ja i javnih strana računa, a ispad sistema Poreske uprave (V-PFR, SUF) se ne računa jer na njega nije moguće uticati. Tezga u tom vremenu i dalje prima porudžbine i izdaje dokumente.
Ponašanje pri ispadu možeš da proveriš u simulaciji pre produkcije, sa istim ključem i istim kodom. Probni pristup traje 48 sati i otvara se na strani probaj fiskalnu kasu, a ceo API je opisan na strani API za fiskalizaciju.
