Tehnički vodič

Integracija sa BokaLPFR-om (POS-to-SDC v3)

Kako da povežete kasu (ESIR) sa BokaLPFR-om preko standardnog POS-to-SDC v3 HTTP interfejsa. Bez SDK-a: dovoljan je HTTP klijent. Endpointi, šeme, šifarnik i preporuke, izvedeni iz same implementacije.

Preuzmi PDF

Ažurirano: 28. avgust 2026. · POS-to-SDC v3

Uvod i opseg

BokaLPFR povezuje kasu (ESIR) sa bezbednosnim elementom Poreske uprave (pametna kartica) i Sistemom za upravljanje fiskalizacijom (SUF). ESIR ne potpisuje račune sam i ne komunicira direktno sa karticom niti sa SUF-om: sve ide kroz lokalni HTTP API BokaLPFR-a.

Za integraciju nije potreban proizvođački SDK. Dovoljan je HTTP klijent koji ume da pošalje GET i POST zahteve sa JSON telom.

Van opsega su komunikacija BokaLPFR-a sa SUF-om, potpisivanje na kartici, iščitavanje i konfiguracija servisa. Ti procesi su transparentni za ESIR i opisani su u Korisničkom uputstvu i Uputstvu za instalaciju.

Osnovna adresa i transport

ParametarPodrazumevana vrednost
Osnovna adresa (base URL)http://127.0.0.1:8443/api/v3/
TransportHTTP preko loopback interfejsa (isti računar)
Port8443
Format porukaJSON, kodiranje UTF-8
Content-Type (zahtev)application/json
  • Ako ESIR radi na istom računaru kao BokaLPFR (preporučeno), koristi loopback adresu iznad, bez dodatne konfiguracije, odmah po instalaciji.
  • Ako ESIR radi na drugom uređaju u lokalnoj mreži, pristup mora biti eksplicitno omogućen (vidi ispod) i ESIR koristi IP adresu računara na kome je BokaLPFR.
  • Port je podesiv u konfiguraciji; u tom slučaju uskladite i ESIR i pravilo zaštitnog zida.

Mrežni pristup i bezbednost

Bezbednosna granica POS API-ja je loopback interfejs. Na samom API-ju nema tokena ni lozinke: pretpostavka je da je pristup 127.0.0.1 već ograničen na aplikacije na istom računaru.

PraviloPonašanje
Loopback (podrazumevano)Prihvataju se samo zahtevi sa 127.0.0.1. Zahtev sa druge adrese dobija 403 Forbidden.
LAN izlaganje (opciono)Aktivira se u konfiguraciji (AllowLan=true) uz obaveznu listu dozvoljenih IP adresa. Zahtev van liste dobija 403.
Ograničenje brzinePo IP adresi, fiksni prozor od 1 minuta, podrazumevano 600 zahteva/min. Prekoračenje vraća 429 Too Many Requests.
IzuzetakGET /api/v3/attention nije ograničen brzinom.

Konvencije zahteva i odgovora

  • Nazivi polja. Odgovori su u camelCase. Nazivi polja u zahtevu su neosetljivi na velika i mala slova (prihvata se i InvoiceType i invoiceType). Referentna tela iz Tehničkog vodiča PU koriste PascalCase, pa su tako dati i primeri zahteva ovde.
  • Enumeracije. U zahtevu: naziv člana ("Normal", case-insensitive) ili ceo broj (0). U odgovoru: uvek ceo broj.
  • Prazne vrednosti. Polja sa vrednošću null izostavljaju se iz JSON odgovora.
  • Brojevi. Decimalni razdvajač je tačka. Novčani iznosi najviše 4 decimale; količina najviše 3 decimale.
  • Datum i vreme. ISO 8601 (2026-07-05T01:05:02) ili oblik sa razmakom (2026-07-05 01:05:02). Bez pomeraja se tumači kao lokalno vreme.
  • Zaglavlje RequestId (idempotencija). Opciono, najviše 32 karaktera. Ako je poslato, vraća se u istoimenom zaglavlju odgovora i koristi za idempotenciju i oporavak. Duže od 32 karaktera: 400 + 2801.

