Jump to content
pv2013

SAFT-PT: debate de dúvidas e ideias

Recommended Posts

nunopicado
4 horas atrás, blacksnake disse:

Olá pessoal,

E quem não controlar números de série??

Não muda nada... Os números de série não são campos obrigatórios.
;)

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
bugFree

Boas,

Alguém já fez um comparativo com as alterações e novidades da nova versão em relação à actual?

 


What's better: Coding solo or as part of a team?

A team means you have to fix someone else's bugs. Coding solo means you have to write all the bugs yourself.

Share this post


Link to post
Share on other sites
chesser

bugFree, isso foi debatido no início de Dezembro, neste forum. É só ir à página anterior (200) que encontras lá mais informações. Em especial há um comparativo muito bem estruturado, feito pelo antseq.

Edited by chesser

Share this post


Link to post
Share on other sites
marcolopes
23 hours ago, nunopicado said:

Já está disponível o XSD da versão 1.04 do SAF-T

http://info.portaldasfinancas.gov.pt/apps/saft-pt04/SAFTPT1.04_01.xsd

Validador é que ainda não há, mas havendo o xsd já não é grave. ;)

Estou com ERROS no XSD disponível no site... para além do código XSD conter diversos ASSERT que não deveriam estar lá e geram erro (asserts são usados em desenvolvimento para testar determinadas condições no código) tenho um erro grave:

Multiple annotations found at this line:
    - cos-all-limited.2: The {max occurs} of an element in an 'all' model group must be 0 or 1. The value '-1' for 
     element 'DebitLine' is invalid.
    - cos-all-limited.2: The {max occurs} of an element in an 'all' model group must be 0 or 1. The value '-1' for 
     element 'CreditLine' is invalid.
    - Start tag of element <xs:all>

que acontece no seguinte bloco:

    <!-- 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>

Alguém com o mesmo problema?

Os ASSERT removem-se, mas não quero andar eu a resolver outros erros de código que são da responsabilidade da AT...

Edited by marcolopes

The simplest explanation is usually the correct one

JAVA Utilities: https://github.com/marcolopes/dma

Share this post


Link to post
Share on other sites
nunopicado

No caso do Delphi, só se queixou ao importar do encoding do ficheiro de texto do XSD, que é diferente por exemplo do XSD do 1.03.
Convertendo para Latin1, o Delphi fez-lhe o parse e gerou todos os objectos necessários.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
marcolopes
Just now, nunopicado said:

No caso do Delphi, só se queixou ao importar do encoding do ficheiro de texto do XSD, que é diferente por exemplo do XSD do 1.03.
Convertendo para Latin1, o Delphi fez-lhe o parse e gerou todos os objectos necessários.

Não é uma questão de encoding... é mesmo uma questão do EDITOR XSD do Eclipse se queixar de erros de sintaxe! (isto para além da ferramenta que compila o XSD em código nativo JAVA)

Entretanto segue email para a AT...


The simplest explanation is usually the correct one

JAVA Utilities: https://github.com/marcolopes/dma

Share this post


Link to post
Share on other sites
nunopicado

Como te disse, no caso do Delphi só se queixou do encoding.

E isso é que é estranho... Porquê que em Delphi cria as classes e no Java dá erro?

Eu sei que é difícil, mas... Mais alguém usa Java neste tópico que possa testar? :D:D 

Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
marcolopes
1 hour ago, nunopicado said:

Como te disse, no caso do Delphi só se queixou do encoding.

E isso é que é estranho... Porquê que em Delphi cria as classes e no Java dá erro?

Eu sei que é difícil, mas... Mais alguém usa Java neste tópico que possa testar? :D:D 

Porque o Delphi é demasiado permissivo? Não controla a validação a 100%? Tem falhas? Who knows!! Não vamos misturar as coisas... estamos aqui perante um problema de XSD Schema... não de java! Que o delphi pape tudo, é uma coisa (repercussões, não sei), agora, que este XSD está mal definido, está!

Para além de todos os IDE Eclipse que uso darem erro (até as versões mais recentes) temos os validadores XSD por esse mundo fora que também dão erro!

http://www.utilities-online.info/xsdvalidation/ (ZERO erros com o Schema do SAFT 1.03)

http://schneegans.de/sv/Default.aspx

XML Schema Validator

