private NominaPercepcionesJubilacionPensionRetiro createJubilacionRetiro(ConceptosJubilacion conceptosJubilacion, Double total, Double?montoDiario, Double ultSueldoMen)
        {
            NominaPercepcionesJubilacionPensionRetiro jubilacionPensionRetiro = new NominaPercepcionesJubilacionPensionRetiro();

            if (conceptosJubilacion == ConceptosJubilacion.TOTAL)
            {
                jubilacionPensionRetiro.TotalUnaExhibicion = (UtileriasSat.castNumerosToBigDecimal(total));
            }
            if (conceptosJubilacion == ConceptosJubilacion.PARCIAL)
            {
                jubilacionPensionRetiro.MontoDiario      = (UtileriasSat.castNumerosToBigDecimal(total));
                jubilacionPensionRetiro.TotalParcialidad = (UtileriasSat.castNumerosToBigDecimal(montoDiario));
            }
            if (ultSueldoMen.CompareTo(total) > 0)
            {
                jubilacionPensionRetiro.IngresoAcumulable = (UtileriasSat.castNumerosToBigDecimal(total));
            }
            else
            {
                jubilacionPensionRetiro.IngresoAcumulable = (UtileriasSat.castNumerosToBigDecimal(ultSueldoMen));
            }
            jubilacionPensionRetiro.IngresoNoAcumulable = (UtileriasSat.castNumerosToBigDecimal(total - ultSueldoMen));

            return(jubilacionPensionRetiro);
        }
        private NominaPercepciones contruyeNominaListaPercepciones(List <CFDIReciboConcepto> listConceptos, List <CFDIReciboHrsExtras> listReciboHorasExtras)
        {
            NominaPercepciones percepciones = null;

            existeIncapacidades = false;
            listConceptos       = listConceptos == null ? new List <CFDIReciboConcepto>() : listConceptos;
            if (listConceptos.Count() > 0)
            {
                double ultSueldo = 0.0;
                percepciones = new NominaPercepciones();
                List <NominaPercepcionesPercepcion> listPercepciones = new List <NominaPercepcionesPercepcion>();
                int    i;
                bool   jubilacion = false, separacionIndeminizacion = false;
                Double totalExento = 0.0, totalGravable = 0.0, totalSueldo = 0.0, totalSeparacionIndeminizacion = 0.0, totalJubilacionPension = 0.0;
                ConceptosJubilacion conceptosJubilacion = ConceptosJubilacion.NINGUNA;
                for (i = 0; i < listConceptos.Count(); i++)
                {
                    totalExento   = totalExento + listConceptos[i].importeExento;
                    totalGravable = totalGravable + listConceptos[i].importeGravable;
                    if (string.Equals(listConceptos[i].claveSAT, "014", StringComparison.OrdinalIgnoreCase))
                    {
                        existeIncapacidades = true;
                    }
                    if (string.Equals(listConceptos[i].claveSAT, "001", StringComparison.OrdinalIgnoreCase))
                    {
                        existeIncapacidades = true;
                        ultSueldo           = listConceptos[i].importeExento + listConceptos[i].importeGravable;
                    }

                    if (string.Equals(listConceptos[i].claveSAT, "022", StringComparison.OrdinalIgnoreCase) | string.Equals(listConceptos[i].claveSAT, "023", StringComparison.OrdinalIgnoreCase)
                        | string.Equals(listConceptos[i].claveSAT, "025", StringComparison.OrdinalIgnoreCase))
                    {  /////SeparacionIndeminizacion
                        totalSeparacionIndeminizacion = totalSeparacionIndeminizacion + listConceptos[i].importeExento + listConceptos[i].importeGravable;
                        separacionIndeminizacion      = true;
                    }
                    else if (string.Equals(listConceptos[i].claveSAT, "039", StringComparison.OrdinalIgnoreCase) | string.Equals(listConceptos[i].claveSAT, "044", StringComparison.OrdinalIgnoreCase))
                    {  ///JubilacionPension
                        totalJubilacionPension = totalJubilacionPension + listConceptos[i].importeExento + listConceptos[i].importeGravable;
                        jubilacion             = true;
                        if (string.Equals(listConceptos[i].claveSAT, "039", StringComparison.OrdinalIgnoreCase))
                        {
                            conceptosJubilacion = ConceptosJubilacion.TOTAL;
                        }
                        else if (string.Equals(listConceptos[i].claveSAT, "044", StringComparison.OrdinalIgnoreCase))
                        {
                            conceptosJubilacion = ConceptosJubilacion.PARCIAL;
                        }
                    }
                    else
                    {
                        totalSueldo = totalSueldo + listConceptos[i].importeExento + listConceptos[i].importeGravable;
                    }
                    listPercepciones.Add(contruyeNominaPercepcion(listConceptos[i], listReciboHorasExtras));
                }
                percepciones.Percepcion = listPercepciones.ToArray();

                totalPercepciones         = totalExento + totalGravable;
                percepciones.TotalExento  = (UtileriasSat.castNumerosToBigDecimal(totalExento));
                percepciones.TotalGravado = (UtileriasSat.castNumerosToBigDecimal(totalGravable));
                percepciones.TotalSueldos = (UtileriasSat.castNumerosToBigDecimal(totalSueldo));


                if (jubilacion)
                {
                    percepciones.JubilacionPensionRetiro      = (createJubilacionRetiro(conceptosJubilacion, totalJubilacionPension, null, ultSueldo)); //pendiente
                    percepciones.TotalJubilacionPensionRetiro = (UtileriasSat.castNumerosToBigDecimal(totalJubilacionPension));
                }
                if (separacionIndeminizacion)
                {
                    percepciones.TotalSeparacionIndemnizacion = (UtileriasSat.castNumerosToBigDecimal(totalSeparacionIndeminizacion));
                    percepciones.SeparacionIndemnizacion      = (createSeparacionIndemnizacion(totalSeparacionIndeminizacion, ultSueldo, anioServicio));
                }
            }
            return(percepciones);
        }