Pregled endpointa

MetodaPutanjaNamena
GET/api/v3/attentionBrza provera dostupnosti servisa.
GET/api/v3/statusStatus: identitet, verzije, poreske stope, statusni kodovi (GSC).
GET/api/v3/environment-parametersParametri okruženja (obveznik, lokacija, endpointi, NTP).
POST/api/v3/pinProsleđivanje PIN koda bezbednosnom elementu.
POST/api/v3/invoicesFiskalizacija računa. Vraća fiskalizovane podatke, žurnal i verifikacioni URL.
GET/api/v3/invoices/{requestId}Oporavak: dohvat ranije fiskalizovanog računa po RequestId.

GET /api/v3/attention

GET/api/v3/attention

Najlakša provera da li servis radi. Ne dodiruje karticu, ne troši brojače i nije ograničena brzinom. Odgovor je 200 OK sa praznim telom; bilo koji drugi ishod znači da servis nije dostupan sa te adrese.

Zahtev / odgovor
GET http://127.0.0.1:8443/api/v3/attention
-> 200 OK

GET /api/v3/status

GET/api/v3/status

Vraća trenutni status L-PFR-a. ESIR ga poziva pre izdavanja računa da proveri da li je uređaj spreman i da pročita aktuelne poreske stope.

Šema odgovora (LpfrStatus)

PoljeTipOpis
isPinRequiredbooltrue osim kada je PIN na kartici verifikovan.
auditRequiredbooltrue kada je iščitavanje zahtevano pre daljeg potpisivanja.
sdcDateTimestringTrenutno vreme L-PFR-a (ISO 8601).
lastInvoiceNumberstringBroj poslednjeg izdatog računa.
protocolVersionstringVerzija protokola, 3.0.
secureElementVersionstringVerzija apleta bezbednosnog elementa.
hardwareVersionstringVerzija hardvera, 1.0.
softwareVersionstringVerzija BokaLPFR-a.
deviceSerialNumberstringSerijski broj uređaja (UID bezbednosnog elementa).
makestringBOKA GROUP DOO.
modelstringModel izdanja: BokaLPFR Windows ili BokaLPFR macOS.
msscstring[]Statusni kodovi proizvođača (za sada prazno).
gscstring[]Opšti statusni kodovi (vidi tabelu ispod).
supportedLanguagesstring[]Podržani jezici.
uidstringUID bezbednosnog elementa (null bez kartice).
taxCoreApistringBazna adresa SUF/TaxCore API-ja (sa sertifikata).
currentTaxRatesobjekatTrenutno važeća grupa poreskih stopa.
allTaxRatesobjekat[]Sve poznate grupe poreskih stopa.

Opšti statusni kodovi (gsc)

KodPojavljuje se kada
0100Kartica prisutna i PIN verifikovan.
1300Nema kartice u čitaču.
1500Kartica prisutna, potreban unos PIN-a.
2110Kartica prisutna, ali zaključana.
1400Zahtevano je iščitavanje.
1100Interna memorija pri kraju.
2400L-PFR nije konfigurisan (nema stopa ili adrese za verifikaciju).
0210 / 0220Internet dostupan / nedostupan (izostaje dok je nepoznato).
Primer odgovora
{
  "isPinRequired": false,
  "auditRequired": false,
  "sdcDateTime": "2026-07-11T10:22:41.512+02:00",
  "lastInvoiceNumber": "8ZBU67JM-8ZBU67JM-41",
  "protocolVersion": "3.0",
  "secureElementVersion": "1.0",
  "hardwareVersion": "1.0",
  "softwareVersion": "1.4.0",
  "deviceSerialNumber": "8ZBU67JM",
  "make": "BOKA GROUP DOO",
  "model": "BokaLPFR Windows",
  "mssc": [],
  "gsc": ["0100", "0210"],
  "supportedLanguages": ["sr-Cyrl-RS", "sr-Latn-RS", "en-US"],
  "uid": "8ZBU67JM",
  "taxCoreApi": "https://sandbox.suf.purs.gov.rs/api/v3",
  "currentTaxRates": {
    "groupId": 6,
    "validFrom": "2022-05-01T00:00:00+02:00",
    "taxCategories": [
      {
        "orderId": 0,
        "name": "О-ПДВ",
        "categoryType": 0,
        "taxRates": [{ "label": "А", "name": "20%", "rate": 20.0 }]
      }
    ]
  },
  "allTaxRates": []
}

