# OpenCart fiskalizacija u Srbiji: fiskalni račun preko BokaPOS API-ja

> OpenCart ekstenzije se vezuju za događaje, pa je fiskalizacija jedna ekstenzija koja na promeni statusa porudžbine pozove BokaPOS API. BokaPOS nema gotovu OpenCart ekstenziju; developer je napravi oko API-ja, obično za dan.

Izvor: https://bokapos.rs/integracije/opencart

OpenCart prodavnice u Srbiji podležu istim pravilima fiskalizacije kao svaki web shop. Račun izdaje odobren ESIR preko V-PFR-a, a kupac ga dobija elektronski. Pregled: [ESIR za web shop](https://bokapos.rs/vodic/esir-za-web-shop).

Primer ispod je isti poziv koji radi za svaku platformu: token, pa jedan `POST /v1/fiscal-documents` sa idempotentnim ključem porudžbine. Kompletna dokumentacija sa primerima u pet jezika je na stranici [API](https://bokapos.rs/api).

**Ukratko**

- Ekstenzija na događaju promene statusa porudžbine poziva BokaPOS API.
- Poreske klase OpenCarta se mapiraju na oznake sa `GET /v1/tax-rates`.
- PFR broj i verifikacioni link se čuvaju uz porudžbinu i prikazuju u adminu.
- Povraćaj se šalje kao fiskalna refundacija sa identifikacijom kupca.
- Sandbox besplatan, produkcija posle aktivacije bezbednosnog elementa.

## Gde se integracija zakači

Ekstenzija registruje događaj koji OpenCart emituje kada se porudžbini doda istorija statusa. Na izabranom statusu ekstenzija sastavi zahtev iz stavki, popusta, dostave i plaćanja, pozove BokaPOS i sačuva PFR broj, link i status u sopstvenoj tabeli. Za povraćaj admin unosi identifikaciju kupca i ekstenzija šalje fiskalnu refundaciju.

## Koraci integracije

1. **Nalog i sandbox.** Zatražite BokaPOS pristup: sandbox pristupni podaci i probni bezbednosni element su besplatni.
2. **Podešavanja ekstenzije.** Client id i tajna, obveznik i poslovni prostor, status koji pokreće fiskalizaciju, mapiranje poreskih klasa na oznake sa `GET /v1/tax-rates` i načina plaćanja na sedam zvaničnih vrsta.
3. **Događaj na statusu.** Na statusu pošaljite `POST /v1/fiscal-documents` sa idempotentnim ključem iz id-a porudžbine. Prikažite rezultat u admin pregledu porudžbine.
4. **Račun kupcu.** Priložite PDF iz `/representations/` uz OpenCart e-poštu ili uključite BokaPOS modul E-mail.
5. **Povraćaj i produkcija.** Povraćaj šalje fiskalnu refundaciju sa referencom i identifikacijom kupca. Posle testova prelazite na produkcione pristupne podatke.

Obim posla: Tipično jedan dan rada developera koji poznaje OpenCart ekstenzije, plus testiranje refundacije.

## Isti poziv za svaku platformu

```bash
curl -X POST "https://auth.bokapos.rs/realms/boka/protocol/openid-connect/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=$BOKAPOS_CLIENT_ID" \
  -d "client_secret=$BOKAPOS_CLIENT_SECRET"

curl -X POST "https://api.bokapos.rs/v1/fiscal-documents" \
  -H "Authorization: Bearer $BOKAPOS_TOKEN" \
  -H "Idempotency-Key: order-4127-sale-1" \
  -H "Content-Type: application/json" \
  -d '{
  "taxpayerId": "3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11",
  "businessPremiseId": "b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22",
  "clientReference": "ORDER-4127",
  "invoiceType": "NORMAL",
  "transactionType": "SALE",
  "cashier": {
    "id": "web-shop",
    "displayName": "Web shop"
  },
  "items": [
    {
      "name": "Bluetooth slušalice",
      "unitOfMeasure": "kom",
      "quantity": 1,
      "unitPrice": 8990,
      "gtin": "8606012345678",
      "taxLabels": [
        "F"
      ]
    }
  ],
  "payments": [
    {
      "type": "CARD",
      "amount": 8990
    }
  ],
  "metadata": {
    "orderId": "4127",
    "channel": "web"
  }
}'
```

## Česta pitanja

**Da li BokaPOS ima gotovu OpenCart ekstenziju?**

Trenutno ne. API je dokumentovan sa primerima u PHP-u i sandbox je besplatan, pa developer ekstenziju napravi za dan.

**Radi li isto za OpenCart 3 i 4?**

Princip je isti: događaj promene statusa, jedan poziv API-ja, čuvanje odgovora. Razlikuje se samo način registrovanja ekstenzije u datoj verziji.

**Kako se šalje račun kupcu?**

Kao PDF prilog ili link u e-pošti. U elektronskom dokumentu QR kod zamenjuje verifikacioni link Poreske uprave.

**Šta sa pouzećem?**

Pouzeće je gotovina; račun se izdaje pri isporuci, pa ekstenzija fiskalizuje na statusu isporučeno, a ne pri prijemu porudžbine.
