Skip to content

Commit

Permalink
Merge pull request #32 from esistemsistemas/master_fork_issue_28
Browse files Browse the repository at this point in the history
Master fork issue 28
  • Loading branch information
robertorp authored Oct 4, 2023
2 parents b8ebf8e + bf01daa commit 6bdf4b2
Show file tree
Hide file tree
Showing 27 changed files with 1,109 additions and 44 deletions.
14 changes: 12 additions & 2 deletions src/MotorTributarioNet/Facade/FacadeCalculadoraTributacao.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,13 @@ public class FacadeCalculadoraTributacao
{
private readonly ITributavel _tributavel;
private readonly TipoDesconto _tipoDesconto;
private readonly TipoCalculoIcmsDesonerado? _tipoCalculoIcmsDesonerado;

public FacadeCalculadoraTributacao(ITributavel tributavel, TipoDesconto tipoDesconto = TipoDesconto.Incondicional)
public FacadeCalculadoraTributacao(ITributavel tributavel, TipoDesconto tipoDesconto = TipoDesconto.Incondicional, TipoCalculoIcmsDesonerado? tipoCalculoIcmsDesonerado = null)
{
_tributavel = tributavel;
_tipoDesconto = tipoDesconto;
_tipoCalculoIcmsDesonerado = tipoCalculoIcmsDesonerado;
}

public IResultadoCalculoIcms CalculaIcms()
Expand Down Expand Up @@ -90,5 +92,13 @@ public IResultadoCalculoIssqn CalculaIssqn(bool calcularRetencao)
{
return new TributacaoIssqn(_tributavel, _tipoDesconto).Calcula(calcularRetencao);
}
public IResultadoCalculoIcmsDesonerado CalculaIcmsDesonerado()
{
return new TributacaoIcmsDesonerado(_tributavel, _tipoDesconto, _tipoCalculoIcmsDesonerado).Calcula();
}
public IResultadoCalculoIcmsMonofasico CalculaIcmsMonofasico()
{
return new TributacaoIcmsMonofasico(_tributavel, _tipoDesconto).Calcula();
}
}
}
}
12 changes: 10 additions & 2 deletions src/MotorTributarioNet/Flags/Cst.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,12 @@ public enum Cst
{
[Description("00 - Tributada integralmente.")]
Cst00 = 00,
[Description("10 - Tributada e com cobrança do ICMS por substituição tributária.")]
[Description("02 - Tributação monofásica própria sobre combustíveis")]
Cst02 = 02,
[Description("10 - Tributada e com cobrança do ICMS por substituição tributária")]
Cst10 = 10,
[Description("15 - Tributação monofásica própria e com responsabilidade pela retenção sobre combustíveis")]
Cst15 = 15,
[Description("20 - Com redução de Base de Cálculo")]
Cst20 = 20,
[Description("30 - Isenta ou não tributada e com cobrança do ICMS por substituição tributária")]
Expand All @@ -40,11 +44,15 @@ public enum Cst
Cst50 = 50,
[Description("51 - Com diferimento")]
Cst51 = 51,
[Description("53 - Tributação monofásica sobre combustíveis com recolhimento diferido")]
Cst53 = 53,
[Description("60 - ICMS cobrado anteriormente por substituição tributária")]
Cst60 = 60,
[Description("61 - Tributação monofásica sobre combustíveis cobrada anteriormente")]
Cst61 = 61,
[Description("70 - Com redução da Base de Cálculo e cobrança do ICMS por substituição tributária")]
Cst70 = 70,
[Description("90 - Outras")]
Cst90 = 90
}
}
}
32 changes: 32 additions & 0 deletions src/MotorTributarioNet/Flags/TipoCalculoIcmsDesonerado.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// 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.ComponentModel;

namespace MotorTributarioNet.Flags
{
public enum TipoCalculoIcmsDesonerado
{
[Description("Base Simples")]
BaseSimples,
[Description("Base Por Dentro")]
BasePorDentro
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

using MotorTributarioNet.Flags;
using MotorTributarioNet.Impostos.CalulosDeBC.Base;
using MotorTributarioNet.Impostos.Tributacoes;

namespace MotorTributarioNet.Impostos.CalulosDeBC
{
Expand All @@ -36,8 +37,9 @@ public CalculaBaseCalculoCofins(ITributavel tributavel, TipoDesconto tipoDescont

public decimal CalculaBaseCalculo()
{
var baseCalculo = CalculaBaseDeCalculo();

decimal valorIcms = new TributacaoIcms(_tributavel, _tipoDesconto).Calcula().Valor;
var baseCalculo = _tributavel.DeduzIcmsDaBaseDePisCofins ? CalculaBaseDeCalculo() - valorIcms : CalculaBaseDeCalculo();
baseCalculo = baseCalculo - baseCalculo * _tributavel.PercentualReducaoCofins / 100;
return _tipoDesconto == TipoDesconto.Condincional ? CalculaIcmsComDescontoCondicional(baseCalculo) : CalculaIcmsComDescontoIncondicional(baseCalculo);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

using MotorTributarioNet.Flags;
using MotorTributarioNet.Impostos.CalulosDeBC.Base;
using MotorTributarioNet.Impostos.Tributacoes;

namespace MotorTributarioNet.Impostos.CalulosDeBC
{
Expand All @@ -36,7 +37,9 @@ public CalculaBaseCalculoPis(ITributavel tributavel, TipoDesconto tipoDesconto)

public decimal CalculaBaseCalculo()
{
var baseCalculo = CalculaBaseDeCalculo();
decimal valorIcms = new TributacaoIcms(_tributavel, _tipoDesconto).Calcula().Valor;
var baseCalculo = _tributavel.DeduzIcmsDaBaseDePisCofins ? CalculaBaseDeCalculo() - valorIcms : CalculaBaseDeCalculo();
baseCalculo = baseCalculo - baseCalculo * _tributavel.PercentualReducaoPis / 100;

return _tipoDesconto == TipoDesconto.Condincional ? CalculaIcmsComDescontoCondicional(baseCalculo) : CalculaIcmsComDescontoIncondicional(baseCalculo);
}
Expand Down
47 changes: 47 additions & 0 deletions src/MotorTributarioNet/Impostos/Csts/Cst02.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// 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 MotorTributarioNet.Facade;
using MotorTributarioNet.Flags;
using MotorTributarioNet.Impostos.Csts.Base;

namespace MotorTributarioNet.Impostos.Csts
{
public class Cst02 : CstBase
{
public decimal QuantidadeBaseCalculoIcmsMonofasico { get; private set; }
public decimal ValorIcmsMonofasicoProprio { get; private set; }

public Cst02(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, TipoDesconto tipoDesconto = TipoDesconto.Incondicional) : base(origemMercadoria, tipoDesconto)
{
Cst = Cst.Cst02;
}

public override void Calcula(ITributavel tributavel)
{
FacadeCalculadoraTributacao facadeCalculadoraTributacao = new FacadeCalculadoraTributacao(tributavel, TipoDesconto);
IResultadoCalculoIcmsMonofasico resultadoCalculoIcms = facadeCalculadoraTributacao.CalculaIcmsMonofasico();
ValorIcmsMonofasicoProprio = resultadoCalculoIcms.ValorIcmsMonofasicoProprio;
QuantidadeBaseCalculoIcmsMonofasico = resultadoCalculoIcms.QuantidadeBaseCalculoIcmsMonofasico;

}

}
}
52 changes: 52 additions & 0 deletions src/MotorTributarioNet/Impostos/Csts/Cst15.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// 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 MotorTributarioNet.Facade;
using MotorTributarioNet.Flags;
using MotorTributarioNet.Impostos.Csts.Base;

namespace MotorTributarioNet.Impostos.Csts
{
public class Cst15 : CstBase
{
public decimal QuantidadeBaseCalculoIcmsMonofasico { get; private set; }
public decimal ValorIcmsMonofasicoProprio { get; private set; }
public decimal QuantidadeBaseCalculoIcmsMonofasicoRetencao { get; private set; }
public decimal ValorIcmsMonofasicoRetencao { get; private set; }


public Cst15(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, TipoDesconto tipoDesconto = TipoDesconto.Incondicional) : base(origemMercadoria, tipoDesconto)
{
Cst = Cst.Cst15;
}

public override void Calcula(ITributavel tributavel)
{
FacadeCalculadoraTributacao facadeCalculadoraTributacao = new FacadeCalculadoraTributacao(tributavel, TipoDesconto);
IResultadoCalculoIcmsMonofasico resultadoCalculoIcmsMonofasico = facadeCalculadoraTributacao.CalculaIcmsMonofasico();

QuantidadeBaseCalculoIcmsMonofasico = resultadoCalculoIcmsMonofasico.QuantidadeBaseCalculoIcmsMonofasico;
ValorIcmsMonofasicoProprio = resultadoCalculoIcmsMonofasico.ValorIcmsMonofasicoProprio;
QuantidadeBaseCalculoIcmsMonofasicoRetencao = resultadoCalculoIcmsMonofasico.QuantidadeBaseCalculoIcmsMonofasicoRetencao;
ValorIcmsMonofasicoRetencao = resultadoCalculoIcmsMonofasico.ValorIcmsMonofasicoRetencao;
}

}
}
18 changes: 11 additions & 7 deletions src/MotorTributarioNet/Impostos/Csts/Cst20.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,23 @@ namespace MotorTributarioNet.Impostos.Csts
public class Cst20 : Cst00
{
public decimal PercentualReducao { get; private set; }
public decimal ValorBcFcp { get; private set; }

public Cst20(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, TipoDesconto tipoDesconto = TipoDesconto.Incondicional) : base(origemMercadoria, tipoDesconto)
public decimal ValorBcFcp { get; private set; }
public decimal ValorIcmsDesonerado { get; private set; }
public TipoCalculoIcmsDesonerado? TipoCalculoIcmsDesonerado { get; private set; }

public Cst20(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, TipoDesconto tipoDesconto = TipoDesconto.Incondicional, TipoCalculoIcmsDesonerado? tipoCalculoIcmsDesonerado = null) : base(origemMercadoria, tipoDesconto)
{
Cst = Cst.Cst20;
TipoCalculoIcmsDesonerado = tipoCalculoIcmsDesonerado;
}

public override void Calcula(ITributavel tributavel)
{
base.Calcula(tributavel);

PercentualReducao = tributavel.PercentualReducao;
ValorBcFcp = new FacadeCalculadoraTributacao(tributavel, TipoDesconto).CalculaFcp().BaseCalculo;
}
PercentualReducao = tributavel.PercentualReducao;
ValorBcFcp = new FacadeCalculadoraTributacao(tributavel, TipoDesconto).CalculaFcp().BaseCalculo;
ValorIcmsDesonerado = new FacadeCalculadoraTributacao(tributavel, TipoDesconto, TipoCalculoIcmsDesonerado).CalculaIcmsDesonerado().Valor;
}
}
}
}
23 changes: 14 additions & 9 deletions src/MotorTributarioNet/Impostos/Csts/Cst30.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,21 +33,24 @@ public class Cst30 : CstBase
public decimal ValorBcIcmsSt { get; private set; }
public decimal PercentualIcmsSt { get; private set; }
public decimal ValorIcmsSt { get; private set; }
public decimal ValorBcFcpSt { get; private set; }
public decimal PercentualFcpSt { get; private set; }
public decimal ValorFcpSt { get; private set; }
public decimal ValorBcFcpSt { get; private set; }
public decimal PercentualFcpSt { get; private set; }
public decimal ValorFcpSt { get; private set; }
public decimal ValorIcmsDesonerado { get; private set; }
public TipoCalculoIcmsDesonerado? TipoCalculoIcmsDesonerado { get; private set; }

public Cst30(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, TipoDesconto tipoDesconto = TipoDesconto.Incondicional) : base(origemMercadoria, tipoDesconto)
public Cst30(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, TipoDesconto tipoDesconto = TipoDesconto.Incondicional, TipoCalculoIcmsDesonerado? tipoCalculoIcmsDesonerado = null) : base(origemMercadoria, tipoDesconto)
{
Cst = Cst.Cst30;
TipoCalculoIcmsDesonerado = tipoCalculoIcmsDesonerado;
}

public override void Calcula(ITributavel tributavel)
{
PercentualMva = tributavel.PercentualMva;
PercentualReducaoSt = tributavel.PercentualReducaoSt;
PercentualIcmsSt = tributavel.PercentualIcmsSt;
PercentualFcpSt = tributavel.PercentualFcpSt;
PercentualFcpSt = tributavel.PercentualFcpSt;

FacadeCalculadoraTributacao facadeCalculadoraTributacao = new FacadeCalculadoraTributacao(tributavel, TipoDesconto);

Expand All @@ -58,10 +61,12 @@ public override void Calcula(ITributavel tributavel)
ValorBcIcmsSt = resultadoCalculoIcmsSt.BaseCalculoIcmsSt;
ValorIcmsSt = resultadoCalculoIcmsSt.ValorIcmsSt;

IResultadoCalculoFcpSt resultadoCalculoFcpSt = facadeCalculadoraTributacao.CalculaFcpSt();
IResultadoCalculoFcpSt resultadoCalculoFcpSt = facadeCalculadoraTributacao.CalculaFcpSt();

ValorBcFcpSt = resultadoCalculoFcpSt.BaseCalculoFcpSt;
ValorFcpSt = resultadoCalculoFcpSt.ValorFcpSt;
ValorBcFcpSt = resultadoCalculoFcpSt.BaseCalculoFcpSt;
ValorFcpSt = resultadoCalculoFcpSt.ValorFcpSt;

ValorIcmsDesonerado = new FacadeCalculadoraTributacao(tributavel, TipoDesconto, TipoCalculoIcmsDesonerado).CalculaIcmsDesonerado().Valor;
}
}
}
}
12 changes: 10 additions & 2 deletions src/MotorTributarioNet/Impostos/Csts/Cst40.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
// Você também pode obter uma copia da licença em:
// https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE

using MotorTributarioNet.Facade;
using MotorTributarioNet.Flags;
using MotorTributarioNet.Impostos.Csts.Base;

Expand All @@ -27,11 +28,18 @@ public class Cst40 : CstBase
{
public MotivoDesoneracao MotivoDesoneracao { get; set; }
public decimal ValorIcmsDesonerado { get; set; }
public TipoCalculoIcmsDesonerado? TipoCalculoIcmsDesonerado { get; set; }

public Cst40(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, TipoDesconto tipoDesconto = TipoDesconto.Incondicional) : base(origemMercadoria, tipoDesconto)
public Cst40(OrigemMercadoria origemMercadoria = OrigemMercadoria.Nacional, TipoDesconto tipoDesconto = TipoDesconto.Incondicional, TipoCalculoIcmsDesonerado? tipoCalculoIcmsDesonerado = null) : base(origemMercadoria, tipoDesconto)
{
Cst = Cst.Cst40;
TipoCalculoIcmsDesonerado = tipoCalculoIcmsDesonerado;
}
public override void Calcula(ITributavel tributavel)
{
FacadeCalculadoraTributacao facadeCalculadoraTributacao = new FacadeCalculadoraTributacao(tributavel, TipoDesconto, TipoCalculoIcmsDesonerado);
ValorIcmsDesonerado = facadeCalculadoraTributacao.CalculaIcmsDesonerado().Valor;
}

}
}
}
Loading

0 comments on commit 6bdf4b2

Please sign in to comment.