Popis formátu

Publikováno 11.11.2024

Popis formátu QR Faktury

QR Faktura používá pro reprezentaci účetních dat z faktury formát Short Invoice Descriptor (SIND) pro snadné načtení. Aby jej mohli implementovat tvůrci SW pro vystavování faktur, ostatní výstavci faktur a například e-shopy.

Formát řetězce QR Faktury je navržen tak, aby byl kompaktní, co se velikosti obsažených dat týče. Výhodou navrženého formátu je relativně dobrá lidská čitelnost a potenciální rozšiřitelnost o specifické atributy.

Znaková sada a formát řetězce

Řetězec může obsahovat libovolné znaky ze znakové sady UTF-8. Pro efektivní uložení do QR kódu doporučujeme sestavit řetězec tak, aby obsahoval pouze následující znaky:

  • 0–9
  • A–Z (pouze velká písmena)
  • Mezera
  • $, %, *, +, -, ., /, :

Při zachování znaků výhradně z uvedené množiny bude použit tzv. alfanumerický formát QR kódu. Množina znaků používaná v klíčích a řídících strukturách navrženého formátu je proto volena právě z této množiny tak, aby nebylo zabráněno dosažení maximální možné efektivity uložení účetních informací do QR kódů. Bude-li v hodnotě kteréhokoli pole použit znak z jiné množiny, než je uvedena výše, bude použit tzv. binární formát QR kódu.

Řetězec je vždy zahájen fixní hlavičkou SID*. Následuje verze protokolu (dvě čísla oddělená tečkou) ukončená hvězdičkou, např. 1.0*. Následně řetězec obsahuje jednotlivé účetní atributy ve formátu:

${klíč}:${hodnota}*

Tedy klíč je od hodnoty oddělen dvojtečkou, hodnota je zakončena hvězdičkou. Pole ${hodnota} smí obsahovat hvězdičku pouze v případě, že řetězec není integrován s QR platbou. Hvězdička je v hodnotě zakódována jako %2A. Poslední hodnota v řetězci nemusí být ukončena hvězdičkou.

Klíče a hodnoty atributů

${klíč}

  • Klíč daného atributu je vždy zapsán velkými znaky z množiny znaků [A-Z-]. Seznam klíčů (základní sada atributů) je uveden v Tabulce 1.
  • Formát může být libovolně rozšířen o proprietární klíče (mimo definici tohoto standardu), které mají např. lokální význam pro konkrétní lokalitu, instituci, nebo výstavce.
  • Takové klíče obsahují na začátku svého názvu znaky „X-“. Tímto standardem definované proprietární klíče jsou uvedeny v Tabulce 2.
  • Každý klíč v řetězci musí mít hodnotu. Nepřipouští se existence klíče v řetězci bez hodnoty.
  • U některých klíčů lze interpretovat jednoznačným způsobem jejich nepřítomnost v řetězci (a tím zkrátit celkovou délku řetězce) – taková interpretace je u příslušných klíčů uvedena v Tabulce 1.

${hodnota}

  • Hodnota každého atributu může obsahovat libovolné znaky, ale musí být zároveň v přípustném formátu – viz. popis formátu hodnoty v Tabulce 1.
  • Hodnota nesmí být obklopena bílými znaky (tj. za “:” a před “*” nesmí být bílé znaky) a nesmí obsahovat znak * (hvězdička). Hodnota může obsahovat znak : (dvojtečka).
  • Hodnota může obsahovat speciální znaky kódované pomocí URL kódování, tj. např. hvězdičku je možno do hodnoty zahrnout pomocí zápisu %2A.

Pozn.: Podpora pro kódování speciálních znaků je základním parametrem typově podobných formátů. V principu existuje několik přístupů, např. HTML entity, back-slashing nebo touto specifikací zvolené URL kódování.


Tabulka 1 - Základní atributy
Klíč Povinný Délka Formát Popis formátu hodnoty Příklad zápisu klíče a hodnoty
ID ANO Max. 40 znaků Všechny znaky z povolené množiny mimo ‘*’ Jednoznačné označení dokladu ID:ABCD123456789EF*
DD ANO Právě 8 znaků ISO 8601, tj. datum ve formátu YYYYMMDD. Pouze numerické znaky DD:20160615*
AM ANO Max. 18 znaků Desetinné číslo. Max. 2 desetinné cifry. Tečka jako oddělovač desetinných míst. Výše celkové částky k úhradě v měně specifikované klíčem CC. V případě kladné hodnoty bez znaménka, záporná hodnota se znaménkem. AM:123456789.45*
TP NE Právě 1 znak Číslice Identifikace typu daňového plnění.
0, nebo není klíč v řetězci přítomen = běžný typ plnění
1 = RPDP
2 = smíšený
TP:0*
TD NE Právě 1 znak Číslice Identifikace typu dokladu.
0 – nedaňový doklad (např. zálohová faktura)
1 – opravný daňový doklad
2 – doklad k přijaté platbě
3 – splátkový kalendář
4 – platební kalendář
5 – souhrnný daňový doklad
9 – ostatní daňové doklady
Není-li klíč v řetězci přítomen = 9
TD:9*
SA NE Právě 1 znak Číslice Příznak, který rozlišuje, zda faktura obsahuje zúčtování záloh.
0, nebo klíč není v řetězci přítomen = faktura neobsahuje zúčtování záloh
1 = faktura obsahuje zúčtování záloh
SA:1*
MSG NE Max. 40 znaků Všechny znaky z povolené množiny mimo ‘*’ Textový popis předmětu fakturace MSG:KONZULTACE KVETEN 2016*
ON NE Max. 20 znaků Všechny znaky z povolené množiny mimo ‘*’ Číslo (označení) objednávky, k níž se vztahuje tento účetní doklad. ON:OBJ20160614TK*
VS NE Max. 10 znaků Celé číslo Variabilní symbol VS:1234567890*
VII NE Max. 14 znaků Alfanumerický řetězec DIČ výstavce VII:CZ12345678*
INI NE Max. 8 znaků Celé číslo IČO výstavce INI:12345678*
VIR NE Max. 14 znaků Alfanumerický řetězec DIČ příjemce VIR:CZ09876543*
INR NE Max. 8 znaků Celé číslo IČO příjemce INR:98765432*
DUZP NE Právě 8 znaků ISO 8601, tj. datum ve formátu YYYYMMDD. Pouze numerické znaky Datum uskutečnění zdanitelného plnění DUZP:20160413*
DPPD NE Právě 8 znaků ISO 8601, tj. datum ve formátu YYYYMMDD. Pouze numerické znaky Datum povinnosti přiznat daň DPPD:20161201*
DT NE Právě 8 znaků ISO 8601, tj. datum ve formátu YYYYMMDD. Pouze numerické znaky Datum splatnosti celkové částky DT:20160908*
TB0 NE Max. 18 znaků Desetinné číslo. Max. 2 desetinné cifry. Tečka jako oddělovač desetinných míst Částka základu daně v základní daňové sazbě v CZK včetně haléřového vyrovnání. V případě kladné hodnoty bez znaménka, záporná hodnota se znaménkem. Znaménko vždy explicitně určuje směr toku peněz bez ohledu na jiné atributy. TB0:3000*
T0 NE Max. 18 znaků Desetinné číslo. Max. 2 desetinné cifry. Tečka jako oddělovač desetinných míst Částka daně v základní daňové sazbě v CZK včetně haléřového vyrovnání. V případě kladné hodnoty bez znaménka, záporná hodnota se znaménkem. Znaménko vždy explicitně určuje směr toku peněz bez ohledu na jiné atributy. T0:630*
TB1 NE Max. 18 znaků Desetinné číslo. Max. 2 desetinné cifry. Tečka jako oddělovač desetinných míst Částka základu daně v první snížené daňové sazbě v CZK včetně haléřového vyrovnání. V případě kladné hodnoty bez znaménka, záporná hodnota se znaménkem. Znaménko vždy explicitně určuje směr toku peněz bez ohledu na jiné atributy. TB1:2000*
T1 NE Max. 18 znaků Desetinné číslo.
Max. 2 desetinné cifry.
Tečka jako oddělovač desetinných míst
Částka daně v první snížené daňové sazbě v CZK včetně haléřového vyrovnání.
V případě kladné hodnoty bez znaménka, záporná hodnota se znaménkem. Znaménko vždy explicitně určuje směr toku peněz bez ohledu na jiné atributy.
T1:300*
TB2 NE Max. 18 znaků Desetinné číslo.
Max. 2 desetinné cifry.
Tečka jako oddělovač desetinných míst
Částka základu daně ve druhé snížené daňové sazbě v CZK včetně haléřového vyrovnání.
V případě kladné hodnoty bez znaménka, záporná hodnota se znaménkem. Znaménko vždy explicitně určuje směr toku peněz bez ohledu na jiné atributy.
TB2:1000*
T2 NE Max. 18 znaků Desetinné číslo.
Max. 2 desetinné cifry.
Tečka jako oddělovač desetinných míst
Částka daně ve druhé snížené daňové sazbě v CZK včetně haléřového vyrovnání.
V případě kladné hodnoty bez znaménka, záporná hodnota se znaménkem. Znaménko vždy explicitně určuje směr toku peněz bez ohledu na jiné atributy.
T2:100*
NTB NE Max. 18 znaků Desetinné číslo.
Max. 2 desetinné cifry.
Tečka jako oddělovač desetinných míst
Částka osvobozených plnění, plnění mimo předmět DPH, plnění neplátců DPH v CZK včetně haléřového vyrovnání. V případě kladné hodnoty bez znaménka, záporná hodnota se znaménkem. Znaménko vždy explicitně určuje směr toku peněz bez ohledu na jiné atributy. NTB:500*
CC NE Právě 3 znaky ISO 4217 – délka 3 znaky, velká písmena Měna celkové částky. Není-li klíč v řetězci přítomen = měna je CZK CC:CZK*
FX NE Max. 18 znaků Desetinné číslo.
Max. 3 desetinné cifry.
Tečka jako oddělovač desetinných míst
Směnný kurz mezi CZK a měnou celkové částky FX:123456.789*
FXA NE Max. 5 znaků Celé číslo Počet jednotek cizí měny pro přepočet pomocí klíče FX. Není-li v řetězci klíč přítomen = 1 FXA:100*
ACC NE Max. 46 znaků (IBAN+BIC) IBAN, BIC Identifikace čísla účtu výstavce faktury, která je složena ze dvou komponent oddělených znaménkem +
Tyto komponenty jsou:
číslo účtu ve formátu IBAN
identifikace banky ve formátu SWIFT dle ISO 9362.
Druhá komponenta (SWIFT) je přitom volitelná
ACC:CZ5855000000001265098001
+RZBCCZPP*
a nebo (varianta bez BIC):
ACC:CZ5855000000001265098001*
CRC32 NE Právě 8 znaků Znaky z množiny:
[A-F0-9]
Kontrolní součet. Hodnota vznikne výpočtem CRC32 celého řetězce (bez klíče CRC32) a převedením této číselné hodnoty do hexadecimálního zápisu.
Princip vypočítání CRC32 (zajištění jednoznačnosti reprezentace pro výpočet CRC32):
- Použijí se všechny atributy mimo atributu CRC32
- Sestaví se kanonický řetězec tak, že převezme hlavičku („SID*1.0*”), ostatní atributy se setřídí abecedně dle klíče, v tomto pořadí se zakódují do řetězce dle specifikace (včetně hvězdičky na konci řetězce) a sestaví se tak základ pro počítání CRC32
Výsledek se převede do šestnáctkové soustavy a klíč s hodnotou se připojí k řetězci.
CRC32:1234ABCD*

Tabulka 2 - Proprietární atributy
Klíč Povinný Délka Formát Popis formátu hodnoty Příklad zápisu klíče a hodnoty
X-SW NE Max. 30 znaků Všechny znaky z povolené množiny mimo ‘*’ Označení účetního software, ve kterém byl řetězec QR Faktury (faktura) vytvořen. Libovolný řetězec dle rozhodnutí výrobce účetního software. Označení by mělo být obecně unikátní a neměnné pro daný software (nebo jeho verzi). X-SW:E-FAKTURANT V5.3*
X-URL NE Max. 70 znaků Všechny znaky z povolené množiny mimo ‘*’ Údaje pro získání účetních údajů (případně faktury) ve strukturovaném formátu z on-line uložiště. X-URL:HTTP://E-FAKTURANT.CZ/INV/

Ukládání a sdílení řetězce

  • Formát definuje pro potřeby klientských aplikací vlastní příponu souboru pro případ uložení a vlastní MIME type.
  • MIME-type: application/x-shortinvoicedescriptor
  • Přípona souboru: *.sind