Show / Hide Table of Contents

Registrácia dokladu

Úvod

Tip

Vzorové riešenie s použitím knižnice nájdete na našom GitHub projekte.

Čo znamená "Registrácia dokladu"?

Pod pojmom registrácia dokladu sa rozumie proces, kedy nadradená aplikácia (ak ste programátor, tak je to tá, ktorú vyvíjate) odošle do systému PORTOS eKasa informácie o doklade, na ktoré systém PORTOS eKasa zareaguje vykonaním nasledovných krokov:

  1. zvaliduje údaje z nadradenej aplikácie (overí matematické náležitosti, prítomnosť povinných parametrov a iné pravidlá alebo podmienky).
  2. výpočíta výšku obratov v jednotlivých daňových hladinách.
  3. uloží všetky potrebné údaje v dátovom úložisku.
  4. odošle údaje v podobe dátovej správy do systému finančnej správy eKasa.
  5. vyhotoví doklad v požadovanej podobe: papierový doklad, PDF súbor alebo odošle doklad ako PDF prílohu e-mailom.
  6. vráti nadradenej aplikácii všetky relevantné informácie súvisiace s registráciou dokladu.

Ako zaregistrujem doklad?

  • HTTP WEB API
  • Knižnica

Registrácia dokladu pomocou HTTP WEB API je realizovaná volaním

POST {{server_address}}/api/v1/requests/receipts/{{typ_dokladu}}.

Registrácia dokladu pomocou .NET knižnice je realizovaná volaním niektorého z preťažení metódy client.RegisterReceiptAsync().

Všetky údaje, ktoré aplikácia PORTOS eKasa pri registrácii dokladu potrebuje prijať od vašej nadradenej aplikácie sú, spoločne s príkladmi, vysvetlené v nasledujúcich častiach.

1. Typy dokladu

Systém PORTOS eKasa rozlišuje nasledovné typy dokladov:

Typ dokladu Identifikátor typu dokladu
Pokladničný doklad CashRegister
Neplatný doklad Invalid
Paragón Paragon
Faktúra Invoice
Paragón pri úhrade faktúry InvoiceParagon
Doklad označený slovom „Vklad“ Deposit
Doklad označený slovom „Výber“ Withdraw

V ďalších častiach dokumentácie si vysvetlíme, pri akých príležitostiach je vhodné vytvárať každý z týchto dokladov a ako má takýto doklad byť vytvorený. V závislosti od typu dokladu sa totiž mení rozsah povinných informácií, ktoré musí nadradená aplikácia pri registrácii dokladu uviesť.

1.1 Pokladničný doklad

Bežný pokladničný doklad, ktorý je vyhotovovaný pri predaji, prípadne pri vráteni tovaru alebo stornovaní dokladu.

  • HTTP WEB API
  • Knižnica

URL: POST {{server_address}}/api/v1/requests/receipts/cash_register

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "positive",
          "name": "Coca Cola",
          "quantity": {
            "amount": 2.00,
            "unit": "ks"
          },
          "unitPrice": 1.99,
          "price": 3.98,
          "vatRate": 20.00
        },
        {
          "type": "discount",
          "name": "Vernostná zľava",
          "quantity": {
            "amount": 1.00
          },
          "unitPrice": -1.00,
          "price": -1.00,
          "vatRate": 20.00
        }
      ],
      "payments": [
        {
          "name": "Platobná karta",
          "amount": 2.98
        }
      ]
    }
  }
}

Metóda: client.RegisterReceiptAsync(RegisterReceiptRequest, RegisterReceiptPrintContext, CancellationToken)

1.2 Pokladničný doklad - paragón

Dodatočné zaregistrovanie pokladničného dokladu, ktorý bol vyhotovený vo forme paragónu.

Paragón je pokladničný doklad, ktorý bol vyhotovený v čase poruchy registračnej pokladnice. Po odstránení závady pokladnice je obsluha povinná bez zbytočného odkladu dodatočne zaevidovať tržbu.

Oproti bežnemu typu dokladu je tak potrebné uviesť dve dodatočné vlastnosti:

  • issueDate: dátum a čas vyhotovenia paragónu počas poruchy registračnej pokladnice.
  • paragonNumber: poradové číslo paragónu
  • HTTP WEB API
  • Knižnica

URL: POST {{server_address}}/api/v1/requests/receipts/paragon

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "issueDate": "2020-02-05T12:30:40.858278+01:00",
      "paragonNumber": 1,
      "items": [
        {
          "type": "positive",
          "name": "Coca Cola",
          "quantity": {
            "amount": 2.00,
            "unit": "ks"
          },
          "unitPrice": 1.99,
          "price": 3.98,
          "vatRate": 20.00
        },
        {
          "type": "discount",
          "name": "Vernostná zľava",
          "quantity": {
            "amount": 1.00
          },
          "unitPrice": -1.00,
          "price": -1.00,
          "vatRate": 20.00
        }
      ],
      "payments": [
        {
          "name": "Hotovosť",
          "amount": 2.98
        }
      ]
    }
  }
}

Metóda: client.RegisterReceiptAsync(RegisterCashRegisterReceiptRequest, RegisterReceiptPrintContext, CancellationToken)

1.3 Úhrada faktúry

Úhrada faktúry v hotovosti.

Oproti bežnemu dokladu úhrada faktúr neobsahuje zoznam položiek (items), navyše obsahuje vlastnosti:

  • invoiceNumber: číslo faktúry
  • amount: celková sumu faktúry s DPH
  • HTTP WEB API
  • Knižnica

URL: POST {{server_address}}/api/v1/requests/receipts/invoice

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "invoiceNumber": "FA-0001",
      "amount": 189.90
    }
  }
}

Metóda: client.RegisterReceiptAsync(RegisterInvoiceReceiptRequest, CancellationToken)

1.4 Úhrada faktúry - paragón

Hotovostná úhrada faktúry, pričom príjmový pokladničný doklad bol vyhotovený vo forme paragónu.

Oproti bežnemu dokladu úhrada faktúr neobsahuje zoznam položiek (items), navyše obsahuje vlastnosti:

  • issueDate: dátum a čas vyhotovenia paragónu počas poruchy registračnej pokladnice.
  • paragonNumber: poradové číslo paragónu
  • invoiceNumber: číslo faktúry
  • amount: celková suma faktúry s DPH
  • HTTP WEB API
  • Knižnica

URL: POST {{server_address}}/api/v1/requests/receipts/invoice_paragon

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "issueDate": "2019-02-15T12:30:40.858278+01:00",
      "invoiceNumber": "FA-0001",
      "paragonNumber": 1,
      "amount": 189.90
    }
  }
}

Metóda: client.RegisterReceiptAsync(RegisterInvoiceParagonReceiptRequest, CancellationToken)

1.5 Neplatný doklad

Doklad je vhodné vyhotovovať v tzv. tréningovom režime, napríklad pre zaškolenie obsluhy alebo overenie funkčnosti on-line pokladnice.

Vlastnosťami sa nelíši oproti bežnému pokladničnému dokladu. Papierový doklad však v každom treťom riadku obsahuje slová "Neplatný doklad", aby nedošlo k zámene s platným (ostrým) dokladom.

  • HTTP WEB API
  • Knižnica

URL: POST {{server_address}}/api/v1/requests/receipts/invalid

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "positive",
          "name": "Coca Cola",
          "quantity": {
            "amount": 2.00,
            "unit": "ks"
          },
          "unitPrice": 1.99,
          "price": 3.98,
          "vatRate": 20.00
        },
        {
          "type": "discount",
          "name": "Vernostná zľava",
          "quantity": {
            "amount": 1.00
          },
          "unitPrice": -1.00,
          "price": -1.00,
          "vatRate": 20.00
        }
      ],
      "payments": [
        {
          "name": "Hotovosť",
          "amount": 2.98
        }
      ]
    }
  }
}

Metóda: client.RegisterReceiptAsync(RegisterInvalidReceiptRequest, CancellationToken)

1.6 Vklad

Doklad, ktorý sa vystavuje pri vklade hotovosti do on-line pokladnice, ktorá nebola prijatá na základe vyhotoveného dokladu.

Vklad je nutné zadávať do systému v momente, kedy obsluha vkladá do peňažnej zásuvky (alebo peňaženky) hotovosť, ktorá nie je tržbou - napríklad doplnenie hotovosti určenej na rozmieňanie.

  • HTTP WEB API
  • Knižnica

URL: POST {{server_address}}/api/v1/requests/receipts/deposit

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "amount": 10.00
    }
  }
}

Metóda: client.RegisterReceiptAsync(RegisterDepositReceiptRequest, CancellationToken)

1.7 Výber

Doklad, ktorý sa vystavuje pri výbere hotovosti z on-line pokladnice.

Výber je nutné zadávať do systému v momente, kedy obsluha vyberá z peňažnej zásuvky (alebo peňaženky) hotovosť - napríklad pre účely vyplatenia dodaného tovaru, alebo po ukončení predaja (napr. po uzávierke systému).

Tip

Znamienko sumy výberu nie je finančnou správou usmernené. Doklad typu výber je tak možné zaregistrovať s kladným aj záporným znamienkom. Doklady typu výber však odporúčame evidovať so záporným znamienkom, nakoľko pri prípadnom exporte údajov z portálu finančnej správy sa v tabuľkovom editore jednoduchšie spočítavajú celkové obraty.

Warning

Nakoľko systém finančnej správý eKasa pri registrácii dokladu nerozlišuje platidlá, je potrebné pri výbere uvádzať celkovú prijatu tržbu v hotovosti, ako aj sumu prijatú prostredníctvom platobného terminálu.

  • HTTP WEB API
  • Knižnica

URL: POST {{server_address}}/api/v1/requests/receipts/withdraw

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "amount": -10.00
    }
  }
}

Metóda: client.RegisterReceiptAsync(RegisterWithdrawReceiptRequest, CancellationToken)

2. Items - Položky dokladu

Vlastnosť dokladu items reprezentuje zoznam položiek dokladu.

Uvádzať položky dokladu je možné iba pri niektorých typoch dokladov. Viac v tabuľke nižšie.

Typ dokladu Identifikátor typu dokladu Doklad obsahuje položky
Pokladničný doklad CashRegister Áno
Neplatný doklad Invalid Áno
Paragón Paragon Áno
Faktúra Invoice Nie
Paragón pri úhrade faktúry InvoiceParagon Nie
Doklad označený slovom „Vklad“ Deposit Nie
Doklad označený slovom „Výber“ Withdraw Nie

Každá položka dokladu sa skladá z nasledujúcich (povinných aj nepovinných) vlastností:

2.1 Type - Typ položky

Povinný parameter.

Typ položky nadobúda jeden z nasledovných typov položiek dokladu:

Identifikátor Názov Typ položky Popis
positive Kladná položka Kladná Predaj tovaru alebo poskytnutie služby
returnedContainer Vrátené obaly Záporná Vykúpené zálohované obaly.
returned Vrátená Záporná Zrušenie evidovanej položky po jej vystavení na pokladničnom doklade pri vrátení tovaru alebo služby. Napríklad pri reklamácii.
correction Opravná Kladná alebo záporná Negácia položky už zaevidovaného dokladu v systéme e-kasa v prípade jej opravy. Napríklad pri omyle obsluhy.
discount Zľava Záporná Poskytnutá zľava. Na doklade je možné tento typ položky uviesť len v prípade, ak sa na doklade nachádza aj kladná položka (positive) v rovnakej sadzbe DPH, ku ktorej sa zľava vzťahuje. Zároveň platí, že výška zľavy nesmie prevyšovať sumu ostatných položike v tejto sadzbe DPH.
advance Odpočítaná záloha Záporná Suma prijatého preddavku uvedená na doklade vystavenom v čase úhrady doplatku ceny za predaný tovar alebo poskytnutú službu. Používa sa, ak bola za tovar už v minulosti obdržaná záloha. Na doklade je možné tento typ položky uviesť len v prípade, ak sa na doklade nachádza aj kladná položka (positive), ku ktorej sa odpočet zálohy vzťahuje.
voucher Výmena poukazu Záporná Suma jednoúčelového poukazu pri jeho výmene za tovar alebo poskytnutú službu. Používa sa pri samotnom uplatnení vopred zakúpeného poukazu. Na doklade je možné tento typ položky uviesť len v prípade, ak sa na doklade nachádza aj kladná položka (positive), ku ktorej sa výmena poukazu vzťahuje.

