<?xml version="1.0" encoding="Windows-1252"?>
<xs:schema xmlns:ns="urn:OECD:StandardAuditFile-Tax:PT_1.04_01"
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
    xmlns:doc="urn:schemas-basda-org:schema-extensions:documentation"
    xmlns="urn:OECD:StandardAuditFile-Tax:PT_1.04_01" attributeFormDefault="unqualified"
    elementFormDefault="qualified" id="SAF-T_PT"
    targetNamespace="urn:OECD:StandardAuditFile-Tax:PT_1.04_01" version="1.04_01"
    vc:minVersion="1.1" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2009/XMLSchema/XMLSchema">
    <xs:annotation>
        <xs:documentation>
            <doc:Title>Standard Audit File - Portuguese Version</doc:Title>
            <doc:Subject>Standard Audit File - Portuguese Version</doc:Subject>
            <doc:Copyright>Copyright OECD</doc:Copyright>
            <doc:Version>
                <doc:Number>1.04_01</doc:Number>
                <doc:Status>Production</doc:Status>
            </doc:Version>
            <doc:Author>Autoridade Tributaria e Aduaneira</doc:Author>
            <doc:ModificationDate>2022-05-17</doc:ModificationDate>
        </xs:documentation>
    </xs:annotation>
    <!-- Estrutura do ficheiro SAFT-PT-->
    <xs:element name="AuditFile">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Header" minOccurs="1"/>
                <xs:element name="MasterFiles">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="GeneralLedgerAccounts" minOccurs="0"/>
                            <xs:element ref="Customer" minOccurs="0" maxOccurs="unbounded"/>
                            <xs:element ref="Supplier" minOccurs="0" maxOccurs="unbounded"/>
                            <xs:element ref="Product" minOccurs="0" maxOccurs="unbounded"/>
                            <xs:element ref="TaxTable" minOccurs="0"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element ref="GeneralLedgerEntries" minOccurs="0"/>
                <xs:element ref="SourceDocuments" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
        <!-- Constraint-->
        <xs:unique name="AccountIDConstraint">
            <xs:selector xpath="ns:MasterFiles/ns:GeneralLedgerAccounts/ns:Account"/>
            <xs:field xpath="ns:AccountID"/>
        </xs:unique>
        <xs:keyref name="GroupingCodeConstraint" refer="AccountIDConstraint">
            <xs:selector xpath="ns:MasterFiles/ns:GeneralLedgerAccounts/ns:Account"/>
            <xs:field xpath="ns:GroupingCode"/>
        </xs:keyref>
        <xs:unique name="CustomerIDConstraint">
            <xs:selector xpath="ns:MasterFiles/ns:Customer"/>
            <xs:field xpath="ns:CustomerID"/>
        </xs:unique>
        <xs:unique name="SupplierIDConstraint">
            <xs:selector xpath="ns:MasterFiles/ns:Supplier"/>
            <xs:field xpath="ns:SupplierID"/>
        </xs:unique>
        <xs:unique name="ProductCodeConstraint">
            <xs:selector xpath="ns:MasterFiles/ns:Product"/>
            <xs:field xpath="ns:ProductCode"/>
        </xs:unique>
        <xs:keyref name="GeneralLedgerEntriesDebitLineAccountIDConstraint"
            refer="AccountIDConstraint">
            <xs:selector
                xpath="ns:GeneralLedgerEntries/ns:Journal/ns:Transaction/ns:Lines/ns:DebitLine"/>
            <xs:field xpath="ns:AccountID"/>
        </xs:keyref>
        <xs:keyref name="GeneralLedgerEntriesCreditLineAccountIDConstraint"
            refer="AccountIDConstraint">
            <xs:selector
                xpath="ns:GeneralLedgerEntries/ns:Journal/ns:Transaction/ns:Lines/ns:CreditLine"/>
            <xs:field xpath="ns:AccountID"/>
        </xs:keyref>
        <xs:keyref name="GeneralLedgerEntriesCustomerIDConstraint" refer="CustomerIDConstraint">
            <xs:selector xpath="ns:GeneralLedgerEntries/ns:Journal/ns:Transaction"/>
            <xs:field xpath="ns:CustomerID"/>
        </xs:keyref>
        <xs:unique name="GeneralLedgerEntriesJournalIdConstraint">
            <xs:selector xpath="ns:GeneralLedgerEntries/ns:Journal"/>
            <xs:field xpath="ns:JournalID"/>
        </xs:unique>
        <xs:keyref name="GeneralLedgerEntriesSupplierIDConstraint" refer="SupplierIDConstraint">
            <xs:selector xpath="ns:GeneralLedgerEntries/ns:Journal/ns:Transaction"/>
            <xs:field xpath="ns:SupplierID"/>
        </xs:keyref>
        <xs:unique name="GeneralLedgerEntriesTransactionIdConstraint">
            <xs:selector xpath="ns:GeneralLedgerEntries/ns:Journal/ns:Transaction"/>
            <xs:field xpath="ns:TransactionID"/>
        </xs:unique>
        <xs:unique name="InvoiceNoConstraint">
            <xs:selector xpath="ns:SourceDocuments/ns:SalesInvoices/ns:Invoice"/>
            <xs:field xpath="ns:InvoiceNo"/>
        </xs:unique>
        <xs:keyref name="InvoiceCustomerIDConstraint" refer="CustomerIDConstraint">
            <xs:selector xpath="ns:SourceDocuments/ns:SalesInvoices/ns:Invoice"/>
            <xs:field xpath="ns:CustomerID"/>
        </xs:keyref>
        <xs:keyref name="InvoiceProductCodeConstraint" refer="ProductCodeConstraint">
            <xs:selector xpath="ns:SourceDocuments/ns:SalesInvoices/ns:Invoice/ns:Line"/>
            <xs:field xpath="ns:ProductCode"/>
        </xs:keyref>
        <xs:unique name="DocumentNumberConstraint">
            <xs:selector xpath="ns:SourceDocuments/ns:MovementOfGoods/ns:StockMovement"/>
            <xs:field xpath="ns:DocumentNumber"/>
        </xs:unique>
        <xs:keyref name="StockMovementCustomerIDConstraint" refer="CustomerIDConstraint">
            <xs:selector xpath="ns:SourceDocuments/ns:MovementOfGoods/ns:StockMovement"/>
            <xs:field xpath="ns:CustomerID"/>
        </xs:keyref>
        <xs:keyref name="StockMovementSupplierIDConstraint" refer="SupplierIDConstraint">
            <xs:selector xpath="ns:SourceDocuments/ns:MovementOfGoods/ns:StockMovement"/>
            <xs:field xpath="ns:SupplierID"/>
        </xs:keyref>
        <xs:keyref name="StockMovementProductCodeConstraint" refer="ProductCodeConstraint">
            <xs:selector xpath="ns:SourceDocuments/ns:MovementOfGoods/ns:StockMovement/ns:Line"/>
            <xs:field xpath="ns:ProductCode"/>
        </xs:keyref>
        <xs:unique name="WorkDocumentDocumentNumberConstraint">
            <xs:selector xpath="ns:SourceDocuments/ns:WorkingDocuments/ns:WorkDocument"/>
            <xs:field xpath="ns:DocumentNumber"/>
        </xs:unique>
        <xs:keyref name="WorkDocumentDocumentCustomerIDConstraint" refer="CustomerIDConstraint">
            <xs:selector xpath="ns:SourceDocuments/ns:WorkingDocuments/ns:WorkDocument"/>
            <xs:field xpath="ns:CustomerID"/>
        </xs:keyref>
        <xs:keyref name="WorkDocumentDocumentProductCodeConstraint" refer="ProductCodeConstraint">
            <xs:selector xpath="ns:SourceDocuments/ns:WorkingDocuments/ns:WorkDocument/ns:Line"/>
            <xs:field xpath="ns:ProductCode"/>
        </xs:keyref>
        <xs:unique name="PaymentPaymentRefNoConstraint">
            <xs:selector xpath="ns:SourceDocuments/ns:Payments/ns:Payment"/>
            <xs:field xpath="ns:PaymentRefNo"/>
        </xs:unique>
        <xs:keyref name="PaymentPaymentRefNoCustomerIDConstraint" refer="CustomerIDConstraint">
            <xs:selector xpath="ns:SourceDocuments/ns:Payments/ns:Payment"/>
            <xs:field xpath="ns:CustomerID"/>
        </xs:keyref>
    </xs:element>
    <!-- Estrutura de cabecalho (AuditFile.Header) -->
    <xs:element name="Header">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="AuditFileVersion"/>
                <xs:element ref="CompanyID"/>
                <xs:element name="TaxRegistrationNumber" type="SAFPTPortugueseVatNumber"/>
                <xs:element ref="TaxAccountingBasis"/>
                <xs:element ref="CompanyName"/>
                <xs:element ref="BusinessName" minOccurs="0"/>
                <xs:element ref="CompanyAddress"/>
                <xs:element ref="FiscalYear"/>
                <xs:element ref="StartDate"/>
                <xs:element ref="EndDate"/>
                <xs:element name="CurrencyCode" type="CurrencyPT"/>
                <xs:element ref="DateCreated"/>
                <xs:element ref="TaxEntity"/>
                <xs:element ref="ProductCompanyTaxID"/>
                <xs:element ref="SoftwareCertificateNumber"/>
                <xs:element ref="ProductID"/>
                <xs:element ref="ProductVersion"/>
                <xs:element ref="HeaderComment" minOccurs="0"/>
                <xs:element ref="Telephone" minOccurs="0"/>
                <xs:element ref="Fax" minOccurs="0"/>
                <xs:element ref="Email" minOccurs="0"/>
                <xs:element ref="Website" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <!-- Ficheiros Mestre (AuditFile.MasterFiles) -->
    <!--    Estrutura do Plano de Contas (AuditFile.MasterFiles.GeneralLedgerAccounts)-->
    <xs:element name="GeneralLedgerAccounts">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="TaxonomyReference"/>
                <xs:element name="Account" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="AccountID" type="SAFPTGLAccountID"/>
                            <xs:element ref="AccountDescription"/>
                            <xs:element ref="OpeningDebitBalance"/>
                            <xs:element ref="OpeningCreditBalance"/>
                            <xs:element ref="ClosingDebitBalance"/>
                            <xs:element ref="ClosingCreditBalance"/>
                            <xs:element ref="GroupingCategory"/>
                            <xs:element name="GroupingCode" type="SAFPTGLAccountID" minOccurs="0"/>
                            <xs:element name="TaxonomyCode" type="SAFPTTaxonomyCode" minOccurs="0"/>
                        </xs:sequence>
                        <xs:assert
                            test="
                                if ((ns:GroupingCategory != 'GM' and not(ns:TaxonomyCode)) or (ns:GroupingCategory eq 'GM' and ns:TaxonomyCode)) then
                                    true()
                                else
                                    false()"/>
                        <xs:assert
                            test="
                            if ((ns:GroupingCategory eq 'GR' and not(ns:GroupingCode)) or (ns:GroupingCategory eq 'AR' and not(ns:GroupingCode)) or (ns:GroupingCategory eq 'GA' and ns:GroupingCode) or (ns:GroupingCategory eq 'AA' and ns:GroupingCode) or (ns:GroupingCategory eq 'GM' and ns:GroupingCode) or (ns:GroupingCategory eq 'AM' and ns:GroupingCode)) then
                            true()
                            else
                            false()"/>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <!--    Estrutura de Cliente (AuditFile.MasterFiles.Customer) -->
    <xs:element name="Customer">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="CustomerID"/>
                <xs:element ref="AccountID"/>
                <xs:element ref="CustomerTaxID"/>
                <xs:element ref="CompanyName"/>
                <xs:element ref="Contact" minOccurs="0"/>
                <xs:element name="BillingAddress" type="CustomerAddressStructure"/>
                <xs:element ref="ShipToAddress" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="Telephone" minOccurs="0"/>
                <xs:element ref="Fax" minOccurs="0"/>
                <xs:element ref="Email" minOccurs="0"/>
                <xs:element ref="Website" minOccurs="0"/>
                <xs:element ref="SelfBillingIndicator"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <!--    Estrutura de Fornecedor (AuditFile.MasterFiles.Supplier) -->
    <xs:element name="Supplier">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="SupplierID"/>
                <xs:element ref="AccountID"/>
                <xs:element ref="SupplierTaxID"/>
                <xs:element ref="CompanyName"/>
                <xs:element ref="Contact" minOccurs="0"/>
                <xs:element name="BillingAddress" type="AddressStructure"/>
                <xs:element name="ShipFromAddress" type="AddressStructure" minOccurs="0"
                    maxOccurs="unbounded"/>
                <xs:element ref="Telephone" minOccurs="0"/>
                <xs:element ref="Fax" minOccurs="0"/>
                <xs:element ref="Email" minOccurs="0"/>
                <xs:element ref="Website" minOccurs="0"/>
                <xs:element ref="SelfBillingIndicator"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <!--    Estrutura de produto (AuditFile.MasterFiles.Product)-->
    <xs:element name="Product">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ProductType"/>
                <xs:element ref="ProductCode"/>
                <xs:element ref="ProductGroup" minOccurs="0"/>
                <xs:element ref="ProductDescription"/>
                <xs:element ref="ProductNumberCode"/>
                <xs:element name="CustomsDetails" type="CustomsDetails" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <!--    Estrutura de Impostos (AuditFile.MasterFiles.TaxTable) -->
    <xs:element name="TaxTable">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="TaxTableEntry" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <!--    Estrutura de Imposto -->
    <xs:element name="TaxTableEntry">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="TaxType"/>
                <xs:element ref="TaxCountryRegion"/>
                <xs:element name="TaxCode" type="TaxTableEntryTaxCode"/>
                <xs:element name="Description" type="SAFPTtextTypeMandatoryMax255Car"/>
                <xs:element ref="TaxExpirationDate" minOccurs="0"/>
                <xs:choice>
                    <xs:element ref="TaxPercentage"/>
                    <xs:element ref="TaxAmount"/>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <!-- Estrutura de Movimentos Contabilisticos (AuditFile.GeneralLedgerEntries)-->
    <xs:element name="GeneralLedgerEntries">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="NumberOfEntries"/>
                <xs:element ref="TotalDebit"/>
                <xs:element ref="TotalCredit"/>
                <xs:element name="Journal" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="JournalID"/>
                            <xs:element ref="Description"/>
                            <xs:element name="Transaction" minOccurs="0" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element ref="TransactionID"/>
                                        <xs:element name="Period" type="SAFPTAccountingPeriod"/>
                                        <xs:element ref="TransactionDate"/>
                                        <xs:element ref="SourceID"/>
                                        <xs:element ref="Description"/>
                                        <xs:element ref="DocArchivalNumber"/>
                                        <xs:element ref="TransactionType"/>
                                        <xs:element ref="GLPostingDate"/>
                                        <xs:choice>
                                            <xs:element ref="CustomerID" minOccurs="0"/>
                                            <xs:element ref="SupplierID" minOccurs="0"/>
                                        </xs:choice>
                                        <xs:element name="Lines">
                                            <xs:complexType>
                                                <xs:all>
                                                  <xs:element name="DebitLine" maxOccurs="unbounded">
                                                  <xs:complexType>
                                                  <xs:sequence>
                                                  <xs:element ref="RecordID"/>
                                                  <xs:element name="AccountID"
                                                  type="SAFPTGLAccountID"/>
                                                  <xs:element ref="SourceDocumentID" minOccurs="0"/>
                                                  <xs:element ref="SystemEntryDate"/>
                                                  <xs:element ref="Description"/>
                                                  <xs:element name="DebitAmount"
                                                  type="SAFmonetaryType"/>
                                                  </xs:sequence>
                                                  </xs:complexType>
                                                  </xs:element>
                                                  <xs:element name="CreditLine"
                                                  maxOccurs="unbounded">
                                                  <xs:complexType>
                                                  <xs:sequence>
                                                  <xs:element ref="RecordID"/>
                                                  <xs:element name="AccountID"
                                                  type="SAFPTGLAccountID"/>
                                                  <xs:element ref="SourceDocumentID" minOccurs="0"/>
                                                  <xs:element ref="SystemEntryDate"/>
                                                  <xs:element ref="Description"/>
                                                  <xs:element name="CreditAmount"
                                                  type="SAFmonetaryType"/>
                                                  </xs:sequence>
                                                  </xs:complexType>
                                                  </xs:element>
                                                </xs:all>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <!-- Estrutura de Documentos Comerciais (AuditFile.SourceDocuments)-->
    <xs:element name="SourceDocuments">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="SalesInvoices" minOccurs="0">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="NumberOfEntries"/>
                            <xs:element ref="TotalDebit"/>
                            <xs:element ref="TotalCredit"/>
                            <xs:element name="Invoice" minOccurs="0" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element ref="InvoiceNo"/>
                                        <xs:element ref="ATCUD"/>
                                        <!-- Estrutura da situacao atual do documento -->
                                        <xs:element name="DocumentStatus">
                                            <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element ref="InvoiceStatus"/>
                                                  <xs:element ref="InvoiceStatusDate"/>
                                                  <xs:element ref="Reason" minOccurs="0"/>
                                                  <xs:element ref="SourceID"/>
                                                  <xs:element name="SourceBilling"
                                                  type="SAFTPTSourceBilling"/>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element ref="Hash"/>
                                        <xs:element ref="HashControl"/>
                                        <xs:element ref="Period" minOccurs="0"/>
                                        <xs:element ref="InvoiceDate"/>
                                        <xs:element ref="InvoiceType"/>
                                        <xs:element name="SpecialRegimes" type="SpecialRegimes"/>
                                        <xs:element ref="SourceID"/>
                                        <xs:element ref="EACCode" minOccurs="0"/>
                                        <xs:element ref="SystemEntryDate"/>
                                        <xs:element ref="TransactionID" minOccurs="0"/>
                                        <xs:element ref="CustomerID"/>
                                        <xs:element ref="ShipTo" minOccurs="0" maxOccurs="1"/>
                                        <xs:element ref="ShipFrom" minOccurs="0" maxOccurs="1"/>
                                        <xs:element ref="MovementEndTime" minOccurs="0"
                                            maxOccurs="1"/>
                                        <xs:element ref="MovementStartTime" minOccurs="0"
                                            maxOccurs="1"/>
                                        <xs:element name="Line" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element ref="LineNumber"/>
                                                  <xs:element name="OrderReferences"
                                                  type="OrderReferences" minOccurs="0"
                                                  maxOccurs="unbounded"/>
                                                  <xs:element ref="ProductCode"/>
                                                  <xs:element ref="ProductDescription"/>
                                                  <xs:element ref="Quantity"/>
                                                  <xs:element ref="UnitOfMeasure"/>
                                                  <xs:element ref="UnitPrice"/>
                                                  <xs:element ref="TaxBase" minOccurs="0"/>
                                                  <xs:element ref="TaxPointDate"/>
                                                  <xs:element name="References" type="References"
                                                  minOccurs="0" maxOccurs="unbounded"/>
                                                  <xs:element ref="Description"/>
                                                  <xs:element name="ProductSerialNumber"
                                                  type="ProductSerialNumber" minOccurs="0"/>
                                                  <xs:choice>
                                                  <xs:element ref="DebitAmount"/>
                                                  <xs:element ref="CreditAmount"/>
                                                  </xs:choice>
                                                  <xs:element name="Tax" type="Tax"/>
                                                  <xs:element ref="TaxExemptionReason" minOccurs="0"/>
                                                  <xs:element ref="TaxExemptionCode" minOccurs="0"/>
                                                  <xs:element ref="SettlementAmount" minOccurs="0"/>
                                                  <xs:element name="CustomsInformation"
                                                  type="CustomsInformation" minOccurs="0"/>
                                                </xs:sequence>
                                                <xs:assert
                                                  test="
                                                        if (not(ns:Tax/ns:TaxAmount) or ((ns:Tax/ns:TaxAmount != 0 and not(ns:TaxExemptionReason)) or (ns:Tax/ns:TaxAmount eq 0 and ns:TaxExemptionReason))) then
                                                            true()
                                                        else
                                                            false()"/>
                                                <xs:assert
                                                  test="
                                                        if (not(ns:Tax/ns:TaxPercentage) or ((ns:Tax/ns:TaxPercentage != 0 and not(ns:TaxExemptionReason)) or (ns:Tax/ns:TaxPercentage eq 0 and ns:TaxExemptionReason))) then
                                                            true()
                                                        else
                                                            false()"/>
                                                <xs:assert
                                                  test="
                                                        if ((ns:TaxExemptionReason and not(ns:TaxExemptionCode)) or (ns:TaxExemptionCode and not(ns:TaxExemptionReason))) then
                                                            false()
                                                        else
                                                            true()"/>
                                                <xs:assert
                                                  test="
                                                        if ((ns:TaxBase and ns:UnitPrice != 0)) then
                                                            false()
                                                        else
                                                            true()"/>
                                                <xs:assert
                                                  test="
                                                        if ((ns:TaxBase and ns:DebitAmount != 0) or (ns:TaxBase and ns:CreditAmount != 0)) then
                                                            false()
                                                        else
                                                            true()"/>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="DocumentTotals">
                                            <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element ref="TaxPayable"/>
                                                  <xs:element ref="NetTotal"/>
                                                  <xs:element ref="GrossTotal"/>
                                                  <xs:element name="Currency" type="Currency"
                                                  minOccurs="0"/>
                                                  <!-- A estrutura Settlement representa acordos ou formas de pagamento futuros. Nao constitui em caso algum o somatorio dos descontos concedidos e reflectidos nas linhas dos documentos e a informacao aqui constante nao influi o montante total do documento (GrossTotal) -->
                                                  <xs:element name="Settlement" type="Settlement"
                                                  minOccurs="0" maxOccurs="unbounded"/>
                                                  <xs:element name="Payment" type="PaymentMethod"
                                                  minOccurs="0" maxOccurs="unbounded"/>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="WithholdingTax" type="WithholdingTax"
                                            minOccurs="0" maxOccurs="unbounded"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="MovementOfGoods" minOccurs="0">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="NumberOfMovementLines"/>
                            <xs:element ref="TotalQuantityIssued"/>
                            <xs:element name="StockMovement" minOccurs="0" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element ref="DocumentNumber"/>
                                        <xs:element ref="ATCUD"/>
                                        <!-- Estrutura da situacao atual do documento -->
                                        <xs:element name="DocumentStatus">
                                            <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element ref="MovementStatus"/>
                                                  <xs:element ref="MovementStatusDate"/>
                                                  <xs:element ref="Reason" minOccurs="0"/>
                                                  <xs:element ref="SourceID"/>
                                                  <xs:element name="SourceBilling"
                                                  type="SAFTPTSourceBilling"/>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element ref="Hash"/>
                                        <xs:element ref="HashControl"/>
                                        <xs:element ref="Period" minOccurs="0"/>
                                        <xs:element ref="MovementDate"/>
                                        <xs:element ref="MovementType"/>
                                        <xs:element ref="SystemEntryDate"/>
                                        <xs:element ref="TransactionID" minOccurs="0"/>
                                        <xs:choice>
                                            <xs:element ref="CustomerID"/>
                                            <xs:element ref="SupplierID"/>
                                        </xs:choice>
                                        <xs:element ref="SourceID"/>
                                        <xs:element ref="EACCode" minOccurs="0"/>
                                        <xs:element ref="MovementComments" minOccurs="0"/>
                                        <xs:element ref="ShipTo" minOccurs="0" maxOccurs="1"/>
                                        <xs:element ref="ShipFrom" minOccurs="0" maxOccurs="1"/>
                                        <xs:element ref="MovementEndTime" minOccurs="0"
                                            maxOccurs="1"/>
                                        <xs:element ref="MovementStartTime" maxOccurs="1"/>
                                        <!-- Nos documentos resumo (MovementStatus "R"), na falta desta informacao em concreto, a hora de inicio de transporte (MovementStartTime) pode ser indicada com a concatenacao da data constante no campo MovementDate com a hora 00:00:00-->
                                        <xs:element ref="ATDocCodeID" minOccurs="0" maxOccurs="1"/>
                                        <xs:element name="Line" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element ref="LineNumber"/>
                                                  <xs:element name="OrderReferences"
                                                  type="OrderReferences" minOccurs="0"
                                                  maxOccurs="unbounded"/>
                                                  <xs:element ref="ProductCode"/>
                                                  <xs:element ref="ProductDescription"/>
                                                  <xs:element ref="Quantity"/>
                                                  <xs:element ref="UnitOfMeasure"/>
                                                  <xs:element ref="UnitPrice"/>
                                                  <xs:element ref="Description"/>
                                                  <xs:element name="ProductSerialNumber"
                                                  type="ProductSerialNumber" minOccurs="0"/>
                                                  <xs:choice>
                                                  <xs:element ref="DebitAmount"/>
                                                  <xs:element ref="CreditAmount"/>
                                                  </xs:choice>
                                                  <xs:element name="Tax" type="MovementTax"
                                                  minOccurs="0"/>
                                                  <xs:element ref="TaxExemptionReason" minOccurs="0"/>
                                                  <xs:element ref="TaxExemptionCode" minOccurs="0"/>
                                                  <xs:element ref="SettlementAmount" minOccurs="0"/>
                                                  <xs:element name="CustomsInformation"
                                                  type="CustomsInformation" minOccurs="0"/>
                                                </xs:sequence>
                                                <xs:assert
                                                  test="
                                                        if (not(ns:Tax/ns:TaxPercentage) or ((ns:Tax/ns:TaxPercentage != 0 and not(ns:TaxExemptionReason)) or (ns:Tax/ns:TaxPercentage eq 0 and ns:TaxExemptionReason))) then
                                                            true()
                                                        else
                                                            false()"/>
                                                <xs:assert
                                                  test="
                                                        if ((ns:TaxExemptionReason and not(ns:TaxExemptionCode)) or (ns:TaxExemptionCode and not(ns:TaxExemptionReason))) then
                                                            false()
                                                        else
                                                            true()"
                                                />
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="DocumentTotals">
                                            <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element ref="TaxPayable"/>
                                                  <xs:element ref="NetTotal"/>
                                                  <xs:element ref="GrossTotal"/>
                                                  <xs:element name="Currency" type="Currency"
                                                  minOccurs="0"/>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="WorkingDocuments" minOccurs="0">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="NumberOfEntries"/>
                            <xs:element ref="TotalDebit"/>
                            <xs:element ref="TotalCredit"/>
                            <xs:element name="WorkDocument" minOccurs="0" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element ref="DocumentNumber"/>
                                        <xs:element ref="ATCUD"/>
                                        <xs:element name="DocumentStatus">
                                            <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element ref="WorkStatus"/>
                                                  <xs:element ref="WorkStatusDate"/>
                                                  <xs:element ref="Reason" minOccurs="0"/>
                                                  <xs:element ref="SourceID"/>
                                                  <xs:element name="SourceBilling"
                                                  type="SAFTPTSourceBilling"/>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element ref="Hash"/>
                                        <xs:element ref="HashControl"/>
                                        <xs:element ref="Period" minOccurs="0"/>
                                        <xs:element ref="WorkDate"/>
                                        <xs:element ref="WorkType"/>
                                        <xs:element ref="SourceID"/>
                                        <xs:element ref="EACCode" minOccurs="0"/>
                                        <xs:element ref="SystemEntryDate"/>
                                        <xs:element ref="TransactionID" minOccurs="0"/>
                                        <xs:element ref="CustomerID"/>
                                        <xs:element name="Line" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element ref="LineNumber"/>
                                                  <xs:element name="OrderReferences"
                                                  type="OrderReferences" minOccurs="0"
                                                  maxOccurs="unbounded"/>
                                                  <xs:element ref="ProductCode"/>
                                                  <xs:element ref="ProductDescription"/>
                                                  <xs:element ref="Quantity"/>
                                                  <xs:element ref="UnitOfMeasure"/>
                                                  <xs:element ref="UnitPrice"/>
                                                  <xs:element ref="TaxBase" minOccurs="0"/>
                                                  <xs:element ref="TaxPointDate"/>
                                                  <xs:element name="References" type="References"
                                                  minOccurs="0" maxOccurs="unbounded"/>
                                                  <xs:element ref="Description"/>
                                                  <xs:element name="ProductSerialNumber"
                                                  type="ProductSerialNumber" minOccurs="0"/>
                                                  <xs:choice>
                                                  <xs:element ref="DebitAmount"/>
                                                  <xs:element ref="CreditAmount"/>
                                                  </xs:choice>
                                                  <xs:element name="Tax" type="Tax" minOccurs="0"/>
                                                  <xs:element ref="TaxExemptionReason" minOccurs="0"/>
                                                  <xs:element ref="TaxExemptionCode" minOccurs="0"/>
                                                  <xs:element ref="SettlementAmount" minOccurs="0"/>
                                                  <xs:element name="CustomsInformation"
                                                  type="CustomsInformation" minOccurs="0"/>
                                                </xs:sequence>
                                                <xs:assert
                                                  test="
                                                        if (not(ns:Tax/ns:TaxAmount) or ((ns:Tax/ns:TaxAmount != 0 and not(ns:TaxExemptionReason)) or (ns:Tax/ns:TaxAmount eq 0 and ns:TaxExemptionReason))) then
                                                            true()
                                                        else
                                                            false()"/>
                                                <xs:assert
                                                  test="
                                                        if (not(ns:Tax/ns:TaxPercentage) or ((ns:Tax/ns:TaxPercentage != 0 and not(ns:TaxExemptionReason)) or (ns:Tax/ns:TaxPercentage eq 0 and ns:TaxExemptionReason))) then
                                                            true()
                                                        else
                                                            false()"/>
                                                <xs:assert
                                                  test="
                                                        if ((ns:TaxExemptionReason and not(ns:TaxExemptionCode)) or (ns:TaxExemptionCode and not(ns:TaxExemptionReason))) then
                                                            false()
                                                        else
                                                            true()"/>
                                                <xs:assert
                                                  test="
                                                        if ((ns:TaxBase and ns:UnitPrice != 0)) then
                                                            false()
                                                        else
                                                            true()"/>
                                                <xs:assert
                                                  test="
                                                        if ((ns:TaxBase and ns:DebitAmount != 0) or (ns:TaxBase and ns:CreditAmount != 0)) then
                                                            false()
                                                        else
                                                            true()"/>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="DocumentTotals">
                                            <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element ref="TaxPayable"/>
                                                  <xs:element ref="NetTotal"/>
                                                  <xs:element ref="GrossTotal"/>
                                                  <xs:element name="Currency" type="Currency"
                                                  minOccurs="0"/>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Payments" minOccurs="0">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="NumberOfEntries"/>
                            <xs:element ref="TotalDebit"/>
                            <xs:element ref="TotalCredit"/>
                            <xs:element name="Payment" minOccurs="0" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element ref="PaymentRefNo"/>
                                        <xs:element ref="ATCUD"/>
                                        <xs:element ref="Period" minOccurs="0"/>
                                        <xs:element ref="TransactionID" minOccurs="0"/>
                                        <xs:element ref="TransactionDate"/>
                                        <xs:element name="PaymentType" type="SAFTPTPaymentType"/>
                                        <xs:element ref="Description" minOccurs="0"/>
                                        <xs:element ref="SystemID" minOccurs="0"/>
                                        <xs:element name="DocumentStatus">
                                            <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element ref="PaymentStatus"/>
                                                  <xs:element ref="PaymentStatusDate"/>
                                                  <xs:element ref="Reason" minOccurs="0"/>
                                                  <xs:element ref="SourceID"/>
                                                  <xs:element name="SourcePayment"
                                                  type="SAFTPTSourcePayment"/>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="PaymentMethod" type="PaymentMethod"
                                            minOccurs="0" maxOccurs="unbounded"/>
                                        <xs:element ref="SourceID"/>
                                        <xs:element ref="SystemEntryDate"/>
                                        <xs:element ref="CustomerID"/>
                                        <xs:element name="Line" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element ref="LineNumber"/>
                                                  <xs:element name="SourceDocumentID"
                                                  maxOccurs="unbounded">
                                                  <xs:complexType>
                                                  <xs:sequence>
                                                  <xs:element ref="OriginatingON"/>
                                                  <xs:element ref="InvoiceDate"/>
                                                  <xs:element ref="Description" minOccurs="0"/>
                                                  </xs:sequence>
                                                  </xs:complexType>
                                                  </xs:element>
                                                  <xs:element ref="SettlementAmount" minOccurs="0"/>
                                                  <xs:choice>
                                                  <xs:element ref="DebitAmount"/>
                                                  <xs:element ref="CreditAmount"/>
                                                  </xs:choice>
                                                  <xs:element name="Tax" type="PaymentTax"
                                                  minOccurs="0"/>
                                                  <xs:element ref="TaxExemptionReason" minOccurs="0"/>
                                                  <xs:element ref="TaxExemptionCode" minOccurs="0"/>
                                                </xs:sequence>
                                                <xs:assert
                                                  test="
                                                        if (not(ns:Tax/ns:TaxAmount) or ((ns:Tax/ns:TaxAmount != 0 and not(ns:TaxExemptionReason)) or (ns:Tax/ns:TaxAmount eq 0 and ns:TaxExemptionReason))) then
                                                            true()
                                                        else
                                                            false()"/>
                                                <xs:assert
                                                  test="
                                                        if (not(ns:Tax/ns:TaxPercentage) or ((ns:Tax/ns:TaxPercentage != 0 and not(ns:TaxExemptionReason)) or (ns:Tax/ns:TaxPercentage eq 0 and ns:TaxExemptionReason))) then
                                                            true()
                                                        else
                                                            false()"/>
                                                <xs:assert
                                                  test="
                                                        if ((ns:TaxExemptionReason and not(ns:TaxExemptionCode)) or (ns:TaxExemptionCode and not(ns:TaxExemptionReason))) then
                                                            false()
                                                        else
                                                            true()"/>
                                                <xs:assert
                                                  test="
                                                        if (../ns:PaymentType eq 'RC' and not(ns:Tax)) then
                                                            false()
                                                        else
                                                            true()"
                                                />
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="DocumentTotals">
                                            <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element ref="TaxPayable"/>
                                                  <xs:element ref="NetTotal"/>
                                                  <xs:element ref="GrossTotal"/>
                                                  <!-- O conteudo desta estrutura Settlement representa o somatorio dos descontos reflectidos no elemento SettlementAmount das linhas do recibo. Trata-se de um raciocinio diverso da tabela 4.1 SalesInvoices -->
                                                  <xs:element name="Settlement" minOccurs="0">
                                                  <xs:complexType>
                                                  <xs:sequence>
                                                  <xs:element ref="SettlementAmount"/>
                                                  </xs:sequence>
                                                  </xs:complexType>
                                                  </xs:element>
                                                  <xs:element name="Currency" type="Currency"
                                                  minOccurs="0"/>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="WithholdingTax" type="WithholdingTax"
                                            minOccurs="0" maxOccurs="unbounded"/>
                                    </xs:sequence>
                                    <xs:assert
                                        test="
                                            if ((ns:Line/ns:Tax/ns:TaxType and ns:PaymentType eq 'RC') or (ns:PaymentType eq 'RG')) then
                                                true()
                                            else
                                                false()"
                                    />
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <!-- ESTRUTURAS DE SUPORTE -->
    <!-- Estrutura de Moradas-->
    <xs:complexType name="AddressStructure">
        <xs:sequence>
            <xs:element ref="BuildingNumber" minOccurs="0"/>
            <xs:element ref="StreetName" minOccurs="0"/>
            <xs:element ref="AddressDetail"/>
            <xs:element ref="City"/>
            <xs:element ref="PostalCode"/>
            <xs:element ref="Region" minOccurs="0"/>
            <xs:element ref="Country"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de Moradas de clientes -->
    <xs:complexType name="CustomerAddressStructure">
        <xs:sequence>
            <xs:element ref="BuildingNumber" minOccurs="0"/>
            <xs:element ref="StreetName" minOccurs="0"/>
            <xs:element ref="AddressDetail"/>
            <xs:element ref="City"/>
            <xs:element ref="PostalCode"/>
            <xs:element ref="Region" minOccurs="0"/>
            <xs:element name="Country" type="CustomerCountry"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de valor monetario -->
    <!-- Este elemento apenas deve ser gerado quando a moeda original do documento for diferente de euro -->
    <xs:complexType name="Currency">
        <xs:sequence>
            <xs:element ref="CurrencyCode"/>
            <xs:element ref="CurrencyAmount"/>
            <xs:element ref="ExchangeRate"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de caraterizacao aduaneira de produtos-->
    <xs:complexType name="CustomsDetails">
        <xs:sequence>
            <xs:element ref="CNCode" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="UNNumber" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de informacao aduaneira-->
    <xs:complexType name="CustomsInformation">
        <xs:sequence>
            <xs:element ref="ARCNo" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="IECAmount" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de Taxa de documentos de movimentacao de mercadorias-->
    <xs:complexType name="MovementTax">
        <xs:sequence>
            <xs:element name="TaxType" type="SAFTPTMovementTaxType"/>
            <xs:element ref="TaxCountryRegion"/>
            <xs:element name="TaxCode" type="SAFTPTMovementTaxCode"/>
            <xs:element ref="TaxPercentage"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de Referencias ao documento de origem-->
    <xs:complexType name="OrderReferences">
        <xs:sequence>
            <xs:element ref="OriginatingON" minOccurs="0"/>
            <xs:element ref="OrderDate" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de pagamentos-->
    <xs:complexType name="PaymentMethod">
        <xs:sequence>
            <xs:element ref="PaymentMechanism" minOccurs="0"/>
            <xs:element name="PaymentAmount" type="SAFmonetaryType"/>
            <xs:element name="PaymentDate" type="SAFdateType"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de Taxa dos recibos-->
    <xs:complexType name="PaymentTax">
        <xs:sequence>
            <xs:element ref="TaxType"/>
            <xs:element ref="TaxCountryRegion"/>
            <xs:element name="TaxCode" type="PaymentTaxCode"/>
            <xs:choice>
                <xs:element ref="TaxPercentage"/>
                <xs:element ref="TaxAmount"/>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de numero de serie do produto-->
    <xs:complexType name="ProductSerialNumber">
        <xs:sequence>
            <xs:element ref="SerialNumber" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de referencias a outros documentos em documentos retificativos de faturas-->
    <xs:complexType name="References">
        <xs:sequence>
            <xs:element ref="Reference" minOccurs="0"/>
            <xs:element ref="Reason" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de Acordos entre cliente e fornecedor-->
    <xs:complexType name="Settlement">
        <xs:sequence>
            <xs:element name="SettlementDiscount" type="SAFPTtextTypeMandatoryMax30Car"
                minOccurs="0"/>
            <xs:element name="SettlementAmount" type="SAFmonetaryType" minOccurs="0"/>
            <xs:element name="SettlementDate" type="SAFdateType" minOccurs="0"/>
            <xs:element name="PaymentTerms" type="SAFPTtextTypeMandatoryMax100Car" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de entregas de produtos -->
    <xs:complexType name="ShippingPointStructure">
        <xs:sequence>
            <xs:element ref="DeliveryID" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="DeliveryDate" minOccurs="0"/>
            <xs:sequence minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="WarehouseID" minOccurs="0"/>
                <xs:element ref="LocationID" minOccurs="0"/>
            </xs:sequence>
            <xs:element ref="Address" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de Regimes especiais de faturacao-->
    <xs:complexType name="SpecialRegimes">
        <xs:sequence>
            <xs:element ref="SelfBillingIndicator"/>
            <xs:element ref="CashVATSchemeIndicator"/>
            <xs:element ref="ThirdPartiesBillingIndicator"/>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de Taxa -->
    <xs:complexType name="Tax">
        <xs:sequence>
            <xs:element ref="TaxType"/>
            <xs:element ref="TaxCountryRegion"/>
            <xs:element ref="TaxCode"/>
            <xs:choice>
                <xs:element ref="TaxPercentage"/>
                <xs:element ref="TaxAmount"/>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
    <!-- Estrutura de Retencao na fonte-->
    <xs:complexType name="WithholdingTax">
        <xs:sequence>
            <xs:element ref="WithholdingTaxType" minOccurs="0"/>
            <xs:element name="WithholdingTaxDescription" type="SAFPTtextTypeMandatoryMax60Car"
                minOccurs="0"/>
            <xs:element name="WithholdingTaxAmount" type="SAFmonetaryType"/>
        </xs:sequence>
    </xs:complexType>
    <!-- ELEMENTOS SIMPLES -->
    <xs:element name="AccountDescription" type="SAFPTtextTypeMandatoryMax100Car"/>
    <xs:element name="Address" type="CustomerAddressStructure"/>
    <xs:element name="AddressDetail" type="SAFPTtextTypeMandatoryMax210Car"/>
    <xs:element name="ARCNo" type="SAFPTtextTypeMandatoryMax21Car"/>
    <xs:element name="ATCUD" type="SAFPTtextTypeMandatoryMax100Car"/>
    <xs:element name="ATDocCodeID" type="SAFPTtextTypeMandatoryMax200Car"/>
    <xs:element name="BillingAddress" type="AddressStructure"/>
    <xs:element name="BuildingNumber" type="SAFPTtextTypeMandatoryMax10Car"/>
    <xs:element name="BusinessName" type="SAFPTtextTypeMandatoryMax60Car"/>
    <xs:element name="City" type="SAFPTtextTypeMandatoryMax50Car"/>
    <xs:element name="ClosingCreditBalance" type="SAFmonetaryType"/>
    <xs:element name="ClosingDebitBalance" type="SAFmonetaryType"/>
    <xs:element name="CNCode" type="SAFPTCNCode"/>
    <xs:element name="CompanyAddress" type="AddressStructure"/>
    <xs:element name="CompanyName" type="SAFPTtextTypeMandatoryMax100Car"/>
    <xs:element name="Contact" type="SAFPTtextTypeMandatoryMax50Car"/>
    <xs:element name="CreditAmount" type="SAFmonetaryType"/>
    <xs:element name="CurrencyAmount" type="SAFmonetaryType"/>
    <xs:element name="CustomerID" type="SAFPTtextTypeMandatoryMax30Car"/>
    <xs:element name="CustomerTaxID" type="SAFPTtextTypeMandatoryMax30Car"/>
    <xs:element name="DateCreated" type="SAFPTDateSpan"/>
    <xs:element name="DebitAmount" type="SAFmonetaryType"/>
    <xs:element name="DeliveryDate" type="SAFdateType"/>
    <xs:element name="DeliveryID" type="SAFPTtextTypeMandatoryMax255Car"/>
    <xs:element name="Description" type="SAFPTtextTypeMandatoryMax200Car"/>
    <xs:element name="DocArchivalNumber" type="SAFTPTDocArchivalNumber"/>
    <xs:element name="Email" type="SAFPTtextTypeMandatoryMax254Car"/>
    <xs:element name="EndDate" type="SAFPTDateSpan"/>
    <xs:element name="ExchangeRate" type="SAFdecimalType"/>
    <xs:element name="Fax" type="SAFPTtextTypeMandatoryMax20Car"/>
    <xs:element name="GLPostingDate" type="SAFdateType"/>
    <xs:element name="GrossTotal" type="SAFmonetaryType"/>
    <xs:element name="Hash" type="SAFPTtextTypeMandatoryMax172Car"/>
    <xs:element name="HashControl" type="SAFPTHashControl"/>
    <xs:element name="HeaderComment" type="SAFPTtextTypeMandatoryMax255Car"/>
    <xs:element name="IECAmount" type="SAFmonetaryType"/>
    <xs:element name="InvoiceDate" type="SAFdateType"/>
    <xs:element name="InvoiceStatusDate" type="SAFdateTimeType"/>
    <xs:element name="JournalID" type="SAFPTJournalID"/>
    <xs:element name="LineNumber" type="xs:nonNegativeInteger"/>
    <xs:element name="LocationID" type="SAFPTtextTypeMandatoryMax30Car"/>
    <xs:element name="MovementComments" type="SAFPTtextTypeMandatoryMax60Car"/>
    <xs:element name="MovementDate" type="SAFdateType"/>
    <xs:element name="MovementEndTime" type="SAFdateTimeType"/>
    <xs:element name="MovementStartTime" type="SAFdateTimeType"/>
    <xs:element name="MovementStatusDate" type="SAFdateTimeType"/>
    <xs:element name="NetTotal" type="SAFmonetaryType"/>
    <xs:element name="NumberOfEntries" type="xs:nonNegativeInteger"/>
    <xs:element name="NumberOfMovementLines" type="xs:nonNegativeInteger"/>
    <xs:element name="OpeningCreditBalance" type="SAFmonetaryType"/>
    <xs:element name="OpeningDebitBalance" type="SAFmonetaryType"/>
    <xs:element name="OrderDate" type="SAFdateType"/>
    <xs:element name="OriginatingON" type="SAFPTtextTypeMandatoryMax60Car"/>
    <xs:element name="PaymentStatusDate" type="SAFdateTimeType"/>
    <xs:element name="PostalCode" type="SAFPTtextTypeMandatoryMax20Car"/>
    <xs:element name="ProductCode" type="SAFPTtextTypeMandatoryMax60Car"/>
    <xs:element name="ProductCompanyTaxID" type="SAFPTtextTypeMandatoryMax30Car"/>
    <xs:element name="ProductDescription" type="SAFPTProductDescription"/>
    <xs:element name="ProductGroup" type="SAFPTtextTypeMandatoryMax50Car"/>
    <xs:element name="ProductID" type="SAFPTProductID"/>
    <xs:element name="ProductNumberCode" type="SAFPTtextTypeMandatoryMax60Car"/>
    <xs:element name="ProductVersion" type="SAFPTtextTypeMandatoryMax30Car"/>
    <xs:element name="Quantity" type="SAFdecimalType"/>
    <xs:element name="Reason" type="SAFPTtextTypeMandatoryMax50Car"/>
    <xs:element name="RecordID" type="SAFPTtextTypeMandatoryMax30Car"/>
    <xs:element name="Reference" type="SAFPTtextTypeMandatoryMax60Car"/>
    <xs:element name="Region" type="SAFPTtextTypeMandatoryMax50Car"/>
    <xs:element name="SerialNumber" type="SAFPTtextTypeMandatoryMax100Car"/>
    <xs:element name="SettlementAmount" type="SAFmonetaryType"/>
    <xs:element name="ShipFrom" type="ShippingPointStructure"/>
    <xs:element name="ShipFromAddress" type="AddressStructure"/>
    <xs:element name="ShipTo" type="ShippingPointStructure"/>
    <xs:element name="ShipToAddress" type="CustomerAddressStructure"/>
    <xs:element name="SoftwareCertificateNumber" type="xs:nonNegativeInteger"/>
    <xs:element name="SourceDocumentID" type="SAFPTtextTypeMandatoryMax60Car"/>
    <xs:element name="SourceID" type="SAFPTtextTypeMandatoryMax30Car"/>
    <xs:element name="StartDate" type="SAFPTDateSpan"/>
    <xs:element name="StreetName" type="SAFPTtextTypeMandatoryMax200Car"/>
    <xs:element name="SupplierID" type="SAFPTtextTypeMandatoryMax30Car"/>
    <xs:element name="SupplierTaxID" type="SAFPTtextTypeMandatoryMax30Car"/>
    <xs:element name="SystemEntryDate" type="SAFdateTimeType"/>
    <xs:element name="SystemID" type="SAFPTtextTypeMandatoryMax60Car"/>
    <xs:element name="TaxAmount" type="SAFmonetaryType"/>
    <xs:element name="TaxBase" type="SAFmonetaryType"/>
    <xs:element name="TaxEntity" type="SAFPTtextTypeMandatoryMax20Car"/>
    <xs:element name="TaxExemptionCode" type="SAFPTPortugueseTaxExemptionCode"/>
    <xs:element name="TaxExemptionReason" type="SAFPTPortugueseTaxExemptionReason"/>
    <xs:element name="TaxExpirationDate" type="SAFdateType"/>
    <xs:element name="TaxPayable" type="SAFmonetaryType"/>
    <xs:element name="TaxPercentage" type="SAFdecimalType"/>
    <xs:element name="TaxPointDate" type="SAFdateType"/>
    <xs:element name="TaxVerificationDate" type="SAFdateType"/>
    <xs:element name="Telephone" type="SAFPTtextTypeMandatoryMax20Car"/>
    <xs:element name="TotalCredit" type="SAFmonetaryType"/>
    <xs:element name="TotalDebit" type="SAFmonetaryType"/>
    <xs:element name="TotalQuantityIssued" type="SAFdecimalType"/>
    <xs:element name="TransactionDate" type="SAFdateType"/>
    <xs:element name="TransactionID" type="SAFPTTransactionID"/>
    <xs:element name="UnitOfMeasure" type="SAFPTtextTypeMandatoryMax20Car"/>
    <xs:element name="UnitPrice" type="SAFmonetaryType"/>
    <xs:element name="UNNumber" type="SAFPTUNNumber"/>
    <xs:element name="WarehouseID" type="SAFPTtextTypeMandatoryMax50Car"/>
    <xs:element name="Website" type="SAFPTtextTypeMandatoryMax60Car"/>
    <xs:element name="WorkDate" type="SAFdateType"/>
    <xs:element name="WorkStatusDate" type="SAFdateTimeType"/>
    <!-- ELEMENTOS SIMPLES COM RESTRICOES ADICIONAIS-->
    <!-- Codigo da Conta -->
    <xs:element name="AccountID">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern value="(([^^]*)|Desconhecido)"/>
                <xs:minLength value="1"/>
                <xs:maxLength value="30"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Versao do estrutura do ficheiro -->    
    <xs:element name="AuditFileVersion">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern value="1\.04_01"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Indicador de regime de IVA de Caixa -->
    <xs:element name="CashVATSchemeIndicator">
        <xs:simpleType>
            <xs:restriction base="xs:integer">
                <xs:minInclusive value="0"/>
                <xs:maxInclusive value="1"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Identificacao da entidade a que respeitam os dados constantes no SAF-T-->
    <xs:element name="CompanyID">
        <xs:annotation>
            <xs:documentation>Concatenacao da Conservatoria do Registo Comercial com o numero do
                registo comercial separados pelo caracter espaco. Nos casos em que nao existe o
                registo comercial, deve ser indicado o NIF.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern value="([0-9]{9})+|([^^]+ [0-9/]+)"/>
                <xs:minLength value="1"/>
                <xs:maxLength value="50"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Codigo do pais (ISO 3166 1-alpha-2) -->
    <xs:element name="Country">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern
                    value="AD|AE|AF|AG|AI|AL|AM|AO|AQ|AR|AS|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BJ|BL|BM|BN|BO|BQ|BR|BS|BT|BV|BW|BY|BZ|CA|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|CR|CU|CV|CW|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EE|EG|EH|ER|ES|ET|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|IO|IQ|IR|IS|IT|JE|JM|JO|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MF|MG|MH|MK|ML|MM|MN|MO|MP|MQ|MR|MS|MT|MU|MV|MW|MX|MY|MZ|NA|NC|NE|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|SS|ST|SV|SX|SY|SZ|TC|TD|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TR|TT|TV|TW|TZ|UA|UG|UM|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XK|YE|YT|ZA|ZM|ZW"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Codigo da moeda (ISO 4217) -->
    <xs:element name="CurrencyCode">
        <!-- Nao consta o EUR por nao existirem situacoes que requeiram este codigo de moeda -->
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern
                    value="AED|AFN|ALL|AMD|ANG|AOA|ARS|AUD|AWG|AZN|BAM|BBD|BDT|BGN|BHD|BIF|BMD|BND|BOB|BOV|BRL|BSD|BTN|BWP|BYN|BYR|BZD|CAD|CDF|CHE|CHF|CHW|CLF|CLP|CNY|COP|COU|CRC|CUC|CUP|CVE|CZK|DJF|DKK|DOP|DZD|EGP|ERN|ETB|FJD|FKP|GBP|GEL|GHS|GIP|GMD|GNF|GTQ|GYD|HKD|HNL|HRK|HTG|HUF|IDR|ILS|INR|IQD|IRR|ISK|JMD|JOD|JPY|KES|KGS|KHR|KMF|KPW|KRW|KWD|KYD|KZT|LAK|LBP|LKR|LRD|LSL|LTL|LVL|LYD|MAD|MDL|MGA|MKD|MMK|MNT|MOP|MRO|MRU|MUR|MVR|MWK|MXN|MXV|MYR|MZN|NAD|NGN|NIO|NOK|NPR|NZD|OMR|PAB|PEN|PGK|PHP|PKR|PLN|PYG|QAR|RON|RSD|RUB|RWF|SAR|SBD|SCR|SDG|SEK|SGD|SHP|SLE|SLL|SOS|SRD|SSP|STD|STN|SVC|SYP|SZL|THB|TJS|TMT|TND|TOP|TRY|TTD|TWD|TZS|UAH|UGX|USD|USN|USS|UYI|UYU|UZS|VED|VEF|VES|VND|VUV|WST|XAF|XAG|XAU|XBA|XBB|XBC|XBD|XCD|XDR|XFU|XOF|XPD|XPF|XPT|XSU|XUA|YER|ZAR|ZMW|ZWL|EEK|SKK|TMM|ZMK|ZWD|ZWR"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Identificacao unica do documento de movimentacao de mercadorias e de conferencia-->
    <xs:element name="DocumentNumber">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern value="[^ ]+ [^/^ ]+/[0-9]+"/>
                <xs:minLength value="1"/>
                <xs:maxLength value="60"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Codigo CAE -->
    <xs:element name="EACCode">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern value="(([0-9]*))"/>
                <xs:length value="5"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Ano Fiscal -->
    <xs:element name="FiscalYear">
        <xs:simpleType>
            <xs:restriction base="xs:integer">
                <xs:minInclusive value="2000"/>
                <xs:maxInclusive value="9999"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Categoria da conta -->
    <xs:element name="GroupingCategory">
        <xs:annotation>
            <xs:documentation>GR para conta de 1. grau da contabilidade geral, GA para conta
                agregadora ou integradora da contabilidade geral, GM para conta de movimento da
                contabilidade geral, AR para conta de 1. grau da contabilidade analitica, AA para
                conta agregadora ou integradora da contabilidade analitica, AM para conta de
                movimento da contabilidade analitica </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="GR"/>
                <xs:enumeration value="GA"/>
                <xs:enumeration value="GM"/>
                <xs:enumeration value="AR"/>
                <xs:enumeration value="AA"/>
                <xs:enumeration value="AM"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Codigo unico do documento de venda -->
    <xs:element name="InvoiceNo">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern value="[^ ]+ [^/^ ]+/[0-9]+"/>
                <xs:minLength value="1"/>
                <xs:maxLength value="60"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Estado do documento SalesInvoices -->
    <xs:element name="InvoiceStatus">
        <xs:annotation>
            <xs:documentation>N para Normal, S para Autofaturacao, A para Documento anulado, R para
                Documento de resumo doutros documentos criados noutras aplicacoes e gerado nesta
                aplicacao, F para Documento faturado </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="N"/>
                <xs:enumeration value="S"/>
                <xs:enumeration value="A"/>
                <xs:enumeration value="R"/>
                <xs:enumeration value="F"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Tipo de documento de venda-->
    <xs:element name="InvoiceType">
        <xs:annotation>
            <xs:documentation> Restricao:FT para Fatura, emitida nos termos do artigo 36. do Codigo
                do IVA, FS para Fatura simplificada, emitida nos termos do artigo 40. do Codigo do
                IVA, FR para Fatura-recibo, ND para Nota de debito, NC para Nota de credito, VD para
                Venda a dinheiro e factura/recibo (a), TV para Talao de venda (a), TD para Talao de
                devolucao (a), AA para Alienacao de ativos (a), DA para Devolucao de ativos (a).
                Para o setor Segurador, ainda pode ser preenchido com: RP para Premio ou recibo de
                premio, RE para Estorno ou recibo de estorno, CS para Imputacao a co-seguradoras, LD
                para Imputacao a co-seguradora lider, RA para Resseguro aceite. (a) Para os dados
                ate 2012-12-31 </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="FT"/>
                <xs:enumeration value="FS"/>
                <xs:enumeration value="FR"/>
                <xs:enumeration value="ND"/>
                <xs:enumeration value="NC"/>
                <xs:enumeration value="VD"/>
                <xs:enumeration value="TV"/>
                <xs:enumeration value="TD"/>
                <xs:enumeration value="AA"/>
                <xs:enumeration value="DA"/>
                <!-- Para o sector segurador-->
                <xs:enumeration value="RP"/>
                <xs:enumeration value="RE"/>
                <xs:enumeration value="CS"/>
                <xs:enumeration value="LD"/>
                <xs:enumeration value="RA"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Estado do documento MovementOfGoods -->
    <xs:element name="MovementStatus">
        <xs:annotation>
            <xs:documentation>N para Normal, T para Por conta de terceiros, A para Documento
                anulado, F para Documento faturado, quando para este documento tambem existe na
                tabela 4.1. para Documentos comerciais a clientes (SalesInvoices) o correspondente
                do tipo fatura ou fatura simplificada, R para Documento de resumo doutros documentos
                criados noutras aplicacoes e gerado nesta aplicacao </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="N"/>
                <xs:enumeration value="T"/>
                <xs:enumeration value="A"/>
                <xs:enumeration value="F"/>
                <xs:enumeration value="R"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Tipo de documento de movimentacao de mercadorias-->
    <xs:element name="MovementType">
        <xs:annotation>
            <xs:documentation> Restricao: Tipos de Documento (GR para Guia de remessa, GT para Guia
                de transporte incluindo as globais, GA para Guia de movimentacao de ativos fixos
                proprios, GC para Guia de consignacao, GD para Guia ou nota de devolucao
            </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="GR"/>
                <xs:enumeration value="GT"/>
                <xs:enumeration value="GA"/>
                <xs:enumeration value="GC"/>
                <xs:enumeration value="GD"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Meio de pagamento-->
    <xs:element name="PaymentMechanism">
        <xs:annotation>
            <xs:documentation> Restricao:CC para Cartao credito, CD para Cartao debito, CH para
                Cheque bancario, CI para credito documentario internacional, CO para Cheque ou
                cartao oferta, CS para Compensacao de saldos em conta corrente, DE para Dinheiro
                eletronico, por exemplo em cartoes de fidelidade ou de pontos, LC para Letra
                comercial, MB para Referencias de pagamento para Multibanco, NU para Numerario, OU
                para Outros meios aqui nao assinalados, PR para Permuta de bens, TB para
                Transferencia bancaria ou debito direto autorizado, TR para titulos de compensacao
                extrassalarial independentemente do seu suporte, por exemplo, titulos de refeicao,
                educacao, etc. </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="CC"/>
                <xs:enumeration value="CD"/>
                <xs:enumeration value="CH"/>
                <xs:enumeration value="CI"/>
                <xs:enumeration value="CO"/>
                <xs:enumeration value="CS"/>
                <xs:enumeration value="DE"/>
                <xs:enumeration value="LC"/>
                <xs:enumeration value="MB"/>
                <xs:enumeration value="NU"/>
                <xs:enumeration value="OU"/>
                <xs:enumeration value="PR"/>
                <xs:enumeration value="TB"/>
                <xs:enumeration value="TR"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Codigo unico do documento de venda -->
    <xs:element name="PaymentRefNo">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern value="[^ ]+ [^/^ ]+/[0-9]+"/>
                <xs:minLength value="1"/>
                <xs:maxLength value="60"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Estado do documento Payments -->
    <xs:element name="PaymentStatus">
        <xs:annotation>
            <xs:documentation>N para normal, A para Anulado </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="N"/>
                <xs:enumeration value="A"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Periodo contabilistico do documento -->
    <xs:element name="Period">
        <xs:simpleType>
            <xs:restriction base="xs:integer">
                <xs:minInclusive value="1"/>
                <xs:maxInclusive value="12"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Tipos de produto -->
    <xs:element name="ProductType">
        <xs:annotation>
            <xs:documentation>Restricao: P para Produtos, S para Servicos, O para Outros (Ex: portes
                debitados, adiantamentos recebidos ou alienacao de ativos), E para Impostos
                Especiais de Consumo (ex.:IABA, ISP, IT); I para impostos, taxas e encargos
                parafiscais exceto IVA e IS que deverao ser refletidos na tabela 2.5 Tabela de
                impostos (TaxTable)e Impostos Especiais de Consumo </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="P"/>
                <xs:enumeration value="S"/>
                <xs:enumeration value="O"/>
                <xs:enumeration value="E"/>
                <xs:enumeration value="I"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Indicador de Autofaturacao -->
    <xs:element name="SelfBillingIndicator">
        <xs:simpleType>
            <xs:restriction base="xs:integer">
                <xs:minInclusive value="0"/>
                <xs:maxInclusive value="1"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Tipo de sistema que exportou o SAFT -->
    <xs:element name="TaxAccountingBasis">
        <xs:annotation>
            <xs:documentation>C para Contabilidade, E para Faturacao emitida por terceiros, F para
                Faturacao, I para Contabilidade integrada com a faturacao, P para Faturacao parcial,
                R para Recibos (a), S para Autofaturacao, T para Documentos de transporte (a). (a)
                Deve ser indicado este tipo, se o programa apenas este emitir este tipo de
                documento. Caso contrario, devera ser utilizado o tipo C, F ou I </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="C"/>
                <xs:enumeration value="E"/>
                <xs:enumeration value="F"/>
                <xs:enumeration value="I"/>
                <xs:enumeration value="P"/>
                <xs:enumeration value="R"/>
                <xs:enumeration value="S"/>
                <xs:enumeration value="T"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Codigo de de Imposto -->
    <xs:element name="TaxCode">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:minLength value="1"/>
                <xs:maxLength value="10"/>
                <xs:pattern value="RED|INT|NOR|ISE|OUT|([a-zA-Z0-9\.])*|NS"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Pais ou regiao de Imposto -->
    <xs:element name="TaxCountryRegion">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:pattern
                    value="AD|AE|AF|AG|AI|AL|AM|AO|AQ|AR|AS|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BJ|BL|BM|BN|BO|BQ|BR|BS|BT|BV|BW|BY|BZ|CA|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|CR|CU|CV|CW|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EE|EG|EH|ER|ES|ET|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|IO|IQ|IR|IS|IT|JE|JM|JO|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MF|MG|MH|MK|ML|MM|MN|MO|MP|MQ|MR|MS|MT|MU|MV|MW|MX|MY|MZ|NA|NC|NE|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|SS|ST|SV|SX|SY|SZ|TC|TD|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TR|TT|TV|TW|TZ|UA|UG|UM|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XK|YE|YT|ZA|ZM|ZW|PT-AC|PT-MA"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Categoria da conta -->
    <xs:element name="TaxonomyReference">
        <xs:annotation>
            <xs:documentation>S para SNC base (Taxonomia S), M para SNC microentidades (Taxonomia
                M), N para Normas Internacionais de Contabilidade (Taxonomia S), O para outros
                referenciais contabilisticos cuja taxonomia nao se encontra
                codificada</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="S"/>
                <xs:enumeration value="M"/>
                <xs:enumeration value="N"/>
                <xs:enumeration value="O"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Tipo de Imposto -->
    <xs:element name="TaxType">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="IVA"/>
                <xs:enumeration value="IS"/>
                <xs:enumeration value="NS"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Indicador de faturacao emitida em nome e por conta de terceiros -->
    <xs:element name="ThirdPartiesBillingIndicator">
        <xs:simpleType>
            <xs:restriction base="xs:integer">
                <xs:minInclusive value="0"/>
                <xs:maxInclusive value="1"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Tipos de Movimento Contabilistico -->
    <xs:element name="TransactionType">
        <xs:annotation>
            <xs:documentation>Restricao: N para Normal, R para Regularizacoes do periodo de
                tributacao, A para Apuramento de resultados, J para Movimentos de ajustamento
            </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="N"/>
                <xs:enumeration value="R"/>
                <xs:enumeration value="A"/>
                <xs:enumeration value="J"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Codigo do tipo de imposto retido -->
    <xs:element name="WithholdingTaxType">
        <xs:annotation>
            <xs:documentation>Restricao: IRS para Imposto Sobre o Rendimento das Pessoas Singulares,
                IRC para Imposto Sobre o Rendimento das Pessoas colectivas, IS para Imposto do selo
            </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="IRS"/>
                <xs:enumeration value="IRC"/>
                <xs:enumeration value="IS"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Estado do documento WorkingDocuments -->
    <xs:element name="WorkStatus">
        <xs:annotation>
            <xs:documentation>N para Normal, A para Anulado, F para faturado (quando para este
                documento tambem existe na tabela 4.1. o correspondente do tipo fatura ou fatura
                simplificada) </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="N"/>
                <xs:enumeration value="A"/>
                <xs:enumeration value="F"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- Tipo de documento suscetivel de apresentacao ao cliente para conferencia de mercadorias ou de prestacao de servicos e fatura de consignacao nos termos do art. 38. do codigo do IVA -->
    <xs:element name="WorkType">
        <xs:annotation>
            <xs:documentation> Restricao: DC para documentos emitidos ate 2017-06-30, CM para
                consulta de mesa, CC para credito de consignacao, FC para fatura de consignacao nos
                termos do art.38 do CIVA, FO para folha de obra, NE para nota de encomenda, OU para
                outros documentos suscetiveis de apresentacao ao cliente para conferencia de
                mercadorias ou de prestacao de servicos que nao se encontrem aqui devidamente
                identificados (ou seus equivalentes), OR para orcamento, PF para fatura pro-forma.
                Para o setor Segurador quando para os tipos de documentos a seguir identificados
                tambem deva existir na tabela 4.1 - Documentos comerciais a clientes (SalesInvoices)
                a correspondente fatura ou documento rectificativo de fatura, ainda pode ser
                preenchido com RP para premio ou recibo de premio, RE para estorno ou recibo de
                estorno, CS para imputacao a co-seguradoras, LD para imputacao a co-seguradora
                lider, RA para resseguro aceite. </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value="CM"/>
                <xs:enumeration value="CC"/>
                <xs:enumeration value="FC"/>
                <xs:enumeration value="FO"/>
                <xs:enumeration value="NE"/>
                <xs:enumeration value="OU"/>
                <xs:enumeration value="OR"/>
                <xs:enumeration value="PF"/>
                <!-- Para para dados ate 2017-06-30-->
                <xs:enumeration value="DC"/>
                <!-- Para o sector segurador-->
                <xs:enumeration value="RP"/>
                <xs:enumeration value="RE"/>
                <xs:enumeration value="CS"/>
                <xs:enumeration value="LD"/>
                <xs:enumeration value="RA"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <!-- TIPOS DE DADOS BASE SAFT OCDE-->
    <xs:simpleType name="SAFdateTimeType">
        <xs:restriction base="xs:dateTime"/>
    </xs:simpleType>
    <xs:simpleType name="SAFdateType">
        <xs:restriction base="xs:date"/>
    </xs:simpleType>
    <xs:simpleType name="SAFdecimalType">
        <xs:restriction base="xs:decimal">
            <xs:minInclusive value="0.00"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFmonetaryType">
        <xs:restriction base="xs:decimal">
            <xs:minInclusive value="0.00"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- TIPOS DE DADOS BASE SAFT Portugal -->
    <!-- Codigo do pais (ISO 3166 1-alpha-2) do cliente -->
    <xs:simpleType name="CustomerCountry">
        <xs:restriction base="xs:string">
            <xs:pattern
                value="AD|AE|AF|AG|AI|AL|AM|AO|AQ|AR|AS|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BJ|BL|BM|BN|BO|BQ|BR|BS|BT|BV|BW|BY|BZ|CA|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|CR|CU|CV|CW|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EE|EG|EH|ER|ES|ET|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|IO|IQ|IR|IS|IT|JE|JM|JO|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MF|MG|MH|MK|ML|MM|MN|MO|MP|MQ|MR|MS|MT|MU|MV|MW|MX|MY|MZ|NA|NC|NE|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|SS|ST|SV|SX|SY|SZ|TC|TD|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TR|TT|TV|TW|TZ|UA|UG|UM|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XK|YE|YT|ZA|ZM|ZW|Desconhecido"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Codigo de moeda usada no SAFT-->
    <xs:simpleType name="CurrencyPT">
        <xs:restriction base="xs:string">
            <xs:enumeration value="EUR"/>
        </xs:restriction>
    </xs:simpleType> 
    <!-- Codigo de de Imposto de pagamento-->
    <xs:simpleType name="PaymentTaxCode">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="10"/>
            <xs:pattern value="RED|INT|NOR|ISE|OUT|([a-zA-Z0-9\.])*|NA"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Periodo do movimento contabilistico -->
    <xs:simpleType name="SAFPTAccountingPeriod">
        <xs:restriction base="xs:integer">
            <xs:minInclusive value="1"/>
            <xs:maxInclusive value="16"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Codigo de Nomenclatura Combinada  -->
    <xs:simpleType name="SAFPTCNCode">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-9]{8}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTDateSpan">
        <xs:restriction base="xs:date">
            <xs:minInclusive value="2000-01-01"/>
            <xs:maxInclusive value="9999-12-31"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFTPTDocArchivalNumber">
        <xs:restriction base="xs:string">
            <xs:pattern value="[^ ]{1,20}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTGLAccountID">
        <xs:restriction base="xs:string">
            <xs:pattern value="([^^]*)"/>
            <xs:minLength value="2"/>
            <xs:maxLength value="30"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTHashControl">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-9]+|[0-9]+[\.][0-9]+|[0-9]+-[A-Z]{2}(M )([^/^ ]+[/][0-9]+)|[0-9]+-[A-Z]{2}(D )([^ ]+ [^/^ ]+[/][0-9]+)"/>
            <xs:minLength value="1"/>
            <xs:maxLength value="70"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTJournalID">
        <xs:restriction base="xs:string">
            <xs:pattern value="[^ ]{1,30}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFTPTMovementTaxCode">
        <xs:restriction base="xs:string">
            <xs:pattern value="RED|INT|NOR|ISE|OUT|NS"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Tipo de Imposto da Tabela MovementOfGoods-->
    <xs:simpleType name="SAFTPTMovementTaxType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="IVA"/>
            <xs:enumeration value="NS"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFTPTPaymentType">
        <xs:annotation>
            <xs:documentation> Restricao: RC para Recibo emitido no ambito do regime de IVA de Caixa
                (incluindo os relativos a adiantamentos desse regime), RG para Outros recibos
                emitidos </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:enumeration value="RC"/>
            <xs:enumeration value="RG"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Codigo do motivo de isencao de imposto -->
    <xs:simpleType name="SAFPTPortugueseTaxExemptionCode">
        <xs:restriction base="xs:string">
            <xs:pattern value="(M[0-9]{2})+"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Motivo de isencao de imposto -->
    <xs:simpleType name="SAFPTPortugueseTaxExemptionReason">
        <xs:restriction base="xs:string">
            <xs:minLength value="6"/>
            <xs:maxLength value="60"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTPortugueseVatNumber">
        <xs:restriction base="xs:integer">
            <xs:minInclusive value="100000000"/>
            <xs:maxInclusive value="999999999"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Descrição do produto ou servico -->
    <xs:simpleType name="SAFPTProductDescription">
        <xs:annotation/>
        <xs:restriction base="xs:string">
            <xs:minLength value="2"/>
            <xs:maxLength value="200"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTProductID">
        <xs:restriction base="xs:string">
            <xs:pattern value="[^/]+/[^/]+"/>
            <xs:minLength value="3"/>
            <xs:maxLength value="255"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Origem do documento -->
    <xs:simpleType name="SAFTPTSourceBilling">
        <xs:annotation>
            <xs:documentation>P para documento produzido na aplicacao, I para documento integrado e
                produzido noutra aplicacao, M para documento proveniente de recuperacao ou de
                emissao manual </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:enumeration value="P"/>
            <xs:enumeration value="I"/>
            <xs:enumeration value="M"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Origem do documento -->
    <xs:simpleType name="SAFTPTSourcePayment">
        <xs:annotation>
            <xs:documentation>P para documento produzido na aplicacao, I para documento integrado e
                produzido noutra aplicacao, M para documento proveniente de recuperacao ou de
                emissao manual </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:enumeration value="P"/>
            <xs:enumeration value="I"/>
            <xs:enumeration value="M"/>
        </xs:restriction>
    </xs:simpleType>
    <!--Codigo de classificacao da conta-->
    <xs:simpleType name="SAFPTTaxonomyCode">
        <xs:restriction base="xs:integer">
            <xs:minInclusive value="1"/>
            <xs:maxInclusive value="999"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax10Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="10"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax20Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="20"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax21Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="21"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax30Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="30"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax35Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="35"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax50Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="50"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax60Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="60"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax70Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="70"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax90Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="90"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax100Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="100"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax172Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="172"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax200Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="200"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax210Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="210"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax255Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="255"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTtextTypeMandatoryMax254Car">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="254"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SAFPTTransactionID">
        <xs:restriction base="xs:string">
            <xs:pattern value="[1-9][0-9]{3}-[01][0-9]-[0-3][0-9] [^ ]{1,30} [^ ]{1,20}"/>
            <xs:minLength value="1"/>
            <xs:maxLength value="70"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Numero ONU para substancias perigosas -->
    <xs:simpleType name="SAFPTUNNumber">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-9]{4}"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Tipo de Imposto da tabela de impostos-->
    <xs:simpleType name="TaxTableEntryTaxCode">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="10"/>
            <xs:pattern value="RED|INT|NOR|ISE|OUT|([a-zA-Z0-9\.])*|NS|NA"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
