Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

pv2013

SAFT-PT: debate de dúvidas e ideias

Mensagens Recomendadas

marcolopes    331
marcolopes
2 hours ago, RValverde said:

Boa tarde,

Na anterior portaria o tamanho nas descrições dds artigos podia ter no mínimo 1 caracter, ou seja conseguíamos criar um artigo com a descrição "1"

Com a portaria atual o mínimo de tamanho para a descrição é de 2 caracteres, tendo em conta que tenho artigos movimentados, descrições bloqueadas, como proceder para retificar as descrições dos artigos para que o SAFT seja válido?

Por um lado a AT indica que não posso alterar a descrição de um artigo depois de movimentado, por outro lado com a nova regra indica que tenho artigos com as descrições erradas mas não as consigo corrigir.

A descrição está errada ao nível da tabela de artigos e linhas dos documentos.

Obrigado desde já.

Não é caso único. Existem outras situações contrárias, por exemplo, as aplicações permitiam (passado!) um determinado número de caracteres, e após a legislação do SAFT, o comprimento peca por excesso... Vai tudo dar ao mesmo.

O programador não pode fazer milagres "convertendo" dados, efectuando TRIM ou INSERT de caracateres a campos já gravados... mas pode, com certeza, efectuar esse procedimento em "tempo real" no momento da exportação SAFT.

O que eu tenho é uma rotina PARSE onde todos os campos são obrigados a passar, com o seu valor, e comprimento MÁXIMO e ou MÍNIMO. O resultado é uma string com MAIS ou MENOS caracteres do que a original. No caso de haver necessidade de fazer um INSERT, faço-o com "*" (asteriscos) para ser bem visível :D

mas  a coisa nem termina aqui... existem campos que não aceitam ESPAÇOS... como tal são convertidos em "_" (underline) outros têm espaços a mais (antigamente era permitido formatar de forma errada certos códigos postais, por exemplo: 1234 - 567, com espaços entre o traço, o que leva a que um código postal tenha 10 caracteres... e neste caso não pode ser feito um TRIM pois iria cortar informação relevante).

Em resumo: o problema relativo ao LIMITE de caracteres dos campos é mais complexo do que pode parecer, e se ninguém tem esse problema, é quase um milagre, a não ser que as aplicações tenham sido desenvolvidas já depois do SAFT ou os dados tenham sido convertidos de acordo com as regras exigidas e o interface / API tenha passado a validar o conteúdo de TODOS esses campos no momento da sua criação / alteração!!!

Já agora, deixo aqui o exemplo das rotinas específicas que uso para processar os campos, e preciso de todas elas!

/** Corta caracteres em excesso */
private String parseText(String string, int maxLenght) {
	return StringUtils.left(string, maxLenght);
}


/** Corta caracteres em excesso e adiciona caracteres em falta */
private String parseText(String string, int minLenght, int maxLenght) {
	return string.length()>=minLenght ?
			parseText(string, maxLenght) :
			string+StringUtils.replicate('*', minLenght-string.length());
}


/** Substitui ESPACOS e corta caracteres em excesso */
private String parseText(String string, int maxLenght, String newSpace) {
	return parseText(string.replace(" ", newSpace), maxLenght);
}


/** Substitui ESPACOS por UNDERLINES e corta caracteres em excesso */
private String parseCode(String codigo, int maxLenght) {
	return parseText(codigo, maxLenght, "_");
}

 

Editado por marcolopes

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
derrerter    7
derrerter
Em 04/05/2017 às 18:10, nunopicado disse:

Valida com este: https://www.dropbox.com/s/mlyftb7r5ez1j3o/xsd11-validator.jar?dl=0

As instruções estão neste tópico há uma ou duas páginas! ;)

Boas,

Este utilitário estoura com ficheiros maiores.(no meu caso +- 1000 docs)

Alguém tem algum contorno?