2.2 Name - Označenie tovaru alebo služby

Povinný parameter.

Označenie tovaru alebo sužby je neprázdny textový reťazec maximálnou dĺžkou 255 znakov.

Niektoré symboly (najmä netlačiteľné) sú však sytémom eKasa zakázané. Viac v článku Kódovanie a špeciálne znaky.

2.3 Price - Celková cena tovaru alebo služby

Povinný parameter.

Celková cena tovaru alebo služby v rozsahu -10000000 až 10000000, s presnosťou na dve desatinné miesta.

Celková cena musí byť rovná súčinu jednotkovej ceny a množstva, teda: unitPrice * quantity = price

2.4 UnitPrice - Jednotková cena tovaru alebo služby

Povinný parameter.

Jednotková cena tovaru alebo služby v EUR v rozsahu -10000000 až 10000000 s presnosťou na šesť desatinných miest.

Položka kladného typu, musí mať kladnú jednotkovú cenu. Položka záporného typu musí mať zápornú jednotkovú cenu. Položka opravného typu môže nadobúdať kladné aj záporné hodnoty.

Typ položky Typy položiek Povolený rozsah hodnôt
Kladná positive Kladné hodnoty: 0 až 10000000
Záporná returnedContainer, returned, discount, advance a voucher Záporné hodnoty: -10000000 až 0
- correction Plný rozsah: -10000000 až 10000000

2.5 Quantity - Množstvo tovaru alebo rozsah služby

Povinný parameter.

Obsahuje dve polia: amount a unit.

Názov Povinné pole Popis
amount Áno Hodnota v rozsahu 0 až 10000000 s presnosťou na štyri desatinné miesta.
unit Nie Nepovinná množstevná jednotka na 1 až 3 znakov. Ak nie je uvedená, predvolená hodnota je x.

2.6 ReferenceReceiptId - Číslo dokladu

Ide o povinný parameter iba v prípade, ak sa jedná o položku typu correction alebo returned.

V opačnom prípade ide o nepovinný parameter, ktorý musí mať hodnotu null (teda nesmie byť uvedený).

V prípade, ak pôvodný doklad obsahuje unikátny identifikátor dokladu (bol zaregistrovaný v online režime), ako referenčné číslo dokladu sa uvedie tento identifikátor (pole response.data.id).

V prípade, ak pôvodný doklad neobsahuje unikátny identifikátor dokladu (bol zaregistrovaný v offline režime), ako referenčné číslo dokladu sa uvedie OKP (pole request.data.okp).

V prípade pôvodného dokladu vyhotoveného elektronickou registračnou pokladnicou (ERP - teda pokladnicou, ktorá bola používaná pred uvedením súčasnej eKasa legislatívy) ako referenčné číslo dokladu je uvedené poradové číslo pokladničného dokladu.

2.7 VatRate - Sadzba dane z pridanej hodnoty

Číselná hodnota s presnosťou na 2 desatinné miesta, alebo null pre označenie položky nepodliehajúcej DPH.

Platné sadzby podľa časových období

Vývoj sadzieb DPH používaných v SR od začiatku projektu eKasa (1.4.2019):

Sadzba DPH Do 31.12.2024 Od 1.1.2025
Základná sadzba 20% 23%
Znížené sadzby 10% 19% a 5%

Okrem základných a znížených sadzieb, ktoré sa v čase môžu meniť, sa používajú fixné hodnoty:

  • 0%: používa sa pre označenie položiek oslobodených od DPH, alebo pri evidencii tržieb podniateľa, ktorý nie je platiteľom DPH. V .NET knižnici dostupné ako VatRate.Zero.
  • null: používa sa pre označenie položiek nepodliehajúcich DPH (v súčasnosti návrat a predaj vratných obalov). V .NET knižnici dostupné ako VatRate.None.

Povolené hodnoty sadzby DPH

V závislosti od typu položky, zámeru jej využitia a dátumu vyhotovenia dokladu (v prípade registrácie paragónu alebo pargaónu pre úhradu faktúry je relevantná hodnota issueDate) sa množina povolených sadzieb DPH líši nasledovne:

Typ položky Povolené sadzby DPH do 31.12.2024 Povolené sadzby DPH od 1.1.2025
positive 20%, 10%, 0%, null 23%, 20%*, 19%, 10%*, 5%, 0%, null
discount 20%, 10%, 0% 23%, 19%, 5%, 0%
returnedContainer null null
returned 20%, 10%, 0% 23%, 20%, 19%, 10%, 5%, 0%
advance 20%, 10%, 0% 23%, 20%, 19%, 10%, 5%, 0%
voucher 20%, 10%, 0% 23%, 20%, 19%, 10%, 5%, 0%
correction 20%, 10%, 0%, null 23%, 20%, 19%, 10%, 5%, 0%, null

* - iba ak sa na doklade nachádza aj položka typu returned (od verzie 7.0.1)

Položka uplatnenia zľavy (discount) sa predáva "v reálnom čase", musí preto používať aktuálne platné sadzby DPH.

Kladné položky (positive) sa používajú v rôznych situáciach, od ktorých je odvodená rozdielna sada povolených sadzieb DPH. V prípade, ak kladná položka reprezentuje:

  • predaj tovaru alebo služby: predaj sa realizuje "v reálnom čase", preto sú povolené iba aktuálne platné sadzby DPH (20%, 10% a 0% pred 1.1.2025, resp. 23%, 19%, 5% a 0% od 1.1.2025).
  • vrátenie vratných obalov: používa sa označenie položky nepodliehajúcej DPH (null)
  • vrátenie zľavy: od verzie 7.0.1 sú okrem aktuálnych sadzieb DPH povolené aj historické sadzby DPH. Fakt, že kladná položka (positive) je použitá za účelom evidencie vrátenia zľavy, overuje aplikácia eKasa spôsobom, že vyžaduje, aby súčasťou dokladu bola aspoň jedna ďalšia položka evidujúca návrat (returned). Tento scenár je vhodné využiť v prípade, ak na pôvodnom doklade evidujete k predanému tovaru (položka positive) aj položku uplatnenia zľavy (discount) vyčíslenú na samostatnom riadku a evidujete doklad, kde prichádza k návratu tohto tovaru kombináciou vrátenia tovaru (returned) a vrátenia zľavy (položka typu positive, nakoľko vrátenie zľavy je evidované v kladnej hodnote a položka typu discount umožňuje iba záporné hodnoty ceny).

Evidencia predaja a výkupu vrátnych obalov (positive a returnedContainer) sú evidované ako položky nepodliehajúce DPH, vlastnosť VatRate tak musí nadobúdať hodnotu null (VatRate.None pre dll knižnicu).

Pri ostatných položkách (returned, advance, voucher alebo correction) je možné uviesť všetky aktuálne aj historický platné sadzby DPH:

  • vrátenie (returned) musí byť evidované v sadzbe, v ktorej bol evidovaný predaj. Ak bol predaj pred 1.1.2025, je povolené uviesť DPH aj vo výške 20% alebo 10%.
  • odpočet zálohy (advance) musí byť evidovaný v sadzbe, v ktorej bolo evidované prijatie zálohy. Ak bola záloha prijatá pred 1.1.2025, je povolené uviesť DPH aj vo výške 20% alebo 10%.
  • použitie jednoúčelového poukazu (voucher) musí byť evidované v sadzbe, v ktorej bol evidovaný jeho predaj. Ak bol predaj jednoúčelového poukazu zaevidovaný pred 1.1.2025, je povolené uviesť DPH aj vo výške 20% alebo 10%.
  • opravná položka correction musí byť evidovaná v rovnakej sadzbe, v akej bola evidovaná pôvodná položka. Ak bola pôvodná položka zaevidovaná pred 1.1.2025, je povolené uviesť DPH aj vo výške 20% alebo 10%.

V prípade, ak bude uvedená nesprávna sadzba DPH, bude vyhlásená validačná chyba s textom napríklad: Sadzba DPH 23,00% nie je platná pre doklad s dátumom vyhotovenia 11. 11. 2024.

2.8 SpecialRegulation - Dôvod priradenia sadzby dane s hodnotou 0

Príznak, ktorý bližšie špecifikuje „dôvod“ priradenia dane s hodnotou 0, ak takáto bola položke priradená.

Ide o nepovinný atribút, ktorý je nepovinný aj pre položky s 0% sadzbou dane.

Hodnota musí byť uvedená iba pre tie položky s nulovou sadzbou dane, ktoré reprezentujú niektorú z nižšie uvedených možností:

Identifikátor Popis
VATReverseCharge Prenesenie daňovej povinnosti
VATExemptionGood Oslobodenie položky od dane
TravelAgency Osobitná úprava uplatňovania dane pri cestovných kanceláriách
UsedGood Osobitná úprava uplatňovania dane pri použitom tovare
Artwork Osobitná úprava uplatňovania dane pri umeleckých dielach
CollectiblesAndAntiques Osobitná úprava uplatňovania dane pri zberateľských predmetoch a starožitnostiach.

2.9 Seller - Predávajúci

Nepovinný parameter.

Uvádza sa iba v prípade, ak predávajúci, v ktorého mene bol predaný tovar alebo poskytnutá služba je iný, ako podnikateľský subjekt priradený k on-line registračnej pokladnici.

Obsahuje dve polia: id a type.

Názov Povinné pole Popis
id Áno Identifikátor predávajúceho, v ktorého mene bol predaný tovar alebo poskytnutá služba.
type Áno Typ identifikátora predávajúceho, v ktorého mene bol predaný tovar alebo poskytnutá služba. Povolené hodnoty sú v tabuľke nižšie.

Povolené hodnoty vlastnosti type:

Hodnota type Popis Formát hodnoty id
DIC DIČ ^[0-9]{8,10}$ - 8 až 10 číselných znakov.
ICDPH IČ DPH ^SK[0-9]{8,10}$ - písmena SK následované 8 až 10 číselnými znakmi.

2.10 VoucherNumber - Číslo jednoúčelového poukazu

Číslo jednoúčelového poukazu pri jeho výmene za tovar alebo poskytnutú službu.

Hodnota môže byť uvedená iba pre položky s typom voucher a musí obsahovať textový reťazec s dĺžkou 1 až 50 znakov.

Pre položky iného typu musí byť hodnota rovná null.

2.11 Description - Dodatočný popis položky

Nepovinný parameter.

Nepovinný dodatočný popis položky dokladu, vyobrazený na doklade. Slúži pre umiestnenie informácie o dátume spotreby, sériovom čísle výrobku a podobne. Tlačí sa hneď za názvom produktu a informáciami o množstve a cenách.

Tento textový reťazec nie je odosielaný do finančnú správu, systému eKasa.

Tento parameter podporuje použitie tzv. token-ov pre formátovanie, tlač QR kódov a čiarových kódov. Viac nájdete v článku Tokeny a formátovanie textu.

3. Payments - Zoznam platieb dokladu

Kolekcia payments reprezentuje platby dokladu. Ide o nepovinné pole dokladu, ktoré nadradená aplikácia nemusí vypĺňať - na servery finančnej správy nie sú odoslané. V prípade, ak ale nadradená aplikácia platby uvedie, je potrebné, aby sa ich celková suma rovnala, alebo prevyšovala celkovú sumu dokladu, ktorá je daná súčtom položiek dokladu (items).

Počet platieb nachádzajúcich sa v zozname platieb dokladu je limitovaný na 50.

Každá platba dokladu pozostáva z dvojice vlastností amount a name.

Príklad:

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "positive",
          "name": "Coca Cola",
          "quantity": {
            "amount": 10.00,
            "unit": "ks"
          },
          "unitPrice": 1.99,
          "price": 19.90,
          "vatRate": 20.00
        }
      ],
      "payments": [
        {
          "name": "Hotovosť",
          "amount": 20.00
        },
        {
          "name": "Hotovosť",
          "amount": -0.10
        }
      ]
    }
  }
}

3.1 Amount - Peňažný obnos platby

Peňažný obnos platby s presnosťou na 2 desatinné miesta.

3.2 Name - Názov platidla

Názov (slovný popis) platidla s dĺžkou v rozmedzí 1 až 255 znakov.

4. Customer - Informácia o kupujúcom

Warning

V zmysle rozhodnutia Ústavného súdu SR č. 492/2021 Z. z., Nález Ústavného súdu Slovenskej republiky č. k. PL. ÚS 25/2019-117 z 10. novembra 2021 vo veci vysloveniu nesúladu ustanovenia § 8a ods. 1 zákona č. 289/2008 Z. z. o používaní elektronickej registračnej pokladnice a o zmene a doplnení zákona Slovenskej národnej rady č. 511/1992 Zb. o správe daní a poplatkov a o zmenách v sústave územných finančných orgánov v znení neskorších predpisov v časti „unikátny identifikátor kupujúceho, ak je predložený kupujúcim pred zaevidovaním prijatej tržby“ s čl. 16 ods. 1, čl. 19 ods. 2 a 3 Ústavy Slovenskej republiky (https://www.slov-lex.sk/pravne-predpisy/SK/ZZ/2021/492/vyhlasene_znenie.html), bola zrušená existencia unikátneho identifikátora kupujúceho.

K dokladu (okrem neplatného dokladu - teda dokladu s typom Invalid) je možné uviesť aj informácie o kupujúcom.

Informácia o kupujúcom je reprezentovaná dvoma vlastnosťami:

  1. id: identifikátor
  2. typ: typ identifikátora kupujúceho.

Obsahuje dve polia: id a type.

Názov Povinné pole Popis
id Áno Identifikátor kupjúceho.
type Áno Typ identifikátora kupjúceho. Povolené hodnoty sú v tabuľke nižšie.

Povolené hodnoty vlastnosti type:

Hodnota type Popis Formát hodnoty id
DIC DIČ ^[0-9]{10}$ - 10 číselných znakov.
ICDPH IČ DPH ^SK[0-9]{8,10}$ - písmena SK následované 8 až 10 číselnými znakmi.
ICO IČO ^[0-9]{6}$ alebo ^(?:[0-9]{8}\|[0-9]{12})$ - 6, 8 alebo 12 číselných znakov. V prípade skráteného 6-miestneho formátu budú automaticky doplnené dve nuly pre docielenie 8-miestneho formátu.
Other Iný typ identifikátora kupujúceho

Príklad:

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "customer": {
        "id": "2004567890",
        "type": "DIC"
      },
      "items": [
        {
          "type": "positive",
          "name": "Coca Cola",
          "quantity": {
            "amount": 1.00,
            "unit": "ks"
          },
          "unitPrice": 1.99,
          "price": 1.99,
          "vatRate": 20.00
        }
      ]
    }
  }
}

5. Určenie spôsobu vyhotovenia dokladu

Nadradená aplikácia má pri registrácii dokladu možnosť uviesť spôsob, akým bude doklad vyhotovený.

Určenie spôsobu vyhotovenia však nie je zákonom dovolené pri všetkých typoch dokladov, túto skutočnosť popisuje tabuľka nižšie.

Typ dokladu Identifikátor typu dokladu možnosť určiť spôsob vyhotovenia
Pokladničný doklad CashRegister Áno
Neplatný doklad Invalid Áno
Paragón Paragon Nie
Faktúra Invoice Áno
Paragón pri úhrade faktúry InvoiceParagon Nie
Doklad označený slovom „Vklad“ Deposit Nie
Doklad označený slovom „Výber“ Withdraw Nie

Spôsob vyhotovenia je možné úrčiť pomocou vlastnosti print.printerName.

Podporované sú celkom tri možnosti:

  1. pos - papierový doklad
  2. pdf - elektronický doklad - PDF súbor
  3. email - elektronický doklad - email s PDF súborom v prílohe

Ak nie je objekt print špecifikovaný, predvoleným spôsobom vyhotovenia dokladu je papierový doklad (pos).

Warning

Ak je doklad zaevidovaný v offline režime, v zmysle pokynov finančnej správy musí eKasa klient (knižnica PORTOS eKasa) vyhotoviť doklad v papierovej podobe. A to bez ohladu na to, či bolo nadradenou aplikáciou indikované vyhotovenie dokladu elektronickou formou.

  • HTTP WEB API
  • Knižnica

Kontext požiadavky evidencie pokladničného dokladu, zasielaný do HTTP WEB API nadradenou aplikáciou, obsahuje dve vlastnosti:

  1. request: informácie týkajúce sa samotného dokladu
  2. print: informácie týkajúce sa spôsobu vyhotovenia dokladu

Vlastnosť print umožnuje špecifikovať spôsob vyhotovenia dokladu podľa vlastností:

  • printerName: určuje typ vyhotovenia dokladu.
  • options: určuje povinné aj voliteľné prepínače ovplyvňujúce vyhotovenie dokladu, formou dvojíc kľúč - hodnota (hodnota je vždy textovým reťazcom).

Príklad:

"request": {
  "data": { ... } // informácie o doklade
},
"print": { // nepovinný objekt upresňujúci spôsob vyhotovenia dokladu
  "printerName": "pos", // spôsob vyhotovenia dokladu
  "options": { ... } // dodatočné nastavenia
}

Funkcia knižnice client.RegisterReceiptAsync()

  1. RegisterDepositReceiptRequest request: informácie týkajúce sa samotného dokladu
  2. RegisterReceiptPrintContext printContext: informácie týkajúce sa spôsobu vyhotovenia dokladu

Parameter funkcie printContext umožnuje špecifikovať spôsob vyhotovenia dokladu podľa vlastností:

  • printerName: určuje typ vyhotovenia dokladu.
  • options: určuje povinné aj voliteľné prepínače ovplyvňujúce vyhotovenie dokladu, formou dvojíc kľúč - hodnota (hodnota je vždy textovým reťazcom).

5.1 pos - Papierový doklad

Predvolený spôsob vyhotovenia dokladu.

Pre vyhotovenie dokladu vo forme papierového účtu je potrebné zašpecifikovať v poli printerName hodnotu pos.

V objekte options je možné uviesť nasledovné hodnoty:

Názov Povinné pole Popis
OpenDrawer Nie Umožňuje určiť, či sa pre tento konkrétny doklad otvorí (hodnota true), prípadne neotvorí (hodnota false) peňažná zásuvka. Toto nastavenie umožňuje nadradenej aplikácii variabilne určovať, pri ktorých typoch dokladov, prípadne pri ktorých platidlách je vhodné otvárať peňažnú zásuvku. Ak je toto nastavenie uvedené, získava prioritu nad nastavením uvedeným v konfigurácií aplikácie.
PrintLogo Nie Umožňuje určiť, či sa pre tento doklad vytlačí (hodnota true), prípadne nevytlačí (hodnota false) grafické logo. Ak je toto nastavenie uvedené, získava prioritu nad nastavením uvedeným v konfigurácií aplikácie.
LogoMemoryAddress Nie Umožňuje určiť, aké logo sa pre tento doklad vytlačí. Ak je toto nastavenie uvedené, získava prioritu nad nastavením uvedeným v konfigurácií aplikácie.
  • HTTP WEB API
  • Knižnica
{
  "request": {
    "print": {
      "printerName": "pos",
      "options": {
        "OpenDrawer": false,
        "PrintLogo": true,
        "LogoMemoryAddress": 1
      }
    },
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "positive",
          "name": "Coca Cola",
          "quantity": {
            "amount": 1.00,
            "unit": "ks"
          },
          "unitPrice": 1.99,
          "price": 1.99,
          "vatRate": 20.00
        }
      ]
    }
  }
}

// we can override default client configuration with these optional fields:
var printOptions = new PosPrintingOptions()
{
    // this will override the "configuration.Printers.Pos.Drawer.Enabled"
    // for this specific receipt.
    OpenDrawer = false,
    // this will override the "configuration.Printers.Pos.Logo.Enabled"
    // for this specific receipt.
    PrintLogo = true,
    // this will override the "configuration.Printers.Pos.Logo.MemoryAddress"
    // for this specific receipt.
    LogoMemoryAddress = 1
};

// prepare print context object from printer name and printing options
var printContext = RegisterReceiptPrintContext.CreatePos(printOptions);

// wrap receipt to request
var receiptRequest = new RegisterCashRegisterReceiptRequest(receipt);

// and register receipt
var result = await client.RegisterReceiptAsync(receiptRequest, printContext, CancellationToken.None);

5.2 pdf - Elektronický doklad vo forme PDF súboru

Pre vyhotovenie dokladu vo forme PDF súboru je potrebné zašpecifikovať v poli printerName hodnotu pdf.

V objekte options je možné uviesť nasledovné hodnoty:

Názov Povinné pole Popis
OpenDrawer Nie Umožňuje určiť, či sa pre tento konkrétny doklad otvorí (hodnota true), prípadne neotvorí (hodnota false) peňažná zásuvka. Toto nastavenie umožňuje nadradenej aplikácii variabilne určovať, pri ktorých typoch dokladov, prípadne pri ktorých platidlách je vhodné otvárať peňažnú zásuvku. Ak je toto nastavenie uvedené, získava prioritu nad nastavením uvedeným v konfigurácií aplikácie.

PDF súbory aplikácia vytvára na lokálnom disku počitača, na ktorom je PORTOS nainštalovaný. Cesta k adresáru, kde PDF súbory vznikajú, je možné upraviť v nastaveniach aplikácie, určená je konkrétne v poli printers.pdf.outputDirectory.

Vlastnosť v nastaveniach môže mať cestu vyjadrenú:

  • absolútne
  • relatívne - vtedy sa odvíja od pracovného adresára, ktorý je štandardne C:/ProgramData/NineDigit/Portos.eKasa/.

Predvolená hodnota v nastaveniach je nastavená na receipts. Nakoľko ide o relatívne určenú cestu, cieľový priečinok je odvodený od pracovného adresára aplikácie a výsledná cesta je C:/ProgramData/NineDigit/Portos.eKasa/receipts/.

Názov PDF súboru je určený podľa formátu {orp_code}_{yyyyMM}_{cislo_dokladu}.pdf, kde:

  • orp_code: číslo online registračnej pokladnice
  • yyyy: rok vytvorenia dokladu
  • MM: mesiac vytvorenia dokladu
  • cislo_dokladu: podarové číslo dokladu (unikátne v rámci kalendárneho mesiaca)

