Jump to content

Norma europeia de fatura eletrónica: eInvoicing - Diretiva 2014/55/EU


Recommended Posts

rubenAlves

Afinal temos xsd ou não temos? Já estou farto de procurar e ainda não encontrei nada.

Obrigado a quem me conseguir ajudar nisso.

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

Top Posters In This Topic

  • marcolopes

    131

  • CrominhO

    92

  • desconfiado

    65

  • JorgeRocha

    55

Top Posters In This Topic

Popular Posts

Ao contrário do passado com as guias de transporte e faturas, quem precisar de exemplo e implementação da Fatura Eletrónica XML em UBL que diga. Com validador incluído.

OK malta, ainda pensei que isto ia lá depois de esfumarem um pouco, mas estou a ver que não... Daqui a tempos, alguém, quem sabe um de vocês, vai precisar pesquisar uma cena qualquer no tópico, e o q

Sabem o que vos digo,  já comuniquei com eles pela(s) Empresa(s), super simpáticos, mas nem um Sim nem um Não, foi um NIN. Por enquanto é grátis e depois logo se vê.  Já comuniquei a título

marcolopes
5 minutes ago, rubenAlves said:

Afinal temos xsd ou não temos? Já estou farto de procurar e ainda não encontrei nada.

Obrigado a quem me conseguir ajudar nisso.

Tens aqui as classes XSD: https://github.com/marcolopes/dma/tree/master/org.dma.services.espap/UBL-2.1

Tens aqui um projecto de exemplo em como construir o objecto XML a partir das classes compiladas em JAVA (XMLBeans) e até uma tentativa de comunicação com o webservice da eSPAP: https://github.com/marcolopes/dma/blob/master/org.dma.services.espap/src/org/dma/services/espap/test/CTMessageServiceTest.java

Sobre as extensões CIUS-PT, ainda não cheguei lá!

Edited by marcolopes

The simplest explanation is usually the correct one

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

Link to post
Share on other sites
desconfiado
Posted (edited)

Os webservices e endpoints utilizados pela espap podem ser consultados através do swagger aqui Swagger UI .

São públicos mas para testar é necessário ter credenciais. Pelo menos dá para consultar os webservices utilizados.

O manual de comunicação também é publico (penso eu) e pode ser obtido aqui Guia Transmissao Documentos Eletronicos Solucao FE-AP.

 

 

Claro que para conseguir desenvolver têm que ter um cliente, fornecedor de alguma entidade publica, que faça o registo na eSpap e forneça as credenciais. Aqui é que a eSpap falha. Deveria ser possivel ás software-houses pedir credenciais de teste para poderem desenvolver as suas soluções.

Espero que ajude.

 

PS: Quem precisar de um exemplo de ficheiro XML  CIUS-PT podem consultar o disponibilizado pela Saphety aqui Saphety - API Comunicação

Edited by desconfiado
Link to post
Share on other sites
desconfiado
10 horas atrás, marcolopes disse:

Tens aqui as classes XSD: https://github.com/marcolopes/dma/tree/master/org.dma.services.espap/UBL-2.1

Tens aqui um projecto de exemplo em como construir o objecto XML a partir das classes compiladas em JAVA (XMLBeans) e até uma tentativa de comunicação com o webservice da eSPAP: https://github.com/marcolopes/dma/blob/master/org.dma.services.espap/src/org/dma/services/espap/test/CTMessageServiceTest.java

Sobre as extensões CIUS-PT, ainda não cheguei lá!

Não percebi, para que são os certificados?

Os serviços da espap não utilizam certificados (que eu saiba).

Link to post
Share on other sites
kalin

Recebi a resposta pela eSPAP.

Resumo da resposta:

Os operadores privados comunicam entre si, logo não é necessário contratar mais do que um operador privado, basta contratar 1 e este comunica com os restantes.

Vou entrar em contato com a Saphety a ver se isto é verdade.
Alguém tem alguma informação, por parte deste operadores, sobre a comunicação entre cada um?

Link to post
Share on other sites
desconfiado

Também recebi resposta da eSpap e também me disseram algo do género em resposta a uma das questões:

Citação

Os operadores privados não deveriam ser obrigados a comunicar entre eles, de maneira a que uma Empresa não tenha de contratar cada operador conforme o que o cliente deles utiliza?

