XML pro finanční úřad: kontrolní hlášení, DPH a EPO

Kontrolní hlášení, přiznání k DPH i souhrnné hlášení se na finanční úřad posílají jako XML soubor. Kapitola ukazuje, jak takový soubor vypadá, kde najít jeho oficiální schéma, jak ho zkontrolovat a které chyby dělají účetní programy nejčastěji.

Autor: Aktualizováno

EPO: elektronická podání ve formátu XML

Finanční správa přijímá daňová podání elektronicky přes aplikaci EPO na portálu Moje daně. Formulář jde vyplnit přímo v prohlížeči, ale účetní programy obvykle vyexportují hotový XML soubor, který se do EPO jen nahraje, zkontroluje a odešle. Kontrolní hlášení DPH se přitom podává výhradně elektronicky, a to ve formátu a struktuře, které finanční správa zveřejňuje.

Soubor můžeš poslat přes EPO, nebo ho jako přílohu vložit do zprávy z datové schránky — podání odeslané datovou schránkou nemusí mít elektronický podpis.

PísemnostZkratka (element)Soubor XSD
Kontrolní hlášení DPHDPHKH1dphkh1_epo2.xsd
Přiznání k DPHDPHDP3dphdp3_epo2.xsd
Souhrnné hlášení VIESDPHSHVdphshv_epo2.xsd

Každá písemnost má na Daňovém portálu vlastní popis struktury s významem všech položek a ke stažení XSD schéma. Najdeš je v dokumentaci portálu Moje daně pod „Popis struktur EPO“; přímý odkaz na kontrolní hlášení je popis struktury DPHKH1. Struktury se mění se zákonem, proto vždy pracuj s aktuální verzí.

Písemnost, věty a položky

Soubory pro EPO mají zvláštní, ale jednoduchou stavbu. Kořenem je vždy <Pisemnost>, uvnitř je element pojmenovaný zkratkou písemnosti (<DPHKH1>) a v něm věty. Věta je element, jehož název začíná slovem Veta a písmenem oddílu. Jednotlivé položky věty jsou jejich atributy — data tedy leží téměř výhradně v atributech, ne v textu elementů.

Kontrolní hlášení za srpen 2026 — smyšlené údaje, validní vůči dphkh1_epo2.xsd
<?xml version="1.0" encoding="UTF-8"?>
<Pisemnost nazevSW="Moje účetnictví" verzeSW="2026.3">
  <DPHKH1 verzePis="03.01">
    <VetaD dokument="KH1" k_uladis="DPH" mesic="8" rok="2026" khdph_forma="B" d_poddp="25.09.2026"/>
    <VetaP c_ufo="451" c_pracufo="2001" dic="12345678" typ_ds="P" zkrobchjm="Ukázka s.r.o."
           ulice="Vodičkova" c_pop="1" naz_obce="Praha" psc="11000" stat="ČESKÁ REPUBLIKA"/>
    <VetaA4 c_radku="1" dic_odb="87654321" c_evid_dd="FV2026-042" dppd="15.08.2026"
            zakl_dane1="100000.00" dan1="21000.00" kod_rezim_pl="0" zdph_44="N"/>
    <VetaA5 zakl_dane1="8000.00" dan1="1680.00"/>
    <VetaB2 c_radku="1" dic_dod="11223344" c_evid_dd="PF-7781" dppd="10.08.2026"
            zakl_dane1="20000.00" dan1="4200.00" pomer="N" zdph_44="N"/>
  </DPHKH1>
</Pisemnost>

Atributy nazevSW a verzeSW identifikují program, který soubor vytvořil, a verzePis verzi struktury. Věty, které se mohou opakovat (řádky jednotlivých dokladů), jsou samostatné elementy; c_radku určuje jejich pořadí ve formuláři.

Věty kontrolního hlášení