Príklad cesty k súboru: C:/ProgramData/NineDigit/Portos.eKasa/receipts/88812345678900001_202012_000123.pdf

Tip

Pre zabránenie hromadenia PDF súborov je od verzie 6.4 v konfigurácii aplikácie možné uviesť časový interval (v dňoch), po ktorých bude súbor automaticky odstránený.

  • HTTP WEB API
  • Knižnica
{
  "request": {
    "print": {
      "printerName": "pdf"
    },
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "positive",
          "name": "Coca Cola",
          "quantity": {
            "amount": 1.00,
            "unit": "ks"
          },
          "unitPrice": 1.99,
          "price": 1.99,
          "vatRate": 20.00
        }
      ]
    }
  }
}
// there are no options available for pdf printer.

// prepare print context object without additional options.
var printContext = RegisterReceiptPrintContext.CreatePdf();

// wrap receipt to request
var receiptRequest = new RegisterCashRegisterReceiptRequest(receipt);

// and finally, register the receipt
var result = await client.RegisterReceiptAsync(receiptRequest, printContext, CancellationToken.None);

// PDF file is created now.
// by default, its location is : "C:/ProgramData/NineDigit/Portos.eKasa/receipts"

5.2.1 Získanie PDF súboru

Od verzie 6.2 je možné získať obsah PDF súboru.

Táto funkcionalita nezávisí od kompletnosti indexovacej tabuľky, požadovaný doklad dokáže vyhľadať aj bez prítomnosti záznamu index tabuľky.

  • HTTP WEB API
  • Knižnica

Vyvolaním požiadavky GET {{server_address}}/api/v1/printers/pdf/receipt je vrátený obsah PDF súboru. V prípade, ak nie je nájdený doklad alebo súbor patriaci k tomuto dokladu, vrátená je odpoveď s HTTP stavom 404.

Doklad je možné zašpecifikovať:

  • použitím externého identifikátora, ktorý bol uvedený pri registrácii (parameter externalId). Napríklad: GET {{server_address}}/api/v1/printers/pdf/receipt?cashRegisterCode=88812345678900001&externalId=this-is-generated-by-your-app
  • použitím unikátneho ID dokladu, ktorý prideľuje aplikácia Portos eKasa (parameter id). Napríklad: GET {{server_address}}/api/v1/printers/pdf/receipt?cashRegisterCode=88812345678900001&id=unique-id-generated-by-portos-ekasa
  • uvedením roku, mesiacu a poradového čísla dokladu v mesiaci. Napríklad: GET {{server_address}}/api/v1/printers/pdf/receipt?cashRegisterCode=88812345678900001&year=2023&month=1&receiptNumber=1

Volaním metódy client.GetPdfReceiptStreamAsync(SingleReceiptRegistrationFilter, CancellationToken)

Doklad je možné určiť pomocou filtra (trieda SingleReceiptRegistrationFilter), ktorého konštruktor má niekoľko preťažení pre možnosť zašpecifikovania dokladu pomocou:

  • externého identifikátore
  • ID dokladu
  • roku, mesiacu a poradového čísla dokladu v mesiaci

Príklad:

SingleReceiptRegistrationFilter filter = new SingleReceiptRegistrationFilter(
    cashRegisterCode: "88812345678900001",
    receiptNumberId: new ReceiptNumberId(year: 2023, month: 1, number: 1));

Stream stream = await this.client
    .GetPdfReceiptStreamAsync(filter, CancellationToken.None)
    .ConfigureAwait(false);

5.3 email - Elektronický doklad vo forme e-mailu

Pre vyhotovenie dokladu vo forme emailu je potrebné zašpecifikovať v poli printerName hodnotu email.

V objekte options je možné uviesť nasledovné hodnoty:

Názov Povinné pole Popis
To Áno E-mailová adresa adresáta (e-mail, na ktorý má byť doklad odoslaný)
Subject Nie Umožňuje určiť predmet e-mailu, ktorý sa použije pre tento konkrétny doklad. Ak je toto nastavenie uvedené, získava prioritu nad nastavením uvedeným v konfigurácii aplikácie (printers.email.subject).
Body Nie Umožňuje určiť telo e-mailu, ktorý sa použije pre tento konkrétny doklad. Ak je toto nastavenie uvedené, získava prioritu nad nastavením uvedeným v konfigurácii aplikácie (printers.email.body).
RecipientDisplayName Nie Umožňuje určiť zobrazovacie meno adresáta e-mailu.
OpenDrawer Nie Umožňuje určiť, či sa pre tento konkrétny doklad otvorí (hodnota true), prípadne neotvorí (hodnota false) peňažná zásuvka. Toto nastavenie umožňuje nadradenej aplikácii variabilne určovať, pri ktorých typoch dokladov, prípadne pri ktorých platidlách je vhodné otvárať peňažnú zásuvku. Ak je toto nastavenie uvedené, získava prioritu nad nastavením uvedeným v konfigurácií aplikácie.
Tip

Možnosť uvedenia viacerých adresátov emailu (napríklad prostredníctvom tzv. carbon copy CC) nie je v súlade s legislatívou, nakoľko zákon nepozná viac ako jeden originál pokladničného dokladu. Každý elektronický doklad je preto možné poslať iba na jednu emailovú adresu.

  • HTTP WEB API
  • Knižnica
{
  "request": {
    "print": {
      "printerName": "email",
      "options" : {
        "To" : "john.doe@example.com", // required
        "Subject" : "Váš e-doklad!", // optional
        "Body" : "Ďakujeme za nákup.", // optional
        "RecipientDisplayName": "Mr. John Doe" // optional
      }
    },
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "positive",
          "name": "Coca Cola",
          "quantity": {
            "amount": 1.00,
            "unit": "ks"
          },
          "unitPrice": 1.99,
          "price": 1.99,
          "vatRate": 20.00
        }
      ]
    }
  }
}

Príklad - knižnica:

// create printing options object from dictionary.
var printOptions = new EmailPrintingOptions()
{
    // required parameter - recipients email address
    // don't forget to change this value to some real email address
    To = "john.brown@example.com",
    // optional parameter. this will override
    // the "configuration.Printers.Email.Subject"
    // for this specific receipt.
    Subject = "Your receipt, mr. Brown!",
    // optional parameter. This will override
    // the "configuration.Printers.Email.Body"
    //  for this specific receipt.
    Body = "Thank you for your purchase."
};

// prepare print context object from printing options
var printContext = RegisterReceiptPrintContext.CreateEmail(printOptions);

// wrap receipt to request
var receiptRequest = new RegisterCashRegisterReceiptRequest(receipt);

// and register receipt
var result = await client.RegisterReceiptAsync(receiptRequest, printContext, CancellationToken.None);

Správanie systému po zlyhanom odoslaní e-mailu

Ak sa doklad podarí úspešne zaregistrovať na finančnej správe a uložiť všetky potrebné údaje do úložiska a zlyhá až samotné odoslanie e-mailu obsahujúci doklad, túto skutočnosť indikuje aplikácia vrátením:

  • HTTP WEB API
  • Knižnica

chyby z rozsahu -5XX teda kategória označená ako "Chyby tlače".

výnimky triedy PrinterException, alebo odvodeného dátového typu.

V takomto prípade je príloha e-mailu, teda samotný PDF súbor reprezentujúci e-doklad, uchovaný v rovnakom adresári, aký je použitý pri vyhotovovaní elektronického dokladu v režime PDF súboru (pozri sekciu "Elektronický doklad vo forme PDF súboru").

Takéto správanie vyplýva z metodických pokynov finančnej správy sa online registračná pokladnica (v tomto prípade systém PORTOS eKasa) nesmie pokúsiť o viacnásobné zaslanie rovnakého dokladu.

Proces odoslania emailu má 3 fázy:

  1. nadviazanie sieťového spojenia s emailovým serverom: Ak tento krok zlyhá, aplikácia vyhlási chybu Spojenie s emailovým serverom sa nepodarilo nadviazať. Skontrolujte nastavenia e-mailového servera.. Ak systém hlási túto chybu, skúste v nastaveniach aplikácie vypnúť kontrolu SSL tak, že v "Typ pripojenia" zvolíte "Použiť TLS, ak je k dispozícii". Taktiež overte ostatné SMTP nastavenia.
  2. autentikácia emailového klienta (ak je v nastaveniach zapnuté, že je potrebné sa autentifikovať): Ak tento krok zlyhá, aplikácia vyhlási chybu Prihlásenie na emailovom serveri nebolo úspešné. Skontrolujte nastavenia e-mailového konta.. V tomto prípade sú pravdepodobne zle nastavené prihlasovacie údaje v nastaveniach aplikácie.
  3. samotné odoslanie emailu: Ak zlyhá s SMTP chybovým kódom RecipientNotAccepted, aplikácia vyhlási chybu Odoslanie e-mailu zlyhalo. E-mailová adresa príjemcu nebola akceptovaná.. Ak zlyhá s iným SMTP chybovým kódom, aplikácia vyhlási chybu Odoslanie e-mailu zlyhalo. Skontrolujte e-mailové nastavenia..

6. Ochrana proti duplicitnému zaevidovaniu dokladu

Uvažujme nasledovný scenár:

  1. nadradená aplikácia zašle do systému PORTOS eKasa pokladničný doklad.
  2. PORTOS eKasa doklad odošle na server finančnej správy - tržba tak je už zaevidovaná.
  3. Pri zasielaní odpovede naspäť do nadradenej aplikácie však dojde k nečakanej poruche, ktorá zabráni tomu, aby nadradená aplikácia dokázala vyhodnotiť odpoveď zo systému PORTOS eKasa.

V tomto bode nie je z pohľadu nadradenej aplikácie zrejmé, či sa doklad skutočne podarilo zaregistrovať.

Nadradená aplikácia by teda mohla doklad poslať znovu, čím by ale mohlo dôjsť k viacnasobnému zaevidovaniu tržby na serveroch finančnej správy, čo je neželaný efekt.

Ochrana proti duplicnému zaevidovaniu tržby spočíva v uvedení unikátneho identifikátora externalId, ktorý generuje nadradená aplikácia pri registrácii dokladu.

{
  "request": {
    "data": { ... }, // údaje o pokladničnom doklade
    "externalId": "this-is-generated-by-your-app" // unikátny identifikátor, ktorý generuje nadradená aplikácia
  }
}

Pole externalId je nepovinné. Ak je však uvedené, systém PORTOS eKasa kontroluje unikátnosť tohto identifikátora nasledovne:

Ak je v systéme PORTOS eKasa už nájdená registrácia s rovnakým externalId, systém PORTOS eKasa:

  • vráti výsledok pôvodnej registrácie dokladu (nevzniká tak duplicitná tržba), ak ide o registráciu identického dokladu (teda práve registrovaný doklad sa presne zhoduje s nájdeným dokladom naprieč všetkými vlastnosťami).
  • vráti chybovú odpoveď, ak ide o registráciu dokladu, ktorý sa odlišuje od nájdeného, už zaregistrovaného dokladu.

7. Analýza výsledku zaevidovania dokladu

Po zaregistrovaní dokladu je vrátený objekt informujúci o výsledku registrácie dokladu, ktorý obsahuje:

  • isSuccessful: indikuje, či doklad bol úspešne zaregistrovaný v online režime (hodnota true), či registrácia dokladu bola prijatá v offline režime (hodnota null), alebo či registrácia dokladu bola vybavená v online režime, ale zároveň bola odmietnutá systémom eKasa (hodnota false).
  • request: Informácie o požiadavke odosielanej na systém eKasa, ktorá pozostáva z pôvodných údajov zaslaných nadradenou aplikáciou, ako aj doplnených údajov, ako napríklad číslo dokladu (receiptNumber), overovací kód podnikateľa (okp) a podobne.
  • response: Výsledok spracovania dokladu, obsahujúci informácie zo systému finančnej správy eKasa. Toto pole nadobúda hodnotu (nie je null) iba v prípade, ak je pole isSuccessful rovné true.
  • error: Chybový objekt obsahujúci informácie zo systému finančnej správy eKasa. Toto pole nadobúda hodnotu (nie je null) iba v prípade, ak je pole isSuccessful rovné false.

