From 78ac3e18bad7ee741c2ea78dbc4efeb493aa3cfc Mon Sep 17 00:00:00 2001 From: adriano_g3 Date: Fri, 29 Nov 2024 16:08:22 -0300 Subject: [PATCH] Adicionado Property CalcularIcmsEfetivoeRetencaoParaSt, CRT 4 (MEI) --- src/MotorTributarioNet/Flags/Crt .cs | 6 +- .../Base/CalculaBaseCalculoBase.cs | 5 +- .../CalulosDeBC/CalculaBaseCalculoCofins.cs | 4 +- .../CalulosDeBC/CalculaBaseCalculoIpi.cs | 3 - .../CalulosDeBC/CalculaBaseCalculoIssqn.cs | 3 - .../CalulosDeBC/CalculaBaseCalculoPis.cs | 5 +- .../Impostos/CalulosDeBC/CalculaBaseFcp.cs | 5 +- .../CalulosDeBC/CalculoBaseIcmsSemIpi.cs | 9 +- .../Impostos/CalulosDeBC/CalculoBaseIcmsSt.cs | 2 - .../Impostos/Csosns/Csosn500.cs | 20 +-- src/MotorTributarioNet/Impostos/Csts/Cst60.cs | 31 +++-- .../Impostos/ITributavel.cs | 1 + .../Impostos/ResultadoTributacao.cs | 122 ++++++++++++------ src/TestesUnitarios/Csosn/Csosn500Test.cs | 2 +- src/TestesUnitarios/Cst/Cst60Test.cs | 4 +- src/TestesUnitarios/Entidade/Produto.cs | 1 + 16 files changed, 125 insertions(+), 98 deletions(-) diff --git a/src/MotorTributarioNet/Flags/Crt .cs b/src/MotorTributarioNet/Flags/Crt .cs index ae8cd9d..203d28b 100644 --- a/src/MotorTributarioNet/Flags/Crt .cs +++ b/src/MotorTributarioNet/Flags/Crt .cs @@ -32,7 +32,9 @@ public enum Crt SimplesNacionalExecesso = 2, [Description("3 - Regime Normal")] - RegimeNormal = 3 + RegimeNormal = 3, + [Description("4 - Simples Nacional MEI")] + SimplesNacionalMei = 4 } -} +} \ No newline at end of file diff --git a/src/MotorTributarioNet/Impostos/CalulosDeBC/Base/CalculaBaseCalculoBase.cs b/src/MotorTributarioNet/Impostos/CalulosDeBC/Base/CalculaBaseCalculoBase.cs index 2db6f20..b6a0be1 100644 --- a/src/MotorTributarioNet/Impostos/CalulosDeBC/Base/CalculaBaseCalculoBase.cs +++ b/src/MotorTributarioNet/Impostos/CalulosDeBC/Base/CalculaBaseCalculoBase.cs @@ -31,9 +31,8 @@ protected CalculaBaseCalculoBase(ITributavel tributavel) protected decimal CalculaBaseDeCalculo() { - var baseCalculo = _tributavel.ValorProduto * _tributavel.QuantidadeProduto + - _tributavel.Frete + - _tributavel.Seguro + _tributavel.OutrasDespesas; + var baseCalculo = (_tributavel.ValorProduto * _tributavel.QuantidadeProduto) + + _tributavel.Frete + _tributavel.Seguro + _tributavel.OutrasDespesas; return baseCalculo; } diff --git a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoCofins.cs b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoCofins.cs index f0cfe6c..9596194 100644 --- a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoCofins.cs +++ b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoCofins.cs @@ -39,21 +39,19 @@ public decimal CalculaBaseCalculo() { decimal valorIcms = new TributacaoIcms(_tributavel, _tipoDesconto).Calcula().Valor; var baseCalculo = _tributavel.DeduzIcmsDaBaseDePisCofins ? CalculaBaseDeCalculo() - valorIcms : CalculaBaseDeCalculo(); - baseCalculo = baseCalculo - baseCalculo * _tributavel.PercentualReducaoCofins / 100; + baseCalculo -= baseCalculo * _tributavel.PercentualReducaoCofins / 100; return _tipoDesconto == TipoDesconto.Condincional ? CalculaIcmsComDescontoCondicional(baseCalculo) : CalculaIcmsComDescontoIncondicional(baseCalculo); } private decimal CalculaIcmsComDescontoIncondicional(decimal baseCalculoInicial) { var baseCalculo = baseCalculoInicial - _tributavel.Desconto; - return baseCalculo; } private decimal CalculaIcmsComDescontoCondicional(decimal baseCalculoInicial) { var baseCalulo = baseCalculoInicial + _tributavel.Desconto; - return baseCalulo; } } diff --git a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIpi.cs b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIpi.cs index 42ba738..befad87 100644 --- a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIpi.cs +++ b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIpi.cs @@ -37,21 +37,18 @@ public CalculaBaseCalculoIpi(ITributavel tributavel, TipoDesconto tipoDesconto) public decimal CalculaBaseCalculo() { var baseCalculo = CalculaBaseDeCalculo(); - return _tipoDesconto == TipoDesconto.Condincional ? CalculaIcmsComDescontoCondicional(baseCalculo) : CalculaIcmsComDescontoIncondicional(baseCalculo); } private decimal CalculaIcmsComDescontoIncondicional(decimal baseCalculoInicial) { var baseCalculo = baseCalculoInicial - _tributavel.Desconto; - return baseCalculo; } private decimal CalculaIcmsComDescontoCondicional(decimal baseCalculoInicial) { var baseCalulo = baseCalculoInicial + _tributavel.Desconto; - return baseCalulo; } } diff --git a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIssqn.cs b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIssqn.cs index 09c387b..b9a93d7 100644 --- a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIssqn.cs +++ b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIssqn.cs @@ -37,21 +37,18 @@ public CalculaBaseCalculoIssqn(ITributavel tributavel, TipoDesconto tipoDesconto public decimal CalculaBaseCalculo() { var baseCalculo = CalculaBaseDeCalculo(); - return _tipoDesconto == TipoDesconto.Condincional ? CalculaIcmsComDescontoCondicional(baseCalculo) : CalculaIcmsComDescontoIncondicional(baseCalculo); } private decimal CalculaIcmsComDescontoIncondicional(decimal baseCalculoInicial) { var baseCalculo = baseCalculoInicial - _tributavel.Desconto; - return baseCalculo; } private decimal CalculaIcmsComDescontoCondicional(decimal baseCalculoInicial) { var baseCalulo = baseCalculoInicial + _tributavel.Desconto; - return baseCalulo; } } diff --git a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoPis.cs b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoPis.cs index f73c11a..f5e1942 100644 --- a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoPis.cs +++ b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoPis.cs @@ -39,22 +39,19 @@ public decimal CalculaBaseCalculo() { decimal valorIcms = new TributacaoIcms(_tributavel, _tipoDesconto).Calcula().Valor; var baseCalculo = _tributavel.DeduzIcmsDaBaseDePisCofins ? CalculaBaseDeCalculo() - valorIcms : CalculaBaseDeCalculo(); - baseCalculo = baseCalculo - baseCalculo * _tributavel.PercentualReducaoPis / 100; - + baseCalculo -= baseCalculo * _tributavel.PercentualReducaoPis / 100; return _tipoDesconto == TipoDesconto.Condincional ? CalculaIcmsComDescontoCondicional(baseCalculo) : CalculaIcmsComDescontoIncondicional(baseCalculo); } private decimal CalculaIcmsComDescontoIncondicional(decimal baseCalculoInicial) { var baseCalculo = baseCalculoInicial - _tributavel.Desconto; - return baseCalculo; } private decimal CalculaIcmsComDescontoCondicional(decimal baseCalculoInicial) { var baseCalulo = baseCalculoInicial + _tributavel.Desconto; - return baseCalulo; } } diff --git a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseFcp.cs b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseFcp.cs index 8012b9c..1c325e1 100644 --- a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseFcp.cs +++ b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseFcp.cs @@ -25,7 +25,6 @@ namespace MotorTributarioNet.Impostos.CalulosDeBC public class CalculaBaseFcp : CalculaBaseCalculoIcms { public CalculaBaseFcp(ITributavel tributavel, TipoDesconto tipoDesconto) : base(tributavel, tipoDesconto) - { - } + { } } -} +} \ No newline at end of file diff --git a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculoBaseIcmsSemIpi.cs b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculoBaseIcmsSemIpi.cs index 22162c5..3d6d0f1 100644 --- a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculoBaseIcmsSemIpi.cs +++ b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculoBaseIcmsSemIpi.cs @@ -37,25 +37,20 @@ public CalculoBaseIcmsSemIpi(ITributavel tributavel, TipoDesconto tipoDesconto) public decimal CalculaBaseCalculo() { var baseCalculo = CalculaBaseDeCalculo(); - return _tipoDesconto == TipoDesconto.Condincional ? CalculaIcmsComDescontoCondicional(baseCalculo) : CalculaIcmsComDescontoIncondicional(baseCalculo); } private decimal CalculaIcmsComDescontoIncondicional(decimal baseCalculoInicial) { var baseCalculo = baseCalculoInicial - _tributavel.Desconto; - - baseCalculo = baseCalculo - baseCalculo * _tributavel.PercentualReducao / 100; - + baseCalculo -= baseCalculo * _tributavel.PercentualReducao / 100; return baseCalculo; } private decimal CalculaIcmsComDescontoCondicional(decimal baseCalculoInicial) { var baseCalulo = baseCalculoInicial + _tributavel.Desconto; - - baseCalulo = baseCalulo - baseCalulo * _tributavel.PercentualReducao / 100; - + baseCalulo -= baseCalulo * _tributavel.PercentualReducao / 100; return baseCalulo; } } diff --git a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculoBaseIcmsSt.cs b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculoBaseIcmsSt.cs index db33d51..406e267 100644 --- a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculoBaseIcmsSt.cs +++ b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculoBaseIcmsSt.cs @@ -34,7 +34,6 @@ public CalculoBaseIcmsSt(ITributavel tributavel, TipoDesconto tipoDesconto) : ba _tipoDesconto = tipoDesconto; } - public decimal CalculaBaseCalculo() { var baseCalculo = CalculaBaseDeCalculo(); @@ -42,7 +41,6 @@ public decimal CalculaBaseCalculo() return baseCalculoSt; } - public decimal CalculaBaseCalculoST(decimal baseCalculoIcms) { var baseCalculoSt = _tipoDesconto == TipoDesconto.Condincional ? CalculaIcmsComDescontoCondicional(baseCalculoIcms) : CalculaIcmsComDescontoIncondicional(baseCalculoIcms); diff --git a/src/MotorTributarioNet/Impostos/Csosns/Csosn500.cs b/src/MotorTributarioNet/Impostos/Csosns/Csosn500.cs index 2e7ce3f..845c2fc 100644 --- a/src/MotorTributarioNet/Impostos/Csosns/Csosn500.cs +++ b/src/MotorTributarioNet/Impostos/Csosns/Csosn500.cs @@ -42,17 +42,19 @@ public Csosn500(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, T public override void Calcula(ITributavel tributavel) { - PercentualSt = tributavel.PercentualIcmsSt + tributavel.PercentualFcpSt; + if (tributavel.CalcularIcmsEfetivoeRetencaoParaSt) + { + PercentualSt = tributavel.PercentualIcmsSt + tributavel.PercentualFcpSt; - var facade = new FacadeCalculadoraTributacao(tributavel, TipoDesconto); - var resultadoCalculoIcmsEfetivo = facade.CalculaIcmsEfetivo(); + var facade = new FacadeCalculadoraTributacao(tributavel, TipoDesconto); + var resultadoCalculoIcmsEfetivo = facade.CalculaIcmsEfetivo(); - ValorBcIcmsEfetivo = resultadoCalculoIcmsEfetivo.BaseCalculo; - PercentualIcmsEfetivo = tributavel.PercentualIcmsEfetivo; - PercentualReducaoIcmsEfetivo = tributavel.PercentualReducaoIcmsEfetivo; - ValorIcmsEfetivo = resultadoCalculoIcmsEfetivo.Valor; - PercentualFcpStRetido = tributavel.PercentualFcpStRetido; + ValorBcIcmsEfetivo = resultadoCalculoIcmsEfetivo.BaseCalculo; + PercentualIcmsEfetivo = tributavel.PercentualIcmsEfetivo; + PercentualReducaoIcmsEfetivo = tributavel.PercentualReducaoIcmsEfetivo; + ValorIcmsEfetivo = resultadoCalculoIcmsEfetivo.Valor; + PercentualFcpStRetido = tributavel.PercentualFcpStRetido; + } } - } } \ No newline at end of file diff --git a/src/MotorTributarioNet/Impostos/Csts/Cst60.cs b/src/MotorTributarioNet/Impostos/Csts/Cst60.cs index fb754fb..bde6002 100644 --- a/src/MotorTributarioNet/Impostos/Csts/Cst60.cs +++ b/src/MotorTributarioNet/Impostos/Csts/Cst60.cs @@ -50,24 +50,27 @@ public Cst60(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, Tipo public override void Calcula(ITributavel tributavel) { - var facade = new FacadeCalculadoraTributacao(tributavel, TipoDesconto); - var resultadoCalculoIcms = facade.CalculaIcmsSt(); - var resultadoCalculoIcmsEfetivo = facade.CalculaIcmsEfetivo(); + if (tributavel.CalcularIcmsEfetivoeRetencaoParaSt) + { + var facade = new FacadeCalculadoraTributacao(tributavel, TipoDesconto); + var resultadoCalculoIcms = facade.CalculaIcmsSt(); + var resultadoCalculoIcmsEfetivo = facade.CalculaIcmsEfetivo(); - PercentualBcStRetido = tributavel.PercentualIcmsSt; - ValorBcStRetido = resultadoCalculoIcms.BaseCalculoIcmsSt; - ValorIcmsStRetido = resultadoCalculoIcms.ValorIcmsSt; + PercentualBcStRetido = tributavel.PercentualIcmsSt; + ValorBcStRetido = resultadoCalculoIcms.BaseCalculoIcmsSt; + ValorIcmsStRetido = resultadoCalculoIcms.ValorIcmsSt; - //ICMS Efetivo - ValorBcIcmsEfetivo = resultadoCalculoIcmsEfetivo.BaseCalculo; - PercentualIcmsEfetivo = tributavel.PercentualIcmsEfetivo; - PercentualReducaoIcmsEfetivo = tributavel.PercentualReducaoIcmsEfetivo; - ValorIcmsEfetivo = resultadoCalculoIcmsEfetivo.Valor; - PercentualFcpStRetido = tributavel.PercentualFcpStRetido; + //ICMS Efetivo + ValorBcIcmsEfetivo = resultadoCalculoIcmsEfetivo.BaseCalculo; + PercentualIcmsEfetivo = tributavel.PercentualIcmsEfetivo; + PercentualReducaoIcmsEfetivo = tributavel.PercentualReducaoIcmsEfetivo; + ValorIcmsEfetivo = resultadoCalculoIcmsEfetivo.Valor; + PercentualFcpStRetido = tributavel.PercentualFcpStRetido; - ValorCreditoOutorgadoOuPresumido = facade.CalculaIcmsCredito().Valor; + ValorCreditoOutorgadoOuPresumido = facade.CalculaIcmsCredito().Valor; - PercentualSt = tributavel.PercentualIcmsSt + tributavel.PercentualFcpSt; + PercentualSt = tributavel.PercentualIcmsSt + tributavel.PercentualFcpSt; + } } } } diff --git a/src/MotorTributarioNet/Impostos/ITributavel.cs b/src/MotorTributarioNet/Impostos/ITributavel.cs index 36230dd..80b7945 100644 --- a/src/MotorTributarioNet/Impostos/ITributavel.cs +++ b/src/MotorTributarioNet/Impostos/ITributavel.cs @@ -81,6 +81,7 @@ public interface ITributavel decimal AliquotaAdRemIcmsRetidoAnteriormente { get; set; } decimal PercentualReducaoAliquotaAdRemIcms { get; set; } decimal PercentualIcmsMonofasicoDiferido { get; set; } + bool CalcularIcmsEfetivoeRetencaoParaSt { get; set; } decimal PercentualIcmsEfetivo { get; set; } decimal PercentualReducaoIcmsEfetivo { get; set; } } diff --git a/src/MotorTributarioNet/Impostos/ResultadoTributacao.cs b/src/MotorTributarioNet/Impostos/ResultadoTributacao.cs index 8040cfa..198df45 100644 --- a/src/MotorTributarioNet/Impostos/ResultadoTributacao.cs +++ b/src/MotorTributarioNet/Impostos/ResultadoTributacao.cs @@ -18,7 +18,6 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE - using MotorTributarioNet.Flags; using MotorTributarioNet.Impostos.Csosns; using MotorTributarioNet.Impostos.Csosns.Base; @@ -287,7 +286,7 @@ private void CalcularIcms() break; } } - else + else if (CrtEmpresa == Crt.SimplesNacional) { switch (_produto.Csosn) { @@ -451,19 +450,58 @@ private void CalcularIcms() break; } } - } + else + { + ValorCredito = decimal.Zero; + PercentualCredito = decimal.Zero; + ValorBcIcmsEfetivo = decimal.Zero; + PercentualReducaoIcmsEfetivo = decimal.Zero; + PercentualIcmsEfetivo = decimal.Zero; + PercentualFcpStRetido = decimal.Zero; + ValorIcmsEfetivo = decimal.Zero; + PercentualIcms = decimal.Zero; + PercentualReducao = decimal.Zero; + PercentualIcmsSt = decimal.Zero; + PercentualReducaoSt = decimal.Zero; + PercentualMva = decimal.Zero; + ValorBcIcms = decimal.Zero; + ValorIcms = decimal.Zero; + ValorIcmsSt = decimal.Zero; + ValorBcIcmsSt = decimal.Zero; + switch (_produto.Csosn) + { + case Csosn.Csosn101: + case Csosn.Csosn201: + case Csosn.Csosn202: + case Csosn.Csosn203: + case Csosn.Csosn500: + _produto.Csosn = Csosn.Csosn102; + break; + case Csosn.Csosn900: + CsosnBase = new Csosn900(); + CsosnBase.Calcula(_produto); + PercentualCredito = ((Csosn900)CsosnBase).PercentualCredito; + ValorCredito = ((Csosn900)CsosnBase).ValorCredito; + ValorBcIcms = ((Csosn900)CsosnBase).ValorBcIcms; + ValorIcms = ((Csosn900)CsosnBase).ValorIcms; + PercentualMva = ((Csosn900)CsosnBase).PercentualMva; + PercentualIcmsSt = ((Csosn900)CsosnBase).PercentualIcmsSt; + PercentualReducaoSt = ((Csosn900)CsosnBase).PercentualReducaoSt; + ValorIcmsSt = ((Csosn900)CsosnBase).ValorIcmsSt; + ValorBcIcmsSt = ((Csosn900)CsosnBase).ValorBcIcmsSt; + break; + } + } + } private TributacaoIpi CalcularIpi() { Ipi = new TributacaoIpi(_produto, TipoDesconto); ValorIpi = decimal.Zero; ValorBcIpi = decimal.Zero; - - if (_produto.CstIpi == CstIpi.Cst00 - || _produto.CstIpi == CstIpi.Cst49 - || _produto.CstIpi == CstIpi.Cst50 - || _produto.CstIpi == CstIpi.Cst99) + if (CrtEmpresa != Crt.SimplesNacionalMei && + (_produto.CstIpi == CstIpi.Cst00 || _produto.CstIpi == CstIpi.Cst49 || _produto.CstIpi == CstIpi.Cst50 || _produto.CstIpi == CstIpi.Cst99)) { var result = Ipi.Calcula(); ValorIpi = result.Valor; @@ -477,9 +515,7 @@ private TributacaoPis CalcularPis() Pis = new TributacaoPis(_produto, TipoDesconto); ValorPis = decimal.Zero; ValorBcPis = decimal.Zero; - - if (_produto.CstPisCofins == CstPisCofins.Cst01 - || _produto.CstPisCofins == CstPisCofins.Cst02) + if (CrtEmpresa != Crt.SimplesNacionalMei && (_produto.CstPisCofins == CstPisCofins.Cst01 || _produto.CstPisCofins == CstPisCofins.Cst02)) { var result = Pis.Calcula(); ValorPis = result.Valor; @@ -493,14 +529,11 @@ private TributacaoCofins CalcularCofins() Cofins = new TributacaoCofins(_produto, TipoDesconto); ValorCofins = decimal.Zero; ValorBcCofins = decimal.Zero; - - if (_produto.CstPisCofins == CstPisCofins.Cst01 - || _produto.CstPisCofins == CstPisCofins.Cst02) + if (CrtEmpresa != Crt.SimplesNacionalMei && (_produto.CstPisCofins == CstPisCofins.Cst01 || _produto.CstPisCofins == CstPisCofins.Cst02)) { var result = Cofins.Calcula(); ValorCofins = result.Valor; ValorBcCofins = result.BaseCalculo; - } return Cofins; } @@ -525,12 +558,12 @@ private TributacaoFcp CalcularFcp() TributacaoFcp = new TributacaoFcp(_produto, TipoDesconto); Fcp = decimal.Zero; ValorBcFcp = decimal.Zero; - - var result = TributacaoFcp.Calcula(); - - Fcp = result.Valor; - ValorBcFcp = result.BaseCalculo; - + if (CrtEmpresa != Crt.SimplesNacionalMei) + { + var result = TributacaoFcp.Calcula(); + Fcp = result.Valor; + ValorBcFcp = result.BaseCalculo; + } return TributacaoFcp; } @@ -539,28 +572,25 @@ private TributacaoFcp CalcularFcpStRetido() TributacaoFcpStRetido = new TributacaoFcpStRetido(_produto); FcpStRetido = decimal.Zero; ValorBcFcpStRetido = decimal.Zero; - - var result = TributacaoFcpStRetido.Calcula(); - - FcpStRetido = result.ValorFcpSt; - ValorBcFcpStRetido = result.BaseCalculoFcpSt; - + if (CrtEmpresa != Crt.SimplesNacionalMei) + { + var result = TributacaoFcpStRetido.Calcula(); + FcpStRetido = result.ValorFcpSt; + ValorBcFcpStRetido = result.BaseCalculoFcpSt; + } return TributacaoFcp; } private TributacaoDifal CalcularDifal() { - var cstCson = (Crt.RegimeNormal == CrtEmpresa ? _produto.Cst.GetValue() : _produto.Csosn.GetValue()); + var cstCson = CrtEmpresa == Crt.SimplesNacionalExecesso || CrtEmpresa == Crt.RegimeNormal ? _produto.Cst.GetValue() : _produto.Csosn.GetValue(); Difal = new TributacaoDifal(_produto, TipoDesconto); ValorBcDifal = decimal.Zero; ValorDifal = decimal.Zero; ValorIcmsOrigem = decimal.Zero; ValorIcmsDestino = decimal.Zero; - - if (Operacao == TipoOperacao.OperacaoInterestadual - && CstGeraDifal(cstCson) - && _produto.PercentualDifalInterna != 0 - && _produto.PercentualDifalInterestadual != 0) + if (CrtEmpresa != Crt.SimplesNacionalMei && Operacao == TipoOperacao.OperacaoInterestadual && CstGeraDifal(cstCson) + && _produto.PercentualDifalInterna != 0 && _produto.PercentualDifalInterestadual != 0) { var result = Difal.Calcula(); ValorBcDifal = result.BaseCalculo; @@ -573,19 +603,25 @@ private TributacaoDifal CalcularDifal() private TributacaoIbpt CalcularIbpt() { - Ibpt = new TributacaoIbpt(_produto,_produto); - var result = Ibpt.Calcula(); - ValorTributacaoEstadual = result.TributacaoEstadual; - ValorTributacaoFederal = result.TributacaoFederal; - ValorTributacaoFederalImportados = result.TributacaoFederalImportados; - ValorTributacaoMunicipal = result.TributacaoMunicipal; - ValorTotalTributos = result.ValorTotalTributos; + Ibpt = new TributacaoIbpt(_produto, _produto); + ValorTributacaoEstadual = decimal.Zero; + ValorTributacaoFederal = decimal.Zero; + ValorTributacaoFederalImportados = decimal.Zero; + ValorTributacaoMunicipal = decimal.Zero; + ValorTotalTributos = decimal.Zero; + if (CrtEmpresa != Crt.SimplesNacionalMei) + { + var result = Ibpt.Calcula(); + ValorTributacaoEstadual = result.TributacaoEstadual; + ValorTributacaoFederal = result.TributacaoFederal; + ValorTributacaoFederalImportados = result.TributacaoFederalImportados; + ValorTributacaoMunicipal = result.TributacaoMunicipal; + ValorTotalTributos = result.ValorTotalTributos; + } return Ibpt; } private bool CstGeraDifal(int cst) - => cst == 0 || cst == 20 || cst == 40 || cst == 41 || cst == 60 || cst ==102 || cst == 103 || cst == 400 || cst == 500 ; - - + => cst == 0 || cst == 20 || cst == 40 || cst == 41 || cst == 60 || cst == 102 || cst == 103 || cst == 400 || cst == 500; } } \ No newline at end of file diff --git a/src/TestesUnitarios/Csosn/Csosn500Test.cs b/src/TestesUnitarios/Csosn/Csosn500Test.cs index edc7677..f15efc9 100644 --- a/src/TestesUnitarios/Csosn/Csosn500Test.cs +++ b/src/TestesUnitarios/Csosn/Csosn500Test.cs @@ -12,6 +12,7 @@ public void TestaCalculoICMSEfetivo() { var produto = new Produto { + CalcularIcmsEfetivoeRetencaoParaSt = true, QuantidadeProduto = 1.000m, ValorProduto = 1000.00m, PercentualIcmsEfetivo = 20.00m, @@ -19,7 +20,6 @@ public void TestaCalculoICMSEfetivo() }; var csosn500 = new Csosn500(); - csosn500.Calcula(produto); Assert.Equal(800.00m, csosn500.ValorBcIcmsEfetivo); diff --git a/src/TestesUnitarios/Cst/Cst60Test.cs b/src/TestesUnitarios/Cst/Cst60Test.cs index 7c23cc3..deb9af8 100644 --- a/src/TestesUnitarios/Cst/Cst60Test.cs +++ b/src/TestesUnitarios/Cst/Cst60Test.cs @@ -12,6 +12,7 @@ public void CalculaCst60() { var produto = new Produto { + CalcularIcmsEfetivoeRetencaoParaSt = true, Documento = Documento.NFe, QuantidadeProduto = 1.000m, ValorProduto = 1000.00m, @@ -30,6 +31,7 @@ public void CalculaCST60_CTe() { var produtoFrete = new Produto { + CalcularIcmsEfetivoeRetencaoParaSt = true, Documento = Documento.CTe, QuantidadeProduto = 1.000m, ValorProduto = 1000.00m, @@ -50,6 +52,7 @@ public void CalculaCST60_ICMSEfetivo() { var produto = new Produto { + CalcularIcmsEfetivoeRetencaoParaSt = true, QuantidadeProduto = 1.000m, ValorProduto = 1000.00m, PercentualIcmsEfetivo = 20.00m, @@ -57,7 +60,6 @@ public void CalculaCST60_ICMSEfetivo() }; var cst60 = new Cst60(); - cst60.Calcula(produto); Assert.Equal(800.00m, cst60.ValorBcIcmsEfetivo); diff --git a/src/TestesUnitarios/Entidade/Produto.cs b/src/TestesUnitarios/Entidade/Produto.cs index 54568de..8f99019 100644 --- a/src/TestesUnitarios/Entidade/Produto.cs +++ b/src/TestesUnitarios/Entidade/Produto.cs @@ -63,6 +63,7 @@ public Produto() public decimal PercentualIcmsMonofasicoDiferido { get; set; } public decimal QuantidadeBaseCalculoIcmsMonofasicoRetidoAnteriormente { get; set; } public decimal AliquotaAdRemIcmsRetidoAnteriormente { get; set; } + public bool CalcularIcmsEfetivoeRetencaoParaSt { get; set; } public decimal PercentualIcmsEfetivo { get; set; } public decimal PercentualReducaoIcmsEfetivo { get; set; } }