GET /api/v3/environment-parameters

GET/api/v3/environment-parameters

Vraća parametre okruženja (podaci obveznika i lokacije, adrese servisa, NTP server). Sva polja su opciona i izostaju kada nisu konfigurisana.

PoljeTipOpis
organizationNamestringNaziv obveznika.
serverTimeZonestringVremenska zona servera.
streetstringUlica i broj lokacije.
citystringMesto.
countrystringDržava.
endpointsobjekat[]Lista { name, address } adresa servisa.
environmentNamestringNaziv okruženja (produkciono / sandbox).
logostringLogo okruženja.
ntpServerstringAdresa NTP servera.
supportedLanguagesstring[]Podržani jezici.

POST /api/v3/pin

POST/api/v3/pin

Prosleđuje PIN kod bezbednosnom elementu. PIN je potreban posle svakog restarta servisa ili računara, kao i posle vađenja ili promene kartice (tada GET /status prijavljuje 1500).

  • Telo: JSON string sa PIN-om, npr. "1234"(prihvata se i goli oblik 1234).
  • PIN mora imati tačno 4 cifre.
  • PIN se nikada ne upisuje na disk ni u dnevnike.

Uspešan i neuspešan pokušaj vraćaju 200 OK, a telo je JSON string sa šifrom ishoda:

Telo odgovoraZnačenje
"0100"PIN je ispravan.
"2100"PIN nije ispravan.
"2110"Kartica je zaključana.
"2220"Greška u komunikaciji sa bezbednosnim elementom.
"2400"L-PFR nije konfigurisan / kartica nije spremna.
"2806"Neispravan format PIN-a (nije 4 cifre).

Greške na nivou HTTP zahteva vraćaju 400: pogrešan Content-Type daje 2806, prazno telo 2800.

Zahtev / odgovor
POST http://127.0.0.1:8443/api/v3/pin
Content-Type: application/json

"1234"

-> 200 OK
"0100"

POST /api/v3/invoices

POST/api/v3/invoices

Glavni endpoint: fiskalizuje jedan račun. Zahtev opisuje stavke, plaćanja i tip računa; odgovor sadrži fiskalizovane podatke, žurnal i verifikacioni URL / QR kod.

Šema zahteva (InvoiceRequest)

PoljeTipObaveznoOpis
invoiceTypeenumdaNormal, Proforma, Copy, Training, Advance.
transactionTypeenumdaSale, Refund.
paymentPayment[]da (≥1)Načini plaćanja i iznosi.
itemsInvoiceItem[]da (≥1)Stavke računa.
cashierstringneOznaka ili ime kasira. ≤ 50.
buyerIdstringneIdentifikacija kupca (npr. PIB). Kad postoji: 1..20.
buyerCostCenterIdstringneMesto troška. Kad postoji: 1..50; zahteva buyerId.
invoiceNumberstringneInterni broj računa ESIR-a. Kad postoji: 1..60.
referentDocumentNumberstringne*Obavezno za Refund i Copy. Format XXXXXXXX-XXXXXXXX-N. ≤ 50.
referentDocumentDTstringneDatum referentnog dokumenta. Ne u budućnosti; zahteva referentDocumentNumber.
dateAndTimeOfIssuestringneTraženi datum/vreme izdavanja.
optionsInvoiceOptionsneOpcije prikaza (QR, žurnal).

InvoiceItem

PoljeTipObaveznoOpis
namestringdaNaziv artikla. ≤ 2048.
quantitynumberdaKoličina. > 0, ≤ 3 decimale.
unitPricenumberdaJedinična cena (posle popusta). ≤ 4 decimale.
totalAmountnumberdaUkupan bruto iznos stavke. ≤ 4 decimale.
labelsstring[]da (≥1)Poreske oznake. Bez duplikata.
gtinstringneGTIN. Kad postoji: 8..14 karaktera.

Payment i InvoiceOptions

PoljeTipOpis
payment[].amountnumberIznos plaćanja.
payment[].paymentTypeenumOther, Cash, Card, Check, WireTransfer, Voucher, MobileMoney.
options.omitQRCodeGen"0"/"1""1" izostavlja QR kod. Podrazumevano "0".
options.omitTextualRepresentation"0"/"1""1" izostavlja žurnal u odgovoru. Podrazumevano "0".

Šema odgovora (InvoiceResult)

PoljeTipOpis
requestedBystringUID kartice koja je tražila potpis.
signedBystringUID kartice koja je potpisala račun.
sdcDateTimestringVreme potpisa (ISO 8601).
invoiceCounterstringBrojač računa u okviru tipa.
invoiceCounterExtensionstringEkstenzija brojača (oznaka tipa).
invoiceNumberstringJedinstveni broj računa.
verificationUrlstringURL za verifikaciju računa.
verificationQRCodestringQR kod spreman za štampu.
journalstringTekstualni žurnal računa.
messagesstring"Success" ili poruka L-PFR-a.
totalCounternumberUkupni redni broj računa.
transactionTypeCounternumberRedni broj u okviru tipa transakcije.
totalAmountnumberUkupan iznos računa.
encryptedInternalDatastringŠifrovani interni podaci (base64).
signaturestringDigitalni potpis (base64).
taxItemsTaxItem[]Obračunate poreske stavke.
businessName / locationName / address / district / tinstringPodaci obveznika i lokacije.
taxGroupRevisionnumberRevizija poreske grupe.
mrcstringRegistracioni kod uređaja: 9A-0001-{UID} na Windows izdanju, 9B-0001-{UID} na macOS izdanju.

TaxItem: categoryType (number), rateId (number), label (string), amount (number), rate (number), categoryName (string).

Primer: prodaja (Normal / Sale)

Zahtev
POST http://127.0.0.1:8443/api/v3/invoices
Content-Type: application/json
RequestId: 8f3c1a92e7b04f5c9a1d

{
  "InvoiceType": "Normal",
  "TransactionType": "Sale",
  "Payment": [
    { "Amount": 121.00, "PaymentType": "Cash" }
  ],
  "Items": [
    {
      "Name": "Test artikal",
      "Quantity": 1,
      "UnitPrice": 121.00,
      "Labels": ["А"],
      "TotalAmount": 121.00
    }
  ]
}
Odgovor (ilustrativno)
{
  "requestedBy": "8ZBU67JM",
  "signedBy": "8ZBU67JM",
  "sdcDateTime": "2026-07-11T10:24:03+02:00",
  "invoiceNumber": "8ZBU67JM-8ZBU67JM-42",
  "verificationUrl": "https://sandbox.suf.purs.gov.rs/v/?vl=A0ha...HcQ",
  "verificationQRCode": "iVBORw0KGgoAAAANSUhEUgAA...",
  "messages": "Success",
  "totalCounter": 43,
  "transactionTypeCounter": 42,
  "totalAmount": 121.00,
  "taxItems": [
    { "categoryType": 0, "rateId": 0, "label": "А", "amount": 20.17, "rate": 20.0, "categoryName": "О-ПДВ" }
  ],
  "tin": "100000000",
  "mrc": "9A-0001-8ZBU67JM"
}

