Ir para o conteúdo

Rankings


Conteúdo Popular

A mostrar o conteúdo com mais reputação desde 21-12-2018 em Mensagens

  1. 3 pontos
    Deve ser mais ou menos isso A meu ver é assim... Como é que faço para não pagar faturas? (Pensamento do estado) - Bem digo que só passo a receber faturas de uma determinada maneira. Ficheiros UBL 2.1 e forneço pouca informação sobre os mesmos. -Se ainda assim, existirem malucos que consigam ou tentem fazer os bem ditos ficheiros, não lhes digo como é enviam, nem para onde enviam. Resultado Se não me enviarem faturas, não as tenho de pagar 😂🤣😂🤣
  2. 2 pontos
    É isso que eu acho que vai acontecer... será uma das opções (não entendo é porque, sem existirem certezas, está toda a gente a contratar "brokers" intermediários...) No "Guia de Comunicações para a Transmissão de Faturas Eletrónicas para a FE-AP" do ESPAP (GATEWAY DO ESTADO) é dito que "Estes envios podem ser feitos diretamente no Portal SaphetyDOC ou via outras redes, as quais devem estar interligadas com a Saphety"
  3. 2 pontos
    https://www.espap.gov.pt/Documents/servicos/sp_fin/v1.6.7_Manual_Fornecedores_1.0_Comunicacoes.pdf É o serviço da Saphety? é! A própria ESPAP diz que "Atualmente, a solução FE-AP está ligada a um Broker para a recepção dos documentos electrónicos", mas eu quero-me ligar ao Gateway FE-AP. Portanto, é da responsabilidade do ESPAP fornecer as credenciais, ou ter um canal de comunicação directo com o seu broker para prestar as informações aos fornecedores da AP! O email no documento "Guia de Documentos de Faturação Eletrónica" é SPFIN.B2AP@espap.pt Isto está tudo ainda muito verde... eles admitem ainda estar em PILOTO. A pergunta continua a mesma: todas as entidades públicas terão de usar o gateway do estado (actualmente o BROKER Saphety) ou podem fazer ligação a outros Brokers? O que eu leio no "Guia de Comunicações para a Transmissão de Faturas Eletrónicas para a FE-AP" é que "Estes envios podem ser feitos diretamente no Portal SaphetyDOC ou via outras redes, as quais devem estar interligadas com a Saphety" Portanto, se o governo legislar sobre o GATEWAY do ESTADO como sendo o serviço implementado pelo ESPAP, qualquer outra rede (BROKER) terá de se ligar à rede do ESPAP (saphety). Ora, quem já estiver ligado a esse "broker" está safo, pois está dentro de portas... (posso fazer like no meu post?) lol
  4. 1 ponto
    Já meti Online @Vitor Pereira http://www.portugal-heat.com/pap/APISender.rar http://www.portugal-heat.com/pap/Encryptor.rar O @brunotoira também tinha código em Delphi, se eu achar actualizo, e o @nunopicado salvo erro tb tinha feito uma DLL depois meto.
  5. 1 ponto
    A AT já disponibilizou um novo certificado de testes. Este expira em Junho de 2019.
  6. 1 ponto
    O "querido" aqui é o @brunotoira que escreveu todos estes Sources, nós só temos que o adaptar ao jeito e necessidade de cada um
  7. 1 ponto
    Boas, Queres alguma coisa deste género? (Adicionando a tool de 'FolderBrowserDialog' ao form) FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog(); folderBrowserDialog1.SelectedPath = AppDomain.CurrentDomain.BaseDirectory; folderBrowserDialog1.ShowDialog();
  8. 1 ponto
    O certificado de Testes (TesteWebservices.pfx) para aceder aos webservices em modo de desenvolvimento / testes estão expirados desde dia 29 de Dezembro de 2018 9:19:03. Enquanto a AT não emitir e publicar o novo não há ambiente de testes para ninguem.
  9. 1 ponto
    Enviei para todos por Webtransfer e instruções por Mail Se faltar a alguém enviar endereço de mail que envio
  10. 1 ponto
    Este artigo no site da Primavera pode ajudar a perceber quais os prazos e para quem: https://pt.primaverabss.com/pt/fatura-eletronica-nos-contratos-publicos/
  11. 1 ponto
    Pormenores à parte, o que interpreto dos prazos: - Os contraentes públicos são obrigados a receber as facturas em formato electrónico a partir de 18 de abril de 2019 (nada impede de receber outros formatos) - Se não for Estado nem instituto público (é o caso de autarquias, regiões autónomas, Banco de Portugal, os hospitais Entidades Públicas Empresariais e empresa publicas ) o prazo é alargado para 18 de Abril de 2020, (estamos a falar da obrigação de receber em formato electrónico) - Em todo o caso até 17 de Abril de 2020 podem receber em formato diferente (ou seja como recebem até agora)
  12. 1 ponto
    Em relação aos prazos o meu entendimento, que não sei se o mais correto é o seguinte: Entre organismos publicos o prazo é a partir de 18 Abril 2019 Para todos os outros, micro, pequenas e médias empresas o prazo é a partir de 31 Dezembro 2020, tendo em conta o ponto 4 4 - O prazo referido no número anterior é alargado até 31 de dezembro de 2020 para as micro, pequenas e médias empresas, definidas nos termos da Recomendação 2003/361/CE, da Comissão Europeia, de 6 de maio de 2003, e para as entidades públicas enquanto entidades cocontratantes. 5 - As empresas e entidades referidas nos números anteriores, que utilizem mecanismos de faturação diferentes dos previstos no artigo 299.º-B do Código dos Contratos Públicos até ao termo dos prazos estabelecidos no presente artigo, não podem, em caso algum, ser objeto de discriminação por parte dos contraentes públicos no âmbito dos procedimentos previstos no referido Código.
  13. 1 ponto
    Bem pessoal, eis o que destaco a ler na diagonal, (mas o ideal seria "debatermos" as nossas interpretações por forma a chegarmos a uma conclusão lol :D ) Ninguém diria que iria existir uma proliferação de requisitos e formatos lool 🤣 ... ESPAP. Ninguém diria que teria de haver um Servidor Centralizado :-) Passa a ser tb AP2AP Também ninguem diria que deveria ser gradual lol, o problema foi as instituições que já se adiantaram e andaram a enviar emails com info ao fornecedores, espero que agora enviem nova Info a corrigir. A alteração da Data para o previsto na Directiva Europeia (1 de Abril de 2019) Por ultimo, mas não menos importante, como não foi nada revogado, foi alterado, Artº 9, Alinea 5, Empresas não podem recusar quem ainda lhe emita Facturas em Papel :-) Foi o que eu entendi do decreto... mas gostava de ouvir opiniões para ver se interpretei mal :-)
  14. 1 ponto
    Sim foi adiado para Abril de 2019 e pode ser alargado até Abril de 2020 artº 9, Al 1) e 2) :-)
  15. 1 ponto
    Boas, Parece que não há gateway público... mas sim voluntários!!! - talvez vá para a lista... Para o ano há mais! Bom ano a todos e não se esqueçam de visitar por esses dias uns traumatizados ( Marco, eu, etc...) ao hospital! Abraço
  16. 1 ponto
    Já foi publicado em DR o DL 123/2018 - https://dre.pt/web/guest/home/-/dre/117514514/details/maximized
  17. 1 ponto
    Para valores numéricos Case var of 1..20:begin ... end; Para caracteres Case var of 'c'..'g': begin ... end; Para if Var c:char; If c in ['c'..'g'] then begin end;
  18. 1 ponto
    @nunopicado, Dito e feito! Aqui está, Unit DelayInterrupt; Interface Const PARA_SEGUNDOS = 1000; SEG = TRUE; SEGS = TRUE; SEGUNDO = TRUE; SEGUNDOS = TRUE; MILI = FALSE; MILIS = FALSE; MILISSEG = FALSE; MILISSEGS = FALSE; MILISSEGUNDO = FALSE; MILISSEGUNDOS = FALSE; Type Conjunto = Set Of Char; Function Delay(Tempo: LongInt; ParaSegundos: Boolean): Boolean; OverLoad; Function Delay(Tempo: LongInt; TeclasPermitidas: Conjunto; ParaSegundos: Boolean): Boolean; OverLoad; Implementation Uses Crt; Function Delay(Tempo: LongInt; ParaSegundos: Boolean): Boolean; OverLoad; Begin Delay := False; If (ParaSegundos = True) Then Tempo := Tempo * PARA_SEGUNDOS; For Tempo := Tempo DownTo 1 Do Begin Delay(1); If (KeyPressed = True) Then Begin ReadKey(); Delay := True; Break; End; End; End; Function Delay(Tempo: LongInt; TeclasPermitidas: Conjunto; ParaSegundos: Boolean): Boolean; OverLoad; Begin Delay := False; If (ParaSegundos = True) Then Tempo := Tempo * PARA_SEGUNDOS; For Tempo := Tempo DownTo 1 Do Begin Delay(1); If (KeyPressed = True) Then Begin If (UpCase(ReadKey()) In TeclasPermitidas = True) Then Begin Delay := True; Break; End; End; End; End; End. Pode ser que tenha como eu melhorar esse código, mas não sei, estou aberto a dicas e opniões.
  19. 1 ponto
    Só agora reparei nisto que saiu no Conselho de Ministros de ontem. Quer dizer que ainda vai passar pelo Prof. Marcelo para promulgar e depois publicar. Com jeitinho, ainda é publicado (no inicio de Janeiro) no Suplemento ao Diário da Republica de 31 de Dezembro de 2018 para entrar em vigor no dia 1 de Janeiro 2019.
  20. 1 ponto
    Não encontras porque ainda não existe (o Expresso ainda não faz leis). Foi aprovado em Conselho de Ministros, mas falta promulgar pelo Prof. Marcelo e publicar em Diário da Republica, só depois é que vale. Se ainda vai sair antes de 1 de Janeiro, ninguém sabe a não ser quem promulga. Se calhar sai depois mas com efeitos retroativos.
  21. 1 ponto
    Depende. Se estiveres a falar da linguagem de programação para o browser, a vantagem é ser a única linguagem disponível. Não há desvantagens porque não há concorrência nesse aspecto. Se estiveres a falar como linguagem de servidor (Node.js), já depende. O JavaScript é uma linguagem que não utiliza threads, logo não tens situações de concorrência directas. Funciona por eventos, onde não há utilização de recursos quando não existem eventos para processar. A desvantagem é que, se pretendes utilizar grandes máquinas, provavelmente não vais utilizar todos os recursos. Mas se fores utilizar muitas máquinas pequenas (ou lambdas), muitas vezes consegues ter mais performance. Outra desvantagem é que a linguagem é interpretada, como muitas outras linguagens web, e, apesar das optimizações que podem ir aparecendo, nunca conseguirás obter a performance de uma linguagem compilada. Mas essa desvantagem é facilmente combatida com utilização de dependências compiladas para as partes da tua plataforma que necessitem de alta eficiência.
  22. 1 ponto
    Olá xambas. O que quero dizer é que fiz o POST do XML diretamente para o Endpoint. Uma coisa importante com o servidor de testes é que, da minha experiência, só funciona com o user de testes (por favor confirma). 'at_username' => '599999993/37', 'at_password' => 'testes1234' Peguei no teu XML, fiz algumas alterações e consegui que o teu XML passasse. Aqui estão as diferenças entre ambos: https://www.diffchecker.com/tmTqCSnF (antigo do lado direito e novo do lado esquerdo). Repara que, apesar de tu veres um erro genérico (Internal Server Error) quer dizer que no fundo há um erro mais detalhado que não consegues ver. Possivelmente esse erro é aquele que indiquei da estrutura do XML. Sugiro também que o programa que gera o XML retire espaços em branco e newlines do XML http://www.webtoolkitonline.com/xml-minifier.html <?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:doc="https://servicos.portaldasfinancas.gov.pt/sgdtws/documentosTransporte/"><S:Header><wss:Security xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext"><wss:UsernameToken><wss:Username>xxxxxxxxx/1</wss:Username><wss:Password>N4rXr+dB2ukThO75sSUblA==</wss:Password><wss:Nonce>IOcKjb7C5YI9vCtHQQ/eh4gOLnwMpYIloKoQx3qRNfmuy5CKorxKg4Sgy7BKNzS8IbtRlXjlMNY8rywYVoNbji4tsRy+6FsTM6tOP5P/f39xPUXG23B2xqHFX7LQ9ZLb1WBsdwA7G3EPl49gQCVQF5QWIzbu9TrkVraVR5ACWJx2h6YlXlOT/IO7KpN+z6htRhvWR2VrXwd7Vuku+eOxQSPfq/V+hLszWLwcJJnNQjuVsGDFV0Q/PPW9roN+6yIGaeATQbc07OtZdYLENz0gGDW7isdmttpFWhZ9t85Bsge8JDmWyl/XI9AV9ZULL1EZ+euWRfYmvboSGcLTvlUoeQ==</wss:Nonce><wss:Created>UL4jE55BGauN4C0eDKgA6a0Iq9gB8UE1VAvk0nXpKdM=</wss:Created></wss:UsernameToken></wss:Security></S:Header><S:Body><doc:envioDocumentoTransporteRequestElem><TaxRegistrationNumber>123456789</TaxRegistrationNumber><CompanyName>SHM Eng.</CompanyName><CompanyAddress><Addressdetail>Rua Tal, Sitio Tal</Addressdetail><City>São Jorge da Murronhanha</City><PostalCode>4444-555</PostalCode><Country>PT</Country></CompanyAddress><DocumentNumber>GT SERIE0/99990</DocumentNumber><MovementStatus>N</MovementStatus><MovementDate>2017-03-01</MovementDate><MovementType>GT</MovementType><CustomerTaxID>599999993</CustomerTaxID><CustomerAddress><Addressdetail>RUA JOSÉ PEREIRA DO NASCIMENTO, Nº 51 LUANDA</Addressdetail><City>LUANDA</City><PostalCode>4444-555</PostalCode><Country/></CustomerAddress><CustomerName>CASAIS ANGOLA, ENGENHARIA E CONSTRUÇÃO SA</CustomerName><AddressTo><Addressdetail>Endereço1 Endereço2</Addressdetail><City>Localidade</City><PostalCode>4444-555</PostalCode><Country>PT</Country></AddressTo><AddressFrom><Addressdetail>Rua Tal, Sitio Tal</Addressdetail><City>São Jorge da Murronhanha</City><PostalCode>4444-555</PostalCode><Country>PT</Country></AddressFrom><MovementEndTime>2018-06-13T17:38:00</MovementEndTime><MovementStartTime>2018-06-13T13:38:00</MovementStartTime><VehicleID>LD-50-36-EW</VehicleID><Line><ProductDescription>C35/45 S4 D20</ProductDescription><Quantity>7</Quantity><UnitOfMeasure>M3</UnitOfMeasure><UnitPrice>0</UnitPrice></Line></doc:envioDocumentoTransporteRequestElem></S:Body></S:Envelope> Experimenta efetuar as alterações no teu programa que gera o XML para ficar de acordo com aquilo que eu também alterei. Se quiseres experimentar algo que funcione coloquei numas páginas atrás código PHP para as guias de transporte.
  23. 1 ponto
    Olá a todos! Estamos a tentar usar os Webservices referentes ao STADA Exportação. Finalmente hoje enviaram-nos um certificado para o sistema de testes sem o WSDL (apesar de já o ter pedido) e foi assim que cheguei a este fórum através do nome do ficheiro do certificado. Alguém tem experiência com o STADA Exportação ou consegue arranjar o WSDL? Para adiantar a parte da autenticação estou a tentar enviar umas faturas para o ambiente de testes e estou sempre a obter o famoso <?xml version='1.0' ?> <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'> <env:Body> <env:Fault> <faultcode>env:Client</faultcode> <faultstring>Internal Error</faultstring> </env:Fault> </env:Body> </env:Envelope> Hoje estive na luta e consegui finalmente enviar alguma coisa para o servidor de testes. Basicamente a luz acendeu quando passei o parâmetro encoding com UTF-8 nas opções de encoding do SoapClient e devolveu um erro diferente de Internal Error. A partir daí foi dar marteladas atrás de marteladas, ler coisas neste tópico, tratar da autenticação e embrulhar Para quem esteja a chegar agora e trabalhe com PHP fica aqui o código com o SoapClient e phpseclib (não usa mcrypt que foi descontinuado nas versões mais recentes e é considerado inseguro). Este exemplo é para as guias de transporte. Eu vou estar a trabalhar com outros webservices que não estão no site das finanças referentes ao STADA Exportação portanto espero que a autenticação seja igual!! Neste caso estou a usar composer para instalar a dependência do phpseclib portanto terão de adaptar ao vosso código! 1. Obter os certificados do Portal das Finanças. 2. Pegar no ficheiro TesteWebservices.pfx, converter para o formato PEM e copiar o resultado para uma pasta acessível pelo vosso script (no meu caso a pasta certs). A password é TESTEwebservice. O comando irá retirar a password do ficheiro portanto não será necessária no código. openssl pkcs12 -in TesteWebservices.pfx -out TesteWebservices.pem -nodes 3. Copiar o ficheiro da chave pública da AT que está no link indicado no número 1 para a pasta do vosso script. 4. Personalizar o código em baixo com as vossas credenciais, caminhos e endpoints no array $options. <?php require 'vendor/autoload.php'; use phpseclib\Crypt\AES; use phpseclib\Crypt\Random; use phpseclib\Crypt\RSA; use phpseclib\File\X509; $transport = new stdClass(); $transport->TaxRegistrationNumber = '599999993'; $transport->CompanyName = 'Nome Empresa Lda'; $transport->CompanyAddress = new stdClass(); $transport->CompanyAddress->Addressdetail = 'Rua da Empresa, 123'; $transport->CompanyAddress->City = 'Maia'; $transport->CompanyAddress->PostalCode = '4470-263'; $transport->CompanyAddress->Country = 'PT'; $transport->DocumentNumber = bin2hex(openssl_random_pseudo_bytes(8)); $transport->MovementStatus = 'N'; $transport->MovementDate = date('Y-m-d'); $transport->MovementType = 'GT'; $transport->CustomerName = 'Nome Cliente Lda'; $transport->CustomerTaxID = 599999993; $transport->CustomerAddress = new stdClass(); $transport->CustomerAddress->Addressdetail = 'Local'; $transport->CustomerAddress->City = 'Lisboa'; $transport->CustomerAddress->PostalCode = '2775-089'; $transport->CustomerAddress->Country = 'PT'; $transport->AddressFrom = new stdClass(); $transport->AddressFrom->Addressdetail = 'Local carga'; $transport->AddressFrom->City = 'Maia'; $transport->AddressFrom->PostalCode = '4470-263'; $transport->AddressFrom->Country = 'PT'; $transport->AddressTo = new stdClass(); $transport->AddressTo->Addressdetail = 'Local entrega'; $transport->AddressTo->City = 'Lisboa'; $transport->AddressTo->PostalCode = '2775-089'; $transport->AddressTo->Country = 'PT'; $transport->VehicleID = '00-00-KK'; $transport->MovementStartTime = date('Y-m-d\TH:i:s', mktime(date('H') + 1, date('i'), 0, date('m'), date('d'), date('Y'))); $transport->MovementEndTime = date('Y-m-d\TH:i:s', mktime(date('H') + 5, date('i'), 0, date('m'), date('d'), date('Y'))); $transport->Line = []; $transport->Line[] = (function () { $line = new stdClass(); $line->ProductDescription = 'prod1'; $line->Quantity = 1; $line->UnitOfMeasure = 'Kg'; $line->UnitPrice = 11; return $line; })(); $transport->Line[] = (function () { $line = new stdClass(); $line->ProductDescription = 'prod2'; $line->Quantity = 1; $line->UnitOfMeasure = 'Kg'; $line->UnitPrice = 12; return $line; })(); $wsdl = 'wsdl/documentosTransporte.wsdl'; $options = [ 'local_cert' => 'certs/TesteWebservices.pem', 'encoding' => 'utf-8', 'soap_version' => SOAP_1_2, 'at_username' => '599999993/37', 'at_password' => 'testes1234', 'at_public_key' => 'certs/ChavePublicaAT.cer', 'location' => 'https://servicos.portaldasfinancas.gov.pt:701/sgdtws/documentosTransporte', 'uri' => 'https://servicos.portaldasfinancas.gov.pt:701/sgdtws/documentosTransporte', ]; $client = new SoapClientAT($wsdl, $options); var_dump($client->envioDocumentoTransporte($transport)); /** * Class SoapClientAT */ class SoapClientAT extends SoapClient { /** * @var array|null */ private $options = null; /** * SoapClientAT constructor. * @param string $wsdl * @param array $options */ public function __construct($wsdl, $options) { $this->options = $options; parent::__construct($wsdl, $options); } /** * @param DOMDocument $document * @return DOMElement */ private function createHeaderNode($document) { $publicKey = $this->options['at_public_key']; if (is_file($publicKey)) { $publicKey = file_get_contents($publicKey); } $key = Random::string(16); $certificate = new X509(); $certificate->loadX509($publicKey); $rsa = new RSA(); $rsa->loadKey($certificate->getPublicKey()); $rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1); $nonce = $rsa->encrypt($key); $cipher = new AES(AES::MODE_ECB); $cipher->setKey($key); $password = $cipher->encrypt($this->options['at_password']); $created = $cipher->encrypt(gmdate('Y-m-d\TH:i:s\Z')); $usernameToken = $document->createElement('wss:UsernameToken'); $usernameTokenData = [ 'wss:Username' => $this->options['at_username'], 'wss:Password' => base64_encode($password), 'wss:Nonce' => base64_encode($nonce), 'wss:Created' => base64_encode($created), ]; foreach ($usernameTokenData as $tag => $value) { $usernameToken->appendChild($document->createElement($tag, $value)); } $security = $document->createElement('wss:Security'); $security->appendChild($usernameToken); $security->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:wss', 'http://schemas.xmlsoap.org/ws/2002/12/secext' ); $header = $document->createElement('env:Header'); $header->appendChild($security); return $header; } /** * @param $request * @return string */ private function embedHeader($request) { $document = new DOMDocument(); $document->preserveWhiteSpace = true; $document->loadXML($request); $body = $document->getElementsByTagName('Body')->item(0); $header = $this->createHeaderNode($document); $envelope = $document->getElementsByTagName('Envelope'); $envelope->item(0)->insertBefore($header, $body); // Must change the namespace of the Envelope tag to match the one specified in the WSDL otherwise we'll get // an HTTP 500 Error with the text "Internal Error" $envelope->item(0)->setAttributeNS( 'http://www.w3.org/2000/xmlns/', 'xmlns:env', 'http://schemas.xmlsoap.org/soap/envelope/' ); return $document->saveXML(); } /** * @param string $request * @param string $location * @param string $action * @param int $version * @param int $one_way * * @return string */ public function __doRequest($request, $location, $action, $version, $one_way = 0) { $request = $this->embedHeader($request); return parent::__doRequest($request, $location, $action, $version, $one_way); } } Cumprimentos, Ricardo
  24. 1 ponto
    Independentemente de já teres ultrapassado a questão que te levou a abrir o tópico, acho que tens um erro de modelagem na base de dados. Não tens/deves criar colunas deves sim ter uma tabela com o valor de cada viga para cada coordenada.4 colunas resolvem o problema: matrix(id da viga; coordenada x; coordenada y; valor) Esta estrutura é a correta e contempla todas as tuas necessidade, independentemente do tamanho necessário das matrizes.
  25. 1 ponto
    Boas. Para resolveres o teu problema (se bem o compreendi) tens duas abordagens clássicas. Fazes uma introespeção ao modelo e vês quais os tipos de dados. Ou seja, vais ler os metadados da tabela para saberes quais as colunas que existem, o seu nome e tipo de dados. Usas uma tabela como meta-modelo, por exemplo, do tipo "Chave", "Valor".
×

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.