B2B kupac u web shopu: fiskalni račun i SEF e-faktura iz iste porudžbine

9 min čitanja

Veliki web shop retko ima samo građane kao kupce: porudžbine stižu i od firmi, a firmi treba dokument koji može da knjiži. Tekst pokazuje kako se iz jedne porudžbine, po PIB-u kupca, izdaje fiskalni račun, e-faktura na SEF ili oba, i šta shop dobija nazad.

Kad u web shopu poruči firma, a ne građanin, ista porudžbina može da traži drugi dokument. U Tezga API-ju izbor ide kroz polje tok i kroz PIB kupca: bez PIB-a nastaje fiskalni račun, a sa PIB-om izdavalac bira između fiskalnog računa, e-fakture na SEF i oba. Bitna zamka je podrazumevana vrednost: sa PIB-om, a bez zadatog toka, nastaje e-faktura, ne fiskalni račun.

Ukratko
  • Porudžbina bez PIB-a kupca je uvek fiskalni račun za fizičko lice, bez obzira na zadati tok.
  • Porudžbina sa PIB-om i bez polja tok postaje e-faktura (tok sef), ne fiskalni račun. Zato tok uvek šalji izričito.
  • Tok fiskalni_i_sef izdaje fiskalni račun i isti dokument šalje na SEF sa PFR brojem kao referencom; traži PIB kupca.
  • Tok sef na SEF šalje sam samo uz posaljiNaSef: true; inače dokument čeka slanje.
  • Kupac iz javnog sektora sa JBKJS ne ide u fiskalni tok, a firma koja nije obveznik fiskalizacije ne može da zada fiskalni tok.
  • Koji dokument je pravi za konkretnu prodaju određuje propis i knjigovođa. Tok se samo podesi tako da se to desi samo.

Šta se izdaje kad poruči firma, a šta kad građanin?

Prodaja građaninu je promet na malo i za nju ide fiskalni račun. Prodaja firmi van maloprodajnog objekta nije promet na malo i ide fakturom, a između firmi u Srbiji to je po pravilu e-faktura kroz SEF. Granica nije uvek čista: kad firma kupuje u prodavnici, izdaje se fiskalni račun na kome može da stoji PIB kupca. Isti pojmovi su objašnjeni u rečniku: B2B i B2C, e-faktura i SEF.

Za web shop to znači da jedan kanal prodaje proizvodi dve vrste dokumenata, a odluka se donosi po kupcu, za svaku porudžbinu posebno. Ako to rešavaš ručno, neko u knjigovodstvu svaki dan razvrstava porudžbine. Ako to rešava API, razvrstavanje je pravilo u kodu.

Iz jedne porudžbine do fiskalnog računa, e-fakture ili oba Porudžbina web shop, ERP, marketplace Tezga PIB kupca + polje tok POST /order Fiskalni račun bez PIB-a, ili tok fiskalni Fiskalni račun + SEF tok fiskalni_i_sef E-faktura na SEF sa PIB-om, tok sef (podrazumevano)

Jedan poziv, tri moguća ishoda. Bez PIB-a kupca ishod je uvek fiskalni račun, a sa PIB-om i bez zadatog toka podrazumeva se e-faktura.

Vrednost polja tokŠta nastajeKada se koristiŠta dobija tvoj sistem
fiskalniFiskalni račun preko V-PFR-aGrađanin, ili firma koja kupuje na maloprodajnom računuPFR broj, QR i javni PDF u odgovoru; webhook racun.fiskalizovan
sefE-faktura, bez fiskalizacijeČist B2B kad knjigovođa traži e-fakturu; podrazumevano kad je PIB poslat, a tok nijeDokument; na SEF ide uz posaljiNaSef: true, ishod u polju sef; nema fiskalnog događaja
fiskalni_i_sefFiskalni račun, pa isti dokument na SEF sa PFR brojem kao referencomPorudžbina sa PIB-om koja treba i jedno i drugoPFR broj i ishod slanja na SEF u istom odgovoru
avansAvansni račun na zbir porudžbinePlaćeno unapred, isporuka kasnijeAvans se zatvara pozivom /advance sa istim externalId

Kako Tezga prepoznaje B2B kupca u porudžbini?

