Ir para o conteúdo
pv2013

SAFT-PT: debate de dúvidas e ideias

Mensagens Recomendadas

edith

O site Efatura anda a perder documentos!

Eles são comunicados na SAFT do comerciante e depois não aparecem na conta do cliente final (com o NIF introduzido)

Já alguém tive um caso destes?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Que me tivesse chegado ao conhecimento não. Até ver, nenhuma queixa.

Qual o intervalo temporal? Será caso de ainda não terem sido processados por algum motivo, ou o tempo passado é superior ao razoável para ser esse caso?


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
edith

 

11 minutos atrás, nunopicado disse:

Que me tivesse chegado ao conhecimento não. Até ver, nenhuma queixa.

Qual o intervalo temporal? Será caso de ainda não terem sido processados por algum motivo, ou o tempo passado é superior ao razoável para ser esse caso?

Passaram 3 meses depois da comunicação

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
edith
16 minutos atrás, nunopicado disse:

Que me tivesse chegado ao conhecimento não. Até ver, nenhuma queixa.

Qual o intervalo temporal? Será caso de ainda não terem sido processados por algum motivo, ou o tempo passado é superior ao razoável para ser esse caso?

Qual o tempo médio para a AT colocar os documentos na conta do cliente final?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
americob
5 horas atrás, edith disse:

O site Efatura anda a perder documentos!

Eles são comunicados na SAFT do comerciante e depois não aparecem na conta do cliente final (com o NIF introduzido)

Já alguém tive um caso destes?

Ela aparece do lado do comerciante? e o NIF do consumidor está correto e com o prefrixo "PT"? e mesmo assim não aparece do lado do consumidor? estranho!

Já vi alguns casos, mas com prefixo "PG", "PR", "PY", etc, é as pressas ao abrir o cliente!

A partir do momento que está do lado do comerciante, também está do lado do consumidor. Aposto que a Database é a mesma!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
MJanko
On 2/16/2018 at 1:40 PM, americob said:

Retirado da pagina que não consegues ver.

Parâmetros de invocação da aplicação:


Opção

Opção extendida

Descrição

Obrigatório

Exemplo de utilização

Validações


-XMS - Define o tamanho inicial e mínimo de memória para iniciar a aplicação. É definido através de um inteiro seguido da unidade de memória que este representa. Os valores possíveis para a unidade de memória são: g|G|m|M|k|K.
 Este valor terá de ser indicado antes do parâmetro "-jar".  Não -XMS64m - 
-XMX - Define o tamanho máximo de memória que a aplicação poderá utilizar. É definido através de um inteiro seguido da unidade de memória que este representa. Valores possíveis para a unidade de memória: g|G|m|M|k|K. Este valor terá de ser indicado antes do parâmetro "-jar". Não -XMX1024m - 
-jar - Define o ficheiro jar onde se encontra a aplicação de envio de ficheiro SAF_T (PT). Caso o caminho para o ficheiro jar contenha espaços este terá de ser delimitado por aspas. Sim -jar FACTEMICLI-[VERSAO]-cmdClient.jar - 
-n --nif Define o NIF do comerciante para o qual se pretende enviar o ficheiro SAFT-T (PT) e que será utilizado para autenticação no portal. Poderá ser definido o sub-utilizador, através da seguinte formatação 123456789/1. Sim -i 123456789 -Terá de ser um NIF válido. 
-p --password Password do utilizador, no Portal das Finanças, para o qual se pretende realizar o envio de ficheiro SAF-T (PT). Sim -n xxxxxxxxx - Password terá de ser válida para o contribuinte em questão. 
-a --ano Ano a que se refere o ficheiro SAF-T(PT) a enviar. Sim -a 2013 - Terá de ser um valor numérico;
- Dimensão igual a 4.  
-m --mes Mês a que se refere o ficheiro SAF-T(PT) a enviar. Sim -m 01 - Terá de ser um valor numérico;
- Dimensão igual a 2.  
-op --operacao Indicação da operação que se pretende realizar, com um dos seguintes valores:
- "validar": Valida o ficheiro SAF-T(PT) definido no parâmetro '-i';
- "enviar": Envia o ficheiro SAF-T(PT), definido no parâmetro '-i', para a AT.  Sim -op enviar - O valor definido para a operação terá de ser um dos especificados. 
-i --input Indicação do caminho para o ficheiro SAF-T (PT) que pretende enviar/validar para a AT. Se o caminho contiver espaços este terá de ser delimitado por aspas. Sim -i "c:\Ficheiro saft-t (pt).xml" - Ficheiro tem de existir em disco. 
-v --version Indicação do formato de ficheiro a enviar, com um dos seguintes valores:
- "R02": Portaria n.º 160/2013 (versão 1.02_01).
- "R03": Portaria n.º 274/2013 (versão 1.03_01).
- "R04": Portaria n.º 302/2016 (versão 1.04_01).
 Por omissão o formato de envio terá o valor "R04".
O formato "R01" (Portaria n.º 1192/2009 (versão 1.01_01)) deixou de ser aceite a partir de 1 de Abril de 2014. 
 Não -v R02 - O valor definido para o formato terá de ser um dos especificados. 
-o --output Indicação do caminho para o ficheiro onde será escrito o resultado do envio do ficheiro SAF-T (PT). Se o caminho contiver espaços este terá de ser delimitado por aspas. Por omissão escreve para a consola onde foi iniciado o envio. Não -o "c:\Ficheiro resultado.xml" -Pasta onde será colocado o ficheiro terá de existir em disco. 
-r --resumido Indicação do caminho para o ficheiro onde será escrito o ficheiro resumido. Se o caminho contiver espaços este terá de ser delimitado por aspas. Por omissão escreve o ficheiro na mesma directoria e nome, com sufixo 'resumido', do ficheiro definido no parâmetro '-i'. Não -r "c:\Ficheiro resumido.xml" - 
-t --testes Indicação de que se trata de um envio de testes, devendo o ficheiro ser ignorado para processamento. Não -t  
-h --help Imprime a listagem com todo os parâmetros existentes, bem como um exemplo de utilização. Não -h 

Exemplos de utilização:

A configuração mínima para proceder ao envio do ficheiro SAF-T (PT) é a seguinte:


java -jar FACTEMICLI-[VERSAO]-cmdClient.jar -n 123456789 -p xxxxxxxxx -a 2013 -m 01 -op enviar
    -i "C:\caminho para ficheiro\Nome_ficheiro.xml"

Caso seja pretendido é possível indicar um ficheiro de saída para onde será escrito o resultado do processamento ou alterar a quantidade de memoria utilizada:


java -Xms:256m -Xmx:1024m -jar FACTEMICLI-[VERSAO]-cmdClient.jar -n 123456789/14 -p xxxxxxxxx -a 2013 -m 01 -op enviar
    -i "C:\caminho para ficheiro\Nome_ficheiro.xml" -o "C:\caminho para ficheiro\Nome_ficheiro_saida.xml"

Estrutura de resposta (XML)

Nesta secção descreve-se a estrutura e informação da resposta ao envio de ficheiro SAF-T (PT) através do aplicativo batch. A especificação XSD da resposta enviada pelo servidor é a seguinte:


<?xml version="1.0"?>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="response">
            <xs:complexType>
                <xs:choice>
                      <xs:element name="errors" type="errorType" minOccurs="1"/>
                      <xs:sequence>
                            <xs:element name="totalFaturas" type="xs:string" maxOccurs="1" minOccurs="1"></xs:element>
                            <xs:element name="totalCreditos" type="xs:string" maxOccurs="1" minOccurs="1"></xs:element>
                            <xs:element name="totalDebitos" type="xs:string" maxOccurs="1" minOccurs="1"></xs:element>
                            <xs:element name="warning" type="xs:string" maxOccurs="1" minOccurs="0"></xs:element>
                            <xs:element name="idFicheiro" type="xs:string" maxOccurs="1" minOccurs="0"></xs:element>
                            <xs:element name="nomeFicheiro" type="xs:string" maxOccurs="1" minOccurs="1"></xs:element>
                            <xs:element name="createdDate" type="xs:string" maxOccurs="1" minOccurs="1"></xs:element>
                      </xs:sequence>
                </xs:choice>
                <xs:attribute name="code" type="xs:string" use="required"/>
            </xs:complexType>
        </xs:element>
        <xs:complexType name="errorType">
            <xs:sequence>
                <xs:element name="error" type="xs:string" maxOccurs="unbounded" minOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:schema>

Exemplo de resposta de sucesso no envio do ficheiro SAF-T (PT). No caso de o ficheiro ser aceite mas com alguma condicionante, será colocada uma mensagem de "warning".


<?xml version="1.0" encoding="ISO-8859-1"?>
    <response code="200">
        <totalFaturas>10</totalFaturas>
        <totalCreditos>1234.56</totalCreditos>
        <totalDebitos>12.34</totalDebitos>
        <warning>Devido a todas as faturas serem anteriores a 1/Jan/2013 o ficheiro não será considerado para processamento.</warning>
        <idFicheiro>123</idFicheiro>
        <nomeFicheiro>saft-pt.xml</nomeFicheiro>
        <createdDate>2013-02-01 15:17:54</createdDate>
    </response>

Exemplo de resposta quando existe um erro no envio ou validação do ficheiro SAF-T (PT).


<?xml version="1.0" encoding="ISO-8859-1"?>
    <response code="-3">
        <errors>
            <error>NIF do comerciante ('123456789') é diferente do NIF declarado no ficheiro SAF-T PT ('987654321').</error>
        </errors>
    </response>

Códigos de resposta existentes


Código de Resposta

Mensagem de erro

Descrição do erro


-1 Ocorreu um erro durante o envio do ficheiro. Erro genérico na comunicação entre cliente e servidor. 
-2 O ficheiro recebido não tem o mesmo tamanho que o ficheiro enviado. Tamanho do ficheiro declarado no header pelo programa cliente não corresponde ao tamanho real enviado 
-3 Mensagem específica da validação que não está a ser respeitada. A mensagem de resposta para este erro é variável, estando a sua mensagem de erro dependente da validação que não é respeitada 
-4 Ocorreu um erro durante o envio do ficheiro. Erro ao inserir o ficheiro na base de dados 
-5 O ficheiro selecionado já foi enviado para a AT. Cenário em um ficheiro idêntico foi previamente enviado para a AT. 
-6 Erro no processo de conversão. Este erro ocorre caso exista algum problema durante o processo de conversão. É apresentada mensagem complementar indicando a origem do erro. 
-7 O cliente de linha de comandos que está a utilizar não se encontra atualizado. Por favor aceda ao portal e-fatura e obtenha a nova versão. Caso o cliente linha de comando que se encontra a utilizar não seja a versão mais actual. 
-8 O ficheiro resumido não pode ser o mesmo que o ficheiro seleccionado para envio. Caso em que o ficheiro indicado no parâmetro -i (ficheiro SAF-T (PT) a enviar para a AT) é o mesmo que o indicado pelo parâmetro -r (localização do ficheiro resumido). 
-9 Para poder entregar o SAF-T na versão que indicou necessita de atualizar o cliente de linha de comandos. Para isso, por favor, aceda ao portal e-fatura e obtenha a nova versão. Caso o cliente linha de comando que se encontra a utilizar não seja a versão mais actual para o formato de SAF-T que está a entregar. 
-401 Login failed for user 123456789. ERROR CODE: <ERRO ANTENTICAÇÃO> Quando ocorre um erro na autenticação do servidor 
-666 Ocorreu um erro. Erro não categorizado durante o processo de envio. É apresentada uma mensagem descritiva do erro. 
200 -  Sucesso no envio do ficheiro 

 

Brilhante, muito obrigado!

 

Usando umas credenciais random e usando a opção "validar" em vez de "enviar" consegui pela primeira vez replicar o erro!

2tvYZxk.png

 

Já enviei isto para os programadores e espero que consigam chegar à causa do erro.

Já alguem viu isto a acontecer? 

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado
1 hora atrás, edith disse:

Passaram 3 meses depois da comunicação

 

56 minutos atrás, edith disse:

Qual o tempo médio para a AT colocar os documentos na conta do cliente final?

Normalmente é coisa de dias, pelo que se foi 3 meses, já deveria lá estar tudo.


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado
5 minutos atrás, MJanko disse:

2tvYZxk.png

 

Já enviei isto para os programadores e espero que consigam chegar à causa do erro.

Já alguem viu isto a acontecer? 

 

 

Já aconteceu várias vezes, e por regra o que acontece é teres algum artigo com 0% de IVA mas não ir lá o motivo de isenção indicado.

Pesquisa no ficheiro por <TaxPercentage>0</TaxPercentage> e vê se logo a seguir, duas ou tres linhas depois, tens uma tag chamada <TaxIsemptionReason>.
Se tiveres algum IVA a 0, sem a outra tag a seguir, está aí o problema.

  • Voto 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
MJanko
16 minutes ago, nunopicado said:

 

Já aconteceu várias vezes, e por regra o que acontece é teres algum artigo com 0% de IVA mas não ir lá o motivo de isenção indicado.

Pesquisa no ficheiro por <TaxPercentage>0</TaxPercentage> e vê se logo a seguir, duas ou tres linhas depois, tens uma tag chamada <TaxIsemptionReason>.
Se tiveres algum IVA a 0, sem a outra tag a seguir, está aí o problema.

Tão rapido a reponder, obrigado!

Vou procurar por isso.

O mais estranho para mim é o facto da validação falhar 20 segundos depois de começar, antes quando o Cliente conseguia entrar o SAFT demorava na boa umas 3 horas entre validar e enviar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
edith
1 hora atrás, americob disse:

Ela aparece do lado do comerciante? e o NIF do consumidor está correto e com o prefrixo "PT"? e mesmo assim não aparece do lado do consumidor? estranho!

Já vi alguns casos, mas com prefixo "PG", "PR", "PY", etc, é as pressas ao abrir o cliente!

A partir do momento que está do lado do comerciante, também está do lado do consumidor. Aposto que a Database é a mesma!

 

 

Muito obrigado Americo,

Realmente esses clientes foram criados com ES, nem sei como fizeram isso. Porque por 'defaul' vai sempre para PT

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado
6 horas atrás, MJanko disse:

Tão rapido a reponder, obrigado!

Vou procurar por isso.

O mais estranho para mim é o facto da validação falhar 20 segundos depois de começar, antes quando o Cliente conseguia entrar o SAFT demorava na boa umas 3 horas entre validar e enviar.

Formas diferentes de validar, entre a app e o portal das finanças.

 

5 horas atrás, edith disse:

Muito obrigado Americo,

Realmente esses clientes foram criados com ES, nem sei como fizeram isso. Porque por 'defaul' vai sempre para PT

Os users conseguem fazer o que o programador nunca imaginou. :D
Eles são terríveis.

 


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jasb
Em 11/13/2017 às 15:26, nunopicado disse:

Estou oficialmente a brincar... :D
Mas oficiosamente, acho que não me engano muito!

Nestas coisas conto sempre 15 dias antes de entrar em vigor, que é ao que nos têm habituado.
(claro, estou a assumir que o ATCud entrará em vigor em Janeiro, mas posso estar errado)

Olá!

Será que há novidades deste novo campo, sabes algo?!
Eu pelo menos não encontro nada...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Ainda nada... :)


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rui Pedro

Boas pessoal, estou com a seguinte duvida:

No caso de um documento produzido a partir de outra aplicação "SourceBilling(I)" os códigos de cliente (customerID) devem ser exactamente iguais ao do software produtor desse documento?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
_kh

Ola pessoal,

Eu tenho algumas perguntas sobre o SAF-T PT, especificamente sobre o hash no objeto da fatura.

Eu li aqui (não consigo encontrar a versão PT) que eu tive que fazer uma string consistindo em: período, EACode, número de fatura, total bruto e o hash anterior. E separe-o com ponto e vírgula.
Eu então o selou (não sei qual método de codificação ainda pode usar). Não me sinto confiante de que fiz o que é certo.

Uma vez que eu não uso o EACode, eu apenas o guardei como uma string vazia, também o primeiro hash não tem um hash anterior, então manteve isso como uma string vazia também.

Alguém poderia verificar se eu estou fazendo o que é certo ou não?

 

hello guys,

I have a couple questions about SAF-T PT, specifically about the hash in the invoice object.

I read here (can't find PT version) that I had to make a string consisting of: period, EACode, invoice number, gross total and the previous hash. And seperate it with semicolons.
I then sealed it (don't know which cipher method to use yet). I don't feel confident that I did the right thing.

Since I don't use the EACode I just kept it as an empty string, also the first hash does not have a previous hash, so kept that as an empty string too.

Could someone verify that I'm doing the right thing or not?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Miguel Frias

A hash é criada sobre a seguinte string (dados da sua factura):

 

${date};${datetime};FR ${series}/${id};$valor;$oldhash

 

Exemplos:

Primeira factura no valor de 45.40€ com a designação "AL/1"

Segunda factura no valor de 17.86€ com a designação "AL/2"

 

Exemplo para primeira factura de uma série:

2018-03-07;2018-03-07T14:31:12;FR AL/1;45.40;

A hash gerada será (por exemplo):

MAZCQtBH+LNmVAkEOFNVIeu1WWucVICtKu9lv2bXU9WM6zLZMe+nDDltb3IRGsK+b1BQ2uY64YskxAuyTJ0ejZgDSCSYHzC1D0cjc88TQkB9T/bRKwLqg5pSzc+eXRKOXefAjKWJmRBCl66DbwF+wSb3zYUyq6zOgnBl68WNmbQ=

Exemplo para segunda factura de uma série:

2018-03-07;2018-03-07T14:33:35;FR AL/2;17.86;MAZCQtBH+LNmVAkEOFNVIeu1WWucVICtKu9lv2bXU9WM6zLZMe+nDDltb3IRGsK+b1BQ2uY64YskxAuyTJ0ejZgDSCSYHzC1D0cjc88TQkB9T/bRKwLqg5pSzc+eXRKOXefAjKWJmRBCl66DbwF+wSb3zYUyq6zOgnBl68WNmbQ=

 

Ou seja, usa a hash gerada pela primeira factura, na segunda. E assim sucessivamente.

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
_kh
1 hour ago, Miguel Frias said:

The hash is created over the following string (data from your invoice):

 

$ {date}; $ {datetime}; FR $ {series} / $ {id}; $ value; $ oldhash

 

Examples:

First invoice in the amount of 45.40 € with the designation "AL / 1"

Second invoice worth € 17.86 under the designation "AL / 2"

 

Example for first invoice of a series:

2018-03-07; 2018-03-07T14: 31: 12; FR AL / 1; 45.40;

The generated hash will be (for example):

MAZCQtBH LNmVAkEOFNVIeu1WWucVICtKu9lv2bXU9WM6zLZMe + + + nDDltb3IRGsK b1BQ2uY64YskxAuyTJ0ejZgDSCSYHzC1D0cjc88TQkB9T / bRKwLqg5pSzc eXRKOXefAjKWJmRBCl66DbwF + + = wSb3zYUyq6zOgnBl68WNmbQ

Example for second invoice of a series:

03.07.2018; 2018-03-07T14: 33: 35: FR AL / 2; 17.86; MAZCQtBH LNmVAkEOFNVIeu1WWucVICtKu9lv2bXU9WM6zLZMe + + + nDDltb3IRGsK b1BQ2uY64YskxAuyTJ0ejZgDSCSYHzC1D0cjc88TQkB9T / bRKwLqg5pSzc eXRKOXefAjKWJmRBCl66DbwF + + = wSb3zYUyq6zOgnBl68WNmbQ

 

That is, it uses the hash generated by the first invoice, in the second. And so on.

Muito obrigado!

A data e data da data atual? Ou data da factura paga?

O hash deve ser codificado em base64? Nos exemplos do SAF-T, ele está codificado em base64.
Parece que meu hash ultrapassou o limite de 172 caracteres.

Thanks a lot!

Is date and datetime the current date? Or date from invoice paid?

Does the hash have to be base64 encoded? In SAF-T examples it looks base64 encoded.

Editado por _kh

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
paulo brito

Peço desculpa por perguntar aqui - eu sei que não é o sitio certo, mas não sei onde - existe alguma maneira / programa que permita ver uma declaração IES no formato 'normal' / das finanças a partir do ficheiro xml ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Larissa

Boas!

Preciso descarregar o validador da última versão do ficheiro SAFT-PT (1.04_01), porém o mesmo não está disponível :(:
http://info.portaldasfinancas.gov.pt/apps/saft-pt04/validador_v1_04.jar

Escrevi para o Portal das Finanças, mas ainda não obtive resposta.

Alguém do fórum poderia me enviar por favor? 

Agradeço pela ajuda!

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
_kh
2 minutes ago, Larissa said:

Good!

I need to download the validator of the latest version of the SAFT-PT file (1.04_01), but it is not available  :(:
http://info.portaldasfinancas.gov.pt/apps/saft-pt04/validador_v1_04.jar

I wrote to the Portal das Finance, but I still have not gotten an answer.

Could someone from the forum please send me? 

Thanks for the help!

greetings

http://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/SAFT_PT/Paginas/news-saf-t-pt.aspx

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
americob
Em ‎09‎-‎03‎-‎2018 às 18:36, paulo brito disse:

Peço desculpa por perguntar aqui - eu sei que não é o sitio certo, mas não sei onde - existe alguma maneira / programa que permita ver uma declaração IES no formato 'normal' / das finanças a partir do ficheiro xml ?

Descarrega o preenchimento offline da IES/DA e abre o ficheiro lá:

https://www.portaldasfinancas.gov.pt/pt/menu.action?pai=348

 

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mreis1

Pessoal, não seria uma boa ideia criar uma categoria no forum a respeito do SAF-T? 
246 Páginas tornam isto difícil de pesquisar/ler/acompanhar. 
Com uma categoria seria mais fácil colocar questões e centralizar o conteúdo. Just saying ^^

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
_kh

Olá,

Todos os dias estou ficando um pouco mais confuso sobre o SAF-T. Eu não falo português, então escanear os manuais fica muito irritante.

Eu quase consegui gerar o XML, o único problema é que eu não acho que fiz o direito de hash. Eu usei o openseal do PHP e segui o post de Miguel Frias. Mas depois de algumas facturas, o hash ultrapassa o limite do validador.

A outra coisa sobre a qual me confuso é enviar o documento. Eu leio o arquivo ComunicacaodosdadosdasfaturasaAT. Mas o "body" é apenas uma factura única.Existe uma maneira de enviar o arquivo SAF-T completo? Ou devo enviar cada factura sozinho?

Eu realmente apreciaria qualquer ajuda.


Hash

$sData = "{$sCreateDate};{$sCreateDateTime};{$sInvoiceNr};{$fInvoiceGrossTotal};{$sLastSignature}";
$sPublicKey = openssl_get_publickey(file_get_contents(INCLUDES . 'SAF-T/public.pem'));

openssl_seal($sData, $sEncrypted, $sEnv, [$sPublicKey]);
openssl_free_key($sPublicKey);

$sSealedData = base64_encode($sEncrypted);
$this->aSignatures[] = $sSealedData;

EDIT:

382/5000

Finalmente, corrigi-lo.
Eu estava totalmente errado, você não precisava selar os dados. Mas assine com RSA PKCS1.

Fiz o link deste documento: http://info.portaldasfinancas.gov.pt/pt/informacao_fiscal/legislacao/diplomas_legislativos/Documents/Despacho_nº_8632_2014_03_07.pdf

O que explica isso.
Para desenvolvedores PHP, use phplibsec versão 2.0: https://github.com/phpseclib/phpseclib

use phpseclib\Crypt\RSA;

/*
$aSignatures is array with all signatures.
*/
if (count($aSignatures) > 0)
{
	$sLastSignature = $aSignatures[count($aSignatures) - 1];
}
else
{
	$sLastSignature = "";
}

$oRSA = new RSA();
$oRSA->loadKey(file_get_contents('private.pem'));
$oRSA->setSignatureMode(RSA::SIGNATURE_PKCS1);
$sEncrypted = $oRSA->sign("{$sCreateDate};{$sCreateDateTime};{$sInvoiceNr};{$fInvoiceGrossTotal};{$sLastSignature}");
$aSignatures[] = $sEncrypted;

// Generated hash to use in SAF-T (should be 172 chars long)
$sHash = base64_encode($sEncrypted);

 

Editado por _kh
Fixed

Partilhar esta mensagem


Ligação 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 os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.