VětaOddíl kontrolního hlášeníKolikrát
VetaDzáhlaví: období, druh hlášení, datum podáníprávě jednou
VetaPidentifikace plátce: finanční úřad, DIČ, název, adresaprávě jednou
VetaA1A.1 — uskutečněná plnění v režimu přenesení daňové povinnostiřádek za doklad
VetaA2A.2 — přijatá plnění, u kterých daň přiznává příjemce (např. z EU)řádek za doklad
VetaA3A.3 — investiční zlatořádek za doklad
VetaA4A.4 — uskutečněná plnění nad 10 000 Kč včetně daněřádek za doklad
VetaA5A.5 — ostatní uskutečněná plnění do 10 000 Kčnejvýš jednou, souhrnně
VetaB1B.1 — přijatá plnění v režimu přenesení daňové povinnostiřádek za doklad
VetaB2B.2 — přijatá plnění nad 10 000 Kč s nárokem na odpočetřádek za doklad
VetaB3B.3 — přijatá plnění do 10 000 Kčnejvýš jednou, souhrnně
VetaCC — kontrolní řádky k přiznání k DPHnejvýš jednou

Částky se zapisují do atributů zakl_dane1 a dan1 (základní sazba) a zakl_dane2 a dan2 (snížená sazba). Třetí dvojice slouží jen pro plnění s datem povinnosti přiznat daň do konce roku 2023, kdy platily dvě snížené sazby. Druh hlášení určuje atribut khdph_forma ve větě D:

khdph_formaDruh kontrolního hlášení
Břádné — první podání za dané období
Ořádné opravné — nahrazuje řádné hlášení ještě ve lhůtě
Nnásledné — oprava po uplynutí lhůty, vždy se všemi údaji za období
Enásledné opravné

Opravné i následné hlášení se neposílá jako rozdíl. Vždy obsahuje všechny údaje za dané období včetně opravených.

Formát hodnot

  • Kódování: soubor musí odpovídat XML 1.0. Pro češtinu připadá v úvahu UTF-8, windows-1250 nebo ISO-8859-2 — deklarace v prologu musí odpovídat skutečnému kódování.
  • Desetinná čísla se píšou s tečkou, ne s čárkou.
  • Datum je u položek podání kvůli zpětné kompatibilitě v českém tvaru DD.MM.RRRR, ne ve formátu ISO.
  • DIČ se uvádí jen číselnou částí bez předpony CZ.
  • Nevyplněná položka v souboru vůbec není. Hodnota 0 u nepovinné částky znamená „nula“ a počítá se s ní v kontrolách.
  • Pořadí vět musí odpovídat popisu struktury.

Jak soubor zkontrolovat před odesláním

  1. Vlož soubor do XML validátoru. Chyby zápisu (neuzavřený element, znak & v názvu firmy) najde okamžitě.
  2. Stáhni z Daňového portálu XSD k dané písemnosti a v záložce Schéma ověř soubor proti němu. Validace odhalí špatný formát čísla, DIČ s předponou, chybějící povinnou položku i špatné pořadí vět — přesně s tím řádkem, kde chyba je.
  3. Nahraj soubor do EPO na portálu Moje daně a spusť kontrolu. EPO navíc ověří obsahové vazby (součty, návaznost na přiznání), které schéma popsat neumí.
ChybaSprávně
dic_odb="CZ87654321"jen číselná část DIČ: dic_odb="87654321"
zakl_dane1="100000,00"desetinná tečka: zakl_dane1="100000.00"
dppd="2026-08-15"datum ve tvaru DD.MM.RRRR: dppd="15.08.2026"
nepovinná částka vyplněná jako "0"nevyplněný údaj z XML vynech; nula není totéž co nic
věty v jiném pořadípořadí vět musí odpovídat popisu struktury (D, P, A1 … C)
deklarované kódování neodpovídá souboruuložit v UTF-8 a deklarovat UTF-8 (nebo stejně windows-1250)

Soukromí: XML validátor na tomto webu běží celý v prohlížeči. Kontrolní hlášení s DIČ tvých odběratelů se nikam neodesílá.

Přehled o příjmech a výdajích OSVČ pro sociální zabezpečení má vlastní datovou větu a schéma, popisuje ho kapitola XML pro ČSSZ.