Jump to content

AT - questões legais


Recommended Posts

nunopicado
Em 11/02/2021 às 19:26, Miguel Frias disse:

Só se o QRcode estiver muito mal impresso, como hoje vi numa factura de farmácia que até desalinha segmentos do proprio QR!!

Impressora de agulhas? Ou térmica?

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

Link to post
Share on other sites
  • Replies 5.9k
  • Created
  • Last Reply

Top Posters In This Topic

  • nunopicado

    1135

  • CrominhO

    680

  • marcolopes

    535

  • americob

    331

Top Posters In This Topic

Popular Posts

Boa noite pessoal... Esta mensagem é para todos em geral, e para ninguém em particular. Andamos todos stressados, e é compreensível. Não tem sido um ano fácil para ninguém, seja pela pandemia e

a comunicação das séries foi adiada para o próximo ano, qrcode mantem-se em janeiro. - ATCUD a 01/01/2022 - Comunicação das séries a 01/07/2021 https://info.portaldasfinancas.gov.pt/pt/

Não sei se já tinha sido referido, mas já foi publicada a primeira FAQ acerca do QRCode.

FernandoPereira

Boa noite,

Alguém aqui já implementou a geração / impressão de QrCode em Foxpro?

Tenho uma app, ainda em Fox, e vou começar com a implementação dos QrCodes na mesma, e estou a ver as opções que tenho para librarias.

Se alguém conhecer alguma agradeço.

 

Obrigado

Fernando Pereira

Link to post
Share on other sites
Miguel Frias
49 minutes ago, nunopicado said:

Impressora de agulhas? Ou térmica?

Parece-me termica. E essas terão o problema de que com o tempo a tinta "evapora"

Link to post
Share on other sites
nunopicado
Agora, Miguel Frias disse:

Parece-me termica. E essas terão o problema de que com o tempo a tinta "evapora"

Eu perguntei porque fui a uma farmácia há dias cujo talão já inclui o QRCode (com cerca de 1.5 cm de lado), mas impresso em impressora de agulhas, o que dá uma qualidade tão boa, tão boa, que é impossível ler seja o que for.

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

Link to post
Share on other sites
davdew05
Em 16/02/2021 às 21:12, FernandoPereira disse:

Boa noite,

Alguém aqui já implementou a geração / impressão de QrCode em Foxpro?

Tenho uma app, ainda em Fox, e vou começar com a implementação dos QrCodes na mesma, e estou a ver as opções que tenho para librarias.

Se alguém conhecer alguma agradeço.

 

Obrigado

Fernando Pereira

Bom dia,

A solução que implementei foi com o QRCoder alterado pelo código daqui no fórum para criar um QRCode em byte (https://drive.google.com/file/d/1OAxrfoNcBHuWPC3gwciuwa-yaZN3tVRG/view?usp=sharing) e depois fiz um wapper para fazer métodos que a aplicação precisava. Geração de QRCODE, mais ou menos assim:

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Runtime;
using System.Drawing;
using QRCoder;
using System.Text;
namespace VisualLinxAT
{
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]
    public class QRCodeMaker
    {
        private string _stringToEncode;
        private string _eccLevel; 
        public string StringToEncode { 
            set{_stringToEncode=value;}
        }
        
        public string EccLevel { 
            set{_eccLevel = value;}
        }
        private QRCodeGenerator.ECCLevel GetEccLevel()
        {
            switch(_eccLevel.ToUpper()){
                case "M":
                    return QRCodeGenerator.ECCLevel.M;
                case "Q":
                    return QRCodeGenerator.ECCLevel.Q;
                case "H":
                    return QRCodeGenerator.ECCLevel.H;
                case "L":
                    return QRCodeGenerator.ECCLevel.L;    
            }
            return QRCodeGenerator.ECCLevel.M;
        }
        public Bitmap CreateQRCodeAT(int pixelPerModule)
        {
            Bitmap qrCodeImage;
            using (QRCodeGenerator qrGenerator = new QRCodeGenerator())
            {
                int version = _stringToEncode.Length<180 ? 9 : -1;
                Byte[] bytes = Encoding.ASCII.GetBytes(_stringToEncode);
                using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(bytes, GetEccLevel(),version))
                {
                    using (QRCode qrCode = new QRCode(qrCodeData))
                    {
                        qrCodeImage = qrCode.GetGraphic(pixelPerModule);
                    }
                }
             }
            return qrCodeImage;
        }
        public void SaveToFileBMP(Bitmap qrcode,string filePath, double codeSize)
        {
            int pixelSize = Cm2Pixel(codeSize,qrcode.HorizontalResolution);
            System.Drawing.Bitmap newBmp;
            if(codeSize!=0)
                newBmp = new System.Drawing.Bitmap(qrcode,pixelSize,pixelSize);
            else
                newBmp = qrcode;
            newBmp.Save(filePath,System.Drawing.Imaging.ImageFormat.Bmp);
        }
   }

}

