# ISDOC 6.0.1

### Národní standard pro elektronickou fakturaci

Copyright © 2014 ICT UNIE o.s.

26. května 2014

## 1. Úvod

Tento dokument definuje formáty pro elektronickou fakturaci souhrně označované zkratkou ISDOC. Formát byl definován a je nadále rozvíjen pracovní skupinou pro elektronické standardy výměny dat ICT Unie o.s.. Veškeré připomínky a dotazy k formátu a jeho specifikaci zasílejte na adresu `info@isdoc.cz`.

V současné verzi ISDOC definuje formát pro fakturu a neplatební dokument, v dalších verzích může být přidána podpora pro další formáty.

### 1.1. Konvence

Pokud se v textu nebo v příkladech objevují prefixy jmenných prostorů, platí pro ně následující mapování na jmenný prostor.

Prefix | Jmenný prostor
--- | ---
`isdoc` | `http://isdoc.cz/namespace/2013`
`manifest` | `http://isdoc.cz/namespace/2013/manifest`
`dsig` | `http://www.w3.org/2000/09/xmldsig#`
`xades` | `http://uri.etsi.org/01903/v1.3.2#`

## 2. Shoda se standardem

Standard ISDOC definuje shodu pro dokumenty, konzumenty a producenty.

### 2.1. Typy dokumentů ISDOC

Standard ISDOC definuje následující typy dokumentů:

- daňový doklad – souhrně označuje fakturu, opravný daňový doklad (dobropis), opravný daňový doklad (vrubopis), zálohovou fakturu (nedaňový zálohový list), daňový doklad při přijetí platby (daňový zálohový list), opravný daňový doklad při přijetí platby (dobropis daňového zálohového listu)a zjednodušený daňový doklad;

- neplatební dokument.

### 2.2. Dokument ISDOC

Dokument ISDOC musí splňovat následující požadavky:

1. Musí být reprezentován v souladu s požadavky definovanými v části 3 – „Reprezentace dokumentu“.

2. Musí být jedním z typů dokumentů definovaných v tomto standardu:

   - Pokud se jedná o daňový doklad, musí být validní vůči schématu uvedenému v části A.1 – „Schéma pro daňový doklad – ``isdoc-invoice-6.0.1.xsd``“ a jako kořenový element musí být použit element `Invoice`.

   - Pokud se jedná o neplatební dokument, musí být validní vůči schématu uvedenému v části A.2 – „Schéma pro neplatební dokument – ``isdoc-commondocument-6.0.1.xsd``“ a jako kořenový element musí být použit element `CommonDocument`.

3. Musí splňovat pravidla definovaná v části 4 – „Pravidla“.

4. Pokud je dokument opatřen digitálním podpisem, musí splňovat požadavky definované v části 5 – „Digitální podpisy“.

5. Pokud je dokument opatřen časovým razítkem, musí splňovat požadavky definované v části 6 – „Časové razítko“.

### 2.3. Konzument ISDOC

Konzument ISDOC je program, který načítá a zpracovává dokument ISDOC v souladu se sémantikou definovanou v tomto standardu. Konzument musí být schopen načíst a zpracovat alespoň jeden typ dokumentů ISDOC.

Konzument ISDOC musí být opatřen dokumentací, která vyjmenovává jaké typy dokumentů ISDOC a jaké verze standardu ISDOC jsou podporovány.

### 2.4. Producent ISDOC

Producent ISDOC je program, který generuje dokument ISDOC v souladu se sémantikou definovanou v tomto standardu. Producent musí být schopen generovat alespoň jeden typ dokumentů ISDOC.

Producent ISDOC musí být opatřen dokumentací, která vyjmenovává jaké typy dokumentů ISDOC a jaké verze standardu ISDOC jsou podporovány.

## 3. Reprezentace dokumentu

Dokument ISDOC musí být reprezentován jako samostatný dokument XML nebo jako archiv. Pro samostatné dokumenty je doporučeno používat příponu `.isdoc` a pro archivy `.isdocx`.

### Poznámka

Samostatný dokument je preferovaná forma pro výměnu dokumentů ISDOC. Je vhodná například při komunikace pomocí webových služeb či pro zasílání dokumentů pomocí elektronické pošty nebo datových schránek. Reprezentace pomocí archivu je vhodná v případech, kdy chceme kromě samotného dokladu přenášet i další související přílohy jako jeden celek.

