From bb5f594f497336592ecb180e20dfa22dc3ad4f01 Mon Sep 17 00:00:00 2001 From: Thalya Bezerra Date: Thu, 18 Jan 2024 13:10:31 -0300 Subject: [PATCH] - Realizado ajustes para o layout 018 do EFD ICMS IPI. --- src/FiscalBr.Common/Enums.cs | 17 ++++++++-- src/FiscalBr.Common/Sped/ArquivoSpedV2.cs | 2 ++ src/FiscalBr.EFDFiscal/Bloco1.cs | 25 ++++++++++++-- src/FiscalBr.EFDFiscal/BlocoC.cs | 8 +++-- src/FiscalBr.EFDFiscal/BlocoD.cs | 13 ++++--- src/FiscalBr.EFDFiscal/BlocoE.cs | 12 +++++-- .../Sped/Bloco0/Bloco0Registro000Test.cs | 34 +++++++++++++++++++ .../Sped/Bloco1/Bloco1Registro1391Test.cs | 2 +- .../Sped/Enums/CodigoVersaoLeiauteSpedTest.cs | 4 +-- 9 files changed, 99 insertions(+), 18 deletions(-) diff --git a/src/FiscalBr.Common/Enums.cs b/src/FiscalBr.Common/Enums.cs index 714a40e..4ebeaeb 100644 --- a/src/FiscalBr.Common/Enums.cs +++ b/src/FiscalBr.Common/Enums.cs @@ -203,7 +203,8 @@ public enum VersaoLeiauteSped [DefaultValue("14")] V14, [DefaultValue("15")] V15, [DefaultValue("16")] V16, - [DefaultValue("17")] V17 + [DefaultValue("17")] V17, + [DefaultValue("18")] V18 } public enum CodVersaoSpedECD @@ -460,6 +461,13 @@ public enum CodVersaoSpedFiscal /// Validade: 01/01/2023 - 31/12/2023 /// [DefaultValue("017")] V17, + + /// + /// Código: 018 + /// Versão: 1.16 + /// Validade: 01/01/2024 - 31/12/2024 + /// + [DefaultValue("018")] V18 } public enum SimOuNao @@ -896,7 +904,12 @@ public enum IndTipoOperacaoStUfDiversa /// /// 1 - Leasing de veículos ou faturamento direto. /// - [DefaultValue("1")] LeasingVeiculosFaturamentoDireto + [DefaultValue("1")] LeasingVeiculosFaturamentoDireto, + + /// + /// 2 - Recusa de recebimento (de acordo com as condições descritas nas instruções do Registro) + /// + [DefaultValue("2")] RecusaDeRecebimento } /// diff --git a/src/FiscalBr.Common/Sped/ArquivoSpedV2.cs b/src/FiscalBr.Common/Sped/ArquivoSpedV2.cs index 74a94d3..cd2f076 100644 --- a/src/FiscalBr.Common/Sped/ArquivoSpedV2.cs +++ b/src/FiscalBr.Common/Sped/ArquivoSpedV2.cs @@ -755,6 +755,8 @@ public virtual Enum ObterEnumVersaoLeiaute() return CodVersaoSpedFiscal.V16; case VersaoLeiauteSped.V17: return CodVersaoSpedFiscal.V17; + case VersaoLeiauteSped.V18: + return CodVersaoSpedFiscal.V18; } break; } diff --git a/src/FiscalBr.EFDFiscal/Bloco1.cs b/src/FiscalBr.EFDFiscal/Bloco1.cs index 222383d..17abdbf 100644 --- a/src/FiscalBr.EFDFiscal/Bloco1.cs +++ b/src/FiscalBr.EFDFiscal/Bloco1.cs @@ -988,6 +988,7 @@ public Registro1391() : base("1391") /// 01 – Bagaço de cana /// 02 - DDG /// 03 - WDG + /// 04 - (DDG + WDG) /// [SpedCampos(19, "TP_RESIDUO", "N", 2, 0, false, 6)] public int? TpResiduo { get; set; } @@ -995,8 +996,26 @@ public Registro1391() : base("1391") /// /// Quantidade de resíduo produzido (toneladas) /// - [SpedCampos(19, "QTD_RESIDUO", "N", int.MaxValue, 2, true, 6)] + [SpedCampos(20, "QTD_RESIDUO", "N", int.MaxValue, 2, true, 6)] public decimal QtdResiduo { get; set; } + + /// + /// Quantidade de resíduo produzido de DDG (toneladas) + /// + [SpedCampos(21, "QTD_RESIDUO_DDG", "N", int.MaxValue, 2, true, 18)] + public decimal QtdResiduoDdg { get; set; } + + /// + /// Quantidade de resíduo produzido de WDG (toneladas) + /// + [SpedCampos(22, "QTD_RESIDUO_WDG", "N", int.MaxValue, 2, true, 18)] + public decimal QtdResiduoWdg { get; set; } + + /// + /// Quantidade de resíduo produzido de bagaço de cana (toneladas) + /// + [SpedCampos(23, "QTD_RESIDUO_CANA", "N", int.MaxValue, 2, true, 18)] + public decimal QtdResiduoCana { get; set; } } /// @@ -1012,7 +1031,9 @@ public Registro1400() : base("1400") } /// - /// Código do item - próprio IPM ou campo 02 do Registro 0200 + /// Código do item (Tabela 5.9.1 de Itens UF Índice de + /// Participação dos Municípios ou Tabela 5.9.2 de Itens UF_ST + /// Índice de participação dos Municípios) ou campo 02 do Registro 0200 /// [SpedCampos(2, "COD_ITEM_IPM", "C", 60, 0, true, 2)] public string CodItemIpm { get; set; } diff --git a/src/FiscalBr.EFDFiscal/BlocoC.cs b/src/FiscalBr.EFDFiscal/BlocoC.cs index 0207438..46184c3 100644 --- a/src/FiscalBr.EFDFiscal/BlocoC.cs +++ b/src/FiscalBr.EFDFiscal/BlocoC.cs @@ -1278,8 +1278,8 @@ public RegistroC105() : base("C105") /// /// /// 0 - Combustíveis e lubrificantes; - /// - /// 1 - Leasing de veículos ou faturamento direto. + /// 1 - Leasing de veículos ou faturamento direto; + /// 2 - Recusa de recebimento (de acordo com as condições descritas nas instruções do Registro). /// [SpedCampos(2, "OPER", "N", 1, 0, true, 3)] public IndTipoOperacaoStUfDiversa Oper { get; set; } @@ -5512,7 +5512,9 @@ public RegistroC690() : base("C690") /// /// REGISTRO C700: CONSOLIDAÇÃO DOS DOCUMENTOS (EMPRESAS OBRIGADAS - /// À ENTREGA DO ARQUIVO PREVISTO NO CONVÊNIO ICMS 115/03) + /// À ENTREGA DO ARQUIVO PREVISTO NO CONVÊNIO ICMS 115/03), NOTA FISCAL/CONTA DE + /// FORNECIMENTO DE GÁS CANALIZADO (CÓDIGO 28) e NOTA FISCAL DE ENERGIA + /// ELÉTRICA ELETRÔNICA – NF3e (CÓDIGO 66) /// public class RegistroC700 : RegistroSped { diff --git a/src/FiscalBr.EFDFiscal/BlocoD.cs b/src/FiscalBr.EFDFiscal/BlocoD.cs index 5f2097e..2d213f4 100644 --- a/src/FiscalBr.EFDFiscal/BlocoD.cs +++ b/src/FiscalBr.EFDFiscal/BlocoD.cs @@ -3066,6 +3066,7 @@ public RegistroD700() : base("D700") /// Série do documento fiscal. /// [SpedCampos(7, "SER", "N", 3, 0, false, 17)] + [SpedCampos(7, "SER", "N", 3, 0, true, 18)] public string Ser { get; set; } /// @@ -3081,7 +3082,7 @@ public RegistroD700() : base("D700") public DateTime? DtDoc { get; set; } /// - /// Data da entrada. + /// Data da entrada ou da saída. /// [SpedCampos(10, "DT_E_S", "N", 8, 0, false, 17)] public DateTime? DtEs { get; set; } @@ -3156,6 +3157,7 @@ public RegistroD700() : base("D700") /// Chave da Nota Fiscal Fatura de Serviço de Comunicação Eletrônica. /// [SpedCampos(22, "CHV_DOCe", "C", 44, 0, false, 17)] + [SpedCampos(22, "CHV_DOCe", "C", 44, 0, true, 18)] public string ChvDoce { get; set; } /// @@ -3262,8 +3264,8 @@ public RegistroD730() : base("D730") public decimal AliqIcms { get; set; } /// - /// Valor total acumulado das operações correspondentes à combinação de CST_ICMS, CFOP e alíquota do ICMS, incluídas as - /// despesas acessórias e acréscimos. + /// Valor total dos itens relacionados aos serviços próprios, com destaque de ICMS, correspondente à + /// combinação de CST_ICMS, CFOP, e alíquota do CMS. /// [SpedCampos(5, "VL_OPR", "N", 0, 2, true, 17)] public decimal VlOpr { get; set; } @@ -3424,6 +3426,7 @@ public RegistroD750() : base("D750") /// Série do documento fiscal /// [SpedCampos(3, "SER", "C", 3, 0, true, 17)] + [SpedCampos(3, "SER", "N", 3, 0, true, 18)] public string Ser { get; set; } /// @@ -3540,8 +3543,8 @@ public RegistroD760() : base("D760") public decimal AliqIcms { get; set; } /// - /// Valor total acumulado das operações correspondentes à combinação de CST_ICMS, CFOP e alíquota do ICMS, incluídas as - /// despesas acessórias menos os descontos incondicionais. + /// Valor total dos itens relacionados aos serviços próprios com destaque de ICMS, correspondente à combinação de + /// CST_ICMS, CFOP, e alíquota do ICMS. /// [SpedCampos(5, "VL_OPR", "N", 0, 2, true, 17)] public decimal VlOpr { get; set; } diff --git a/src/FiscalBr.EFDFiscal/BlocoE.cs b/src/FiscalBr.EFDFiscal/BlocoE.cs index d8be83e..055c852 100644 --- a/src/FiscalBr.EFDFiscal/BlocoE.cs +++ b/src/FiscalBr.EFDFiscal/BlocoE.cs @@ -414,11 +414,11 @@ public RegistroE113() : base("E113") } /// - /// Código do participante + /// Código do participante (campo 02 do Registro 0150) /// /// /// - do emitente do documento ou do remetente das mercadorias, no caso das entradas; - /// - do adquirente, no caso de saídas + /// - do adquirente, no caso de saídas. /// [SpedCampos(2, "COD_PART", "C", 60, 0, true, 2)] public string CodPart { get; set; } @@ -454,7 +454,7 @@ public RegistroE113() : base("E113") public DateTime DtDoc { get; set; } /// - /// Código do item + /// Código do item (campo 02 do Registro 0200) /// [SpedCampos(8, "COD_ITEM", "C", 60, 0, false, 2)] public string CodItem { get; set; } @@ -856,6 +856,12 @@ public RegistroE240() : base("E240") /// [SpedCampos(9, "VL_AJ_ITEM", "N", 0, 2, true, 2)] public decimal VlAjItem { get; set; } + + /// + /// Chave do Documento Eletrônico + /// + [SpedCampos(9, "CHV_DOCe", "N", 44, 0, false, 18)] + public decimal ChvDoc { get; set; } } /// diff --git a/tests/FiscalBr.Test/Sped/Bloco0/Bloco0Registro000Test.cs b/tests/FiscalBr.Test/Sped/Bloco0/Bloco0Registro000Test.cs index cc15718..ee35c7f 100644 --- a/tests/FiscalBr.Test/Sped/Bloco0/Bloco0Registro000Test.cs +++ b/tests/FiscalBr.Test/Sped/Bloco0/Bloco0Registro000Test.cs @@ -67,5 +67,39 @@ public void Escrever_Registro_0000_EFDFiscal_VNova() Assert.Equal(expectedResult, currentResult); } + + [Fact] + public void Escrever_Registro_0000_EFDFiscal_V18() + { + var initialDate = DateTime.Now.AddDays(-(DateTime.Now.Day - 1)).Date; + var finalDate = initialDate.AddMonths(1).AddDays(-1); + + var formatedInitialDate = initialDate.ToString(new CultureInfo("pt-BR")).Replace("/", "").Split(" ")[0]; + var formatedFinalDate = finalDate.ToString(new CultureInfo("pt-BR")).Replace("/", "").Split(" ")[0]; + + var expectedResult = + $"|0000|018|0|{formatedInitialDate}|{formatedFinalDate}|BANCO DO BRASIL S.A.|00000000000191||GO|123456789|5204508|||A|1|{Environment.NewLine}"; + + var source = new EFDFiscal.Bloco0.Registro0000 + { + CodVer = CodVersaoSpedFiscal.V18, + CodFin = IndCodFinalidadeArquivo.RemessaArquivoOriginal, + DtIni = initialDate, + DtFin = finalDate, + Nome = "BANCO DO BRASIL S.A.", + Cnpj = "00000000000191", + Uf = "GO", + Ie = "123456789", + CodMun = "5204508", + IndPerfil = IndPerfilArquivo.A, + IndAtiv = Common.Sped.Enums.TipoAtivSpedFiscal.Outros + }; + + var efd = new ArquivoEFDFiscalV2(VersaoLeiauteSped.V18); + + var currentResult = efd.EscreverLinha(source); + + Assert.Equal(expectedResult, currentResult); + } } } diff --git a/tests/FiscalBr.Test/Sped/Bloco1/Bloco1Registro1391Test.cs b/tests/FiscalBr.Test/Sped/Bloco1/Bloco1Registro1391Test.cs index f217c75..1f1ad06 100644 --- a/tests/FiscalBr.Test/Sped/Bloco1/Bloco1Registro1391Test.cs +++ b/tests/FiscalBr.Test/Sped/Bloco1/Bloco1Registro1391Test.cs @@ -12,7 +12,7 @@ public class Bloco1Registro1391Test [Fact] public void Ler_Registro_1391_EFDFiscal() { - string linha = "|1391|01012023|123,41|123,42|123,43|123,44|123,45|123,46|123,47|123,48|123,49|123,40|123,41|123,42|123,43|123,44|Observações|COD_ITEM|01|123,45|"; + string linha = "|1391|01012023|123,41|123,42|123,43|123,44|123,45|123,46|123,47|123,48|123,49|123,40|123,41|123,42|123,43|123,44|Observações|COD_ITEM|01|123,45|123,45|123,45|123,45|"; var registro = (FiscalBr.EFDFiscal.Bloco1.Registro1391)LerCamposSped.LerCampos(linha, "EFDFiscal", 0); diff --git a/tests/FiscalBr.Test/Sped/Enums/CodigoVersaoLeiauteSpedTest.cs b/tests/FiscalBr.Test/Sped/Enums/CodigoVersaoLeiauteSpedTest.cs index b56d557..6838824 100644 --- a/tests/FiscalBr.Test/Sped/Enums/CodigoVersaoLeiauteSpedTest.cs +++ b/tests/FiscalBr.Test/Sped/Enums/CodigoVersaoLeiauteSpedTest.cs @@ -95,7 +95,7 @@ public void ObterIntVersaoEFDContribTest(VersaoLeiauteSped? v, int versaoEsperad [Theory] [InlineData(VersaoLeiauteSped.V2, CodVersaoSpedFiscal.V2)] - [InlineData(null, CodVersaoSpedFiscal.V17)] + [InlineData(null, CodVersaoSpedFiscal.V18)] public void ObterEnumVersaoEFDFiscalTest(VersaoLeiauteSped? v, CodVersaoSpedFiscal? resultadoEsperado) { var maiorVersao = (int)EnumHelpers.GetEnumMaxValue(); @@ -141,7 +141,7 @@ public void ObterNumeroVersoesEFDContribTest(int qtdEsperada) } [Theory] - [InlineData(16)] + [InlineData(17)] public void ObterNumeroVersoesEFDFiscalTest(int qtdEsperada) { var efd = new ArquivoEFDFiscalV2();