Primer: refundacija (Normal / Refund)

Refundacija referiše broj računa originala kroz ReferentDocumentNumber (vrednost invoiceNumber iz odgovora na originalni račun).

Zahtev
{
  "InvoiceType": "Normal",
  "TransactionType": "Refund",
  "Payment": [
    { "Amount": 121.00, "PaymentType": "Cash" }
  ],
  "ReferentDocumentNumber": "8ZBU67JM-8ZBU67JM-42",
  "Items": [
    {
      "Name": "Test artikal",
      "Quantity": 1,
      "UnitPrice": 121.00,
      "Labels": ["А"],
      "TotalAmount": 121.00
    }
  ]
}

Idempotencija

  • Isti RequestId + isto telo vraća keširani prethodni odgovor (račun se ne potpisuje ponovo). Bezbedno za automatske ponovljene pokušaje.
  • Isti RequestId + drugačije telo vraća grešku 2899 (konflikt identifikatora).
  • Bez RequestId račun se potpisuje bez idempotencije. Za pouzdanu integraciju uvek šaljite RequestId.

GET /api/v3/invoices/{requestId}

GET/api/v3/invoices/{requestId}

Dohvata ranije fiskalizovan račun po njegovom RequestId. Namenjeno oporavku ESIR-a posle prekida veze: ako ESIR nije primio odgovor na POST /invoices, ponavlja isti RequestId ovde i dobija (već potpisan) rezultat, bez rizika od dvostruke fiskalizacije.

  • Odgovor: 200 OK sa InvoiceResult telom ako zapis postoji za dati RequestId i aktivnu karticu.
  • Ako zapis ne postoji ili nema kartice, vraća se 200 OK sa telom null.
Zahtev
GET http://127.0.0.1:8443/api/v3/invoices/8f3c1a92e7b04f5c9a1d

Tipovi računa, transakcija i plaćanja

Enumeracije se u zahtevu šalju nazivom člana (case-insensitive) ili celim brojem; u odgovoru se vraćaju kao celi brojevi.

Tip računa (invoiceType)

NazivBrojZnačenje
Normal0Promet (redovan račun).
Proforma1Predračun.
Copy2Kopija (referiše original).
Training3Obuka.
Advance4Avans.

Tip transakcije (transactionType)

NazivBrojZnačenje
Sale0Prodaja.
Refund1Refundacija (referiše original).

Način plaćanja (paymentType)

NazivBrojZnačenje
Other0Drugo bezgotovinsko.
Cash1Gotovina.
Card2Platna kartica.
Check3Ček.
WireTransfer4Prenos na račun.
Voucher5Vaučer.
MobileMoney6Instant plaćanje / mobilni novac.

Poreske oznake i obračun

Svaka stavka nosi jednu ili više poreskih oznaka (labels), npr. А. Skup važećih oznaka i stopa ne definiše ESIR nego dolazi sa kartice i iz komandi SUF-a; ESIR ih čita iz GET /status (currentTaxRates). Nepostojeća ili neaktivna oznaka odbija se greškom 2310.

Tip kategorije (categoryType)

BrojZnačenje
0Porez na neto osnovicu (npr. PDV uračunat u cenu: porez = ukupno × stopa / (100 + stopa)).
1Porez na ukupno.
2Iznos po jedinici (specifična akciza po količini).

Obračun poreza po stavci radi L-PFR na osnovu oznaka i iznosa iz zahteva; rezultat je u taxItems odgovora. ESIR ne mora sam da računa porez: dovoljno je da pošalje ispravne oznake i totalAmount.

Model grešaka

Sve poslovne i validacione greške vraćaju HTTP 400 sa jedinstvenim telom greške. Izuzetak je POST /pin, koji ishod uvek vraća kao 200 sa golom šifrom.