### 3.1. Dokument XML

ISDOC musí být well-formed dokument XML tak jak definuje specifikace [XML] a musí být uložen v kódování UTF-8.

### 3.2. Archiv

Archiv obsahující dokument ISDOC musí používat formát ZIP tak jak jej definuje specifikace [APPNOTE] a navíc musí dodržet všechny následující požadavky:

1. Soubory uložené v archivu musí být nekomprimované nebo musí používat kompresní metodu „deflate“ popsanou v [RFC1951].

2. Archiv nesmí používat šifrování.

3. Archiv nesmí používat digitální podpisy.

4. Archiv nesmí používat funkci „patch data“.

5. Archiv nesmí být rozdělen do více souborů.

6. Jména souborů musí být uložena v kódování UTF-8 a musí být nastaven příznak „Language encoding flag“ (bit 11).

7. Archiv musí v kořenovém adresáři obsahovat soubor `manifest.xml` obsahující manifest.

#### 3.2.1. Manifest

Manifest je jednoduchý dokument XML, který slouží k snadnému a rychlému nalezení dokumentu ISDOC v archivu. Elementy uvnitř manifestu musí být ve jmenném prostoru `http://isdoc.cz/namespace/2013/manifest`. Manifest musí obsahovat kořenový element `manifest` a ten musí obsahovat právě jeden element `maindocument`, který v atributu `filename` určuje umístění dokumentu ISDOC uvnitř archivu.

Příklad 1. Manifest archivu – soubor `manifest.xml`

    <?xml version="1.0"?>
    <manifest xmlns="http://isdoc.cz/namespace/2013/manifest">
      <maindocument filename="FV2013-042.isdoc"/>
    </manifest>

### Poznámka

Starší verze formátu ISDOC nepodporovaly manifest (do verze 5.x včetně). Pro zajištění zpětné kompatibility je doporučeno, aby aplikace v případě chybějícího manifestu za hlavní dokument ISDOC v archivu považovala soubor v hlavním adresářu archivu, který má příponu `.isdoc`.

## 4. Pravidla

Jednotlivé typy dokumentů ISDOC musí splňovat následující pravidla. Některá z následujících pravidel lze kontrolovat strojově pomocí schématu v jazyce Schematron. Odpovídající schéma je v příloze B – „Schéma pro kontrolu vybraných pravidel – ``isdoc-6.0.1.sch``“.

### 4.1. Pravidla pro typ dokumentu daňový doklad

#### 4.1.1. Vazba na původní doklad

Pro typ dokladu 2, 3 a 6 musí existovat vazba na původní doklad. Konkrétně tedy pro `DocumentType` = 2, 3, 6 musí existovat element `OriginalDocumentReference` a musí byt neprázdný.

#### 4.1.2. Konzistentní uvádění cizí měny

Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element `ForeignCurrencyCode`, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na `Curr`.

#### 4.1.3. Konzistentní uvádění tuzemské měny

Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element `ForeignCurrencyCode`, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na `Curr`. Položky s kursem (`CurrRate` i `RefCurrRate`) musí být rovny hodnotě 1.

#### 4.1.4. Tuzemská a zahraniční měna musí být rozdílná

U dokladu v zahraniční měně nesmí být měna lokální a zahraniční shodné. Konkrétně hodnota povinné položky `LocalCurrencyCode` se nesmí rovnat hodnotě nepovinné položky `ForeignCurrencyCode`.

#### 4.1.5. Správce číselníku podrobnějšího typu dokumentu

Element `SubDocumentTypeOrigin` musí obsahovat pouze hodnoty uvedené v tabulce 1 – „Přípustné hodnoty pro element `SubDocumentTypeOrigin`“.

Tabulka 1. Přípustné hodnoty pro element `SubDocumentTypeOrigin`

Hodnota | Popis | Definice číselníku | Přidáno
--- | --- | --- | ---
`CBA` | Česká bankovní asociace | viz [ČBA-STD-29] | 1. ledna 2014

### 4.2. Pravidla pro typ dokumentu neplatební dokument

#### 4.2.1. Správce číselníku podrobnějšího typu dokumentu

