public static ImpostoProdutoDocumento PreencherImpostosProdutoDocumento(ProdutoDocumento p, long intCodigoEmpresa, long longCodigoPessoa, int intCodigoTipoOperacao, int intCodigoAplicacaoUso, decimal decValorFrete, bool CalcularImpostos) { try { if (intCodigoTipoOperacao == 0) { return(null); } ImpostoProdutoDocumento imp = new ImpostoProdutoDocumento(); PIS pis = new PIS(); PISDAL pisDAL = new PISDAL(); COFINS cofins = new COFINS(); COFINSDAL cofinsDAL = new COFINSDAL(); RegFisIPI ipi = new RegFisIPI(); RegraFisIPIDAL ipiDAL = new RegraFisIPIDAL(); RegFisIcms regICMS = new RegFisIcms(); RegFisIcmsDAL regICMSDAL = new RegFisIcmsDAL(); TipoOperacao tpOP = new TipoOperacao(); TipoOperacaoDAL tpOPDAL = new TipoOperacaoDAL(); tpOP = tpOPDAL.PesquisarTipoOperacao(intCodigoTipoOperacao); Produto produto = new Produto(); ProdutoDAL produtoDAL = new ProdutoDAL(); produto = produtoDAL.PesquisarProduto(p.CodigoProduto); int CodigoPISUtilizado = 0; int CodigoCOFINSUtilizado = 0; switch (tpOP.CodigoPrecedenciaImpostoPIS_COFINS) { case 159: Pessoa pessoa = new Pessoa(); PessoaDAL pessoaDAL = new PessoaDAL(); if (produto.CodigoPIS != 0 || produto.CodigoCOFINS != 0) { pessoa = pessoaDAL.PesquisarPessoa(longCodigoPessoa); } //PIS if (produto.CodigoPIS == 0) //SE NÃO EXISTIR PIS NO PRODUTO { if (pessoa.CodigoPIS == 0) { CodigoPISUtilizado = tpOP.CodigoPIS; //SE NÃO EXISTIR PIS NO PESSOA E PRODUTO } else { CodigoPISUtilizado = pessoa.CodigoPIS; } } else { CodigoPISUtilizado = produto.CodigoPIS; } //FIM PIS //COFINS if (produto.CodigoCOFINS == 0) //SE NÃO EXISTIR COFINS NO PRODUTO { if (pessoa.CodigoCOFINS == 0) { CodigoCOFINSUtilizado = tpOP.CodigoCOFINS; //SE NÃO EXISTIR COFINS NO PESSOA E PRODUTO } else { CodigoCOFINSUtilizado = pessoa.CodigoCOFINS; } } else { CodigoCOFINSUtilizado = produto.CodigoCOFINS; } //FIM COFINS break; case 160: //PIS //FIM PIS //COFINS //FIM COFINS break; } if (CodigoPISUtilizado != 0) { pis = pisDAL.PesquisarPISIndice(CodigoPISUtilizado); } if (CodigoCOFINSUtilizado != 0) { cofins = cofinsDAL.PesquisarCOFINSIndice(CodigoCOFINSUtilizado); } regICMS = regICMSDAL.ExecutaSP_BUSCA_REGRA_ICMS(intCodigoTipoOperacao, intCodigoEmpresa, longCodigoPessoa, intCodigoAplicacaoUso); imp.CodigoDocumento = p.CodigoDocumento; imp.CodigoProdutoDocumento = p.CodigoItem; if (regICMS != null) { imp.ValorMVA_Saida = regICMS.MVAOriginal; imp.ValorMVA_Entrada = regICMS.MVAEntrada; imp.PercentualICMS = RetornaPercentualICMS(regICMS); imp.ValorBaseCalculoICMS = p.ValorTotalItem; } //testar se exite IPI imp.ValorBaseCalculoIPI = p.ValorTotalItem; imp.PercentualIPI = 5; if (pis != null) { imp.ValorBaseCalculoPIS = p.ValorTotalItem; imp.PercentualPIS = Convert.ToDecimal(pis.ValorPIS); } if (cofins != null) { imp.ValorBaseCalculoCOFINS = p.ValorTotalItem; imp.PercentualCOFINS = Convert.ToDecimal(cofins.ValorCOFINS); } if (CalcularImpostos) { imp.ValorICMS = Habil_Impostos.CalcularICMS(p.ValorTotalItem, imp.PercentualICMS, regICMS); imp.ValorIPI = Habil_Impostos.CalcularIPI(p.ValorTotalItem, imp.PercentualIPI); imp.ValorPIS = Habil_Impostos.CalcularPIS(p.ValorTotalItem, imp.PercentualPIS); imp.ValorCOFINS = Habil_Impostos.CalcularCOFINS(p.ValorTotalItem, imp.PercentualCOFINS); } return(imp); } catch (Exception ex) { throw new Exception("Erro ao calcular impostos: " + ex.Message.ToString()); } }
/// <summary> /// Método que retorna valor do ICMS /// </summary> /// <param name="decBaseCalculo"></param> /// <param name="decAliquotaICMS"></param> /// <returns></returns> public static decimal CalcularICMS(decimal decBaseCalculo, decimal decAliquotaICMS, RegFisIcms regICMS) { decimal decValorICMS_ST = 0; if (regICMS.CodHabil_RegTributario != 0) { if (regICMS.CodHabil_RegTributario == 3) //REGIME NORMAL { switch (regICMS.CodCST_CSOSN) { case 00: decValorICMS_ST = decBaseCalculo * (regICMS.CST00ICMS / 100); break; case 10: if (regICMS.CST10MVASaida > 0) { decValorICMS_ST = (decBaseCalculo * (1 + regICMS.CST10MVASaida / 100)) * (1 - (regICMS.CST10ReducaoBCICMSST / 100)) * (regICMS.CST10ICMSProprio / 100); } else { decValorICMS_ST = (decBaseCalculo) * (1 - (regICMS.CST10ReducaoBCICMSST / 100)) * (regICMS.CST10ICMSProprio / 100); } break; case 20: decValorICMS_ST = (decBaseCalculo * (1 - (regICMS.CST20ReducaoBCICMS / 100)) * (regICMS.CST20ICMS / 100)); break; case 30: if (regICMS.CST10MVASaida > 0) { decValorICMS_ST = (decBaseCalculo * (1 + regICMS.CST10MVASaida / 100)) * (1 - (regICMS.CST10ReducaoBCICMSST / 100)) * (regICMS.CST10ICMSProprio / 100); } else { decValorICMS_ST = (decBaseCalculo) * (1 - (regICMS.CST10ReducaoBCICMSST / 100)) * (regICMS.CST10ICMSProprio / 100); } break; case 40: decValorICMS_ST = decBaseCalculo * (regICMS.CST404150MotDesoneracao / 100); break; case 41: decValorICMS_ST = decBaseCalculo * (regICMS.CST404150MotDesoneracao / 100); break; case 50: decValorICMS_ST = decBaseCalculo * (regICMS.CST404150MotDesoneracao / 100); break; case 51: decValorICMS_ST = decBaseCalculo * (regICMS.CST51ICMS / 100); break; case 70: if (regICMS.CST70MVASaida > 0) { decValorICMS_ST = (decBaseCalculo * (1 + regICMS.CST70MVASaida / 100)) * (1 - (regICMS.CST70ReducaoBCICMSST / 100)) * (regICMS.CST70ICMSProprio / 100); } else { decValorICMS_ST = (decBaseCalculo) * (1 - (regICMS.CST70ReducaoBCICMSST / 100)) * (regICMS.CST70ICMSProprio / 100); } break; case 90: decValorICMS_ST = (decBaseCalculo * (1 - (regICMS.CST90ReducaoBCICMSST / 100)) * (regICMS.CST90ICMS / 100)); break; default: break; } } else { switch (regICMS.CodCST_CSOSN) { case 101: decValorICMS_ST = decBaseCalculo * (regICMS.CSOSN101_ICMS_SIMPLES / 100); break; case 201: if (regICMS.CSOSN201_MVASaida > 0) { decValorICMS_ST = (decBaseCalculo * (1 + regICMS.CSOSN201_MVASaida / 100)) * (1 - (regICMS.CSOSN201_ReducaoBCICMSST / 100)) * (regICMS.CSOSN201_ICMS_SIMPLES / 100); } else { decValorICMS_ST = (decBaseCalculo) * (1 - (regICMS.CSOSN201_ReducaoBCICMSST / 100)) * (regICMS.CSOSN201_ICMS_SIMPLES / 100); } break; case 202: if (regICMS.CSOSN202_203_MVASaida > 0) { decValorICMS_ST = (decBaseCalculo * (1 + regICMS.CSOSN202_203_MVASaida / 100)) * (1 - (regICMS.CSOSN202_203_ReducaoBCICMSST / 100)) * (regICMS.CSOSN202_203_ICMS / 100); } else { decValorICMS_ST = (decBaseCalculo) * (1 - (regICMS.CSOSN202_203_ReducaoBCICMSST / 100)) * (regICMS.CSOSN202_203_ICMS / 100); } break; case 203: if (regICMS.CSOSN202_203_MVASaida > 0) { decValorICMS_ST = (decBaseCalculo * (1 + regICMS.CSOSN202_203_MVASaida / 100)) * (1 - (regICMS.CSOSN202_203_ReducaoBCICMSST / 100)) * (regICMS.CSOSN202_203_ICMS / 100); } else { decValorICMS_ST = (decBaseCalculo) * (1 - (regICMS.CSOSN202_203_ReducaoBCICMSST / 100)) * (regICMS.CSOSN202_203_ICMS / 100); } break; case 900: decValorICMS_ST = (decBaseCalculo * (1 - (regICMS.CSOSN900_ReducaoBCICMSST / 100)) * (regICMS.CSOSN900_ICMS / 100)); break; default: break; } } } return(decValorICMS_ST); }
public static decimal RetornaPercentualICMS(RegFisIcms regICMS) { if (regICMS.CodHabil_RegTributario != 0) { if (regICMS.CodHabil_RegTributario == 3) //REGIME NORMAL { switch (regICMS.CodCST_CSOSN) { case 00: return(regICMS.CST00ICMS); case 10: return(regICMS.CST10ICMS); case 20: return(regICMS.CST20ICMS); case 30: return(regICMS.CST30ICMS); case 40: return(0); case 41: return(0); case 50: return(0); case 51: return(regICMS.CST51ICMS); case 70: return(regICMS.CST70ICMS); case 90: return(regICMS.CST90ICMS); } } else { switch (regICMS.CodCST_CSOSN) { case 101: return(regICMS.CSOSN101_ICMS_SIMPLES); case 201: return(regICMS.CSOSN201_ICMS_SIMPLES); case 202: return(regICMS.CSOSN202_203_ICMS_PROPRIO); case 203: return(regICMS.CSOSN202_203_ICMS_PROPRIO); case 900: return(regICMS.CSOSN900_ICMS_SIMPLES); default: break; } } } return(0); }