public Demonstrativo(
     double salarioBase,
     double hrsConvencao,
     HorasCalculadas horasExtras,
     HorasCalculadas horasDescontadas,
     double totalProventos,
     Desconto inss,
     Desconto irrf,
     double totalDescontos,
     double totalLiquido,
     Desconto fgts)
 {
     SalarioBase      = salarioBase;
     HrsConvencao     = hrsConvencao;
     HorasExtras      = horasExtras;
     HorasDescontadas = horasDescontadas;
     TotalProventos   = totalProventos;
     Inss             = inss;
     Irrf             = irrf;
     TotalDescontos   = totalDescontos;
     TotalLiquido     = totalLiquido;
     Fgts             = fgts;
 }
        public Demonstrativo GerarDemonstrativo(int horasCategoria, double salarioBase, double horasExtras, double horasDescontadas)
        {
            double          valorHora             = Math.Truncate(100 * (salarioBase / horasCategoria)) / 100;
            HorasCalculadas totalHorasExtras      = new HorasCalculadas(horasExtras, horasExtras * valorHora);
            HorasCalculadas totalHorasDescontadas = new HorasCalculadas(horasDescontadas, horasDescontadas * valorHora);
            double          totalProventos        = Math.Truncate(100 * (salarioBase + totalHorasExtras.ValorTotalHoras - totalHorasDescontadas.ValorTotalHoras)) / 100;
            //INSS
            double   aliqINSS = aliquotaINSS(totalProventos);
            Desconto INSS     = new Desconto(aliqINSS, calculaImposto(totalProventos, aliqINSS));
            //IRRF
            double   aliqIRRF = aliquotaIRRF(totalProventos - INSS.Valor);
            Desconto IRRF     = new Desconto(aliqIRRF, calculaImposto(totalProventos - INSS.Valor, aliqIRRF));
            //DESCONTOS
            Double totalDescontos = INSS.Valor + IRRF.Valor;
            //LIQUIDO
            Double salarioLiquido = Math.Truncate(100 * (totalProventos - totalDescontos)) / 100;
            //FGTS: Fundo de garantia sobre tempo de serviço deve ser apenas discriminado 11% fixo.
            Desconto valorFgts = new Desconto(0.11, Math.Truncate(100 * (totalProventos * 0.11)) / 100);

            Demonstrativo demonstrativo = new Demonstrativo(salarioBase, horasCategoria, totalHorasExtras, totalHorasDescontadas, totalProventos,
                                                            INSS, IRRF, totalDescontos, salarioLiquido, valorFgts);

            return(demonstrativo);
        }