Príklad výsledku evidencie požiadavky, ktorá bola úspešne zaevidovaná v online režime:

{
  "request": {
    "data": {
      "receiptNumber": 2,
      "okp": "04eacca4-6ff07dea-c2c85513-28181bb6-f46edcb0",
      ... // ostatné informácie o doklade
    },
    ... // ostatné informácie o požiadavke do systému eKasa
  },
  "response": {
    "data": {
      "id": "O-7DBCDA8A56EE426DBCDA8A56EE426D1A"
    },
    "processDate": "2019-04-27T20:57:42+02:00"
  },
  "isSuccessful": true,
  "error": null,
  "$type": "Receipt"
}

Príklad výsledku evidencie požiadavky, ktorá bola zaevidovaná v offline režime:

{
  "request": {
    "data": {
      "receiptNumber": 2,
      "okp": "04eacca4-6ff07dea-c2c85513-28181bb6-f46edcb0",
      ... // ostatné informácie o doklade
    },
    ... // ostatné informácie o požiadavke do systému eKasa
  },
  "response": null, // požiadavka vybavená v offline režime - žiadne dáta zo systému eKasa
  "isSuccessful": null,
  "error": null,
  "$type": "Receipt"
}

Príklad výsledku evidencie požiadavky zamietnutej serverom finančnej správy:

{
  "request": {
    "data": {
      "receiptNumber": 2,
      "okp": "04eacca4-6ff07dea-c2c85513-28181bb6-f46edcb0",
      ... // ostatné informácie o doklade
    },
    ... // ostatné informácie o požiadavke do systému eKasa
  },
  "response": null, // požiadavka nebola prijatá systémom eKasa
  "isSuccessful": false, // požiadavka bola zamietnutá systémom eKasa
  "error": { // informácie o zamietnutí požiadavky zo systému finančnej správy eKasa
    "message": "Chyba v podpise dátovej správy.", // chybová správa zo serveru eKasa
    "code": -10 // chybový kód zo serveru eKasa
  },
  "$type": "Receipt"
}

Príklad požiadavky a odpovede

Požiadavka:

{
    "request":
    {
        "data":
        {
            "cashRegisterCode": "88812345678900001",
            "headerText": "https://ekasa.ninedigit.sk",
            "footerText": "Ďakujeme za nákup!",
            "items":
            [
                {
                    "type": "Positive",
                    "name": "Coca Cola",
                    "quantity":
                    {
                        "amount": 2.00,
                        "unit": "ks"
                    },
                    "unitPrice": 1,
                    "price": 2,
                    "vatRate": 20.00
                },
                {
                    "type": "Positive",
                    "name": "Coca Cola 0.25l",
                    "quantity":
                    {
                        "amount": 1.00,
                        "unit": "ks"
                    },
                    "unitPrice": 1.12,
                    "price": 1.12,
                    "vatRate": 10.00
                },
                {
                    "type": "Positive",
                    "name": "Coca Cola 0.25 fľ",
                    "quantity":
                    {
                        "amount": 1.00,
                        "unit": "ks"
                    },
                    "unitPrice": 1.123,
                    "price": 1.12,
                    "vatRate": 0.00
                },
                {
                    "type": "Positive",
                    "name": "Coca Cola 0.25l fľ",
                    "quantity":
                    {
                        "amount": 1.00,
                        "unit": "ks"
                    },
                    "unitPrice": 1.123456,
                    "price": 1.12,
                    "vatRate": 0.00
                },
                {
                    "type": "ReturnedContainer",
                    "name": "Vrátenie vrátneho obalu",
                    "quantity":
                    {
                        "amount": 3.00,
                        "unit": "ks"
                    },
                    "unitPrice": -1,
                    "price": -3
                },
                {
                    "type": "Positive",
                    "name": "Predaj vrátneho obalu",
                    "quantity":
                    {
                        "amount": 5.00,
                        "unit": "ks"
                    },
                    "unitPrice": 1,
                    "price": 5
                }
            ],
            "roundingAmount": -0.01,
            "payments":
            [
                {
                    "name": "Hotovosť",
                    "amount": "8"
                },
                {
                    "name": "Výdavok",
                    "amount": "-0.64"
                }
            ]
        }
    }
}

Odpoveď:

{
    "request":
    {
        "data":
        {
            "receiptType": "CashRegister",
            "amount": 7.35,
            "roundingAmount": -0.01,
            "issueDate": "2024-11-20T15:34:13+01:00",
            "receiptNumber": 1,
            "invoiceNumber": null,
            "paragonNumber": null,
            "icdph": "SK1234567890",
            "ico": "76543210",
            "customer": null,
            "basicVatAmount": 0.33,
            "reducedVatAmount": 0.10,
            "secondReducedVatAmount": null,
            "taxFreeAmount": 2.24,
            "nonTaxableAmount": 2.00,
            "taxBaseBasic": 1.67,
            "taxBaseReduced": 1.02,
            "taxBaseSecondReduced": null,
            "items":
            [
                {
                    "type": "Positive",
                    "name": "Coca Cola",
                    "price": 2.00,
                    "unitPrice": 1.000000,
                    "quantity":
                    {
                        "amount": 2.0000,
                        "unit": "ks"
                    },
                    "referenceReceiptId": null,
                    "vatRate": 20.00,
                    "specialRegulation": null,
                    "voucherNumber": null,
                    "seller": null,
                    "description": null
                },
                {
                    "type": "Positive",
                    "name": "Coca Cola 0.25l",
                    "price": 1.12,
                    "unitPrice": 1.120000,
                    "quantity":
                    {
                        "amount": 1.0000,
                        "unit": "ks"
                    },
                    "referenceReceiptId": null,
                    "vatRate": 10.00,
                    "specialRegulation": null,
                    "voucherNumber": null,
                    "seller": null,
                    "description": null
                },
                {
                    "type": "Positive",
                    "name": "Coca Cola 0.25 fľ",
                    "price": 1.12,
                    "unitPrice": 1.123000,
                    "quantity":
                    {
                        "amount": 1.0000,
                        "unit": "ks"
                    },
                    "referenceReceiptId": null,
                    "vatRate": 0.00,
                    "specialRegulation": null,
                    "voucherNumber": null,
                    "seller": null,
                    "description": null
                },
                {
                    "type": "Positive",
                    "name": "Coca Cola 0.25l fľ",
                    "price": 1.12,
                    "unitPrice": 1.123456,
                    "quantity":
                    {
                        "amount": 1.0000,
                        "unit": "ks"
                    },
                    "referenceReceiptId": null,
                    "vatRate": 0.00,
                    "specialRegulation": null,
                    "voucherNumber": null,
                    "seller": null,
                    "description": null
                },
                {
                    "type": "ReturnedContainer",
                    "name": "Vrátenie vrátneho obalu",
                    "price": -3.00,
                    "unitPrice": -1.000000,
                    "quantity":
                    {
                        "amount": 3.0000,
                        "unit": "ks"
                    },
                    "referenceReceiptId": null,
                    "vatRate": null,
                    "specialRegulation": null,
                    "voucherNumber": null,
                    "seller": null,
                    "description": null
                },
                {
                    "type": "Positive",
                    "name": "Predaj vrátneho obalu",
                    "price": 5.00,
                    "unitPrice": 1.000000,
                    "quantity":
                    {
                        "amount": 5.0000,
                        "unit": "ks"
                    },
                    "referenceReceiptId": null,
                    "vatRate": null,
                    "specialRegulation": null,
                    "voucherNumber": null,
                    "seller": null,
                    "description": null
                }
            ],
            "vatRatesTaxSummary":
            {
                "totalVatBase": 4.93,
                "totalVatAmout": 0.43,
                "totalTaxableAmount": 5.36,
                "totalNonTaxableAmount": 2.00,
                "totalAmount": 7.36,
                "items":
                [
                    {
                        "vatRate": 20.00,
                        "vatBase": 1.67,
                        "vatAmount": 0.33,
                        "totalAmount": 2.00
                    },
                    {
                        "vatRate": 10.00,
                        "vatBase": 1.02,
                        "vatAmount": 0.10,
                        "totalAmount": 1.12
                    },
                    {
                        "vatRate": 0.00,
                        "vatBase": 2.24,
                        "vatAmount": 0.00,
                        "totalAmount": 2.24
                    },
                    {
                        "vatRate": null,
                        "vatBase": 2.00,
                        "vatAmount": 0.00,
                        "totalAmount": 2.00
                    }
                ]
            },
            "okp": "7017f94e-b757cb44-2534d7d2-ca8e6270-33cf106c",
            "pkp": "aGG1KtFMH7KucUOsRJ2BQuzIT81F66V479o2nUC1nvwaN4Nrz3ogx6+Xkmf6g7VRZUuKROIEY5wOxkWY1xz+tSumKMBRerwKSKWqxwNUaVxpYTW2CukuWuakgF8JEWUTWhQJwdC/zemD4OguvzBRVo+qbgwjzsJbzXej9fHTfFcoEN5gPDNst2M7NxzXktbsXJL17rm4V0rk0EtBwdz9k8meaUSkgSCZ80ZbSlhlGC1RjpxxT0IaMIKVOb6G84Km1wbFuoAZCblpH/5AtirzurHr88l0zfABjcVimi+R7fQ0qNfnSblmbcvAjdEkAFN6xK+Tb3eU7EYCT6vjKx3WHQ==",
            "payments":
            [
                {
                    "name": "Hotovosť",
                    "amount": 8.00
                },
                {
                    "name": "Výdavok",
                    "amount": -0.64
                }
            ],
            "headerText": "https://ekasa.ninedigit.sk",
            "footerText": "Ďakujeme za nákup!",
            "createDate": "2024-11-20T15:34:13+01:00",
            "dic": "1234567890",
            "cashRegisterCode": "88812345678900001"
        },
        "id": "6b2b3d71-51e2-4fc4-b03b-93d99d4489b7",
        "externalId": null,
        "date": "2024-11-20T15:34:13+01:00",
        "sendingCount": 1
    },
    "response":
    {
        "data":
        {
            "id": "O-4467FA6FBB444D43A7FA6FBB444-TEST"
        },
        "processDate": "2024-11-20T15:34:14+01:00"
    },
    "isSuccessful": true,
    "error": null,
    "$type": "Receipt"
}
Warning

Odpoveď na registráciu dokladu obsahuje aj sumárne informácie podľa kategórie DPH (základná vs. znížená), ktoré však v prípade kombinácie viacerých sadzieb (23% a 20% - obe základné sadzby) môžu viesť k nejednoznačným výsledkom, preto odporúčame za účelom získania finančných ukazovateľov o obratoch DPH takéto vlastnosti nepoužívať a uprednostniť vlastnosť vatRatesTaxSummary (tzv. rekapituláciu DPH).

Menovite ide o túto skupinu vlastností:

  • basicVatAmount
  • reducedVatAmount
  • secondReducedVatAmount
  • taxFreeAmount
  • nonTaxableAmount
  • taxBaseBasic
  • taxBaseReduced
  • taxBaseSecondReduced

V budúcich verziách môžu byť tieto vlastnosti odstránené (nie skôr, ako vo verzii 8.0).