Location:	
Redirect:	
Well-formed:	Yes
Valid:	No
HTTP status code:	
HTTP Content Type:	
HTTP encoding:	
XML encoding:	Windows-1252
Used encoding:	
Public Identifier:	
System Identifier:	
Validated as:	XML Schema
Could not find schema information for the attribute 'http://www.w3.org/2007/XMLSchema-versioning:minVersion'. (2:394)
<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">
                                                                                                                                                                                                                                                                                                                                                                                                         ^
Could not find schema information for the element 'urn:schemas-basda-org:schema-extensions:documentation:Title'. (5:8)
      <doc:Title>Standard Audit File - Portuguese Version</doc:Title>
       ^
Could not find schema information for the element 'urn:schemas-basda-org:schema-extensions:documentation:Subject'. (6:8)
      <doc:Subject>Standard Audit File - Portuguese Version</doc:Subject>
       ^
Could not find schema information for the element 'urn:schemas-basda-org:schema-extensions:documentation:Copyright'. (7:8)
      <doc:Copyright>Copyright OECD</doc:Copyright>
       ^
Could not find schema information for the element 'urn:schemas-basda-org:schema-extensions:documentation:Version'. (8:8)
      <doc:Version>
       ^
Could not find schema information for the element 'urn:schemas-basda-org:schema-extensions:documentation:Number'. (9:10)
        <doc:Number>1.04_01</doc:Number>
         ^
Could not find schema information for the element 'urn:schemas-basda-org:schema-extensions:documentation:Status'. (10:10)
        <doc:Status>Production</doc:Status>
         ^
Could not find schema information for the element 'urn:schemas-basda-org:schema-extensions:documentation:Author'. (12:8)
      <doc:Author>Autoridade Tributaria e Aduaneira</doc:Author>
       ^
Could not find schema information for the element 'urn:schemas-basda-org:schema-extensions:documentation:ModificationDate'. (13:8)
      <doc:ModificationDate>2016-10-07</doc:ModificationDate>
       ^
The element 'complexType' in namespace 'http://www.w3.org/2001/XMLSchema' has invalid child element 'assert' in namespace 'http://www.w3.org/2001/XMLSchema'. List of possible elements expected: 'attribute, attributeGroup, anyAttribute' in namespace 'http://www.w3.org/2001/XMLSchema'. (174:26)
                        <xs:assert test="if ( (ns:GroupingCategory != 'GM' and not(ns:TaxonomyCode) ) or (ns:GroupingCategory eq 'GM' and ns:TaxonomyCode &gt;= 0) ) then &#xA;              true() else false()" />
                         ^
The 'maxOccurs' attribute is invalid. The value 'unbounded' is invalid according to its datatype 'Union'. The Enumeration constraint failed. (285:82)
                                                    <xs:element name="DebitLine" maxOccurs="unbounded">
                                                                                 ^
The 'maxOccurs' attribute is invalid. The value 'unbounded' is invalid according to its datatype 'Union'. The Enumeration constraint failed. (297:83)
                                                    <xs:element name="CreditLine" maxOccurs="unbounded">
                                                                                  ^
The element 'complexType' in namespace 'http://www.w3.org/2001/XMLSchema' has invalid child element 'assert' in namespace 'http://www.w3.org/2001/XMLSchema'. List of possible elements expected: 'attribute, attributeGroup, anyAttribute' in namespace 'http://www.w3.org/2001/XMLSchema'. (388:50)
                                                <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()" />
                                                 ^
The element 'complexType' in namespace 'http://www.w3.org/2001/XMLSchema' has invalid child element 'assert' in namespace 'http://www.w3.org/2001/XMLSchema'. List of possible elements expected: 'attribute, attributeGroup, anyAttribute' in namespace 'http://www.w3.org/2001/XMLSchema'. (479:50)
                                                <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()" />
                                                 ^
The element 'complexType' in namespace 'http://www.w3.org/2001/XMLSchema' has invalid child element 'assert' in namespace 'http://www.w3.org/2001/XMLSchema'. List of possible elements expected: 'attribute, attributeGroup, anyAttribute' in namespace 'http://www.w3.org/2001/XMLSchema'. (555:50)
                                                <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()" />
                                                 ^
The element 'complexType' in namespace 'http://www.w3.org/2001/XMLSchema' has invalid child element 'assert' in namespace 'http://www.w3.org/2001/XMLSchema'. List of possible elements expected: 'attribute, attributeGroup, anyAttribute' in namespace 'http://www.w3.org/2001/XMLSchema'. (632:50)
                                                <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()" />
                                                 ^
The element 'complexType' in namespace 'http://www.w3.org/2001/XMLSchema' has invalid child element 'assert' in namespace 'http://www.w3.org/2001/XMLSchema'. List of possible elements expected: 'attribute, attributeGroup, anyAttribute' in namespace 'http://www.w3.org/2001/XMLSchema'. (657:38)
                                    <xs:assert test="if ( (ns:Tax/ns:TaxType and ns:PaymentType eq 'RC') or (ns:PaymentType eq 'RG')) then true() else false()" />
                                     ^

Volto a dizer que os ASSERT são fáceis de remover, mas o outro erro não é da minha responsabilidade resolver... (nem sei se ficaria como a AT quer)

Edited by marcolopes

The simplest explanation is usually the correct one

JAVA Utilities: https://github.com/marcolopes/dma

Share this post


Link to post
Share on other sites
nunopicado

Pelo que vejo, todos os erros que notas são relativos aos assert e a detalhes de namespaces.
Nada que afecte efectivamente o resultado final.

Talvez por isso o Delphi não lhe passe cartão. Ligou mais à diferença entre o encoding do ficheiro e o encoding estipulado pelo XSD.

Anyway, cheira-me que vai sair outra versão do XSD entretanto.

Se não houver, @marcolopes, podes sempre construir o XML à mão, com strings! :P
Sei que adoras essa técnica! :D


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
marcolopes
12 minutes ago, nunopicado said:

Pelo que vejo, todos os erros que notas são relativos aos assert e a detalhes de namespaces.
Nada que afecte efectivamente o resultado final.

Talvez por isso o Delphi não lhe passe cartão. Ligou mais à diferença entre o encoding do ficheiro e o encoding estipulado pelo XSD.

Anyway, cheira-me que vai sair outra versão do XSD entretanto.

Se não houver, @marcolopes, podes sempre construir o XML à mão, com strings! :P
Sei que adoras essa técnica! :D

Não Nuno... já o tinha dito no primeiro post... existem 2 problemas importantes que requerem que o XSD seja rectificado! O teu editor deveria dar erro nestes casos... algo de errado se passa com o editor do "delphi".

The 'maxOccurs' attribute is invalid. The value 'unbounded' is invalid according to its datatype 'Union'. The Enumeration constraint failed. (285:82)
                                                    <xs:element name="DebitLine" maxOccurs="unbounded">
                                                                                 ^
The 'maxOccurs' attribute is invalid. The value 'unbounded' is invalid according to its datatype 'Union'. The Enumeration constraint failed. (297:83)
                                                    <xs:element name="CreditLine" maxOccurs="unbounded">
                                                                                  ^

A AT já foi informada... pelo que é uma questão do email chegar a quem de direito. Uma versão corrigida terá de sair, porque aqui não há qualquer tipo de dúvidas: o XSD TEM erros!

Edited by marcolopes

The simplest explanation is usually the correct one

JAVA Utilities: https://github.com/marcolopes/dma

Share this post


Link to post
Share on other sites
nunopicado

MaxOccurs = "unbounded" só lhe está a dizer que não há limite máximo para a repetição de valores de DebitLine e CreditLine.

A construção de classes automática não precisa passar por aí.

De qualquer forma, é um erro, que deve ser corrigido.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
nunopicado

Estava a ler sobre o XMLBeans:

Aparentemente, maxOccurs="unbounded" é uma atribuição válida em enumeradores.

 

Citação

Enumerations

In schema, you can derive a new type by restricting a built-in type so that only a finite set of values are allowable. Where schema does this by restricting xs:string, XMLBeans generates a special Enum type. With an Enum, you can select the enumerated value either by its String value or by a numeric index. The index's value is determined based on the String value's order in the schema. Having an index can be useful in Java switch statements.

For example, suppose you had a document containing price elements whose type was the priceType defined in the following schema snippet:


<xs:complexType name="priceType"> 
  <xs:sequence> 
    <xs:element name="item" type="ps:itemType" minOccurs="0" maxOccurs="unbounded"/> 
  </xs:sequence> 
  <xs:attribute name="threshold"> 
    <xs:simpleType> 
      <xs:restriction base="xs:string"> 
        <xs:enumeration value="Below10Dollars"/> 
        <xs:enumeration value="Between10And20Dollars"/> 
        <xs:enumeration value="Above20Dollars"/> 
      </xs:restriction> 
    </xs:simpleType> 
  </xs:attribute> 
