Jump to content

All Activity

This stream auto-updates

  1. Yesterday
  2. Boas, Alguém sabe como posso implementar a Autenticação GOV com PHP? Pela a pesquisa que fiz não encontrei nenhuma API. Cumps
  3. Boas Como tive n de problemas com o PDF, não continuei, nunca fiz nada em xml. Desculpa, mas não te consigo ajudar.
  4. Boa tarde, Também estou com muitas dificuldades com a DigitalSign tenho exemplos para assinar PDF mas para XML não, podes ajudar? Obrigado
  5. Last week
  6. marcolopes

    AT - questões legais

    Comunicado da ASSOFT Olá, muito boa tarde! A espera foi longa, mas temos, por fim, informações da Autoridade Tributária sobre os temas que têm preocupado a nossa comunidade, designadamente no que tem que ver com a Plataforma de submissão do SAF-T (PT) para pré-preenchimento da IES e da comunicação obrigatória das séries usadas nos documentos de faturação. Em baixo compilamos as novidades por temas. Como sempre, saiba que pode usar os nossos canais de comunicação para nos fazer chegar o seu feedback e as suas dúvidas. Se ainda não fez o seu registo no Slack, clique aqui para concluir a sua inscrição. Boas férias! ✈️🌴⛱️ Autoridade Tributária e Aduaneira Plataforma de submissão do SAF-T (PT) para pré-preenchimento da IES Como é sabido, com o desenvolvimento dos trabalhos no âmbito do Projeto de Lei 655/XIV/2 pela Assembleia da República, as reuniões regulares de testes na plataforma foram suspensos. Pese embora o projeto de lei tenha sido objeto de revogação, o que se traduz na prática na manutenção deste projeto tal e qual como está previsto na legislação inicial, a AT iniciou um conjunto de rondas com vista à melhoria do processo inicial. Foram desenvolvidos esforços em conjunto com a Comissão de Normalização Contabilística para a criação de um novo plano de contas mais harmonizado com o esquema de Taxonomias. A espectativa é que o novo plano de contas seja publicado durante o mês de Setembro. Da mesma forma, será aprovado e publicado num novo esquema de Taxonomias pelo Governo. 📅 Prevê-se que os testes possam ser retomados em Setembro, sendo que, nesta fase, vão incidir acima de tudo na capacidade de envio de ficheiros descaracterizados (CryptoSAF-T), pelo menos até à definição quanto ao novo esquema de Taxonomias e ao novo plano de contas. 💬 No canal #wg-ies-pt do Slack encontra mais informação sobre este tema. e-Fatura O e-Fatura vai ser atualizado de forma a suportar um conjunto mais alargado de informação, designadamente informação que hoje só é possível ser transmitida através do ficheiro SAF-T (PT), mas também com vista a dar suporte às novas funcionalidades introduzidas pelas obrigações de comunicação de séries de documentos, IVAucher, entre outras. ⚠️ A nova versão não será compatível com as anteriores. Até janeiro de 2022 ambas estarão disponíveis. A partir de Janeiro apenas a nova versão ficará disponível. 📅 As regras e a documentação técnica da nova versão ficarão disponíveis durante o mês de Setembro. Por agora é prematuro dizer se as alterações vão atuar somente ao nível da transmissão de documentos de faturação ou se também incidir sobre a transmissão de documentos de transporte. 💬 No canal #wg-saft-pt do Slack encontra mais informação sobre este tema. Comunicação das séries e ATCUD Depois de uma longa espera, existe, por fim, uma definição quanto à comunicação das séries usadas pelos sistemas para a emissão de documentos. O novo serviço ficará disponível em breve e permitirá que os utilizadores possam comunicar esta informação à AT diretamente no Portal das Finanças ou por webservice. ⚠️ Pese embora ainda não esteja decidido, é possível que nos casos em que a comunicação seja feita por webservice venham a existir um conjunto diferenciado de endpoints: um para a generalidade dos casos e outros específicos para os casos em que existe auto-faturação (com acordo prévio e sem acordo prévio). 📅 Durante esta semana ficará disponível a documentação técnica e os elementos de apoio ao desenvolvimento e à realização de testes. Espera-se que a plataforma entre em produção por volta de Outubro, dando um período de 3 meses para a comunicação das séries que se vão utilizar durante o ano de 2022. 💬 No canal #wg-saft-pt do Slack encontra mais informação sobre este tema. Nesta fase de testes o vosso feedback é muito importante! Use a plataforma para nos reportar dúvidas e problemas que encontre na plataforma da AT. QRCode O mecanismo obrigatório de comunicação das séries introduz a obrigação de impressão de um QRCode em todos os documentos com relevância fiscal. Pese embora este processo esteja numa fase experimental, vai tornar-se igualmente obrigatório a partir de 1 de janeiro de 2022. ⚠️ Gostávamos de chamar à atenção para alguns dos erros mais frequentes: Inexistência de NIF Falta de campos obrigatórios Espaços fiscais inválidos Tipo de documento não identificado Datas não preenchidas 💬 No canal #wg-saft-pt do Slack encontra mais informação sobre este tema. Aproveite para esclarecer as suas dúvidas e dar feedback sobre eventuais problemas que esteja a encontrar. Segurança Social Ao abrigo do PRR - Plano de Recuperação e Resiliência, a Segurança Social vai dar início ao desenvolvimento de um projeto de Simplificação do Ciclo Contributivo. Este projeto tem como missão principal a eliminação de um conjunto de atos declarativos que hoje são impostos aos trabalhadores independentes e às empresas. Com a implementação definitiva destas medidas, os contribuintes ficarão dispensados de um conjunto de obrigações declarativas, assim, como do envio de informação redondante para múltiplos organismos da Administração Pública, que passará a ser automaticamente processada pela própria Segurança Social. A sua concretização vai depender do envolvimento de um conjunto alargado de organismos públicos, responsáveis pela disponibilização da informação, e, obviamente, dos parceiros tecnológicos que passarão a conseguir integrar com os sistemas da Segurança Social através de serviços e protocolos mais ágeis. A Segurança Social está aberta a propostas e ideias! Podem submeter as vossas ideias aqui e consultar as ideias já submetidas neste link. Participe! 💬 No Slack, pode usar o canal #wg-dmr-pt para debater e saber mais sobre este tema.
  7. Boa tarde, Gostava que me ajudassem. Passo a explicar a minha dúvida. O programa permite criar documentos fiscais (factura simplificada "FS" por exemplo) e posteriormente é gravada na base de dados (bd) com o respectivo tipo de documento, série, número de documento e a hashkey. Quando é "gerado" um novo número de documento de uma determinada série também é actualizada a tabelas das séries na bd (o campo do último número gerado na série). O programa é usado por vários utilizadores finais, o que pode coincidir estarem vários utilizadores a criar documentos. Sabem que para gerar a hashkey preciso do número do documento e não podem ser números repetidos, como devo fazer? Colocar a lógica (gerar número, gerar hashkey...) na minha classe do documento e depois gravar ou na minha camada de acesso a bd? Colocando tudo dentro de uma transaction? Obrigado!
  8. M6

    Ajuda com diagrama

    Podes usar o LibbreOffice Draw para fazeres o diagrama.
  9. Glauber Guttierges

    Ajuda com diagrama

    Olá meu primeiro post aqui, peço que movam para a área correta caso esteja errada. estou precisando fazer um diagrama de blocos através desse algorítimo, se alguém puder me ajudar algoritmo "idade homem e mulher" var somahv_mn, prod_hn_mv, mulher1, mulher2, homem1, homem2: inteiro mulhern, mulherv, homemn, homemv: inteiro inicio // Seção de Comandos escreval( "Este programa compara a idade entre 4 pessoas") escreval( "Digite a idade da 1ª mulher") leia(mulher1) escreval("Digite a idade da 2ª mulher") leia(mulher2) escreval("Digite a idade do 1º homem") leia(homem1) escreval("Digite a idade do 2º homem") leia(homem2) se(mulher1 < mulher2) entao mulhern:=mulher1 mulherv:=mulher2 senao mulherv:= mulher1 mulhern:= mulher2 fimse se(homem1 < homem2) entao homemn:= homem1 homemv:= homem2 senao homemv:= homem1 homemn:= homem2 fimse somahv_mn := homemv+ mulhern prod_hn_mv:= homemn*mulherv escreval( "A soma das idades do homem mais velho com a mulher mais nova é ") escreval( somahv_mn) escreval( "O produto das idades do homem mais novo com a mulher mais velha é ") escreval( prod_hn_mv) FIMALGORITMO agradecido
  10. marcolopes

    AT - questões legais

    Eu interpreto a LEI dessa forma... Tanto FE como FE-AP estão abrangidos por esta medida... Era isso que tinha como certo. No entanto a "saphety" (na pessoa do seu departamento comercial) jura que estes adiamentos se aplicam APENAS à FE-AP!!! Portanto... cada um faz a sua interpretação conforme os interesses! 😄
  11. americob

    AT - questões legais

    Algumas entidades da Administração Pública estão a aplicar, por analogia, estas prorrogações para efeitos da FE-AP. Não me parece que tenham razão, mas que dá jeito ... dá!
  12. chesser

    AT - questões legais

    O Despacho N.º 260/2021, do SEAAF, de 27 de Julho, vem dizer que as facturas em pdf são consideradas facturas electrónicas até 31 de Dezembro de 2021.
  13. Jose Sanches

    CMD (chave móvel digital) assinar PDF

    Olá Gus, O meu último post no stackoverflow já resolve o problema que referes. Voltei a questionar a AMA com o exemplo no sentido de aferir se estava tudo bem. Passei o PDF pelo código que me valida a assinatura (mas ainda em triângulo laranja) Estou a ultimar uma versão com a inclusão de um PDF temporário (para incluir a assinatura vazia e obter o HASH), depois é invocar o endpoint da AMA (PRE + HASH) obter o HASH assinado e inclui-lo no PDF (criar uma novo ficheiro) assinado. Nota: se tudo estiver bem... actualizo o código no github com uma versão web funcional
  14. Fala Wagner, Estou como esse mesmo problema, poderia dar uma força?
  15. Cerzedelo

    Mostrar Calendario (Fullcalendar)

    Em primeiro lugar verifique se tem a folha de estilo do fullcalendar carregada. O ficheiro com a extensão css. Caso contrário não conseguirá ver o calendário pois falta o layout. Em segundo verifique se os caminhos para os ficheiros js e css estão correctos. Em terceiro utilize as ferramentas de programação do seu browser (normalmente acede primindo a tecla F12) e verifique quais os erros e as suas descrições para melhor perceber o problema.
  16. Que dados é que queres? Podes consultar portais de imobiliário para obter informação.
  17. Boa tarde, escolhi uma PAP sobre realizar uma aplicação móvel de uma imobiliária, alguém me pode dar uma ajuda neste tópico. Será que me podem fornecer dados ou alguma coisa semelhante para eu analisar, estou feito, não sei o que me deu que nem sei o que fazer.... obrigada Toda a ajuda é bem finda
  18. Ana Silva

    Estrutura de Jogadores

    Eu tenho de fazer estruturas para armazenar jogadores e jogos a minh duvida é como posso fazer para eliminar os jogadores presentes no ficheiro de texto alem do mais preciso ordenar a tabela de jogadores e editar a parte do peso e numero de jogos Será que alguem pode ajudar? O meu código é o seguinte: #include <stdio.h> #include <stdlib.h> #include <string.h> FILE * dados_jogador; FILE * dados_jogo; FILE * dados_gerais; int n_jogos = 0; int n_jogadores = 0; struct dados_jogador { int numero; char nome[12]; int dia; int mes; int ano; float altura; float peso; int n_jogos; }; typedef struct dados_jogador jogador; void ler_jogador(jogador listaJogadores[]){ printf("numero de jogadores: %d\n", n_jogadores); if(n_jogadores == 0){ dados_jogador = fopen("dados_jogador.txt", "a"); fprintf(dados_jogador, "Num Nome Data de nascimento Altura Peso Numero de Jogos\n"); fclose(dados_jogador); } if(n_jogadores >= 0 && n_jogadores <= 12){ printf("\nDADOS DO JOGADOR:\n"); listaJogadores[n_jogadores].numero = n_jogadores; printf("nome:"); scanf("%s", listaJogadores[n_jogadores].nome); printf("data de nascimento (do tipo dd/mm/aaaa):"); scanf("%d/%d/%d", &listaJogadores[n_jogadores].dia, &listaJogadores[n_jogadores].mes, &listaJogadores[n_jogadores].ano); if ((listaJogadores[n_jogadores].dia >= 01 && listaJogadores[n_jogadores].dia <= 30) && (listaJogadores[n_jogadores].mes == 04 || listaJogadores[n_jogadores].mes == 06 || listaJogadores[n_jogadores].mes == 9 || listaJogadores[n_jogadores].mes == 11)){ } if (listaJogadores[n_jogadores].dia >= 01 && listaJogadores[n_jogadores].dia <= 31 && (listaJogadores[n_jogadores].mes == 01 || listaJogadores[n_jogadores].mes == 03 || listaJogadores[n_jogadores].mes == 05 || listaJogadores[n_jogadores].mes == 07 || listaJogadores[n_jogadores].mes == 8|| listaJogadores[n_jogadores].mes == 10 || listaJogadores[n_jogadores].mes == 12) && listaJogadores[n_jogadores].ano >= 1583){ } if (listaJogadores[n_jogadores].dia == 29 && listaJogadores[n_jogadores].dia == 2 && (listaJogadores[n_jogadores].ano % 400 == 0 || listaJogadores[n_jogadores].ano % 4 == 0 && listaJogadores[n_jogadores].ano % 100 != 0)){ } if ((listaJogadores[n_jogadores].dia >= 01 && listaJogadores[n_jogadores].dia <= 28) && (listaJogadores[n_jogadores].mes == 2)){ } if (listaJogadores[n_jogadores].dia <= 00 || listaJogadores[n_jogadores].dia > 31){ printf("dia invalido\n"); ler_jogador(listaJogadores); } if (listaJogadores[n_jogadores].mes <= 00 || listaJogadores[n_jogadores].mes > 12){ printf("mes invalido\n"); ler_jogador(listaJogadores); } if (listaJogadores[n_jogadores].ano < 1583){ printf("ano invalido\n"); ler_jogador(listaJogadores); } printf("altura:"); scanf("%f", &listaJogadores[n_jogadores].altura); if(listaJogadores[n_jogadores].altura <= 0){ ler_jogador(listaJogadores); } printf("peso:"); scanf("%f", &listaJogadores[n_jogadores].peso); if(listaJogadores[n_jogadores].peso <= 0){ ler_jogador(listaJogadores); } printf("numero de jogos:"); scanf("%d", &listaJogadores[n_jogadores].n_jogos); if(listaJogadores[n_jogadores].n_jogos < 0){ ler_jogador(listaJogadores); } dados_jogador = fopen("dados_jogador.txt", "a"); fprintf(dados_jogador, "%d \t\t%s \t\t %02d/%02d/%d\t\t %.2f\t\t %.2f\t\t %d\n", listaJogadores[n_jogadores].numero, listaJogadores[n_jogadores].nome, listaJogadores[n_jogadores].dia, listaJogadores[n_jogadores].mes, listaJogadores[n_jogadores].ano, listaJogadores[n_jogadores].altura, listaJogadores[n_jogadores].peso, listaJogadores[n_jogadores].n_jogos); fclose(dados_jogador); dados_gerais = fopen("dados_gerais.dat", "ab"); fwrite (&listaJogadores, sizeof(struct dados_jogador), 1 , dados_gerais); fclose(dados_gerais); n_jogadores++; } if(n_jogadores > 12){ printf("maximo de jogadores:12\n"); } } void consultar_jogador(jogador listaJogadores[]){ dados_jogador=fopen("dados_jogador.txt","r"); //para abrir os ficheiros para ler while(fgets(listaJogadores[n_jogadores].nome, 200, dados_jogador)!= NULL){ printf("%s", listaJogadores[n_jogadores].nome); } fclose(dados_jogador); } void eliminar_jogador(jogador listaJogadores[]) { int numero; printf("Jogadores existentes: \n"); consultar_jogador(listaJogadores); printf("Qual numero do jogador que deseja eliminar:"); scanf("%d", &numero); for(int i=numero;i<n_jogadores;i++){ listaJogadores[numero] = listaJogadores[numero+1]; dados_jogador = fopen("dados_jogador.txt", "w+"); fprintf(dados_jogador, "Num Nome Data de nascimento Altura Peso Numero de Jogos\n%d \t\t%s \t\t %02d/%02d/%d\t\t %.2f\t\t %.2f\t\t %d\n", listaJogadores[n_jogadores].numero, listaJogadores[n_jogadores].nome, listaJogadores[n_jogadores].dia, listaJogadores[n_jogadores].mes, listaJogadores[n_jogadores].ano, listaJogadores[n_jogadores].altura, listaJogadores[n_jogadores].peso, listaJogadores[n_jogadores].n_jogos); fclose(dados_jogador); } n_jogadores--; } void editar_jogador(jogador listaJogadores[]){ int num; printf("Jogadores existentes: \n"); consultar_jogador(listaJogadores); printf("Qual numero do jogador que deseja editar:"); scanf("%d", &num); printf("Peso:"); scanf("%f", &listaJogadores[num].peso); printf("Numero de jogos: "); scanf("%d", &listaJogadores[num].n_jogos); } void procurar_jogador(jogador listaJogadores[]){ char numero; printf("Numero do jogador a procurar: "); scanf("%d", numero); printf("Nome: %s\nData de nascimento: %02d/%02d/%d\nAltura: %.2f\nPeso:%.2f\nNumero de jogos:%d", listaJogadores[numero].nome, listaJogadores[numero].dia, listaJogadores[numero].mes, listaJogadores[numero].ano, listaJogadores[numero].altura, listaJogadores[numero].peso, listaJogadores[numero].n_jogos); } struct dados_jogo { int dia; int mes; int ano; char local[50]; char adversario[50]; char resultado[50]; }; typedef struct dados_jogo jogo; void ler_jogo(jogo listaJogos[]) { printf("numero de jogos: %d\n",n_jogos); if(n_jogos == 0){ dados_jogo = fopen("dados_jogo.txt", "a"); fprintf(dados_jogo, "Data Local Adversario Resultado "); fclose(dados_jogo); } if(n_jogos >= 0 && n_jogos < 100){ printf("\nDADOS DO JOGO:\n"); printf("data (do tipo dd/mm/aaaa):"); scanf("%d/%d/%d",&listaJogos[n_jogos].dia, &listaJogos[n_jogos].mes, &listaJogos[n_jogos].ano); if ((listaJogos[n_jogos].dia >= 01 && listaJogos[n_jogos].dia <= 30) && (listaJogos[n_jogos].mes == 04 || listaJogos[n_jogos].mes == 06 || listaJogos[n_jogos].mes == 9 || listaJogos[n_jogos].mes == 11)){ } if (listaJogos[n_jogos].dia >= 01 && listaJogos[n_jogos].dia <= 31 && (listaJogos[n_jogos].mes == 01 || listaJogos[n_jogos].mes == 03 || listaJogos[n_jogos].mes == 05 || listaJogos[n_jogos].mes == 07 || listaJogos[n_jogos].mes == 8|| listaJogos[n_jogos].mes == 10 || listaJogos[n_jogos].mes == 12) && listaJogos[n_jogos].ano >= 1583){ } if (listaJogos[n_jogos].dia == 29 && listaJogos[n_jogos].dia == 2 && (listaJogos[n_jogos].ano % 400 == 0 || listaJogos[n_jogos].ano % 4 == 0 && listaJogos[n_jogos].ano % 100 != 0)){ } if ((listaJogos[n_jogos].dia >= 01 && listaJogos[n_jogos].dia <= 28) && (listaJogos[n_jogos].mes == 2)){ } if (listaJogos[n_jogos].dia <= 00 || listaJogos[n_jogos].dia > 31){ printf("dia invalido\n"); ler_jogo(listaJogos); } if (listaJogos[n_jogos].mes <= 00 || listaJogos[n_jogos].mes > 12){ printf("mes invalido\n"); ler_jogo(listaJogos); } if (listaJogos[n_jogos].ano < 1583){ printf("ano invalido\n"); ler_jogo(listaJogos); } printf("local:"); scanf("%s", listaJogos[n_jogos].local); printf("adversario:"); scanf("%s", listaJogos[n_jogos].adversario); printf("resultado:"); scanf("%s", listaJogos[n_jogos].resultado); dados_jogo = fopen("dados_jogo.txt", "a"); fprintf(dados_jogo, "\n%02d/%02d/%d %s %s %s", listaJogos[n_jogos].dia, listaJogos[n_jogos].mes, listaJogos[n_jogos].ano, listaJogos[n_jogos].local, listaJogos[n_jogos].adversario, listaJogos[n_jogos].resultado); fclose(dados_jogo); dados_gerais = fopen("dados_gerais.dat", "ab"); fwrite (&listaJogos, sizeof(struct dados_jogo), 1 , dados_gerais); fclose(dados_gerais); n_jogos++; } if(n_jogos >= 100){ printf("limite excedido de jogos:100\n"); } } void ordenar_Nome(jogador listaJogadores[]){ } void contabilizar(jogo listaJogos[]){ } int main(int argc, char *argv[]) { jogador listaJogadores[12]; jogo listaJogos[100]; char opcao; dados_jogador=fopen("dados_jogador.txt","r"); //para abrir os ficheiros para ler while(fgets(listaJogadores[n_jogadores].nome, 200, dados_jogador)!= NULL){ n_jogadores++; } if(n_jogadores != 0){ n_jogadores--; } fclose(dados_jogador); dados_jogo=fopen("dados_jogo.txt","r"); //para abrir os ficheiros para ler while(fgets(listaJogos[n_jogos].local, 200, dados_jogo)!= NULL){ n_jogos++; } if(n_jogadores != 0){ n_jogos--; } fclose(dados_jogo); do{ printf(" MENU INICIAL:\n"); printf("Escolha uma das opcoes:\n"); printf("1- Inserir jogador \n"); printf("2- Editar jogador \n"); printf("3- Procurar jogador \n"); printf("4- Eliminar jogador \n"); printf("5- Inserir jogo \n"); printf("6- Contabilizar \n"); printf("7- Sair do programa \n"); fflush(stdin); printf("opcao:"); scanf("%c", &opcao); switch(opcao){ case '1': ler_jogador(listaJogadores); break; //escolha das opcoes e suas funcoes case '2': editar_jogador(listaJogadores); break; case '3': procurar_jogador(listaJogadores); break; case '4': eliminar_jogador(listaJogadores); break; case '5': ler_jogo(listaJogos); break; case '6': contabilizar(listaJogos); break; case '7': return 0; default: printf("Opcao invalida\n");break; } } while (opcao != '7'); return 0; } O conteudo do ficheiro de texto dos jogadores é : Num Nome Data de nascimento Altura Peso Numero de Jogos 0 Peter 12/07/1970 1.70 70.00 2 1 Luis 21/08/1980 1.80 80.00 4 2 Kyle 13/08/1980 1.70 78.00 2 3 John 03/03/1970 1.79 80.00 2 4 Hugo 02/09/1980 1.70 68.00 4 Desde já agradeço a vossa ajuda
  19. Gus

    CMD (chave móvel digital) assinar PDF

    Sim, isso é verdade, só em produção vai ser possível confirmar que está tudo a funcionar. O meu problema parece que está a ser ao aplicar o hash devolvido pela AMA, o PDF final fica sempre com o erro de que foi modificado ou corrompido desde que foi colocado o placeholder da assinatura. Tinha visto aqui que também estavas com alguns problemas, mas parece que conseguiste que funcionasse: https://stackoverflow.com/questions/67889692/java-itext7-deferred-with-sign-prefix-producing-invalid-signed-pdf É possível partilhares o código da versão que achas que funciona? Ou este último que colocaste neste tópico funciona?
  20. klasss

    Mostrar Calendario (Fullcalendar)

    Olá a todos, Ando a uns tempos a adiar o problema que estou a ter, pois não estou a conseguir visualizar o calendario do fullcalendar no meu projeto. As vezes a falar com pessoas consigo desbloquear o meu problema. <script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.1.0/fullcalendar.min.js"></script> <div class="container"> <br /> <h1 class="text-center text-primary"><u>How to Use Fullcalendar in Laravel 8</u></h1> <br /> <div id="calendar"></div> </div> <script> $(document).ready(function() { $('#calendar').fullCalendar({ events: events, }) }); </script>
  21. Earlier
  22. OK, obrigado a todos. Não sei onde fui buscar esta ideia.
  23. Jose Sanches

    CMD (chave móvel digital) assinar PDF

    Ola Gus, Esta ação não é fácil. A falta de documentação técnica assim como a falta de exemplos torna tudo mais complicado. No exemplo que disponibilizei (o mais recente), assina o PDF e o Adobe Reader dá a mensagem "A validade da assinatura é desconhecida" (rectângulo laranja). Questionei a AMA com o exemplo, e a informação que obtive foi: "No ambiente de pré-produção é natural que não seja verde - isso apenas em produção." Mas.... não sei
  24. M6

    Como coloco o site responsivo de forma mais otimizada

    A forma mais fácil e rápida que conheço é usar Bootstrap.
  25. Claro que se pode imprimir um PDF de uma fatura eletrónica, até para arquivar junto com as outras na contabilidade. A questão é a validade dessa impressão. Na minha opinião o documento válido é o PDF assinado, já que qualquer impressão dele será sempre uma cópia. A maior parte das empresas nem sequer têm noção disso, mas a partir do momento em que aceitem faturas eletrónicas (PDF assinado ou EDI), seja de que empresa for (EDP. Vodafone, Via Verde, etc.) passam a estar obrigadas a manter um Arquivo Digital, pelo menos desses documentos, nos termos do DL 28/2019.
  26. Gus

    CMD (chave móvel digital) assinar PDF

    Olá José, Conseguiste chegar a uma versão que funcione e resulte no PDF assinado? Estou também a tentar assinar PDFs usando a CMD com os serviços da AMA e não consigo obter um ficheiro válido.
  27. Podes sempre imprimir, mas agora em caso de auditorias, faturas em papel são desconsideradas a favor de faturas recebidas e armazenadas em via electrónica, creio eu. Simplesmente não têm validade.
  1. Load more activity
×
×
  • 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.