7.1 Získanie čísla dokladu

Číslo dokladu je unikátne číslo v rámci kalendárneho mesiaca.

Ide o súvislú číselnú radu, ktorá je spoločná pre všetky typy pokladničných dokladov.

Číslo dokladu sa nachádza v poli request.data.receiptNumber.

7.2 Získanie unikátneho identifikátora dokladu

Unikátny identifikátor dokladu je vhodné si v nadradenej aplikácii pamätať pre účely prípadného dodatočného stornovania dokladu, prípadne pri vrátení tovaru (reklamácia, ...).

Ak je požiadavka vybavená v online režime (isSuccessful nadobúda hodnotu true), k dispozícií je unikátny identifikátor dokladu pridelený systémom eKasa, ktorý sa nachádza v poli response.data.id.

Ak je požiadavka vybavená v offline režime (isSuccessful nadobúda hodnotu null), unikátny identifikátor dokladu pridelený systémom eKasa nie je k dispozícii. V takomto prípade sa miesto unikátneho identifikátora používa overovací kód podnikateľa, ktorý sa nachádza v poli request.data.okp.

Jeden z týchto dvoch identifikátorov je pri korekcii dokladu potrebné uvádzať do poľa referenceReceiptId položky dokladu.

7.3 Rekapitulácia DPH

Súčasťou návratovej odpovede je od verzie 7.0.0 aj vlastnosť request.data.vatRatesTaxSummary, ktorá obsahuje sumárne informácie rozdelené na základe príslušnosti ku konkrétnej sadzbe DPH (tzv. rekapituláciu DPH). V prípade registrácie dokladu, ktorý neobsahuje položky (vlastnosť items je null), platí, že aj vlastnosť vatRatesTaxSummary nadobúda hodnotu null.

Táto vlastnosť je k dispozícii aj pre doklady vytvorené staršími verziami aplikácie (pred aktualizáciou na verziu 7.0.0).

Význam vlastností:

Vlastnosť Význam Príklad
totalVatBase Celková suma základov dane pre položky podliehajúce DPH 10.00
totalVatAmout Celková suma výšky dane 2.30
totalTaxableAmount Celková suma položiek podliehajúcich DPH 12.30
totalNonTaxableAmount Celková suma položiek nepodliehajúcich DPH 0.15
totalAmount Celková suma všetkých položiek 12.45
items Zoznam sumárnych informácii rozdelených podľa konkrétnej sadzby DPH. Obsahuje informácie za tie sadzby DPH (resp. za položky nepodliehajúce DPH), ktoré sú zastúpené na doklade v zozname položiek (vlatnosť items)

Vo vlastnosti items je dátova štruktúra každého elementu nasledovná:

Vlastnosť Význam Príklad
vatRate Sadzba dane z pridanej hodnoty, alebo null pre položky nepodliehajúce DPH (napr. pri predaji alebo vrátení vrátnych obalov). Hodnota 23.00 reprezentuje sadzbu DPH 23% 23.00
vatBase Predstavuje celkovú sumu základu dane pre danú sadzbu DPH. 10.00
vatAmount Predstavuje sumu DPH pre danú sadzbu DPH. 2.30
totalAmount Predstavuje celkový obrat pre danú sadzbu DPH. 12.30

Pre každú položku (vrátane sumáru pre položky nepodliehajúce DPH, tzn. vatRate je null) platí vzťah vatBase + vatAmount = totalAmount.

Príklad:

{
    "totalVatBase": 4.93,
    "totalVatAmout": 0.43,
    "totalTaxableAmount": 5.36,
    "totalNonTaxableAmount": 2.00,
    "totalAmount": 7.36,
    "items":
    [
        {
            "vatRate": 20.00,
            "vatBase": 1.67,
            "vatAmount": 0.33,
            "totalAmount": 2.00
        },
        {
            "vatRate": 10.00,
            "vatBase": 1.02,
            "vatAmount": 0.10,
            "totalAmount": 1.12
        },
        {
            "vatRate": 0.00,
            "vatBase": 2.24,
            "vatAmount": 0.00,
            "totalAmount": 2.24
        },
        {
            "vatRate": null,
            "vatBase": 2.00,
            "vatAmount": 0.00,
            "totalAmount": 2.00
        }
    ]
}

8. Oprava dokladu

Oprava dokladu môže mať rôzne príčiny a preto aj registrácia takejto operácie v systéme eKasa sa môže líšiť.

Táto sekcia popisuje viaceré situácie, ktoré v súvislosti s opravami dokladov môžu nastať:

Situácia Riešenie
Obsluha pokladnice vykonala omyl Storno dokladu
Zákazník vracia tovar zakúpený tovar Vrátenie dokladu
Zakazník uhradil faktúru v hotovosti a následne túto úhradu potrebujeme vrátiť Vrátenie úrady faktúry
Dobropisovanie faktúry uhradenej inak, ako v hotovosti (napr. prevodom na účet) Dobropis faktúry

8.1 Storno dokladu

Ak je potreba opraviť už vyhotovený doklad (storno dokladu, vrátenie tovaru a podobne), je potrebné zaregistrovať nový doklad, v ktorom sa budú nachádzať tie položky dokladu, ktoré majú byť opravené, s nasledovnými rozdielmi:

  • jednotkové ceny a celkové ceny položiek sa násobia konštantou -1, aby sme docielili opačný obrat.
  • typ položky dokladu sa z pôvodného typu mení na typ correction.
  • v každej položke je treba uviesť v poli referenceReceiptId unikátny identifikátor (alebo OKP) pôvodného dokladu.

Príklad

Pôvodný doklad:

URL: POST {{server_address}}/api/v1/requests/receipts/cash_register

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "positive",
          "name": "Coca Cola",
          "quantity": {
            "amount": 2.00,
            "unit": "ks"
          },
          "unitPrice": 1.99,
          "price": 3.98,
          "vatRate": 20.00
        },
        {
          "type": "discount",
          "name": "Vernostná zľava",
          "quantity": {
            "amount": 1.00
          },
          "unitPrice": -1.00,
          "price": -1.00,
          "vatRate": 20.00
        }
      ],
      "payments": [
        {
          "name": "Hotovosť",
          "amount": 2.98
        }
      ]
    }
  }
}

Storno doklad:

URL: POST {{server_address}}/api/v1/requests/receipts/cash_register

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "correction",
          "referenceReceiptId" : "O-15FEDE7682064367BEDE7682064-TEST",
          "name": "Coca Cola",
          "quantity": {
            "amount": 2.00,
            "unit": "ks"
          },
          "unitPrice": -1.99,
          "price": -3.98,
          "vatRate": 20.00
        },
        {
          "type": "correction",
          "referenceReceiptId" : "O-15FEDE7682064367BEDE7682064-TEST",
          "name": "Vernostná zľava",
          "quantity": {
            "amount": 1.00
          },
          "unitPrice": 1.00,
          "price": 1.00,
          "vatRate": 20.00
        }
      ],
      "payments": [
        {
          "name": "Hotovosť",
          "amount": -2.98
        }
      ]
    }
  }
}

8.2 Vrátenie tovaru

V prípade, že zákazník vráti zakúpený tovar, je potrebné zaregistrovať nový doklad, v ktorom sa budú nachádzať tie položky dokladu, ktoré sú vrátené:

  • do množstva sa vkladá počet vrátených jednotiek (ide o kladnú číselnú hodnotu)
  • typ položky dokladu sa z pôvodného typu mení na typ returned.
  • v každej položke je treba uviesť v poli referenceReceiptId unikátny identifikátor (alebo OKP) pôvodného dokladu.

Ak sa na položku vzťahuje zľava, je možné tovar vrátiť spojením pôvodnej kladnej položky a prislúchajúcej zľavy do jednej položky, ktorej celková suma bude rovná súčtu ceny kladnej položky a výške prislúchajúcej zľavy (príklad č. 1).

Alternatívne je možné položku zľavy zaregistrovať ako kladnú položku (príklad č. 2).

Príklad č.1

Pôvodný doklad:

URL: POST {{server_address}}/api/v1/requests/receipts/cash_register

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "positive",
          "name": "Coca Cola",
          "quantity": {
            "amount": 2.00,
            "unit": "ks"
          },
          "unitPrice": 1.99,
          "price": 3.98,
          "vatRate": 20.00
        },
        {
          "type": "discount",
          "name": "Vernostná zľava",
          "quantity": {
            "amount": 1.00
          },
          "unitPrice": -1.00,
          "price": -1.00,
          "vatRate": 20.00
        }
      ],
      "payments": [
        {
          "name": "Hotovosť",
          "amount": 2.98
        }
      ]
    }
  }
}

Doklad s vrátením tovaru:

URL: POST {{server_address}}/api/v1/requests/receipts/cash_register

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "returned",
          "referenceReceiptId" : "O-15FEDE7682064367BEDE7682064-TEST",
          "name": "Coca Cola",
          "quantity": {
            "amount": 2.00,
            "unit": "ks"
          },
          "unitPrice": -1.49,
          "price": -2.98,
          "vatRate": 20.00
        }
      ],
      "payments": [
        {
          "name": "Hotovosť",
          "amount": -2.98
        }
      ]
    }
  }
}

Príklad č.2

Pôvodný doklad:

URL: POST {{server_address}}/api/v1/requests/receipts/cash_register

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "positive",
          "name": "Coca Cola",
          "quantity": {
            "amount": 2.00,
            "unit": "ks"
          },
          "unitPrice": 1.99,
          "price": 3.98,
          "vatRate": 20.00
        },
        {
          "type": "discount",
          "name": "Vernostná zľava",
          "quantity": {
            "amount": 1.00
          },
          "unitPrice": -1.00,
          "price": -1.00,
          "vatRate": 20.00
        }
      ],
      "payments": [
        {
          "name": "Hotovosť",
          "amount": 2.98
        }
      ]
    }
  }
}

Doklad s vrátením tovaru:

URL: POST {{server_address}}/api/v1/requests/receipts/cash_register

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "returned",
          "referenceReceiptId" : "O-15FEDE7682064367BEDE7682064-TEST",
          "name": "Coca Cola",
          "quantity": {
            "amount": 2.00,
            "unit": "ks"
          },
          "unitPrice": -1.99,
          "price": -3.98,
          "vatRate": 20.00
        },
        {
          "type": "positive",
          "name": "Vrátenie zľavy",
          "quantity": {
            "amount": 1.00
          },
          "unitPrice": 1.00,
          "price": 1.00,
          "vatRate": 20.00
        }
      ],
      "payments": [
        {
          "name": "Hotovosť",
          "amount": -2.98
        }
      ]
    }
  }
}

8.3 Vrátenie úhrady faktúry

V prípade, ak je potrebné vratiť zaevidovanú hotovostnú úhradu faktúry, ktorá bola zaregistrovaná cez systém eKasa prostredníctvom dokladu typu invoice, postup je podobný, ako pri vrátení tovaru - vrátenie realizujete vytvorením pokladničného dokladu (doklad typu cash_register), do ktorého vložite nasledovnú položku:

  • typ položky bude correction
  • cena tejto položky bude rovná zápornej sume pôvodnej hotovostnej úhrady faktúry
  • do poľa referenceReceiptId vložíme identifikátor pôvodného dokladu - faktúry
  • v názve položky uvediete napríklad "Dobropis faktúry číslo ...".

Príklad hotovostnej úhrady faktúry:

URL: POST {{server_address}}/api/v1/requests/receipts/invoice

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "invoiceNumber": "FA-0001",
      "amount": 189.90
    }
  }
}

Príklad vrátenia hotovostnej úhrady faktúry:

URL: POST {{server_address}}/api/v1/requests/receipts/cash_register

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "correction",
          "referenceReceiptId" : "O-15FEDE7682064367BEDE7682064-TEST",
          "name": "Dobropis faktúry číslo FA-0001",
          "quantity": {
            "amount": 1.00,
            "unit": "ks"
          },
          "unitPrice": -189.90,
          "price": -189.90,
          "vatRate": 0.00
        }
      ]
    }
  }
}

8.4 Dobropis faktúry

V prípade, ak je potrebné dobropisovať faktúru, ktorá nebola uhradená prostredníctvom systému eKasa a teda neexistuje k nej pokladničný doklad úhrady faktúry s unikátnym identifikátorom, možné je dobropis zaregistrovať vo forme hotovostnej úhrady faktúry (doklad typu invoice) so záporným znamienkom:

Príklad dobropisovania faktúry zápornou úhradou:

URL: POST {{server_address}}/api/v1/requests/receipts/invoice

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "invoiceNumber": "FA-0001",
      "amount": -189.90
    }
  }
}

9. Zľava na doklade

Pre zníženie celkovej sumy dokladu je možné používať položky typu zľava. V nasledujúcich odsekoch sú uvedené príklady na aplikovanie zľavy na jednu položku účtu a aplikovanie zľavy na celý doklad.

Pri komponovaní položky zľavy je potrebné zabezpečiť, aby celková suma zliav (v absolútnej hodnote) nepresiahla sumu ostatných evidovaných položiek dokladu v rovnakej sadzbe DPH. Napríklad, ak doklad obsahuje jednu kladnú položku s hodnotou 10 eur, na doklad je možné aplikovať iba zľavu v rovnakej sadzbe DPH, v akej je evidovaná kladná položka dokladu a zároveň suma zľavy nesmie presiahnúť 10 eur.

Ak by doklad pozostával z troch položiek v rôznych sadzbách DPH, pričom každá má hodnotou 1 euro, na doklad je možné aplikovať iba zľavu vo výške 1 euro za každú sadzbu DPH.

Ak toto pravidlo nebude dodržané, zo systému je vrátená chybová hláška so znením Doklad je nevalídny: 'Suma zliav nesmie presiahnúť sumu ostatných evidovaných položiek dokladu v rovnakej sadzbe DPH.' (platí od verzie 5.4).

9.1 Zľava na položku účtu

Ak je na položku dokladu aplikovaná zľava, je potrebné ju v zozname položiek evidovať ako ďalšiu položku, ktorá:

  • má typ položky discount
  • má rovnakú sadzbu DPH, ako pôvodná položka

Príklad:

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "positive",
          "name": "Coca Cola",
          "quantity": {
            "amount": 2.00,
            "unit": "ks"
          },
          "unitPrice": 1.99,
          "price": 3.98,
          "vatRate": 20.00
        },
        {
          "type": "discount",
          "name": "Vernostná zľava",
          "quantity": {
            "amount": 1.00
          },
          "unitPrice": -1.00,
          "price": -1.00,
          "vatRate": 20.00
        }
      ],
      "payments": [
        {
          "name": "Hotovosť",
          "amount": 2.98
        }
      ]
    }
  }
}

9.2 Zľava na celý doklad

Ak chceme aplikovať zľavu na celý doklad, je potrebné pre každú použitú sadzbu DPH vytvoriť jednu zľavovú položku. To znamená, že doklad bude obsahovať najmenej toľko položiek typu discount, koľko je v doklade použitých rôznych sadzieb DPH.

Príklad: Doklad s 3 položkami v rôznych sadzbách DPH, na ktorý chceme aplikovať 50% zľavu. Z pôvodných 16 EUR tak suma zliav tvorí 8 EUR.

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [
        {
          "type": "positive",
          "name": "Položka v základnej sadzbe DPH",
          "quantity": {
            "amount": 10
          },
          "unitPrice": 1.00,
          "price": 10.00,
          "vatRate": 20.00
        },
        {
          "type": "positive",
          "name": "Položka v zníženej sadzbe DPH",
          "quantity": {
            "amount": 5
          },
          "unitPrice": 1.00,
          "price": 5.00,
          "vatRate": 10.00
        },
        {
          "type": "positive",
          "name": "Položka v nulovej sadzbe DPH",
          "quantity": {
            "amount": 1
          },
          "unitPrice": 1.00,
          "price": 1.00,
          "vatRate": 0.00
        },
        {
          "type": "discount",
          "name": "Zľava 50% na celý doklad",
          "quantity": {
            "amount": 1
          },
          "unitPrice": -5.00,
          "price": -5.00,
          "vatRate": 20.00
        },
        {
          "type": "discount",
          "name": "Zľava 50% na celý doklad",
          "quantity": {
            "amount": 1
          },
          "unitPrice": -2.50,
          "price": -2.50,
          "vatRate": 10.00
        },
        {
          "type": "discount",
          "name": "Zľava 50% na celý doklad",
          "quantity": {
            "amount": 1
          },
          "unitPrice": -0.50,
          "price": -0.50,
          "vatRate": 0.00
        }
      ]
    }
  }
}

10. Predaj a uplatnenie poukazu

Pri predaji a uplatňovaní poukážok je potrebné rozlišovať medzi "jednoúčelovými" a "viacúčelovými" poukážkami.

  • Jednoúčelový poukaz: poukaz, pri ktorom je vopred známe miesto dodania tovaru alebo služby, na ktorý bude poukaz uplatnený, ako aj hladina DPH daného tovaru alebo služby.
  • Viacúčelový poukaz: poukaz iný, ako jednoúčelový. Teda poukaz, pri ktorom nie je vopred jasný typ, prípadne miesto dodania tovaru alebo služby, a teda hladina DPH nie je vopred známa.

V závislosti od typu poukazu sa uplatňovanie poukazu v eKase líši, viac v odstavcoch nižšie.

10.1 Jednoúčelový poukaz

Pre uplatnenie vopred zakúpeného jednoúčelového poukazu je potrebné do dokladu vložiť položku typu Voucher (jednoúčelový poukaz).

Ak je celková hodnota tohto poukazu vyššia, ako suma ostatných položiek dokladu v rovnakej sadzbe DPH, výsledná suma dokladu je 0 €, nakoľko z hodnoty poukazu nie je možné vrátiť finančný rozdiel. (platí od verzie 5.4)

V prípade, ak sa na doklade nachádza položka uplatenenia jednoúčelového poukazu (typ Voucher), na doklade sa okrem nej smú nachádzať iba položky typu voucher, positive alebo discount. Ostatné typy položiek nie sú v tomto prípade povolené.

Tip

Od verzie 5.6.3 do verzie 6.10.4 bolo vyžadované, aby kladná položka aj položka typu Voucher boli evidované v rovnakej sadzbe DPH.

Toto pravidlo bolo od verzie 7.0 odstránené v súvislosti so zmenou DPH od 1.1.2025, nakoľko ojedinele môže dôjsť k zmene sadzby na tovare/službe nie len v rámci základnej/zníženej sadzby, ale niektoré tovary/služby môžu prejsť aj zo základnej do zníženej, je povolené evidovať položku alebo službu, na ktorú sa JÚP vzťahuje a samotný JÚP v rozdielných sadzbách DPH (t.j. kríženie sadzieb je možné ľubovoľne).

Poznámka:

Príklad 1: Podnikateľ prijal jednoúčelový poukaz na výmenu vo výške 20 € na nákup produktov. Kupujúci si za daný poukaz kúpil produkty v hodnote 18 €. V tomto prípade je hodnota zakúpeného tovaru nižšia ako hodnota poukazu a nakoľko z hodnoty poukazu nie je možné vrátiť finančný rozdiel, výsledná suma dokladu je 0 €.

Príklad 2: Podnikateľ prijal jednoúčelový poukaz na výmenu vo vyške 100 € na nákup produktov v sadzbe DPH 20%. Kupujúci nakúpil dva produkty, prvý v cene 60 € a sadzbe DPH 20% a druhý v cene 40 € a sadzbe DPH 10%. Výsledná suma dokladu je 40 €, nakoľko jednoúčelový poukaz za uplatňuje len na rovnakú sadzbu DPH.

Predaj jednoúčelového poukazu:

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [{
        "type": "positive",
        "name": "Predaj jednoúčelového poukazu",
        "quantity": {
          "amount": 1.00,
          "unit": "ks"
        },
        "unitPrice": 20.00,
        "price": 20.00,
        "vatRate": 20.00
      }],
      "payments": [{
        "name": "Hotovosť",
        "amount": 20
      }]
    }
  }
}

Uplatnenie jednoúčelového poukazu:

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [{
        "type": "positive",
        "name": "Produkt",
        "quantity": {
          "amount": 1.00,
          "unit": "ks"
        },
        "unitPrice": 18.00,
        "price": 18.00,
        "vatRate": 20.00
      }, {
        "type": "voucher",
        "name": "Uplatnenie poukazu 20 EUR",
        "quantity": {
          "amount": 1.00,
          "unit": "ks"
        },
        "unitPrice": -20.00,
        "price": -20.00,
        "vatRate": 23.00,
          "voucherNumber": "123456"
      }],
      "payments": [{
        "name": "Hotovosť",
        "amount": 0 // výsledná suma dokladu je 0 eur
      }]
    }
  }
}

10.2 Viacúčelový poukaz

Warning

Uvedené riešenie predaja a uplatnenia viacúčelového poukazu je iba ilustračné a nepokrýva všetky prípady uvedené v metodickom pokyne finančnej správy. V prípade nejasností sa obráťte na podporu finančnej správy.

10.2.1. Predaj viacúčelového poukazu

Pri predaji viacúčelového poukazu sa v doklade môže evidovať kladná položka (typ positive) v nulovej sadzbe DPH.

Tip

V zmysle § 9a ods. 5 zákona o DPH na rozdiel od prevodu jednoúčelového poukazu, ktorý sa považuje za dodanie tovaru alebo dodanie služby, na ktoré sa poukaz vzťahuje, prevod viacúčelového poukazu sa nepovažuje za dodanie tovaru alebo služby a nie je predmetom dane.

Zdroj: Metodický pokyn k uplatňovaniu dane z pridanej hodnoty v prípade dodania tovaru a služby pri použití poukazu podľa § 9a zákona č. 222/2004 Z. z. o dani z pridanej hodnoty v znení neskorších predpisov

Príklad:

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [{
        "type": "positive",
        "name": "Predaj viacúčelového poukazu",
        "quantity": {
          "amount": 1.00,
          "unit": "ks"
        },
        "unitPrice": 100.00,
        "price": 100.00,
        "vatRate": 0.00
      }],
      "payments": [{
        "name": "Hotovosť",
        "amount": 100
      }]
    }
  }
}

10.2.2. Uplatnenie viacúčelového poukazu

Pre uplatnenie poukazu je v položkách dokladu uvedená položka typu advance v nulovej sadzbe DPH a so zápornou sumou, ktorá tak znižuje výslednú sumu za doklad.

Výška dane ostáva nenulová (odvádza sa tak v čase uplatnenia poukazu, nie v čase jeho predaja).

Príklad:

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [{
        "type": "positive",
        "name": "Televízor",
        "quantity": {
          "amount": 1.00,
          "unit": "ks"
        },
        "unitPrice": 800.00,
        "price": 800.00,
        "vatRate": 20.00
      }, {
        "type": "advance",
        "name": "Uplatnenie viacúčelového poukazu",
        "quantity": {
          "amount": 1.00,
          "unit": "ks"
        },
        "unitPrice": -100.00,
        "price": -100.00,
        "vatRate": 0.00
      }],
      "payments": [{
        "name": "Hotovosť",
        "amount": 700 // kupujúcemu ostáva uhradiť sumu zníženú o cenu poukazu
      }]
    }
  }
}

