Jump to content
pv2013

SAFT-PT: debate de dúvidas e ideias

Recommended Posts

marcolopes
5 hours ago, CFreitas said:

Atenção que a AT, nesta nova versão do SAF-T, passou a utilizar a versão 1.1. do schema XML (xsd `vc:minVersion="1.1"`). até aqui usava a versão 1.0.

A versão 1.1. tem novas funcionalidades, entre elas as ASSERTions.

O grande problema é que, tanto quanto sei, é uma versão que embora já exista há bastante tempo, tem pouco suporte.

O .NET não suporta. O Java acho que já suporta. Podem ainda tentar com o Xerces.

https://www.w3.org/TR/xmlschema11-1/

Bem visto! No entanto nem sequer o JAVA 8 suporta o Schema 1.1: http://stackoverflow.com/questions/20807066/how-to-validate-xml-against-xsd-1-1-in-java

E pelo que posso ler, vai haver muita gente com o mesmo problema. O uso da especificação 1.1 não foi muito feliz por parte da AT :\

Também não é grande drama: removem-se os ASSERT e corta-se o maxOccurs="unbounded"


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
paulo brito

Por um lado o e-faturas usa / obriga java que cada vez menos browsers (então os de 64bits...) suportam / usam.

Por outro vão para estas modernices.....

 

Tá lindo, tá.

Share this post


Link to post
Share on other sites
marcolopes
9 minutes ago, paulo brito said:

Por um lado o e-faturas usa / obriga java que cada vez menos browsers (então os de 64bits...) suportam / usam.

Por outro vão para estas modernices.....

Tá lindo, tá.

Bem, o java faz parte do coração da AT... não estou a ver a AT a implementar um interface WEB sem correr applets java.

A jogada da Google em remover o suporte NPAPI deve ter a ver com questões de segurança, mas não afecta apenas o JAVA! https://www.java.com/en/download/faq/chrome.xml

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

A questão do NPAPI é mesmo nos browsers...
Estou convencido que estas entregas em breve passaram a ser feitas por app offline, em Java puro, como já há algumas.

Também não os vejo a abandonar o Java com tanta coisa já feita.


"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
Em 07/12/2016 às 13:20, migueldealmeida disse:

Não estou a ver em que situação o unitprice fica a 0 e se introduz o novo campo taxbase?

Valor tributável unitário (TaxBase)

Valor tributável unitário que não concorre para o Total do documento sem impostos (NetTotal). Este valor é o que serve de base de cálculo dos impostos da linha.

Alguém já tem ideia de quando e como usar isto?


"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

Mais uma coisa estranha no SAF-T 1.04, neste caso, na parte dos Working Documents:

Citação

4.3.4.14.10. Referências a documentos (References)
Referências a documentos nos documentos retificativos destes.
Existindo a necessidade de efetuar mais do que uma referência, esta estrutura poderá ser gerada tantas vezes quantas as necessárias.

4.3.4.14.10.1. Referência (Reference)
Referência a documento, através de identificação única do mesmo, nos sistemas em que exista. Deve ser utilizada a estrutura de numeração do campo de origem.

4.3.4.14.10.2. Motivo (Reason)
Deve ser preenchido com o motivo da emissão.

Isto é o que diz a portaria...
Até aqui, tudo bem.

No entanto, o XSD tem ideias diferentes sobre isto:

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

 

Chamo a atenção para a seguinte linha:

<xs:element name="OrderReferences" type="OrderReferences" minOccurs="0" maxOccurs="unbounded" />

Ou seja, o tipo que está a ser usado é o OrderReferences, que por sua vez se traduz nisto:
 

<xs:complexType name="OrderReferences">
  <xs:sequence>
    <xs:element ref="OriginatingON" minOccurs="0" />
    <xs:element ref="OrderDate" minOccurs="0" />
  </xs:sequence>
</xs:complexType>

 

Ou seja, os campos OrderReferences, OriginatingON e OrderDate, em vez dos que estão na portaria ReferencesReference e Reason.

Eu estou maluco, ou isto está tudo trocado?

  • 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
americob

Quanto ao TaxBase, se for aquilo que eu penso, acho que é algo que fazia muita falta.

Na minha opinião, serve para fazeres uma Nota de Débito/Nota de Crédito a corrigir uma Fatura em que o único valor alterado é o IVA.

Por exemplo, fazes uma fatura sem IVA porque estaria isento ao abrigo de ...

Mais tarde, verificas que afinal as condições necessárias à isenção não se verificam, tens de Debitar só o IVA porque a Mercadoria já foi debitada na Fatura.

Esta situação é relativamente frequente em situações de Exportação (através de terceiros) em que depois se verifica que a mercadoria não saiu do país (ou não aparecem os documentos comprovativos de tal coisa).

 

Quanto ao References (não confundir com o OrderReferences) nos WorkingDocuments, por analogia com a sua aplicação às Invoices, servem para identificar os documentos retificados (por exemplo, FC - Fatura Consignação) nos documentos retificativos (por exemplo, CC - Crédito de Consignação).

Aparentemente o XSD está mesmo mal feito, esqueceram-se mesmo de acrescentar este campo.

  • Vote 1

Share this post


Link to post
Share on other sites
nunopicado
3 horas atrás, americob disse:

Quanto ao References (não confundir com o OrderReferences) nos WorkingDocuments, por analogia com a sua aplicação às Invoices, servem para identificar os documentos retificados (por exemplo, FC - Fatura Consignação) nos documentos retificativos (por exemplo, CC - Crédito de Consignação).

Aparentemente o XSD está mesmo mal feito, esqueceram-se mesmo de acrescentar este campo.

Esqueceram-se de acrescentar o References, e colocaram o OrderReferences no seu lugar, que não consta na tabela 4.3 da portaria.
Falta agora que corrijam, mas... e quando?

Tirando o TaxBase e isto, tenho o SAF-T pronto.
Vamos ver se quando e se vier a correcção ao XSD, não surgem outras novidades.


"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
americob
2 horas atrás, nunopicado disse:

Esqueceram-se de acrescentar o References, e colocaram o OrderReferences no seu lugar, que não consta na tabela 4.3 da portaria.
Falta agora que corrijam, mas... e quando?

Tirando o TaxBase e isto, tenho o SAF-T pronto.
Vamos ver se quando e se vier a correcção ao XSD, não surgem outras novidades.

Não colocaram o OrderReferences no lugar porque ele está lá bem, não serve é para a mesma coisa, é o 4.3.4.14.2

Fica só a faltar o References que é o 4.3.4.14.10 que deve ter ficado esquecido debaixo da papelada

Share this post


Link to post
Share on other sites
nunopicado
4 horas atrás, americob disse:

Não colocaram o OrderReferences no lugar porque ele está lá bem, não serve é para a mesma coisa, é o 4.3.4.14.2

Fica só a faltar o References que é o 4.3.4.14.10 que deve ter ficado esquecido debaixo da papelada

Tens razão, nem tinha reparado que já tinha metido o OrderReferences em cima! :D

Falta agora o resto.
 

 

3 horas atrás, RSSilva disse:

Olá.

Já foi publicada uma rectificação, "Declaração de Retificação n.º 2-A/2017", https://dre.pt/application/file/a/106398274  , com algumas correcções.

Essa rectificação é da portaria.
Mas ainda vão ter de rectificar o XSD, que está uma caca.
De qualquer forma, já houve alterações no XSD. A questão que notei do encoding errado já está corrigida, mas ainda não há References na 4.3


"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
2 hours ago, albertosilva said:

Deixo o link para uma ferramenta que encontrei para comparar este último XSD da versão 1.04 com o anterior 1.03, que realça as diferenças entre ambos:

https://www.corefiling.com/opensource/xmldiff.html

Sempre sintetiza as novas entradas e entradas modificadas.

O NOTEPAD++ faz tudo isso e muito mais... recomendo! https://notepad-plus-plus.org/


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
albertosilva
16 horas atrás, marcolopes disse:

O NOTEPAD++ faz tudo isso e muito mais... recomendo! https://notepad-plus-plus.org/

Qual o plugin que usaste para comparar os dois XSD? A comparação que o site que referi faz não é uma mera comparação passiva de dois ficheiros, para isso há alternativas melhores ao plugin de comparação do N++, mas sim uma comparação "inteligente", salientando para cada elemento da árvore do XSD o que foi adicionado ou removido.

 

Share this post


Link to post
Share on other sites
nunopicado

Encontrei um validador de XML face a um XSD 1.1.

https://jeszysblog.wordpress.com/2012/09/27/free-and-open-source-xsd-1-1-validation-tool/

O utilitário de linha de comandos permite validar o XML do SAF-T face ao XSD do SAF-T 1.04, assim:

java -jar xsd11-validator.jar -sf schema.xsd -if instance.xml

java -jar xsd11-validator.jar -sf schema.xsd -if instance.xml

Agora já só falta um XSD corrigido para podermos trabalhar em condições! :P

  • 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
virgilio baldaia

Boa tarde,

venho por este meio, pedir a vossa opinião sobre a seguinte ideia:

"A" empresa que vai vender um produto (ou mais)

"B" empresa que vai comprar

a empresa "A" vai lançar um documento "Fatura" a empresa "B"

mas em vez de imprimir ou de enviar por e-mail em formato "PDF",

vai enviar um ficheiro em formato XML, com a estrutura do SAFT-PT,

mas só com esta "Fartura".

Quando a empresa "B" receber este e-mail com o ficheiro anexado,

de seguida ira importar estes dados para a sua base de dados.

 

penso que desta forma se pode evitar muitos erros de lançamento nas compras,

como também acelera o processo todo das compras.

 

Obrigado desde já pelas vossas sugestões.

Share this post


Link to post
Share on other sites
nunopicado

A empresa A está obrigada legalmente a emitir a fatura e entregar ao cliente, seja em papel para a maior parte delas, ou em PDF para as que cumpram os requisitos da Fatura Electrónica. 

Dito isto, nada impede a empresa A de enviar esse SAF-T do documento emitido, desde que a empresa B tenha meio de o importar. 

Quanto à mim, é efectivamente melhor para dar entrada das compras, desde que o software da empresa B tenha forma de mapear os artigos da empresa A para os seus próprios artigos. 


"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

Também o XSD já foi revisto, e adicionaram o campo References que estava em falta na 4.3.4.14.10.

A coisa está-se a compor... :D

  • 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

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.