Po PIB-u. Ako uz porudžbinu stigne PIB, kupac se upisuje kao pravno lice: na fiskalnom računu ide identifikacija kupca 10:PIB, a kupac se nađe ili napravi u šifarniku, da e-faktura ima identifikaciju kupca. Provera PIB-a ide kroz kontrolnu cifru, a podaci firme kroz registar.

Gotovi konektori PIB uzimaju iz polja koje platforma već ima: Magento iz customer_taxvat, PrestaShop iz polja siret, WooCommerce iz meta polja za PIB ili VAT broj, a Shopify iz napomene porudžbine u obliku „PIB: 123456789”. Kod sopstvenog sajta PIB ide u objekat kupac u telu zahteva.

POST /api/integrations/order?provider=custom
{
  "externalId": "WEB-100245981",
  "tok": "fiskalni_i_sef",
  "nacinPlacanja": "Prenos",
  "posaljiMejl": true,
  "kupac": {
    "naziv": "Primer doo",
    "pib": "123456789",
    "email": "racunovodstvo@primer.rs",
    "adresa": "Ulica 1", "mesto": "Beograd", "postanskiBroj": "11000"
  },
  "stavke": [
    { "sifra": "ART-001", "naziv": "Artikal", "kolicina": 10,
      "cenaSaPdv": 1200, "poreskaStopa": "20" }
  ]
}

Koja pravila štite od pogrešnog dokumenta?

Kad je tok izričito fiskalni ili fiskalni_i_sef, Tezga proverava dve stvari pre izdavanja. Firma mora da bude obveznik fiskalizacije, inače se zahtev odbija uz poruku da se koristi tok sef. Kupac sa JBKJS brojem, dakle javni sektor, ne sme u fiskalni tok: njemu se izdaje isključivo e-faktura, pa zahtev ne prolazi. Tok fiskalni_i_sef bez PIB-a se takođe odbija, jer e-faktura ne može da nastane bez identifikacije kupca.

Predračun ima svoje pravilo: nikad ne ide na SEF, jer nije faktura. Njegov tok se pamti i izvršava tek kad uplata stigne i nastane konačan dokument. Fiskalizacija samog predračuna nije moguća u toku sef, jer je predračun po definiciji dokument pre prometa na malo.

Šta shop dobija nazad?

Odgovor ima isti oblik kao za fiskalni račun, uz polje sef koje kaže kako je prošlo slanje na SEF. Polje izostaje kad slanje nije traženo. Za fiskalni_i_sef slanje na SEF ide tek kad je fiskalizacija uspela: ako Poreska uprava ne prihvati račun, odgovor je 202 sa ok: false, dokument ostaje izdat, Tezga sama ponavlja fiskalizaciju, a slanje na SEF u tom pozivu nije ni pokušano.

Za čist tok sef fiskalnog događaja nema, jer se dokument ne fiskalizuje. Sistem koji sluša webhook-ove zato mora da zna da kod B2B porudžbine ishod čita iz polja sef odgovora, a ne čeka racun.fiskalizovan. O webhook-ovima u celini piše vodič za webhook-ove fiskalizacije. Mejl sa računom ne ide kupcu dok fiskalizacija nije uspela.

Šta mora da bude podešeno pre prve B2B porudžbine?

Dve stvari. Prva je API: poziv ka /order je deo paketa Biznis i Enterprise nivoa, a firma na nižem paketu dobija 402. Druga je SEF veza: firma se na SEF povezuje svojim API ključem, koji se pravi na SEF portalu i unosi u Podešavanja, Državni servisi, SEF. Slanje se izvršava isključivo ključem same firme. Bez ključa odgovor ima sef.status: nije_povezan i dokument čeka ručno slanje, pa se posle unosa ključa ne gubi.

E-fakture su u aplikaciji od paketa Start, ali izdavanje preko API-ja traži paket Biznis. Pun spisak razlika je na strani uporedi pakete.

