diff --git a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIcms.cs b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIcms.cs index d59af30..d3b51c7 100644 --- a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIcms.cs +++ b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIcms.cs @@ -36,26 +36,21 @@ public CalculaBaseCalculoIcms(ITributavel tributavel, TipoDesconto tipoDesconto) public decimal CalculaBaseCalculo() { - var baseCalculo = CalculaBaseDeCalculo() + _tributavel.ValorIpi; - + var baseCalculo = CalculaBaseDeCalculo() + (_tributavel.IsAtivoImobilizadoOuUsoeConsumo ? _tributavel.ValorIpi : 0m); 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/CalculaBaseCalculoIcmsEfetivo.cs b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIcmsEfetivo.cs index 6e36cf4..eb267ae 100644 --- a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIcmsEfetivo.cs +++ b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculaBaseCalculoIcmsEfetivo.cs @@ -36,26 +36,21 @@ public CalculaBaseCalculoIcmsEfetivo(ITributavel tributavel, TipoDesconto tipoDe public decimal CalculaBaseCalculo() { - var baseCalculo = _tributavel.PercentualIcmsEfetivo > 0m ? CalculaBaseDeCalculo() + _tributavel.ValorIpi : 0m; - + var baseCalculo = _tributavel.PercentualIcmsEfetivo > 0m ? CalculaBaseDeCalculo() + (_tributavel.IsAtivoImobilizadoOuUsoeConsumo ? _tributavel.ValorIpi : 0m) : 0m; return _tipoDesconto == TipoDesconto.Condincional ? CalculaIcmsComDescontoCondicional(baseCalculo) : CalculaIcmsComDescontoIncondicional(baseCalculo); } private decimal CalculaIcmsComDescontoIncondicional(decimal baseCalculoInicial) { var baseCalculo = baseCalculoInicial - _tributavel.Desconto; - - baseCalculo = baseCalculo - baseCalculo * _tributavel.PercentualReducaoIcmsEfetivo / 100; - + baseCalculo -= baseCalculo * _tributavel.PercentualReducaoIcmsEfetivo / 100; return baseCalculo; } private decimal CalculaIcmsComDescontoCondicional(decimal baseCalculoInicial) { var baseCalulo = baseCalculoInicial + _tributavel.Desconto; - - baseCalulo = baseCalulo - baseCalulo * _tributavel.PercentualReducaoIcmsEfetivo / 100; - + baseCalulo -= baseCalulo * _tributavel.PercentualReducaoIcmsEfetivo / 100; return baseCalulo; } } diff --git a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculoBaseIcmsSt.cs b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculoBaseIcmsSt.cs index 262ed94..db33d51 100644 --- a/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculoBaseIcmsSt.cs +++ b/src/MotorTributarioNet/Impostos/CalulosDeBC/CalculoBaseIcmsSt.cs @@ -34,12 +34,11 @@ public CalculoBaseIcmsSt(ITributavel tributavel, TipoDesconto tipoDesconto) : ba _tipoDesconto = tipoDesconto; } - + public decimal CalculaBaseCalculo() { - var baseCalculo = CalculaBaseDeCalculo() + _tributavel.ValorIpi; - baseCalculo = baseCalculo - (baseCalculo * _tributavel.PercentualReducao / 100); - var baseCalculoSt = CalculaBaseCalculoST(baseCalculo); + var baseCalculo = CalculaBaseDeCalculo(); + var baseCalculoSt = CalculaBaseCalculoST(baseCalculo + _tributavel.ValorIpi); return baseCalculoSt; } @@ -47,29 +46,21 @@ public decimal CalculaBaseCalculo() public decimal CalculaBaseCalculoST(decimal baseCalculoIcms) { var baseCalculoSt = _tipoDesconto == TipoDesconto.Condincional ? CalculaIcmsComDescontoCondicional(baseCalculoIcms) : CalculaIcmsComDescontoIncondicional(baseCalculoIcms); - - baseCalculoSt = baseCalculoSt * (1.00m + _tributavel.PercentualMva / 100.00m); - + baseCalculoSt *= (1.00m + _tributavel.PercentualMva / 100.00m); return baseCalculoSt; } - - private decimal CalculaIcmsComDescontoIncondicional(decimal baseCalculoInicial) { var baseCalculo = baseCalculoInicial - _tributavel.Desconto; - - baseCalculo = baseCalculo - baseCalculo * _tributavel.PercentualReducaoSt / 100; - + baseCalculo -= baseCalculo * _tributavel.PercentualReducaoSt / 100; return baseCalculo; } private decimal CalculaIcmsComDescontoCondicional(decimal baseCalculoInicial) { var baseCalulo = baseCalculoInicial + _tributavel.Desconto; - - baseCalulo = baseCalulo - baseCalulo * _tributavel.PercentualReducaoSt / 100; - + baseCalulo -= baseCalulo * _tributavel.PercentualReducaoSt / 100; return baseCalulo; } } diff --git a/src/MotorTributarioNet/Impostos/Csosns/Csosn101.cs b/src/MotorTributarioNet/Impostos/Csosns/Csosn101.cs index 628ad91..f8d6ea4 100644 --- a/src/MotorTributarioNet/Impostos/Csosns/Csosn101.cs +++ b/src/MotorTributarioNet/Impostos/Csosns/Csosn101.cs @@ -26,7 +26,7 @@ namespace MotorTributarioNet.Impostos.Csosns { public class Csosn101 : CsosnBase { - public Csosn101(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional,TipoDesconto tipoDesconto = TipoDesconto.Incondicional) : base(origemMercadoria, tipoDesconto) + public Csosn101(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, TipoDesconto tipoDesconto = TipoDesconto.Incondicional) : base(origemMercadoria, tipoDesconto) { Csosn = Csosn.Csosn101; } @@ -37,10 +37,14 @@ public Csosn101(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional,Ti public override void Calcula(ITributavel tributavel) { - var resultadoCalculoIcmsCredito = new FacadeCalculadoraTributacao(tributavel,TipoDesconto).CalculaIcmsCredito(); + decimal percentualReducao = tributavel.PercentualReducao; + tributavel.PercentualReducao = 0m; + var resultadoCalculoIcmsCredito = new FacadeCalculadoraTributacao(tributavel, TipoDesconto).CalculaIcmsCredito(); PercentualCredito = tributavel.PercentualCredito; ValorCredito = resultadoCalculoIcmsCredito.Valor; + + tributavel.PercentualReducao = percentualReducao; } } } \ No newline at end of file diff --git a/src/MotorTributarioNet/Impostos/Csosns/Csosn201.cs b/src/MotorTributarioNet/Impostos/Csosns/Csosn201.cs index 446f8db..f0ac119 100644 --- a/src/MotorTributarioNet/Impostos/Csosns/Csosn201.cs +++ b/src/MotorTributarioNet/Impostos/Csosns/Csosn201.cs @@ -47,7 +47,7 @@ public override void Calcula(ITributavel tributavel) PercentualReducaoSt = tributavel.PercentualReducaoSt; PercentualIcmsSt = tributavel.PercentualIcmsSt; - var facade = new FacadeCalculadoraTributacao(tributavel,TipoDesconto); + var facade = new FacadeCalculadoraTributacao(tributavel, TipoDesconto); tributavel.ValorIpi = facade.CalculaIpi().Valor; diff --git a/src/MotorTributarioNet/Impostos/Csosns/Csosn202.cs b/src/MotorTributarioNet/Impostos/Csosns/Csosn202.cs index 9b359ed..b8153ed 100644 --- a/src/MotorTributarioNet/Impostos/Csosns/Csosn202.cs +++ b/src/MotorTributarioNet/Impostos/Csosns/Csosn202.cs @@ -45,7 +45,7 @@ public override void Calcula(ITributavel tributavel) PercentualReducaoSt = tributavel.PercentualReducaoSt; PercentualIcmsSt = tributavel.PercentualIcmsSt; - var facade = new FacadeCalculadoraTributacao(tributavel,TipoDesconto); + var facade = new FacadeCalculadoraTributacao(tributavel, TipoDesconto); tributavel.ValorIpi = facade.CalculaIpi().Valor; diff --git a/src/MotorTributarioNet/Impostos/Csosns/Csosn500.cs b/src/MotorTributarioNet/Impostos/Csosns/Csosn500.cs index 4986677..2e7ce3f 100644 --- a/src/MotorTributarioNet/Impostos/Csosns/Csosn500.cs +++ b/src/MotorTributarioNet/Impostos/Csosns/Csosn500.cs @@ -33,15 +33,16 @@ public Csosn500(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, T public decimal PercentualBcStRetido { get; set; } public decimal ValorBcStRetido { get; set; } - public decimal PercentualSt { get; set; } + public decimal PercentualSt { get; set; } public decimal ValorBcIcmsEfetivo { get; private set; } public decimal PercentualReducaoIcmsEfetivo { get; set; } public decimal PercentualIcmsEfetivo { get; private set; } public decimal ValorIcmsEfetivo { get; private set; } public decimal PercentualFcpStRetido { get; private set; } - public override void Calcula(ITributavel tributavel) { - PercentualSt = tributavel.PercentualIcmsSt + tributavel.PercentualFcpSt; + public override void Calcula(ITributavel tributavel) + { + PercentualSt = tributavel.PercentualIcmsSt + tributavel.PercentualFcpSt; var facade = new FacadeCalculadoraTributacao(tributavel, TipoDesconto); var resultadoCalculoIcmsEfetivo = facade.CalculaIcmsEfetivo(); @@ -53,5 +54,5 @@ public override void Calcula(ITributavel tributavel) { PercentualFcpStRetido = tributavel.PercentualFcpStRetido; } - } + } } \ No newline at end of file diff --git a/src/MotorTributarioNet/Impostos/Csosns/Csosn900.cs b/src/MotorTributarioNet/Impostos/Csosns/Csosn900.cs index c5a11a4..803293a 100644 --- a/src/MotorTributarioNet/Impostos/Csosns/Csosn900.cs +++ b/src/MotorTributarioNet/Impostos/Csosns/Csosn900.cs @@ -62,17 +62,21 @@ public Csosn900(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, T public override void Calcula(ITributavel tributavel) { CalculaIcms(tributavel); - CalculaIcmsSt(tributavel); + decimal percentualReducao = tributavel.PercentualReducao; + tributavel.PercentualReducao = 0m; + CalculaCredito(tributavel); + + tributavel.PercentualReducao = percentualReducao; } private void CalculaCredito(ITributavel tributavel) { PercentualCredito = tributavel.PercentualCredito; - var facade = new FacadeCalculadoraTributacao(tributavel,TipoDesconto); + var facade = new FacadeCalculadoraTributacao(tributavel, TipoDesconto); var resultadoCalculaCredito = facade.CalculaIcmsCredito(); ValorCredito = resultadoCalculaCredito.Valor; } @@ -83,7 +87,7 @@ private void CalculaIcmsSt(ITributavel tributavel) PercentualReducaoSt = tributavel.PercentualReducaoSt; PercentualIcmsSt = tributavel.PercentualIcmsSt; - var facade = new FacadeCalculadoraTributacao(tributavel,TipoDesconto); + var facade = new FacadeCalculadoraTributacao(tributavel, TipoDesconto); tributavel.ValorIpi = facade.CalculaIpi().Valor; @@ -98,7 +102,7 @@ private void CalculaIcms(ITributavel tributavel) PercentualReducaoIcmsBc = tributavel.PercentualReducao; PercentualIcms = tributavel.PercentualIcms; - var facade = new FacadeCalculadoraTributacao(tributavel,TipoDesconto); + var facade = new FacadeCalculadoraTributacao(tributavel, TipoDesconto); tributavel.ValorIpi = facade.CalculaIpi().Valor; diff --git a/src/MotorTributarioNet/Impostos/Csts/Cst10.cs b/src/MotorTributarioNet/Impostos/Csts/Cst10.cs index dc6c7f5..5a660ff 100644 --- a/src/MotorTributarioNet/Impostos/Csts/Cst10.cs +++ b/src/MotorTributarioNet/Impostos/Csts/Cst10.cs @@ -32,12 +32,12 @@ public class Cst10 : Cst00 public decimal ValorBcIcmsSt { get; private set; } public decimal PercentualIcmsSt { get; private set; } public decimal ValorIcmsSt { get; private set; } - public decimal ValorBcFcp { get; private set; } - public decimal ValorBcFcpSt { get; private set; } - public decimal PercentualFcpSt { get; private set; } - public decimal ValorFcpSt { get; private set; } + public decimal ValorBcFcp { get; private set; } + public decimal ValorBcFcpSt { get; private set; } + public decimal PercentualFcpSt { get; private set; } + public decimal ValorFcpSt { get; private set; } - public Cst10(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, TipoDesconto tipoDesconto = TipoDesconto.Incondicional) : base(origemMercadoria, tipoDesconto) + public Cst10(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, TipoDesconto tipoDesconto = TipoDesconto.Incondicional) : base(origemMercadoria, tipoDesconto) { Cst = Cst.Cst10; ModalidadeDeterminacaoBcIcmsSt = ModalidadeDeterminacaoBcIcmsSt.MargemValorAgregado; @@ -48,23 +48,23 @@ public override void Calcula(ITributavel tributavel) base.Calcula(tributavel); PercentualMva = tributavel.PercentualMva; - PercentualReducaoSt = tributavel.PercentualReducaoSt; PercentualIcmsSt = tributavel.PercentualIcmsSt; - PercentualFcpSt = tributavel.PercentualFcpSt; + PercentualFcpSt = tributavel.PercentualFcpSt; + PercentualReducaoSt = tributavel.PercentualReducaoSt; FacadeCalculadoraTributacao facadeCalculadoraTributacao = new FacadeCalculadoraTributacao(tributavel, TipoDesconto); tributavel.ValorIpi = facadeCalculadoraTributacao.CalculaIpi().Valor; IResultadoCalculoIcmsSt resultadoCalculoIcmsSt = facadeCalculadoraTributacao.CalculaIcmsSt(); - IResultadoCalculoFcpSt resultadoCalculoFcpSt = facadeCalculadoraTributacao.CalculaFcpSt(); + IResultadoCalculoFcpSt resultadoCalculoFcpSt = facadeCalculadoraTributacao.CalculaFcpSt(); ValorBcIcmsSt = resultadoCalculoIcmsSt.BaseCalculoIcmsSt; ValorIcmsSt = resultadoCalculoIcmsSt.ValorIcmsSt; - ValorBcFcp = facadeCalculadoraTributacao.CalculaFcp().BaseCalculo; - ValorBcFcpSt = resultadoCalculoFcpSt.BaseCalculoFcpSt; - ValorFcpSt = resultadoCalculoFcpSt.ValorFcpSt; + ValorBcFcp = facadeCalculadoraTributacao.CalculaFcp().BaseCalculo; + ValorBcFcpSt = resultadoCalculoFcpSt.BaseCalculoFcpSt; + ValorFcpSt = resultadoCalculoFcpSt.ValorFcpSt; } } } diff --git a/src/MotorTributarioNet/Impostos/ITributavel.cs b/src/MotorTributarioNet/Impostos/ITributavel.cs index ae76efe..36230dd 100644 --- a/src/MotorTributarioNet/Impostos/ITributavel.cs +++ b/src/MotorTributarioNet/Impostos/ITributavel.cs @@ -30,6 +30,7 @@ public interface ITributavel CstPisCofins CstPisCofins { get; set; } CstIpi CstIpi { get; set; } bool IsServico { get; set; } + bool IsAtivoImobilizadoOuUsoeConsumo { get; set; } decimal ValorProduto { get; set; } decimal Frete { get; set; } decimal Seguro { get; set; } diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/DadosMensagemDifal.cs b/src/MotorTributarioNet/Impostos/Implementacoes/DadosMensagemDifal.cs index 1c15afa..dd0c619 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/DadosMensagemDifal.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/DadosMensagemDifal.cs @@ -18,6 +18,8 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class DadosMensagemDifal : IDadosMensagemDifal @@ -28,9 +30,9 @@ public class DadosMensagemDifal : IDadosMensagemDifal public DadosMensagemDifal(decimal fcp, decimal valorIcmsDestino, decimal valorIcmsOrigem) { - Fcp = fcp; - ValorIcmsDestino = valorIcmsDestino; - ValorIcmsOrigem = valorIcmsOrigem; + Fcp = Math.Round(fcp, 2); + ValorIcmsDestino = Math.Round(valorIcmsDestino, 2); + ValorIcmsOrigem = Math.Round(valorIcmsOrigem, 2); } } } \ No newline at end of file diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoCofins.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoCofins.cs index f519a40..048b7af 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoCofins.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoCofins.cs @@ -18,14 +18,16 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoCofins : IResultadoCalculoCofins { public ResultadoCalculoCofins(decimal baseCalculo, decimal valor) { - BaseCalculo = baseCalculo; - Valor = valor; + BaseCalculo = Math.Round(baseCalculo, 2); + Valor = Math.Round(valor, 2); } public decimal BaseCalculo { get; } diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoCredito.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoCredito.cs index cca7c2c..b63fd26 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoCredito.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoCredito.cs @@ -18,14 +18,17 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE + +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoCredito : IResultadoCalculoCredito { public ResultadoCalculoCredito(decimal baseCalculo, decimal valor) { - BaseCalculo = baseCalculo; - Valor = valor; + BaseCalculo = Math.Round(baseCalculo, 2); + Valor = Math.Round(valor, 2); } public decimal BaseCalculo { get; } diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoDifal.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoDifal.cs index 57e3e11..061d3b8 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoDifal.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoDifal.cs @@ -18,6 +18,8 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoDifal : IResultadoCalculoDifal @@ -30,11 +32,11 @@ public class ResultadoCalculoDifal : IResultadoCalculoDifal public ResultadoCalculoDifal(decimal baseCalculo, decimal difal, decimal fcp, decimal valorIcmsDestino, decimal valorIcmsOrigem) { - BaseCalculo = baseCalculo; - Difal = difal; - Fcp = fcp; - ValorIcmsDestino = valorIcmsDestino; - ValorIcmsOrigem = valorIcmsOrigem; + BaseCalculo = Math.Round(baseCalculo, 2); + Difal = Math.Round(difal, 2); + Fcp = Math.Round(fcp, 2); + ValorIcmsDestino = Math.Round(valorIcmsDestino, 2); + ValorIcmsOrigem = Math.Round(valorIcmsOrigem, 2); } public string GetObservacao(IDadosMensagemDifal dadosMensagemDifal) diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcp.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcp.cs index af3b4d1..8ca3365 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcp.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcp.cs @@ -18,14 +18,16 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoFcp : IResultadoCalculoFcp { public ResultadoCalculoFcp(decimal baseCalculo, decimal fcp) { - BaseCalculo = baseCalculo; - Valor = fcp; + BaseCalculo = Math.Round(baseCalculo, 2); + Valor = Math.Round(fcp, 2); } public decimal BaseCalculo { get; } diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcpSt.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcpSt.cs index ade26f3..64f9691 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcpSt.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcpSt.cs @@ -18,14 +18,16 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoFcpSt : IResultadoCalculoFcpSt { public ResultadoCalculoFcpSt(decimal baseCalculoFcpSt, decimal valorFcpSt) { - BaseCalculoFcpSt = baseCalculoFcpSt; - ValorFcpSt = valorFcpSt; + BaseCalculoFcpSt = Math.Round(baseCalculoFcpSt, 2); + ValorFcpSt = Math.Round(valorFcpSt, 2); } public decimal BaseCalculoFcpSt { get; } diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcpStRetido.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcpStRetido.cs index 504f973..f8770fd 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcpStRetido.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcpStRetido.cs @@ -18,14 +18,16 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoFcpStRetido : IResultadoCalculoFcpStRetido { public ResultadoCalculoFcpStRetido(decimal baseCalculoFcpStRetido, decimal valorFcpStRetido) { - BaseCalculoFcpStRetido = baseCalculoFcpStRetido; - ValorFcpStRetido = valorFcpStRetido; + BaseCalculoFcpStRetido = Math.Round(baseCalculoFcpStRetido, 2); + ValorFcpStRetido = Math.Round(valorFcpStRetido, 2); } public decimal BaseCalculoFcpStRetido { get; } diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIbpt.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIbpt.cs index b72b5a8..6bdcefd 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIbpt.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIbpt.cs @@ -17,6 +17,8 @@ // no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoIbpt : IResultadoCalculoIbpt @@ -24,11 +26,11 @@ public class ResultadoCalculoIbpt : IResultadoCalculoIbpt public ResultadoCalculoIbpt(decimal impostoAproximadoFederal, decimal impostoAproximadoMunicipio, decimal impostoAproximadoEstadual, decimal impostoAproximadoImportados, decimal baseCalculo) { - TributacaoFederal = impostoAproximadoFederal; - TributacaoEstadual = impostoAproximadoEstadual; - TributacaoMunicipal = impostoAproximadoMunicipio; - TributacaoFederalImportados = impostoAproximadoImportados; - BaseCalculo = baseCalculo; + TributacaoFederal = Math.Round(impostoAproximadoFederal, 2); + TributacaoEstadual = Math.Round(impostoAproximadoEstadual, 2); + TributacaoMunicipal = Math.Round(impostoAproximadoMunicipio, 2); + TributacaoFederalImportados = Math.Round(impostoAproximadoImportados, 2); + BaseCalculo = Math.Round(baseCalculo, 2); ValorTotalTributos = TributacaoFederal + TributacaoFederalImportados + TributacaoEstadual + TributacaoMunicipal; } diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcms.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcms.cs index 1337016..5faddbe 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcms.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcms.cs @@ -18,14 +18,16 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoIcms : IResultadoCalculoIcms { public ResultadoCalculoIcms(decimal baseCalculo, decimal valor) { - BaseCalculo = baseCalculo; - Valor = valor; + BaseCalculo = Math.Round(baseCalculo, 2); + Valor = Math.Round(valor, 2); } public decimal BaseCalculo { get; } diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsDesonerado.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsDesonerado.cs index 4b06c7c..3b8cb3d 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsDesonerado.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsDesonerado.cs @@ -18,14 +18,16 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoIcmsDesonerado : IResultadoCalculoIcmsDesonerado { public ResultadoCalculoIcmsDesonerado(decimal baseCalculo, decimal valor) { - BaseCalculo = baseCalculo; - Valor = valor; + BaseCalculo = Math.Round(baseCalculo, 2); + Valor = Math.Round(valor, 2); } public decimal BaseCalculo { get; } diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsEfetivo.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsEfetivo.cs index b2621ab..954d4ad 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsEfetivo.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsEfetivo.cs @@ -18,14 +18,16 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoIcmsEfetivo : IResultadoCalculoIcmsEfetivo { public ResultadoCalculoIcmsEfetivo(decimal baseCalculo, decimal valor) { - BaseCalculo = baseCalculo; - Valor = valor; + BaseCalculo = Math.Round(baseCalculo, 2); + Valor = Math.Round(valor, 2); } public decimal BaseCalculo { get; } diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsMonofasico.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsMonofasico.cs index 8812631..43ce088 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsMonofasico.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsMonofasico.cs @@ -18,6 +18,8 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoIcmsMonofasico : IResultadoCalculoIcmsMonofasico @@ -32,13 +34,13 @@ public ResultadoCalculoIcmsMonofasico(decimal quantidadeBaseCalculoIcmsMonofasic decimal valorIcmsMonofasicoRetidoAnteriormente) { QuantidadeBaseCalculoIcmsMonofasico = quantidadeBaseCalculoIcmsMonofasico; - ValorIcmsMonofasicoProprio = valorIcmsMonofasicoProprio; + ValorIcmsMonofasicoProprio = Math.Round(valorIcmsMonofasicoProprio, 2); QuantidadeBaseCalculoIcmsMonofasicoRetencao = quantidadeBaseCalculoIcmsMonofasicoRetencao; - ValorIcmsMonofasicoRetencao = valorIcmsMonofasicoRetencao; - ValorIcmsMonofasicoOperacao = valorIcmsMonofasicoOperacao; - ValorIcmsMonofasicoDiferido = valorIcmsMonofasicoDiferido; + ValorIcmsMonofasicoRetencao = Math.Round(valorIcmsMonofasicoRetencao, 2); + ValorIcmsMonofasicoOperacao = Math.Round(valorIcmsMonofasicoOperacao, 2); + ValorIcmsMonofasicoDiferido = Math.Round(valorIcmsMonofasicoDiferido, 2); QuantidadeBaseCalculoIcmsMonofasicoRetidoAnteriormente = quantidadeBaseCalculoIcmsMonofasicoRetidoAnteriormente; - ValorIcmsMonofasicoRetidoAnteriormente = valorIcmsMonofasicoRetidoAnteriormente; + ValorIcmsMonofasicoRetidoAnteriormente = Math.Round(valorIcmsMonofasicoRetidoAnteriormente, 2); } diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsSt.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsSt.cs index 248c26a..9180e93 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsSt.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIcmsSt.cs @@ -18,6 +18,8 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoIcmsSt : IResultadoCalculoIcmsSt @@ -29,10 +31,10 @@ public class ResultadoCalculoIcmsSt : IResultadoCalculoIcmsSt public ResultadoCalculoIcmsSt(decimal baseCalculoOperacaoPropria, decimal valorIcmsProprio, decimal baseCalculoIcmsSt, decimal valorIcmsSt) { - BaseCalculoOperacaoPropria = baseCalculoOperacaoPropria; - ValorIcmsProprio = valorIcmsProprio; - BaseCalculoIcmsSt = baseCalculoIcmsSt; - ValorIcmsSt = valorIcmsSt; + BaseCalculoOperacaoPropria = Math.Round(baseCalculoOperacaoPropria, 2); + ValorIcmsProprio = Math.Round(valorIcmsProprio, 2); + BaseCalculoIcmsSt = Math.Round(baseCalculoIcmsSt, 2); + ValorIcmsSt = Math.Round(valorIcmsSt, 2); } } } \ No newline at end of file diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIpi.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIpi.cs index 87639fe..0f811e8 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIpi.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIpi.cs @@ -18,14 +18,16 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoIpi : IResultadoCalculoIpi { public ResultadoCalculoIpi(decimal baseCalculo, decimal valor) { - BaseCalculo = baseCalculo; - Valor = valor; + BaseCalculo = Math.Round(baseCalculo, 2); + Valor = Math.Round(valor, 2); } public decimal BaseCalculo { get; } diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIssqn.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIssqn.cs index 809d3b7..93a4679 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIssqn.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoIssqn.cs @@ -18,27 +18,29 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoIssqn : IResultadoCalculoIssqn { public ResultadoCalculoIssqn(decimal baseCalculo, decimal valor) { - BaseCalculo = baseCalculo; - Valor = valor; + BaseCalculo = Math.Round(baseCalculo, 2); + Valor = Math.Round(valor, 2); } public ResultadoCalculoIssqn(decimal baseCalculo, decimal valor, decimal baseCalculoInss, decimal baseCalculoIrrf, decimal valorRetPis, decimal valorRetCofins, decimal valorRetCsll, decimal valorRetIrrf, decimal valorRetInss) { - BaseCalculo = baseCalculo; - Valor = valor; - BaseCalculoInss = baseCalculoInss; - BaseCalculoIrrf = baseCalculoIrrf; - ValorRetPis = valorRetPis; - ValorRetCofins = valorRetCofins; - ValorRetCsll = valorRetCsll; - ValorRetIrrf = valorRetIrrf; - ValorRetInss = valorRetInss; + BaseCalculo = Math.Round(baseCalculo, 2); + Valor = Math.Round(valor, 2); + BaseCalculoInss = Math.Round(baseCalculoInss, 2); + BaseCalculoIrrf = Math.Round(baseCalculoIrrf, 2); + ValorRetPis = Math.Round(valorRetPis, 2); + ValorRetCofins = Math.Round(valorRetCofins, 2); + ValorRetCsll = Math.Round(valorRetCsll, 2); + ValorRetIrrf = Math.Round(valorRetIrrf, 2); + ValorRetInss = Math.Round(valorRetInss, 2); } public decimal BaseCalculo { get; } diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoPis.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoPis.cs index b807570..62b618f 100644 --- a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoPis.cs +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoPis.cs @@ -18,14 +18,16 @@ // Você também pode obter uma copia da licença em: // https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE +using System; + namespace MotorTributarioNet.Impostos.Implementacoes { public class ResultadoCalculoPis : IResultadoCalculoPis { public ResultadoCalculoPis(decimal baseCalculo, decimal valor) { - BaseCalculo = baseCalculo; - Valor = valor; + BaseCalculo = Math.Round(baseCalculo, 2); + Valor = Math.Round(valor, 2); } public decimal BaseCalculo { get; } diff --git a/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoCofins.cs b/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoCofins.cs index dbc2b7c..45b2161 100644 --- a/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoCofins.cs +++ b/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoCofins.cs @@ -43,7 +43,7 @@ public IResultadoCalculoCofins Calcula() private IResultadoCalculoCofins CalculaCofins() { - var baseCalculo = _calculaBaseCalculoCofins.CalculaBaseCalculo() + _tributavel.ValorIpi; + var baseCalculo = _calculaBaseCalculoCofins.CalculaBaseCalculo(); // + _tributavel.ValorIpi; var valorCofins = CalculaCofins(baseCalculo); diff --git a/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoIcms.cs b/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoIcms.cs index 1567112..179c1fd 100644 --- a/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoIcms.cs +++ b/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoIcms.cs @@ -52,7 +52,7 @@ private IResultadoCalculoIcms CalculaIcms() private decimal CalculaIcms(decimal baseCalculo) { - return baseCalculo*_tributavel.PercentualIcms / 100; + return baseCalculo * _tributavel.PercentualIcms / 100; } } } \ No newline at end of file diff --git a/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoIcmsSt.cs b/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoIcmsSt.cs index 177896c..65ec23d 100644 --- a/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoIcmsSt.cs +++ b/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoIcmsSt.cs @@ -47,11 +47,8 @@ private IResultadoCalculoIcmsSt CalculaIcmsSt() { var baseCalculoOperacaoPropria = _calculaBaseCalculoIcmsSemIpi.CalculaBaseCalculo(); var valorIcmsProprio = CalculaIcmsSt(baseCalculoOperacaoPropria); - var baseCalculoIcmsSt = _baseIcmsSt.CalculaBaseCalculo(); - var valorIcmsSt = (baseCalculoIcmsSt * (_tributavel.PercentualIcmsSt / 100)) - valorIcmsProprio; - return new ResultadoCalculoIcmsSt(baseCalculoOperacaoPropria, valorIcmsProprio, baseCalculoIcmsSt, valorIcmsSt); } diff --git a/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoPis.cs b/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoPis.cs index 9fa85ab..55e251b 100644 --- a/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoPis.cs +++ b/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoPis.cs @@ -43,7 +43,7 @@ public IResultadoCalculoPis Calcula() private IResultadoCalculoPis CalculaPis() { - var baseCalculo = _calculaBaseCalculoPis.CalculaBaseCalculo() + _tributavel.ValorIpi; + var baseCalculo = _calculaBaseCalculoPis.CalculaBaseCalculo(); // + _tributavel.ValorIpi; var valorPis = CalculaPis(baseCalculo); diff --git a/src/TestesUnitarios/CalculoCofinsTest.cs b/src/TestesUnitarios/CalculoCofinsTest.cs index da22d6e..55a6f2f 100644 --- a/src/TestesUnitarios/CalculoCofinsTest.cs +++ b/src/TestesUnitarios/CalculoCofinsTest.cs @@ -141,7 +141,7 @@ public void CalculoCofinsSemIncidenciaICMSNaBaseDeCalculo() var resultado = tributacao.CalculaCofins(); Assert.Equal(13.20m, resultado.BaseCalculo); - Assert.Equal(1.0032m, resultado.Valor); + Assert.Equal(1.00m, resultado.Valor); } [Fact] @@ -164,8 +164,8 @@ public void CalculoCofinsSemIncidenciaICMSNaBaseDeCalculoComFreteOutrasDespesasD var tributacao = new FacadeCalculadoraTributacao(produto, TipoDesconto.Incondicional); var resultado = tributacao.CalculaCofins(); - Assert.Equal(14.8104m, resultado.BaseCalculo); - Assert.Equal(1.1255904m, resultado.Valor); + Assert.Equal(14.81m, resultado.BaseCalculo); + Assert.Equal(1.13m, resultado.Valor); } [Fact] @@ -183,8 +183,8 @@ public void CalculoCofinsComReducaoDeBaseDeCalculo() var tributacao = new FacadeCalculadoraTributacao(produto, TipoDesconto.Incondicional); var resultado = tributacao.CalculaCofins(); - Assert.Equal(22.32204m, resultado.BaseCalculo); - Assert.Equal(1.69647504m, resultado.Valor); + Assert.Equal(22.32m, resultado.BaseCalculo); + Assert.Equal(1.70m, resultado.Valor); } } } \ No newline at end of file diff --git a/src/TestesUnitarios/CalculoDifalFcpTest.cs b/src/TestesUnitarios/CalculoDifalFcpTest.cs index 93195b0..2a7b0e2 100644 --- a/src/TestesUnitarios/CalculoDifalFcpTest.cs +++ b/src/TestesUnitarios/CalculoDifalFcpTest.cs @@ -11,13 +11,14 @@ public class CalculoDifalFcpTest { [Fact] - public void CalculaDifalJuntoComFcp() + public void CalculaDifalJuntoComFcp_AtivoImobilizado() { Thread.CurrentThread.CurrentUICulture = new CultureInfo("pt-BR"); Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR"); var produto = new Produto { + IsAtivoImobilizadoOuUsoeConsumo = true, ValorProduto = 845.00m, QuantidadeProduto = 1.000m, Frete = 35.00m, diff --git a/src/TestesUnitarios/CalculoPisTest.cs b/src/TestesUnitarios/CalculoPisTest.cs index 840a5de..e126290 100644 --- a/src/TestesUnitarios/CalculoPisTest.cs +++ b/src/TestesUnitarios/CalculoPisTest.cs @@ -141,7 +141,7 @@ public void CalculoPisSemIncidenciaICMSNaBaseDeCalculo() var resultado = tributacao.CalculaPis(); Assert.Equal(13.20m, resultado.BaseCalculo); - Assert.Equal(0.2178m, resultado.Valor); + Assert.Equal(0.22m, resultado.Valor); } [Fact] @@ -164,8 +164,8 @@ public void CalculoPisSemIncidenciaICMSNaBaseDeCalculoComFreteOutrasDespesasDesc var tributacao = new FacadeCalculadoraTributacao(produto, TipoDesconto.Incondicional); var resultado = tributacao.CalculaPis(); - Assert.Equal(14.8104m, resultado.BaseCalculo); - Assert.Equal(0.2443716m, resultado.Valor); + Assert.Equal(14.81m, resultado.BaseCalculo); + Assert.Equal(0.24m, resultado.Valor); } [Fact] @@ -183,8 +183,8 @@ public void CalculoPisComReducaoDeBaseDeCalculo() var tributacao = new FacadeCalculadoraTributacao(produto, TipoDesconto.Incondicional); var resultado = tributacao.CalculaPis(); - Assert.Equal(22.32204m, resultado.BaseCalculo); - Assert.Equal(0.36831366m, resultado.Valor); + Assert.Equal(22.32m, resultado.BaseCalculo); + Assert.Equal(0.37m, resultado.Valor); } } } \ No newline at end of file diff --git a/src/TestesUnitarios/Csosn/Csosn201Test.cs b/src/TestesUnitarios/Csosn/Csosn201Test.cs index 4da6047..bb53cac 100644 --- a/src/TestesUnitarios/Csosn/Csosn201Test.cs +++ b/src/TestesUnitarios/Csosn/Csosn201Test.cs @@ -49,17 +49,45 @@ public void TestaCsosn201ComDescontoCondicional() PercentualCredito = 5.00m }; - var csosn201 = new Csosn201(tipoDesconto:TipoDesconto.Condincional); + var csosn201 = new Csosn201(tipoDesconto: TipoDesconto.Condincional); csosn201.Calcula(produto); - Assert.Equal(18.00m, csosn201.PercentualIcmsSt); Assert.Equal(5.00m, csosn201.PercentualCredito); + Assert.Equal(18.00m, csosn201.PercentualIcmsSt); Assert.Equal(40.00m, csosn201.PercentualMva); - Assert.Equal(0.00m, csosn201.PercentualReducaoSt); Assert.Equal(3220.00m, csosn201.ValorBcIcmsSt); Assert.Equal(219.60m, csosn201.ValorIcmsSt); Assert.Equal(100.00m, csosn201.ValorCredito); } + + [Fact] + public void TestaCsosn201ComReducao() + { + var produto = new Produto + { + PercentualIcms = 18.00m, + PercentualReducao = 61.11m, + PercentualIcmsSt = 18.00m, + PercentualReducaoSt = 61.11m, + PercentualIpi = 15.00m, + ValorProduto = 2000.00m, + QuantidadeProduto = 1.000m, + PercentualMva = 40.00m, + PercentualCredito = 5.00m + }; + + var csosn201 = new Csosn201(); + + csosn201.Calcula(produto); + + Assert.Equal(18.00m, csosn201.PercentualIcmsSt); + Assert.Equal(5.00m, csosn201.PercentualCredito); + Assert.Equal(40.00m, csosn201.PercentualMva); + Assert.Equal(61.11m, csosn201.PercentualReducaoSt); + Assert.Equal(1252.26m, csosn201.ValorBcIcmsSt); + Assert.Equal(85.40m, csosn201.ValorIcmsSt); + Assert.Equal(100.00m, csosn201.ValorCredito); + } } } \ No newline at end of file diff --git a/src/TestesUnitarios/Csosn/Csosn202Test.cs b/src/TestesUnitarios/Csosn/Csosn202Test.cs index e7e00b6..65918bb 100644 --- a/src/TestesUnitarios/Csosn/Csosn202Test.cs +++ b/src/TestesUnitarios/Csosn/Csosn202Test.cs @@ -55,5 +55,31 @@ public void TestaCsosn202ComDescontoCondicional() Assert.Equal(3220.00m, csosn202.ValorBcIcmsSt); Assert.Equal(219.60m, csosn202.ValorIcmsSt); } + + [Fact] + public void TestaCsosn202ComReducao() + { + var produto = new Produto + { + PercentualIcms = 18.00m, + PercentualReducao = 61.11m, + PercentualIcmsSt = 18.00m, + PercentualReducaoSt = 61.11m, + PercentualIpi = 15.00m, + ValorProduto = 2000.00m, + QuantidadeProduto = 1.000m, + PercentualMva = 40.00m, + }; + + var csosn202 = new Csosn202(); + + csosn202.Calcula(produto); + + Assert.Equal(18.00m, csosn202.PercentualIcmsSt); + Assert.Equal(40.00m, csosn202.PercentualMvaSt); + Assert.Equal(61.11m, csosn202.PercentualReducaoSt); + Assert.Equal(1252.26m, csosn202.ValorBcIcmsSt); + Assert.Equal(85.40m, csosn202.ValorIcmsSt); + } } } \ No newline at end of file diff --git a/src/TestesUnitarios/Csosn/Csosn900Test.cs b/src/TestesUnitarios/Csosn/Csosn900Test.cs index 3dbf40a..71cd599 100644 --- a/src/TestesUnitarios/Csosn/Csosn900Test.cs +++ b/src/TestesUnitarios/Csosn/Csosn900Test.cs @@ -26,15 +26,15 @@ public void TestaCsosn900() csosn900.Calcula(produto); - Assert.Equal(391.00m, csosn900.ValorCredito); + Assert.Equal(340.00M, csosn900.ValorCredito); Assert.Equal(17.00m, csosn900.PercentualCredito); Assert.Equal(18.00m, csosn900.PercentualIcmsSt); Assert.Equal(40.00m, csosn900.PercentualMva); - Assert.Equal(0.00m, csosn900.PercentualReducaoSt); Assert.Equal(3220.00m, csosn900.ValorBcIcmsSt); Assert.Equal(219.60m, csosn900.ValorIcmsSt); - Assert.Equal(414.00m, csosn900.ValorIcms); - Assert.Equal(2300.00m, csosn900.ValorBcIcms); + Assert.Equal(2000.00m, csosn900.ValorBcIcms); + Assert.Equal(360.00m, csosn900.ValorIcms); + } [Fact] @@ -56,15 +56,16 @@ public void TestaCsosn900ComDescontoCondicional() csosn900.Calcula(produto); - Assert.Equal(391.00m, csosn900.ValorCredito); + Assert.Equal(340.00m, csosn900.ValorCredito); Assert.Equal(17.00m, csosn900.PercentualCredito); Assert.Equal(18.00m, csosn900.PercentualIcmsSt); Assert.Equal(40.00m, csosn900.PercentualMva); Assert.Equal(0.00m, csosn900.PercentualReducaoSt); Assert.Equal(3220.00m, csosn900.ValorBcIcmsSt); Assert.Equal(219.60m, csosn900.ValorIcmsSt); - Assert.Equal(414.00m, csosn900.ValorIcms); - Assert.Equal(2300.00m, csosn900.ValorBcIcms); + Assert.Equal(2000.00m, csosn900.ValorBcIcms); + Assert.Equal(360.00m, csosn900.ValorIcms); + } [Fact] @@ -86,15 +87,16 @@ public void TestaCsosn900ComReducaoSt() csosn900.Calcula(produto); - Assert.Equal(391.00m, csosn900.ValorCredito); + Assert.Equal(340.00m, csosn900.ValorCredito); Assert.Equal(17.00m, csosn900.PercentualCredito); Assert.Equal(18.00m, csosn900.PercentualIcmsSt); Assert.Equal(40.00m, csosn900.PercentualMva); Assert.Equal(10.00m, csosn900.PercentualReducaoSt); Assert.Equal(2898.00m, csosn900.ValorBcIcmsSt); Assert.Equal(161.64m, csosn900.ValorIcmsSt); - Assert.Equal(414.00m, csosn900.ValorIcms); - Assert.Equal(2300.00m, csosn900.ValorBcIcms); + Assert.Equal(2000.00m, csosn900.ValorBcIcms); + Assert.Equal(360.00m, csosn900.ValorIcms); + } [Fact] @@ -210,7 +212,7 @@ public void Testa_IcmsST_ComIPI_ComDesconto_ComMVA_ResultadoBaseCalculoST() csosn900.Calcula(produto); - Assert.Equal(61.19m, csosn900.ValorBcIcmsSt.Arredondar()); + Assert.Equal(61.18m, csosn900.ValorBcIcmsSt); } } } \ No newline at end of file diff --git a/src/TestesUnitarios/Cst/Cst10Test.cs b/src/TestesUnitarios/Cst/Cst10Test.cs index 085b6c8..6288b4b 100644 --- a/src/TestesUnitarios/Cst/Cst10Test.cs +++ b/src/TestesUnitarios/Cst/Cst10Test.cs @@ -11,27 +11,22 @@ public void CalculoCST10() { var produto = new Produto { - - PercentualIcms = 18.00m, - PercentualIcmsSt = 18.00m, ValorProduto = 100.00m, QuantidadeProduto = 1.000m, - PercentualMva = 50.00m, - PercentualReducaoSt = 10m - + PercentualIcms = 18.00m, + PercentualIcmsSt = 18.00m, + PercentualMva = 50.00m }; var cst = new Cst10(); cst.Calcula(produto); - Assert.Equal(100.00m, cst.ValorBcIcms); Assert.Equal(18.00m, cst.PercentualIcms); - Assert.Equal(50.00m, cst.PercentualMva); - Assert.Equal(10.00m, cst.PercentualReducaoSt); - Assert.Equal(135.00m, cst.ValorBcIcmsSt); Assert.Equal(18.00m, cst.PercentualIcmsSt); - Assert.Equal(6.30m, cst.ValorIcmsSt); - - + Assert.Equal(50.00m, cst.PercentualMva); + Assert.Equal(100.00m, cst.ValorBcIcms); + Assert.Equal(18.00m, cst.ValorIcms); + Assert.Equal(150.00m, cst.ValorBcIcmsSt); + Assert.Equal(9.00m, cst.ValorIcmsSt); } } -} +} \ No newline at end of file diff --git a/src/TestesUnitarios/Cst/Cst70Test.cs b/src/TestesUnitarios/Cst/Cst70Test.cs index 5eef604..f752c97 100644 --- a/src/TestesUnitarios/Cst/Cst70Test.cs +++ b/src/TestesUnitarios/Cst/Cst70Test.cs @@ -12,15 +12,13 @@ public void CalculoCst70() { var produto = new Produto { - PercentualIcms = 18.00m, PercentualIcmsSt = 18.00m, PercentualReducao = 10.00m, + PercentualReducaoSt = 10.00m, ValorProduto = 100.00m, QuantidadeProduto = 1.000m, - PercentualMva = 100.00m, - PercentualReducaoSt = 10m - + PercentualMva = 100.00m }; var cst = new Cst70(); @@ -33,9 +31,73 @@ public void CalculoCst70() Assert.Equal(ModalidadeDeterminacaoBcIcmsSt.MargemValorAgregado, cst.ModalidadeDeterminacaoBcIcmsSt); Assert.Equal(100.00m, cst.PercentualMva); Assert.Equal(10.00m, cst.PercentualReducaoSt); - Assert.Equal(162.00m, cst.ValorBcIcmsSt); + Assert.Equal(180.00m, cst.ValorBcIcmsSt); + Assert.Equal(18.00m, cst.PercentualIcmsSt); + Assert.Equal(16.20m, cst.ValorIcmsSt); + } + + [Fact] + public void CalculoCst70_DescontoCondicional() + { + var produto = new Produto + { + PercentualIcms = 18.00m, + PercentualIcmsSt = 18.00m, + PercentualReducao = 10.00m, + PercentualReducaoSt = 10.00m, + ValorProduto = 80.00m, + Desconto = 20.00m, + QuantidadeProduto = 1.000m, + PercentualMva = 40.00m + }; + + var cst = new Cst70(tipoDesconto: TipoDesconto.Condincional); + cst.Calcula(produto); + Assert.Equal(ModalidadeDeterminacaoBcIcms.ValorOperacao, cst.ModalidadeDeterminacaoBcIcms); + Assert.Equal(10.00m, cst.PercentualReducao); + Assert.Equal(90.00m, cst.ValorBcIcms); + Assert.Equal(18.00m, cst.PercentualIcms); + Assert.Equal(16.20m, cst.ValorIcms); + Assert.Equal(ModalidadeDeterminacaoBcIcmsSt.MargemValorAgregado, cst.ModalidadeDeterminacaoBcIcmsSt); + Assert.Equal(40.00m, cst.PercentualMva); + Assert.Equal(18.00m, cst.PercentualIcmsSt); + Assert.Equal(10.00m, cst.PercentualReducaoSt); + Assert.Equal(126.00m, cst.ValorBcIcmsSt); + Assert.Equal(6.48m, cst.ValorIcmsSt); + } + + [Fact] + public void CalculoCst70_ValoresSeparados() + { + var produto = new Produto + { + QuantidadeProduto = 1.000m, + ValorProduto = 80.00m, + Frete = 5.00m, + Seguro = 2.00m, + OutrasDespesas = 3.00m, + Desconto = 20.00m, + PercentualIpi = 5.00m, + PercentualIcms = 18.00m, + PercentualIcmsSt = 18.00m, + PercentualReducao = 61.11m, + PercentualReducaoSt = 61.11m, + PercentualMva = 52.90m + }; + + var cst = new Cst70(); + cst.Calcula(produto); + Assert.Equal(ModalidadeDeterminacaoBcIcms.ValorOperacao, cst.ModalidadeDeterminacaoBcIcms); + Assert.Equal(18.00m, cst.PercentualIcms); + Assert.Equal(61.11m, cst.PercentualReducao); + Assert.Equal(27.22m, cst.ValorBcIcms); + Assert.Equal(4.90m, cst.ValorIcms); + Assert.Equal(ModalidadeDeterminacaoBcIcmsSt.MargemValorAgregado, cst.ModalidadeDeterminacaoBcIcmsSt); Assert.Equal(18.00m, cst.PercentualIcmsSt); - Assert.Equal(12.96m, cst.ValorIcmsSt); + Assert.Equal(61.11m, cst.PercentualReducaoSt); + Assert.Equal(52.90m, cst.PercentualMva); + Assert.Equal(43.71m, cst.ValorBcIcmsSt); + Assert.Equal(2.97m, cst.ValorIcmsSt); } } -} +} \ No newline at end of file diff --git a/src/TestesUnitarios/Cst/Cst90Test.cs b/src/TestesUnitarios/Cst/Cst90Test.cs index 19af2ee..281ccdf 100644 --- a/src/TestesUnitarios/Cst/Cst90Test.cs +++ b/src/TestesUnitarios/Cst/Cst90Test.cs @@ -37,24 +37,24 @@ public void CalculoCst90ICMSST() PercentualIcms = 18.00m, PercentualIcmsSt = 18.00m, PercentualReducao = 10.00m, - ValorProduto = 100.00m, - QuantidadeProduto = 1.000m, + PercentualReducaoSt = 10.00m, PercentualMva = 100.00m, - PercentualReducaoSt = 10m + ValorProduto = 100.00m, + QuantidadeProduto = 1.000m }; - var cst = new Cst90(); cst.Calcula(produto); Assert.Equal(ModalidadeDeterminacaoBcIcmsSt.MargemValorAgregado, cst.ModalidadeDeterminacaoBcIcmsSt); Assert.Equal(100.00m, cst.PercentualMva); - Assert.Equal(162.00m, cst.ValorBcIcmsSt); Assert.Equal(10.00m, cst.PercentualReducaoSt); - Assert.Equal(162.00m, cst.ValorBcIcmsSt); Assert.Equal(18.00m, cst.PercentualIcmsSt); - Assert.Equal(12.96m, cst.ValorIcmsSt); + Assert.Equal(90.00m, cst.ValorBcIcms); + Assert.Equal(16.20m, cst.ValorIcmsSt); + Assert.Equal(180.00m, cst.ValorBcIcmsSt); + Assert.Equal(16.20m, cst.ValorIcmsSt); } [Fact] diff --git a/src/TestesUnitarios/Entidade/Produto.cs b/src/TestesUnitarios/Entidade/Produto.cs index f7f4154..54568de 100644 --- a/src/TestesUnitarios/Entidade/Produto.cs +++ b/src/TestesUnitarios/Entidade/Produto.cs @@ -14,6 +14,7 @@ public Produto() public CstIpi CstIpi { get; set; } public CstPisCofins CstPisCofins { get; set; } public bool IsServico { get; set; } + public bool IsAtivoImobilizadoOuUsoeConsumo { get; set; } public MotorTributarioNet.Flags.Cst Cst { get; set; } public MotorTributarioNet.Flags.Csosn Csosn { get; set; } public decimal ValorProduto { get; set; }