From 92c5480b4e75316f5911a6938cfdb7147b95e3a9 Mon Sep 17 00:00:00 2001 From: JoaoDias Date: Wed, 17 Jul 2024 07:46:03 -0300 Subject: [PATCH 01/35] =?UTF-8?q?fix:=20Garantindo=20que=20instancia=20do?= =?UTF-8?q?=20servi=C3=A7o=20sempre=20seja=20usada=20corretamente,=20como?= =?UTF-8?q?=20=C3=A9=20nulavel=20o=20parametro=20ConfiguracaoServico=20con?= =?UTF-8?q?figuracaoServico=20em=20alguns=20lugares=20estava=20chegando=20?= =?UTF-8?q?nulo,=20dependendo=20do=20fluxo=20da=20CTe=20utilizado,=20fiz?= =?UTF-8?q?=20um=20tratamento=20padr=C3=A3o=20em=20todos=20lugares=20que?= =?UTF-8?q?=20poderia=20acontecer,=20apesar=20de=20em=20alguns=20metodos?= =?UTF-8?q?=20de=20valida=C3=A7=C3=A3o=20que=20s=C3=A3o=20usados=20em=20va?= =?UTF-8?q?rios=20lugares=20j=C3=A1=20tratar=20de=20instanciar=20novamente?= =?UTF-8?q?=20o=20servi=C3=A7o,=20muitos=20lugares=20n=C3=A3o=20instanciav?= =?UTF-8?q?a,=20gerando=20exception=20em=20alguns=20metodos.=20Acredito=20?= =?UTF-8?q?que=20tenha=20tratado=20todos=20lugares=20onde=20=C3=A9=20nulav?= =?UTF-8?q?el=20o=20parametro.=20(#26)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ConsultaProtcoloServico.cs | 48 +++++++++-------- .../ConsultaRecibo/ConsultaReciboServico.cs | 40 +++++++------- .../ServicoCTeDistribuicaoDFe.cs | 1 + CTe.Servicos/EnviarCte/ServicoEnviarCte.cs | 6 +-- CTe.Servicos/Eventos/EventoCancelamento.cs | 15 +++--- CTe.Servicos/Eventos/FactoryEvento.cs | 3 +- CTe.Servicos/Eventos/ServicoController.cs | 52 +++++++++++-------- CTe.Servicos/Factory/WsdlFactory.cs | 6 ++- .../Inutilizacao/InutilizacaoServico.cs | 28 +++++----- CTe.Servicos/Recepcao/ServicoCTeRecepcao.cs | 26 ++++++---- CTe.Utils/CTe/ExtCTe.cs | 9 ++-- CTe.Utils/CTe/ExtEnvCte.cs | 8 +-- CTe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs | 7 +-- CTe.Utils/Evento/Extevento.cs | 30 ++++++----- CTe.Utils/Extencoes/ExtConsReciCTe.cs | 5 +- CTe.Utils/Extencoes/ExtconsSitCTe.cs | 11 ++-- CTe.Utils/Extencoes/ExtconsStatServCte.cs | 20 ++++--- CTe.Utils/Extencoes/ExtinutCTe.cs | 9 ++-- CTe.Utils/Inutilizacao/ExtretInutCTe.cs | 5 +- CTe.Utils/Validacao/Validador.cs | 2 +- 20 files changed, 190 insertions(+), 141 deletions(-) diff --git a/CTe.Servicos/ConsultaProtocolo/ConsultaProtcoloServico.cs b/CTe.Servicos/ConsultaProtocolo/ConsultaProtcoloServico.cs index c902cb88a..361e4b756 100644 --- a/CTe.Servicos/ConsultaProtocolo/ConsultaProtcoloServico.cs +++ b/CTe.Servicos/ConsultaProtocolo/ConsultaProtcoloServico.cs @@ -43,54 +43,60 @@ public class ConsultaProtcoloServico { public retConsSitCTe ConsultaProtocolo(string chave, ConfiguracaoServico configuracaoServico = null) { - var consSitCTe = ClassesFactory.CriarconsSitCTe(chave, configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - if (configuracaoServico.IsValidaSchemas) - consSitCTe.ValidarSchema(configuracaoServico); + var consSitCTe = ClassesFactory.CriarconsSitCTe(chave, configServico); - consSitCTe.SalvarXmlEmDisco(configuracaoServico); + if (configServico.IsValidaSchemas) + consSitCTe.ValidarSchema(configServico); - var webService = WsdlFactory.CriaWsdlConsultaProtocolo(configuracaoServico); + consSitCTe.SalvarXmlEmDisco(configServico); + + var webService = WsdlFactory.CriaWsdlConsultaProtocolo(configServico); var retornoXml = webService.cteConsultaCT(consSitCTe.CriaRequestWs()); var retorno = retConsSitCTe.LoadXml(retornoXml.OuterXml, consSitCTe); - retorno.SalvarXmlEmDisco(chave, configuracaoServico); + retorno.SalvarXmlEmDisco(chave, configServico); return retorno; } public retConsSitCTe ConsultaProtocoloV4(string chave, ConfiguracaoServico configuracaoServico = null) { - var consSitCTe = ClassesFactory.CriarconsSitCTe(chave, configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var consSitCTe = ClassesFactory.CriarconsSitCTe(chave, configServico); - if (configuracaoServico.IsValidaSchemas) - consSitCTe.ValidarSchema(configuracaoServico); + if (configServico.IsValidaSchemas) + consSitCTe.ValidarSchema(configServico); - consSitCTe.SalvarXmlEmDisco(configuracaoServico); + consSitCTe.SalvarXmlEmDisco(configServico); - var webService = WsdlFactory.CriaWsdlConsultaProtocoloV4(configuracaoServico); + var webService = WsdlFactory.CriaWsdlConsultaProtocoloV4(configServico); var retornoXml = webService.cteConsultaCT(consSitCTe.CriaRequestWs()); var retorno = retConsSitCTe.LoadXml(retornoXml.OuterXml, consSitCTe); - retorno.SalvarXmlEmDisco(chave, configuracaoServico); + retorno.SalvarXmlEmDisco(chave, configServico); return retorno; } public async Task ConsultaProtocoloAsync(string chave, ConfiguracaoServico configuracaoServico = null) { - var consSitCTe = ClassesFactory.CriarconsSitCTe(chave, configuracaoServico); - - if (configuracaoServico.IsValidaSchemas) - consSitCTe.ValidarSchema(configuracaoServico); - - consSitCTe.SalvarXmlEmDisco(configuracaoServico); - - var webService = WsdlFactory.CriaWsdlConsultaProtocolo(configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var consSitCTe = ClassesFactory.CriarconsSitCTe(chave, configServico); + + if (configServico.IsValidaSchemas) + consSitCTe.ValidarSchema(configServico); + + consSitCTe.SalvarXmlEmDisco(configServico); + + var webService = WsdlFactory.CriaWsdlConsultaProtocolo(configServico); var retornoXml = await webService.cteConsultaCTAsync(consSitCTe.CriaRequestWs()); var retorno = retConsSitCTe.LoadXml(retornoXml.OuterXml, consSitCTe); - retorno.SalvarXmlEmDisco(chave, configuracaoServico); + retorno.SalvarXmlEmDisco(chave, configServico); return retorno; } diff --git a/CTe.Servicos/ConsultaRecibo/ConsultaReciboServico.cs b/CTe.Servicos/ConsultaRecibo/ConsultaReciboServico.cs index a3abc6072..9b28ca7eb 100644 --- a/CTe.Servicos/ConsultaRecibo/ConsultaReciboServico.cs +++ b/CTe.Servicos/ConsultaRecibo/ConsultaReciboServico.cs @@ -50,36 +50,40 @@ public ConsultaReciboServico(string recibo) public retConsReciCTe Consultar(ConfiguracaoServico configuracaoServico = null) { - var consReciCTe = ClassesFactory.CriaConsReciCTe(_recibo, configuracaoServico); - - if (configuracaoServico.IsValidaSchemas) - consReciCTe.ValidarSchema(configuracaoServico); - - consReciCTe.SalvarXmlEmDisco(configuracaoServico); - - var webService = WsdlFactory.CriaWsdlCteRetRecepcao(configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var consReciCTe = ClassesFactory.CriaConsReciCTe(_recibo, configServico); + + if (configServico.IsValidaSchemas) + consReciCTe.ValidarSchema(configServico); + + consReciCTe.SalvarXmlEmDisco(configServico); + + var webService = WsdlFactory.CriaWsdlCteRetRecepcao(configServico); var retornoXml = webService.cteRetRecepcao(consReciCTe.CriaRequestWs()); var retorno = retConsReciCTe.LoadXml(retornoXml.OuterXml, consReciCTe); - retorno.SalvarXmlEmDisco(configuracaoServico); + retorno.SalvarXmlEmDisco(configServico); return retorno; } public async Task ConsultarAsync(ConfiguracaoServico configuracaoServico = null) { - var consReciCTe = ClassesFactory.CriaConsReciCTe(_recibo, configuracaoServico); - - if (configuracaoServico.IsValidaSchemas) - consReciCTe.ValidarSchema(configuracaoServico); - - consReciCTe.SalvarXmlEmDisco(configuracaoServico); - - var webService = WsdlFactory.CriaWsdlCteRetRecepcao(configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var consReciCTe = ClassesFactory.CriaConsReciCTe(_recibo, configServico); + + if (configServico.IsValidaSchemas) + consReciCTe.ValidarSchema(configServico); + + consReciCTe.SalvarXmlEmDisco(configServico); + + var webService = WsdlFactory.CriaWsdlCteRetRecepcao(configServico); var retornoXml = await webService.cteRetRecepcaoAsync(consReciCTe.CriaRequestWs()); var retorno = retConsReciCTe.LoadXml(retornoXml.OuterXml, consReciCTe); - retorno.SalvarXmlEmDisco(configuracaoServico); + retorno.SalvarXmlEmDisco(configServico); return retorno; } diff --git a/CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs b/CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs index 55ce9f7a6..e068c9f3e 100644 --- a/CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs +++ b/CTe.Servicos/DistribuicaoDFe/ServicoCTeDistribuicaoDFe.cs @@ -79,6 +79,7 @@ public ServicoCTeDistribuicaoDFe(ConfiguracaoServico configuracaoServico, X509Ce public RetornoCteDistDFeInt CTeDistDFeInteresse(string ufAutor, string documento, string ultNSU = "0", string nSU = "0", ConfiguracaoServico configuracaoServico = null) { var configServico = configuracaoServico ?? _configuracaoServico ?? ConfiguracaoServico.Instancia; + distDFeInt pedDistDFeInt; XmlDocument dadosConsulta; var ws = InicializaCTeDistDFeInteresse(documento, ultNSU, nSU, out pedDistDFeInt, out dadosConsulta, configServico); diff --git a/CTe.Servicos/EnviarCte/ServicoEnviarCte.cs b/CTe.Servicos/EnviarCte/ServicoEnviarCte.cs index b21d20cc0..583b08f54 100644 --- a/CTe.Servicos/EnviarCte/ServicoEnviarCte.cs +++ b/CTe.Servicos/EnviarCte/ServicoEnviarCte.cs @@ -14,10 +14,10 @@ public class ServicoEnviarCte public RetornoEnviarCte Enviar(int lote, Classes.CTe cte, ConfiguracaoServico configuracaoServico = null) { var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - + ServicoCTeRecepcao servicoRecepcao = new ServicoCTeRecepcao(); - retEnviCte retEnviCte = servicoRecepcao.CTeRecepcao(lote, new List {cte}, configServico); + retEnviCte retEnviCte = servicoRecepcao.CTeRecepcao(lote, new List { cte }, configServico); if (retEnviCte.cStat != 103) { @@ -28,7 +28,6 @@ public RetornoEnviarCte Enviar(int lote, Classes.CTe cte, ConfiguracaoServico co retConsReciCTe retConsReciCTe = servicoConsultaRecibo.Consultar(configServico); - cteProc cteProc = null; if (retConsReciCTe.cStat == 104) { @@ -54,6 +53,7 @@ public RetornoEnviarCte Enviar(int lote, Classes.CTe cte, ConfiguracaoServico co public async Task EnviarAsync(int lote, Classes.CTe cte, ConfiguracaoServico configuracaoServico = null) { var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + ServicoCTeRecepcao servicoRecepcao = new ServicoCTeRecepcao(); retEnviCte retEnviCte = await servicoRecepcao.CTeRecepcaoAsync(lote, new List { cte }, configServico); diff --git a/CTe.Servicos/Eventos/EventoCancelamento.cs b/CTe.Servicos/Eventos/EventoCancelamento.cs index 5584303e0..c644667fb 100644 --- a/CTe.Servicos/Eventos/EventoCancelamento.cs +++ b/CTe.Servicos/Eventos/EventoCancelamento.cs @@ -72,30 +72,33 @@ public EventoCancelamento(CteEletronicoOS cte, int sequenciaEvento, string numer public retEventoCTe Cancelar(ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; var evento = ClassesFactory.CriaEvCancCTe(_justificativa, _numeroProtocolo); - EventoEnviado = FactoryEvento.CriaEvento(CTeTipoEvento.Cancelamento, _sequenciaEvento, _cte.Chave(), _cte.infCte.emit.CNPJ, evento, configuracaoServico); - RetornoSefaz = new ServicoController().Executar(_cte, _sequenciaEvento, evento, CTeTipoEvento.Cancelamento, configuracaoServico); + EventoEnviado = FactoryEvento.CriaEvento(CTeTipoEvento.Cancelamento, _sequenciaEvento, _cte.Chave(), _cte.infCte.emit.CNPJ, evento, configServico); + RetornoSefaz = new ServicoController().Executar(_cte, _sequenciaEvento, evento, CTeTipoEvento.Cancelamento, configServico); return RetornoSefaz; } public retEventoCTe CancelarOs(ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; var evento = ClassesFactory.CriaEvCancCTe(_justificativa, _numeroProtocolo); - EventoEnviado = FactoryEvento.CriaEvento(CTeTipoEvento.Cancelamento, _sequenciaEvento, _cteOs.Chave(), _cteOs.InfCte.emit.CNPJ, evento, configuracaoServico); - RetornoSefaz = new ServicoController().Executar(_cteOs, _sequenciaEvento, evento, CTeTipoEvento.Cancelamento, configuracaoServico); + EventoEnviado = FactoryEvento.CriaEvento(CTeTipoEvento.Cancelamento, _sequenciaEvento, _cteOs.Chave(), _cteOs.InfCte.emit.CNPJ, evento, configServico); + RetornoSefaz = new ServicoController().Executar(_cteOs, _sequenciaEvento, evento, CTeTipoEvento.Cancelamento, configServico); return RetornoSefaz; } public async Task CancelarAsync(ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; var evento = ClassesFactory.CriaEvCancCTe(_justificativa, _numeroProtocolo); - EventoEnviado = FactoryEvento.CriaEvento(CTeTipoEvento.Cancelamento, _sequenciaEvento, _cte.Chave(), _cte.infCte.emit.CNPJ, evento, configuracaoServico); - RetornoSefaz = await new ServicoController().ExecutarAsync(_cte, _sequenciaEvento, evento, CTeTipoEvento.Cancelamento, configuracaoServico); + EventoEnviado = FactoryEvento.CriaEvento(CTeTipoEvento.Cancelamento, _sequenciaEvento, _cte.Chave(), _cte.infCte.emit.CNPJ, evento, configServico); + RetornoSefaz = await new ServicoController().ExecutarAsync(_cte, _sequenciaEvento, evento, CTeTipoEvento.Cancelamento, configServico); return RetornoSefaz; } diff --git a/CTe.Servicos/Eventos/FactoryEvento.cs b/CTe.Servicos/Eventos/FactoryEvento.cs index 04eaaca51..f862794e2 100644 --- a/CTe.Servicos/Eventos/FactoryEvento.cs +++ b/CTe.Servicos/Eventos/FactoryEvento.cs @@ -47,7 +47,8 @@ public class FactoryEvento //Vou manter para evitar quebra de código pois a classe e o metodo são publicos public static eventoCTe CriaEvento(CTeEletronico cte, CTeTipoEvento cTeTipoEvento, int sequenciaEvento, EventoContainer container, ConfiguracaoServico configuracaoServico = null) { - return CriaEvento(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + return CriaEvento(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configServico); } public static eventoCTe CriaEvento(CTeTipoEvento cTeTipoEvento, int sequenciaEvento, string chave, string cnpj, EventoContainer container, ConfiguracaoServico configuracaoServico = null) diff --git a/CTe.Servicos/Eventos/ServicoController.cs b/CTe.Servicos/Eventos/ServicoController.cs index 4754c5c2d..390af483c 100644 --- a/CTe.Servicos/Eventos/ServicoController.cs +++ b/CTe.Servicos/Eventos/ServicoController.cs @@ -50,64 +50,74 @@ public class ServicoController : IServicoController { public retEventoCTe Executar(CteEletronico cte, int sequenciaEvento, EventoContainer container, CTeTipoEvento cTeTipoEvento, ConfiguracaoServico configuracaoServico = null) { - return Executar(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + return Executar(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configServico); } public retEventoCTe Executar(CteEletronicoOS cte, int sequenciaEvento, EventoContainer container, CTeTipoEvento cTeTipoEvento, ConfiguracaoServico configuracaoServico = null) { - return Executar(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.InfCte.emit.CNPJ, container, configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + return Executar(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.InfCte.emit.CNPJ, container, configServico); } public async Task ExecutarAsync(CteEletronico cte, int sequenciaEvento, EventoContainer container, CTeTipoEvento cTeTipoEvento, ConfiguracaoServico configuracaoServico = null) { - return await ExecutarAsync(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + return await ExecutarAsync(cTeTipoEvento, sequenciaEvento, cte.Chave(), cte.infCte.emit.CNPJ, container, configServico); } public retEventoCTe Executar(CTeTipoEvento cTeTipoEvento, int sequenciaEvento, string chave, string cnpj, EventoContainer container, ConfiguracaoServico configuracaoServico = null) { - var evento = FactoryEvento.CriaEvento(cTeTipoEvento, sequenciaEvento, chave, cnpj, container, configuracaoServico); - evento.Assina(configuracaoServico); - + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var evento = FactoryEvento.CriaEvento(cTeTipoEvento, sequenciaEvento, chave, cnpj, container, configServico); + evento.Assina(configServico); + if (configuracaoServico.IsValidaSchemas) - evento.ValidarSchema(configuracaoServico); + evento.ValidarSchema(configServico); - evento.SalvarXmlEmDisco(configuracaoServico); + evento.SalvarXmlEmDisco(configServico); XmlNode retornoXml = null; if (evento.versao == versao.ve200 || evento.versao == versao.ve300) { - var webService = WsdlFactory.CriaWsdlCteEvento(configuracaoServico); + var webService = WsdlFactory.CriaWsdlCteEvento(configServico); retornoXml = webService.cteRecepcaoEvento(evento.CriaXmlRequestWs()); } if (evento.versao == versao.ve400) { - var webService = WsdlFactory.CriaWsdlCteEventoV4(configuracaoServico); + var webService = WsdlFactory.CriaWsdlCteEventoV4(configServico); retornoXml = webService.cteRecepcaoEvento(evento.CriaXmlRequestWs()); } var retorno = retEventoCTe.LoadXml(retornoXml.OuterXml, evento); - retorno.SalvarXmlEmDisco(configuracaoServico); + retorno.SalvarXmlEmDisco(configServico); return retorno; } - public async Task ExecutarAsync(CTeTipoEvento cTeTipoEvento, int sequenciaEvento, string chave, string cnpj, EventoContainer container, ConfiguracaoServico configuracaoServico = null) + public async Task ExecutarAsync(CTeTipoEvento cTeTipoEvento, + int sequenciaEvento, + string chave, string + cnpj, EventoContainer container, + ConfiguracaoServico configuracaoServico = null) { - var evento = FactoryEvento.CriaEvento(cTeTipoEvento, sequenciaEvento, chave, cnpj, container, configuracaoServico); - evento.Assina(configuracaoServico); - - if (configuracaoServico.IsValidaSchemas) - evento.ValidarSchema(configuracaoServico); - - evento.SalvarXmlEmDisco(configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var evento = FactoryEvento.CriaEvento(cTeTipoEvento, sequenciaEvento, chave, cnpj, container, configServico); + evento.Assina(configServico); + + if (configServico.IsValidaSchemas) + evento.ValidarSchema(configServico); + + evento.SalvarXmlEmDisco(configServico); - var webService = WsdlFactory.CriaWsdlCteEvento(configuracaoServico); + var webService = WsdlFactory.CriaWsdlCteEvento(configServico); var retornoXml = await webService.cteRecepcaoEventoAsync(evento.CriaXmlRequestWs()); var retorno = retEventoCTe.LoadXml(retornoXml.OuterXml, evento); - retorno.SalvarXmlEmDisco(configuracaoServico); + retorno.SalvarXmlEmDisco(configServico); return retorno; } diff --git a/CTe.Servicos/Factory/WsdlFactory.cs b/CTe.Servicos/Factory/WsdlFactory.cs index 1987fdf67..fb633d0e2 100644 --- a/CTe.Servicos/Factory/WsdlFactory.cs +++ b/CTe.Servicos/Factory/WsdlFactory.cs @@ -134,9 +134,11 @@ public static CteRecepcaoEvento CriaWsdlCteEvento(ConfiguracaoServico configurac public static CteRecepcaoEventoV4 CriaWsdlCteEventoV4(ConfiguracaoServico configuracaoServico = null, X509Certificate2 certificado = null) { - var url = UrlHelper.ObterUrlServico(configuracaoServico).CteRecepcaoEvento; + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - var configuracaoWsdl = CriaConfiguracao(url, configuracaoServico, certificado); + var url = UrlHelper.ObterUrlServico(configServico).CteRecepcaoEvento; + + var configuracaoWsdl = CriaConfiguracao(url, configServico, certificado); return new CteRecepcaoEventoV4(configuracaoWsdl); } diff --git a/CTe.Servicos/Inutilizacao/InutilizacaoServico.cs b/CTe.Servicos/Inutilizacao/InutilizacaoServico.cs index 997e665ec..62df82bd0 100644 --- a/CTe.Servicos/Inutilizacao/InutilizacaoServico.cs +++ b/CTe.Servicos/Inutilizacao/InutilizacaoServico.cs @@ -78,32 +78,36 @@ public InutilizacaoServico(ConfigInutiliza configInutiliza) public retInutCTe Inutilizar(ConfiguracaoServico configuracaoServico = null) { - var inutCte = ClassesFactory.CriaInutCTe(_configInutiliza, configuracaoServico); - inutCte.Assinar(configuracaoServico); - inutCte.ValidarShcema(configuracaoServico); - inutCte.SalvarXmlEmDisco(configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - var webService = WsdlFactory.CriaWsdlCteInutilizacao(configuracaoServico); + var inutCte = ClassesFactory.CriaInutCTe(_configInutiliza, configServico); + inutCte.Assinar(configServico); + inutCte.ValidarSchema(configServico); + inutCte.SalvarXmlEmDisco(configServico); + + var webService = WsdlFactory.CriaWsdlCteInutilizacao(configServico); var retornoXml = webService.cteInutilizacaoCT(inutCte.CriaRequestWs()); var retorno = retInutCTe.LoadXml(retornoXml.OuterXml, inutCte); - retorno.SalvarXmlEmDisco(inutCte.infInut.Id.Substring(2), configuracaoServico); + retorno.SalvarXmlEmDisco(inutCte.infInut.Id.Substring(2), configServico); return retorno; } public async Task InutilizarAsync(ConfiguracaoServico configuracaoServico = null) { - var inutCte = ClassesFactory.CriaInutCTe(_configInutiliza, configuracaoServico); - inutCte.Assinar(configuracaoServico); - inutCte.ValidarShcema(configuracaoServico); - inutCte.SalvarXmlEmDisco(configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var inutCte = ClassesFactory.CriaInutCTe(_configInutiliza, configServico); + inutCte.Assinar(configServico); + inutCte.ValidarSchema(configServico); + inutCte.SalvarXmlEmDisco(configServico); - var webService = WsdlFactory.CriaWsdlCteInutilizacao(configuracaoServico); + var webService = WsdlFactory.CriaWsdlCteInutilizacao(configServico); var retornoXml = await webService.cteInutilizacaoCTAsync(inutCte.CriaRequestWs()); var retorno = retInutCTe.LoadXml(retornoXml.OuterXml, inutCte); - retorno.SalvarXmlEmDisco(inutCte.infInut.Id.Substring(2), configuracaoServico); + retorno.SalvarXmlEmDisco(inutCte.infInut.Id.Substring(2), configServico); return retorno; } diff --git a/CTe.Servicos/Recepcao/ServicoCTeRecepcao.cs b/CTe.Servicos/Recepcao/ServicoCTeRecepcao.cs index b24d962d3..7ac0ee9f0 100644 --- a/CTe.Servicos/Recepcao/ServicoCTeRecepcao.cs +++ b/CTe.Servicos/Recepcao/ServicoCTeRecepcao.cs @@ -53,32 +53,36 @@ public class ServicoCTeRecepcao public retEnviCte CTeRecepcao(int lote, List cteEletronicosList, ConfiguracaoServico configuracaoServico = null) { - var enviCte = PreparaEnvioCTe(lote, cteEletronicosList, configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; - var webService = WsdlFactory.CriaWsdlCteRecepcao(configuracaoServico); + var enviCte = PreparaEnvioCTe(lote, cteEletronicosList, configServico); + + var webService = WsdlFactory.CriaWsdlCteRecepcao(configServico); OnAntesDeEnviar(enviCte); - var retornoXml = webService.cteRecepcaoLote(enviCte.CriaRequestWs(configuracaoServico)); + var retornoXml = webService.cteRecepcaoLote(enviCte.CriaRequestWs(configServico)); var retorno = retEnviCte.LoadXml(retornoXml.OuterXml, enviCte); - retorno.SalvarXmlEmDisco(configuracaoServico); + retorno.SalvarXmlEmDisco(configServico); return retorno; } public async Task CTeRecepcaoAsync(int lote, List cteEletronicosList, ConfiguracaoServico configuracaoServico = null) { - var enviCte = PreparaEnvioCTe(lote, cteEletronicosList, configuracaoServico); + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + var enviCte = PreparaEnvioCTe(lote, cteEletronicosList, configServico); - var webService = WsdlFactory.CriaWsdlCteRecepcao(configuracaoServico); + var webService = WsdlFactory.CriaWsdlCteRecepcao(configServico); OnAntesDeEnviar(enviCte); - var retornoXml = await webService.cteRecepcaoLoteAsync(enviCte.CriaRequestWs(configuracaoServico)); + var retornoXml = await webService.cteRecepcaoLoteAsync(enviCte.CriaRequestWs(configServico)); var retorno = retEnviCte.LoadXml(retornoXml.OuterXml, enviCte); - retorno.SalvarXmlEmDisco(configuracaoServico); + retorno.SalvarXmlEmDisco(configServico); return retorno; } @@ -110,14 +114,14 @@ public retCTe CTeRecepcaoSincronoV4(CTeEletronico cte, ConfiguracaoServico confi cte.ValidaSchema(instanciaConfiguracao); cte.SalvarXmlEmDisco(instanciaConfiguracao); - var webService = WsdlFactory.CriaWsdlCteRecepcaoSincronoV4(configuracaoServico); + var webService = WsdlFactory.CriaWsdlCteRecepcaoSincronoV4(instanciaConfiguracao); //OnAntesDeEnviar(enviCte); - var retornoXml = webService.CTeRecepcaoSincV4(cte.CriaRequestWs(configuracaoServico)); + var retornoXml = webService.CTeRecepcaoSincV4(cte.CriaRequestWs(instanciaConfiguracao)); var retorno = retCTe.LoadXml(retornoXml.OuterXml, cte); - retorno.SalvarXmlEmDisco(cte.Chave(), configuracaoServico); + retorno.SalvarXmlEmDisco(cte.Chave(), instanciaConfiguracao); return retorno; } diff --git a/CTe.Utils/CTe/ExtCTe.cs b/CTe.Utils/CTe/ExtCTe.cs index 7d216f594..e0f3d31f7 100644 --- a/CTe.Utils/CTe/ExtCTe.cs +++ b/CTe.Utils/CTe/ExtCTe.cs @@ -61,7 +61,7 @@ public static class ExtCTe /// Retorna uma NFe carregada com os dados do XML public static CteEletronica CarregarDeArquivoXml(this CteEletronica cte, string arquivoXml) { - var s = FuncoesXml.ObterNodeDeArquivoXml(typeof (CteEletronica).Name, arquivoXml); + var s = FuncoesXml.ObterNodeDeArquivoXml(typeof(CteEletronica).Name, arquivoXml); return FuncoesXml.XmlStringParaClasse(s); } @@ -83,7 +83,7 @@ public static string ObterXmlString(this CteEletronica cte) /// Retorna um objeto do tipo CTe public static CteEletronica CarregarDeXmlString(this CteEletronica cte, string xmlString) { - var s = FuncoesXml.ObterNodeDeStringXml(typeof (CteEletronica).Name, xmlString); + var s = FuncoesXml.ObterNodeDeStringXml(typeof(CteEletronica).Name, xmlString); return FuncoesXml.XmlStringParaClasse(s); } @@ -100,6 +100,7 @@ public static void ValidaSchema(this CteEletronica cte, ConfiguracaoServico conf var xmlValidacao = cte.ObterXmlString(); var servicoInstancia = configuracaoServico ?? ConfiguracaoServico.Instancia; + if (!servicoInstancia.IsValidaSchemas) return; @@ -120,7 +121,7 @@ public static void ValidaSchema(this CteEletronica cte, ConfiguracaoServico conf "versão 2.00 é 3.00"); } - if (cte.infCte.ide.tpCTe != tpCTe.Anulacao && cte.infCte.ide.tpCTe != tpCTe.Complemento) // Ct-e do Tipo Anulação/Complemento não tem Informações do Modal + if (cte.infCte.ide.tpCTe != tpCTe.Anulacao && cte.infCte.ide.tpCTe != tpCTe.Complemento) // Ct-e do Tipo Anulação/Complemento não tem Informações do Modal { var xmlModal = FuncoesXml.ClasseParaXmlString(cte.infCte.infCTeNorm.infModal); @@ -291,7 +292,7 @@ public static infCTeSupl QrCode(this CteEletronica cte, X509Certificate2 certifi qrCode.Append("&"); qrCode.Append("tpAmb=").Append((int)cte.infCte.ide.tpAmb); - if (cte.infCte.ide.tpEmis != tpEmis.teNormal + if (cte.infCte.ide.tpEmis != tpEmis.teNormal && cte.infCte.ide.tpEmis != tpEmis.teSVCRS && cte.infCte.ide.tpEmis != tpEmis.teSVCSP ) diff --git a/CTe.Utils/CTe/ExtEnvCte.cs b/CTe.Utils/CTe/ExtEnvCte.cs index e215f5154..8b698b751 100644 --- a/CTe.Utils/CTe/ExtEnvCte.cs +++ b/CTe.Utils/CTe/ExtEnvCte.cs @@ -47,16 +47,18 @@ public static class ExtEnvCte { public static void ValidaSchema(this enviCTe enviCTe, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var xmlValidacao = enviCTe.ObterXmlString(); switch (enviCTe.versao) { case versao.ve200: - Validador.Valida(xmlValidacao, "enviCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "enviCTe_v2.00.xsd", configServico); break; case versao.ve400: case versao.ve300: - Validador.Valida(xmlValidacao, "enviCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "enviCTe_v3.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + @@ -93,7 +95,7 @@ public static XmlDocument CriaRequestWs(this enviCTe enviCTe, ConfiguracaoServic var request = new XmlDocument(); var xml = enviCTe.ObterXmlString(); - + var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; if (instanciaServico.cUF == Estado.PR diff --git a/CTe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs b/CTe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs index 1ad4ec66c..6b73322d1 100644 --- a/CTe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs +++ b/CTe.Utils/DistribuicaoDFe/ExtdistDFeInt.cs @@ -54,16 +54,17 @@ public static string ObterXmlString(this distDFeInt pedDistDFeInt) public static void ValidaSchema(this distDFeInt pedDistDFeInt, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var xmlValidacao = pedDistDFeInt.ObterXmlString(); - if (pedDistDFeInt.versao.Equals("1.00")) { - Validador.Valida(xmlValidacao, "distDFeInt_v1.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "distDFeInt_v1.00.xsd", configServico); } else if (pedDistDFeInt.versao.Equals("1.10")) { - Validador.Valida(xmlValidacao, "distDFeInt_v1.10.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "distDFeInt_v1.10.xsd", configServico); } else { diff --git a/CTe.Utils/Evento/Extevento.cs b/CTe.Utils/Evento/Extevento.cs index afbdf82fa..f44770f8b 100644 --- a/CTe.Utils/Evento/Extevento.cs +++ b/CTe.Utils/Evento/Extevento.cs @@ -74,18 +74,20 @@ public static void Assina(this eventoCTe eventoCTe, ConfiguracaoServico configur public static void ValidarSchema(this eventoCTe eventoCTe, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var xmlEvento = eventoCTe.ObterXmlString(); switch (eventoCTe.versao) { case versao.ve200: - Validador.Valida(xmlEvento, "eventoCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlEvento, "eventoCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlEvento, "eventoCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlEvento, "eventoCTe_v3.00.xsd", configServico); break; case versao.ve400: - Validador.Valida(xmlEvento, "eventoCTe_v4.00.xsd", configuracaoServico); + Validador.Valida(xmlEvento, "eventoCTe_v4.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + @@ -98,22 +100,24 @@ public static void ValidarSchema(this eventoCTe eventoCTe, ConfiguracaoServico c private static void ValidarSchemaEventoContainer(EventoContainer container, versao versao, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + if (container.GetType() == typeof(evCancCTe)) { - var evCancCTe = (evCancCTe) container; + var evCancCTe = (evCancCTe)container; var xmlEventoCancelamento = evCancCTe.ObterXmlString(); switch (versao) { case versao.ve200: - Validador.Valida(xmlEventoCancelamento, "evCancCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCancelamento, "evCancCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlEventoCancelamento, "evCancCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCancelamento, "evCancCTe_v3.00.xsd", configServico); break; case versao.ve400: - Validador.Valida(xmlEventoCancelamento, "evCancCTe_v4.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCancelamento, "evCancCTe_v4.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + @@ -133,13 +137,13 @@ private static void ValidarSchemaEventoContainer(EventoContainer container, vers switch (versao) { case versao.ve200: - Validador.Valida(xmlEventoCCe, "evCCeCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCCe, "evCCeCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlEventoCCe, "evCCeCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCCe, "evCCeCTe_v3.00.xsd", configServico); break; case versao.ve400: - Validador.Valida(xmlEventoCCe, "evCCeCTe_v4.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCCe, "evCCeCTe_v4.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + @@ -157,13 +161,13 @@ private static void ValidarSchemaEventoContainer(EventoContainer container, vers switch (versao) { case versao.ve200: - Validador.Valida(xmlEventoCCe, "evPrestDesacordo_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCCe, "evPrestDesacordo_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlEventoCCe, "evPrestDesacordo_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCCe, "evPrestDesacordo_v3.00.xsd", configServico); break; case versao.ve400: - Validador.Valida(xmlEventoCCe, "evPrestDesacordo_v4.00.xsd", configuracaoServico); + Validador.Valida(xmlEventoCCe, "evPrestDesacordo_v4.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + diff --git a/CTe.Utils/Extencoes/ExtConsReciCTe.cs b/CTe.Utils/Extencoes/ExtConsReciCTe.cs index a05e7e5ee..229f4a574 100644 --- a/CTe.Utils/Extencoes/ExtConsReciCTe.cs +++ b/CTe.Utils/Extencoes/ExtConsReciCTe.cs @@ -45,15 +45,16 @@ public static class ExtConsReciCTe { public static void ValidarSchema(this consReciCTe consReciCTe, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; var xmlValidacao = consReciCTe.ObterXmlString(); switch (consReciCTe.versao) { case versao.ve200: - Validador.Valida(xmlValidacao, "consReciCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consReciCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlValidacao, "consReciCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consReciCTe_v3.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + diff --git a/CTe.Utils/Extencoes/ExtconsSitCTe.cs b/CTe.Utils/Extencoes/ExtconsSitCTe.cs index 166f4a934..0ef21fc9a 100644 --- a/CTe.Utils/Extencoes/ExtconsSitCTe.cs +++ b/CTe.Utils/Extencoes/ExtconsSitCTe.cs @@ -46,20 +46,23 @@ public static class ExtconsSitCTe public static void ValidarSchema(this consSitCTe consSitCTe, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var xmlValidacao = consSitCTe.ObterXmlString(); switch (consSitCTe.versao) { case versao.ve200: - Validador.Valida(xmlValidacao, "consSitCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consSitCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlValidacao, "consSitCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consSitCTe_v3.00.xsd", configServico); break; case versao.ve400: - Validador.Valida(xmlValidacao, "consSitCTe_v4.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consSitCTe_v4.00.xsd", configServico); break; - default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + + default: + throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + "a versão está inválida, somente é permitido " + "versão 2.00 é 3.00"); } diff --git a/CTe.Utils/Extencoes/ExtconsStatServCte.cs b/CTe.Utils/Extencoes/ExtconsStatServCte.cs index 1bc456602..4e32cef36 100644 --- a/CTe.Utils/Extencoes/ExtconsStatServCte.cs +++ b/CTe.Utils/Extencoes/ExtconsStatServCte.cs @@ -45,18 +45,20 @@ public static class ExtconsStatServCte { public static void ValidarSchema(this consStatServCte consStatServCte, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var xmlValidacao = consStatServCte.ObterXmlString(); switch (consStatServCte.versao) { case versao.ve200: - Validador.Valida(xmlValidacao, "consStatServCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consStatServCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlValidacao, "consStatServCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consStatServCTe_v3.00.xsd", configServico); break; case versao.ve400: - Validador.Valida(xmlValidacao, "consStatServCTe_v4.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consStatServCTe_v4.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + @@ -82,8 +84,8 @@ public static void SalvarXmlEmDisco(this consStatServCte statuServCte, Configura if (instanciaServico.NaoSalvarXml()) return; var caminhoXml = instanciaServico.DiretorioSalvarXml; - - var arquivoSalvar = Path.Combine(caminhoXml, DateTime.Now.ParaDataHoraString() + "-ped-sta.xml"); + + var arquivoSalvar = Path.Combine(caminhoXml, DateTime.Now.ParaDataHoraString() + "-ped-sta.xml"); FuncoesXml.ClasseParaArquivoXml(statuServCte, arquivoSalvar); } @@ -101,18 +103,20 @@ public static class ExtconsStatServCTe { public static void ValidarSchema(this consStatServCTe consStatServCte, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + var xmlValidacao = consStatServCte.ObterXmlString(); switch (consStatServCte.versao) { case versao.ve200: - Validador.Valida(xmlValidacao, "consStatServCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consStatServCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlValidacao, "consStatServCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consStatServCTe_v3.00.xsd", configServico); break; case versao.ve400: - Validador.Valida(xmlValidacao, "consStatServCTe_v4.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "consStatServCTe_v4.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + diff --git a/CTe.Utils/Extencoes/ExtinutCTe.cs b/CTe.Utils/Extencoes/ExtinutCTe.cs index 87bf4f942..c40adcd43 100644 --- a/CTe.Utils/Extencoes/ExtinutCTe.cs +++ b/CTe.Utils/Extencoes/ExtinutCTe.cs @@ -63,18 +63,19 @@ public static string ObterXmlString(this inutCTe pedInutilizacao) return FuncoesXml.ClasseParaXmlString(pedInutilizacao); } - public static void ValidarShcema(this inutCTe inutCTe, ConfiguracaoServico configuracaoServico = null) + public static void ValidarSchema(this inutCTe inutCTe, ConfiguracaoServico configuracaoServico = null) { + var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia; var xmlValidacao = inutCTe.ObterXmlString(); switch (inutCTe.versao) { case versao.ve200: - Validador.Valida(xmlValidacao, "inutCTe_v2.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "inutCTe_v2.00.xsd", configServico); break; case versao.ve300: - Validador.Valida(xmlValidacao, "inutCTe_v3.00.xsd", configuracaoServico); + Validador.Valida(xmlValidacao, "inutCTe_v3.00.xsd", configServico); break; default: throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " + @@ -91,7 +92,7 @@ public static void SalvarXmlEmDisco(this inutCTe inutCTe, ConfiguracaoServico co var caminhoXml = instanciaServico.DiretorioSalvarXml; - var arquivoSalvar = Path.Combine(caminhoXml, inutCTe.infInut.Id+ "-ped-inu.xml"); + var arquivoSalvar = Path.Combine(caminhoXml, inutCTe.infInut.Id + "-ped-inu.xml"); FuncoesXml.ClasseParaArquivoXml(inutCTe, arquivoSalvar); } diff --git a/CTe.Utils/Inutilizacao/ExtretInutCTe.cs b/CTe.Utils/Inutilizacao/ExtretInutCTe.cs index c0b4c211d..6e378da2c 100644 --- a/CTe.Utils/Inutilizacao/ExtretInutCTe.cs +++ b/CTe.Utils/Inutilizacao/ExtretInutCTe.cs @@ -60,8 +60,6 @@ public static string ObterXmlString(this retInutCTe retInutCTe) { return FuncoesXml.ClasseParaXmlString(retInutCTe); } - - public static void SalvarXmlEmDisco(this retInutCTe retInutCTe, string chaveNome, ConfiguracaoServico configuracaoServico = null) { var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; @@ -69,11 +67,10 @@ public static void SalvarXmlEmDisco(this retInutCTe retInutCTe, string chaveNome if (instanciaServico.NaoSalvarXml()) return; var caminhoXml = instanciaServico.DiretorioSalvarXml; - + var arquivoSalvar = Path.Combine(caminhoXml, chaveNome + "-inu.xml"); FuncoesXml.ClasseParaArquivoXml(retInutCTe, arquivoSalvar); } - } } \ No newline at end of file diff --git a/CTe.Utils/Validacao/Validador.cs b/CTe.Utils/Validacao/Validador.cs index 015fc5f7b..1d4773996 100644 --- a/CTe.Utils/Validacao/Validador.cs +++ b/CTe.Utils/Validacao/Validador.cs @@ -60,7 +60,7 @@ public static void Valida(string xml, string schema, ConfiguracaoServico configu schemas.XmlResolver = new XmlUrlResolver(); cfg.Schemas = schemas; - // Quando carregar o eschema, especificar o namespace que ele valida + // Quando carregar o schema, especificar o namespace que ele valida // e a localização do arquivo schemas.Add(null, arquivoSchema); // Especifica o tratamento de evento para os erros de validacao From 219ba859d82ea432f09fda556dcfa6f6718194c3 Mon Sep 17 00:00:00 2001 From: Danilo Breda Date: Wed, 17 Jul 2024 14:26:15 -0300 Subject: [PATCH 02/35] incluido campos de desoneracao faltantes no ICMSGeral --- NFe.Utils/Tributacao/Estadual/ICMSGeral.cs | 64 +++++++++------------- 1 file changed, 25 insertions(+), 39 deletions(-) diff --git a/NFe.Utils/Tributacao/Estadual/ICMSGeral.cs b/NFe.Utils/Tributacao/Estadual/ICMSGeral.cs index bcaf63a13..bf2230d88 100644 --- a/NFe.Utils/Tributacao/Estadual/ICMSGeral.cs +++ b/NFe.Utils/Tributacao/Estadual/ICMSGeral.cs @@ -1,37 +1,4 @@ -/********************************************************************************/ -/* Projeto: Biblioteca ZeusNFe */ -/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ -/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ -/* */ -/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ -/* Zeusdev Tecnologia LTDA ME */ -/* */ -/* Você pode obter a última versão desse arquivo no GitHub */ -/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ -/* */ -/* */ -/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ -/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ -/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ -/* qualquer versão posterior. */ -/* */ -/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ -/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ -/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ -/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ -/* */ -/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ -/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ -/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ -/* Você também pode obter uma copia da licença em: */ -/* http://www.opensource.org/licenses/lgpl-license.php */ -/* */ -/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ -/* http://www.zeusautomacao.com.br/ */ -/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ -/********************************************************************************/ - -using System; +using System; using DFe.Utils; using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual; using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; @@ -55,7 +22,7 @@ public ICMSGeral(ICMSBasico icmsBasico) public ICMSGeral() { - + } /// @@ -247,12 +214,30 @@ public ICMSBasico ObterICMSBasico(CRT crt) /// public decimal? vICMSDeson { get; set; } + /// + /// N28b - Indica se o valor do ICMS desonerado (vICMSDeson) deduz + /// do valor do item (vProd). (NT 2023.004) + /// + public DeduzDesoneracaoNoProduto? indDeduzDeson { get; set; } + + // + /// N33a - Valor do ICMS- ST desonerado + /// Versão 4.00 + /// + public decimal? vICMSSTDeson { get; set; } + + /// + /// N33b - Motivo da desoneração do ICMS- ST + /// Versão 4.00 + /// + public MotivoDesoneracaoIcmsSt? motDesICMSST { get; set; } + /// /// Motivo da desoneração do ICMS /// public MotivoDesoneracaoIcms? motDesICMS { get; set; } - /// + /// /// Valor do ICMS da Operação /// public decimal? vICMSOp { get; set; } @@ -271,7 +256,7 @@ public ICMSBasico ObterICMSBasico(CRT crt) /// Valor da BC do ICMS ST retido /// public decimal? vBCSTRet { get; set; } - + /// /// Valor do ICMS ST retido /// @@ -370,8 +355,8 @@ public ICMSBasico ObterICMSBasico(CRT crt) /// Valor do FCP retido por Substituição Tributária /// public decimal? vFCPSTRet { get; set; } - - /// + + /// /// Valor do ICMS próprio do Substituto (tag: vICMSSubstituto) /// public decimal? vICMSSubstituto { get; set; } @@ -412,5 +397,6 @@ public ICMSBasico ObterICMSBasico(CRT crt) /// Valor do ICMS retido anteriormente /// public decimal? vICMSMonoRet { get; set; } + } } \ No newline at end of file From 3f22273ddd3a085e6f3051f12387e8007adbde12 Mon Sep 17 00:00:00 2001 From: Danilo Breda Date: Sat, 20 Jul 2024 12:46:44 -0300 Subject: [PATCH 03/35] melhoria do README.md --- README.md | 141 +++++++++++++++++++++++++++--------------------------- 1 file changed, 70 insertions(+), 71 deletions(-) diff --git a/README.md b/README.md index fd3bfd7fd..542d1e561 100755 --- a/README.md +++ b/README.md @@ -9,12 +9,14 @@ A biblioteca foi desenvolvida em **C#** utilizando Visual Studio Community 2022 com os SDKs net462, netstandard2.0 e net6.0 instalados. | Escopos | Frameworks Suportados | | ------------------- | ------------------- | -| NFe, NFCe, CTe, MDFe | .NET 4.6.2, .NET 4.7, .NET 4.7.1, .NET 4.7.2, .NET 4.8, .NetStandard 2.0, .NET 6.0 .NET 7.0 .NET 8.0 | -| Impressões com OpenFastReport (NFe, NFCe, CTe, MDFe) | ..NET 4.6.2, .NET 4.7, .NET 4.7.1, .NET 4.7.2, .NET 4.8, .NetStandard 2.0, .NET 6.0(windows+linux) .NET 7.0+(windows) | -| Impressões com FastReport(versão paga) (NFe, NFCe, CTe, MDFe) | .NET 4.6.2, .NET 4.7, .NET 4.7.1, .NET 4.7.2, .NET 4.8 .NetStandard 2.0, .NET 6.0 .NET 7.0+(windows) | -| Impressões com FastReport.Skia(versão paga) (NFe) | .NET 7.0+(windows+linux+mobile) | +| NFe, NFCe, CTe, MDFe | .NET 4.6.2+, .NetStandard 2.0, .NET 6.0+ .NET 8.0 | +| Impressões com FastReport OpenSource (NFe, NFCe, CTe, MDFe) | ..NET 4.6.2+, .NetStandard 2.0, .NET 6.0(windows+linux) .NET 8.0+(windows apenas) | +| Impressões com FastReport (Versão PAGA) (NFe, NFCe, CTe, MDFe) | .NET 4.6.2+, .NetStandard 2.0, .NET 6.0(windows+linux) .NET 8.0+(windows apenas) | +| Impressões com FastReport.Skia (Versão PAGA SkiaSharp) (NFe) | .NET 7.0+(windows+linux+mobile) | +| Impressões com QuestPdf | .NET 4.6.2+, .NetStandard 2.0, .NET 7.0+(windows+linux+mobile) | +| Impressões com PDFClown (NFe) | .NET 4.6.2+ | -***Não temos suporte para .NetFramework 4.5.2 ou 4.5 ou menor. A Biblioteca irá seguir o [ciclo de vida de versões da microsoft](https://dotnet.microsoft.com/en-us/learn/dotnet/what-is-dotnet-framework), sendo retirado a compatibilidade de versoes específicas e antigas do .Net caso a microsoft retire seu suporte.*** +***ATENÇÃO! Não temos suporte para .NetFramework 4.5.2 ou 4.5 ou menor. A Biblioteca irá seguir o [ciclo de vida de versões da microsoft](https://dotnet.microsoft.com/en-us/learn/dotnet/what-is-dotnet-framework), sendo retirado a compatibilidade de versoes específicas e antigas do .Net caso a microsoft retire seu suporte.*** Licenciada sobre a **LGPL** (https://pt.wikipedia.org/wiki/GNU_Lesser_General_Public_License). @@ -71,12 +73,73 @@ Para facilitar o seus estudos a biblioteca oferece projetos do tipo DEMO, sendo - *NFe.Danfe.AppTeste.Fast:* Projeto em WPF para demonstração de uso da impressão da NFe e NFCe (A NFe e NFCe estão disponíveis em FastReport.Net¹. A NFC-e também está disponível de forma nativa, entretanto para O DEMO é necessária as DLLs do FastReport.Net¹. *A utilização do DANFe da NFCe de forma nativa fora do DEMO não depende do FastReports.Net*); - *NFe.Danfe.AppTeste.OpenFast:* Projeto em Console em .NET6 para demonstração de uso de impressão da NFe, NFCe, como DANFE de xml não registrado e registrado ou Eventos como carta de correção e cancelamento.(A NFe utiliza o FastReport.OpenSource (https://github.com/FastReports/FastReport). Não é necessário nenhuma DLL externa, tudo está incluído no pacote nuget.); -## Impressão (QuestPdf): +## Impressão (FastReport) (Versão PAGA): +https://www.fast-report.com/ + +- Exemplo no Projeto *NFe.Danfe.AppTeste.Fast*. +- Suporte a linux usando os pacotes SkiaSharp https://www.fast-report.com/blogs/fastreport-core-skia +- A impressão de forma nativa (sem dependências de bibliotecas de terceiros) está disponível somente para a *NFCe*¹. +- O projeto conta também com a impressão em FastReport.Net¹ (https://www.fast-report.com/pt/product/fast-report-net/) para *NFe*, *NFCe²* _(térmica)_, *CTe* _(modal rodoviário)_ e *MDFe*. + +>¹ As dlls do FastReport.Net disponibilizadas na biblioteca são da versão de demonstração³ do mesmo. A versão de demonstração coloca uma marca d'água "DEMO VERSION" na impressão do relatório. Se você possui licença FastReport.Net, substitua as dlls do FastReport.Net nos projetos NFe.Danfe.Fast\Dll, CTe.Dacte.Fast\DLLs e MDFe.Damdfe.Fast\Dlls pelas dlls de sua versão licenciada, antes de compilar sua aplicação para distribuição. + +>² Obs: Visando abranger o maior número possível de impressoras térmicas, a impressão é feita via spooler do windows. A impressão térmica via spooler, dependendo da impressora, pode sair com má qualidade. Para sanar isso, no relatório são utilizadas duas fontes condensadas que possuem boa legibilidade em tamanho pequeno, a saber a OpenSans e UbuntuCondensed, ambas de uso livre podendo ser obtidas em https://www.google.com/fonts; +As fontes estão anexadas ao projeto em Shared.NFe.Danfe.Base\Fontes_; +Instale as fontes informadas no PC que for imprimir o DANFE da NFCe_; +## Impressão (FastReport) (OpenSource): +https://github.com/FastReports/FastReport +- Exemplos no Projeto *NFe.Danfe.AppTeste.OpenFast*. +- A impressão da NFe utiliza o FastReport.OpenSource (https://github.com/FastReports/FastReport), sendo ele instalado automatico ao utilizar o pacote nuget do Zeus. +- A impressão requer que o arquivo .frx seja indicado, ou seja, ao publicar os binarios de seu projeto os arquivos .frx devem estar juntos e passado o caminho do arquivo para que seja gerado a impressão. +- As saídas suportadas pelo FastReport.OpenSource são Stream ou Byte[], sendo elas em PDF, HTML e PNG. +- Para Impressão de NFCe tambem existe a seguinte opção ESC/POS (direto na impressora): https://github.com/marcosgerene/Gerene.DFe.EscPos. -Código que eu Roberto utilizo para imprimir +#### Impressão em Linux (Nativo ou Docker) + +Para a geração de impressão no Linux, alguns detalhes devem ser compreendidos... +Foi necessário a instalação da biblioteca **libgdiplus** + +- (Exemplo abaixo para Ubuntu 18.x) + +> apt-get install -y --no-install-recommends libgdiplus libc6-dev + +- (Exemplo abaixo para DockerFile Ubuntu 18.x) + +> RUN apt-get update \ + && apt-get install -y --no-install-recommends libgdiplus libc6-dev \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +Caso aconteça algum erro de System.OutOfMemoryException, utilize a versão 6.0.5, o código acima instala a versão padrão dependendo da versão do SO (6.0.4), para instalar a 6.0.5 utilize o seguinte código, nesse caso para Debian 10: + +> RUN apt-get update && apt-get remove libgdiplus -y && apt autoremove -y && apt-get install -y apt-transport-https dirmngr gnupg ca-certificates \ + RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF \ + RUN echo "deb https://download.mono-project.com/repo/debian stable-buster main" | tee /etc/apt/sources.list.d/mono-official-stable.list \ + RUN apt-get update && apt-get install -y libgdiplus=6.0.5-0xamarin1+debian10b1 \ + RUN apt show libgdiplus && rm -rf /var/lib/apt/lists/* + +Tambem foi necessário copiar algumas **fontes**, o relatório de Danfe atual utiliza **Times New Roman**, as fontes contem royalties e não existe repositório online com as mesmas, porem as mesmas estão disponíveis na pasta do windows. (fontes instaladas: times.ttf, timesbd.ttf, timesbi.ttf, timesi.ttf) + +- (Exemplo abaixo para Ubuntu 18.x) + +>sudo apt-get install ttf-mscorefonts-installer + +- (Exemplo para Debian 10) + +>apt-get install -y ttf-mscorefonts-installer fontconfig + +- (Exemplo abaixo para DockerFile Ubuntu 18.x, porem diferente do exemploa anterior, copiando fontes ja existentes em uma pasta para a pasta de destino da imagem docker, não recomendamos essa opção por possíveis problemas porem a imagem de saída fica menor) + +>RUN mkdir -p /usr/share/fonts/truetype/times \ +COPY suapastadasfontes/* /usr/share/fonts/truetype/times/ + +O FastReport.OpenSource é pesado na geração de PDF, por isso não recomendamos o mesmo. Para melhor utilização de memoria/cpu, utilize o FastReport.OpenSource para geração em HTML. Na conversão de HTML para PDF, recomendamos o uso do projeto https://github.com/fpanaccia/Wkhtmltopdf.NetCore + +## Impressão (QuestPdf): +Código que eu Roberto utilizo para imprimir ```cs QuestPDF.Settings.License = LicenseType.Community; @@ -235,70 +298,6 @@ funciona apenas em .net 6 core por hora } ``` - - -## Impressão (FastReport): - -- Exemplo no Projeto *NFe.Danfe.AppTeste.Fast*. -- A impressão de forma nativa (sem dependências de bibliotecas de terceiros) está disponível somente para a *NFCe*¹. -- O projeto conta também com a impressão em FastReport.Net¹ (https://www.fast-report.com/pt/product/fast-report-net/) para *NFe*, *NFCe²* _(térmica)_, *CTe* _(modal rodoviário)_ e *MDFe*. - ->¹ As dlls do FastReport.Net disponibilizadas na biblioteca são da versão de demonstração³ do mesmo. A versão de demonstração coloca uma marca d'água "DEMO VERSION" na impressão do relatório. Se você possui licença FastReport.Net, substitua as dlls do FastReport.Net nos projetos NFe.Danfe.Fast\Dll, CTe.Dacte.Fast\DLLs e MDFe.Damdfe.Fast\Dlls pelas dlls de sua versão licenciada, antes de compilar sua aplicação para distribuição. - ->² Obs: Visando abranger o maior número possível de impressoras térmicas, a impressão é feita via spooler do windows. A impressão térmica via spooler, dependendo da impressora, pode sair com má qualidade. Para sanar isso, no relatório são utilizadas duas fontes condensadas que possuem boa legibilidade em tamanho pequeno, a saber a OpenSans e UbuntuCondensed, ambas de uso livre podendo ser obtidas em https://www.google.com/fonts; -As fontes estão anexadas ao projeto em Shared.NFe.Danfe.Base\Fontes_; -Instale as fontes informadas no PC que for imprimir o DANFE da NFCe_; - -## Impressão (OpenFastReport): - -- Exemplos no Projeto *NFe.Danfe.AppTeste.OpenFast*. -- A impressão da NFe utiliza o FastReport.OpenSource (https://github.com/FastReports/FastReport), sendo ele instalado automatico ao utilizar o pacote nuget do Zeus. -- A impressão requer que o arquivo .frx seja indicado, ou seja, ao publicar os binarios de seu projeto os arquivos .frx devem estar juntos e passado o caminho do arquivo para que seja gerado a impressão. -- As saídas suportadas pelo FastReport.OpenSource são Stream ou Byte[], sendo elas em PDF, HTML e PNG. -- Para Impressão de NFCe tambem existe a seguinte opção ESC/POS (direto na impressora): https://github.com/marcosgerene/Gerene.DFe.EscPos. - -#### Impressão em Linux (Nativo ou Docker) - -Para a geração de impressão no Linux, alguns detalhes devem ser compreendidos... - -Foi necessário a instalação da biblioteca **libgdiplus** - -- (Exemplo abaixo para Ubuntu 18.x) - -> apt-get install -y --no-install-recommends libgdiplus libc6-dev - -- (Exemplo abaixo para DockerFile Ubuntu 18.x) - -> RUN apt-get update \ - && apt-get install -y --no-install-recommends libgdiplus libc6-dev \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -Caso aconteça algum erro de System.OutOfMemoryException, utilize a versão 6.0.5, o código acima instala a versão padrão dependendo da versão do SO (6.0.4), para instalar a 6.0.5 utilize o seguinte código, nesse caso para Debian 10: - -> RUN apt-get update && apt-get remove libgdiplus -y && apt autoremove -y && apt-get install -y apt-transport-https dirmngr gnupg ca-certificates \ - RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF \ - RUN echo "deb https://download.mono-project.com/repo/debian stable-buster main" | tee /etc/apt/sources.list.d/mono-official-stable.list \ - RUN apt-get update && apt-get install -y libgdiplus=6.0.5-0xamarin1+debian10b1 \ - RUN apt show libgdiplus && rm -rf /var/lib/apt/lists/* - -Tambem foi necessário copiar algumas **fontes**, o relatório de Danfe atual utiliza **Times New Roman**, as fontes contem royalties e não existe repositório online com as mesmas, porem as mesmas estão disponíveis na pasta do windows. (fontes instaladas: times.ttf, timesbd.ttf, timesbi.ttf, timesi.ttf) - -- (Exemplo abaixo para Ubuntu 18.x) - ->sudo apt-get install ttf-mscorefonts-installer - -- (Exemplo para Debian 10) - ->apt-get install -y ttf-mscorefonts-installer fontconfig - -- (Exemplo abaixo para DockerFile Ubuntu 18.x, porem diferente do exemploa anterior, copiando fontes ja existentes em uma pasta para a pasta de destino da imagem docker, não recomendamos essa opção por possíveis problemas porem a imagem de saída fica menor) - ->RUN mkdir -p /usr/share/fonts/truetype/times \ -COPY suapastadasfontes/* /usr/share/fonts/truetype/times/ - -O FastReport.OpenSource é pesado na geração de PDF, por isso não recomendamos o mesmo. Para melhor utilização de memoria/cpu, utilize o FastReport.OpenSource para geração em HTML. Na conversão de HTML para PDF, recomendamos o uso do projeto https://github.com/fpanaccia/Wkhtmltopdf.NetCore - ## Suporte: O uso dessa biblioteca não lhe dá quaisquer garantias de suporte. No entanto se tiver dúvidas a respeito do uso desta biblioteca, abra um novo Issue aqui mesmo no github ou pergunte no grupo **Discord** => https://discord.gg/EE4TGKAkkG. From 32304df1bb4741865d672cf6b82874add24a509d Mon Sep 17 00:00:00 2001 From: Danilo Breda Date: Sat, 20 Jul 2024 12:48:26 -0300 Subject: [PATCH 04/35] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 542d1e561..2f484f96c 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ZeusFiscal +# Hercules-NET / ZeusFiscal ### A Principal Biblioteca em C# para Emissão e Impressão de NFe, NFCe, MDF-e e CT-e **![(Este é o Fork e Continuação do DFe.NET ("Zeus") SAIBA MAIS SOBRE A 'DECLARAÇÃO OFICIAL A COMUNIDADE "ZEUS"' NESSE LINK!)](https://github.com/Hercules-NET/ZeusFiscal/issues/1)** From ce57c3bccbdd0da1d86b6de1a10b815b2fd1c512 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Fri, 26 Jul 2024 18:08:13 -0300 Subject: [PATCH 05/35] =?UTF-8?q?Importa=C3=A7=C3=A3o=20de=20CTeOS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Para importar o XML de uma CTeOS precisei criar essas classes. --- CTe.Classes/cteOSProc.cs | 32 +++++++++++ CTe.Utils/CTe/ExCteOSProc.cs | 101 +++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 CTe.Classes/cteOSProc.cs create mode 100644 CTe.Utils/CTe/ExCteOSProc.cs diff --git a/CTe.Classes/cteOSProc.cs b/CTe.Classes/cteOSProc.cs new file mode 100644 index 000000000..d75ceea22 --- /dev/null +++ b/CTe.Classes/cteOSProc.cs @@ -0,0 +1,32 @@ +using System; +using System.Xml.Serialization; +using CTe.Classes.Protocolo; +using CTe.Classes.Servicos.Tipos; +using DFe.Utils; + +namespace CTe.Classes +{ + [Serializable] + [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/cte", + ElementName = "cteOSProc")] + public class cteOSProc + { + [XmlAttribute] + public versao versao { get; set; } + + public CTe CTeOS { get; set; } + + public protCTe protCTe { get; set; } + + + public static cteOSProc LoadXmlString(string xml) + { + return FuncoesXml.XmlStringParaClasse(xml); + } + + public static cteOSProc LoadXmlArquivo(string caminhoArquivoXml) + { + return FuncoesXml.ArquivoXmlParaClasse(caminhoArquivoXml); + } + } +} \ No newline at end of file diff --git a/CTe.Utils/CTe/ExCteOSProc.cs b/CTe.Utils/CTe/ExCteOSProc.cs new file mode 100644 index 000000000..c990a2edf --- /dev/null +++ b/CTe.Utils/CTe/ExCteOSProc.cs @@ -0,0 +1,101 @@ +/********************************************************************************/ +/* Projeto: Biblioteca ZeusNFe */ +/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */ +/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */ +/* */ +/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */ +/* Zeusdev Tecnologia LTDA ME */ +/* */ +/* Você pode obter a última versão desse arquivo no GitHub */ +/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */ +/* */ +/* */ +/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */ +/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */ +/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */ +/* qualquer versão posterior. */ +/* */ +/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */ +/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */ +/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/ +/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */ +/* */ +/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/ +/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */ +/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +/* Você também pode obter uma copia da licença em: */ +/* http://www.opensource.org/licenses/lgpl-license.php */ +/* */ +/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */ +/* http://www.zeusautomacao.com.br/ */ +/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ +/********************************************************************************/ + +using System.IO; +using CTe.Classes; +using DFe.Utils; +using cteOSProc = CTe.Classes.cteOSProc; + +namespace CTe.Utils.CTe +{ + public static class ExtCteOSProc + { + /// + /// Carrega um arquivo XML para um objeto da classe cteOSProc + /// + /// + /// arquivo XML + /// Retorna um cteOSProc carregada com os dados do XML + public static cteOSProc CarregarDeArquivoXml(this cteOSProc cteOSProc, string arquivoXml) + { + return FuncoesXml.ArquivoXmlParaClasse(arquivoXml); + } + + /// + /// Converte o objeto cteOSProc para uma string no formato XML + /// + /// + /// Retorna uma string no formato XML com os dados do cteOSProc + public static string ObterXmlString(this cteOSProc cteOSProc) + { + return FuncoesXml.ClasseParaXmlString(cteOSProc); + } + + /// + /// Coverte uma string XML no formato cteOSProc para um objeto cteOSProc + /// + /// + /// + /// Retorna um objeto do tipo cteOSProc + public static cteOSProc CarregarDeXmlString(this cteOSProc cteOSProc, string xmlString) + { + var s = FuncoesXml.ObterNodeDeStringXml(typeof(cteOSProc).Name, xmlString); + return FuncoesXml.XmlStringParaClasse(s); + } + + /// + /// Grava os dados do objeto cteOSProc em um arquivo XML + /// + /// Objeto cteOSProc + /// Diretório com nome do arquivo a ser gravado + public static void SalvarArquivoXml(this cteOSProc cteOSProc, string arquivoXml) + { + FuncoesXml.ClasseParaArquivoXml(cteOSProc, arquivoXml); + } + + public static void SalvarXmlEmDisco(this cteOSProc cteOSProc, ConfiguracaoServico configuracaoServico = null) + { + if (cteOSProc == null) return; + + var instanciaServico = configuracaoServico ?? ConfiguracaoServico.Instancia; + + if (instanciaServico.NaoSalvarXml()) return; + + var caminhoXml = instanciaServico.DiretorioSalvarXml; + + var arquivoSalvar = Path.Combine(caminhoXml, cteOSProc.CTeOS.Chave() + "-cteOSProc.xml"); + + FuncoesXml.ClasseParaArquivoXml(cteOSProc, arquivoSalvar); + } + } +} \ No newline at end of file From 8eb50315d1b96f08ab3c031fc57c7edc951ff497 Mon Sep 17 00:00:00 2001 From: Eneias Ramos de Melo Date: Fri, 2 Aug 2024 13:56:19 -0300 Subject: [PATCH 06/35] bugfix/FastReportUtilsCompilerException316.13ErrorCS1717: FastReport.Utils.CompilerException: (316,13): Error CS1717: Assignment made to same variable; did you mean to assign something else? --- NFe.Danfe.Base/NFe/NFeRetrato.frx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/NFe.Danfe.Base/NFe/NFeRetrato.frx b/NFe.Danfe.Base/NFe/NFeRetrato.frx index 4b721937e..0adf47517 100644 --- a/NFe.Danfe.Base/NFe/NFeRetrato.frx +++ b/NFe.Danfe.Base/NFe/NFeRetrato.frx @@ -314,8 +314,6 @@ namespace FastReport valor = "(" +valor.Substring(0,2) + ") " + valor.Substring(2,4) + "-" + valor.Substring(6,4); else if (valor.Length == 11) valor = "(" +valor.Substring(0,2) + ") " + valor.Substring(2,5) + "-" + valor.Substring(7,4); - else - valor = valor; break; case 'd': //cpf / cnpj @@ -1459,4 +1457,4 @@ namespace FastReport - \ No newline at end of file + From ece6988dd4169b42fa1b49352dc5e29a8a978454 Mon Sep 17 00:00:00 2001 From: Eneias Ramos de Melo Date: Fri, 2 Aug 2024 15:36:07 -0300 Subject: [PATCH 07/35] bugfix/FastReportUtilsCompilerExceptionText34ErrorCS0105: FastReport.Utils.CompilerException: (Text34): Error CS0105: The using directive for 'NFe.Classes.Informacoes.Identificacao.Tipos' appeared previously in this namespace --- NFe.Danfe.Base/NFe/NFeSimplificado.frx | 1 - 1 file changed, 1 deletion(-) diff --git a/NFe.Danfe.Base/NFe/NFeSimplificado.frx b/NFe.Danfe.Base/NFe/NFeSimplificado.frx index 296d0ecce..b60de21d6 100644 --- a/NFe.Danfe.Base/NFe/NFeSimplificado.frx +++ b/NFe.Danfe.Base/NFe/NFeSimplificado.frx @@ -16,7 +16,6 @@ using FastReport.Dialog; using FastReport.Barcode; using FastReport.Table; using FastReport.Utils; -using NFe.Classes.Informacoes.Identificacao.Tipos; using NFe.Classes.Informacoes.Detalhe.Tributacao; using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos; using NFe.Classes.Informacoes.Detalhe.Tributacao.Federal.Tipos; From 84e3116731cac47f8cc56ca5c452baf7d468413f Mon Sep 17 00:00:00 2001 From: Danilo Breda Date: Wed, 7 Aug 2024 18:20:56 -0300 Subject: [PATCH 08/35] feature/NFeDanfeHtmlLogo: adicionado parametro logo para exibir uma imagem base64 na NFe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mudanças baseadas no pull #32 de @eneiasramos --- NFe.Danfe.Html/Dominio/DanfeNFe.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/NFe.Danfe.Html/Dominio/DanfeNFe.cs b/NFe.Danfe.Html/Dominio/DanfeNFe.cs index 5b74ec46d..18bc0ceaa 100644 --- a/NFe.Danfe.Html/Dominio/DanfeNFe.cs +++ b/NFe.Danfe.Html/Dominio/DanfeNFe.cs @@ -176,7 +176,7 @@ public class DanfeNFe /// Número do protocolo retornado pela SEFAZ /// Créditos /// ISSQN - public DanfeNFe(Classes.NFe nfe, Status status,string protocolo, string creditos, Issqn issqn=null) + public DanfeNFe(Classes.NFe nfe, Status status,string protocolo, string creditos, Issqn issqn = null, string logo = "") { if (nfe == null) throw new ArgumentNullException(nameof(nfe)); if(nfe.infNFe.ide.mod!=ModeloDocumento.NFe) throw new InvalidOperationException("Modelo da nota imcompatível com o esperado 55"); @@ -187,7 +187,7 @@ public DanfeNFe(Classes.NFe nfe, Status status,string protocolo, string creditos var enderecoEmit = new Endereco(nfe.infNFe.emit.enderEmit.xLgr, nfe.infNFe.emit.enderEmit.xBairro, nfe.infNFe.emit.enderEmit.xMun, nfe.infNFe.emit.enderEmit.nro, nfe.infNFe.emit.enderEmit.CEP, nfe.infNFe.emit.enderEmit.UF.ToString(), nfe.infNFe.emit.enderEmit.fone.ToString(), nfe.infNFe.emit.enderEmit.UF.ToString()); - Emitente = new Emitente(nfe.infNFe.emit.xNome, nfe.infNFe.emit.IE, doc, "", enderecoEmit); + Emitente = new Emitente(nfe.infNFe.emit.xNome, nfe.infNFe.emit.IE, doc, logo, enderecoEmit); #endregion @@ -379,4 +379,4 @@ public DanfeNFe(Classes.NFe nfe, Status status,string protocolo, string creditos #endregion } -} \ No newline at end of file +} From 3ebb76d80b0100fe30d4ccfff6d720bdb396c8f0 Mon Sep 17 00:00:00 2001 From: Evaldo Avelar Marques Date: Thu, 8 Aug 2024 12:30:10 -0300 Subject: [PATCH 09/35] fix(cte): erro ao imprimir xml com colchetes --- CTe.Dacte.Base/CTe/CTeRetrato.frx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CTe.Dacte.Base/CTe/CTeRetrato.frx b/CTe.Dacte.Base/CTe/CTeRetrato.frx index 9e3a4239e..a74e45702 100644 --- a/CTe.Dacte.Base/CTe/CTeRetrato.frx +++ b/CTe.Dacte.Base/CTe/CTeRetrato.frx @@ -1491,7 +1491,7 @@ namespace FastReport - + @@ -1584,8 +1584,8 @@ namespace FastReport - - + + From 3cd575342a7d7d90ec65631a3065ca77b853b14a Mon Sep 17 00:00:00 2001 From: mgpx-work Date: Thu, 15 Aug 2024 09:57:32 -0300 Subject: [PATCH 10/35] =?UTF-8?q?Microajuste=20no=20sum=C3=A1rio.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NFe.Classes/Informacoes/Observacoes/procRefTipos.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NFe.Classes/Informacoes/Observacoes/procRefTipos.cs b/NFe.Classes/Informacoes/Observacoes/procRefTipos.cs index 5f39e77e8..18ace9443 100644 --- a/NFe.Classes/Informacoes/Observacoes/procRefTipos.cs +++ b/NFe.Classes/Informacoes/Observacoes/procRefTipos.cs @@ -128,7 +128,7 @@ public enum TipoAtoConcessorio tpAjusteSINIEF = 14, /// - /// 14 - Convênio ICMS (NT2023.004) + /// 15 - Convênio ICMS (NT2023.004) /// [Description("Convênio ICMS")] [XmlEnum("15")] From e64594a89fbb9a13e71c0e8fd8d34ace53f0a577 Mon Sep 17 00:00:00 2001 From: Claudinei Cecilio Date: Wed, 4 Sep 2024 22:40:36 -0300 Subject: [PATCH 11/35] =?UTF-8?q?feat:Incluido=20mapeamento=20de=20proprie?= =?UTF-8?q?dades=20faltantes=20do=20servi=C3=A7o=20de=20consulta=20de=20st?= =?UTF-8?q?atus;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Servicos/Status/retConsStatServ.cs | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/NFe.Classes/Servicos/Status/retConsStatServ.cs b/NFe.Classes/Servicos/Status/retConsStatServ.cs index 2c4edc57b..dd06e1216 100644 --- a/NFe.Classes/Servicos/Status/retConsStatServ.cs +++ b/NFe.Classes/Servicos/Status/retConsStatServ.cs @@ -30,9 +30,11 @@ /* http://www.zeusautomacao.com.br/ */ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ +using System; using System.Xml.Serialization; using DFe.Classes.Entidades; using DFe.Classes.Flags; +using DFe.Utils; namespace NFe.Classes.Servicos.Status { @@ -70,5 +72,41 @@ public class retConsStatServ : IRetornoServico /// FR07 - Código da UF que atendeu a solicitação /// public Estado cUF { get; set; } + + /// + /// FR08 - Data e hora de recebimento + /// + [XmlIgnore] + public DateTimeOffset dhRecbto { get; set; } + + [XmlElement(ElementName = "dhRecbto")] + public string ProxyDhRecbto + { + get { return dhRecbto.ParaDataHoraStringUtc(); } + set { dhRecbto = DateTimeOffset.Parse(value); } + } + + /// + /// FR09 - Tempo médio de resposta do serviço + /// + public int? tMed { get; set; } + + /// + /// FR10 - Data e hora de retorno do Web Service + /// + [XmlIgnore] + public DateTimeOffset? dhRetorno { get; set; } + + [XmlElement(ElementName = "dhRetorno")] + public string ProxydhRetorno + { + get { return dhRetorno.ParaDataHoraStringUtc(); } + set { dhRetorno = DateTimeOffset.Parse(value); } + } + + /// + /// FR11 - Informações adicionais para o Contribuinte + /// + public string? xObs { get; set; } } } \ No newline at end of file From 0b3f449e52f54beb902aa54e38f05b3527d5b8bf Mon Sep 17 00:00:00 2001 From: Claudinei Cecilio Date: Wed, 4 Sep 2024 22:49:46 -0300 Subject: [PATCH 12/35] =?UTF-8?q?fix:Ajuste=20nos=20niveis=20de=20serializ?= =?UTF-8?q?a=C3=A7=C3=A3o=20do=20grupo=20de=20cana;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NFe.Classes/Informacoes/Cana/cana.cs | 61 ++++++++++++++++++++++++++ NFe.Classes/Informacoes/Cana/deduc.cs | 30 ------------- NFe.Classes/Informacoes/Cana/forDia.cs | 30 ------------- 3 files changed, 61 insertions(+), 60 deletions(-) diff --git a/NFe.Classes/Informacoes/Cana/cana.cs b/NFe.Classes/Informacoes/Cana/cana.cs index a1b8c559e..0c88e4c63 100644 --- a/NFe.Classes/Informacoes/Cana/cana.cs +++ b/NFe.Classes/Informacoes/Cana/cana.cs @@ -37,6 +37,13 @@ namespace NFe.Classes.Informacoes.Cana { public class cana { + private decimal _qTotMes; + private decimal _qTotAnt; + private decimal _qTotGer; + private decimal _vFor; + private decimal _vTotDed; + private decimal _vLiqFor; + /// /// ZC02 - Identificação da safra /// @@ -53,10 +60,64 @@ public class cana [XmlElement("forDia")] public List forDia { get; set; } + /// + /// ZC07 - Quantidade Total do Mês + /// + public decimal qTotMes + { + get { return _qTotMes; } + set { _qTotMes = value.Arredondar(10); } + } + + /// + /// ZC08 - Quantidade Total Anterior + /// + public decimal qTotAnt + { + get { return _qTotAnt; } + set { _qTotAnt = value.Arredondar(10); } + } + + /// + /// ZC09 - Quantidade Total Geral + /// + public decimal qTotGer + { + get { return _qTotGer; } + set { _qTotGer = value.Arredondar(10); } + } + /// /// ZC10 - Grupo Deduções – Taxas e Contribuições /// [XmlElement("deduc")] public List deduc { get; set; } + + /// + /// ZC13 - Valor dos Fornecimentos + /// + public decimal vFor + { + get { return _vFor; } + set { _vFor = value.Arredondar(2); } + } + + /// + /// ZC14 - Valor Total da Dedução + /// + public decimal vTotDed + { + get { return _vTotDed; } + set { _vTotDed = value.Arredondar(2); } + } + + /// + /// ZC15 - Valor Líquido dos Fornecimentos + /// + public decimal vLiqFor + { + get { return _vLiqFor; } + set { _vLiqFor = value.Arredondar(2); } + } } } \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Cana/deduc.cs b/NFe.Classes/Informacoes/Cana/deduc.cs index cba4bac83..90f60dd5b 100644 --- a/NFe.Classes/Informacoes/Cana/deduc.cs +++ b/NFe.Classes/Informacoes/Cana/deduc.cs @@ -35,9 +35,6 @@ namespace NFe.Classes.Informacoes.Cana public class deduc { private decimal _vDed; - private decimal _vFor; - private decimal _vTotDed; - private decimal _vLiqFor; /// /// ZC11 - Descrição da Dedução @@ -52,32 +49,5 @@ public decimal vDed get { return _vDed; } set { _vDed = value.Arredondar(2); } } - - /// - /// ZC13 - Valor dos Fornecimentos - /// - public decimal vFor - { - get { return _vFor; } - set { _vFor = value.Arredondar(2); } - } - - /// - /// ZC14 - Valor Total da Dedução - /// - public decimal vTotDed - { - get { return _vTotDed; } - set { _vTotDed = value.Arredondar(2); } - } - - /// - /// ZC15 - Valor Líquido dos Fornecimentos - /// - public decimal vLiqFor - { - get { return _vLiqFor; } - set { _vLiqFor = value.Arredondar(2); } - } } } \ No newline at end of file diff --git a/NFe.Classes/Informacoes/Cana/forDia.cs b/NFe.Classes/Informacoes/Cana/forDia.cs index c4b3369c3..cc6bce354 100644 --- a/NFe.Classes/Informacoes/Cana/forDia.cs +++ b/NFe.Classes/Informacoes/Cana/forDia.cs @@ -37,9 +37,6 @@ namespace NFe.Classes.Informacoes.Cana public class forDia { private decimal _qtde; - private decimal _qTotMes; - private decimal _qTotAnt; - private decimal _qTotGer; /// /// ZC05 - Dia @@ -55,32 +52,5 @@ public decimal qtde get { return _qtde; } set { _qtde = value.Arredondar(10); } } - - /// - /// ZC07 - Quantidade Total do Mês - /// - public decimal qTotMes - { - get { return _qTotMes; } - set { _qTotMes = value.Arredondar(10); } - } - - /// - /// ZC08 - Quantidade Total Anterior - /// - public decimal qTotAnt - { - get { return _qTotAnt; } - set { _qTotAnt = value.Arredondar(10); } - } - - /// - /// ZC09 - Quantidade Total Geral - /// - public decimal qTotGer - { - get { return _qTotGer; } - set { _qTotGer = value.Arredondar(10); } - } } } \ No newline at end of file From f89a89371d63fdc8d71923dbfbf71870aed1cd27 Mon Sep 17 00:00:00 2001 From: Claudinei Cecilio Date: Wed, 4 Sep 2024 23:03:19 -0300 Subject: [PATCH 13/35] fix:Ajuste no grupo de campos gCred conforme NT 2019.001; --- NFe.Classes/Informacoes/Detalhe/gCred.cs | 41 ++++++++++++++++++++++++ NFe.Classes/Informacoes/Detalhe/prod.cs | 36 +++------------------ 2 files changed, 45 insertions(+), 32 deletions(-) create mode 100644 NFe.Classes/Informacoes/Detalhe/gCred.cs diff --git a/NFe.Classes/Informacoes/Detalhe/gCred.cs b/NFe.Classes/Informacoes/Detalhe/gCred.cs new file mode 100644 index 000000000..425aef414 --- /dev/null +++ b/NFe.Classes/Informacoes/Detalhe/gCred.cs @@ -0,0 +1,41 @@ +namespace NFe.Classes.Informacoes.Detalhe +{ + public class gCred + { + private decimal? _pCredPresumido; + private decimal? _vCredPresumido; + + /// + /// I05h - Código de Benefício Fiscal de Crédito Presumido na UF aplicado ao item + /// + public string cCredPresumido { get; set; } + + /// + /// I05i - Percentual do Crédito Presumido + /// + public decimal? pCredPresumido + { + get { return _pCredPresumido; } + set { _pCredPresumido = value.Arredondar(4); } + } + + /// + /// I05j - Valor do Crédito Presumido + /// + public decimal? vCredPresumido + { + get { return _vCredPresumido; } + set { _vCredPresumido = value.Arredondar(2); } + } + + public bool ShouldSerializepCredPresumido() + { + return _pCredPresumido.HasValue && _pCredPresumido > 0; + } + + public bool ShouldSerializevCredPresumido() + { + return _vCredPresumido.HasValue && _vCredPresumido > 0; + } + } +} diff --git a/NFe.Classes/Informacoes/Detalhe/prod.cs b/NFe.Classes/Informacoes/Detalhe/prod.cs index cd4313d8e..e32da3749 100644 --- a/NFe.Classes/Informacoes/Detalhe/prod.cs +++ b/NFe.Classes/Informacoes/Detalhe/prod.cs @@ -59,8 +59,6 @@ public prod() private string _cEan; private string _cEanTrib; private decimal _vUnCom; - private decimal? _pCredPresumido; - private decimal? _vCredPresumido; /// /// I02 - Código do produto ou serviço @@ -129,29 +127,13 @@ public bool indEscalaSpecified /// declarações, nas UF que o exigem. /// public string cBenef { get; set; } - - /// - /// I05h - Código de Benefício Fiscal de Crédito Presumido na UF aplicado ao item - /// - public string cCredPresumido { get; set; } /// - /// I05i - Percentual do Crédito Presumido - /// - public decimal? pCredPresumido - { - get { return _pCredPresumido; } - set { _pCredPresumido = value.Arredondar(4); } - } - - /// - /// I05j - Valor do Crédito Presumido + /// I05G - Grupo de Informações sobre o Crédito Presumido + /// Versão 4.00 - NT 2019.001 /// - public decimal? vCredPresumido - { - get { return _vCredPresumido; } - set { _vCredPresumido = value.Arredondar(2); } - } + [XmlElement("gCred")] + public List gCred { get; set; } /// /// I06 - Código EX TIPI (3 posições) @@ -365,16 +347,6 @@ public bool ShouldSerializevOutro() { return vOutro.HasValue && vOutro > 0; } - - public bool ShouldSerializepCredPresumido() - { - return _pCredPresumido.HasValue && _pCredPresumido > 0; - } - - public bool ShouldSerializevCredPresumido() - { - return _vCredPresumido.HasValue && _vCredPresumido > 0; - } } } From 14f54d5a2318f1dd744dadacdec22ab4094e8c78 Mon Sep 17 00:00:00 2001 From: Claudinei Cecilio Date: Fri, 6 Sep 2024 15:26:01 -0300 Subject: [PATCH 14/35] =?UTF-8?q?fix:Ajuste=20nos=20endere=C3=A7os=20dos?= =?UTF-8?q?=20webservice=20para=20o=20evento=20de=20insucesso=20na=20entre?= =?UTF-8?q?ga=20(NT=202023.005);?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DFe.Classes/Entidades/Estado.cs | 6 ++++++ NFe.Servicos/ServicoNfeFactory.cs | 2 +- NFe.Servicos/ServicosNFe.cs | 4 ++-- NFe.Utils/Enderecos/Enderecador.cs | 4 ++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/DFe.Classes/Entidades/Estado.cs b/DFe.Classes/Entidades/Estado.cs index 4461718d1..27c38adb2 100644 --- a/DFe.Classes/Entidades/Estado.cs +++ b/DFe.Classes/Entidades/Estado.cs @@ -204,6 +204,12 @@ public enum Estado [XmlEnum("91")] AN = 91, + /// + /// SVRS + /// + [XmlEnum("92")] + SVRS = 92, + /// /// Exterior /// diff --git a/NFe.Servicos/ServicoNfeFactory.cs b/NFe.Servicos/ServicoNfeFactory.cs index b9e7eb1c6..7ba3225f3 100644 --- a/NFe.Servicos/ServicoNfeFactory.cs +++ b/NFe.Servicos/ServicoNfeFactory.cs @@ -231,7 +231,7 @@ public static INfeServico CriaWsdlOutros(ServicoNFe servico, ConfiguracaoServico case ServicoNFe.RecepcaoEventoInsucessoEntregaNFe: case ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe: - return new RecepcaoEvento4AN(url, certificado, cfg.TimeOut); + return new RecepcaoEvento4SVCAN(url, certificado, cfg.TimeOut); case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: if (cfg.VersaoRecepcaoEventoManifestacaoDestinatario == VersaoServico.Versao400) diff --git a/NFe.Servicos/ServicosNFe.cs b/NFe.Servicos/ServicosNFe.cs index 4aee927e9..70a875e36 100644 --- a/NFe.Servicos/ServicosNFe.cs +++ b/NFe.Servicos/ServicosNFe.cs @@ -824,7 +824,7 @@ public RetornoRecepcaoEvento RecepcaoEventoInsucessoEntrega(int idlote, }; var infEvento = new infEventoEnv { - cOrgao = _cFgServico.cUF, + cOrgao = Estado.SVRS, tpAmb = _cFgServico.tpAmb, chNFe = chaveNFe, dhEvento = dhEvento ?? DateTime.Now, @@ -876,7 +876,7 @@ public RetornoRecepcaoEvento RecepcaoEventoCancInsucessoEntrega(int idlote, var infEvento = new infEventoEnv { - cOrgao = _cFgServico.cUF, + cOrgao = Estado.SVRS, tpAmb = _cFgServico.tpAmb, chNFe = chaveNFe, dhEvento = dhEvento ?? DateTime.Now, diff --git a/NFe.Utils/Enderecos/Enderecador.cs b/NFe.Utils/Enderecos/Enderecador.cs index 36de39cd4..0a9acc296 100644 --- a/NFe.Utils/Enderecos/Enderecador.cs +++ b/NFe.Utils/Enderecos/Enderecador.cs @@ -1644,8 +1644,8 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.ConsultaGtin }, versao1, TipoAmbiente.Homologacao, emissao, estado, modelo, "https://dfe-servico.svrs.rs.gov.br/ws/ccgConsGTIN/ccgConsGTIN.asmx"); //Insucesso Entrega NFe - addServico(new[] { ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe }, versao1, TipoAmbiente.Producao, emissao, estado, modelo, "https://www.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); - addServico(new[] { ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe }, versao1, TipoAmbiente.Homologacao, emissao, estado, modelo, "https://hom1.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe }, versao1, TipoAmbiente.Producao, emissao, estado, modelo, "https://nfe.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe }, versao1, TipoAmbiente.Homologacao, emissao, estado, modelo, "https://nfe-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); } } } From fe109480264aa5c0b36625a51c40a37d558754ca Mon Sep 17 00:00:00 2001 From: Danilo Breda Date: Sat, 7 Sep 2024 03:18:22 -0300 Subject: [PATCH 15/35] fix tipo referencia anulaveis c# 8.0 suporte apenas .net 5+ --- NFe.Classes/Servicos/Status/retConsStatServ.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NFe.Classes/Servicos/Status/retConsStatServ.cs b/NFe.Classes/Servicos/Status/retConsStatServ.cs index dd06e1216..9221f914a 100644 --- a/NFe.Classes/Servicos/Status/retConsStatServ.cs +++ b/NFe.Classes/Servicos/Status/retConsStatServ.cs @@ -107,6 +107,10 @@ public string ProxydhRetorno /// /// FR11 - Informações adicionais para o Contribuinte /// +#if NET5_0_OR_GREATER//o uso de tipos de referência anuláveis não é permitido até o C# 8.0. public string? xObs { get; set; } +#else + public string xObs { get; set; } +#endif } } \ No newline at end of file From f6c18459d644b0d9f255e2fec35001f0944919fb Mon Sep 17 00:00:00 2001 From: Claudinei Cecilio Date: Thu, 12 Sep 2024 10:51:23 -0300 Subject: [PATCH 16/35] =?UTF-8?q?add:Mapeamento=20de=20tags=20e=20servi?= =?UTF-8?q?=C3=A7os=20para=20o=20evento=20de=20comprovante=20de=20entrega;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NFe.Classes/Servicos/Evento/detEvento.cs | 56 ++++++++++++++++++- .../Servicos/Tipos/NFeServicosTipos.cs | 24 ++++++++ NFe.Integracao/NFeFacade.cs | 1 + NFe.Servicos/ServicoNfeFactory.cs | 4 ++ NFe.Servicos/ServicosNFe.cs | 4 +- NFe.Utils/ConfiguracaoServico.cs | 16 ++++++ NFe.Utils/Enderecos/Enderecador.cs | 8 ++- NFe.Utils/Validacao/Validador.cs | 4 ++ 8 files changed, 113 insertions(+), 4 deletions(-) diff --git a/NFe.Classes/Servicos/Evento/detEvento.cs b/NFe.Classes/Servicos/Evento/detEvento.cs index 938e74a55..c3fe99e7a 100644 --- a/NFe.Classes/Servicos/Evento/detEvento.cs +++ b/NFe.Classes/Servicos/Evento/detEvento.cs @@ -169,7 +169,7 @@ public bool ShouldSerializeItensAverbados() } #endregion - #region Cancelamento Insucesso NFe + #region Cancelamento Insucesso/Comprovante de Entrega NFe /// /// P22 - Informar o número do Protocolo de Autorização do @@ -178,7 +178,7 @@ public bool ShouldSerializeItensAverbados() public string nProtEvento { get; set; } #endregion - + #region Insucesso NFe [XmlIgnore] public DateTimeOffset? dhTentativaEntrega { get; set; } @@ -262,5 +262,57 @@ public bool ShouldSerializelongGPS() #endregion + #region Comprovante Entrega NFe + + /// + /// P30 - Data e hora do final da entrega + /// + [XmlIgnore] + public DateTimeOffset? dhEntrega { get; set; } + + /// + /// Proxy para dhEntrega no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) + /// + [XmlElement(ElementName = "dhEntrega")] + public string ProxyDhEntrega + { + get { return dhEntrega.ParaDataHoraStringUtc(); } + set { dhEntrega = DateTimeOffset.Parse(value); } + } + + /// + /// P31 - Número do documento de identificação da pessoa que assinou o Comprovante de Entrega da NF-e/> + /// + public string nDoc { get; set; } + + /// + /// P32 - Nome da pessoa que assinou o Comprovante de Entrega da NF-e/> + /// + public string xNome { get; set; } + + /// + /// P35 - Hash SHA-1, no formato Base64, resultante da concatenação de: Chave de Acesso da NF-e + Base64 + /// da imagem capturada do Comprovante de Entrega da NFe (ex: imagem capturada da assinatura eletrônica, digital do recebedor, foto, etc). + /// + public string hashComprovante { get; set; } + + /// + /// P36 - Data e hora da geração do hash da tentativa de entrega. Formato AAAA-MMDDThh:mm:ssTZD. + /// + [XmlIgnore] + public DateTimeOffset? dhHashComprovante { get; set; } + + /// + /// Proxy para dhHashComprovante no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) + /// + [XmlElement(ElementName = "dhHashComprovante")] + public string ProxyDhHashComprovante + { + get { return dhHashComprovante.ParaDataHoraStringUtc(); } + set { dhHashComprovante = DateTimeOffset.Parse(value); } + } + + #endregion + } } \ No newline at end of file diff --git a/NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs b/NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs index 8b3dadc3f..826e3247d 100644 --- a/NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs +++ b/NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs @@ -64,6 +64,16 @@ public enum ServicoNFe /// RecepcaoEventoCancInsucessoEntregaNFe, + /// + /// serviço destinado à recepção de mensagem do Evento Comprovante de Entrega da NFe + /// + RecepcaoEventoComprovanteEntregaNFe, + + /// + /// serviço destinado à recepção de mensagem do Evento Cancelamento do Comprovante de Entrega da NFe + /// + RecepcaoEventoCancComprovanteEntregaNFe, + /// /// serviço destinado à recepção de mensagem do Evento de Manifestação do destinatário da NF-e /// @@ -211,6 +221,20 @@ public enum NFeTipoEvento [XmlEnum("110193")] TeNfeCancInsucessoNaEntregadaNFe = 110193, + /// + /// 110130 - Comprovante de Entrega da NF-e + /// + [Description("Comprovante de Entrega da NF-e")] + [XmlEnum("110130")] + TeNfeComprovanteDeEntregadaNFe = 110130, + + /// + /// 110131 - Cancelamento Comprovante de Entrega da NF-e + /// + [Description("Cancelamento Comprovante de Entrega da NF-e")] + [XmlEnum("110131")] + TeNfeCancComprovanteDeEntregadaNFe = 110131, + /// /// 210200 – Confirmação da Operação /// diff --git a/NFe.Integracao/NFeFacade.cs b/NFe.Integracao/NFeFacade.cs index a8728efb9..cc17ba494 100644 --- a/NFe.Integracao/NFeFacade.cs +++ b/NFe.Integracao/NFeFacade.cs @@ -187,6 +187,7 @@ private void CarregarConfiguracoes() ConfiguracaoServico.Instancia.VersaoNfeStatusServico = versaoNFe; ConfiguracaoServico.Instancia.VersaoRecepcaoEventoCceCancelamento = versaoNFe; ConfiguracaoServico.Instancia.VersaoRecepcaoEventoInsucessoEntrega = versaoNFe; + ConfiguracaoServico.Instancia.VersaoRecepcaoEventoComprovanteEntrega = versaoNFe; #endregion diff --git a/NFe.Servicos/ServicoNfeFactory.cs b/NFe.Servicos/ServicoNfeFactory.cs index 7ba3225f3..234985378 100644 --- a/NFe.Servicos/ServicoNfeFactory.cs +++ b/NFe.Servicos/ServicoNfeFactory.cs @@ -233,6 +233,10 @@ public static INfeServico CriaWsdlOutros(ServicoNFe servico, ConfiguracaoServico case ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe: return new RecepcaoEvento4SVCAN(url, certificado, cfg.TimeOut); + case ServicoNFe.RecepcaoEventoComprovanteEntregaNFe: + case ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe: + return new RecepcaoEvento4(url, certificado, cfg.TimeOut); + case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: if (cfg.VersaoRecepcaoEventoManifestacaoDestinatario == VersaoServico.Versao400) { diff --git a/NFe.Servicos/ServicosNFe.cs b/NFe.Servicos/ServicosNFe.cs index 70a875e36..d3f18d4ad 100644 --- a/NFe.Servicos/ServicosNFe.cs +++ b/NFe.Servicos/ServicosNFe.cs @@ -405,7 +405,9 @@ private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List eventos, S ServicoNFe.RecepcaoEventoEpec, ServicoNFe.RecepcaoEventoManifestacaoDestinatario, ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, - ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe + ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe, + ServicoNFe.RecepcaoEventoComprovanteEntregaNFe, + ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe }; if ( !listaEventos.Contains(servicoEvento)) diff --git a/NFe.Utils/ConfiguracaoServico.cs b/NFe.Utils/ConfiguracaoServico.cs index 5cab4964d..200a96383 100644 --- a/NFe.Utils/ConfiguracaoServico.cs +++ b/NFe.Utils/ConfiguracaoServico.cs @@ -61,6 +61,7 @@ public sealed class ConfiguracaoServico : INotifyPropertyChanged private bool _unZip = true; private VersaoServico _versaoRecepcaoEventoCceCancelamento; private VersaoServico _versaoRecepcaoEventoInsucessoEntrega; + private VersaoServico _versaoRecepcaoEventoComprovanteEntrega; private VersaoServico _versaoRecepcaoEventoEpec; private VersaoServico _versaoRecepcaoEventoManifestacaoDestinatario; private VersaoServico _versaoNfeRecepcao; @@ -236,6 +237,7 @@ private void AtualizaVersoes() { VersaoRecepcaoEventoCceCancelamento = obterVersao(ServicoNFe.RecepcaoEventoCancelmento); VersaoRecepcaoEventoInsucessoEntrega = obterVersao(ServicoNFe.RecepcaoEventoInsucessoEntregaNFe); + VersaoRecepcaoEventoComprovanteEntrega = obterVersao(ServicoNFe.RecepcaoEventoComprovanteEntregaNFe); VersaoRecepcaoEventoEpec = obterVersao(ServicoNFe.RecepcaoEventoEpec); VersaoRecepcaoEventoManifestacaoDestinatario = obterVersao(ServicoNFe.RecepcaoEventoManifestacaoDestinatario); VersaoNfeRecepcao = obterVersao(ServicoNFe.NfeRecepcao); @@ -299,6 +301,20 @@ public VersaoServico VersaoRecepcaoEventoInsucessoEntrega } } + /// + /// Versão do serviço RecepcaoEvento para Comprovante de Entrega da NFe + /// + public VersaoServico VersaoRecepcaoEventoComprovanteEntrega + { + get { return _versaoRecepcaoEventoComprovanteEntrega; } + set + { + if (value == _versaoRecepcaoEventoComprovanteEntrega) return; + _versaoRecepcaoEventoComprovanteEntrega = value; + OnPropertyChanged(); + } + } + /// /// Versão do serviço RecepcaoEvento para Manifestação do destinatário /// diff --git a/NFe.Utils/Enderecos/Enderecador.cs b/NFe.Utils/Enderecos/Enderecador.cs index 0a9acc296..80bb9f94e 100644 --- a/NFe.Utils/Enderecos/Enderecador.cs +++ b/NFe.Utils/Enderecos/Enderecador.cs @@ -1594,6 +1594,9 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeDownloadNF }, versao2E3, hom, TipoEmissao.teNormal, estado, modelo, "https://hom.nfe.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx"); if (modelo != ModeloDocumento.NFCe) addServico(new[] { ServicoNFe.NFeDistribuicaoDFe }, versao1, hom, TipoEmissao.teNormal, estado, modelo, "https://hom1.nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx"); + + // Comprovante de Entrega + addServico(new[] { ServicoNFe.RecepcaoEventoComprovanteEntregaNFe, ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe }, versao4, hom, TipoEmissao.teNormal, estado, modelo, "https://hom1.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); } } @@ -1623,6 +1626,9 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeDownloadNF }, versao2E3, prod, TipoEmissao.teNormal, estado, modelo, "https://www.nfe.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx"); if (modelo != ModeloDocumento.NFCe) addServico(new[] { ServicoNFe.NFeDistribuicaoDFe }, versao1, prod, TipoEmissao.teNormal, estado, modelo, "https://www1.nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx"); + + // Comprovante de Entrega + addServico(new[] { ServicoNFe.RecepcaoEventoComprovanteEntregaNFe, ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe }, versao4, prod, TipoEmissao.teNormal, estado, modelo, "https://www.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"); } } @@ -1630,7 +1636,7 @@ private static List CarregarEnderecosServicos() #endregion - #region ConsultaGtin e Insucesso na entrega + #region ConsultaGtin / Insucesso na entrega / Comprovante de Entrega foreach (var estado in Enum.GetValues(typeof(Estado)) .Cast() .ToList()) diff --git a/NFe.Utils/Validacao/Validador.cs b/NFe.Utils/Validacao/Validador.cs index f32170d2e..f1a795111 100644 --- a/NFe.Utils/Validacao/Validador.cs +++ b/NFe.Utils/Validacao/Validador.cs @@ -66,6 +66,10 @@ internal static string ObterArquivoSchema(ServicoNFe servicoNFe, VersaoServico v return "envEventoInsucessoNFe_v1.00.xsd"; case ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe: return "envEventoCancInsucessoNFe_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoComprovanteEntregaNFe: + return "envEventoEntregaNFe_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe: + return "envEventoCancEntregaNFe_v1.00.xsd"; case ServicoNFe.RecepcaoEventoEpec: return "envEPEC_v1.00.xsd"; case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: From 4f982456cb30a1823e634abaa60a9a7f8d988aa6 Mon Sep 17 00:00:00 2001 From: Claudinei Cecilio Date: Thu, 12 Sep 2024 11:08:02 -0300 Subject: [PATCH 17/35] =?UTF-8?q?add:Implementado=20servi=C3=A7os=20para?= =?UTF-8?q?=20envio=20de=20evento=20de=20comprovante=20de=20entrega;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NFe.Servicos/ServicosNFe.cs | 120 ++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/NFe.Servicos/ServicosNFe.cs b/NFe.Servicos/ServicosNFe.cs index d3f18d4ad..05c6fc976 100644 --- a/NFe.Servicos/ServicosNFe.cs +++ b/NFe.Servicos/ServicosNFe.cs @@ -898,6 +898,126 @@ public RetornoRecepcaoEvento RecepcaoEventoCancInsucessoEntrega(int idlote, return retorno; } + /// + /// Recepção do Evento de Comprovante de Entrega + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// + /// Número documento de identificação da pessoa + /// Nome da pessoa + /// Hash SHA-1, no formato Base64, resultante da + /// concatenação de: Chave de Acesso da NF-e + Base64 + /// da imagem capturada do comprovante de entrega (ex: + /// imagem capturada da assinatura eletrônica, digital do + /// recebedor, foto, etc). + /// + /// Latitude do ponto de entrega (não obrigatório) + /// Longitude do ponto de entrega (não obrigatório) + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoComprovanteEntrega(int idlote, + int sequenciaEvento, string cpfcnpj, string chaveNFe, DateTimeOffset dhEntrega, string nDoc, string xNome, string hashComprovante, + DateTimeOffset? dhHashComprovante = null, decimal? latGps = null, decimal? longGps = null, + Estado? ufAutor = null, string versaoAplicativo = null, DateTimeOffset? dhEvento = null) + { + + var versaoServico = + ServicoNFe.RecepcaoEventoCancelmento.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoComprovanteEntrega); + + var detEvento = new detEvento + { + versao = versaoServico, + descEvento = NFeTipoEvento.TeNfeComprovanteDeEntregadaNFe.Descricao(), + cOrgaoAutor = ufAutor ?? _cFgServico.cUF, + verAplic = versaoAplicativo ?? "1.0", + dhEntrega = dhEntrega, + nDoc = nDoc, + xNome = xNome, + latGPS = latGps, + longGPS = longGps, + hashComprovante = hashComprovante, + dhHashComprovante = dhHashComprovante + }; + var infEvento = new infEventoEnv + { + cOrgao = Estado.AN, + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = NFeTipoEvento.TeNfeComprovanteDeEntregadaNFe, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + if (cpfcnpj.Length == 11) + infEvento.CPF = cpfcnpj; + else + infEvento.CNPJ = cpfcnpj; + + var evento = new evento { versao = versaoServico, infEvento = infEvento }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoComprovanteEntregaNFe, _cFgServico.VersaoRecepcaoEventoComprovanteEntrega, true); + return retorno; + } + + /// + /// Serviço para cancelamento comprovante de entrega + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Protocolo do evento de comprovante de entrega que deseja cancelar + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoCancComprovanteEntrega(int idlote, + int sequenciaEvento, string cpfcnpj, string chaveNFe, string nProtEvento, + Estado? ufAutor = null, string versaoAplicativo = null, DateTimeOffset? dhEvento = null) + { + + var versaoServico = + ServicoNFe.RecepcaoEventoCancelmento.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoComprovanteEntrega); + + var detEvento = new detEvento + { + versao = versaoServico, + descEvento = NFeTipoEvento.TeNfeCancComprovanteDeEntregadaNFe.Descricao(), + cOrgaoAutor = ufAutor ?? _cFgServico.cUF, + verAplic = versaoAplicativo ?? "1.0", + nProtEvento = nProtEvento + }; + + var infEvento = new infEventoEnv + { + cOrgao = Estado.AN, + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = NFeTipoEvento.TeNfeCancComprovanteDeEntregadaNFe, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + if (cpfcnpj.Length == 11) + infEvento.CPF = cpfcnpj; + else + infEvento.CNPJ = cpfcnpj; + + var evento = new evento { versao = versaoServico, infEvento = infEvento }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe, _cFgServico.VersaoRecepcaoEventoComprovanteEntrega, true); + return retorno; + } + /// /// Consulta a situação cadastral, com base na UF/Documento /// O documento pode ser: IE, CNPJ ou CPF From 82059a66edb2f0e2f8bbd20b75dbe9ea6e070762 Mon Sep 17 00:00:00 2001 From: Claudinei Cecilio Date: Thu, 12 Sep 2024 13:36:29 -0300 Subject: [PATCH 18/35] add:Interface para testes do evento de comprovante de entrega; --- NFe.AppTeste/MainWindow.xaml | 8 +- NFe.AppTeste/MainWindow.xaml.cs | 139 ++++++++++++++++++++++++++++- NFe.Servicos/ServicoNfeFactory.cs | 2 +- NFe.Servicos/ServicosNFe.cs | 2 + NFe.Utils/Enderecos/Enderecador.cs | 7 +- 5 files changed, 152 insertions(+), 6 deletions(-) diff --git a/NFe.AppTeste/MainWindow.xaml b/NFe.AppTeste/MainWindow.xaml index f84e452b9..731680dff 100644 --- a/NFe.AppTeste/MainWindow.xaml +++ b/NFe.AppTeste/MainWindow.xaml @@ -904,7 +904,7 @@ - + RecepcaoEventoCancComprovanteEntregaNFe, + /// + /// serviço destinado à recepção de mensagem do Evento Conciliação Financeira da NFe + /// + RecepcaoEventoConciliacaoFinanceiraNFe, + + /// + /// serviço destinado à recepção de mensagem do Evento Cancelamento de Conciliação Financeira da NFe + /// + RecepcaoEventoCancConciliacaoFinanceiraNFe, + /// /// serviço destinado à recepção de mensagem do Evento de Manifestação do destinatário da NF-e /// @@ -235,6 +245,20 @@ public enum NFeTipoEvento [XmlEnum("110131")] TeNfeCancComprovanteDeEntregadaNFe = 110131, + /// + /// 110750 - Conciliação Financeira da NF-e + /// + [Description("Conciliação Financeira da NF-e")] + [XmlEnum("110750")] + TeNfeConciliacaoFinanceiraNFe = 110750, + + /// + /// 110751 - Cancelamento Conciliação Financeira da NF-e + /// + [Description("Cancelamento Conciliação Financeira da NF-e")] + [XmlEnum("110751")] + TeNfeCancConciliacaoFinanceiraNFe = 110751, + /// /// 210200 – Confirmação da Operação /// diff --git a/NFe.Servicos/ServicosNFe.cs b/NFe.Servicos/ServicosNFe.cs index f8cfe6c8e..bfbd41001 100644 --- a/NFe.Servicos/ServicosNFe.cs +++ b/NFe.Servicos/ServicosNFe.cs @@ -1020,6 +1020,112 @@ public RetornoRecepcaoEvento RecepcaoEventoCancComprovanteEntrega(int idlote, return retorno; } + + /// + /// Recepção do Evento de Conciliação Financeira + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Informações dos pagamentos + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoConciliacaoFinanceira(int idlote, + int sequenciaEvento, string cpfcnpj, string chaveNFe, List pagamentos, + Estado? ufAutor = null, string versaoAplicativo = null, DateTimeOffset? dhEvento = null) + { + + var versaoServico = + ServicoNFe.RecepcaoEventoCancelmento.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoConciliacaoFinanceira); + + var detEvento = new detEvento + { + versao = versaoServico, + descEvento = NFeTipoEvento.TeNfeConciliacaoFinanceiraNFe.Descricao(), + cOrgaoAutor = ufAutor ?? _cFgServico.cUF, + tpAutor = TipoAutor.taEmpresaEmitente, + verAplic = versaoAplicativo ?? "1.0", + detPag = pagamentos + }; + var infEvento = new infEventoEnv + { + cOrgao = Estado.AN, + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = NFeTipoEvento.TeNfeConciliacaoFinanceiraNFe, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + if (cpfcnpj.Length == 11) + infEvento.CPF = cpfcnpj; + else + infEvento.CNPJ = cpfcnpj; + + var evento = new evento { versao = versaoServico, infEvento = infEvento }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, _cFgServico.VersaoRecepcaoEventoConciliacaoFinanceira, true); + return retorno; + } + + /// + /// Serviço para cancelamento Conciliação Financeira + /// + /// Nº do lote + /// sequencia do evento + /// + /// + /// Protocolo do evento de conciliação financeira que deseja cancelar + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoCancConciliacaoFinanceira(int idlote, + int sequenciaEvento, string cpfcnpj, string chaveNFe, string nProtEvento, + Estado? ufAutor = null, string versaoAplicativo = null, DateTimeOffset? dhEvento = null) + { + + var versaoServico = + ServicoNFe.RecepcaoEventoCancelmento.VersaoServicoParaString( + _cFgServico.VersaoRecepcaoEventoConciliacaoFinanceira); + + var detEvento = new detEvento + { + versao = versaoServico, + descEvento = NFeTipoEvento.TeNfeCancConciliacaoFinanceiraNFe.Descricao(), + cOrgaoAutor = ufAutor ?? _cFgServico.cUF, + tpAutor = TipoAutor.taEmpresaEmitente, + verAplic = versaoAplicativo ?? "1.0", + nProtEvento = nProtEvento + }; + + var infEvento = new infEventoEnv + { + cOrgao = Estado.AN, + tpAmb = _cFgServico.tpAmb, + chNFe = chaveNFe, + dhEvento = dhEvento ?? DateTime.Now, + tpEvento = NFeTipoEvento.TeNfeCancConciliacaoFinanceiraNFe, + nSeqEvento = sequenciaEvento, + verEvento = versaoServico, + detEvento = detEvento + }; + if (cpfcnpj.Length == 11) + infEvento.CPF = cpfcnpj; + else + infEvento.CNPJ = cpfcnpj; + + var evento = new evento { versao = versaoServico, infEvento = infEvento }; + + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe, _cFgServico.VersaoRecepcaoEventoConciliacaoFinanceira, true); + return retorno; + } + /// /// Consulta a situação cadastral, com base na UF/Documento /// O documento pode ser: IE, CNPJ ou CPF diff --git a/NFe.Utils/ConfiguracaoServico.cs b/NFe.Utils/ConfiguracaoServico.cs index 200a96383..112bfc5d9 100644 --- a/NFe.Utils/ConfiguracaoServico.cs +++ b/NFe.Utils/ConfiguracaoServico.cs @@ -62,6 +62,7 @@ public sealed class ConfiguracaoServico : INotifyPropertyChanged private VersaoServico _versaoRecepcaoEventoCceCancelamento; private VersaoServico _versaoRecepcaoEventoInsucessoEntrega; private VersaoServico _versaoRecepcaoEventoComprovanteEntrega; + private VersaoServico _versaoRecepcaoEventoConciliacaoFinanceira; private VersaoServico _versaoRecepcaoEventoEpec; private VersaoServico _versaoRecepcaoEventoManifestacaoDestinatario; private VersaoServico _versaoNfeRecepcao; @@ -238,6 +239,7 @@ private void AtualizaVersoes() VersaoRecepcaoEventoCceCancelamento = obterVersao(ServicoNFe.RecepcaoEventoCancelmento); VersaoRecepcaoEventoInsucessoEntrega = obterVersao(ServicoNFe.RecepcaoEventoInsucessoEntregaNFe); VersaoRecepcaoEventoComprovanteEntrega = obterVersao(ServicoNFe.RecepcaoEventoComprovanteEntregaNFe); + VersaoRecepcaoEventoConciliacaoFinanceira = obterVersao(ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe); VersaoRecepcaoEventoEpec = obterVersao(ServicoNFe.RecepcaoEventoEpec); VersaoRecepcaoEventoManifestacaoDestinatario = obterVersao(ServicoNFe.RecepcaoEventoManifestacaoDestinatario); VersaoNfeRecepcao = obterVersao(ServicoNFe.NfeRecepcao); @@ -315,6 +317,20 @@ public VersaoServico VersaoRecepcaoEventoComprovanteEntrega } } + /// + /// Versão do serviço RecepcaoEvento para Conciliação Financeira da NFe + /// + public VersaoServico VersaoRecepcaoEventoConciliacaoFinanceira + { + get { return _versaoRecepcaoEventoConciliacaoFinanceira; } + set + { + if (value == _versaoRecepcaoEventoConciliacaoFinanceira) return; + _versaoRecepcaoEventoConciliacaoFinanceira = value; + OnPropertyChanged(); + } + } + /// /// Versão do serviço RecepcaoEvento para Manifestação do destinatário /// From 1f4d6ddd0e871c21137eb365ab65ffaa30248d71 Mon Sep 17 00:00:00 2001 From: Claudinei Cecilio Date: Mon, 30 Sep 2024 14:48:31 -0300 Subject: [PATCH 33/35] =?UTF-8?q?add:Servi=C3=A7os=20para=20envio=20de=20e?= =?UTF-8?q?vento=20de=20concilia=C3=A7=C3=A3o=20financeira;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NFe.AppTeste/MainWindow.xaml.cs | 2 +- NFe.AppTeste/NFe.AppTeste.csproj | 36 +++ .../Schemas/EventoCancEConf_v1.00.xsd | 9 + NFe.AppTeste/Schemas/EventoEConf_v1.00.xsd | 9 + NFe.AppTeste/Schemas/e110750_v1.00.xsd | 138 ++++++++ NFe.AppTeste/Schemas/e110751_v1.00.xsd | 39 +++ .../Schemas/envEventoCancEConf_v1.00.xsd | 10 + NFe.AppTeste/Schemas/envEventoEConf_v1.00.xsd | 10 + .../Schemas/leiauteEventoCancEConf_v1.00.xsd | 296 ++++++++++++++++++ .../Schemas/leiauteEventoEConf_v1.00.xsd | 296 ++++++++++++++++++ .../Schemas/procEventoCancEConf_v1.00.xsd | 9 + .../Schemas/procEventoEConf_v1.00.xsd | 9 + .../Schemas/retEventoCancEConf_v1.00.xsd | 9 + NFe.AppTeste/Schemas/retEventoEConf_v1.00.xsd | 9 + .../Servicos/Tipos/NFeServicosTipos.cs | 10 +- NFe.Integracao/NFeFacade.cs | 1 + NFe.Servicos/ServicoNfeFactory.cs | 4 + NFe.Servicos/ServicosNFe.cs | 12 +- NFe.Utils/Enderecos/Enderecador.cs | 9 +- NFe.Utils/Validacao/Validador.cs | 4 + 20 files changed, 910 insertions(+), 11 deletions(-) create mode 100644 NFe.AppTeste/Schemas/EventoCancEConf_v1.00.xsd create mode 100644 NFe.AppTeste/Schemas/EventoEConf_v1.00.xsd create mode 100644 NFe.AppTeste/Schemas/e110750_v1.00.xsd create mode 100644 NFe.AppTeste/Schemas/e110751_v1.00.xsd create mode 100644 NFe.AppTeste/Schemas/envEventoCancEConf_v1.00.xsd create mode 100644 NFe.AppTeste/Schemas/envEventoEConf_v1.00.xsd create mode 100644 NFe.AppTeste/Schemas/leiauteEventoCancEConf_v1.00.xsd create mode 100644 NFe.AppTeste/Schemas/leiauteEventoEConf_v1.00.xsd create mode 100644 NFe.AppTeste/Schemas/procEventoCancEConf_v1.00.xsd create mode 100644 NFe.AppTeste/Schemas/procEventoEConf_v1.00.xsd create mode 100644 NFe.AppTeste/Schemas/retEventoCancEConf_v1.00.xsd create mode 100644 NFe.AppTeste/Schemas/retEventoEConf_v1.00.xsd diff --git a/NFe.AppTeste/MainWindow.xaml.cs b/NFe.AppTeste/MainWindow.xaml.cs index 53c747845..0b006c1d2 100644 --- a/NFe.AppTeste/MainWindow.xaml.cs +++ b/NFe.AppTeste/MainWindow.xaml.cs @@ -601,7 +601,7 @@ private void BtnConciliacaoFinanceira_Click(object sender, RoutedEventArgs e) throw new Exception("Data inválida!"); decimal? valorPagamento = null; - var valorPagamentoStr = Funcoes.InpuBox(this, titulo, "Valor do Pagamento:"); + var valorPagamentoStr = Funcoes.InpuBox(this, titulo, "Valor do Pagamento:", "1"); if (string.IsNullOrEmpty(valorPagamentoStr)) throw new Exception("Valor do pagamento deve ser informado!"); if (!string.IsNullOrEmpty(valorPagamentoStr)) valorPagamento = Convert.ToDecimal(valorPagamentoStr); diff --git a/NFe.AppTeste/NFe.AppTeste.csproj b/NFe.AppTeste/NFe.AppTeste.csproj index 8df222f14..af1c6380c 100644 --- a/NFe.AppTeste/NFe.AppTeste.csproj +++ b/NFe.AppTeste/NFe.AppTeste.csproj @@ -263,6 +263,12 @@ Designer Always + + Designer + + + Designer + Designer Always @@ -363,6 +369,9 @@ Designer Always + + Designer + Designer Always @@ -375,6 +384,9 @@ Designer Always + + Designer + Designer Always @@ -423,6 +435,9 @@ Designer Always + + Designer + Designer Always @@ -435,6 +450,9 @@ Designer Always + + Designer + Designer Always @@ -547,6 +565,9 @@ Designer Always + + Designer + Designer Always @@ -559,6 +580,9 @@ Designer Always + + Designer + Designer Always @@ -679,6 +703,9 @@ Designer Always + + Designer + Designer Always @@ -691,6 +718,9 @@ Designer Always + + Designer + Designer Always @@ -895,10 +925,16 @@ Designer Always + + Designer + Designer Always + + Designer + Designer Always diff --git a/NFe.AppTeste/Schemas/EventoCancEConf_v1.00.xsd b/NFe.AppTeste/Schemas/EventoCancEConf_v1.00.xsd new file mode 100644 index 000000000..662ea2356 --- /dev/null +++ b/NFe.AppTeste/Schemas/EventoCancEConf_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do evento de Cancelamento do Comprovante de Entrega da NFe + + + diff --git a/NFe.AppTeste/Schemas/EventoEConf_v1.00.xsd b/NFe.AppTeste/Schemas/EventoEConf_v1.00.xsd new file mode 100644 index 000000000..713a60faa --- /dev/null +++ b/NFe.AppTeste/Schemas/EventoEConf_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do evento de Conciliação Financeira + + + diff --git a/NFe.AppTeste/Schemas/e110750_v1.00.xsd b/NFe.AppTeste/Schemas/e110750_v1.00.xsd new file mode 100644 index 000000000..3633a8560 --- /dev/null +++ b/NFe.AppTeste/Schemas/e110750_v1.00.xsd @@ -0,0 +1,138 @@ + + + + + + + Schema XML de validação do evento de Conciliação Financeira – ECONF + + + + + + + + + + + + + Versão do Aplicativo do Autor do Evento + + + + + Grupo de detalhamento da forma de pagamento. + + + + + + Indicador da Forma de Pagamento:0-Pagamento à Vista;1-Pagamento à Prazo; + + + + + + + + + + + + Forma de Pagamento: + + + + + + + + + + + Descrição do Meio de Pagamento + + + + + + + + + + + Valor do Pagamento. Esta tag poderá ser omitida quando a tag tPag=90 (Sem Pagamento), caso contrário deverá ser preenchida. + + + + + Data do Pagamento + + + + + + CNPJ transacional do pagamento - Preencher informando o CNPJ do estabelecimento onde o pagamento foi processado/transacionado/recebido quando a emissão do documento fiscal ocorrer em estabelecimento distinto + + + + + UF do CNPJ do estabelecimento onde o pagamento foi processado/transacionado/recebido. + + + + + CNPJ da instituição financeira, de pagamento, adquirente ou subadquirente. + + + + + Bandeira da operadora de cartão + + + + + + + + + + + Número de autorização da operação com cartões, PIX, boletos e outros pagamentos eletrônicos + + + + + + + + + + + + + Informar o CNPJ do estabelecimento beneficiário do pagamento + + + + + UF do CNPJ do estabelecimento beneficiário do pagamento.. + + + + + + + + + + + + + + + + + + diff --git a/NFe.AppTeste/Schemas/e110751_v1.00.xsd b/NFe.AppTeste/Schemas/e110751_v1.00.xsd new file mode 100644 index 000000000..7543784ac --- /dev/null +++ b/NFe.AppTeste/Schemas/e110751_v1.00.xsd @@ -0,0 +1,39 @@ + + + + + + + Schema XML de validação do evento de Cancelamento do Comprovante de Entrega da NF-e + + + + + + + + + + + + + Versão do Aplicativo do Autor do Evento + + + + + Número do Protocolo de Autorização do Evento da NF-e a que se refere este cancelamento. + + + + + + + + + + + + + + diff --git a/NFe.AppTeste/Schemas/envEventoCancEConf_v1.00.xsd b/NFe.AppTeste/Schemas/envEventoCancEConf_v1.00.xsd new file mode 100644 index 000000000..bb0508691 --- /dev/null +++ b/NFe.AppTeste/Schemas/envEventoCancEConf_v1.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do lote de envio do evento de Cancelamento de Conciliação Financeira + + + diff --git a/NFe.AppTeste/Schemas/envEventoEConf_v1.00.xsd b/NFe.AppTeste/Schemas/envEventoEConf_v1.00.xsd new file mode 100644 index 000000000..f4e5a28a2 --- /dev/null +++ b/NFe.AppTeste/Schemas/envEventoEConf_v1.00.xsd @@ -0,0 +1,10 @@ + + + + + + + Schema XML de validação do lote de envio do evento de Conciliação Financeira + + + diff --git a/NFe.AppTeste/Schemas/leiauteEventoCancEConf_v1.00.xsd b/NFe.AppTeste/Schemas/leiauteEventoCancEConf_v1.00.xsd new file mode 100644 index 000000000..710d25def --- /dev/null +++ b/NFe.AppTeste/Schemas/leiauteEventoCancEConf_v1.00.xsd @@ -0,0 +1,296 @@ + + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD + + + + + Tipo do Evento + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 90 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + diff --git a/NFe.AppTeste/Schemas/leiauteEventoEConf_v1.00.xsd b/NFe.AppTeste/Schemas/leiauteEventoEConf_v1.00.xsd new file mode 100644 index 000000000..fe9d449d5 --- /dev/null +++ b/NFe.AppTeste/Schemas/leiauteEventoEConf_v1.00.xsd @@ -0,0 +1,296 @@ + + + + + + + + Tipo Evento + + + + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Identificação do autor do evento + + + + CNPJ + + + + + CPF + + + + + + Chave de Acesso da NF-e vinculada ao evento + + + + + Data de emissão no formato UTC. AAAA-MM-DDThh:mm:ssTZD + + + + + Tipo do Evento + + + + + + + + + + + + Seqüencial do evento para o mesmo tipo de evento. Para maioria dos eventos será 1, nos casos em que possa existir mais de um evento, como é o caso da carta de correção, o autor do evento deve numerar de forma seqüencial. + + + + + + + + + + + Versão do Tipo do Evento + + + + + + + + + + + + + Identificador da TAG a ser assinada, a regra de formação do Id é: +“ID” + tpEvento + chave da NF-e + nSeqEvento + + + + + + + + + + + + + + + + Tipo Versão do Evento + + + + + + + + + Tipo retorno do Evento + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE extendida, utilizar 91 para identificar o Ambiente Nacional + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + Chave de Acesso NF-e vinculada + + + + + Tipo do Evento vinculado + + + + + + + + + + + Descrição do Evento + + + + + + + + + + + Seqüencial do evento + + + + + + + + + + + Data e Hora de do recebimento do evento ou do registro do evento formato UTC AAAA-MM-DDThh:mm:ssTZD. + + + + + + + + + + + Número do protocolo de registro do evento + + + + + + + + + + + + + + + + + + + Tipo Lote de Envio + + + + + + + + + + + + + + + + + Tipo Versão do EnvEvento + + + + + + + + + Tipo Retorno de Lote de Envio + + + + + + + + + + + + + Identificação do Ambiente: +1 - Produção +2 - Homologação + + + + + Versão do Aplicativo que recebeu o Evento + + + + + Código do òrgao que registrou o Evento + + + + + Código do status da registro do Evento + + + + + Descrição literal do status do registro do Evento + + + + + + + + + Tipo procEvento + + + + + + + + diff --git a/NFe.AppTeste/Schemas/procEventoCancEConf_v1.00.xsd b/NFe.AppTeste/Schemas/procEventoCancEConf_v1.00.xsd new file mode 100644 index 000000000..df7830645 --- /dev/null +++ b/NFe.AppTeste/Schemas/procEventoCancEConf_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do proc do evento de Cancelamento de Conciliação financeira + + + diff --git a/NFe.AppTeste/Schemas/procEventoEConf_v1.00.xsd b/NFe.AppTeste/Schemas/procEventoEConf_v1.00.xsd new file mode 100644 index 000000000..d2607121d --- /dev/null +++ b/NFe.AppTeste/Schemas/procEventoEConf_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de validação do proc do Evento de Conciliação Financeira + + + diff --git a/NFe.AppTeste/Schemas/retEventoCancEConf_v1.00.xsd b/NFe.AppTeste/Schemas/retEventoCancEConf_v1.00.xsd new file mode 100644 index 000000000..88791095a --- /dev/null +++ b/NFe.AppTeste/Schemas/retEventoCancEConf_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno da envio do evento de Cancelamento de Conciliação Financeira + + + diff --git a/NFe.AppTeste/Schemas/retEventoEConf_v1.00.xsd b/NFe.AppTeste/Schemas/retEventoEConf_v1.00.xsd new file mode 100644 index 000000000..83b7352f8 --- /dev/null +++ b/NFe.AppTeste/Schemas/retEventoEConf_v1.00.xsd @@ -0,0 +1,9 @@ + + + + + + Schema XML de Retorno da envio do evento de Conciliação Financeira + + + diff --git a/NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs b/NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs index 2c7d608fa..c0f8a1a6f 100644 --- a/NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs +++ b/NFe.Classes/Servicos/Tipos/NFeServicosTipos.cs @@ -182,6 +182,12 @@ public enum IndicadorSincronizacao /// 110140 - EPEC /// 110111 - Cancelamento /// 110112 - Cancelamento por substituição + /// 110130 - Comprovante de Entrega da NF-e + /// 110131 - Cancelamento Comprovante de Entrega da NF-e + /// 110192 - Insucesso na Entrega da NF-e + /// 110193 - Cancelamento Insucesso na Entrega da NF-e + /// 110750 - Conciliação Financeira da NF-e + /// 110751 - Cancelamento Conciliação Financeira da NF-e /// 210200 – Confirmação da Operação /// 210210 – Ciência da Emissão /// 210220 – Desconhecimento da Operação @@ -248,14 +254,14 @@ public enum NFeTipoEvento /// /// 110750 - Conciliação Financeira da NF-e /// - [Description("Conciliação Financeira da NF-e")] + [Description("ECONF")] [XmlEnum("110750")] TeNfeConciliacaoFinanceiraNFe = 110750, /// /// 110751 - Cancelamento Conciliação Financeira da NF-e /// - [Description("Cancelamento Conciliação Financeira da NF-e")] + [Description("Cancelamento Conciliação Financeira")] [XmlEnum("110751")] TeNfeCancConciliacaoFinanceiraNFe = 110751, diff --git a/NFe.Integracao/NFeFacade.cs b/NFe.Integracao/NFeFacade.cs index cc17ba494..187508649 100644 --- a/NFe.Integracao/NFeFacade.cs +++ b/NFe.Integracao/NFeFacade.cs @@ -188,6 +188,7 @@ private void CarregarConfiguracoes() ConfiguracaoServico.Instancia.VersaoRecepcaoEventoCceCancelamento = versaoNFe; ConfiguracaoServico.Instancia.VersaoRecepcaoEventoInsucessoEntrega = versaoNFe; ConfiguracaoServico.Instancia.VersaoRecepcaoEventoComprovanteEntrega = versaoNFe; + ConfiguracaoServico.Instancia.VersaoRecepcaoEventoConciliacaoFinanceira = versaoNFe; #endregion diff --git a/NFe.Servicos/ServicoNfeFactory.cs b/NFe.Servicos/ServicoNfeFactory.cs index 163f4b104..50e418b22 100644 --- a/NFe.Servicos/ServicoNfeFactory.cs +++ b/NFe.Servicos/ServicoNfeFactory.cs @@ -237,6 +237,10 @@ public static INfeServico CriaWsdlOutros(ServicoNFe servico, ConfiguracaoServico case ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe: return new RecepcaoEvento4AN(url, certificado, cfg.TimeOut); + case ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe: + case ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe: + return new RecepcaoEvento4SVCAN(url, certificado, cfg.TimeOut); + case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: if (cfg.VersaoRecepcaoEventoManifestacaoDestinatario == VersaoServico.Versao400) { diff --git a/NFe.Servicos/ServicosNFe.cs b/NFe.Servicos/ServicosNFe.cs index bfbd41001..bf5a34afa 100644 --- a/NFe.Servicos/ServicosNFe.cs +++ b/NFe.Servicos/ServicosNFe.cs @@ -407,7 +407,9 @@ private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List eventos, S ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe, ServicoNFe.RecepcaoEventoComprovanteEntregaNFe, - ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe + ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe, + ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, + ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }; if ( !listaEventos.Contains(servicoEvento)) @@ -1046,14 +1048,12 @@ public RetornoRecepcaoEvento RecepcaoEventoConciliacaoFinanceira(int idlote, { versao = versaoServico, descEvento = NFeTipoEvento.TeNfeConciliacaoFinanceiraNFe.Descricao(), - cOrgaoAutor = ufAutor ?? _cFgServico.cUF, - tpAutor = TipoAutor.taEmpresaEmitente, verAplic = versaoAplicativo ?? "1.0", detPag = pagamentos }; var infEvento = new infEventoEnv { - cOrgao = Estado.AN, + cOrgao = Estado.SVRS, tpAmb = _cFgServico.tpAmb, chNFe = chaveNFe, dhEvento = dhEvento ?? DateTime.Now, @@ -1098,15 +1098,13 @@ public RetornoRecepcaoEvento RecepcaoEventoCancConciliacaoFinanceira(int idlote, { versao = versaoServico, descEvento = NFeTipoEvento.TeNfeCancConciliacaoFinanceiraNFe.Descricao(), - cOrgaoAutor = ufAutor ?? _cFgServico.cUF, - tpAutor = TipoAutor.taEmpresaEmitente, verAplic = versaoAplicativo ?? "1.0", nProtEvento = nProtEvento }; var infEvento = new infEventoEnv { - cOrgao = Estado.AN, + cOrgao = Estado.SVRS, tpAmb = _cFgServico.tpAmb, chNFe = chaveNFe, dhEvento = dhEvento ?? DateTime.Now, diff --git a/NFe.Utils/Enderecos/Enderecador.cs b/NFe.Utils/Enderecos/Enderecador.cs index 8cd4e2963..f00ade19f 100644 --- a/NFe.Utils/Enderecos/Enderecador.cs +++ b/NFe.Utils/Enderecos/Enderecador.cs @@ -1636,7 +1636,7 @@ private static List CarregarEnderecosServicos() #endregion - #region ConsultaGtin / Insucesso na entrega / Comprovante de Entrega + #region ConsultaGtin / Insucesso na entrega / Conciliação Financeira foreach (var estado in Enum.GetValues(typeof(Estado)) .Cast() .ToList()) @@ -1652,6 +1652,10 @@ private static List CarregarEnderecosServicos() //Insucesso Entrega NFe addServico(new[] { ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe }, versao1, TipoAmbiente.Producao, emissao, estado, modelo, "https://nfe.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe }, versao1, TipoAmbiente.Homologacao, emissao, estado, modelo, "https://nfe-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + + //Conciliação Financeira NFe + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, TipoAmbiente.Producao, emissao, estado, modelo, "https://nfe.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, TipoAmbiente.Homologacao, emissao, estado, modelo, "https://nfe-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); } } } @@ -1689,6 +1693,9 @@ public static void CarregarEnderecos() case ServicoNFe.RecepcaoEventoComprovanteEntregaNFe: case ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe: return cfgServico.VersaoRecepcaoEventoComprovanteEntrega; + case ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe: + case ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe: + return cfgServico.VersaoRecepcaoEventoConciliacaoFinanceira; case ServicoNFe.RecepcaoEventoEpec: return cfgServico.VersaoRecepcaoEventoEpec; case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: diff --git a/NFe.Utils/Validacao/Validador.cs b/NFe.Utils/Validacao/Validador.cs index f1a795111..82e9d20dc 100644 --- a/NFe.Utils/Validacao/Validador.cs +++ b/NFe.Utils/Validacao/Validador.cs @@ -70,6 +70,10 @@ internal static string ObterArquivoSchema(ServicoNFe servicoNFe, VersaoServico v return "envEventoEntregaNFe_v1.00.xsd"; case ServicoNFe.RecepcaoEventoCancComprovanteEntregaNFe: return "envEventoCancEntregaNFe_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe: + return "envEventoEConf_v1.00.xsd"; + case ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe: + return "envEventoCancEConf_v1.00.xsd"; case ServicoNFe.RecepcaoEventoEpec: return "envEPEC_v1.00.xsd"; case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: From 05b5621fc6315d4c69aa2a43645bc6eb39d231f2 Mon Sep 17 00:00:00 2001 From: Claudinei Cecilio Date: Mon, 30 Sep 2024 15:38:01 -0300 Subject: [PATCH 34/35] =?UTF-8?q?fix:Revis=C3=A3o=20no=20endere=C3=A7ador?= =?UTF-8?q?=20para=20os=20modelos=2055=20e=2065;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NFe.Servicos/ServicosNFe.cs | 4 ++-- NFe.Utils/Enderecos/Enderecador.cs | 32 ++++++++++++++++++++++++------ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/NFe.Servicos/ServicosNFe.cs b/NFe.Servicos/ServicosNFe.cs index bf5a34afa..8f3b49b09 100644 --- a/NFe.Servicos/ServicosNFe.cs +++ b/NFe.Servicos/ServicosNFe.cs @@ -1053,7 +1053,7 @@ public RetornoRecepcaoEvento RecepcaoEventoConciliacaoFinanceira(int idlote, }; var infEvento = new infEventoEnv { - cOrgao = Estado.SVRS, + cOrgao = (_cFgServico.ModeloDocumento == ModeloDocumento.NFCe ? _cFgServico.cUF : Estado.SVRS), tpAmb = _cFgServico.tpAmb, chNFe = chaveNFe, dhEvento = dhEvento ?? DateTime.Now, @@ -1104,7 +1104,7 @@ public RetornoRecepcaoEvento RecepcaoEventoCancConciliacaoFinanceira(int idlote, var infEvento = new infEventoEnv { - cOrgao = Estado.SVRS, + cOrgao = (_cFgServico.ModeloDocumento == ModeloDocumento.NFCe ? _cFgServico.cUF : Estado.SVRS), tpAmb = _cFgServico.tpAmb, chNFe = chaveNFe, dhEvento = dhEvento ?? DateTime.Now, diff --git a/NFe.Utils/Enderecos/Enderecador.cs b/NFe.Utils/Enderecos/Enderecador.cs index f00ade19f..5dc607c27 100644 --- a/NFe.Utils/Enderecos/Enderecador.cs +++ b/NFe.Utils/Enderecos/Enderecador.cs @@ -218,7 +218,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao3, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/NfeRetAutorizacao"); addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao3, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/NfeConsulta2"); addServico(new[] { ServicoNFe.NfeRecepcao }, versao3, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/NfeRecepcao2"); - addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao1, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/RecepcaoEvento"); + addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento, }, versao1, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/RecepcaoEvento"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao3, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/NfeStatusServico2"); addServico(new[] { ServicoNFe.NfeRetRecepcao }, versao3, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/NfeRetRecepcao2"); addServico(new[] { ServicoNFe.NfeInutilizacao }, versao3, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services-nac/services/NfeInutilizacao2"); @@ -228,6 +228,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services/services/NfeConsulta4"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services/services/NfeStatusServico4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services/services/RecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.AM, nfce, "https://homnfce.sefaz.am.gov.br/nfce-services/services/RecepcaoEvento4"); #endregion } @@ -276,6 +277,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, Estado.AM, nfce, "https://nfce.sefaz.am.gov.br/nfce-services/services/NfeConsulta4"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.AM, nfce, "https://nfce.sefaz.am.gov.br/nfce-services/services/NfeStatusServico4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.AM, nfce, "https://nfce.sefaz.am.gov.br/nfce-services/services/RecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.AM, nfce, "https://nfce.sefaz.am.gov.br/nfce-services/services/RecepcaoEvento4"); #endregion } @@ -393,7 +395,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.CE, nfce, "https://nfceh.sefaz.ce.gov.br/nfce4/services/NFeStatusServico4?WSDL"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.CE, nfce, "https://nfceh.sefaz.ce.gov.br/nfce4/services/NFeRecepcaoEvento4?WSDL"); addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, hom, emissao, Estado.CE, nfce, "https://nfceh.sefaz.ce.gov.br/nfce4/services/CadConsultaCadastro4?WSDL"); - + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.CE, nfce, "https://nfceh.sefaz.ce.gov.br/nfce4/services/NFeRecepcaoEvento4?WSDL"); #endregion } @@ -438,6 +440,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, Estado.CE, nfce, "https://nfce.sefaz.ce.gov.br/nfce4/services/NFeConsultaProtocolo4?WSDL"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.CE, nfce, "https://nfce.sefaz.ce.gov.br/nfce4/services/NFeStatusServico4?WSDL"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.CE, nfce, "https://nfce.sefaz.ce.gov.br/nfce4/services/NFeRecepcaoEvento4?WSDL"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.CE, nfce, "https://nfce.sefaz.ce.gov.br/nfce4/services/NFeRecepcaoEvento4?WSDL"); #endregion } @@ -589,6 +592,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.MG, nfce, "https://hnfce.fazenda.mg.gov.br/nfce/services/NFeRecepcaoEvento4"); addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, hom, emissao, Estado.MG, nfce, "https://hnfce.fazenda.mg.gov.br/nfce/services/NFeAutorizacao4"); addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, hom, emissao, Estado.MG, nfce, "https://hnfce.fazenda.mg.gov.br/nfce/services/NFeRetAutorizacao4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.MG, nfce, "https://hnfce.fazenda.mg.gov.br/nfce/services/NFeRecepcaoEvento4"); } #endregion @@ -624,6 +628,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.MG, nfce, "https://nfce.fazenda.mg.gov.br/nfce/services/NFeRecepcaoEvento4"); addServico(new[] { ServicoNFe.NFeAutorizacao }, versao4, prod, emissao, Estado.MG, nfce, "https://nfce.fazenda.mg.gov.br/nfce/services/NFeAutorizacao4"); addServico(new[] { ServicoNFe.NFeRetAutorizacao }, versao4, prod, emissao, Estado.MG, nfce, "https://nfce.fazenda.mg.gov.br/nfce/services/NFeRetAutorizacao4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.MG, nfce, "https://nfce.fazenda.mg.gov.br/nfce/services/NFeRecepcaoEvento4"); } #endregion @@ -676,7 +681,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.MS, nfce, "https://hom.nfce.sefaz.ms.gov.br/ws/NFeStatusServico4"); addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, hom, emissao, Estado.MS, nfce, "https://hom.nfe.sefaz.ms.gov.br/ws/CadConsultaCadastro4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.MS, nfce, "https://hom.nfce.sefaz.ms.gov.br/ws/NFeRecepcaoEvento4"); - + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.MS, nfce, "https://hom.nfce.sefaz.ms.gov.br/ws/NFeRecepcaoEvento4"); #endregion } @@ -725,6 +730,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.MS, nfce, "https://nfce.sefaz.ms.gov.br/ws/NFeStatusServico4"); addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, prod, emissao, Estado.MS, nfce, "https://nfe.sefaz.ms.gov.br/ws/CadConsultaCadastro4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.MS, nfce, "https://nfce.sefaz.ms.gov.br/ws/NFeRecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.MS, nfce, "https://nfce.sefaz.ms.gov.br/ws/NFeRecepcaoEvento4"); #endregion } @@ -779,6 +785,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.MT, nfce, "https://homologacao.sefaz.mt.gov.br/nfcews/services/NfeConsulta4"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.MT, nfce, "https://homologacao.sefaz.mt.gov.br/nfcews/services/NfeStatusServico4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.MT, nfce, "https://homologacao.sefaz.mt.gov.br/nfcews/services/RecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.MT, nfce, "https://homologacao.sefaz.mt.gov.br/nfcews/services/RecepcaoEvento4"); #endregion } @@ -827,6 +834,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, Estado.MT, nfce, "https://nfce.sefaz.mt.gov.br/nfcews/services/NfeConsulta4"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.MT, nfce, "https://nfce.sefaz.mt.gov.br/nfcews/services/NfeStatusServico4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.MT, nfce, "https://nfce.sefaz.mt.gov.br/nfcews/services/RecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.MT, nfce, "https://nfce.sefaz.mt.gov.br/nfcews/services/RecepcaoEvento4"); #endregion } @@ -967,6 +975,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.PR, nfce, "https://homologacao.nfce.sefa.pr.gov.br/nfce/NFeStatusServico4"); addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, hom, emissao, Estado.PR, nfce, "https://homologacao.nfce.sefa.pr.gov.br/nfce/CadConsultaCadastro4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.PR, nfce, "https://homologacao.nfce.sefa.pr.gov.br/nfce/NFeRecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.PR, nfce, "https://homologacao.nfce.sefa.pr.gov.br/nfce/NFeRecepcaoEvento4"); #endregion } @@ -1021,6 +1030,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.PR, nfce, "https://nfce.sefa.pr.gov.br/nfce/NFeStatusServico4"); addServico(new[] { ServicoNFe.NfeConsultaCadastro }, versao4, prod, emissao, Estado.PR, nfce, "https://nfce.sefa.pr.gov.br/nfce/CadConsultaCadastro4"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.PR, nfce, "https://nfce.sefa.pr.gov.br/nfce/NFeRecepcaoEvento4"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.PR, nfce, "https://nfce.sefa.pr.gov.br/nfce/NFeRecepcaoEvento4"); #endregion } @@ -1089,6 +1099,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.RS, nfce, "https://nfce-homologacao.sefazrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.RS, nfce, "https://nfce-homologacao.sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.RS, nfce, "https://nfce-homologacao.sefazrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.RS, nfce, "https://nfce-homologacao.sefazrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); #endregion } @@ -1134,6 +1145,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, Estado.RS, nfce, "https://nfce.sefazrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.RS, nfce, "https://nfce.sefazrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.RS, nfce, "https://nfce.sefazrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.RS, nfce, "https://nfce.sefazrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); #endregion } @@ -1207,6 +1219,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, Estado.SP, nfce, "https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeConsultaProtocolo4.asmx"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, Estado.SP, nfce, "https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeStatusServico4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, Estado.SP, nfce, "https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeRecepcaoEvento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, Estado.SP, nfce, "https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeRecepcaoEvento4.asmx"); #endregion } @@ -1256,6 +1269,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, Estado.SP, nfce, "https://nfce.fazenda.sp.gov.br/ws/NFeConsultaProtocolo4.asmx"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, Estado.SP, nfce, "https://nfce.fazenda.sp.gov.br/ws/NFeStatusServico4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, Estado.SP, nfce, "https://nfce.fazenda.sp.gov.br/ws/NFeRecepcaoEvento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, Estado.SP, nfce, "https://nfce.fazenda.sp.gov.br/ws/NFeRecepcaoEvento4.asmx"); #endregion } @@ -1374,6 +1388,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, hom, emissao, estado, nfce, "https://nfce-homologacao.svrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, hom, emissao, estado, nfce, "https://nfce-homologacao.svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, hom, emissao, estado, nfce, "https://nfce-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, hom, emissao, estado, nfce, "https://nfce-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); #endregion } @@ -1436,6 +1451,7 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.NfeConsultaProtocolo }, versao4, prod, emissao, estado, nfce, "https://nfce.svrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx"); addServico(new[] { ServicoNFe.NfeStatusServico }, versao4, prod, emissao, estado, nfce, "https://nfce.svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoCancelmento }, versao4, prod, emissao, estado, nfce, "https://nfce.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, prod, emissao, estado, nfce, "https://nfce.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); #endregion } @@ -1653,9 +1669,13 @@ private static List CarregarEnderecosServicos() addServico(new[] { ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe }, versao1, TipoAmbiente.Producao, emissao, estado, modelo, "https://nfe.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); addServico(new[] { ServicoNFe.RecepcaoEventoInsucessoEntregaNFe, ServicoNFe.RecepcaoEventoCancInsucessoEntregaNFe }, versao1, TipoAmbiente.Homologacao, emissao, estado, modelo, "https://nfe-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); - //Conciliação Financeira NFe - addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, TipoAmbiente.Producao, emissao, estado, modelo, "https://nfe.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); - addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, TipoAmbiente.Homologacao, emissao, estado, modelo, "https://nfe-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + + if (modelo == ModeloDocumento.NFe) + { + //Conciliação Financeira NFe + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, TipoAmbiente.Producao, emissao, estado, modelo, "https://nfe.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + addServico(new[] { ServicoNFe.RecepcaoEventoConciliacaoFinanceiraNFe, ServicoNFe.RecepcaoEventoCancConciliacaoFinanceiraNFe }, versao1, TipoAmbiente.Homologacao, emissao, estado, modelo, "https://nfe-homologacao.svrs.rs.gov.br/ws/recepcaoevento/recepcaoevento4.asmx"); + } } } } From d0338889410276216724570387ddcb71cc99cef8 Mon Sep 17 00:00:00 2001 From: Vinicius Cunha Date: Thu, 31 Oct 2024 16:52:34 -0300 Subject: [PATCH 35/35] Ajuste testes de estado que utilizavam UF da autorizadora --- NFe.Utils.Testes/EnderecadorTestes.cs | 3 +++ NFe.Utils.Testes/ExtinfNFeSuplTestes.cs | 3 +++ 2 files changed, 6 insertions(+) diff --git a/NFe.Utils.Testes/EnderecadorTestes.cs b/NFe.Utils.Testes/EnderecadorTestes.cs index b6377b46c..c3eb90acb 100644 --- a/NFe.Utils.Testes/EnderecadorTestes.cs +++ b/NFe.Utils.Testes/EnderecadorTestes.cs @@ -69,6 +69,9 @@ public EstadosData() todosOsEstados.Remove(Estado.EX); todosOsEstados.Remove(Estado.PA); + // UF autorizadora + todosOsEstados.Remove(Estado.SVRS); + var tiposAmbiente = Enum.GetValues(typeof(TipoAmbiente)).Cast().ToList(); var servicosAutorizacao = new[] {ServicoNFe.NFeAutorizacao, ServicoNFe.NFeRetAutorizacao}; diff --git a/NFe.Utils.Testes/ExtinfNFeSuplTestes.cs b/NFe.Utils.Testes/ExtinfNFeSuplTestes.cs index da5066c12..4427804f2 100644 --- a/NFe.Utils.Testes/ExtinfNFeSuplTestes.cs +++ b/NFe.Utils.Testes/ExtinfNFeSuplTestes.cs @@ -28,6 +28,9 @@ public EstadosAmbientesData() todosOsEstados.Remove(Estado.AN); todosOsEstados.Remove(Estado.EX); + // UF autorizadora + todosOsEstados.Remove(Estado.SVRS); + //Não divulgaram as urls para homologação e produção no ENCAT todosOsEstados.Remove(Estado.CE); todosOsEstados.Remove(Estado.ES);