Erro:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Hashtable.addEntry(Unknown Source)
    at java.util.Hashtable.put(Unknown Source)
    at org.apache.xerces.impl.xs.SubstitutionGroupHandler.getSubGroupB(Unknown Source)
    at org.apache.xerces.impl.xs.SubstitutionGroupHandler.getSubstitutionGroup(Unknown Source)
    at org.apache.xerces.impl.xs.XSModelImpl.buildSubGroups(Unknown Source)
    at org.apache.xerces.impl.xs.XSModelImpl.<init>(Unknown Source)
    at org.apache.xerces.impl.xs.XSModelImpl.<init>(Unknown Source)
    at org.apache.xerces.impl.xs.ElementPSVImpl.getSchemaInformation(Unknown Source)
    at org.apache.xerces.dom.PSVIElementNSImpl.setPSVI(Unknown Source)
    at org.apache.xerces.impl.xs.XMLAssertPsychopathImpl.endElement(Unknown Source)
    at org.apache.xerces.impl.xs.XSDAssertionValidator.handleEndElement(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.handleEndElement(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.endElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.jaxp.validation.StreamValidatorHelper.validate(Unknown Source)
    at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown Source)
    at javax.xml.validation.Validator.validate(Unknown Source)
    at hu.unideb.inf.validator.SchemaValidator.main(SchemaValidator.java:110)

 

Desde já obrigado.

 

 

Editado por derrerter

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
trs80    14
trs80
6 hours ago, derrerter said:

Boas,

Este utilitário estoura com ficheiros maiores.(no meu caso +- 1000 docs)

Alguém tem algum contorno?

Erro:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Hashtable.addEntry(Unknown Source)
    at java.util.Hashtable.put(Unknown Source)
    at org.apache.xerces.impl.xs.SubstitutionGroupHandler.getSubGroupB(Unknown Source)
    at org.apache.xerces.impl.xs.SubstitutionGroupHandler.getSubstitutionGroup(Unknown Source)
    at org.apache.xerces.impl.xs.XSModelImpl.buildSubGroups(Unknown Source)
    at org.apache.xerces.impl.xs.XSModelImpl.<init>(Unknown Source)
    at org.apache.xerces.impl.xs.XSModelImpl.<init>(Unknown Source)
    at org.apache.xerces.impl.xs.ElementPSVImpl.getSchemaInformation(Unknown Source)
    at org.apache.xerces.dom.PSVIElementNSImpl.setPSVI(Unknown Source)
    at org.apache.xerces.impl.xs.XMLAssertPsychopathImpl.endElement(Unknown Source)
    at org.apache.xerces.impl.xs.XSDAssertionValidator.handleEndElement(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.handleEndElement(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.endElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.jaxp.validation.StreamValidatorHelper.validate(Unknown Source)
    at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown Source)
    at javax.xml.validation.Validator.validate(Unknown Source)
    at hu.unideb.inf.validator.SchemaValidator.main(SchemaValidator.java:110)

 

Desde já obrigado.

 

 

Tendo bastante RAM tente

java -Xmx4096M - jar validador.jar

atencao que o Xmx é case sensitive, este comando indica ao java para usar um heap maximo de 4096

se tiver 8GB ou mais pode tentar 6000M por exemplo, se o OS for 32 bits não deve conseguir mais que 3000M, mesmo este nao deve funcionar,

 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ossadas    6
ossadas

Boas,

AT continua a modificar o "Validar"...

Pois, os ficheiros dos meus clientes que contem mercado internacional não validavam.

Não os modifiquei e porque raio haveria de mudar os ficheiros se estão de acordo com a Lei?!

Decidi esperar e agora todos são validados e na semana passada não...

Quanto tempo teremos de esperar pela versão definitiva?

O mais "#$%#&%$#" é que nem avisam nem nada... esquecendo-se de quem lhes paga o ordenado...

 

Peço desculpa, mas fazer isso em plena época de férias e os clientes a reclamarem em querem enviar com a versão nova...

 

Abraços

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rkomo    1
rkomo
On 8/7/2017 at 10:03 AM, fmendes85 said:

Bom dia,

Ao analisar um SAF-T de um cliente, o validador do efatura devolve o erro relacionado com a isenção do IVA ,já antes reportado aqui, fazendo referência no fim à secção dos WorkingDocuments.
Acontece que na secção dos WorkingDocuments só existe um documento e não é isento.
Experimentei apagar a secção dos WorkingDocuments e o ficheiro é validado correctamente.
Experimentei apagar a secção dos MovementOfGoods e manter a secção dos WorkingDocumentos e ficheiro é igualmente validado correctamente.
Apenas com as 2 secções presentes é que devolve o erro na validação.

Alguma ideia?

 

 

Boa tarde.

Estou com o mesmo problema.

Estive a analizar o código do validador do efatura e a validação do TaxExemptionReason relativamente ao TaxPercentage (obrigar a existir TaxExemptionReason no caso do TaxPercentage == 0 ) não esta a ser feita aos documentos de transporte. No entanto a estrutura de dados utilizada para efetuar as validações esta a ser preenchida nos documentos de transporte. O problema é que essa estrutura é limpa apenas quando ocorre a validação e uma vez que os documentos de transporte não estão a ser validados, essa estrutura não esta a ser limpa (coloca os valores a NULL). Isso faz com que caso exista um documento de transporte com TaxExemptionReason preenchido, o primeiro documento da estrutura seguinte ( WorkDocument ou Payment) vai dar sempre erro caso esse documento não seja também isento.

Para simplificar, se existir um documento de transporte com TaxExemptionReason preenchido, se o primeiro documento da secção seguinte (WorkDocument/Payment) tiver TaxPercentage > 0 vai gerar um erro.

Outra curiosidade é que apesar de o xsd fornecido na página da AT conter "assert" para verificar estas situações, o validador do efatura não utiliza este xsd mas uma versão do xsd sem assert. E é a implementação de um destes assert por código esta a gerar este erro.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
marcolopes    331
marcolopes
12 hours ago, ossadas said:

Boas,

AT continua a modificar o "Validar"...

Pois, os ficheiros dos meus clientes que contem mercado internacional não validavam.

Não os modifiquei e porque raio haveria de mudar os ficheiros se estão de acordo com a Lei?!

Decidi esperar e agora todos são validados e na semana passada não...

Quanto tempo teremos de esperar pela versão definitiva?

O mais "#$%#&%$#" é que nem avisam nem nada... esquecendo-se de quem lhes paga o ordenado...

Peço desculpa, mas fazer isso em plena época de férias e os clientes a reclamarem em querem enviar com a versão nova...

Abraços

Versão 1.03 e problema resolvido!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
fmendes85    0
fmendes85
17 horas atrás, rkomo disse:

Boa tarde.

Estou com o mesmo problema.

Estive a analizar o código do validador do efatura e a validação do TaxExemptionReason relativamente ao TaxPercentage (obrigar a existir TaxExemptionReason no caso do TaxPercentage == 0 ) não esta a ser feita aos documentos de transporte. No entanto a estrutura de dados utilizada para efetuar as validações esta a ser preenchida nos documentos de transporte. O problema é que essa estrutura é limpa apenas quando ocorre a validação e uma vez que os documentos de transporte não estão a ser validados, essa estrutura não esta a ser limpa (coloca os valores a NULL). Isso faz com que caso exista um documento de transporte com TaxExemptionReason preenchido, o primeiro documento da estrutura seguinte ( WorkDocument ou Payment) vai dar sempre erro caso esse documento não seja também isento.

Para simplificar, se existir um documento de transporte com TaxExemptionReason preenchido, se o primeiro documento da secção seguinte (WorkDocument/Payment) tiver TaxPercentage > 0 vai gerar um erro.

Outra curiosidade é que apesar de o xsd fornecido na página da AT conter "assert" para verificar estas situações, o validador do efatura não utiliza este xsd mas uma versão do xsd sem assert. E é a implementação de um destes assert por código esta a gerar este erro.

Confirma-se!! Estava completamente à nora, já que uns SAF-T's validavam e outros não e a estrutura era igual em todos.
Depois de verificar o que indicou faz todo o sentido que uns dêem erro e outros não.
Muito obrigado!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
karkarof    1
karkarof

Boa tarde,

Alguém tem algum ficheiro do SAFT 1.04 da versão da contabilidade?

Tenho algumas questões sobre como colocar mais que uma linha de débito/crédito na mesma transacção.

Obrigado.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
derrerter    7
derrerter
3 horas atrás, karkarof disse:

Boa tarde,

Alguém tem algum ficheiro do SAFT 1.04 da versão da contabilidade?

Tenho algumas questões sobre como colocar mais que uma linha de débito/crédito na mesma transacção.

Obrigado.

O exemplo que está no portal da AT, é do tipo I (Integrado), tem contabilidade e faturação.

Se quiser só CTB apaga o resto.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
karkarof    1
karkarof
10 horas atrás, derrerter disse:

O exemplo que está no portal da AT, é do tipo I (Integrado), tem contabilidade e faturação.

Se quiser só CTB apaga o resto.

Bom dia,

Estive à procura no site da AT e apenas encontro a estrutura de dados e a uma aplicação de validação.

Pode colocar aqui o link?

Obrigado.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
MiguelAl    1
MiguelAl
On 09/08/2017 at 6:16 PM, rkomo said:

Boa tarde.

Estou com o mesmo problema.

Estive a analizar o código do validador do efatura e a validação do TaxExemptionReason relativamente ao TaxPercentage (obrigar a existir TaxExemptionReason no caso do TaxPercentage == 0 ) não esta a ser feita aos documentos de transporte. No entanto a estrutura de dados utilizada para efetuar as validações esta a ser preenchida nos documentos de transporte. O problema é que essa estrutura é limpa apenas quando ocorre a validação e uma vez que os documentos de transporte não estão a ser validados, essa estrutura não esta a ser limpa (coloca os valores a NULL). Isso faz com que caso exista um documento de transporte com TaxExemptionReason preenchido, o primeiro documento da estrutura seguinte ( WorkDocument ou Payment) vai dar sempre erro caso esse documento não seja também isento.

Para simplificar, se existir um documento de transporte com TaxExemptionReason preenchido, se o primeiro documento da secção seguinte (WorkDocument/Payment) tiver TaxPercentage > 0 vai gerar um erro.

Outra curiosidade é que apesar de o xsd fornecido na página da AT conter "assert" para verificar estas situações, o validador do efatura não utiliza este xsd mas uma versão do xsd sem assert. E é a implementação de um destes assert por código esta a gerar este erro.

Bem observado! Já estava a dar em doido...

Sendo assim vou para já cortar os documentos de transporte do ficheiro saft (uma vez que já os recebem pelo webservice) e submete-lo para poder ir de férias!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Leonardo Conz    2
Leonardo Conz

Malta tenho duas dúvidas:

1. Estou a tentar gerar um ficheiro com mais de uma fatura e não consigo. O xsd tem de ter alguma alteração do oficial para que aceite mais de uma fatura?

2. No meu sistema a 1.03 já funciona metendo mais de uma fatura no ficheiro. Se pegar e alterar só os blocos novos para que se pareça com a 1.04 é um caminho melhor a seguir?

 

Cumprimentos,

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nunopicado    1060
nunopicado
1 hora atrás, Leonardo Conz disse:

Malta tenho duas dúvidas:

1. Estou a tentar gerar um ficheiro com mais de uma fatura e não consigo. O xsd tem de ter alguma alteração do oficial para que aceite mais de uma fatura?

2. No meu sistema a 1.03 já funciona metendo mais de uma fatura no ficheiro. Se pegar e alterar só os blocos novos para que se pareça com a 1.04 é um caminho melhor a seguir?

Não percebi, só consegues criar uma fatura no SAF-T?
Eu estou a emitir normalmente, centenas de faturas ,sem problema.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Leonardo Conz    2
Leonardo Conz
2 minutos atrás, nunopicado disse:

Não percebi, só consegues criar uma fatura no SAF-T?
Eu estou a emitir normalmente, centenas de faturas ,sem problema.

sim... apenas uma por ficheiro....

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Leonardo Conz    2
Leonardo Conz
Agora, nunopicado disse:

Muito estranho...
Dá-te algum erro, ou coisa parecida? Porque dizes que só aceita uma?

Estou a gerar via ferramenta ETL. Não me dá erro algum. Gera apenas uma e conclui o processo.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
CrominhO    271
CrominhO
6 minutos atrás, Leonardo Conz disse:

Estou a gerar via ferramenta ETL. Não me dá erro algum. Gera apenas uma e conclui o processo.

Não dá erro nem vai dar, o XSD está correcto... Deves ter um problema na BD que o ETL não consegue converter e daí só te escrever 1 que foi o que conseguiu ler e escrever no XML, e depois claro conclui o processo. Já verificaste na Base de dados os campos do Documento anterior e posterior ao que ele exporta ?? 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Leonardo Conz    2
Leonardo Conz
2 minutos atrás, CrominhO disse:

Não dá erro nem vai dar, o XSD está correcto... Deves ter um problema na BD que o ETL não consegue converter e daí só te escrever 1 que foi o que conseguiu ler e escrever no XML, e depois claro conclui o processo. Já verificaste na Base de dados os campos do Documento anterior e posterior ao que ele exporta ?? 

Estranho é que a 1.03 está funcionando perfeitamente. apenas alterei o meu target, remapeei os campos... e deu-me esta treta =(

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
CrominhO    271
CrominhO
35 minutos atrás, Leonardo Conz disse:

Estranho é que a 1.03 está funcionando perfeitamente. apenas alterei o meu target, remapeei os campos... e deu-me esta treta =(

Então o problema deve estar no remapeeamento dos campos que fizeste... Se está a funcionar na 1.03 porque não adicionaste só os novos campos? :-)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Leonardo Conz    2
Leonardo Conz
Em 14/08/2017 às 18:19, CrominhO disse:

Então o problema deve estar no remapeeamento dos campos que fizeste... Se está a funcionar na 1.03 porque não adicionaste só os novos campos? :-)

Exatamente @CrominhO é por este caminho que vou seguir agora.... apenas adicionar os novos campos já que tudo me parece bem no fluxo 1.03.

 

Obrigado!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
miguelc    3
miguelc
Em 09/08/2017 às 18:16, rkomo disse:

Boa tarde.

Estou com o mesmo problema.

Estive a analizar o código do validador do efatura e a validação do TaxExemptionReason relativamente ao TaxPercentage (obrigar a existir TaxExemptionReason no caso do TaxPercentage == 0 ) não esta a ser feita aos documentos de transporte. No entanto a estrutura de dados utilizada para efetuar as validações esta a ser preenchida nos documentos de transporte. O problema é que essa estrutura é limpa apenas quando ocorre a validação e uma vez que os documentos de transporte não estão a ser validados, essa estrutura não esta a ser limpa (coloca os valores a NULL). Isso faz com que caso exista um documento de transporte com TaxExemptionReason preenchido, o primeiro documento da estrutura seguinte ( WorkDocument ou Payment) vai dar sempre erro caso esse documento não seja também isento.

Para simplificar, se existir um documento de transporte com TaxExemptionReason preenchido, se o primeiro documento da secção seguinte (WorkDocument/Payment) tiver TaxPercentage > 0 vai gerar um erro.

Outra curiosidade é que apesar de o xsd fornecido na página da AT conter "assert" para verificar estas situações, o validador do efatura não utiliza este xsd mas uma versão do xsd sem assert. E é a implementação de um destes assert por código esta a gerar este erro.

Confirmo esta situação. Basta que um documento de transporte tenha isenção, que dá erro nos pagamentos (recibos). Temos o validador da CentralGest. Mandámos-lhes um ficheiro e confirmaram-nos que estava ok.

Alguém tem novidades sobre este assunto? Tenho os clientes (quase) todos à perna. "Quase" porque nem todos têm documentos de transporte com isenção. 

Para ajudar anda a circular um email sobre a aplicação de coimas para a entrega do saft de julho com a versão 1.03.

Linha de apoio da AT: "Entregue com a versão 1.03. Não temos pessoal. Está tudo de férias..."

Que atitude estão a tomar? Esperar? Nós estamos a dizer para entregar com a versão 1.03. Acho muito pouco provável que a AT resolva isto em tempo útil.

Comentários?...

Miguel C.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
João Carvalho    0
João Carvalho

A mim num ficheiro de um Cliente nosso, se validarmos com o validador local que baixámos do site da AT, dá validado com sucesso, mas quando submetemos o mesmo ficheiro no site E-fatura dá este tipo de erro:

"cvc-assertion: Assertion evaluation ( 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 () for ele..."

Já percebi que no caso do ficheiro em questão, o problema está em 3 guias de Ativos Próprios que têm IVA zero, embora estejam lá a os campos, TaxExemptionReason e TaxExemptionCode, devidamente preenchidos.

Se lhes colocar o IVA e retirar estes campos, já valida com sucesso no E-fatura!...

Será que as Guias de Ativos Próprios têm de ter sempre IVA?

Editado por João Carvalho

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade