public Demonstrativo GerarDemonstrativo(int horasCategoria, double salarioBase, double horasExtras, double horasDescontadas)
        {
            double valorHora = salarioBase / horasCategoria;

            var salario_Base = salarioBase;

            var hcExtras = new HorasCalculadas(horasExtras, TruncarValor(horasExtras * valorHora));

            var hcDescontadas = new HorasCalculadas(horasDescontadas, TruncarValor(horasDescontadas * valorHora));

            double totalProventos = salario_Base + hcExtras.ValorTotalHoras - hcDescontadas.ValorTotalHoras;

            Desconto inss = CalcularInss(totalProventos);

            Desconto irrf = CalcularIrrf(totalProventos - inss.Valor);

            double totalDescontos = inss.Valor + irrf.Valor;

            var totalLiquido = TruncarValor(totalProventos - totalDescontos);

            var fgts = new Desconto(0.11, TruncarValor(totalProventos * 0.11));

            return(new Demonstrativo(
                       salario_Base,
                       horasCategoria,
                       hcExtras,
                       hcDescontadas,
                       totalProventos,
                       inss,
                       irrf,
                       totalDescontos,
                       totalLiquido,
                       fgts));
        }
        private Desconto CalcularIrrf(double totalProventos)
        {
            Desconto desconto = null;

            foreach (var faixa in _irrf)
            {
                if (totalProventos < faixa.Teto)
                {
                    desconto = new Desconto(faixa.Aliquota, TruncarValor(totalProventos * faixa.Aliquota));
                }
            }

            return(desconto);
        }