|
| 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 | +} |
0 commit comments