[espap] Não são obrigado mas atualmente todos têm interoperabilidade.

Não sei se se referem a interoperabilidade com a eSpap ou entre eles. Se é entre eles é uma novidade porque a Saphety não me disse isso. Disseram-me que comunicavam com a eSpap mas não com os outros brokers.

Link to post
Share on other sites
JorgeRocha
9 minutos atrás, desconfiado disse:

Também recebi resposta da eSpap e também me disseram algo do género em resposta a uma das questões:

Não sei se se referem a interoperabilidade com a eSpap ou entre eles. Se é entre eles é uma novidade porque a Saphety não me disse isso. Disseram-me que comunicavam com a eSpap mas não com os outros brokers.

Boas, o mesmo comigo.

Jorge Rocha

Link to post
Share on other sites
americob
1 minuto atrás, kalin disse:

Acho que estes preços são para os nossos clientes subscreverem, os preços de parceiros são outros.

Sim, é isso que eu percebi.

Os nossos clientes, além de nos pagarem para fazermos a ligação do nosso software ao sistema da Saphety (ninguem vai fazer isso de borla), ainda lhes vão ter de lhes pagar, no mínimo, esse valor mensal.

Acho que muitos deles não têm rentabilidade para isso, nomeadamente, padarias, etc. Por este andar, muitos refeitórios de escolas vão ficar sem pão.

  • Vote 2
Link to post
Share on other sites
CrominhO

Bem, 

parece que quem mandou o 1º Email, receberam todos resposta no mesmo dia lol :D... pergunto-me se será porque perceberam que os emails eram iguais e estiveram a estruturar a resposta.

Sim, os privados comunicam entre eles, menos mal. 

Sim os nossos clientes, não têm rentabilidade para pagar a uma Saphety. 

Sim, não sabemos quando irá sair o despacho a definir o valor para a eSPAP. 

E agora a nível pessoal. Não enquanto empresa. Fica por explicar, como foram gastos milhares, milhoes de euros em Brokers privados por entidades Publicas, sem sequer saberem quanto vai ser o valor que o Governo vai definir. :-| deve ser bem alto, para uma empresa publica avançar com milhoes para um situação privada quando o estado está a fazer uma publica. Isto, sim, a nivel pessoal, também provoca revolta. Como ninguem sabe a não ser nós do que se trata, ninguem liga. Não sei se a nivel pessoal não mando email ao Tribunal de Contas e ao MP a questionar esta situação. 

  • Vote 1

As mentes humanas são realmente um local estranho!

Link to post
Share on other sites
americob

Da resposta que recebi da AEP, há algo que me deixou intrigado. Qual será a interpretação do artigo 3º do CCP, em especial a parte realçada:

Citação

CCP

Artigo 3.º - Contraentes públicos

1 - Para efeitos do presente Código, entende-se por contraentes públicos:

  a) As entidades referidas no n.º 1 do artigo anterior (artº 2º abaixo);

  b) As entidades adjudicantes referidas no n.º 2 do artigo anterior sempre que os contratos por si celebrados sejam, por vontade das partes, qualificados como contratos administrativos ou submetidos a um regime substantivo de direito público.

2 - São também contraentes públicos quaisquer entidades que, independentemente da sua natureza pública ou privada, celebrem contratos no exercício de funções materialmente administrativas.

 

Link to post
Share on other sites
desconfiado
Posted (edited)
3 horas atrás, kalin disse:

Acho que estes preços são para os nossos clientes subscreverem, os preços de parceiros são outros.

A Saphety não cobra nada aos parceiros. Também não dá nada.

No inicio havia uma comparticipação mas isso foi repensado e nós, agentes, não recebemos nem pagamos nada.

O que podemos, e devemos e acho que todos o vão fazer porque ninguém trabalha de "borla", é cobrar aos clientes o software de comunicação com os brokers.

 

PS: O governo arranjou uma bela confusão com este assunto e um custo acrescido para as empresas. Somos mesmo governados por gente incompetente!

Edited by desconfiado
Link to post
Share on other sites
marcolopes
3 hours ago, americob said:

Sim, é isso que eu percebi.