Como no relatórios do Fox é necessário ter um ficheiro BMP para aparecer, fiz uma serie de procedure, mas a chamada a minha dll é:

    qrCode = CREATEOBJECT("Nome do objecto complus.QRCodeMaker")
    qrCode.EccLevel="M"
    qrCode.StringToEncode=QRCodeString
    qrCode.SaveToFileBMP(qrCode.CreateQRCodeAT(2),FileName ,0)
    IF FILE(FileName)
        RETURN .t.    
    ENDIF

   return .f.

Não esquecer de registar a DLL, senão ela não será acessível no FOX.

Espero ter ajudado.

Abraço.

Link to post
Share on other sites
FernandoPereira
Em 17/02/2021 às 10:36, davdew05 disse:

Bom dia,

A solução que implementei foi com o QRCoder alterado pelo código daqui no fórum para criar um QRCode em byte (https://drive.google.com/file/d/1OAxrfoNcBHuWPC3gwciuwa-yaZN3tVRG/view?usp=sharing) e depois fiz um wapper para fazer métodos que a aplicação precisava. Geração de QRCODE, mais ou menos assim:


using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Runtime;
using System.Drawing;
using QRCoder;
using System.Text;
namespace VisualLinxAT
{
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]
    public class QRCodeMaker
    {
        private string _stringToEncode;
        private string _eccLevel; 
        public string StringToEncode { 
            set{_stringToEncode=value;}
        }
        
        public string EccLevel { 
            set{_eccLevel = value;}
        }
        private QRCodeGenerator.ECCLevel GetEccLevel()
        {
            switch(_eccLevel.ToUpper()){
                case "M":
                    return QRCodeGenerator.ECCLevel.M;
                case "Q":
                    return QRCodeGenerator.ECCLevel.Q;
                case "H":
                    return QRCodeGenerator.ECCLevel.H;
                case "L":
                    return QRCodeGenerator.ECCLevel.L;    
            }
            return QRCodeGenerator.ECCLevel.M;
        }
        public Bitmap CreateQRCodeAT(int pixelPerModule)
        {
            Bitmap qrCodeImage;
            using (QRCodeGenerator qrGenerator = new QRCodeGenerator())
            {
                int version = _stringToEncode.Length<180 ? 9 : -1;
                Byte[] bytes = Encoding.ASCII.GetBytes(_stringToEncode);
                using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(bytes, GetEccLevel(),version))
                {
                    using (QRCode qrCode = new QRCode(qrCodeData))
                    {
                        qrCodeImage = qrCode.GetGraphic(pixelPerModule);
                    }
                }
             }
            return qrCodeImage;
        }
        public void SaveToFileBMP(Bitmap qrcode,string filePath, double codeSize)
        {
            int pixelSize = Cm2Pixel(codeSize,qrcode.HorizontalResolution);
            System.Drawing.Bitmap newBmp;
            if(codeSize!=0)
                newBmp = new System.Drawing.Bitmap(qrcode,pixelSize,pixelSize);
            else
                newBmp = qrcode;
            newBmp.Save(filePath,System.Drawing.Imaging.ImageFormat.Bmp);
        }
   }

}

Como no relatórios do Fox é necessário ter um ficheiro BMP para aparecer, fiz uma serie de procedure, mas a chamada a minha dll é:


    qrCode = CREATEOBJECT("Nome do objecto complus.QRCodeMaker")
    qrCode.EccLevel="M"
    qrCode.StringToEncode=QRCodeString
    qrCode.SaveToFileBMP(qrCode.CreateQRCodeAT(2),FileName ,0)
    IF FILE(FileName)
        RETURN .t.    
    ENDIF

   return .f.

Não esquecer de registar a DLL, senão ela não será acessível no FOX.

Espero ter ajudado.

Abraço.

Bom dia,

Vou fazer uns testes.

Obrigado!

Link to post
Share on other sites

Boa Tarde:

Alguem sabe se a aplicação da AT - EFatura dexou de ler QRCodes. É que os mesmos QRCodes que leu há uns dias atrás hoje nem reaje e já fiz o update!

Será que usam a Cloud para interpretar o QRCode?

Obrigado

 

Link to post
Share on other sites
antseq
30 minutos atrás, hobbit disse:

Boa Tarde:

Alguem sabe se a aplicação da AT - EFatura dexou de ler QRCodes. É que os mesmos QRCodes que leu há uns dias atrás hoje nem reaje e já fiz o update!

Será que usam a Cloud para interpretar o QRCode?

Obrigado

Ainda agora testei a versão que já tinha V1.0.3 continua a ler como antes e a comunicar como antes.

Inclusive voltei a tentar registar o mesmo documento de um outro dia e deu a mensagem "documento já registado"

Link to post
Share on other sites
21 horas atrás, antseq disse:

Ainda agora testei a versão que já tinha V1.0.3 continua a ler como antes e a comunicar como antes.

Inclusive voltei a tentar registar o mesmo documento de um outro dia e deu a mensagem "documento já registado"

Boa Tarde obrigado. Já consegui mas o que me parece é que a APP não funciona sozinha. Ainda sujeito a validação ela precisa de Serviços do Google Play ou então precisa da localização via protocolo ARP. Após abrir temporariamente as regras de rede ela ficou a funcionar, mesmo fechando depois. A proxima vez que não funcioar irei testar o que precisa para trabalhar!

Link to post
Share on other sites
FernandoPereira
Em 17/02/2021 às 09:36, davdew05 disse:

Bom dia,

A solução que implementei foi com o QRCoder alterado pelo código daqui no fórum para criar um QRCode em byte (https://drive.google.com/file/d/1OAxrfoNcBHuWPC3gwciuwa-yaZN3tVRG/view?usp=sharing) e depois fiz um wapper para fazer métodos que a aplicação precisava. Geração de QRCODE, mais ou menos assim:


using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Runtime;
using System.Drawing;
using QRCoder;
using System.Text;
namespace VisualLinxAT
{
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]
    public class QRCodeMaker
    {
        private string _stringToEncode;
        private string _eccLevel; 
        public string StringToEncode { 
            set{_stringToEncode=value;}
        }
        
        public string EccLevel { 
            set{_eccLevel = value;}
        }
        private QRCodeGenerator.ECCLevel GetEccLevel()
        {
            switch(_eccLevel.ToUpper()){
                case "M":
                    return QRCodeGenerator.ECCLevel.M;
                case "Q":
                    return QRCodeGenerator.ECCLevel.Q;
                case "H":
                    return QRCodeGenerator.ECCLevel.H;
                case "L":
                    return QRCodeGenerator.ECCLevel.L;    
            }
            return QRCodeGenerator.ECCLevel.M;
        }
        public Bitmap CreateQRCodeAT(int pixelPerModule)
        {
            Bitmap qrCodeImage;
            using (QRCodeGenerator qrGenerator = new QRCodeGenerator())
            {
                int version = _stringToEncode.Length<180 ? 9 : -1;
                Byte[] bytes = Encoding.ASCII.GetBytes(_stringToEncode);
                using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(bytes, GetEccLevel(),version))
                {
                    using (QRCode qrCode = new QRCode(qrCodeData))
                    {
                        qrCodeImage = qrCode.GetGraphic(pixelPerModule);
                    }
                }
             }
            return qrCodeImage;
        }
        public void SaveToFileBMP(Bitmap qrcode,string filePath, double codeSize)
        {
            int pixelSize = Cm2Pixel(codeSize,qrcode.HorizontalResolution);
            System.Drawing.Bitmap newBmp;
            if(codeSize!=0)
                newBmp = new System.Drawing.Bitmap(qrcode,pixelSize,pixelSize);
            else
                newBmp = qrcode;
            newBmp.Save(filePath,System.Drawing.Imaging.ImageFormat.Bmp);
        }
   }

}