Telo greške
{
  "message": "Request validation failed.",
  "modelState": [
    { "property": "items[0].quantity", "errors": ["2800"] }
  ]
}
  • message: kratak opis (nije za prikaz kasiru).
  • modelState: lista grešaka; svaki element ima property (camelCase putanja polja, prazno za greške na nivou zahteva) i errors (niz šifara).
  • ESIR prikazuje poruku na osnovu šifre iz errors, a ne teksta iz message.

Mapiranje HTTP statusa

SituacijaHTTPTelo
Validaciona / poslovna greška400modelState sa šifrom (2800, 2310, 2400, 2210, 2899...).
POST /pin ishod200Gola šifra kao JSON string ("0100", "2100"...).
Prekoračen limit brzine429(bez tela)
Zahtev van dozvoljene adrese403(bez tela)
Neočekivana interna greška500modelState sa šifrom 1999.

Šifarnik statusnih kodova i grešaka

BokaLPFR vraća isključivo kodove iz šifarnika Tehničkog vodiča PU, uz jedan dodatni kod definisan proizvodom (2410). Sve šifre su tačno četiri cifre.

Informativni i statusni kodovi (GSC)

KodZnačenje
0000Sve je u redu.
0100PIN je ispravan.
0210Internet veza dostupna.
0220Internet veza nedostupna.
1100Interna memorija pri kraju.
1300Pametna kartica nije prisutna.
1400Iščitavanje je zahtevano.
1500Potreban je unos PIN-a.
1999Nedefinisano upozorenje / interna greška.

Greške

KodZnačenje
2100PIN nije ispravan.
2110Kartica je zaključana (višestruki pogrešan PIN).
2210Bezbednosni element zaključan: obavezno iščitavanje pre daljeg potpisivanja.
2220Greška u komunikaciji sa bezbednosnim elementom.
2230Verzija protokola nije podržana.
2300Neispravan zahtev (struktura / format tela).
2310Neispravna poreska oznaka (nepostojeća ili neaktivna stopa).
2400L-PFR nije konfigurisan / nije spreman.
2800Obavezno polje nedostaje.
2801Polje je predugačko.
2802Polje je prekratko.
2803Polje ima neispravnu dužinu.
2804Vrednost polja je van dozvoljenog opsega.
2805Neispravna vrednost polja.
2806Neispravan format polja.
2807Lista ima premalo elemenata.
2808Lista ima previše elemenata.
2809Sertifikat bezbednosnog elementa je istekao.
2820Isteklo vreme obrade zahteva (pokušajte ponovo).
2899Konflikt identifikatora zahteva (RequestId sa drugačijim telom).

Kod specifičan za proizvod

KodZnačenje
2410Pretplatna licenca BokaLPFR-a nije aktivna za produkcionu karticu. Obustavlja se izdavanje novih računa dok se licenca ne aktivira; fiskalni podaci i iščitavanje ostaju dostupni. Sandbox kartice ne podležu ovoj proveri.

Validaciona pravila po polju

Pravila koja POST /invoices primenjuje pre potpisivanja. Kada je obavezno numeričko polje odsutno vraća se 2800, a kada je prisutno ali neispravno 2805.

PoljePraviloŠifra
invoiceTypeDefinisan tip (0..4).2805
transactionTypeDefinisan tip (0..1).2805
paymentNajmanje jedan element.2800
payment[].paymentTypeDefinisan način (0..6).2805
itemsNajmanje jedan element.2807
items[].nameObavezno; ≤ 2048.2800 / 2804
items[].quantityObavezno; > 0; ≤ 3 decimale.2800 / 2805 / 2804
items[].unitPriceObavezno; u opsegu; ≤ 4 decimale.2800 / 2805 / 2804
items[].totalAmountObavezno; u opsegu; ≤ 4 decimale.2800 / 2805 / 2804
items[].labelsNajmanje jedna; bez duplikata.2800 / 2805
items[].labels[]Oznaka mora postojati u aktivnoj poreskoj grupi.2310
items[].gtinOpciono; kad postoji 8..14.2803 / 2805
cashier≤ 50 karaktera.2804
buyerIdKad postoji: neprazno, ≤ 20.2805 / 2804
buyerCostCenterIdKad postoji: neprazno, ≤ 50; zahteva buyerId.2800 / 2801 / 2805
invoiceNumberKad postoji: neprazno, ≤ 60.2805 / 2804
dateAndTimeOfIssueKad postoji: ispravan datum/vreme.2805
referentDocumentNumberObavezno za Refund/Copy; format; ≤ 50.2800 / 2804 / 2806
referentDocumentDTKad postoji: ispravno, ne u budućnosti; zahteva broj.2805 / 2804 / 2800
options.omitQRCodeGen"0" ili "1".2805
options.omitTextualRepresentation"0" ili "1".2805
RequestId (zaglavlje)≤ 32 karaktera.2801

Verifikacioni URL i QR kod

Za svaki uspešno fiskalizovan račun odgovor sadrži verificationUrl i verificationQRCode. ESIR ih samo štampa na računu i ne gradi ih sam.

  • verificationUrl vodi na stranicu za proveru računa u sistemu Poreske uprave. Oblik je {adresa-za-verifikaciju}/v/?vl={podaci}, gde adresa dolazi sa kartice / iz komandi SUF-a, a podaci su base64url zapis potpisanih podataka računa sa kontrolnim zbirom.
  • verificationQRCode je isti sadržaj spreman za štampu kao QR kod.

Adrese za verifikaciju nikada nisu unapred upisane u proizvod niti ih korisnik menja.

Preporuke za integratore

  • Provera pre prvog računa. Pozovite GET /status i proverite da gsc ne sadrži blokirajuće kodove (1300, 1500, 2110, 2210, 2400).
  • PIN. Posle restarta ili promene kartice bezbednosnom elementu je potreban PIN (1500). Pošaljite ga preko POST /pin ili ga korisnik unosi u BokaLPFR Monitor.
  • Idempotencija i oporavak. Uz svaki POST /invoices šaljite jedinstveni RequestId. Posle prekida veze ponovite isti zahtev ili pozovite GET /invoices/{requestId}. Tako izbegavate dvostruku fiskalizaciju.
  • Vremensko ograničenje. Preporučeni HTTP timeout za POST /invoices je najmanje 30 sekundi. Prvi zahtev posle ubacivanja kartice može trajati duže.
  • Obrada grešaka. Prikažite kasiru poruku na osnovu šifre iz šifarnika, a ne na osnovu message.
  • Bez zaobilaženja. Sva komunikacija ide kroz navedene endpointe; ESIR ne priča direktno sa karticom ni sa SUF-om.
  • Poreske oznake iz statusa. Skup važećih oznaka i stopa čitajte iz GET /status; ne upisujte ih fiksno u ESIR.

Verzija protokola i identitet uređaja

StavkaVrednost
Verzija protokola (protocolVersion)3.0
Proizvođač (make)BOKA GROUP DOO
Model (model)BokaLPFR Windows ili BokaLPFR macOS, zavisno od izdanja
Verzija hardvera (hardwareVersion)1.0
Verzija softvera (softwareVersion)1.4.0
Registracioni kod proizvođača9A-0001 (Windows), 9B-0001 (macOS)
IB broj prijave kod Poreske uprave1664 (Windows), 1663 (macOS)
Registracioni kod uređaja (mrc)9A-0001-{UID} ili 9B-0001-{UID}

Windows i macOS izdanje dele isto fiskalno jezgro i isti API, ali se kod Poreske uprave vode kao dva odvojena elementa, pa svako ima svoj registracioni kod i IB broj. Identitet izdanja (make, model, hardwareVersion, registracioni kod) je fiksan i vezan za prijavu; softwareVersion se menja sa svakom verzijom proizvoda. ESIR ne treba da tumači mrc: prosleđuje ga u odgovoru onako kako ga dobije.