Exemple #1
0
        /// <summary>
        /// Obtem o valor da aliquota IRRF do funcionario de acordo com o valor do salario
        /// </summary>
        /// <param name="funcionario"></param>
        /// <returns></returns>
        private decimal GetAliquotaIrrf(FuncionarioCompetencia funcionario)
        {
            using (var ctx = new BalcaoContext())
            {
                //pega o salario bruto - vlr inss, pois é contribuicao entao ja deduz no irrf
                var salarioFun = funcionario.Funcionario.Salario - ValorInss(funcionario);

                var aliquota = 0M;

                var encargos = ctx.FaixaContribuicaoSalarialDao.Where(
                    e => e.TipoContribuicao == TypeEncargoSalarial.IRRF &&
                    e.ValorInicial <= salarioFun && e.ValorFinal >= salarioFun);

                //se não achou nada, o salario do cara é maior que a faixa dos 11%, então use a aliquota = 11%
                if (encargos.Count() == 0)
                {
                    aliquota = 0M;
                }
                else //senao recupera a aliquota da faixa salarial do sujeito
                {
                    aliquota = encargos.FirstOrDefault().AliquotaEncargo;
                }

                return(aliquota);
            }
        }
Exemple #2
0
        /// <summary>
        /// Obtem o valor do INSS do funcionario de acordo com o valor do salario
        /// </summary>
        /// <param name="funcionario"></param>
        /// <returns></returns>
        private decimal ValorInss(FuncionarioCompetencia funcionario)
        {
            using (var ctx = new BalcaoContext())
            {
                var dtCompetencia = funcionario.Competencia.DataInicialCompetencia.Date;
                var salarioFun    = funcionario.Funcionario.Salario;
                var encargos      = ctx.FaixaContribuicaoSalarialDao.Where(
                    e =>
                    (e.TipoContribuicao == TypeEncargoSalarial.INSS && e.VigenciaInicial.Date >= dtCompetencia && e.ValorInicial <= salarioFun && e.ValorFinal >= salarioFun) ||
                    (!e.VigenciaFinal.HasValue && e.TipoContribuicao == TypeEncargoSalarial.INSS && e.ValorInicial <= salarioFun && e.ValorFinal >= salarioFun)).FirstOrDefault();

                //se nao achou o engargo para o INSS, o candango paga o TETO
                if (encargos == null)
                {
                    salarioFun = ctx.FaixaContribuicaoSalarialDao
                                 .Where(e => e.TipoContribuicao == TypeEncargoSalarial.INSS).OrderBy(e => e.ValorFinal).Last().ValorFinal;
                }
                decimal vlrInss = (salarioFun * GetAliquotaInss(funcionario)) / 100;
                return(vlrInss);
            }
        }
