← Zpět na blog

Co je ISDOC soubor a jak ho zpracovat

ISDOC je český XML formát e-faktury. Odkud pochází, jak ho otevřít, jak souvisí s PEPPOL a EN 16931, a jak ho spolehlivě naparsovat v .NET přes XSD.

ISDOC potkáte v Česku všude, kde se posílá faktura mezi dvěma firmami, které obě jedou na českém účetním softwaru. POHODA, Money S3, HELIOS, ABRA, Premier, FlexiBee, iDoklad — všechny ho umí. Když vám přijde příloha .isdoc nebo .isdocx, je to strukturovaná faktura, kterou váš software dokáže načíst bez ručního přepisování. A když integrujete fakturaci, dřív nebo později ji budete muset číst nebo generovat sami.

Tenhle článek vysvětluje, co ISDOC je, odkud se vzal, jak souvisí s evropskou normou a PEPPOL, a jak ho zpracovat v .NET tak, aby vám to nespadlo na první faktuře, která se trochu liší.

Co je ISDOC

ISDOC je český národní standard pro strukturovanou elektronickou fakturu. Strukturovaná znamená, že to není PDF ani sken — je to XML, ze kterého software přečte částky, položky, IČO, DIČ, datum splatnosti a vše ostatní jako data, ne jako text k opisování.

Existuje ve dvou podobách:

  • .isdoc — jeden XML soubor, jedna faktura.
  • .isdocx — ZIP balík, který obsahuje to samé XML plus přílohy. Typicky vizuální PDF faktury, aby si ji člověk mohl prohlédnout, ale klidně i další dokumenty.

Formát je definovaný veřejně publikovaným XSD schématem. To je důležité: máte přesný kontrakt, podle kterého poznáte, jestli je faktura validní, ještě než ji začnete zpracovávat.

Odkud ISDOC pochází (a kde je v tom Stormware)

Tady často slýchám zkratku „ISDOC udělal Stormware". Není to úplně přesné.

ISDOC vznikl v pracovní skupině konsorcia SPIS — to se dnes jmenuje ICT Unie. Vznikl jako česká lokalizace mezinárodního standardu OASIS UBL 2.0 a poprvé byl publikován v letech 2008 až 2009. Šlo o víceúčastnickou snahu několika dodavatelů, ne o produkt jedné firmy.

Stormware s programem POHODA byl jeden z prvních a největších implementátorů a formát aktivně prosazoval. Proto se s ním ISDOC spojuje. Ale autorem standardu je konsorcium, ne jeden vendor. Pro praxi to znamená jednu užitečnou věc: ISDOC není proprietární formát uzamčený do jednoho softwaru. Je to otevřený standard, který umí celá řada účetních programů, a vy se na něj můžete napojit nezávisle na tom, kdo fakturu vystavil.

Jak ISDOC souvisí s PEPPOL a evropskou normou

Tady je to, kvůli čemu se to často plete dohromady. ISDOC, PEPPOL a EN 16931 jsou tři různé věci.

  • ISDOC je česká customizace UBL 2.0. Konceptuálně je XML blízké UBL, ale není identické s PEPPOL BIS 3.0 ani s UBL 2.1, které se používají pro evropskou normu.
  • EN 16931 je evropský sémantický model faktury. PEPPOL BIS (postavené na UBL 2.1) je jeho rozšířená syntaxe pro přeshraniční výměnu v EU.

Zajímavý detail: ISDOC je v řadě polí bohatší než sémantický model EN 16931. Když převádíte ISDOC na UBL podle EN 16931, můžete o část informací přijít. Existuje na to open-source konvertor isdoc2ubl (na GitHubu), ale počítejte s tím, že mapování je ztrátové — ne každé pole má v cílovém formátu protějšek.

V praxi spolu ISDOC a PEPPOL v Česku koexistují, jeden nenahrazuje druhý:

  • Domácí B2B mezi dvěma firmami na českém účetním softwaru zůstává na ISDOC.
  • Veřejné zakázky nad limity EU (B2G, platforma NEN) a přeshraniční fakturace jedou přes PEPPOL BIS (UBL 2.1) kvůli interoperabilitě v rámci EU.

A pod ViDA bude EU vyžadovaný přeshraniční formát postavený na EN 16931. To znamená, že ISDOC zůstává domácím formátem, ne přeshraničním standardem. Pokud fakturujete jen v Česku, ISDOC vám stačí. Jakmile řešíte zakázky pro stát nebo přeshraniční obchod, narazíte na PEPPOL a budete potřebovat mapování mezi oběma.

Jak ISDOC otevřít

Když vám .isdoc nebo .isdocx jen přijde mailem, nejjednodušší cesta je naimportovat ho do účetního softwaru, který umíte — POHODA, Money, HELIOS, iDoklad a další ho načtou přímo a faktura se vám předvyplní. Existuje i samostatná čtečka ISDOCReader, která soubor zobrazí jako klasickou fakturu.

To je ale pohled koncového uživatele. Když stavíte integraci, otevřít ISDOC znamená naparsovat ho v kódu. Tady se vyplatí udělat to pořádně.

Jak ISDOC zpracovat v .NET

ISDOC je obyčejné XML proti publikovanému XSD. Lákavá zkratka je naparsovat ho ručně přes XDocument a tahat hodnoty podle názvů elementů. Funguje to do první faktury, která má pole, na které jste nemysleli. Spolehlivá cesta vede přes schéma.

1. Vygenerujte C# třídy z oficiálního XSD

Místo ručního čtení elementů si nechte vygenerovat třídy přímo z ISDOC XSD. Nástroje: dotnet-xscgen, LinqToXsd, nebo legacy xsd.exe. Dostanete typované třídy, které přesně odpovídají schématu. Žádné překlepy v názvech elementů, žádné hádání typů.

2. Čtěte a zapisujte přes serializaci

Na vygenerované třídy nasaďte XmlSerializer (System.Xml.Serialization) pro čtení i zápis, nebo XDocument (System.Xml.Linq), když potřebujete jemnější kontrolu. Tím dostanete fakturu jako typovaný objekt, se kterým se v C# pracuje normálně, ne jako se stromem stringů.

3. Validujte proti XSD

Před zpracováním ověřte, že soubor je validní ISDOC. Použijte XmlReaderSettings s XmlSchemaSet načteným z ISDOC XSD. Tím chytíte poškozené nebo nestandardní faktury hned na vstupu, ne až o tři vrstvy níž, kde se chyba projeví jako záhadný null.

4. U .isdocx nejdřív rozbalte

.isdocx je ZIP. Otevřete ho přes System.IO.Compression.ZipArchive, vytáhněte vnitřní XML a teprve to parsujte. Přílohy (PDF a další) si z balíku vyzvedněte zvlášť, pokud je potřebujete archivovat nebo zobrazit.

5. Pro interoperabilitu mapujte na EN 16931

Když potřebujete z ISDOC udělat UBL nebo CII podle EN 16931 — kvůli veřejné zakázce nebo přeshraniční výměně — použijte XSLT z isdoc2ubl nebo si napište vlastní mapování. A počítejte s tím, co padlo výš: mapování je ztrátové. Ověřte, že pole, na kterých vám záleží, mají v cílovém formátu protějšek.

Shrnuto: generovaná serializace plus validace proti schématu poráží ručně psaný parser pokaždé. Méně kódu, méně tichých chyb, a když se schéma rozšíří, regenerujete třídy místo lovení po XDocument.

Kde s tím pomůžeme

E-fakturaci a strukturované faktury stavíme do produkce. Pro fakturaci napojenou na polský KSeF jsme doručili přes 40 000 dokladů se 100% úspěšností a při forenzní obnově dohledali 15 141 faktur, které předchozí pipeline tiše ztratila. ISDOC, PEPPOL a EN 16931 jsou součást stejné domény — strukturovaná faktura, validace proti schématu, spolehlivé zpracování.

Pokud řešíte čtení nebo generování ISDOC, mapování na PEPPOL pro zakázky, nebo se chystáte na ViDA, napište nám. Řekneme vám, kde je to přímočaré a kde se to ztrácí v detailech.

FAQ

Co je ISDOC soubor?

ISDOC je český národní standard strukturované elektronické faktury. Je to XML soubor podle veřejně publikované XSD schématu. Přípona .isdoc je jedna faktura, .isdocx je ZIP balík s XML a přílohami, typicky PDF.

Odkud ISDOC pochází a souvisí se Stormware?

ISDOC vznikl v rámci konsorcia SPIS (dnes ICT Unie) jako česká lokalizace standardu OASIS UBL 2.0, poprvé publikován v letech 2008 až 2009. Stormware s programem POHODA byl raný a velký implementátor, ne jediný autor formátu. Šlo o víceúčastnickou snahu.

Jak naparsovat ISDOC v .NET?

Vygenerujte si C# třídy z oficiálního ISDOC XSD pomocí dotnet-xscgen nebo LinqToXsd a čtěte přes XmlSerializer nebo XDocument. Validujte proti XSD přes XmlReaderSettings a XmlSchemaSet. U .isdocx soubor nejdřív rozbalte přes ZipArchive a pak parsujte vnitřní XML.

Řešíte podobný problém? Napište nám.

Domluvit konzultaci