Fiskaliza

Taksat dhe rrumbullakimi

Kategoritë tatimore A, C, D dhe E, dhe si llogariten grupet e taksave e totalet nga çmime me TVSH të përfshirë.

Fiskaliza i llogarit vetë të gjitha shumat. Ti dërgon çmime njësie dhe një kategori tatimore për çdo rresht; gjithçka tjetër nxirret.

Totalet janë rezultat, jo input

subtotal_cents, total_cents dhe tax_groups shfaqen te komanda dhe te kuponi pasi Fiskaliza i ka llogaritur. Një shitje ka nevojë vetëm për çmime, sasi dhe një kategori tatimore për çdo rresht.

Kategoritë tatimore

Këto janë kategoritë e ATK-së dhe të vetmet norma që shërbimi pranon:

KategoriaNormaKuptimi
A0%E përjashtuar
C0%Me normë zero
D8%E reduktuar
E18%Standarde

A dhe C janë të dyja 0% por mbeten të dallueshme në grupet e taksave. Mos i bashko dhe mos i zëvendëso me njëra-tjetrën.

Në kupon këto shtypen si TVSH D 8% dhe TVSH E 18%.

Çmimet janë me taksë të përfshirë

unit_price_cents është çmimi bruto i njësisë, në cent të plotë.

EUR 1.18  ->  unit_price_cents: 118

Kjo do të thotë se taksa nxirret nga brenda çmimit, jo shtohet mbi të.

Si llogaritet një shitje

Shuma e rreshtit

Çmimi shumëzohet me sasinë dhe rrumbullakohet half up në cent të plotë. Pastaj zbritet zbritja e të gjithë rreshtit.

Zbritja nuk mund ta kalojë subtotalin e llogaritur të rreshtit.

Grumbullimi për kategori

Shumat bruto të zbritura mblidhen për çdo kategori tatimore.

Taksa dhe neto

Për çdo kategori:

tax  = round_half_up(gross * rate / (100 + rate))
net  = gross - tax

Për një kafe prej 118 centësh në kategorinë E (18%):

tax = round_half_up(118 * 18 / 118) = 18
net = 118 - 18 = 100

Rezultati shfaqet si tax_groups, ku çdo grup ka category, taxable_cents dhe tax_cents.

Sasitë

quantity është numër pozitiv me maksimum tre shifra dhjetore; analizohet saktësisht në një të mijtat e plota.

{ "quantity": 1 }
{ "quantity": 0.25 }
{ "quantity": 1.001 }

Parazgjedhja është 1. Njësia (unit) ka parazgjedhje piece dhe type ka parazgjedhje GOOD.

Artikujt e njëjtë bashkohen vetvetiu

Rreshtat që përputhen në emër, njësi, tip, kategori takse dhe çmim njësie bashkohen në një rresht të vetëm kuponi me sasinë dhe zbritjet e mbledhura, duke ruajtur ID-në dhe pozitën e rreshtit të parë. Lexo artikujt e komandës për të mësuar cilat ID mbijetuan — një kthim i referohet atyre, jo atyre që dërgove.

Taksa te kthimet

Kthimet nuk e rillogaritin taksën nga e para. Ato alokojnë nga bilancet e mbetura origjinale të kategorisë.

Kthimi përfundimtar kundrejt një shitjeje konsumon shumat e mbetura ekzakte dhe i rregullon qindarkat e rrumbullakimit. Prandaj një seri kthimesh të pjesshme mblidhet gjithmonë saktësisht në shitjen origjinale, pa mbetje.

Shih Kthimet dhe anulimet.

Shitjet me total zero

Vetëm sale_type: "FREE_SUPPLY" lejohet të ketë total zero — dhe duhet ta ketë. Çdo lloj tjetër shitjeje duhet të ketë total pozitiv.

{
  "external_id": "gift_123",
  "sale_type": "FREE_SUPPLY",
  "occurred_at": "2026-08-25T10:00:00+02:00",
  "items": [
    { "name": "Coffee", "unit_price_cents": 118, "discount_cents": 118, "tax_category": "E" }
  ]
}

Operacionet me total zero nuk kanë fare rreshta pagese.

Pagesat

payments ndjek rregulla të thjeshta:

  • Mënyra e pagesës është gjithmonë e shprehur.
  • Me një pagesë, mungesa e amount_cents nënkupton totalin e llogaritur.
  • Me dy ose më shumë pagesa, çdo amount_cents është i detyrueshëm, pozitiv, dhe shuma duhet të japë saktësisht totalin.
  • Një total jozero kërkon pagesa.
  • Një operacion me total zero nuk ka rreshta pagese; edhe një pagesë e vetme pa shumë normalizohet në listë bosh.

Tipet e lejuara: CASH, CREDIT_CARD, DEBIT_CARD, BANK_ACCOUNT, CHEQUE, SMS, VOUCHER, CRYPTO_CURRENCY, OTHER.

Pagesat me shumë zero refuzohen

amount_cents duhet të jetë rreptësisht pozitiv kur dërgohet.