Element `SubDocumentTypeOrigin` musí obsahovat pouze hodnoty uvedené v tabulce 1 – „Přípustné hodnoty pro element `SubDocumentTypeOrigin`“.

## 5. Digitální podpisy

### 5.1. Požadavky na digitální podpis v dokumentu ISDOC

1. Digitální podpis musí být v souladu s doporučením [XMLDSig-Core].

2. Digitální podpis musí používat transformaci Enveloped Signature a být uložen v elementu `Signature` ze jmenného prostoru `http://www.w3.org/2000/09/xmldsig#`, který je vždy posledním elementem uvnitř kořenového elementu dokument ISDOC.

3. Je doporučeno, aby kromě transformace Enveloped Signature byla použita i transformace XPath, která umožní pozdější přidání dalších podpisů tím, že podpisy samotné se vynechají z podepisování pomocí XPath filtru `not(ancestor-or-self::dsig:Signature)`.

   Příklad 2. Použití transformace XPath v digitálním podpisu

       <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"
                  xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"
                  Id="Signature-1">
         <SignedInfo>
           <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
           <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
           <Reference URI="">
             <Transforms>
               <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
               <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
                 <XPath>not(ancestor-or-self::dsig:Signature)</XPath>
                </Transform>
             </Transforms>
             <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
             <DigestValue>GRhVFHn8P5AoMcL0y1RJ4ICVRQZKdW+hcxo3gz8gvCc=</DigestValue>
           </Reference>
         </SignedInfo>
         <SignatureValue>...</SignatureValue>
         <KeyInfo>
           <X509Data>
             <X509Certificate>...</X509Certificate>
           </X509Data>
         </KeyInfo>
       </Signature>

4. Je doporučeno, aby každý připojený digitální podpis obsahoval unikátní identifikátor uvnitř atributu `Id`. Hodnota identifikátoru musí odpovídat produkčnímu pravidlu `Name` tak, jak jej definuje specifikace [XML].[1]

   Příklad 3. Přiřazení unikátního identifikátoru podpisu

       <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"
                  xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"
                  Id="Signature-1">
         ...
       </Signature>

5. Jako algoritmus pro výpočet otisku dokumentu se musí používat algoritmus z rodiny SHA-2. Algoritmus musí být identifikován v souladu s [RFC4051].

### 5.2. Požadavky na vícenásobný podpis dokumentu ISDOC

1. Podpis musí být v souladu s požadavky definovanými v 5.1 – „Požadavky na digitální podpis v dokumentu ISDOC“.

2. Musí být použita transformace XPath a to následujícím způsobem:

   1. První podpis používá filtr `not(ancestor-or-self::dsig:Signature)`.

   2. Další podpisy používají filtr `not(ancestor-or-self::dsig:Signature) or not(ancestor-or-self::dsig:Signature/preceding-sibling::dsig:Signature[N-1])`, kde N je pořadí přidávaného podpisu (číslované od jedna).

### 5.3. Ověření vícenásobného podpisu ve starších verzích formátu

Do verze ISDOC 5.3.x mohly aplikace produkovat vícenásobné „enveloped“ podpisy bez použití transformace XPath. Selže-li jejich ověření standardním postupem, postupuje se následovně:

1. Pokud dokument obsahuje alespoň jeden digitální podpis, ověří se poslední digitální podpis.

2. Poslední digitální podpis (element `Signature`) se z dokumentu odstraní a s takto upraveným dokumentem se opakuje krok 1.

## 6. Časové razítko

### 6.1. Požadavky na časové razítko v dokumentu ISDOC

1. Dokument ISDOC musí obsahovat digitální podpis v souladu s 5.1 – „Požadavky na digitální podpis v dokumentu ISDOC“ a rozhodnutím komise [2011/130/EU].

2. Digitální podpis, který je předmětem časového razítka, musí obsahovat unikátní identifikátor uvnitř atributu `Id` elementu `Signature`.

3. Časové razítko musí být ve formě XAdES-T v souladu se specifikací [XAdES].

4. Digitální podpis, který je předmětem časového razítka, musí obsahovat podpisový certifikát uvnitř elementu `KeyInfo` (viz sekce 4.4.1 [XAdES]) a otisk podpisového certifikátu musí být součástí podepisovaných dat.[2]

5. Autoritě časového razítka se posílá otisk hodnoty digitálního podpisu z elementu `SignatureValue`.[3] Pro výpočet otisku musí být použit algoritmus z rodiny SHA-2.[4]

6. Časové razítko obdržené od autority časového razítka musí být uloženo v elementu `EncapsulatedTimeStamp` ve formátu ASN.1 zakódaném v DER a následně pomocí base64. Časové razítko musí vyhovovat formátu definovanému produkčním pravidlem `TimeStampResp` dle [RFC3161]. Časové razítko musí vždy obsahovat položku `timeStampToken`.[5]

Příklad 4. ISDOC s digitálnímy podpisy výstavce, příjemce a časovým razítkem

    <?xml version="1.0" encoding="utf-8"?>
    <Invoice xmlns="http://isdoc.cz/namespace/2013" version="5.2.2">
      <DocumentType>1</DocumentType>
      ... samotný obsah faktury ve formátu ISDOC ...
      <Signature❶ xmlns="http://www.w3.org/2000/09/xmldsig#"
                 xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
          <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
          <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
          <Reference URI="">
            <Transforms>
              <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
              <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
                <XPath>not(ancestor-or-self::dsig:Signature)</XPath>
               </Transform>
            </Transforms>
            <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
            <DigestValue>GRhVFHn8P5AoMcL0y1RJ4ICVRQZKdW+hcxo3gz8gvCc=</DigestValue>
          </Reference>
        </SignedInfo>
        <SignatureValue>w6sA...
          samotný digitální podpis zakódovaný pomocí base64
          ...45pg==</SignatureValue>
        <KeyInfo>
          <X509Data>
            <X509Certificate>MIIE...
              X.509 v3 certifikát ve formátu ASN.1/DER zakódovaný pomocí base64
              ...RQkP</X509Certificate>
          </X509Data>
        </KeyInfo>
      </Signature>
      <Signature❷ xmlns="http://www.w3.org/2000/09/xmldsig#" Id❸="Signature-2"
                 xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo❹>
          <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
          <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
          <Reference❺ Id❻="Signature-2-Document-Reference" URI="">
            <Transforms>
              <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
              <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
                <XPath>not(ancestor-or-self::dsig:Signature) or not(ancestor-or-self::dsig:Signature/preceding-sibling::dsig:Signature[1])</XPath>
               </Transform>
            </Transforms>
            <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
            <DigestValue>yHcv2564yvtGgJZcG4+1dm/jsmlX0qKGjGWUfu5cGpg=</DigestValue>
          </Reference>
          <Reference❼ URI❽="#Signature-2-SignedProperties">
            <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
            <DigestValue>iEy8FDlFUlbctpiVrwTf4cuTBKoBBXY5LDJIyuAG2KM=</DigestValue>
          </Reference>
        </SignedInfo>
        <SignatureValue>OcLa...
          samotný digitální podpis zakódovaný pomocí base64
          ...t+jA==</SignatureValue>
        <KeyInfo❾>
          <X509Data>
            <X509Certificate>MIIE...
              X.509 v3 certifikát ve formátu ASN.1/DER zakódovaný pomocí base64
              ...I2si0=</X509Certificate>
          </X509Data>
        </KeyInfo>
        <Object❿>
          <xades:QualifyingProperties⓫ xmlns:xades="http://uri.etsi.org/01903/v1.3.2#"
                                        Target⓬="#Signature-2">
            <xades:SignedProperties⓭ Id="Signature-2-SignedProperties">
              <xades:SignedSignatureProperties>
                <xades:SigningTime⓮>2011-08-16T08:25:48.0724613Z</xades:SigningTime>
                <xades:SigningCertificate⓯>
                  <xades:Cert>
                    <xades:CertDigest>
                      <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                      <DigestValue⓰>2w6LNdUhsrbRSWpoZhYKGo5BO1GmVzDuhZ7QOE5NgFg=</DigestValue>
                    </xades:CertDigest>
                    <xades:IssuerSerial⓱>
                      <X509IssuerName>C=CZ, O="Česká pošta, s.p. [IČ 47114983]", CN=DEMO PostSignum
                        Qualified CA 2</X509IssuerName>
                      <X509SerialNumber>07B4E9</X509SerialNumber>
                    </xades:IssuerSerial>
                  </xades:Cert>
                </xades:SigningCertificate>
              </xades:SignedSignatureProperties>
              <xades:SignedDataObjectProperties>
                <xades:DataObjectFormat⓲ ObjectReference="#Signature-2-Document-Reference">
                  <xades:MimeType>application/xml</xades:MimeType>
                </xades:DataObjectFormat>
              </xades:SignedDataObjectProperties>
            </xades:SignedProperties>
            <xades:UnsignedProperties>
              <xades:UnsignedSignatureProperties>
                <xades:SignatureTimeStamp>
                  <xades:EncapsulatedTimeStamp⓳
                         Encoding="http://uri.etsi.org/01903/v1.2.2#DER">MIIOB...
                    Časové razítko zakódované v ASN.1/DER a následně base64
                    ...qp8=</xades:EncapsulatedTimeStamp>
                </xades:SignatureTimeStamp>
              </xades:UnsignedSignatureProperties>
            </xades:UnsignedProperties>
          </xades:QualifyingProperties>
        </Object>
      </Signature>
    </Invoice>

❶ | Digitální podpis výstavce dokumentu. Podepsán je původní obsah faktury.
❷ | Digitální podpis příjemce dokumentu. Podepsán je celý předcházející dokument – tedy jak původní obsah faktury tak podpis výstavce. Navíc je kvůli požadavkům na shodu s XAdES-BES podepsán i podpisový certifikát příjemce (viz ❼).
❸ | Digitální podpis, který chceme opatřit časovým razítkem, musí mít unikátní identifikátor. Časové razítko pomocí odkazu na identifikátor indikuje, kterého podpisu se týká.
❹ | Element `SignedInfo` obsahuje informace o podepisovaných datech, způsobu jejich kanonizace a metodě výpočtu podpisu.
❺ | Element `Reference` určuje data pro podepsání. Atribut `URI=""` říká, že se bude podepisovat celý stávající dokument (v našem případě původní faktura a podpis výstavce).
❻ | Element `Reference` musí mít přiřazen identifikátor, aby se na něj bylo možné odkázat z elementu `DataObjectFormat` (viz ⓲).
❼ | Element `Reference` určuje data pro podepsání. Atribut `URI="#Signature-2-SignedProperties"` říká, že se bude podepisovat element, který má identifikátor `Signature-2-SignedProperties`. V našem případě se jedná o element `SignedProperties` obsahující čas podepisování, otisk podpisového certifikátu (viz ⓯) a další informace. Zahrnutí těchto údajů do podpisu vyžaduje XAdES-BES.
❽ | Odkaz na podepisovaná data, v tomto případě na element `SignedProperties` (viz ⓭) obsahující zejména otisk podpisového certifikátu.
❾ | Element `KeyInfo` obsahuje podpisový certifikát. XAdES-BES vyžaduje, aby byl tento certifikát přítomen a byl podepsán jeho otisk v elementu `SigningCertificate`.
❿ | Element `Object` slouží jako kontejner, do kterého je možné přidat doplňující informace pro digitální podpis včetně časového razítka XAdES-T.
⓫ | Element `QualifyingProperties` obaluje všechny informace XAdES.
⓬ | Atribut `Target` obsahuje odkaz na digitální podpis, kterého se týká časové razítko.
⓭ | Element `SignedProperties` obaluje veškeré přídavné vlastnosti, které se podepisují. Zejména otisk podpisového certifikátu.
⓮ | Čas UTC podepisování dokumentu. Čas musí vyhovovat datovému typu `dateTime` W3C XML schémat.
⓯ | Informace o podpisovém certifikátu. Element `SigningCertificate` nesmí obsahovat atribut `Id` (viz [2011/130/EU]) – odpovídající certifikát v elementu `KeyInfo` (viz ❾) je nalezen na základě shody otisku certifikátu (viz ⓰).
⓰ | Hodnota otisku podpisového certifikátu zakódovaná pomocí base64. Otisk se počítá nad certifikátem ve formátu ASN.1/DER. Algoritmus pro výpočet otisku je určen předcházejícím elementem `DigestMethod`.
⓱ | Element `IssuerSerial` a jeho podlementy identifikují certifikační autoritu, která vystavila podpisový certifikát.
⓲ | Element `DataObjectFormat` se pomocí atributu `ObjectReference` odkazuje na element `Reference` (viz ❺), který do podpisu zahrnuje celý dokument ISDOC. Musí obsahovat podelement `MimeType` určující MIME typ odkazovaných dat. V případě formátu ISDOC, který používá syntaxi XML, je MIME typ vždy `application/xml`.
⓳ | Element `EncapsulatedTimeStamp` obsahuje samotné časové razítko ve formátu ASN.1/DER zakódované pomocí base64.

## A. Schémata pro jednotlivé typy dokumentů

### A.1. Schéma pro daňový doklad – `isdoc-invoice-6.0.1.xsd`

### Poznámka

Přehledný grafický diagram schématu je dostupný na adrese http://isdoc.cz/6.0.1/doc-cs/isdoc-invoice-6.0.1.html.

### A.2. Schéma pro neplatební dokument – `isdoc-commondocument-6.0.1.xsd`

### Poznámka

Přehledný grafický diagram schématu je dostupný na adrese http://isdoc.cz/6.0.1/doc-cs/isdoc-commondocument-6.0.1.html.

### A.3. Schéma pro manifest – `isdoc-manifest-6.0.1.xsd`

## B. Schéma pro kontrolu vybraných pravidel – `isdoc-6.0.1.sch`

    <?xml version="1.0" encoding="UTF-8"?>
    <sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2">
       <sch:title>Kontrola vybraných pravidel ISDOC</sch:title>
       <sch:ns uri="http://isdoc.cz/namespace/2013" prefix="isdoc"/>
       <sch:pattern>
          <sch:title>Vazba na původní doklad</sch:title>
          <sch:rule context="isdoc:Invoice[isdoc:DocumentType = (2,3,6)]">
                <sch:assert test="isdoc:OriginalDocumentReferences/*">Pro typ dokladu 2, 3 a 6 musí existovat vazba na původní doklad. Konkrétně tedy pro DocumentType = 2, 3, 6 musí existovat element OriginalDocumentReference a musí byt neprázdný.</sch:assert>
              </sch:rule>
       </sch:pattern>
       <sch:pattern>
          <sch:title>Konzistentní uvádění cizí měny</sch:title>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:LineExtensionAmount]">
                <sch:assert test="isdoc:LineExtensionAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:LineExtensionAmountTaxInclusive]">
                <sch:assert test="isdoc:LineExtensionAmountTaxInclusiveCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:DepositAmount]">
                <sch:assert test="isdoc:DepositAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:TaxableDepositAmount]">
                <sch:assert test="isdoc:TaxableDepositAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:TaxInclusiveDepositAmount]">
                <sch:assert test="isdoc:TaxInclusiveDepositAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:TaxAmount]">
                <sch:assert test="isdoc:TaxAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:TaxableAmount]">
                <sch:assert test="isdoc:TaxableAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:TaxInclusiveAmount]">
                <sch:assert test="isdoc:TaxInclusiveAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              <sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:AlreadyClaimedTaxableAmount]">
                <sch:assert test="isdoc:AlreadyClaimedTaxableAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:AlreadyClaimedTaxAmount]">
                <sch:assert test="isdoc:AlreadyClaimedTaxAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:AlreadyClaimedTaxInclusiveAmount]">
                <sch:assert test="isdoc:AlreadyClaimedTaxInclusiveAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:DifferenceTaxableAmount]">
                <sch:assert test="isdoc:DifferenceTaxableAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:DifferenceTaxAmount]">
                <sch:assert test="isdoc:DifferenceTaxAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:DifferenceTaxInclusiveAmount]">
                <sch:assert test="isdoc:DifferenceTaxInclusiveAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:TaxExclusiveAmount]">
                <sch:assert test="isdoc:TaxExclusiveAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:AlreadyClaimedTaxExclusiveAmount]">
                <sch:assert test="isdoc:AlreadyClaimedTaxExclusiveAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:DifferenceTaxExclusiveAmount]">
                <sch:assert test="isdoc:DifferenceTaxExclusiveAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:PayableRoundingAmount]">
                <sch:assert test="isdoc:PayableRoundingAmountCurr">Doklad vystavený v cizí měně musíobsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:PaidDepositsAmount]">
                <sch:assert test="isdoc:PaidDepositsAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]//*[isdoc:PayableAmount]">
                <sch:assert test="isdoc:PayableAmountCurr">Doklad vystavený v cizí měně musí obsahovat v cizí měně i všechny finanční elementy. Konkrétně: pokud existuje element ForeignCurrencyCode, pak musí existovat všechny elementy s částkami pro cizí měnu tj. ty končící na Curr.</sch:assert>
              </sch:rule>
       </sch:pattern>
       <sch:pattern>
          <sch:title>Konzistentní uvádění tuzemské měny</sch:title>
          <sch:rule context="isdoc:Invoice[not(isdoc:ForeignCurrencyCode)]">
                <sch:assert test="isdoc:CurrRate = 1">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="isdoc:RefCurrRate = 1">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
              </sch:rule>
          <sch:rule context="isdoc:Invoice[not(isdoc:ForeignCurrencyCode)]">
                <sch:assert test="not(.//isdoc:LineExtensionAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:LineExtensionAmountTaxInclusiveCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:DepositAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:TaxableDepositAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:TaxInclusiveDepositAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:TaxAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
               <sch:assert test="not(.//isdoc:TaxableAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:TaxInclusiveAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:AlreadyClaimedTaxableAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:AlreadyClaimedTaxAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:AlreadyClaimedTaxInclusiveAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:DifferenceTaxableAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:DifferenceTaxAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:DifferenceTaxInclusiveAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:TaxExclusiveAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:AlreadyClaimedTaxExclusiveAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:DifferenceTaxExclusiveAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:PayableRoundingAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí eistovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:PaidDepositsAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
                <sch:assert test="not(.//isdoc:PayableAmountCurr)">Doklad vystavený v tuzemské měně nesmí obsahovat žádný element v cizí měně. Pokud neexistuje element ForeignCurrencyCode, pak nesmí existovat žádný element pro cizí měnu, tj. element končící na Curr. Položky s kursem (CurrRate i RefCurrRate) musí být rovny hodnotě 1.</sch:assert>
              </sch:rule>
       </sch:pattern>
       <sch:pattern>
          <sch:title>Tuzemská a zahraniční měna musí být rozdílná</sch:title>
          <sch:rule context="isdoc:Invoice[isdoc:ForeignCurrencyCode]">
                <sch:assert test="isdoc:ForeignCurrencyCode != isdoc:LocalCurrencyCode">U dokladu v zahraniční měně nesmí být měna lokální a zahraniční shodné. Konkrétně hodnota povinné položky LocalCurrencyCode se nesmí rovnat hodnotě nepovinné položky ForeignCurrencyCode.</sch:assert>
              </sch:rule>
       </sch:pattern>
    </sch:schema

## C. Změny oproti předchozím verzím

### C.1. Změny oproti verzi 5.3.1 z 30.12.2011

- Změněn jmenný prostor na `http://isdoc.cz/namespace/2013`

- Odkazy na objednávky (`OrderReference`), dodací listy (`DeliveryNoteReference`) a původní doklady (`OriginalDocumentReference`) se uvádějí jen globálně pro celou fakturu. U řádky může již být jen odkaz, který pomocí atributu ref směřuje na existující globální odkaz identifikovaný pomocí atributu id. Nad hodnotami v atributech id a ref schéma kontroluje referenční integritu.

- Elementy `VATApplicable` a `ElectronicPossibilityAgreementReference` jsou ve schématu povinné (povinné jsou již od verze 5.3, povinnost však nebyla formálně popsána ve schématu).

- Upraveno pořadí podelementů uvnitř elementu `TaxSubTotal` tak, aby bylo konzistentní.

- Element `OriginalDocumentReference` musí být vždy obalen v `OriginalDocumentReferences`.

- Přidán element `ClientBankAccount` pro velké výstavce B2C faktur.

- Přidány elementy `SubDocumentType` a `SubDocumentTypeOrigin` pro jemnější klasifikaci dokumentů.

- Přidány elementy `EgovFlag`, `FileReference`, `ReferenceNumber`, `ISDS_ID`, `EgovClassifiers`, `EgovClassifier`, `ContractReferences`, `ContractReference`, `LastValidDate`, `LastValidDateUnbounded`, `ExternalOrderIssueDate`, `ParagraphID`, `SealSeriesID`.

- K elementu `Payment` byl přidán nový atribut partialPayment, který může být použit k zakázání částečných plateb.

- Pořadí elementů uvnitř elementu `Invoice` bylo upraveno.

- Element `PartyTaxScheme` se může opakovat a u subjektu lze zadat více jeho identifikátorů (např. zároveň DIČ a IČ DPH pro slovenské společnosti).

- Do archivu (`.isdocx`) byla přidána povinnost používat manifest. Manifest je soubor určující, který soubor ISDOC z mnoha v archivu existujících je hlavní. Všechny ostatní jsou pak jen v pozici přílohy.

- Přidán nový typ dokumentu neplatební dokument (element `CommonDocument`).

## D. Možné změny pro další verze

Následující seznam obsahuje navrhované změny a rozšíření pro některou z dalších verzí ISDOC.

- Další verze ISDOC bude podporovat další typy dokumentů objednávka a potvrzení objednávky.

- Zvažujeme přidání nového typu dokumentu, který bude sloužit jako kontejner pro uložení a přenos více dokumentů najednou, například při dávkovém zpracování.

## Reference

[APPNOTE] APPNOTE.TXT – .ZIP File Format Specification. September 2007. PKWARE Inc. Dostupné na URL: http://www.pkware.com/documents/APPNOTE/APPNOTE-6.3.2.TXT

[RFC4051] Additional XML Security Uniform Resource Identifiers (URIs). April 2005. IETF. Dostupné na URL: http://www.ietf.org/rfc/rfc4051.txt

[XML] Extensible Markup Language (XML) 1.0 (Fifth Edition). W3C Recommendation. 26 November 2008. W3C. Dostupné na URL: http://www.w3.org/TR/REC-xml/

[XAdES] ETSI TS 101 903 V1.4.1: XML Advanced Electronic Signatures (XAdES) Technical Specification. June 2009. ETSI. Dostupné na URL: http://uri.etsi.org/01903/v1.4.1/ts_101903v010401p.pdf

[2011/130/EU] COMMISSION DECISION of 25 February 2011 establishing minimum requirements for the cross-border processing of documents signed electronically by competent authorities under Directive 2006/123/EC of the European Parliament and of the Council on services in the internal market. Dostupné na URL: http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2011:053:0066:0072:EN:PDF[6]

[ČBA-STD-29] Standard elektronické fakturace – Popis rozhraní pro zasílání e-faktur a e-dokumentů koncovým spotřebitelům do aplikací elektronického bankovnictví. 2014. Česká bankovní asociace.

[RFC1951] DEFLATE Compressed Data Format Specification version 1.3 May 1996. IETF. Dostupné na URL: http://www.ietf.org/rfc/rfc1951.txt

[RFC3161] Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP) August 2001. IETF. Dostupné na URL: http://www.ietf.org/rfc/rfc3161.txt

[XMLDSig-Core] XML Signature Syntax and Processing (Second Edition). W3C Recommendation. 10 June 2008. W3C. Dostupné na URL: http://www.w3.org/TR/xmldsig-core/

[1] Například nesmí začínat číslem, nesmí obsahovat mezery atd.

[2] Povinnost zahrnout podpisový certifikát do podpisu definuje forma XAdES-BES. Časové razítko ve formě XAdES-T musí splňovat i všechny požadavky na nižší formu XAdES-BES (resp. XAdES-EPES).

[3] Otisk se přitom počítá z binární reprezentace hodnoty digitálního podpisu nikoli z textového obsahu elementu, který binární data obsahuje až po zakódování metodou base64.

[4] V současné době většina autorit časového razítka v ČR podporuje pouze algoritmus SHA-256.

[5] Položka `timeStampToken` je vyžadována, protože ve své části `messageImprint` obsahuje položku `hashAlgorithm` identifikující algoritmus použitý pro výpočet otisku. Znalost tohoto algoritmu je důležitá při následném ověřování časového razítka.

[6] Kvůli chybám v českém překladu doporučujeme vycházet z anglické verze rozhodnutí komise.