← User guide

CZ VAT Control Statement (Kontrolní hlášení)

The Czech kontrolní hlášení (DPHKH1) — sections A.1 to B.3 computed from the books with the 10 000 CZK split, checked against the form's requirements and exported as the EPO XML in the current structure for any period.

Version19.0.1.10.0
EditionCommunity and Enterprise
LicenceAGPL-3
Requiresl10n_cssk_kv_kh_base, l10n_cz, l10n_cz_statutory
Extended byaccount_edi_isdoc_kh, l10n_cz_datadance, l10n_cz_vat_status

What it is for

A Czech VAT payer files a kontrolní hlášení (VAT control statement) alongside its VAT returns. It lists the payer's invoices — individually above 10 000 CZK, in totals below — so that the tax administration can match each supplier's output tax against its customer's deduction.

This module is the Czech part of the shared control statement. It adds the sections of form DPHKH1, the rules that decide which section a document belongs to, the checks the official form needs and the EPO XML template. The workflow — creating a statement, computing, exporting, marking it filed, corrections — is described in the shared guide.

It requires Odoo's Czech chart of accounts (l10n_cz) and l10n_cz_statutory, which holds the filer's details for EPO filings. It works in Community and Enterprise.

All references are to the VAT Act, zákon č. 235/2004 Sb., o dani z přidané hodnoty. Statutory terms are given in Czech, as on the form.

The form

Unlike the Slovak side, the Czech tax administration publishes one structure for the kontrolní hlášení, the file dphkh1_epo2.xsd, and overwrites it in place when it changes. A statement for any period — a následné hlášení for 2021 filed today included — is submitted in the current structure. Differences between periods are expressed by fields that apply only to some periods, not by older forms.

The module therefore ships a single, open-ended version, Kontrolní hlášení (aktuální struktura), valid from 1. 1. 2016 with no end date:

Structure DPHKH1, version 03.01.15 of 11. 8. 2026 (written as verzePis)
XML EPO Pisemnost envelope with DPHKH1 inside
Schema dphkh1_epo2.xsd, checked byte for byte against the published copy on 27 October 2026
Earliest period 1. 1. 2016 — documents with an earlier tax point belong on a different EPO form (Výpis z evidence), which this module does not produce

The structure version is not part of the schema, and a new schema still validates an old file, so a change published by the tax administration is not detected automatically. The version is therefore pinned in data/SCHEMA_VERSION, with the procedure for checking it against the published structure, and a test keeps the template's verzePis equal to the pin. When the published structure changes, the module must be updated.

Setting it up

Besides the shared setup:

Sections

How the module fills each section. Amounts are split into the basic rate (20 % and more, zakl_dane1 / dan1), the reduced rate (zakl_dane2 / dan2) and the second reduced rate of 10 % in force until 31. 12. 2023 (zakl_dane3 / dan3, also used for later corrections of such supplies), and written in whole crowns.

Section What goes there
A.1 Issued invoices with a reverse-charge sales tax (§ 92a): customer's DIČ, document number, date of the taxable supply, base (one, whatever the rate), kód předmětu plnění.
A.2 Received supplies on which you declare the tax (§ 108 odst. 2 a 3): acquisitions and services from another member state, and services or other supplies from a supplier outside the EU. Country (as the VAT number gives it: EL for Greece, XI for Northern Ireland; empty for a supplier outside the EU), VAT number, the supplier's document number, base and tax.
A.4 Issued invoices with VAT whose document total including VAT exceeds 10 000 CZK (by absolute value, so a large credit note too) and whose customer has a Czech DIČ. A correction for an uncollectible receivable is always reported here, whatever its amount.
A.5 One total of all other issued invoices with VAT — up to 10 000 CZK, or to a customer without a Czech DIČ.
B.1 Received invoices with a § 92a reverse-charge purchase tax: supplier's DIČ, document number, base, kód předmětu plnění.
B.2 Received invoices with VAT whose document total including VAT exceeds 10 000 CZK, under the supplier's number (Reference faktury). Corrections for uncollectible receivables always.
B.3 One total of all other received invoices with VAT.

A supplier from another member state registered for Czech VAT and invoicing under its CZ number makes a domestic supply: the VAT number on the document, not the partner's country, decides. A zero-rated issued invoice to a partner in another member state is left out of the statement (it belongs in the EC sales list); one that charges Czech VAT is a domestic supply and is reported in A.4/A.5. An import of goods (§ 23) is not reported in the kontrolní hlášení at all.

The 10 000 CZK limit is measured on the whole document including VAT; lines without VAT are not reported but still count towards it. A line with no VAT is never reported in A.4/A.5 or B.2/B.3.

The date reported is the document's DUZP, else its invoice date. The uncollectible-receivable flag (zdph_44) is taken from the document's field Oprava u nedobytné pohledávky (P, or A for the § 44 wording valid to 31. 3. 2019).

The control totals (VetaC) are computed from the sections as the form defines them: A.1 in pln_rez_pren, B.1 in rez_pren23 / rez_pren5, all of A.2 in celk_zd_a2, and the reduced-rate totals including the second reduced rate.

Correcting a row. Each section tab can be edited row by row: tick Override on the row and correct its standard, reduced or second-reduced base and tax. The corrected figures are the ones exported, and they are kept when the statement is computed again, on the row of the same document (and, in A.1 / B.1, of the same kód předmětu plnění). A correction whose row disappears is listed in the chatter.

Filing types and corrections

The statement types are Řádné (B), Opravné (O, řádné/opravné on the form), Následné (N) and Následné/opravné (E). Prepare and export the statement as in the shared guide. Czech specifics:

Before rendering, the export stops and names the documents at fault when:

To send the file to EPO from Odoo, see l10n_cz_epo.

Limitations