11. Dodatočné texty na doklade

Doklad obsahuje dodatočné vlastnosti pre vloženie dodatočných textov na doklad.

Názov Popis Poznámka
headerText Text tlačený hneď za identifikačnými údajmi V prípade použitia tokenov nie je aplikovaný pageBreak token
footerText Text tlačený na konci dokladu, za QR kódom

Obe vlastnosti podporujú použitie tzv. token-ov pre formátovanie, tlač QR kódov a čiarových kódov. Viac nájdete v článku Tokeny a formátovanie textu.

Príklad:

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "invoiceNumber": "FA-0001",
      "amount": 189.90,
      "headerText": "Nine Digit, s.r.o.\r\nweb: www.ninedigit.sk",
      "footerText": "Otvorené non-stop."
    }
  }
}

12. Overenie dokladu

V prípade, že testujete integráciu na integračnom prostredí systému eKasa, Vaše doklady si môžete overiť na adrese: https://iekasa.financnasprava.sk/opd/#!/check.

13. Zaokrúhľovanie

Od 1.7.2022 nadobúda účinnosť zmena v zákone o cenách, ktorá prináša povinné zaokrúhľovanie za účelom obmedzenia používania 1 eurocentových a 2 eurocentových mincí.

Cena platená v hotovosti sa zaokrúhľuje na 5 eurocentov. Celkový zvyšok nezaokrúhlenej ceny platenej v hotovosti, ktorý je nižší ako polovica hodnoty 5 eurocentov, sa zaokrúhľuje nadol a celkový zvyšok nezaokrúhlenej ceny platenej v hotovosti, ktorý je rovný alebo vyšší ako polovica hodnoty 5 eurocentov, sa zaokrúhľuje nahor. Cena platená v hotovosti vo výške 1 eurocent alebo 2 eurocenty sa zaokrúhľuje na 5 eurocentov.

Tá časť dokladu, ktorá je hradená bezhotovostne (platobnou kartou, stravnými lístkami, atď.) nie je predmetom zaokrúhľovania. Zaokrúhľuje sa iba čiastka platená v hotovosti.

Výpočet DPH bude zo sumy pred zaokrúhlením. Zaokrúhľovanie pri platbe nákupu v hotovosti tak nebude mať vplyv na výpočet DPH z nákupu tovaru.

13.1 Vlastnosť roundingAmount

Pole pre uvedenie čiastky na zaokrúhlenie (vlastnosť roundingAmount) je k dispozícii pre tie typy dokladov, kde nadradená aplikácia priamo neuvádza celkovú sumu za doklad (teda neobsahujú pole amount). Ide o pokladničný doklad (cashRegister), neplatný doklad (invalid) a paragón (paragon).

Pre ostatné typy dokladov (úhrada faktúry invoice, vklad deposit a výber withdraw) platí, že nadradená aplikácia uvádza celkovú sumu za doklad (pole amount) vyjadrenú po zaokrúhlení.

Typ dokladu Identifikátor typu dokladu Obsahuje vlastnosť roundingAmount
Pokladničný doklad CashRegister Áno
Neplatný doklad Invalid Áno
Paragón Paragon Áno
Faktúra Invoice Áno (od verzie 5.24)
Paragón pri úhrade faktúry InvoiceParagon Áno (od verzie 5.24)
Doklad označený slovom „Vklad“ Deposit Nie
Doklad označený slovom „Výber“ Withdraw Nie

13.2. Príklady

Príklad 1: úhrada v hotovosti

Ak je nákupu hradený v hotovosti, suma je predmetom zaokrúhlenia. K sume 0.08 doplníme zaokrúhlenie (vlastnosť roundingAmount) vo výške 0.02 eur. Výsledná suma účtu je 0.10 eur.

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [{
        "type": "positive",
        "name": "Pečivo",
        "quantity": {
          "amount": 1,
          "unit": "ks"
        },
        "unitPrice": 0.08,
        "price": 0.08,
        "vatRate": 20.00
      }],
      "roundingAmount": 0.02,
      "payments": [{
        "name": "Hotovosť",
        "amount": 0.10
      }]
    }
  }
}

Príklad 2: úhrada bezhotovostne

Ak je celková cena nákupu hradená bezhotovostne, cena sa nezaokrúhľuje.

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [{
        "type": "positive",
        "name": "Pečivo",
        "quantity": {
          "amount": 1,
          "unit": "ks"
        },
        "unitPrice": 0.08,
        "price": 0.08,
        "vatRate": 20.00
      }],
      "roundingAmount": 0,
      "payments": [{
        "name": "Platobná karta",
        "amount": 0.08
      }]
    }
  }
}

Príklad 3: úhrada kombináciou platidiel

Ak je nákup hradený kombináciou hotovostných a iných platidiel, zaokrúhľuje sa iba cena hradená v hotovosti.

Kupujúci chce zaplatiť dvomi stravnými lístkami v hodnote 3,83€, spolu 7,66 € a zvyšok doplatiť v hotovosti. Hodnota stravných lístkov, nakoľko nie je hotovosťou, sa odpočíta z výslednej nezaokrúhlenej ceny nákupu. Zaokrúhli sa až zvyšná cena nákupu platená v hotovosti, čiže 48,33 – 7,66 = 40,68 €, a to matematicky nahor, na 40,70 €. Kupujúci doplatí v hotovosti 40,70 €. Výsledná cena nákupu po zaokrúhlení bude 48,36 €.

Požiadavka:

{
  "request": {
    "data": {
      "cashRegisterCode": "88812345678900001",
      "items": [{
        "type": "positive",
        "name": "Pečivo",
        "quantity": {
          "amount": 1,
          "unit": "ks"
        },
        "unitPrice": 48.34,
        "price": 48.34,
        "vatRate": 20.00
      }],
      "roundingAmount": 0.02,
      "payments": [{
        "name": "Stravné lístky",
        "amount": 7.66
      },
      {
        "name": "Hotovosť",
        "amount": 40.70
      } ]
    }
  }
}

Odpoveď:

{
  "request": {
    "data": {
      "amount": 48.36,
      "roundingAmount": 0.02,
      ...
    },
    ...
  },
  ...
}

13.3. Tabuľka s príkladmi zaokrúhľovania platených cien:

Platená cena v € pred zaokrúhlením Platená cena v € po zaokrúhlení Poznámka
0,01 0,05 Cena do 0,02 € vrátane, ktorá by sa matematicky zaokrúhlila na 0,00 €, sa zaokrúhli nahor, na 0,05 €.
0,02 0,05 Cena do 0,02 € vrátane, ktorá by sa matematicky zaokrúhlila na 0,00 €, sa zaokrúhli nahor, na 0,05 €.
0,03 0,05 Matematické zaokrúhlenie.
0,04 0,05 Matematické zaokrúhlenie.
0,05 0,05 Cena sa nezaokrúhľuje.
0,06 0,05 Matematické zaokrúhlenie.
0,07 0,05 Matematické zaokrúhlenie.
0,08 0,10 Matematické zaokrúhlenie.
0,09 0,10 Matematické zaokrúhlenie.
0,10 0,10 Cena sa nezaokrúhľuje.
0,11 0,10 Matematické zaokrúhlenie.
0,12 0,10 Matematické zaokrúhlenie.
0,13 0,15 Matematické zaokrúhlenie.
0,14 0,15 Matematické zaokrúhlenie.
0,15 0,15 Cena sa nezaokrúhľuje.
0,16 0,15 Matematické zaokrúhlenie.
0,17 0,15 Matematické zaokrúhlenie.
0,18 0,20 Matematické zaokrúhlenie.
0,19 0,20 Matematické zaokrúhlenie.
0,20 0,20 Suma sa nezaokrúhľuje.
... ... ...

Viac informácii o zaokrúhľovaní nájdete tu:

  • Tlačová správa ministerstva financií
  • Návrh zákona

14. Odpočet prijatej zálohy

V prípade, ak predávajúci prijal zálohu za tovar alebo službu, ju v čase predania tovaru či služby musí odpočítať.

Odpočet zálohy je realizovaný položkou dokladu s typom advance, ktorá má zápornú cenu. Položku odpočtu zálohy uvádzame na rovnakom doklade, na ktorom je evidovaná kladná položka (positive) reprezentujúca tovar či službu, ku ktorej sa odpočet zálohy vzťahuje (platí od verzie 7).

V prípade, ak sa na doklade nachádza položka typu advance a žiadná iná kladná položka (positive), vyhlásená je chyba: Odpočítaná záloha sa môže evidovať len v prípade, ak je na pokladničnom doklade evidovaná kladná položka.

14.1 Odpočet zálohy a dodanie tovaru naprieč zmenou sadzieb DPH

Nakoľko časť tovarov prechádza napríklad zo základnej sadzby (20% do 31.12.2024) do zníženej (po 1.1.2025 v 19%), môže tak vzniknúť situácia prijatia zálohy pred 1.1.2025 a dodania tovaru s následným doplatkom ceny po 1.1.2025.

Z uvedeného dôvodu eKasa povoľuje tzv. "kríženie sadzieb", kedy je prijatie zálohy a jej odpočet evidované v inej sadzbe DPH, než v akej je realizovaný predaj (doplatok) kladnej položky. Kríženie sadzieb je povolené nielen v rámci rovnakej sadzby (napr základná sadzba 20% vs. základná sadzba 23%), ale aj medzi základnou a zníženou sadzbou.

Pri uplatnení príslušnej sadzby dane pri zmene sadzieb tak, ako to upravuje zákon č. 278/2024 Z. z., ktorým sa menia a dopĺňajú niektoré zákony v súvislosti s ďalším zlepšovaním verejných financií (novela zákona o DPH účinná od 1.1.2025), je rozhodujúcou skutočnosťou deň vzniku daňovej povinnosti. V prípade, že platiteľ prijal zálohu do 31.12.2024 na plnenie, ktoré bude poskytnuté (tovar alebo služba bude dodaná) po 31.12.2024, musí uplatniť sadzbu dane platnú v čase vzniku každej daňovej povinnosti, tzn. sadzbu dane platnú v čase prijatia preddavku (zálohy) a sadzbu dane platnú v čase dodania tovaru alebo služby na tú časť ceny plnenia, ktorú požaduje a ktorá nebola zahrnutá do prijatej zálohy. Daňová povinnosť totiž vzniká nielen dodaním tovaru alebo služby ale aj v zmysle § 19 ods. 4 zákona o DPH dňom prijatia platby vopred za dodanie tovaru alebo služby.

Ustanovenie § 85ko predmetnej novely upravuje situácie, keď dôjde po 1.1.2025 k oprave základu dane v zmysle § 25 ods. 1 zákona o DPH, tzn. k úplnému alebo čiastočnému zrušeniu dodávky tovaru alebo služby alebo k úplnému alebo čiastočnému vráteniu dodávky tovaru a k zníženiu alebo zvýšeniu ceny tovaru alebo služby, pri ktorých vznikla daňová povinnosť do 31.12.2024. V týchto prípadoch platiteľ vykonávajúci opravu základu dane podľa § 25 zákona o DPH použije sadzbu dane platnú v čase vzniku daňovej povinnosti, pričom je povinný vypočítať sumu opravenej dane pomerne podľa výšky, v akej sa znížený základ dane vzťahuje na každú vzniknutú daňovú povinnosť.

Zdroj: FS SR

In This Article
Na začiatok stránky Nine Digit, s.r.o. ©