diff --git a/src/MotorTributarioNet/Impostos/IResultadoCalculoFcpStRetido.cs b/src/MotorTributarioNet/Impostos/IResultadoCalculoFcpStRetido.cs new file mode 100644 index 0000000..309d276 --- /dev/null +++ b/src/MotorTributarioNet/Impostos/IResultadoCalculoFcpStRetido.cs @@ -0,0 +1,28 @@ +// Projeto: Motor Tributario +// Biblioteca C# para Cálculos Tributários Do Brasil +// NF-e, NFC-e, CT-e, SAT-Fiscal +// +// Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la +// sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela +// Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) +// qualquer versão posterior. +// +// Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM +// NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU +// ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor +// do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) +// +// Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto +// com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., +// no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. +// Você também pode obter uma copia da licença em: +// https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE + +namespace MotorTributarioNet.Impostos +{ + public interface IResultadoCalculoFcpStRetido + { + decimal BaseCalculoFcpStRetido { get; } + decimal ValorFcpStRetido { get; } + } +} diff --git a/src/MotorTributarioNet/Impostos/ITributavel.cs b/src/MotorTributarioNet/Impostos/ITributavel.cs index 96a141a..c392b2e 100644 --- a/src/MotorTributarioNet/Impostos/ITributavel.cs +++ b/src/MotorTributarioNet/Impostos/ITributavel.cs @@ -49,6 +49,8 @@ public interface ITributavel decimal PercentualDifalInterestadual { get; set; } decimal PercentualFcp { get; set; } decimal PercentualMva { get; set; } + decimal PercentualFcpStRetido { get; set; } + decimal ValorUltimaBaseCalculoIcmsStRetido { get; set; } /// /// Na Substituição tributária = Alíquota interna no Estado de destino diff --git a/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcpStRetido.cs b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcpStRetido.cs new file mode 100644 index 0000000..504f973 --- /dev/null +++ b/src/MotorTributarioNet/Impostos/Implementacoes/ResultadoCalculoFcpStRetido.cs @@ -0,0 +1,34 @@ +// Projeto: Motor Tributario +// Biblioteca C# para Cálculos Tributários Do Brasil +// NF-e, NFC-e, CT-e, SAT-Fiscal +// +// Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la +// sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela +// Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) +// qualquer versão posterior. +// +// Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM +// NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU +// ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor +// do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) +// +// Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto +// com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., +// no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. +// Você também pode obter uma copia da licença em: +// https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE + +namespace MotorTributarioNet.Impostos.Implementacoes +{ + public class ResultadoCalculoFcpStRetido : IResultadoCalculoFcpStRetido + { + public ResultadoCalculoFcpStRetido(decimal baseCalculoFcpStRetido, decimal valorFcpStRetido) + { + BaseCalculoFcpStRetido = baseCalculoFcpStRetido; + ValorFcpStRetido = valorFcpStRetido; + } + + public decimal BaseCalculoFcpStRetido { get; } + public decimal ValorFcpStRetido { get; } + } +} diff --git a/src/MotorTributarioNet/Impostos/ResultadoTributacao.cs b/src/MotorTributarioNet/Impostos/ResultadoTributacao.cs index bde864a..6c28671 100644 --- a/src/MotorTributarioNet/Impostos/ResultadoTributacao.cs +++ b/src/MotorTributarioNet/Impostos/ResultadoTributacao.cs @@ -46,6 +46,7 @@ public class ResultadoTributacao private TributacaoFcp TributacaoFcp { get; set; } private TributacaoIssqn Issqn { get; set; } private TributacaoIbpt Ibpt { get; set; } + private TributacaoFcpStRetido TributacaoFcpStRetido { get; set; } #endregion @@ -100,6 +101,9 @@ public class ResultadoTributacao public decimal ValorTributacaoEstadual { get; private set; } public decimal ValorTributacaoMunicipal { get; private set; } public decimal ValorTotalTributos { get; private set; } + + public decimal ValorBcFcpStRetido { get; private set; } + public decimal FcpStRetido { get; private set; } #endregion private readonly ITributavelProduto _produto; @@ -124,6 +128,7 @@ public ResultadoTributacao Calcular() CalcularIcms(); CalcularDifal(); CalcularFcp(); + CalcularFcpStRetido(); CalcularIpi(); } CalcularPis(); @@ -469,6 +474,20 @@ private TributacaoFcp CalcularFcp() return TributacaoFcp; } + private TributacaoFcp CalcularFcpStRetido() + { + TributacaoFcpStRetido = new TributacaoFcpStRetido(_produto); + FcpStRetido = decimal.Zero; + ValorBcFcpStRetido = decimal.Zero; + + 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()); diff --git a/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoFcpStRetido.cs b/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoFcpStRetido.cs new file mode 100644 index 0000000..2f43e3e --- /dev/null +++ b/src/MotorTributarioNet/Impostos/Tributacoes/TributacaoFcpStRetido.cs @@ -0,0 +1,50 @@ +// Projeto: Motor Tributario +// Biblioteca C# para Cálculos Tributários Do Brasil +// NF-e, NFC-e, CT-e, SAT-Fiscal +// +// Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la +// sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela +// Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) +// qualquer versão posterior. +// +// Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM +// NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU +// ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor +// do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) +// +// Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto +// com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., +// no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. +// Você também pode obter uma copia da licença em: +// https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE + +using System; +using MotorTributarioNet.Flags; +using MotorTributarioNet.Impostos.CalulosDeBC; +using MotorTributarioNet.Impostos.Implementacoes; + +namespace MotorTributarioNet.Impostos.Tributacoes +{ + public class TributacaoFcpStRetido + { + private readonly ITributavel _tributavel; + + public TributacaoFcpStRetido(ITributavel tributavel) + { + _tributavel = tributavel ?? throw new ArgumentNullException(nameof(tributavel)); + } + + public IResultadoCalculoFcpSt Calcula() + { + return CalculaFcpSt(); + } + + private IResultadoCalculoFcpSt CalculaFcpSt() + { + decimal baseIcmsSt = _tributavel.ValorUltimaBaseCalculoIcmsStRetido * _tributavel.QuantidadeProduto; + var valorIcmsSt = (baseIcmsSt * (_tributavel.PercentualFcpStRetido / 100)); + + return new ResultadoCalculoFcpSt(baseIcmsSt, valorIcmsSt); + } + } +} diff --git a/src/TestesUnitarios/Entidade/Produto.cs b/src/TestesUnitarios/Entidade/Produto.cs index 01174f9..eb4309c 100644 --- a/src/TestesUnitarios/Entidade/Produto.cs +++ b/src/TestesUnitarios/Entidade/Produto.cs @@ -47,5 +47,7 @@ public Produto() public decimal PercentualRetIrrf { get; set; } public decimal PercentualRetInss { get; set; } public decimal PercentualFcpSt { get; set; } + public decimal PercentualFcpStRetido { get; set; } + public decimal ValorUltimaBaseCalculoIcmsStRetido { get; set; } } } \ No newline at end of file