private Nomina contruyeNomina12(CFDIEmpleado cfdiEmpleado)
        {
            Nomina nomina = new Nomina();

            try
            {
                nomina.Version          = ("1.2");
                nomina.FechaFinalPago   = (UtileriasSat.castXmlFechaFormatoIso8601(cfdiEmpleado.fechaFinalPago));
                nomina.FechaInicialPago = (UtileriasSat.castXmlFechaFormatoIso8601(cfdiEmpleado.fechaInicioPago));
                nomina.FechaPago        = (UtileriasSat.castXmlFechaFormatoIso8601(cfdiEmpleado.fechaPago));
                nomina.NumDiasPagados   = (UtileriasSat.castNumerosToBigDecimal(cfdiEmpleado.numeroDiasPago));
                nomina.Emisor           = (construyeNominaEmisor(cfdiEmpleado));
                nomina.Receptor         = (construyeNominaReceptor(cfdiEmpleado));
                anioServicio            = UtileriasSat.getAniosServicio(cfdiEmpleado.fechaInicioRelLaboral.GetValueOrDefault(), cfdiEmpleado.fechaFinalPago);
                if (string.Equals(cfdiEmpleado.tipoCorrida.clave, "ASI", StringComparison.OrdinalIgnoreCase))
                {// duda, no solo una corrida asimilados es tipo de nomina especial, tambien finiquitos, vacaciones
                    nomina.NumDiasPagados = (UtileriasSat.castNumerosToBigDecimal(1));
                    nomina.TipoNomina     = ManejadorEnum.GetDescription(CTipoNomina.E);
                    if (nomina.Receptor != null)
                    {
                        nomina.Receptor.PeriodicidadPago = ("99");
                    }
                    cargaConceptosANomina(nomina, cfdiEmpleado.cfdiRecibo.cfdiReciboConcepto, cfdiEmpleado.cfdiRecibo.cfdiReciboHrsExtras);
                    if (existeIncapacidades)
                    {
                        nomina.Incapacidades = (contruyeNominaListaIncapacidades(cfdiEmpleado.cfdiRecibo.cfdiReciboIncapacidad).ToArray());
                    }
                }
                else
                {
                    nomina.TipoNomina = ManejadorEnum.GetDescription(CTipoNomina.O);
                    cargaConceptosANomina(nomina, cfdiEmpleado.cfdiRecibo.cfdiReciboConcepto, cfdiEmpleado.cfdiRecibo.cfdiReciboHrsExtras);
                    if (existeIncapacidades)
                    {
                        NominaIncapacidad[] incapacidades = contruyeNominaListaIncapacidades(cfdiEmpleado.cfdiRecibo.cfdiReciboIncapacidad).ToArray();
                        if (incapacidades.Length > 0)
                        {
                            nomina.Incapacidades = incapacidades;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                mensajeNomina.error   = (ex.Message);
                mensajeNomina.noError = (1);
                //utilSat.bitacora(ex.Message);
                ///nomina = null;
            }
            return(nomina);
        }
        private NominaReceptor construyeNominaReceptor(CFDIEmpleado cfdiEmpleado)
        {
            NominaReceptor receptor = new NominaReceptor();

            receptor.Curp = (cfdiEmpleado.CURP);
            if (cfdiEmpleado.noSeguroSocial == null ? false : cfdiEmpleado.noSeguroSocial.Trim().Length > 0)
            {
                receptor.NumSeguridadSocial = (cfdiEmpleado.noSeguroSocial);
            }

            if (cfdiEmpleado.fechaInicioRelLaboral != null)
            {
                receptor.FechaInicioRelLaboral = (UtileriasSat.castXmlFechaFormatoIso8601(cfdiEmpleado.fechaInicioRelLaboral.GetValueOrDefault()));
            }
            if (cfdiEmpleado.antiguedad != null)
            {
                //"P".concat(String.valueOf(cfdiEmpleado.getAntiguedad())).concat("W")
                receptor.Antigüedad = (string.Concat("P", string.Concat(cfdiEmpleado.antiguedad, "W")));
            }
            ////////        if (cfdiEmpleado.getAntiguedadYMD().trim().length() > 0) {
            ////////            receptor.setAntiguedad(cfdiEmpleado.getAntiguedadYMD());
            ////////        }
            receptor.TipoContrato = (cfdiEmpleado.tipoContrato);
            if (cfdiEmpleado.jornada == null ? false : cfdiEmpleado.jornada.Trim().Length > 0)
            {
                receptor.TipoJornada = (cfdiEmpleado.jornada);
            }
            receptor.TipoRegimen = (cfdiEmpleado.regimenContratacion); //@
            receptor.NumEmpleado = (cfdiEmpleado.plazasPorEmpleadosMov.plazasPorEmpleado.empleados.clave);

            if (cfdiEmpleado.departamento == null ? false : cfdiEmpleado.departamento.Trim().Length > 0)
            {
                receptor.Departamento = (cfdiEmpleado.departamento);
            }

            if (cfdiEmpleado.puesto == null ? false : cfdiEmpleado.puesto.Trim().Length > 0)
            {
                receptor.Puesto = (cfdiEmpleado.puesto);
            }
            if (cfdiEmpleado.riesgoPuesto != null)
            {
                receptor.RiesgoPuesto = (cfdiEmpleado.riesgoPuesto);
            }

            receptor.PeriodicidadPago = (cfdiEmpleado.periodiciadadPago);

            if (cfdiEmpleado.claveBancoSat == null ? false : cfdiEmpleado.claveBancoSat.Trim().Length > 0)
            {
                receptor.Banco = (cfdiEmpleado.claveBancoSat);
            }
            if (cfdiEmpleado.cuentaBancaria == null ? false : cfdiEmpleado.cuentaBancaria.Trim().Length > 0)
            {
                receptor.CuentaBancaria = (UtileriasSat.castNumerosToBigInteger(cfdiEmpleado.cuentaBancaria).ToString());
            }

            if (cfdiEmpleado.salBaseCotAport == null ? false: cfdiEmpleado.salBaseCotAport > 0)
            {
                receptor.SalarioBaseCotApor = (UtileriasSat.castNumerosToImporteMX(cfdiEmpleado.salBaseCotAport));
            }
            if (cfdiEmpleado.salIntIMSS == null ? false: cfdiEmpleado.salIntIMSS > 0)
            {
                receptor.SalarioDiarioIntegrado = (UtileriasSat.castNumerosToImporteMX(cfdiEmpleado.salIntIMSS));
            }
            try
            {
                //receptor.ClaveEntFed=(CEstado.fromValue(cfdiEmpleado.estado));
                receptor.ClaveEntFed = (cfdiEmpleado.estado);
            }
            catch (Exception e)
            {
                receptor.ClaveEntFed = (null);
            }

            ///subcontratacion

            ///receptor.setSindicalizado(SCHEMALOCATION_NOMINA);    //opcional   pendiente

            return(receptor);
        }