Exemple #3
0
        //Gerar ficha financeira de cada funcionario.
        private ICollection <FichaFinanceiraFuncionario> GerarFichaFinanceira(FuncionarioCompetencia funcionario, GrupoEvento grupo, TypeTipoFechamentoFolha p_tipoFechamento)
        {
            var dataRef = funcionario.Competencia.DataFinalCompetencia;

            foreach (var evento in grupo.EventosGrupo)
            {
                //salario contratual
                if (evento.Evento.CodigoCalculo == TypeCodigoCalculo.SalarioBase)
                {
                    var qtd = obtemDiasFolha(p_tipoFechamento);

                    var salario = GetSalarioCompetencia(p_tipoFechamento, funcionario);

                    FichaFinanceiraFuncionario fichaFin = new FichaFinanceiraFuncionario(funcionario,
                                                                                         evento.Evento, salario, evento.Evento.TipoReferencia, dataRef, qtd);
                    fichaFin.Evento = evento.Evento;
                    if (fichaFin.ValorMovimento > 0M)
                    {
                        funcionario.FichaFinanceiraFuncionario.Add(fichaFin);
                    }
                }
                //calculo do INSS
                else if (evento.Evento.CodigoCalculo == TypeCodigoCalculo.INSS)
                {
                    FichaFinanceiraFuncionario fichaFin = new FichaFinanceiraFuncionario(
                        funcionarioComp: funcionario,
                        evento: evento.Evento,
                        valor: ValorInss(funcionario),
                        tipoReferencia: evento.Evento.TipoReferencia,
                        dataRef: dataRef,
                        quantidade: GetAliquotaInss(funcionario));

                    fichaFin.Evento = evento.Evento;

                    if (fichaFin.ValorMovimento > 0M)
                    {
                        funcionario.FichaFinanceiraFuncionario.Add(fichaFin);
                    }
                }
                //valor do FGTS no mês. Aliquota sempre é 8%
                else if (evento.Evento.CodigoCalculo == TypeCodigoCalculo.FGTS)
                {
                    decimal vlrFGTS = (funcionario.Funcionario.Salario * 8) / 100;
                    funcionario.ValorFgts = vlrFGTS;
                    FichaFinanceiraFuncionario fichaFin = new FichaFinanceiraFuncionario(funcionario,
                                                                                         evento.Evento, vlrFGTS, evento.Evento.TipoReferencia, dataRef, 8);
                    fichaFin.Evento = evento.Evento;
                    if (fichaFin.ValorMovimento > 0M)
                    {
                        funcionario.FichaFinanceiraFuncionario.Add(fichaFin);
                    }
                }
                //Valor do IRRF no mês, lanca o evento somente se aliquota for maior que 0
                else if (evento.Evento.CodigoCalculo == TypeCodigoCalculo.IRRF)
                {
                    var aliqIRRF = GetAliquotaIrrf(funcionario);

                    if (aliqIRRF > 0)
                    {
                        decimal vlrIRRF = (funcionario.Funcionario.Salario - ValorInss(funcionario)) *
                                          aliqIRRF / 100;

                        vlrIRRF -= GetDeducaoIrrf(funcionario);

                        FichaFinanceiraFuncionario fichaFin = new FichaFinanceiraFuncionario(funcionario,
                                                                                             evento.Evento, vlrIRRF, evento.Evento.TipoReferencia, dataRef, aliqIRRF);
                        fichaFin.Evento = evento.Evento;
                        funcionario.FichaFinanceiraFuncionario.Add(fichaFin);
                    }
                }
                else //qualquer outro codigo de calculo não tratado especificamente igual os acima...
                {
                    FichaFinanceiraFuncionario fichaFin = new FichaFinanceiraFuncionario(
                        funcionarioComp: funcionario,
                        evento: evento.Evento,
                        valor: 0M, //valor eh 0 pq é pra ser editado na folha
                        tipoReferencia: evento.Evento.TipoReferencia,
                        dataRef: dataRef,
                        quantidade: GetAliquotaInss(funcionario));

                    fichaFin.Evento = evento.Evento;
                    funcionario.FichaFinanceiraFuncionario.Add(fichaFin);
                }
            }

            //percorrendo eventos cadastrados para o funcionario
            foreach (var eventoFunc in funcionario.Funcionario.Eventos)
            {
                FichaFinanceiraFuncionario fichaFin = new FichaFinanceiraFuncionario(funcionario,
                                                                                     eventoFunc.Evento, eventoFunc.Valor, eventoFunc.Evento.TipoReferencia, dataRef, 0M);
                fichaFin.Evento = eventoFunc.Evento;
                funcionario.FichaFinanceiraFuncionario.Add(fichaFin);
            }

            return(funcionario.FichaFinanceiraFuncionario);
        }
Exemple #4
0
        /// <summary>
        /// Obtem o valor do salario conforme o tipo de fechamento da competencia.
        /// </summary>
        /// <param name="tipoFechcompetencia"></param>
        /// <param name="funcionario"></param>
        /// <returns></returns>
        public decimal GetSalarioCompetencia(TypeTipoFechamentoFolha tipoFechcompetencia, FuncionarioCompetencia funcionario)
        {
            var salarioFechamento = 0M;
            var func = funcionario.Funcionario;

            //se for mensal, serao 30 dias trabalhados
            if (tipoFechcompetencia == TypeTipoFechamentoFolha.Mensal && func.TipoRecebimento == TypeRecebimento.Mensalista)
            {
                salarioFechamento = func.Salario;
                return(salarioFechamento);
            }
            //[...] quinzenal, 15 dias...
            else if (tipoFechcompetencia == TypeTipoFechamentoFolha.Quinzenal && func.TipoRecebimento == TypeRecebimento.Mensalista)
            {
                salarioFechamento = (func.Salario / 30) * 15;
                return(salarioFechamento);
            }
            //[...] e semanal 7 dias trabalhados
            else if (tipoFechcompetencia == TypeTipoFechamentoFolha.Semanal && func.TipoRecebimento == TypeRecebimento.Mensalista)
            {
                salarioFechamento = (func.Salario / 30) * 7;
                return(salarioFechamento);
            }
            //se nenhum acima, retorna o salario
            else
            {
                return(func.Salario);
            }
        }
 public XFrmAdicionarFichaFinanceira(CompetenciaFolha comp, FuncionarioCompetencia func) : this()
 {
     this.comp = comp;
     this.func = func;
 }