-
Se ainda não tens... instala o python https://www.python.org/downloads/
-
depois fazes download do ficheiro validar.py
-
e também do saftpt1.04_01.xsd
-
mete ambos numa pasta
-
para ser mais simples arrasta o ficheiro do saft para cima do validar.py
-
o processo de validação vai iniciar, caso haja algum erro aparece o motivo do erro e o valor com erro!
Last active
January 27, 2023 12:11
-
-
Save antoniocampos/e38082f6d916c915449c08f772215d03 to your computer and use it in GitHub Desktop.
Python validar SAF-T_PT 1.04_01
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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>2016-10-07</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" fixed="EUR"/> | |
<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="SAFTaxonomyCode" 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 ref="BillingAddress"/> | |
<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="SupplierAddressStructure"/> | |
<xs:element name="ShipFromAddress" type="SupplierAddressStructure" 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 para Portugal--> | |
<xs:complexType name="AddressStructurePT"> | |
<xs:sequence> | |
<xs:element ref="BuildingNumber" minOccurs="0"/> | |
<xs:element ref="StreetName" minOccurs="0"/> | |
<xs:element ref="AddressDetail"/> | |
<xs:element ref="City"/> | |
<xs:element name="PostalCode" type="PostalCodePT"/> | |
<xs:element ref="Region" minOccurs="0"/> | |
<xs:element name="Country" fixed="PT"/> | |
</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 Moradas para Fornecedores--> | |
<xs:complexType name="SupplierAddressStructure"> | |
<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="SupplierCountry"/> | |
</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="AddressStructure"/> | |
<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="AddressStructurePT"/> | |
<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="AddressStructure"/> | |
<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> | |
<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|Desconhecido"/> | |
<xs:minLength value="2"/> | |
</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|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|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:length value="3"/> | |
</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:minLength value="2"/> | |
<xs:maxLength value="5"/> | |
</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> | |
<!--Codigo de classificacao da conta--> | |
<xs:simpleType name="SAFTaxonomyCode"> | |
<xs:restriction base="xs:integer"> | |
<xs:minInclusive value="1"/> | |
<xs:maxInclusive value="999"/> | |
</xs:restriction> | |
</xs:simpleType> | |
<!-- TIPOS DE DADOS BASE SAFT Portugal --> | |
<!-- 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> | |
<!-- Codigo Postal Portugues --> | |
<xs:simpleType name="PostalCodePT"> | |
<xs:restriction base="xs:string"> | |
<xs:pattern value="([0-9]{4}-[0-9]{3})"/> | |
</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:length value="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:minLength value="1"/> | |
<xs:maxLength value="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:pattern> | |
<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:minLength value="1"/> | |
<xs:maxLength value="30"/> | |
</xs:restriction> | |
</xs:simpleType> | |
<xs:simpleType name="SAFTPTMovementTaxCode"> | |
<xs:restriction base="xs:string"> | |
<xs:pattern value="RED|INT|NOR|ISE|OUT|NS"/> | |
<xs:minLength value="1"/> | |
<xs:maxLength value="3"/> | |
</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> | |
<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="SAFPTtextTypeMax40Car"> | |
<xs:restriction base="xs:string"> | |
<xs:minLength value="0"/> | |
<xs:maxLength value="40"/> | |
</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:length value="4"/> | |
</xs:restriction> | |
</xs:simpleType> | |
<!-- Codigo do pais (ISO 3166 1-alpha-2) --> | |
<xs:simpleType name="SupplierCountry"> | |
<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:length value="2"/> | |
</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> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import subprocess | |
import sys | |
if len(sys.argv) == 1: | |
print("Utilização: validar.py ficheiroSAFT.xml") | |
sys.exit() | |
# precisas deste package... se não tiveres instalo! | |
# https://pypi.org/project/xmlschema/ | |
try: | |
import xmlschema | |
except ImportError: | |
subprocess.check_call( | |
[sys.executable, "-m", "pip", "install", 'xmlschema']) | |
finally: | |
import xmlschema | |
saft_xml = sys.argv[1] | |
saft_schema = xmlschema.XMLSchema11('saftpt1.04_01.xsd') | |
saft_valido = False | |
try: | |
saft_schema.validate(saft_xml) | |
saft_valido = True | |
except xmlschema.XMLSchemaValidationError as erro: | |
print(erro.message) | |
if saft_valido: | |
print("Ficheiro {0} é válido!".format(saft_xml)) | |
print("Adeus!") | |
print("http://antoniocampos.net") | |
input("clica numa tecla para fechar") | |
sys.exit() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment