Criação do SAFT-PT

Olá,

Estou a iniciar o desenvolvimento de um programa opensource que irei disponibilizar no GitHub na liguagem PHP, porém gostaria de saber se alguem pode me orientar.

Depois de uma vasta pesquisa, no Portal das Finanças (link a seguir), é disponibilizado um arquivo .XSD no qual devo converter para .XML

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

A minha dúvida é a seguinte:

- Essa conversão deve ser a partir do .XSD, ou posso criá-lo?
- A assinatura digital para gerar o hash, qual é o conteúdo que deve ser assinado?

Espero que possamos nos ajudar, pois, esta ferramenta ajudará bastante a toda a comunidade para desmistificar um processo.

Por falta de documentação na internet, não estou a conseguir iniciar o projeto.

Melhores cumprimentos.
 
Falando genericamente:
- O XSD não é obrigatório para criar o XML. Apenas existe para te assegurar que estás a cumprir as regras do que é gerado.
- A assinatura digital assina o XML todo, e não pode ser alterado após essa assinatura. Exemplo de utilização em .Net https://docs.microsoft.com/en-us/do...to-sign-xml-documents-with-digital-signatures

Mas vejo no arquivo final que esta assinatura está incorporada na tag hash. Desta forma, jamais ficaria correta a validação, pois houve já a alteração do XML. Desculpa, mas não ajudou teu comentário.

No link a seguir, dá outra orientação de assinatura.

https://invisibleflamelight.wordpre...ada-a-assinatura-dos-documentos-certificados/

O motivo de ter vindo cá, é para que a comunidade possa construir essa opensource que beneficiará a todos.
 
Apenas com curiosidade de qual o processo que se quer desmistificar ?
Posso facilmente abrir o ficheiro SAFT ( notepad++/sublime/code, etc... ) e ver o seu conteudo.
 
Mas qual o objetivo do projeto?

É que só desenvolver algo que gere um ficheiro SAF/T, não serve para nada... (para além de ganhar cabelos brancos,.... )

Tens de ter todo um software de facturação, que tem de ser certificado pela Autoridade Tributária. (e é este que calcula as chaves de cada documento, no momento de emissão do mesmo, pois estas devem ir impressas no documento fisico)

Em relação ao SAF/T propriamente dito, a documentação está disponivel aqui.

Sim, vais ter de ler essas portarias todas, de fio a pavio, e possivelmente com ajuda de fiscalistas, advogados, e reuniões com pessoas da Autoridade Tributária.

Em relação ao cálculo das chaves, o mesmo deve respeitar as regras definidas na Portaria nº363/2010
 
Última edição:
A ideia é criar um sistema de faturação completo em PHP.

O grande problema é na geração da estrutura do arquivo SAF/T.

Percebi que tem os parametros a serem assinados. A dúvida é a seguinte. Quais são estes parametros? A assinatura será convertida em base_64 e arquivada no campo "hash" do XML de cada fatura.
 
Tens de ler as portarias, está lá quais os parâmetros que alimentam o RSA para gerar a hash de cada fatura :

1 - O sistema de identificação a que se refere a alínea b) do artigo 3.º deve utilizar o algoritmo de cifra assimétrica RSA, recebendo como argumento os seguintes dados concatenados, pela ordem indicada, com o separador «;» (ponto e vírgula), que constituem a mensagem a assinar com a chave privada:

a) A data de criação da factura, do documento equivalente ou do talão de venda [campo 4.1.4.6 - data do documento de venda (JnvoiceDate) do SAF-T (PT)];

b) A data e hora da última alteração da factura, do documento equivalente ou do talão de venda [campo 4.1.4.9 - data de gravação do documento (SystemEntryDate) do SAF-T (PT)];

c) O número da factura, do documento equivalente ou do talão de venda [campo 4.1.4.1 - identificação única do documento de venda (JnvoiceNo) do SAF-T (PT)];

d) O valor da factura, do documento equivalente ou do talão de venda [campo 4.1.4.15.3 - total do documento com impostos (GrossTotal) do SAF-T (PT)];

e) A assinatura gerada no documento anterior, da mesma série [campo 4.1.4.3 - chave do documento (Hash) do SAF-T (PT)].

Já agora, porquê PHP?
 
Mesmo que não tenha custos..

A AT vai aceitar certificar um software open-source?

Existe a questão das chaves de encriptação, das versões do software, do compromisso de honra que as software houses assinam aquando da certificação, etc e tal...
 
Olá pessoal muito bom dia!

Em continuidade ao comentário, consegui montar o XML do SAF-T. E passou no Validador de Homologação(1), mas não a assinatura HASH.

(1) https://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/Pages/certificacao-de-software.aspx

Em uma pesquisa, encontrei o site a seguir (2), que determina os campos de assintura.

(2) https://invisibleflamelight.wordpre...ada-a-assinatura-dos-documentos-certificados/

De acordo com o Link (2), o conteúdo a ser assinado seria: "2020-07-02;2020-07-02T08:15:04;FT 01P2020/1;13.35"

– InvoiceDate (data do documento)
– SystemEntryDate (data/hora da gravação do documento)
– InvoiceNo (tipo/código do documento, série do documento, nº documento)
– GrossTotal (total do documento incluindo impostos)
– Hash (hash do documento anterior, o faz com que exista um encadeamento entre todas as assinaturas)

Como não existe fatura anterior, deixei em branco o Hash, conforme orientação.

Acontece que ao passar o XML pelo validador, o arquivo encontra-se integro mas falhou na assinatura.

É esse posso que peço ajuda, alguém pode ajudar?

O script da assinatura é:

$data = "2020-07-02;2020-07-02T08:15:04;FT 01P2020/1;13.35";
$keycert = "https://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/Documents/Chave_Privada.txt";

function set_signature($keycert,$data) {
$privkey = file_get_contents($keycert);
openssl_sign($data, $crypted, $privkey,OPENSSL_ALGO_SHA1);
return base64_encode($crypted);
}

Importante: Estou preparando o ambiente do GitHub para publicar e o endereço vou postar aqui.
- Comentários não construtivos, por favor nem postem!
- Este projeto vai enriquecer a comunidade que sobre este assunto é bem restrita a grandes empresas que dominam o mercado.
- O projeto Opensource não será homologado (até porque não se pode disponibilizar a Chave Privada como é óbvio), mas com base nele vou homologar para uso próprio e emitir minhas Faturas como Trabalhador Independente e não precisar pagar um montante para terceiros.
 
Olá pessoal,

Como a intenção é solucionar para todos o sistema de faturação. Descobri o problema que deixo para vocês a solução.

2020-07-02;2020-07-02T08:15:04;FT 01P2020/1;13.35

1) Como não existia um documento anterior para o hash, este valor deve ser vazio, portanto, acrescentado o separador «;» ao final da string para assintura.
2) Importante é se o seu GrossTotal está no formato 0.00 mesmo se for um valor inteiro, deve ser acrescentado o .00 no final.

2020-07-02;2020-07-02T08:15:04;FT 01P2020/1;13.35;

Desta forma irei avançar no sistema e conforme dito, postar no GitHub uma versão básica do sistema.
 
Mas qual o objetivo do projeto?

É que só desenvolver algo que gere um ficheiro SAF/T, não serve para nada... (para além de ganhar cabelos brancos,.... )

Tens de ter todo um software de facturação, que tem de ser certificado pela Autoridade Tributária. (e é este que calcula as chaves de cada documento, no momento de emissão do mesmo, pois estas devem ir impressas no documento fisico)

Em relação ao SAF/T propriamente dito, a documentação está disponivel aqui.

Sim, vais ter de ler essas portarias todas, de fio a pavio, e possivelmente com ajuda de fiscalistas, advogados, e reuniões com pessoas da Autoridade Tributária.

Em relação ao cálculo das chaves, o mesmo deve respeitar as regras definidas na Portaria nº363/2010
pessoal preciso de ajuda eu e o meu colegas estamos a criar um sistema de gestão faturação e financia em C# ele esta no fim so que estamos condificuldade de implementa o ficheiro SAFT.
 
pessoal preciso de ajuda eu e o meu colegas estamos a criar um sistema de gestão faturação e financia em C# ele esta no fim so que estamos condificuldade de implementa o ficheiro SAFT.
 
como disse estou a desenvolve um sistema comercial ... Ralativamente estou com dificuldade de implementa o saft ... eu tenho a estrutura do saft em xml... mas n vejo como integra ele no soft ... ou n sei como fazer o soft gerar o SAFT ...
Mas o que não consegues fazer? Ler/manipular o ficheiro? Gerar novo xml?
 
Atenção que esse programa tem de ser certificado, o que aposto que tem custos

A certificação acho que não tem custos.

Mesmo que não tenha custos..

A AT vai aceitar certificar um software open-source?

Existe a questão das chaves de encriptação, das versões do software, do compromisso de honra que as software houses assinam aquando da certificação, etc e tal...

Acho que esta é a questão principal. E é aqui que o projecto morre por terra, porque o software só pode ser certificado para uma empresa e há uma série de documentação que existe que tem que se assinar, como os compromissos de honra que o @Red_Beret falou e bem.

A ideia é boa mas no final a AT vai impedir que isto ande para a frente.

Quando a própria AT vai lançar de forma gratuita um software de faturação não sei que sentido fará lançar uma versão open-source de um software semelhante.
 
Back
Topo