Os nossos clientes, além de nos pagarem para fazermos a ligação do nosso software ao sistema da Saphety (ninguem vai fazer isso de borla), ainda lhes vão ter de lhes pagar, no mínimo, esse valor mensal.

Acho que muitos deles não têm rentabilidade para isso, nomeadamente, padarias, etc. Por este andar, muitos refeitórios de escolas vão ficar sem pão.

É isso que o GOVERNO necessita de saber o quanto antes para colocar uma ordem nesta bagunça completa! Tanta coisa para reduzir a carga fiscal, simplificar os serviços, para depois permitir algo que vai encher os bolsos de algumas empresas de intercâmbio de dados e prejudicar os "pequenos" negócios?

The simplest explanation is usually the correct one

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

Link to post
Share on other sites
kalin
1 hora atrás, desconfiado disse:

A Saphety não cobra nada aos parceiros. Também não dá nada.

No inicio havia uma comparticipação mas isso foi repensado e nós, agentes, não recebemos nem pagamos nada.

O que podemos, e devemos e acho que todos o vão fazer porque ninguém trabalha de "borla", é cobrar aos clientes o software de comunicação com os brokers.

 

PS: O governo arranjou uma bela confusão com este assunto e um custo acrescido para as empresas. Somos mesmo governados por gente incompetente!

Tive uma reunião na semana passada com a Saphety onde me foram apresentados vários planos para parceiros, se quiser ser um parceiro tenho que escolher um plano, que vão dos 49€/ano aos 250€/ano e se quiser ainda posso comprar packs de faturas eletrónicas e assinaturas de PDF's para depois revender.

Link to post
Share on other sites
desconfiado
13 horas atrás, kalin disse:

Tive uma reunião na semana passada com a Saphety onde me foram apresentados vários planos para parceiros, se quiser ser um parceiro tenho que escolher um plano, que vão dos 49€/ano aos 250€/ano e se quiser ainda posso comprar packs de faturas eletrónicas e assinaturas de PDF's para depois revender.

É verdade que eles têm esses pacotes de parceiro mas tenho ideia que me disseram que não estavam a cobrar o pacote básico de 49€/ano.

De qualquer forma também é um valor perfeitamente aceitável. Os restantes pacotes já incluem assinaturas electrónicas.

A revenda de packs é que não me informaram. Mas também me parece que eles ainda estão a adaptar-se á situação. Até os testes ainda agora alteraram o swagger de testes.

Link to post
Share on other sites
rubenAlves

Algum tem um exemplo de como consigo comunicar com o API da Saphety em c#?

A documentação deles é toda em Java e não sei o que fazer com aquilo, já tentei encontrar um conversor de Java para c# e nada.

Obrigado.

Link to post
Share on other sites
desconfiado

Partilho abaixo o código completo para comunicar com os serviços Saphety para quem precisar. A documentação é publica por isso não deve haver problema e com certeza muito pessoal agradece.

Visto que existem vários brokers, para já estou a desenvolver para 2, saphety e espap, eu optei por criar uma interface com o essencial e derivar a partir dai para qualquer broker. No entanto quem quiser pode retirar a interface e usar apenas a classe.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualBasic;

public class SaphetyAS2 : AS2Interface
{
    private string _token;
    public string Token
    {
        get
        {
            return _token;
        }
    }
    private string _responseText;
    public string ResponseText
    {
        get
        {
            return _responseText;
        }
    }
    private string _requestID;
    public string RequestID
    {
        get
        {
            return _requestID;
        }
    }
    private string _requestStatus;
    public string RequestStatus
    {
        get
        {
            return _requestStatus;
        }
    }
    private string _errors;
    public string Errors
    {
        get
        {
            return _requestStatus;
        }
    }

    private string server_base_adress = "dcn-solution.saphety.com/Dcn.Sandbox.WebApi";
    // Saphety Invoice Network - Production Environment
    // Const server_base_adress = "dcn-solution.saphety.com/Dcn.Business.WebApi"
    private string TokenUri = "https://" + server_base_adress + "/api/Account/getToken";
    private string SendFileUri = "https://" + server_base_adress + "/api/CountryFormatAsyncRequest/processDocument/{IssuerNIF}/{DocumentType}/PT";
    private string GetStatusByRequestIDUri = "https://" + server_base_adress + "/api/CountryFormatAsyncRequest/{RequestId}";
    private string GetStatusByDocumentKeyUri = "https://" + server_base_adress + "/api/OutboundFinancialDocument/documentFormats/{0}";

