コード例 #1
0
        private Comprobante construyeComprobante(CFDIEmpleado cfdiEmpleado)
        {
            try
            {
                Comprobante comprobante = new Comprobante();
                asignarCertificado(comprobante, cfdiEmpleado.certificadoAsignado);      //@
                comprobante.Emisor   = (construyeEmisor(cfdiEmpleado.razonesSociales)); //@
                comprobante.Receptor = (construyeReceptor(cfdiEmpleado));               //@
                List <ComprobanteConcepto> listConceptos = new List <ComprobanteConcepto>();
                listConceptos.Add(contruyeConceptos(cfdiEmpleado));
                // comprobante.Conceptos=(contruyeListaConceptos(listConceptos)); //@


                comprobante.Conceptos = listConceptos.ToArray();
                comprobante.Version   = ("3.3");

                if (cfdiEmpleado.cfdiRecibo.serieCFDI != "")
                {
                    comprobante.Serie = (cfdiEmpleado.cfdiRecibo.serieCFDI);
                }

                if (cfdiEmpleado.cfdiRecibo.folioCFDI != "")
                {
                    comprobante.Folio = (cfdiEmpleado.cfdiRecibo.folioCFDI);
                }

                fechaGeneraXML = DateTime.Now;

                comprobante.Fecha      = (UtileriasSat.castFechatoXmlFechaFormato(fechaGeneraXML, UtileriasSat.FORMATO_FECHA_HORA_SAT));
                comprobante.FormaPago  = ("99");
                comprobante.MetodoPago = ManejadorEnum.GetDescription(CMetodoPago.PUE);

                comprobante.TipoDeComprobante = ManejadorEnum.GetDescription(CTipoDeComprobante.N);
                comprobante = calculaImportesConceptos(comprobante, cfdiEmpleado);


                String lugarExpedicion = "";
                if (cfdiEmpleado.codigoPostal == null ? false : cfdiEmpleado.codigoPostal.Trim().Length > 0)
                {
                    lugarExpedicion = string.Concat(lugarExpedicion, cfdiEmpleado.razonesSociales.cp.clave);// cfdiEmpleado.codigoPostal lugarExpedicion.concat(cfdiEmpleado.getCodigoPostal());
                }
                comprobante.LugarExpedicion = (lugarExpedicion);


                comprobante.Moneda = ManejadorEnum.GetDescription(CMoneda.MXN);

                if (cfdiEmpleado.cfdiRecibo.UUIDRelacionado != null)
                {
                    ConstruyeCfdiRelacionado(cfdiEmpleado.cfdiRecibo.UUIDRelacionado);
                }

                return(comprobante);
            }
            catch (Exception e)
            {
                //utilSat.bitacora(e.getMessage());
                //System.err.println(concatena.delete(0, concatena.length()).append(msgError).append("contruyeComprobante()1_Error: ").append(e));
                return(null);
            }
        }
コード例 #2
0
        public Mensaje getTipoDeRedondeoPorTipoValor(TipoDeValor tipoValor, DBContextAdapter dbContext)
        {
            List <TipoDeRedondeo> tipoDeRedondeo = new List <TipoDeRedondeo>();

            try
            {
                inicializaVariableMensaje();
                setSession(dbContext.context);
                getSession().Database.BeginTransaction();
                tipoDeRedondeo = (from tr in getSession().Set <TipoDeRedondeo>()
                                  where tr.tipoDeValorString == ManejadorEnum.GetDescription(tipoValor)
                                  select tr).ToList();
                mensajeResultado.resultado = tipoDeRedondeo;
                mensajeResultado.noError   = 0;
                mensajeResultado.error     = "";
                getSession().Database.CurrentTransaction.Commit();
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(concatena.Remove(0, concatena.Length).Append(msgError).Append("getTipoDeRedondeoPorTipoValor()1_Error: ").Append(ex));
                mensajeResultado.noError   = ControlErroresEntity.buscaNoErrorPorExcepcion(ex);
                mensajeResultado.error     = ex.GetBaseException().ToString();
                mensajeResultado.resultado = null;
                getSession().Database.CurrentTransaction.Rollback();
            }
            return(mensajeResultado);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        private ComprobanteReceptor construyeReceptor(CFDIEmpleado cfdiEmpleado)
        {
            ComprobanteReceptor receptor = new ComprobanteReceptor();

            //agregar el nombre

            receptor.Rfc = (cfdiEmpleado.RFC);
            if (cfdiEmpleado.nombre != "")
            {
                receptor.Nombre = (cfdiEmpleado.nombre);
            }
            receptor.UsoCFDI = ManejadorEnum.GetDescription(CUsoCFDI.P_01);
            return(receptor);
        }
コード例 #5
0
        private Nomina cargaConceptosANomina(Nomina nomina, List <CFDIReciboConcepto> listConceptos, List <CFDIReciboHrsExtras> listReciboHorasExtras)
        {
            totalDeducciones  = 0.0;
            totalPercepciones = 0.0;
            totalOtrosPagos   = 0.0;
            listConceptos     = listConceptos == null ? new List <CFDIReciboConcepto>() : listConceptos;
            if (listConceptos.Count() > 0)
            {
                if (nomina == null)
                {
                    nomina = new Nomina();
                }
                List <CFDIReciboConcepto> listPercepciones = new List <CFDIReciboConcepto>();
                List <CFDIReciboConcepto> listOtrosPagos   = new List <CFDIReciboConcepto>();
                List <CFDIReciboConcepto> listDeducciones  = new List <CFDIReciboConcepto>();
                int i;
                for (i = 0; i < listConceptos.Count(); i++)
                {
                    if (listConceptos[i].otroPago)
                    {
                        listOtrosPagos.Add(listConceptos[i]);
                    }
                    else if (string.Equals(listConceptos[i].tipoNaturaleza, ManejadorEnum.GetDescription(Naturaleza.PERCEPCION)))
                    {
                        listPercepciones.Add(listConceptos[i]);
                    }
                    else if (string.Equals(listConceptos[i].tipoNaturaleza, ManejadorEnum.GetDescription(Naturaleza.DEDUCCION)))
                    {
                        listDeducciones.Add(listConceptos[i]);
                    }
                }
                nomina.Percepciones = (contruyeNominaListaPercepciones(listPercepciones, listReciboHorasExtras));
                if (listOtrosPagos.Any())
                {
                    nomina.OtrosPagos = (contruyeNominaListaOtrosPagos(listOtrosPagos).ToArray());
                }
                else
                {
                    nomina.OtrosPagos = (construyeSinSubsidio().ToArray());
                }

                nomina.Deducciones       = (contruyeNominaListaDeducciones(listDeducciones));
                nomina.TotalPercepciones = (UtileriasSat.castNumerosToImporteMX(totalPercepciones));
                nomina.TotalOtrosPagos   = (UtileriasSat.castNumerosToImporteMX(totalOtrosPagos));
                nomina.TotalDeducciones  = (UtileriasSat.castNumerosToImporteMX(totalDeducciones));
            }
            return(nomina);
        }
コード例 #6
0
        private Comprobante calculaImportesConceptos(Comprobante comprobante, CFDIEmpleado cfdiEmpleado)
        {
            if (comprobante == null)
            {
                comprobante = new Comprobante();
            }
            Double totalDeduccion = 0.0, subTotal = 0.0, impuestoRetenido = 0.0, descuentos = 0.0, total = 0.0;
            List <CFDIReciboConcepto> conceptos = cfdiEmpleado.cfdiRecibo.cfdiReciboConcepto;

            ////        CFDIReciboConcepto cfdiReciboConceptoISR = null;
            if (conceptos != null)
            {
                int i;
                for (i = 0; i < conceptos.Count(); i++)
                {
                    if (mapClaveConceptosISR.ContainsKey(conceptos[i].claveConcepto))
                    {
                        ////                    cfdiReciboConceptoISR = conceptos.get(i);
                        impuestoRetenido = (conceptos[i].importeExento) + (conceptos[i].importeGravable);
                    }
                    if (string.Equals(conceptos[i].tipoNaturaleza, ManejadorEnum.GetDescription(Naturaleza.PERCEPCION)) | conceptos[i].otroPago)
                    {
                        if (conceptos[i].tipoNaturaleza != "CALCULO")
                        {
                            subTotal = subTotal + (conceptos[i].importeExento) + (conceptos[i].importeGravable);
                        }
                    }
                    else if (string.Equals(conceptos[i].tipoNaturaleza, ManejadorEnum.GetDescription(Naturaleza.DEDUCCION), StringComparison.OrdinalIgnoreCase))
                    {
                        if (!mapClaveConceptosISR.ContainsKey(conceptos[i].claveConcepto))
                        {
                            descuentos = descuentos + (conceptos[i].importeExento) + (conceptos[i].importeGravable);
                        }
                        totalDeduccion = totalDeduccion + (conceptos[i].importeExento) + (conceptos[i].importeGravable);
                    }
                }
            }

            comprobante.Descuento = (UtileriasSat.castNumerosToBigDecimal(descuentos + impuestoRetenido));
            comprobante.SubTotal  = (UtileriasSat.castNumerosToBigDecimal(subTotal)); //@
            total             = subTotal - descuentos - impuestoRetenido;
            comprobante.Total = (UtileriasSat.castNumerosToBigDecimal(total));        //Pendiente
            return(comprobante);
        }
コード例 #7
0
        private List <String> convierteXML(byte[] xmlString)
        {
            List <string> controladores = new List <string>();

            try
            {
                MemoryStream ms      = new MemoryStream(xmlString);
                string       cadenas = SerializationHelper.UTF8ByteArrayToString(xmlString);
                XmlDocument  doc     = new XmlDocument();
                doc.LoadXml(cadenas);
                XmlNode     node = doc.DocumentElement;
                XmlNodeList list;
                int         i;
                node = doc.GetElementsByTagName("Controladores").Item(0);
                if (node != null)
                {
                    list          = node.ChildNodes;
                    controladores = new List <string>();
                    for (i = 0; i < list.Count; i++)
                    {
                        XmlElement element = (XmlElement)list.Item(i);
                        if (element.HasAttributes)
                        {
                            if ((TipoControlador)ManejadorEnum.GetValue(element.GetAttribute("identificador"), typeof(TipoControlador)) == TipoControlador.CONTROLADORENTIDAD)
                            {
                                element.GetAttribute("entidad");
                                element.GetAttribute("sistema");
                                controladores.Add(element.GetAttribute("entidad"));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(concatena.Remove(0, concatena.Length).Append(msgError).Append("convierteXML()1_Error: ").Append(ex));
                mensajeResultado.noError   = ControlErroresEntity.buscaNoErrorPorExcepcion(ex);
                mensajeResultado.error     = ex.GetBaseException().ToString();
                mensajeResultado.resultado = null;
            }

            return(controladores);
        }
コード例 #8
0
        private ComprobanteConcepto contruyeConceptos(CFDIEmpleado cfdiEmpleado)
        {
            ComprobanteConcepto concepto = new ComprobanteConcepto();

            concepto.Cantidad      = (UtileriasSat.castNumerosToBigDecimal(1)); //@pendiente el cast
            concepto.Descripcion   = ("Pago de nómina");                        //@
            concepto.ClaveProdServ = ("84111505");                              //84111505
            concepto.ClaveUnidad   = ("ACT");
            //no hay necesidad de poner el nodo impuesto
            Double totalPercepcion = 0.0, totalDeduciones = 0.0, totalOtrosPagos = 0.00;
            List <CFDIReciboConcepto> conceptos = cfdiEmpleado.cfdiRecibo.cfdiReciboConcepto;

            if (conceptos != null)
            {
                int i;
                for (i = 0; i < conceptos.Count(); i++)
                {
                    if (string.Equals(conceptos[i].tipoNaturaleza, ManejadorEnum.GetDescription(Naturaleza.PERCEPCION), StringComparison.OrdinalIgnoreCase))
                    {
                        if (conceptos[i].otroPago)
                        {
                            totalOtrosPagos = totalOtrosPagos + (conceptos[i].importeExento) + (conceptos[i].importeGravable);
                        }
                        else
                        {
                            totalPercepcion = totalPercepcion + conceptos[i].importeExento + conceptos[i].importeGravable;
                        }
                    }
                    else if (string.Equals(conceptos[i].tipoNaturaleza, ManejadorEnum.GetDescription(Naturaleza.DEDUCCION), StringComparison.OrdinalIgnoreCase))
                    {
                        totalDeduciones = totalDeduciones + conceptos[i].importeExento + conceptos[i].importeGravable;
                    }
                }
            }
            concepto.Descuento     = UtileriasSat.castNumerosToBigDecimal(totalDeduciones);
            concepto.Importe       = (UtileriasSat.castNumerosToBigDecimal(totalPercepcion + totalOtrosPagos)); //@//pendiente la conversion
            concepto.ValorUnitario = (UtileriasSat.castNumerosToBigDecimal(totalPercepcion + totalOtrosPagos)); //@//pendiente la conversion
            return(concepto);
        }
コード例 #9
0
 public void setTipoBaja(String modoBaja)
 {
     this.tipoBaja = (TipoBaja)ManejadorEnum.GetValue(modoBaja, typeof(TipoBaja));
 }
コード例 #10
0
 public void setModoBaja(String modoBaja)
 {
     //this.modoBaja = ModoBaja.getEnumString(modoBaja);
     this.modoBaja = (ModoBaja)ManejadorEnum.GetValue(modoBaja, typeof(ModoBaja));
 }
コード例 #11
0
        private CFDIRecibo construyeCFDIRecibo(List <MovNomConcep> listMovNom, List <DatosHorasExtras> listHrsExtras, List <DatosIncapacidades> listIncapacidades, DateTime fechaActual)
        {
            CFDIRecibo cfdiRecibo = new CFDIRecibo();

            ////////        cfdiRecibo.setCadenaCertificado(nombreTablaBDs);
            ////////        cfdiRecibo.setCadenaOriginalTimbrado(nombreTablaBDs);
            ////////        cfdiRecibo.setCertificadoTimbrado(nombreTablaBDs);
            cfdiRecibo.fechaGeneraInfo = (fechaActual);
            ////////        cfdiRecibo.setFechaHoraTimCancelado(null);
            ////////        cfdiRecibo.setFechaHoraTimbrado(null);
            ////////        cfdiRecibo.setFolioCFDI(msgError);
            ////////        cfdiRecibo.setMensaje(msgError);
            ////////        cfdiRecibo.setMotivoCancelacion(nombreTablaBDs);
            ////////        cfdiRecibo.setNoCertificado(nombreTablaBDs);
            ////////        cfdiRecibo.setSello(msgError);
            ////////        cfdiRecibo.setSelloTimbrado(nombreTablaBDs);
            ////////        cfdiRecibo.setSerieCFDI(msgError);
            cfdiRecibo.statusTimbrado = (StatusTimbrado.EN_PROCESO);
            //////        cfdiRecibo.setUUID(msgError);
            //////        cfdiRecibo.setVersion(msgError);
            //////        cfdiRecibo.setXmlTimbrado(xmlTimbrado);
            //***genera datos conceptos***/
            listMovNom = listMovNom == null ? new List <MovNomConcep>() : listMovNom;
            double totalPercepcion = 0.0, totalDeduccion = 0.0, totalOtrosPagos = 0.0, totalSeparacionIndeminizacion = 0.0;

            if (listMovNom.Count() > 0)
            {
                int i, j;
                List <MovNomBaseAfecta>   baseAfectas;
                List <CFDIReciboConcepto> listReciboConceptos = new List <CFDIReciboConcepto>();

                CFDIReciboConcepto reciboConcepto;

                ConcepNomDefi      cnd;
                Naturaleza         naturaleza;
                ConfigConceptosSat claveConSat;
                for (i = 0; i < listMovNom.Count(); i++)
                {
                    cnd        = listMovNom[i].concepNomDefi;
                    naturaleza = cnd.naturaleza;
                    if (listMovNom[i].resultado == null ? true : listMovNom[i].resultado == 0.0)
                    {
                        camposNecesariosMsg.Append(cnd.clave).Append(".- ").Append(cnd.descripcion).Append(" No ha sido calculado|");
                    }
                    else
                    {
                        if (
                            (listMovNom[i].concepNomDefi.naturaleza == Naturaleza.PERCEPCION | listMovNom[i].concepNomDefi.naturaleza == Naturaleza.DEDUCCION |
                             (
                                 (listMovNom[i].concepNomDefi.naturaleza == Naturaleza.CALCULO) &&
                                 ((listMovNom[i].concepNomDefi.formulaConcepto == "SubsEmpleoCalculado") | (listMovNom[i].concepNomDefi.formulaConcepto == "ISRSubsidio"))
                             )
                            )
                            & mapConceptosSAT.ContainsKey(string.Concat(cnd.clave, ManejadorEnum.GetDescription(naturaleza)))
                            )
                        {
                            if (mapConceptosIncapacidades.ContainsKey(cnd.clave))
                            {
                                claveConSat = mapConceptosSAT[string.Concat(cnd.clave, ManejadorEnum.GetDescription(naturaleza))];//.get(cnd.getClave().concat(naturaleza.name()));
                                if (string.Equals(claveConSat.conceptoSatClave, ClavesParametrosModulos.claveConceptoIncapacidadesSAT.ToString(), StringComparison.OrdinalIgnoreCase))
                                {
                                    mapConceptosIncapacidades[cnd.clave] = listMovNom[i];//.put(cnd.getClave(), listMovNom.get(i));
                                }
                            }
                            else if (mapConceptosHrsExtras.ContainsKey(cnd.clave))
                            {
                                //claveConSat = mapConceptosSAT.get(cnd.getClave().concat(naturaleza.name()));
                                claveConSat = mapConceptosSAT[string.Concat(cnd.clave, ManejadorEnum.GetDescription(naturaleza))];
                                if (string.Equals(claveConSat.conceptoSatClave, ClavesParametrosModulos.claveConceptoHrsExtrasSAT.ToString(), StringComparison.OrdinalIgnoreCase))
                                {
                                    // mapConceptosHrsExtras.put(cnd.getClave(), listMovNom.get(i));
                                    mapConceptosHrsExtras[cnd.clave] = listMovNom[i];
                                }
                            }
                            reciboConcepto               = new CFDIReciboConcepto();
                            reciboConcepto.id            = 0;
                            reciboConcepto.claveConcepto = (cnd.clave);
                            // claveConSat = mapConceptosSAT.get(cnd.getClave().concat(naturaleza.name()));
                            claveConSat                        = mapConceptosSAT[string.Concat(cnd.clave, ManejadorEnum.GetDescription(naturaleza))];
                            reciboConcepto.claveSAT            = (claveConSat.conceptoSatClave);
                            reciboConcepto.descripcionConcepto = (cnd.descripcion);
                            reciboConcepto.tipoNaturaleza      = (ManejadorEnum.GetDescription(naturaleza));
                            reciboConcepto.otroPago            = (claveConSat.otroPago);
                            if (listMovNom[i].movNomBaseAfecta == null)
                            {
                                reciboConcepto.importeExento   = (0.0);
                                reciboConcepto.importeGravable = (0.0);
                            }
                            else
                            {
                                baseAfectas = listMovNom[i].movNomBaseAfecta;
                                if (!baseAfectas.Any())
                                {
                                    if (claveConSat.otroPago & naturaleza == Naturaleza.PERCEPCION)
                                    {
                                        totalOtrosPagos = totalOtrosPagos + listMovNom[i].resultado.GetValueOrDefault();
                                    }
                                    else if (naturaleza == Naturaleza.PERCEPCION)
                                    {
                                        totalPercepcion = totalPercepcion + listMovNom[i].resultado.GetValueOrDefault();
                                    }
                                    else if (naturaleza == Naturaleza.DEDUCCION)
                                    {
                                        totalDeduccion = totalDeduccion + listMovNom[i].resultado.GetValueOrDefault();
                                    }

                                    reciboConcepto.importeExento   = (listMovNom[i].resultado == null ? 0.0 : listMovNom[i].resultado.GetValueOrDefault());
                                    reciboConcepto.importeGravable = (0.0);
                                }
                                else
                                {
                                    for (j = 0; j < baseAfectas.Count(); j++)
                                    {
                                        //string.Equals(baseAfectas[j].baseAfecConcepNom.baseNomina.clave, (String)ClavesParametrosModulos.claveBaseNominaISR, StringComparison.OrdinalIgnoreCase)
                                        if (string.Equals(baseAfectas[j].baseAfecConcepNom.baseNomina.clave, (String)ClavesParametrosModulos.claveBaseNominaISR, StringComparison.OrdinalIgnoreCase))
                                        {
                                            if (cnd.formulaConcepto.ToUpper().Contains("ISRSubsidio".ToUpper()))
                                            {
                                                reciboConcepto.importeExento   = (listMovNom[i].resultado == null ? 0.0 : listMovNom[i].resultado.GetValueOrDefault());
                                                reciboConcepto.importeGravable = (0.0);
                                            }
                                            else if (cnd.formulaConcepto.ToUpper().Contains("CalculoISR".ToUpper())
                                                     | cnd.formulaConcepto.ToUpper().Contains("CalculoIMSS".ToUpper())
                                                     | cnd.formulaConcepto.ToUpper().Contains("CalculoIMSSPatronal".ToUpper()))
                                            {
                                                reciboConcepto.importeExento   = (0.0);
                                                reciboConcepto.importeGravable = (listMovNom[i].resultado == null ? 0.0 : listMovNom[i].resultado.GetValueOrDefault());
                                            }
                                            else
                                            {
                                                reciboConcepto.importeExento   = (baseAfectas[j].resultadoExento == null ? 0.0 : baseAfectas[j].resultadoExento.GetValueOrDefault());
                                                reciboConcepto.importeGravable = (baseAfectas[j].resultado == null ? 0.0 : baseAfectas[j].resultado.GetValueOrDefault());
                                            }
                                            if (claveConSat.otroPago & naturaleza == Naturaleza.PERCEPCION)
                                            {
                                                totalOtrosPagos = totalOtrosPagos + reciboConcepto.importeExento + reciboConcepto.importeGravable;
                                            }
                                            else if (naturaleza == Naturaleza.PERCEPCION)
                                            {
                                                totalPercepcion = totalPercepcion + reciboConcepto.importeExento + reciboConcepto.importeGravable;
                                            }
                                            else if (naturaleza == Naturaleza.DEDUCCION)
                                            {
                                                totalDeduccion = totalDeduccion + reciboConcepto.importeExento + reciboConcepto.importeGravable;
                                            }
                                            break;
                                        }
                                        else
                                        {
                                            if (claveConSat.otroPago & naturaleza == Naturaleza.PERCEPCION)
                                            {
                                                totalOtrosPagos = totalOtrosPagos + listMovNom[i].resultado.GetValueOrDefault();
                                            }
                                            else if (naturaleza == Naturaleza.PERCEPCION)
                                            {
                                                totalPercepcion = totalPercepcion + listMovNom[i].resultado.GetValueOrDefault();
                                            }
                                            else if (naturaleza == Naturaleza.DEDUCCION)
                                            {
                                                totalDeduccion = totalDeduccion + listMovNom[i].resultado.GetValueOrDefault();
                                            }


                                            reciboConcepto.importeExento   = (listMovNom[i].resultado.GetValueOrDefault());
                                            reciboConcepto.importeGravable = (0.0);
                                        }
                                    }
                                }
                            }

                            if (naturaleza == Naturaleza.PERCEPCION)
                            {
                                if (string.Equals(claveConSat.conceptoSatClave, "022", StringComparison.OrdinalIgnoreCase) | string.Equals(claveConSat.conceptoSatClave, "023", StringComparison.OrdinalIgnoreCase)
                                    | string.Equals(claveConSat.conceptoSatClave, "025", StringComparison.OrdinalIgnoreCase))
                                {
                                    totalSeparacionIndeminizacion = totalSeparacionIndeminizacion + reciboConcepto.importeExento + reciboConcepto.importeGravable;
                                }
                            }

                            listReciboConceptos.Add(reciboConcepto);
                        }
                        else
                        {
                            camposNecesariosMsg.Append(cnd.clave).Append(".- ").Append(cnd.descripcion).Append(" ").Append("");//Utilerias.ObtenerMensaje.getString("ConcepNomDefiMsgClaveSat")).append("|");Pendiente
                        }
                    }
                }
                listHrsExtras = listHrsExtras == null ? new List <DatosHorasExtras>() : listHrsExtras;
                if (listHrsExtras.Count() > 0)
                {
                    List <CFDIReciboHrsExtras> cfdiReciboHrsExtras = new List <CFDIReciboHrsExtras>();
                    CFDIReciboHrsExtras        cfdiReciboHrsExtra  = null;
                    for (i = 0; i < listHrsExtras.Count(); i++)
                    {
                        cfdiReciboHrsExtra = construyeCFDIReciboHrsExtras(cfdiReciboHrsExtra, listHrsExtras[i]);
                        if (cfdiReciboHrsExtra != null)
                        {
                            cfdiReciboHrsExtras.Add(cfdiReciboHrsExtra);
                        }
                    }
                    cfdiRecibo.cfdiReciboHrsExtras = (!cfdiReciboHrsExtras.Any() ? null : cfdiReciboHrsExtras);
                }
                listIncapacidades = listIncapacidades == null ? new List <DatosIncapacidades>() : listIncapacidades;
                if (listIncapacidades.Count() > 0)
                {
                    List <CFDIReciboIncapacidad> cfdiReciboIncapacidades = new List <CFDIReciboIncapacidad>();
                    CFDIReciboIncapacidad        cfdiIncapacidad         = null;
                    for (i = 0; i < listIncapacidades.Count(); i++)
                    {
                        cfdiIncapacidad = construyeCFDIReciboIncapacidad(cfdiIncapacidad, listIncapacidades[i]);
                        if (cfdiIncapacidad != null)
                        {
                            cfdiReciboIncapacidades.Add(cfdiIncapacidad);
                        }
                    }
                    cfdiRecibo.cfdiReciboIncapacidad = (!cfdiReciboIncapacidades.Any() ? null : cfdiReciboIncapacidades);
                }
                cfdiRecibo.cfdiReciboConcepto = (listReciboConceptos);
            }
            cfdiRecibo.totalPercepcion = (totalPercepcion);
            cfdiRecibo.totalOtroPagos  = (totalOtrosPagos);
            cfdiRecibo.totalDeduccion  = (totalDeduccion);
            cfdiRecibo.total           = (totalPercepcion + totalOtrosPagos + totalSeparacionIndeminizacion) - totalDeduccion;

            cfdiRecibo.mensajeRec = (camposNecesariosMsg.ToString());;
            return(cfdiRecibo);
        }