Skip to content

Commit bded6f6

Browse files
authored
Merge pull request #42 from AutomacaoNet/ra/feat-reforma-tributaria
feat: implementando reforma tributária
2 parents d49ea7b + 08a27ad commit bded6f6

20 files changed

Lines changed: 1464 additions & 8 deletions

.github/workflows/executar-testes.yml

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,28 @@ jobs:
1414
steps:
1515
- uses: actions/checkout@v3
1616

17-
- name: Setup .NET
18-
uses: actions/setup-dotnet@v2
17+
- name: Setup .NET 6
18+
uses: actions/setup-dotnet@v3
1919
with:
2020
dotnet-version: 6.0.x
21+
22+
- name: Setup .NET 8
23+
uses: actions/setup-dotnet@v3
24+
with:
25+
dotnet-version: 8.0.x
2126

2227
- name: Restore dependencies Motor
2328
run: dotnet restore
2429
working-directory: 'src/'
2530

2631
- name: Build
27-
run: dotnet build --no-restore
32+
run: dotnet build --no-restore --configuration Release
2833
working-directory: 'src/'
29-
30-
- name: Test
31-
run: dotnet test --no-build --verbosity normal
34+
35+
- name: Test on .NET 6.0
36+
run: dotnet test --no-build --verbosity normal --framework net6.0 --configuration Release
37+
working-directory: 'src/'
38+
39+
- name: Test on .NET 8.0
40+
run: dotnet test --no-build --verbosity normal --framework net8.0 --configuration Release
3241
working-directory: 'src/'
1.4 MB
Binary file not shown.

src/MotorTributarioNet/Facade/FacadeCalculadoraTributacao.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,29 @@ public IResultadoCalculoIcmsEfetivo CalculaIcmsEfetivo()
104104
{
105105
return new TributacaoIcmsEfetivo(_tributavel, _tipoDesconto).Calcula();
106106
}
107+
108+
/// <summary>
109+
/// Calcula o IBS UF (Imposto sobre Bens e Serviços - componente estadual) - Reforma Tributária LC 214/2025
110+
/// </summary>
111+
public IResultadoCalculoIbs CalculaIbs()
112+
{
113+
return new TributacaoIbs(_tributavel, _tipoDesconto).Calcula();
114+
}
115+
116+
/// <summary>
117+
/// Calcula o IBS Municipal (Imposto sobre Bens e Serviços - componente municipal) - Reforma Tributária LC 214/2025
118+
/// </summary>
119+
public IResultadoCalculoIbsMunicipal CalculaIbsMunicipal()
120+
{
121+
return new TributacaoIbsMunicipal(_tributavel, _tipoDesconto).Calcula();
122+
}
123+
124+
/// <summary>
125+
/// Calcula a CBS (Contribuição sobre Bens e Serviços) - Reforma Tributária LC 214/2025
126+
/// </summary>
127+
public IResultadoCalculoCbs CalculaCbs()
128+
{
129+
return new TributacaoCbs(_tributavel, _tipoDesconto).Calcula();
130+
}
107131
}
108132
}
Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
// Projeto: Motor Tributario
2+
// Biblioteca C# para Cálculos Tributários Do Brasil
3+
// NF-e, NFC-e, CT-e, SAT-Fiscal
4+
//
5+
// Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la
6+
// sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela
7+
// Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério)
8+
// qualquer versão posterior.
9+
//
10+
// Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM
11+
// NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU
12+
// ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor
13+
// do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT)
14+
//
15+
// Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto
16+
// com esta biblioteca; se não, escreva para a Free Software Foundation, Inc.,
17+
// no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
18+
// Você também pode obter uma copia da licença em:
19+
// https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE
20+
21+
using MotorTributarioNet.Flags;
22+
using MotorTributarioNet.Impostos.CalulosDeBC.Base;
23+
using MotorTributarioNet.Impostos.Tributacoes;
24+
25+
namespace MotorTributarioNet.Impostos.CalulosDeBC
26+
{
27+
/// <summary>
28+
/// Calcula a base de cálculo do IBS (Imposto sobre Bens e Serviços) e CBS (Contribuição sobre Bens e Serviços)
29+
/// Reforma Tributária - LC 214/2025 - Nota Técnica 2025.002
30+
/// Fórmula (NT 2025.002, página 19, regra UB16-10):
31+
/// vProd + vServ + vFrete + vSeg + vOutro + vII - vDesc - vPis - vCofins - vIcms - vIcmsUfDest - vFcp - vFcpUfDest - vIcmsMono - vIssqn + vIS
32+
/// </summary>
33+
public class CalculaBaseCalculoIbsCbs : CalculaBaseCalculoBase
34+
{
35+
private readonly ITributavel _tributavel;
36+
private readonly TipoDesconto _tipoDesconto;
37+
38+
public CalculaBaseCalculoIbsCbs(ITributavel tributavel, TipoDesconto tipoDesconto) : base(tributavel)
39+
{
40+
_tributavel = tributavel;
41+
_tipoDesconto = tipoDesconto;
42+
}
43+
44+
/// <summary>
45+
/// Calcula a base de cálculo conforme a fórmula da NT 2025.002
46+
/// </summary>
47+
public decimal CalculaBaseCalculo()
48+
{
49+
// vProd + vServ + vFrete + vSeg + vOutro
50+
var baseCalculo = CalculaBaseDeCalculo();
51+
52+
// + vII (Imposto de Importação) - ainda não implementado, será 0 por enquanto
53+
baseCalculo += ObterValorImpostoImportacao();
54+
55+
// - vDesc (Desconto)
56+
baseCalculo -= _tributavel.Desconto;
57+
58+
// - vPis (Valor do PIS)
59+
baseCalculo -= CalcularValorPis();
60+
61+
// - vCofins (Valor da COFINS)
62+
baseCalculo -= CalcularValorCofins();
63+
64+
// - vIcms (Valor do ICMS)
65+
baseCalculo -= CalcularValorIcms();
66+
67+
// - vIcmsUfDest (ICMS UF Destino) - ainda não implementado
68+
baseCalculo -= ObterValorIcmsUfDest();
69+
70+
// - vFcp (Valor do FCP)
71+
baseCalculo -= ObterValorFcp();
72+
73+
// - vFcpUfDest (FCP UF Destino) - ainda não implementado
74+
baseCalculo -= ObterValorFcpUfDest();
75+
76+
// - vIcmsMono (ICMS Monofásico) - ainda não implementado
77+
baseCalculo -= ObterValorIcmsMonofasico();
78+
79+
// - vIssqn (Valor do ISSQN)
80+
baseCalculo -= CalcularValorIssqn();
81+
82+
// + vIS (Imposto Seletivo) - ainda não implementado, será 0 por enquanto
83+
baseCalculo += ObterValorImpostoSeletivo();
84+
85+
return baseCalculo;
86+
}
87+
88+
/// <summary>
89+
/// Calcula o valor do PIS para dedução da base
90+
/// </summary>
91+
private decimal CalcularValorPis()
92+
{
93+
var tributacaoPis = new TributacaoPis(_tributavel, _tipoDesconto);
94+
return tributacaoPis.Calcula().Valor;
95+
}
96+
97+
/// <summary>
98+
/// Calcula o valor da COFINS para dedução da base
99+
/// </summary>
100+
private decimal CalcularValorCofins()
101+
{
102+
var tributacaoCofins = new TributacaoCofins(_tributavel, _tipoDesconto);
103+
return tributacaoCofins.Calcula().Valor;
104+
}
105+
106+
/// <summary>
107+
/// Calcula o valor do ICMS para dedução da base
108+
/// </summary>
109+
private decimal CalcularValorIcms()
110+
{
111+
var tributacaoIcms = new TributacaoIcms(_tributavel, _tipoDesconto);
112+
return tributacaoIcms.Calcula().Valor;
113+
}
114+
115+
/// <summary>
116+
/// Calcula o valor do ISSQN para dedução da base
117+
/// </summary>
118+
private decimal CalcularValorIssqn()
119+
{
120+
if (_tributavel.IsServico && _tributavel.PercentualIssqn > 0)
121+
{
122+
var tributacaoIssqn = new TributacaoIssqn(_tributavel, _tipoDesconto);
123+
return tributacaoIssqn.Calcula(false).Valor;
124+
}
125+
return 0m;
126+
}
127+
128+
/// <summary>
129+
/// Obtém o valor do Imposto de Importação (vII)
130+
/// TODO: Implementar quando a propriedade for adicionada ao ITributavel
131+
/// </summary>
132+
private decimal ObterValorImpostoImportacao()
133+
{
134+
// Propriedade ainda não existe no ITributavel
135+
return 0m;
136+
}
137+
138+
/// <summary>
139+
/// Obtém o valor do ICMS UF Destino (vIcmsUfDest)
140+
/// TODO: Implementar quando a propriedade for adicionada ao ITributavel
141+
/// </summary>
142+
private decimal ObterValorIcmsUfDest()
143+
{
144+
// Propriedade ainda não existe no ITributavel
145+
return 0m;
146+
}
147+
148+
/// <summary>
149+
/// Obtém o valor do FCP (Fundo de Combate à Pobreza)
150+
/// TODO: Melhorar cálculo quando mais informações estiverem disponíveis
151+
/// </summary>
152+
private decimal ObterValorFcp()
153+
{
154+
// Cálculo simplificado - pode ser melhorado posteriormente
155+
if (_tributavel.PercentualFcp > 0)
156+
{
157+
var baseCalculoFcp = CalculaBaseDeCalculo() - _tributavel.Desconto;
158+
return baseCalculoFcp * _tributavel.PercentualFcp / 100;
159+
}
160+
return 0m;
161+
}
162+
163+
/// <summary>
164+
/// Obtém o valor do FCP UF Destino (vFcpUfDest)
165+
/// TODO: Implementar quando a propriedade for adicionada ao ITributavel
166+
/// </summary>
167+
private decimal ObterValorFcpUfDest()
168+
{
169+
// Propriedade ainda não existe no ITributavel
170+
return 0m;
171+
}
172+
173+
/// <summary>
174+
/// Obtém o valor do ICMS Monofásico (vIcmsMono)
175+
/// TODO: Implementar cálculo quando mais informações estiverem disponíveis
176+
/// </summary>
177+
private decimal ObterValorIcmsMonofasico()
178+
{
179+
// Cálculo do ICMS Monofásico ainda não implementado
180+
return 0m;
181+
}
182+
183+
/// <summary>
184+
/// Obtém o valor do Imposto Seletivo (vIS)
185+
/// TODO: Implementar quando a propriedade for adicionada ao ITributavel
186+
/// O IS é um novo imposto da reforma tributária que incidirá sobre produtos específicos
187+
/// </summary>
188+
private decimal ObterValorImpostoSeletivo()
189+
{
190+
// Imposto Seletivo ainda não implementado
191+
return 0m;
192+
}
193+
}
194+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Projeto: Motor Tributario
2+
// Biblioteca C# para Cálculos Tributários Do Brasil
3+
// NF-e, NFC-e, CT-e, SAT-Fiscal
4+
//
5+
// Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la
6+
// sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela
7+
// Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério)
8+
// qualquer versão posterior.
9+
//
10+
// Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM
11+
// NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU
12+
// ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor
13+
// do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT)
14+
//
15+
// Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto
16+
// com esta biblioteca; se não, escreva para a Free Software Foundation, Inc.,
17+
// no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
18+
// Você também pode obter uma copia da licença em:
19+
// https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE
20+
21+
namespace MotorTributarioNet.Impostos
22+
{
23+
/// <summary>
24+
/// Interface para resultado do cálculo da CBS (Contribuição sobre Bens e Serviços)
25+
/// Reforma Tributária - LC 214/2025
26+
/// </summary>
27+
public interface IResultadoCalculoCbs
28+
{
29+
/// <summary>
30+
/// Base de cálculo da CBS
31+
/// Fórmula: vProd + vServ + vFrete + vSeg + vOutro + vII - vDesc - vPis - vCofins - vIcms - vIcmsUfDest - vFcp - vFcpUfDest - vIcmsMono - vIssqn + vIS
32+
/// </summary>
33+
decimal BaseCalculo { get; }
34+
35+
/// <summary>
36+
/// Valor da CBS calculado
37+
/// </summary>
38+
decimal Valor { get; }
39+
}
40+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Projeto: Motor Tributario
2+
// Biblioteca C# para Cálculos Tributários Do Brasil
3+
// NF-e, NFC-e, CT-e, SAT-Fiscal
4+
//
5+
// Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la
6+
// sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela
7+
// Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério)
8+
// qualquer versão posterior.
9+
//
10+
// Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM
11+
// NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU
12+
// ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor
13+
// do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT)
14+
//
15+
// Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto
16+
// com esta biblioteca; se não, escreva para a Free Software Foundation, Inc.,
17+
// no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
18+
// Você também pode obter uma copia da licença em:
19+
// https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE
20+
21+
namespace MotorTributarioNet.Impostos
22+
{
23+
/// <summary>
24+
/// Interface para resultado do cálculo do IBS (Imposto sobre Bens e Serviços)
25+
/// Reforma Tributária - LC 214/2025
26+
/// </summary>
27+
public interface IResultadoCalculoIbs
28+
{
29+
/// <summary>
30+
/// Base de cálculo do IBS
31+
/// Fórmula: vProd + vServ + vFrete + vSeg + vOutro + vII - vDesc - vPis - vCofins - vIcms - vIcmsUfDest - vFcp - vFcpUfDest - vIcmsMono - vIssqn + vIS
32+
/// </summary>
33+
decimal BaseCalculo { get; }
34+
35+
/// <summary>
36+
/// Valor do IBS calculado
37+
/// </summary>
38+
decimal Valor { get; }
39+
}
40+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Projeto: Motor Tributario
2+
// Biblioteca C# para Cálculos Tributários Do Brasil
3+
// NF-e, NFC-e, CT-e, SAT-Fiscal
4+
//
5+
// Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la
6+
// sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela
7+
// Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério)
8+
// qualquer versão posterior.
9+
//
10+
// Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM
11+
// NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU
12+
// ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor
13+
// do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT)
14+
//
15+
// Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto
16+
// com esta biblioteca; se não, escreva para a Free Software Foundation, Inc.,
17+
// no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
18+
// Você também pode obter uma copia da licença em:
19+
// https://github.com/AutomacaoNet/MotorTributarioNet/blob/master/LICENSE
20+
21+
namespace MotorTributarioNet.Impostos
22+
{
23+
/// <summary>
24+
/// Interface para resultado do cálculo do IBS Municipal (Imposto sobre Bens e Serviços - componente municipal)
25+
/// Reforma Tributária - LC 214/2025
26+
/// </summary>
27+
public interface IResultadoCalculoIbsMunicipal
28+
{
29+
/// <summary>
30+
/// Base de cálculo do IBS Municipal
31+
/// Fórmula: vProd + vServ + vFrete + vSeg + vOutro + vII - vDesc - vPis - vCofins - vIcms - vIcmsUfDest - vFcp - vFcpUfDest - vIcmsMono - vIssqn + vIS
32+
/// </summary>
33+
decimal BaseCalculo { get; }
34+
35+
/// <summary>
36+
/// Valor do IBS Municipal calculado
37+
/// </summary>
38+
decimal Valor { get; }
39+
}
40+
}

0 commit comments

Comments
 (0)