    public HttpStatusCode GetToken(string username, string password)
    {
        HttpWebRequest http = (HttpWebRequest)WebRequest.Create(new Uri(TokenUri));

        http.Method = "POST";
        http.AllowAutoRedirect = true;
        http.KeepAlive = true;
        http.PreAuthenticate = false;
        http.SendChunked = false;
        Credentials cred = new Credentials() { UserName = username, Password = password };
        string content = JsonConvert.SerializeObject(cred);
        string contentType = "application/json";

        http.ContentType = contentType;
        http.ContentLength = content.Length;
        SendWebRequest(http, content);
        var resp = HandleWebResponse(http);
        if (resp == System.Net.HttpStatusCode.OK)
        {
            var json_response = JObject.Parse(_responseText);
            if (Convert.ToBoolean(json_response("IsValid")) == true)
                _token = json_response("Data");
        }
        return resp;
    }

    public HttpStatusCode SendFileCIUSPT(string filename, string token, string DocType, string IssuerNIF)
    {
        string Content;
        if (string.IsNullOrEmpty(filename))
            throw new ArgumentNullException("filename");
        try
        {
            using (StreamReader xmlfilereader = new StreamReader(filename))
            {
                Content = xmlfilereader.ReadToEnd();
            }
        }
        catch (Exception ex)
        {
            Interaction.MsgBox("Ocorreu o seguinte erro a ler o ficheiro " + filename + Constants.vbNewLine + ex.Message);
            throw new ArgumentNullException("filename");
        }

        HttpWebRequest http = (HttpWebRequest)WebRequest.Create(new Uri(SendFileUri.Replace("{IssuerNIF}", IssuerNIF).Replace("{DocumentType}", DocType)));

        http.Method = "POST";
        http.UserAgent = "ENIGMA AGENT";
        http.Headers.Add("Authorization", "Bearer " + token);
        http.ContentType = "application/xml";
        http.ContentLength = Content.Length;
        SendWebRequest(http, Content);
        var resp = HandleWebResponse(http);
        if (resp == System.Net.HttpStatusCode.OK)
            _requestID = _responseText;
        return resp;
    }

    public HttpStatusCode GetStatusByRequestID(string ID, string token, string sender)
    {
        HttpWebRequest http = (HttpWebRequest)WebRequest.Create(new Uri(GetStatusByRequestIDUri.Replace("{RequestId}", ID)));
        http.Method = "GET";
        http.UserAgent = "ENIGMA AGENT";
        http.Headers.Add("Authorization", "Bearer " + token);
        // SendWebRequest(http, "")
        var resp = HandleWebResponse(http);
        if (resp == System.Net.HttpStatusCode.OK)
        {
            var json_response = JObject.Parse(_responseText);
            if (Convert.ToBoolean(json_response("IsValid")) == true)
                _requestStatus = json_response("Data")("AsyncStatus");
        }
        return resp;
    }

    public HttpStatusCode GetStatusByDocumentKey(string ID, string token, string requester, string sender, string type, DateTime data)
    {
    }

    private HttpStatusCode HandleWebResponse(HttpWebRequest http)
    {
        try
        {
            HttpWebResponse response = (HttpWebResponse)http.GetResponse();
            using (var reader = new System.IO.StreamReader(response.GetResponseStream(), true))
            {
                _responseText = reader.ReadToEnd();
            }
            response.Close();
            return response.StatusCode;
        }
        catch (Exception ex)
        {
            Interaction.MsgBox("O servidor devolveu um erro: " + Constants.vbNewLine + ex.Message);
        }
    }

    private void SendWebRequest(HttpWebRequest http, byte[] fileData)
    {
        Stream oRequestStream = http.GetRequestStream();
        oRequestStream.Write(fileData, 0, fileData.Length);
        oRequestStream.Flush();
        oRequestStream.Close();
    }

    private void SendWebRequest(HttpWebRequest http, string data)
    {
        StreamWriter oRequestStream = new StreamWriter(http.GetRequestStream(), Encoding.ASCII);
        oRequestStream.Write(data);
        oRequestStream.Close();
    }
}

 

  • Vote 2
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.