diff --git a/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/DFeReferenciado.cs b/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/DFeReferenciado.cs index ec594cd51..35903c113 100644 --- a/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/DFeReferenciado.cs +++ b/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/DFeReferenciado.cs @@ -39,10 +39,10 @@ public class DFeReferenciado /// P31 - Informa a chave da nota (NFe ou NFCe) emitida para o fornecimento nos casos em que a legislação obriga a emissão de documento fiscal. /// public string chaveAcesso { get; set; } - + /// - /// P32 - Corresponde ao “nItem” do DFeReferenciado + /// P32 - Corresponde ao "nItem" do DFeReferenciado. /// - public int nItemDFeRef { get; set; } + public int nItem { get; set; } } -} \ No newline at end of file +} diff --git a/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/gConsumo.cs b/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/gConsumo.cs index 6e8090b18..31209ee6d 100644 --- a/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/gConsumo.cs +++ b/NFe.Classes/Servicos/Evento/Informacoes/ItemConsumo/gConsumo.cs @@ -1,4 +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) */ @@ -31,10 +31,7 @@ /* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */ /********************************************************************************/ -using System; -using System.Linq; using System.Xml.Serialization; -using NFe.Classes.Servicos.Tipos; namespace NFe.Classes.Servicos.Evento.Informacoes.ItemConsumo { @@ -43,96 +40,41 @@ public class gConsumo private decimal _vIbs; private decimal _vCbs; - public gConsumo(NFeTipoEvento nFeTipoEvento) - { - var eventosPermitidos = new[] - { - NFeTipoEvento.TeNfeDestinacaoDeItemParaConsumoPessoal, - NFeTipoEvento.TeNfeImportacaoEmAlcZfmNaoConvertidaEmIsencao - }; - - if (!eventosPermitidos.Contains(nFeTipoEvento)) - throw new ArgumentException($"Não é permitido instanciar gConsumo com o evento {nFeTipoEvento}.", nameof(nFeTipoEvento)); - - if (nFeTipoEvento == NFeTipoEvento.TeNfeDestinacaoDeItemParaConsumoPessoal) - _serializarValorIbsECbsComoAtributo = true; - } - - private gConsumo() { } // Construtor sem parâmetros necessário apenas para o XmlSerializer - /// - /// P24 - Corresponde ao atributo “nItem” do elemento “det” da NF-e de aquisição + /// P24 - Corresponde ao atributo "nItem" do elemento "det" da NF-e de aquisição /// [XmlAttribute("nItem")] public int nItem { get; set; } - + /// /// P25 - Valor do IBS na nota de aquisição correspondente à quantidade destinada a uso e consumo pessoal /// - [XmlIgnore] public decimal vIBS { get => _vIbs.Arredondar(2); set => _vIbs = value.Arredondar(2); } - - [XmlAttribute("vIBS")] - public decimal vIBS_AsAttribute - { - get => vIBS; - set => vIBS = value; - } - [XmlElement("vIBS")] - public decimal vIBS_AsElement - { - get => vIBS; - set => vIBS = value; - } - /// /// P26 - Valor da CBS na nota de aquisição correspondente à quantidade destinada a uso e consumo pessoal /// - [XmlIgnore] public decimal vCBS { get => _vCbs.Arredondar(2); set => _vCbs = value.Arredondar(2); } - [XmlAttribute("vCBS")] - public decimal vCBS_AsAttribute - { - get => vCBS; - set => vCBS = value; - } - - [XmlElement("vCBS")] - public decimal vCBS_AsElement - { - get => vCBS; - set => vCBS = value; - } - /// /// P27 - Informações de quantidade de estoque influenciadas pelo evento /// [XmlElement(ElementName = "gControleEstoque")] public gControleEstoque gControleEstoque { get; set; } - + /// - /// P30 - Informações por item da NF-e de Uso e Consumo Pessoal + /// P30 - Informações por item da NF-e de Uso e Consumo Pessoal. + /// Usado apenas pelo evento e211120 (Destinação de item para consumo pessoal). + /// XSD do e112120 (AlcZfm) não declara este elemento — propriedade fica null nesse caso. /// public DFeReferenciado DFeReferenciado { get; set; } - - private bool _serializarValorIbsECbsComoAtributo { get; } - - public bool ShouldSerializevCBS_AsAttribute() => _serializarValorIbsECbsComoAtributo; - - public bool ShouldSerializevCBS_AsElement() => !_serializarValorIbsECbsComoAtributo; - - public bool ShouldSerializevIBS_AsAttribute() => _serializarValorIbsECbsComoAtributo; - - public bool ShouldSerializevIBS_AsElement() => !_serializarValorIbsECbsComoAtributo; } -} \ No newline at end of file +} diff --git a/NFe.Classes/Servicos/Evento/detEvento.cs b/NFe.Classes/Servicos/Evento/detEvento.cs index cac724a97..4747bcce3 100644 --- a/NFe.Classes/Servicos/Evento/detEvento.cs +++ b/NFe.Classes/Servicos/Evento/detEvento.cs @@ -1,4 +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) */ @@ -45,9 +45,24 @@ using NFe.Classes.Servicos.Evento.Informacoes.ItemNaoFornecido; using NFe.Classes.Servicos.Evento.Informacoes.Perecimento; +// ===================================================================================== +// Alinhado com upstream ZeusAutomacao/DFe.NET master. +// Divergencias intencionais do fork: +// 1. dest property usa tipo `detEventoDest` (upstream usa `dest`). +// Motivo: ServicosNFe.cs:1122 (handlers EPEC) instancia `new detEventoDest`. +// Trocar para `dest` quebraria o build sem refactor coordenado. +// 2. Region "Averbação para Exportação" (itensAverbados) ausente. +// Motivo: classe `itensAverbados` nao existe neste fork. +// 3. Region "Conciliação Financeira" (detPagEvento) ausente. +// Motivo: classe `detPagEvento` nao existe neste fork. +// Demais regions/properties espelham upstream em ordem e shape, garantindo merges +// futuros mais limpos. +// ===================================================================================== namespace NFe.Classes.Servicos.Evento { + [XmlRoot(Namespace = "http://www.portalfiscal.inf.br/nfe")] + [XmlType(Namespace = "http://www.portalfiscal.inf.br/nfe")] public class detEvento { /// @@ -62,102 +77,13 @@ public class detEvento /// public string descEvento { get; set; } - #region Cancelamento - - private string _nprot; - - /// - /// HP20 - Informar o número do Protocolo de Autorização da NF-e a ser Cancelada. - /// - public string nProt - { - get { return _nprot; } - set - { - if (string.IsNullOrEmpty(value)) return; - descEvento = "Cancelamento"; - LimpaDadosCartaCorrecao(); - LimpaDadosEpec(); - _nprot = value; - } - } - - private string _xjust; - - /// - /// HP21 - Informar a justificativa do cancelamento - /// - public string xJust - { - get { return _xjust; } - set - { - if (string.IsNullOrEmpty(value)) return; - descEvento = "Cancelamento"; - LimpaDadosCartaCorrecao(); - LimpaDadosEpec(); - _xjust = value; - } - } - - #endregion - - #region Carta de Correção - - private string _xcorrecao; - - /// - /// HP20 - Correção a ser considerada, texto livre. A correção mais recente substitui as anteriores. - /// - public string xCorrecao - { - get { return _xcorrecao; } - set - { - if (string.IsNullOrEmpty(value)) return; - LimpaDadosCancelamento(); - LimpaDadosEpec(); - _xcorrecao = value; - } - } - - private string _xconduso; - - /// - /// HP20a - Condições de uso da Carta de Correção - /// - public string xCondUso - { - get { return _xconduso; } - set - { - if (string.IsNullOrEmpty(value)) return; - _xconduso = value; - } - } - - #endregion - #region EPEC - private Estado? _cOrgaoAutor; - /// /// P20 - Código do Órgão do Autor do Evento. /// Nota: Informar o código da UF do Emitente para este evento. /// - public Estado? cOrgaoAutor - { - get { return _cOrgaoAutor; } - set - { - if (value == null) return; - descEvento = "EPEC"; - LimpaDadosCancelamento(); - LimpaDadosCartaCorrecao(); - _cOrgaoAutor = value; - } - } + public Estado? cOrgaoAutor { get; set; } /// /// P21 - Informar "1=Empresa Emitente" para este evento. @@ -200,6 +126,8 @@ public string ProxyDhEmi /// /// P26 /// + // Divergencia intencional vs upstream: tipo `detEventoDest` em vez de `dest`. + // Ver cabecalho do arquivo. public detEventoDest dest { get; set; } public bool ShouldSerializecOrgaoAutor() @@ -217,43 +145,238 @@ public bool ShouldSerializetpNF() return tpNF.HasValue; } - private void LimpaDadosCancelamento() + #endregion + + #region Cancelamento + + /// + /// HP20 - Informar o número do Protocolo de Autorização da NF-e a ser Cancelada. + /// + public string nProt { get; set; } + + /// + /// HP21 - Informar a justificativa do cancelamento + /// + public string xJust { get; set; } + + #endregion + + #region Cancelamento por substituição + + /// + /// P31 - Chave de acesso da NF-e substituta da NF-e a ser cancelada + /// + public string chNFeRef { get; set; } + + #endregion + + // [DIVERGENCIA] Region "Averbação para Exportação" (itensAverbados) omitida + // — classe itensAverbados ausente neste fork. + + #region RFC - Cancelamento Evento + + /// + /// P23 - Código do evento autorizado a ser cancelado + /// + public string tpEventoAut {get; set;} + + #endregion + + #region Cancelamento Insucesso/Comprovante de Entrega NFe/ Cancelamento Evento + + /// + /// P22 - Informar o número do Protocolo de Autorização do + /// Evento da NF-e a que se refere este cancelamento. + /// + public string nProtEvento { get; set; } + + #endregion + + #region Insucesso NFe + [XmlIgnore] + public DateTimeOffset? dhTentativaEntrega { get; set; } + + /// + /// Proxy para dhTentativaEntrega no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) + /// + [XmlElement(ElementName = "dhTentativaEntrega")] + public string ProxyDhTentativaEntrega { - nProt = ""; - xJust = ""; + get { return dhTentativaEntrega.ParaDataHoraStringUtc(); } + set { dhTentativaEntrega = DateTimeOffset.Parse(value); } } - private void LimpaDadosCartaCorrecao() + /// + /// P31 - Número da tentativa de entrega que não teve sucesso + /// + public int? nTentativa { get; set; } + + /// + /// P32 - Motivo do insucesso + /// + public MotivoInsucesso? tpMotivo { get; set; } + + /// + /// P33 - Justificativa do motivo do insucesso. Informar apenas para tpMotivo = + /// + public string xJustMotivo { get; set; } + + /// + /// P33 - Latitude do ponto de entrega + /// + public decimal? latGPS { get; set; } + + /// + /// P34 - Longitude do ponto de entrega + /// + public decimal? longGPS { get; set; } + + /// + /// P35 - Hash SHA-1, no formato Base64, resultante da concatenação de: Chave de Acesso da NF-e + Base64 + /// da imagem capturada na tentativa da entrega(ex: imagem capturada da assinatura eletrônica, digital do recebedor, foto, etc). + /// + public string hashTentativaEntrega { get; set; } + + /// + /// Data e hora da geração do hash da tentativa de entrega. Formato AAAA-MMDDThh:mm:ssTZD. + /// + [XmlIgnore] + public DateTimeOffset? dhHashTentativaEntrega { get; set; } + + /// + /// Proxy para dhHashTentativaEntrega no formato AAAA-MM-DDThh:mm:ssTZD (UTC - Universal Coordinated Time) + /// + [XmlElement(ElementName = "dhHashTentativaEntrega")] + public string ProxyDhHashTentativaEntrega + { + get { return dhHashTentativaEntrega.ParaDataHoraStringUtc(); } + set { dhHashTentativaEntrega = DateTimeOffset.Parse(value); } + } + + public bool ShouldSerializenTentativa() + { + return nTentativa.HasValue; + } + + public bool ShouldSerializetpMotivo() + { + return tpMotivo.HasValue; + } + + public bool ShouldSerializelatGPS() + { + return latGPS.HasValue; + } + + public bool ShouldSerializelongGPS() + { + return longGPS.HasValue; + } + + #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 { - xCorrecao = ""; - xCondUso = ""; + get { return dhHashComprovante.ParaDataHoraStringUtc(); } + set { dhHashComprovante = DateTimeOffset.Parse(value); } } - private void LimpaDadosEpec() + #endregion + + // [DIVERGENCIA] Region "Conciliação Financeira" (detPag/detPagEvento) omitida + // — classe detPagEvento ausente neste fork. + + #region Ator Interessado NFe + /// + /// P23 - Pessoas autorizadas a acessar o XML da NF-e + /// + [XmlElement("autXML")] + public List autXML { get; set; } + + /// + /// P26 - 0 = Não permite; + /// 1 = Permite o transportador autorizado pelo + /// emitente ou destinatário autorizar outros + /// transportadores para ter acesso ao download da + /// NF-e + /// + public TipoAutorizacao? tpAutorizacao { get; set; } + + public bool ShouldSerializetpAutorizacao() { - cOrgaoAutor = null; - tpAutor = null; - verAplic = null; - dhEmi = null; - tpNF = null; - IE = null; - dest = null; - //vNF = null; - //vICMS = null; - //vST = null; + return tpAutorizacao != null; } #endregion - - #region Eventos para a apuração do IBS e da CBS - #region Informação de efetivo pagamento integral para liberar crédito presumido do adquirente + #region Carta de Correção + + /// + /// HP20 - Correção a ser considerada, texto livre. A correção mais recente substitui as anteriores. + /// + public string xCorrecao { get; set; } + + /// + /// HP20a - Condições de uso da Carta de Correção. + /// P27 - Condição de uso do tipo de autorização para o transportador. + /// + public string xCondUso { get; set; } + + #endregion + + #region Eventos para a apuração do IBS e da CBS + + #region Informação de efetivo pagamento integral para liberar crédito presumido do adquirente /// /// P23 - Indicador de efetiva quitação do pagamento integral da operação referente a NFe referenciada /// public IndicadorDeQuitacaoDoPagamento? indQuitacao { get; set; } - + public bool ShouldSerializeindQuitacao() { return indQuitacao.HasValue; @@ -268,7 +391,7 @@ public bool ShouldSerializeindQuitacao() /// [XmlElement("gCredPres")] public List gCredPres { get; set; } - + public bool ShouldSerializegCredPres() { return gCredPres != null; @@ -287,7 +410,7 @@ public bool ShouldSerializegCredPres() /// [XmlElement("gConsumo")] public List gConsumo { get; set; } - + public bool ShouldSerializegConsumo() => gConsumo != null; #endregion @@ -321,7 +444,7 @@ public bool ShouldSerializegImobilizacao() { return gImobilizacao != null; } - + #endregion #region Solicitação de Apropriação de Crédito de Combustível @@ -331,7 +454,7 @@ public bool ShouldSerializegImobilizacao() /// [XmlElement("gConsumoComb")] public List gConsumoComb { get; set; } - + public bool ShouldSerializegConsumoComb() { return gConsumoComb != null; @@ -351,7 +474,7 @@ public bool ShouldSerializegCredito() { return gCredito != null; } - + #endregion #region Manifestação do Fisco sobre Pedido de Transferência de Crédito de IBS em Operações de Sucessão | Manifestação do Fisco sobre Pedido de Transferência de Crédito de CBS em Operações de Sucessão @@ -367,39 +490,30 @@ public bool ShouldSerializeindDeferimento() { return indDeferimento != null; } - + /// /// P24 - Motivo deferimento /// public MotivoDeferimento? cMotivo { get; set; } - + public bool ShouldSerializecMotivo() { return cMotivo != null; } - + /// /// P24 - Descrição deferimento /// public string xMotivo { get; set; } - - #endregion - - #region Cancelamento Evento - /// - /// P23 - Código do evento autorizado a ser cancelado - /// - public string tpEventoAut {get; set;} - #endregion #region Perecimento, perda, roubo ou furto durante o transporte contratado pelo adquirente /// - /// P23 - Informações por item da Nota de Aquisição + /// P23 - Informações por item da Nota de Aquisição /// (Evento: perecimento, perda, roubo ou furto durante o transporte contratado pelo adquirente). - /// P23 - Informações por item da Nota de Fornecimento + /// P23 - Informações por item da Nota de Fornecimento /// (Evento: perecimento, perda, roubo ou furto durante o transporte contratado pelo fornecedor). /// [XmlElement("gPerecimento")] @@ -443,4 +557,4 @@ public string ProxydPrevEntrega #endregion } -} \ No newline at end of file +} diff --git a/NFe.Servicos/ServicosNFe.cs b/NFe.Servicos/ServicosNFe.cs index 9cdfd7948..ae43d7dba 100644 --- a/NFe.Servicos/ServicosNFe.cs +++ b/NFe.Servicos/ServicosNFe.cs @@ -262,7 +262,7 @@ private INfeServico CriarServico(ServicoNFe servico, string proxyAddress = null) case ServicoNFe.RecepcaoEventoCartaCorrecao: case ServicoNFe.RecepcaoEventoCancelmento: case ServicoNFe.RecepcaoEventoManifestacaoDestinatario: - if (IsSvanNFe4()) + if (IsSvanNFe4()) return new RecepcaoEvento4SVAN(url, _certificado, _cFgServico.TimeOut); if (_cFgServico.VersaoRecepcaoEventoCceCancelamento == VersaoServico.Versao400) @@ -270,6 +270,17 @@ private INfeServico CriarServico(ServicoNFe servico, string proxyAddress = null) return new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut); + // NT 2025.002-RTC — eventos de apuração IBS/CBS (escopo emitente). + // SVRS reutiliza o mesmo SOAP RecepcaoEvento4; muda apenas a URL e o payload (XSDs novos). + case ServicoNFe.RecepcaoEventoCancelamentoDeEvento: + case ServicoNFe.RecepcaoEventoImportacaoEmAlcZfmNaoConvertidaEmIsencao: + case ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor: + case ServicoNFe.RecepcaoEventoFornecimentoNaoRealizadoComPagamentoAntecipado: + case ServicoNFe.RecepcaoEventoAtualizacaoDataPrevisaoDeEntrega: + case ServicoNFe.RecepcaoEventoDestinacaoDeItemParaConsumoPessoal: + case ServicoNFe.RecepcaoEventoInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente: + return new RecepcaoEvento4(url, _certificado, _cFgServico.TimeOut); + case ServicoNFe.NfeConsultaCadastro: return new CadConsultaCadastro4(url, _certificado, _cFgServico.TimeOut, proxyAddress); @@ -707,6 +718,16 @@ public async Task RecepcaoEventoAsync(long idlote, List RecepcaoEventoEpecAsync(long idlote, int sequ var detevento = new detEvento { versao = versaoServico, + // descEvento explicito — antes era setado por side-effect do setter de + // cOrgaoAutor; setter agora e auto-property para nao sobrescrever + // descEvento dos eventos NT 2025.002-RTC. + descEvento = NFeTipoEvento.TeNfceEpec.Descricao(), cOrgaoAutor = nfe.infNFe.ide.cUF, tpAutor = TipoAutor.taEmpresaEmitente, verAplic = veraplic, @@ -1940,9 +1965,18 @@ public async Task RecepcaoEventoCancelamentoDeEvento(int var versaoServicoRecepcao = _cFgServico.VersaoRecepcaoEventosDeApuracaoDoIbsECbs; var versaoServicoRecepcaoString = servicoNfe.VersaoServicoParaString(versaoServicoRecepcao); - var detalheEvento = ObterDetalhesEvento(versaoServicoRecepcaoString, versaoAplicativo, nfeTipoEvento, ufAutor, tipoAutor); - detalheEvento.tpEventoAut = tpEventoAut; - detalheEvento.nProt = nProtEvento; + // XSD e110001_v1.00 declara apenas: descEvento, cOrgaoAutor, verAplic, tpEventoAut, nProtEvento. + // ObterDetalhesEvento injeta tpAutor (nao declarado neste XSD) e quebra schema. + // Alinhado com upstream ZeusAutomacao/DFe.NET master. + var detalheEvento = new detEvento + { + versao = versaoServicoRecepcaoString, + descEvento = nfeTipoEvento.Descricao(), + cOrgaoAutor = ufAutor ?? _cFgServico.cUF, + verAplic = versaoAplicativo ?? "1.0", + tpEventoAut = tpEventoAut, + nProtEvento = nProtEvento + }; var informacoesEventoEnv = ObterInformacoesEventoEnv(sequenciaEvento, chaveNFe, cpfCnpj, versaoServicoRecepcaoString, cOrgao: Estado.SVRS, dataHoraEvento, nfeTipoEvento, detalheEvento); var evento = ObterEvento(versaoServicoRecepcaoString, informacoesEventoEnv); diff --git a/NFe.Utils/Validacao/Validador.cs b/NFe.Utils/Validacao/Validador.cs index 80e25ef92..a00fbbeb2 100644 --- a/NFe.Utils/Validacao/Validador.cs +++ b/NFe.Utils/Validacao/Validador.cs @@ -129,40 +129,47 @@ internal static string ObterArquivoSchema(ServicoNFe servicoNFe, VersaoServico v return "distDFeInt_v1.01.xsd"; // "distDFeInt_v1.00.xsd"; case ServicoNFe.ConsultaGtin: return "consGTIN_v1.00.xsd"; + // NT 2025.002-RTC — eventos de apuração IBS/CBS. Pattern do upstream + // (ZeusAutomacao/DFe.NET master): quando chamado pelo `RecepcaoEventoAsync` + // (loteNfe=true, default) valida o envelope genérico envEvento_v1.00.xsd; + // quando explicitamente chamado com loteNfe=false, valida o detEvento + // interno contra o schema específico de cada tipo. Sem isso a validação + // local lança "envEvento element is not declared" porque o schema interno + // não define o root. case ServicoNFe.RecepcaoEventoInformacaoDeEfetivoPagamentoIntegralParaLiberarCreditoPresumidoDoAdquirente: - return "e112110_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e112110_v1.00.xsd"; case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoPresumido: - return "e211110_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e211110_v1.00.xsd"; case ServicoNFe.RecepcaoEventoDestinacaoDeItemParaConsumoPessoal: - return "e211120_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e211120_v1.00.xsd"; case ServicoNFe.RecepcaoEventoAceiteDeDebitoNaApuracaoPorEmissaoDeNotaDeCredito: - return "e211128_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e211128_v1.00.xsd"; case ServicoNFe.RecepcaoEventoImobilizacaoDeItem: - return "e211130_v1.00.xsd "; + return loteNfe ? "envEvento_v1.00.xsd" : "e211130_v1.00.xsd"; case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoDeCombustivel: - return "e211140_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e211140_v1.00.xsd"; case ServicoNFe.RecepcaoEventoSolicitacaoDeApropriacaoDeCreditoParaBensEServicosQueDependemDeAtividadeDoAdquirente: - return "e211150_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e211150_v1.00.xsd"; case ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao: - return "e212110.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e212110_v1.00.xsd"; case ServicoNFe.RecepcaoEventoManifestacaoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao: - return "e212120_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e212120_v1.00.xsd"; case ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeIbsEmOperacoesDeSucessao: - return "e412120_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e412120_v1.00.xsd"; case ServicoNFe.RecepcaoEventoManifestacaoDoFiscoSobrePedidoDeTransferenciaDeCreditoDeCbsEmOperacoesDeSucessao: - return "e412130_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e412130_v1.00.xsd"; case ServicoNFe.RecepcaoEventoCancelamentoDeEvento: - return "e110001_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e110001_v1.00.xsd"; case ServicoNFe.RecepcaoEventoImportacaoEmAlcZfmNaoConvertidaEmIsencao: - return "e112120_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e112120_v1.00.xsd"; case ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloAdquirente: - return "e211124_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e211124_v1.00.xsd"; case ServicoNFe.RecepcaoEventoPerecimentoPerdaRouboOuFurtoDuranteOTransporteContratadoPeloFornecedor: - return "e112130_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e112130_v1.00.xsd"; case ServicoNFe.RecepcaoEventoFornecimentoNaoRealizadoComPagamentoAntecipado: - return "e112140_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e112140_v1.00.xsd"; case ServicoNFe.RecepcaoEventoAtualizacaoDataPrevisaoDeEntrega: - return "e112150_v1.00.xsd"; + return loteNfe ? "envEvento_v1.00.xsd" : "e112150_v1.00.xsd"; } return null; }