Como no relatórios do Fox é necessário ter um ficheiro BMP para aparecer, fiz uma serie de procedure, mas a chamada a minha dll é:


    qrCode = CREATEOBJECT("Nome do objecto complus.QRCodeMaker")
    qrCode.EccLevel="M"
    qrCode.StringToEncode=QRCodeString
    qrCode.SaveToFileBMP(qrCode.CreateQRCodeAT(2),FileName ,0)
    IF FILE(FileName)
        RETURN .t.    
    ENDIF

   return .f.

Não esquecer de registar a DLL, senão ela não será acessível no FOX.

Espero ter ajudado.

Abraço.

Boas,

Obrigado pela ajuda, já tenho o BMP a gerar na Dll.

Ainda não testei no Fox, mas já tenho a Dll a gerar o BMP corretamente.

Mais uma vez obrigado pela ajuda!

Fernando Pereira

  • Vote 1
Link to post
Share on other sites
FernandoPereira

Bom dia,

Podem elucidar duas questões?

1. Sempre que leio um QrCode na app das finanças dá o seguinte erro:  "Código QrCode com formato inválido. NIF de emitente inválido."

Isto é por estar a usar o NIF 999999990, ou é mesmo o QrCode que está num formato errado?

 

2. Nos recibos também é para gerar o QrCode, mas estes documentos não são assinados, tanto que no SAFT não tem campo para o Hash.

Como estão a preencher o Hash nos recibos?

 

Obrigado

Link to post
Share on other sites
desconfiado
21 horas atrás, FernandoPereira disse:

Bom dia,

Podem elucidar duas questões?

1. Sempre que leio um QrCode na app das finanças dá o seguinte erro:  "Código QrCode com formato inválido. NIF de emitente inválido."

Isto é por estar a usar o NIF 999999990, ou é mesmo o QrCode que está num formato errado?

 

2. Nos recibos também é para gerar o QrCode, mas estes documentos não são assinados, tanto que no SAFT não tem campo para o Hash.

Como estão a preencher o Hash nos recibos?

 

Obrigado

1 . A app só aceita facturas emitidas em nome do contribuinte registado na app.

2. "Assinatura nos termos da Portaria n.º 363/2010, de 23 de junho. O campo deve ser preenchido com 0 (zero), caso não haja obrigatoriedade de certificação."

Se reparares no SAF-T, na estrutura dos "Payments" nem existe tag para a Hash.

Edited by desconfiado
Link to post
Share on other sites
chesser
21 horas atrás, FernandoPereira disse:

2. Nos recibos também é para gerar o QrCode, mas estes documentos não são assinados, tanto que no SAFT não tem campo para o Hash.

Como estão a preencher o Hash nos recibos?

Eu fiz esta pergunta no e-balcao. Já partilhei aqui a resposta dos srs da AT.

Link to post
Share on other sites
Luís Pontes

Boa tarde a todos,

finalmente a minha empresa já tem certificado :)
Obrigado a todos os que me ajudaram :)

Uma última questão que surgiu, é mesmo uma curiosidade.

Tenho ideia que estes dois campos InvoiceStatusDate e SystemEntryDate têm que ter sempre a mesma data.

Mas e se por exemplo alguém submeter para aprovação uma factura no dia 01 Março e só no dia seguinte for aprovada? Estará correcto?

<InvoiceStatusDate>2021-03-01T09:18:40</InvoiceStatusDate>
<SystemEntryDate>2021-03-02T20:22:45</SystemEntryDate>

 

Obrigado

Obrigado,

Luís Pontes

Link to post
Share on other sites
rdolxd
Em 05/02/2021 às 10:05, rdolxd disse:

Bom dia pessoal, acerca da faturação eletrónica,
como é que estão a implementar nos vossos sistemas?
como é que estão a garantir o não repúdio? estão a usar um broker tipo a saphety para esse processo?
ou alguém aqui já fez uma espécie de implementação sobre isso? se sim qual seria a principal ideia aqui para garantir o não repúdio?
a nível de autenticidade, estão apenas a assinar PDFs? (A AT já me disse que basta)

Estou com algumas duvidas sobre que caminho seguir.
Obrigado desde já.

Boas pessoal, desculpem ainda insistir sobre este assunto, mas ainda não consegui avançar sobre isto.

Quando perguntei isto indicaram me o post Norma europeia de fatura eletrónica: eInvoicing - Diretiva 2014/55/EU, mas esse é sobre a FE-AP certo? eu neste momento estou mais é focado para já na faturação eletrónica só e apenas e gostava de entender melhor estes passos para finalmente conseguir implementar.

Obrigado

Link to post
Share on other sites
nunopicado
2 horas atrás, Luís Pontes disse:

Boa tarde a todos,

finalmente a minha empresa já tem certificado :)
Obrigado a todos os que me ajudaram :)

Uma última questão que surgiu, é mesmo uma curiosidade.

Tenho ideia que estes dois campos InvoiceStatusDate e SystemEntryDate têm que ter sempre a mesma data.

Mas e se por exemplo alguém submeter para aprovação uma factura no dia 01 Março e só no dia seguinte for aprovada? Estará correcto?

<InvoiceStatusDate>2021-03-01T09:18:40</InvoiceStatusDate>
<SystemEntryDate>2021-03-02T20:22:45</SystemEntryDate>

 

Obrigado

O SystemEntryDate é a data em que a fatura é criada. No fundo, é a data em que a hash é gerada.
O InvoiceStatusDate é a data da última atualização ao documento. Por norma será a mesma data, mas por exemplo se anularem o documento, fica com a data da anulação.

A aprovação não mexe com nenhum desses campos. Se não está aprovada, não há fatura, no que à AT diz respeito.
Até podes usar o campo para isso internamente, mas na hora que crias a fatura, tens de alterar o campo para a data correta.

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

Link to post
Share on other sites
marcolopes
26 minutes ago, americob said:

Legalmente, a fatura sem papel (PDF sem assinatura), fora da atual situação de pandemia, só pode ser emitida a consumidores finais (não serve para colocar em despesas das empresas, deduzir IVA, etc.) e cada emitente tem de aderir no portal das finanças, no e-Balcão.

Podes explicar melhor esta parte? "fora da actual situação" cada emitente tem de aderir no portal das finanças? E numa situação normal?

The simplest explanation is usually the correct one

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

Link to post
Share on other sites
marcolopes
Posted (edited)
3 hours ago, americob said:

Por assinatura eletrónica qualificada, entende-se assinatura da empresa emissora que tem de ser comprada. Pode ainda ser usada a assinatura do Gerente com poderes e para o efeito, procura Serviço de Assinatura de Faturas Eletrónicas (SAFE) (autenticacao.gov.pt) que é gratuito para uma empresa durante 2 anos, mas pago 20 Euros cada 2anos para os anos seguintes ou se for para mais que uma empresa.

Por curiosidade, alguém aqui está a pensar implementar o SAFE (cartão do cidadão) como forma de possibilitar assinatura digital?

Temos recebido algumas propostas para parcerias para oferecer serviços de assinatura em bulk, ou venda de certificados qualificados (que são CARÍSSIMOS!)

Um software com a implementação SAFE seria uma mais valia enorme! https://www.autenticacao.gov.pt/serviço-de-assinatura-de-faturas-eletrónicas-safe-

Quote

README.txt

A documentação técnica do Serviço de Assinatura de Faturas Eletrónicas (SAFE) está disponível em:
   https://cloud.ama.gov.pt/index.php/s/2CV8yEJLLOxwjQA - password 12345
        - SAFE Documento de integração
        - SAFE Guia de Fluxos Complementares
        - Guidelines de integração
        - API
    
    
O procedimento para integração com OAuth e a documentação necessária está disponível em:
   https://cloud.ama.gov.pt/index.php/s/NfWvh2ERmJ22dFd - password 12345

 

Edited by marcolopes
  • Vote 1

The simplest explanation is usually the correct one

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

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.