</xs:complexType>

 

 

No entanto, o tipo Union não é um enumerador...

Citação

Unions

In schema, you can use xs:union to specify a simple type that is allowed to contain values of a number of other simple types. XMLBeans generates a type for a union, just as it generates a type for any other schema type. At run time, you can discover the underlying type of an instance of a union type by calling the XmlObject interface's instanceType method. Once you have determined the type, you can cast an instance of a union type to the actual underlying instance type.


<xs:simpleType name="intOrString"> 
  <xs:union memberTypes="xs:int xs:string"> 
</xs:simpleType>

Given the preceding schema snippet, you could set the intOrString value to, say, 6 or "six". The union of xs:int and xs:string makes both allowable.

// Create a new instance of the type. IntOrString intOrString = IntOrString.Factory.newInstance(); intOrString.set("5"); // This code prints "XmlInt" to the console. System.out.println(intOrString.instanceType().getShortJavaName());

 

Ou seja... something's fishy around here, and it' ain't the fish!

Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
chesser

No Visual Studio também tenho os mesmos erros apontados pelo Marco Lopes. Vamos ver se os srs da AT lançam uma nova versão...

  • Vote 1

Share this post


Link to post
Share on other sites
marcolopes
7 hours ago, nunopicado said:

Estava a ler sobre o XMLBeans:

Aparentemente, maxOccurs="unbounded" é uma atribuição válida em enumeradores.

Não tem a ver com o XMLBeans... tem a haver com a sintaxe permitida pelo XSD, e neste caso quem "manda" são estes "senhores": https://www.w3.org/XML/Schema

O XMLBeans é uma ferramenta que uso para compilar o código XSD em código nativo... tal como uso o EDITOR XSD do Eclipse para editar os XSD. São ferramentas diferentes, e nenhuma delas aceita o XSD como sendo válido, e aponta os mesmos erros. Os validadores online que consultei também apontam os mesmos erros.

Portanto, quem está "mal" aqui é o editor do Delphi, que "papa" XSD não conformes com as especificações :\


The simplest explanation is usually the correct one

JAVA Utilities: https://github.com/marcolopes/dma

Share this post


Link to post
Share on other sites
nunopicado

Eu já concordei contigo lá atrás :P
O XSD está errado.

Aquele valor é válido, mas não para o tipo de dados que está lá.

O XML Data Binding do Delphi só cria classes, não valida os valores dos campos, pelo que estes atributos passam-lhe ao lado.
Possivelmente o XMLBeans cria as classes com código capaz de validar os inputs, certo? Provavelmente por isso é que falha ao ler este XSD errado.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
marcolopes
Just now, nunopicado said:

Eu já concordei contigo lá atrás :P
O XSD está errado.

Aquele valor é válido, mas não para o tipo de dados que está lá.

O XML Data Binding do Delphi só cria classes, não valida os valores dos campos, pelo que estes atributos passam-lhe ao lado.
Possivelmente o XMLBeans cria as classes com código capaz de validar os inputs, certo? Provavelmente por isso é que falha ao ler este XSD errado.

O XMLBeans deve validar primeiramente o XSD (até podem existir parâmetros para fazer bypass das validações - é algo que ainda vou ler - mas não me interessa muito fazê-lo!).

O editor do ECLIPSE dá este erro, como já tinha dito:

Multiple annotations found at this line:
	- cos-all-limited.2: The {max occurs} of an element in an 'all' model group must be 0 or 1. The value '-1' for 
	 element 'DebitLine' is invalid.
	- cos-all-limited.2: The {max occurs} of an element in an 'all' model group must be 0 or 1. The value '-1' for 
	 element 'CreditLine' is invalid.

Portanto o erro é relativo a um "max occurs" dentro de um ALL model group!


The simplest explanation is usually the correct one

JAVA Utilities: https://github.com/marcolopes/dma

Share this post


Link to post
Share on other sites
chesser

Bem observado CFreitas.

A versão 1.1 está tão divulgada que andei à procura de um validador online e ainda não encontrei. Se alguém conhecer algum, por favor partilhe o link.

No meu caso, como uso .net (e como, pelos vistos, a Microsoft não aparenta ter vontade de implementar a versão 1.1) , tenho um pressentimento que vou ter algumas dificuldades... a não ser que faça o downgrade (manual) para a versão 1.0.

Tenho de pesquisar mais sobre isto.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.