Gde se u praksi najčešće greši?

  • Oslanjanje na podrazumevani tok. Sa PIB-om i bez polja tok nastaje e-faktura, ne fiskalni račun. Ko očekuje fiskalni račun, mora da zada fiskalni ili fiskalni_i_sef.
  • PIB u pogrešnom polju. Ako PIB ostane u slobodnom tekstu koji konektor ne čita, firma dobije račun kao fizičko lice. Proveri polje koje tvoja platforma koristi pre prve prave porudžbine.
  • Ista vrednost externalId za dva kanala. Jedinstvenost važi po firmi, provajderu i externalId, pa dva sajta preko custom sa istim brojačem porudžbina dele istu adresu. Dodaj oznaku sajta kao prefiks.
  • Čekanje pogrešnog događaja. Za tok sef nema racun.fiskalizovan.
  • Test na produkciji. Pre prvog poziva pročitaj polje okruzenje iz GET /tax-labels: kaže da li bi poziv napravio pravi račun.

Izvori: Zakon o fiskalizaciji (Sl. glasnik RS 153/2020, 96/2021, 138/2022); Pravilnik o vrstama fiskalnih računa, tipovima transakcija i načinima plaćanja; pravila Sistema elektronskih faktura (efaktura.mfin.gov.rs); OpenAPI opis Tezga eKase, verzija 1.6.0 (pos.narbiz.com/api/openapi.json), ИБ 1597. Tekst nije pravni savet; za svoju prodaju proveri sa knjigovođom.

Česta pitanja

Mora li web shop da šalje e-fakturu svakom kupcu koji je firma?

To zavisi od vrste prodaje i propisa, a odluku donosi knjigovođa. Prema rečniku fiskalizacije, između firmi u Srbiji faktura po pravilu ide kao e-faktura kroz SEF, a kupovina u maloprodajnom objektu ostaje fiskalni račun sa PIB-om kupca. Tezga omogućava oba toka, pa se pravilo menja u kodu, ne u procesu.

Šta nastaje ako porudžbina nosi PIB, a ne zadam tok?

Nastaje e-faktura, jer je podrazumevani tok za porudžbinu sa PIB-om sef. Da bi nastao fiskalni račun, zadaj fiskalni ili fiskalni_i_sef. Da bi e-faktura sama otišla na SEF, pošalji i posaljiNaSef: true.

Kako se u odgovoru vidi da je e-faktura stigla na SEF?

Ishod slanja je u polju sef odgovora na /order, sa statusom i porukom. Stanje dokumenta možeš da proveriš i kasnije, kroz GET /documents po svom externalId, bez čuvanja Tezginog identifikatora.

Može li ista porudžbina da bude i fiskalni račun i e-faktura?

Može, kroz tok fiskalni_i_sef: izdaje se fiskalni račun, a isti dokument ide na SEF kao e-faktura sa PFR brojem kao referencom. Koristi se kad firma kupac traži oba dokumenta, i traži PIB kupca u porudžbini.

Šta ako firma nema svoj SEF ključ u Tezgi?

Prodaja ne staje i dokument se ne gubi. Odgovor nosi sef.status: nije_povezan uz poruku da firma nema SEF API ključ, a dokument čeka ručno slanje dok se ključ ne unese u Podešavanja, Državni servisi, SEF.

Da li kupac iz javnog sektora može da dobije fiskalni račun?

Ne kroz fiskalni tok. Kupac sa JBKJS brojem se vodi kao javni sektor i za njega se izdaje isključivo e-faktura, pa zahtev za fiskalni tok vraća grešku. Zato šifarnik kupaca treba da bude tačan pre nego što prva takva porudžbina stigne.

Koliko košta izdavanje e-fakture kroz API?

API pozivi se ne naplaćuju po pozivu. U pretplati je uključeno do 3.000 fiskalnih računa mesečno, preko toga 2 dinara po računu, a Enterprise nivo ima fiksni model i model po računu, opisane na strani Enterprise.

Mogu li da testiram B2B tok bez slanja pravog dokumenta?

Možeš, u sandbox okruženju Poreske uprave ili u simulaciji, sa istim ključem i istim kodom. Okruženje je osobina naloga i čita se iz polja okruzenje u odgovoru GET /tax-labels.

Ako tvoj shop već ima B2B kupce, najbrži put je da izdaš jednu probnu porudžbinu sa PIB-om u simulaciji i vidiš šta nastaje. Probni pristup traje 48 sati i otvara se na strani probaj fiskalnu kasu, a ceo API je opisan na strani API za fiskalizaciju.