Пример #1
0
        /// <summary>
        /// Obtener informacion Nodo Información Aduanera por Concepto
        /// </summary>
        /// <param name="numeroPedimento">Número de Pedimento</param>
        /// <returns>Lista modelo ComprobanteConceptoInformacionAduanera</returns>
        public List <ComprobanteConceptoInformacionAduanera> ObtenerNodoConceptoInformacionAduanera(string numeroPedimento)
        {
            List <ComprobanteConceptoInformacionAduanera> respuesta = new List <ComprobanteConceptoInformacionAduanera>();

            try
            {
                if (!string.IsNullOrEmpty(numeroPedimento))
                {
                    ComprobanteConceptoInformacionAduanera pedimento = new ComprobanteConceptoInformacionAduanera();
                    pedimento.NumeroPedimento = numeroPedimento;
                    respuesta.Add(pedimento);
                }
                else
                {
                    respuesta = null;
                }
            }
            catch (Exception ex)
            {
                respuesta = null;
            }

            return(respuesta);
        }
Пример #2
0
        public EntResultadoTimbrado EmitirComprobante(EntComprobante comprobante, bool emitidoEnMatriz)
        {
            try
            {
                // Se valida que el componente no sea null
                if (comprobante == null)
                {
                    throw new ArgumentNullException(nameof(comprobante));
                }

                // El comprobante debe tener al menos un concepto
                var totalProductos = comprobante.ComprobanteDetalle.Count;
                if (totalProductos == 0)
                {
                    throw new Exception("El comprobante no tiene conceptos definidos, agregue un por lo menos un concepto para emitir el comprobante");
                }

                // Inicializamos el conector y establecemos las credenciales para el permiso de conexión
                var conector = new Conector(_ambienteProductivo);

                conector.EstableceCredenciales(_usuarioIntegrador);

                //Creamos un comprobante por medio de la entidad Comprobante
                var CFDi = new Comprobante();

                // Llenamos datos del comprobante
                switch (comprobante.TipoComprobante.ToLower())
                {
                case "ingreso":
                    CFDi.TipoDeComprobante = "I";
                    break;

                case "egreso":
                    CFDi.TipoDeComprobante = "E";
                    break;

                case "traslado:":
                    CFDi.TipoDeComprobante = "T";
                    break;

                case "nomina":
                    CFDi.TipoDeComprobante = "N";
                    break;

                case "pago":
                    CFDi.TipoDeComprobante = "P";
                    break;
                }
                CFDi.Serie               = string.IsNullOrEmpty(comprobante.Serie.Trim()) ? null : comprobante.Serie.Trim();
                CFDi.Folio               = comprobante.Folio.ToString();
                CFDi.Version             = "3.3";
                CFDi.Fecha               = comprobante.FechaEmision;
                CFDi.FormaPago           = comprobante.FormaPago;
                CFDi.FormaPagoSpecified  = true;
                CFDi.MetodoPago          = comprobante.MetodoPago;
                CFDi.MetodoPagoSpecified = true;
                CFDi.Total               = comprobante.Total.ToDecimal();
                CFDi.SubTotal            = comprobante.Subtotal.ToDecimal();
                CFDi.LugarExpedicion     = comprobante.LugarExpedicion;
                CFDi.CondicionesDePago   = string.IsNullOrEmpty(comprobante.CondicionesPago.Trim()) ? null : comprobante.CondicionesPago.Trim();
                if (comprobante.Descuento != null && comprobante.Descuento.Value > 0)
                {
                    CFDi.Descuento          = comprobante.Descuento.Value.ToDecimal();
                    CFDi.DescuentoSpecified = true;
                }
                CFDi.Moneda              = comprobante.Moneda;
                CFDi.TipoCambio          = comprobante.TipoCambio.Value;
                CFDi.TipoCambioSpecified = true;

                // Folio del comprobante original (para parcialidades)
                // Serie del comprobante original (para parcialidades)
                // Fecha del comprobante original (para parcialidades)
                // Monto del comprobante original (para parcialidades)

                //Llenamos datos del emisor
                CFDi.Emisor = new ComprobanteEmisor
                {
                    Rfc           = comprobante.EmisorRfc,
                    Nombre        = comprobante.EmisorNombre,
                    RegimenFiscal = comprobante.RegimenFiscal
                };

                //Llena datos del receptor
                CFDi.Receptor = new ComprobanteReceptor
                {
                    Rfc     = comprobante.ReceptorRfc,
                    Nombre  = comprobante.ReceptorNombre,
                    UsoCFDI = comprobante.UsoCFDi
                };

                //Llenamos los conceptos
                CFDi.Conceptos = new ComprobanteConcepto[totalProductos];
                var indx = 0;
                foreach (var detalle in comprobante.ComprobanteDetalle.ToList())
                {
                    CFDi.Conceptos[indx] = new ComprobanteConcepto();
                    CFDi.Conceptos[indx].ClaveProdServ    = detalle.ClaveProdServ;
                    CFDi.Conceptos[indx].ClaveUnidad      = detalle.ClaveUnidad;
                    CFDi.Conceptos[indx].Cantidad         = detalle.Cantidad;
                    CFDi.Conceptos[indx].Unidad           = detalle.Unidad;
                    CFDi.Conceptos[indx].NoIdentificacion = !string.IsNullOrEmpty(detalle.NoIdentificacion) ? detalle.NoIdentificacion : null;
                    CFDi.Conceptos[indx].Descripcion      = detalle.Descripcion;
                    CFDi.Conceptos[indx].ValorUnitario    = Math.Round(detalle.ValorUnitario, 2);
                    CFDi.Conceptos[indx].Importe          = Math.Round(detalle.Importe, 2);

                    if (detalle.TieneInformacionAduanera)
                    {
                        var informacionAduanera = new ComprobanteConceptoInformacionAduanera();
                        informacionAduanera.NumeroPedimento         = detalle.ComplementoAduana.NumeroPedimento;
                        CFDi.Conceptos[indx].InformacionAduanera    = new ComprobanteConceptoInformacionAduanera[1];
                        CFDi.Conceptos[indx].InformacionAduanera[0] = informacionAduanera;
                    }

                    if (detalle.Descuento != 0)
                    {
                        CFDi.Conceptos[indx].Descuento          = detalle.Descuento;
                        CFDi.Conceptos[indx].DescuentoSpecified = true;
                    }

                    if (detalle.TasaTraIva.HasValue)
                    {
                        CFDi.Conceptos[indx].Impuestos                                  = new ComprobanteConceptoImpuestos();
                        CFDi.Conceptos[indx].Impuestos.Traslados                        = new ComprobanteConceptoImpuestosTraslado[1];
                        CFDi.Conceptos[indx].Impuestos.Traslados[0]                     = new ComprobanteConceptoImpuestosTraslado();
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].Base                = detalle.Importe - detalle.Descuento;
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].Impuesto            = "002";
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].TipoFactor          = "Tasa";
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].Importe             = detalle.ImporteTraIva.Value;
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].ImporteSpecified    = true;
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].TasaOCuota          = detalle.TasaTraIva.Value.ToString();
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].TasaOCuotaSpecified = true;
                    }
                    if (detalle.TasaTraIeps.HasValue)
                    {
                        CFDi.Conceptos[indx].Impuestos                                  = new ComprobanteConceptoImpuestos();
                        CFDi.Conceptos[indx].Impuestos.Traslados                        = new ComprobanteConceptoImpuestosTraslado[1];
                        CFDi.Conceptos[indx].Impuestos.Traslados[0]                     = new ComprobanteConceptoImpuestosTraslado();
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].Base                = detalle.Importe - detalle.Descuento;
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].Impuesto            = "003";
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].TipoFactor          = "Tasa";
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].Importe             = detalle.ImporteTraIeps.Value;
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].ImporteSpecified    = true;
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].TasaOCuota          = detalle.TasaTraIeps.Value.ToString();
                        CFDi.Conceptos[indx].Impuestos.Traslados[0].TasaOCuotaSpecified = true;
                    }
                    if (detalle.TasaRetIva.HasValue)
                    {
                        CFDi.Conceptos[indx].Impuestos                           = new ComprobanteConceptoImpuestos();
                        CFDi.Conceptos[indx].Impuestos.Retenciones               = new ComprobanteConceptoImpuestosRetencion[1];
                        CFDi.Conceptos[indx].Impuestos.Retenciones[0]            = new ComprobanteConceptoImpuestosRetencion();
                        CFDi.Conceptos[indx].Impuestos.Retenciones[0].Base       = detalle.Importe - detalle.Descuento;
                        CFDi.Conceptos[indx].Impuestos.Retenciones[0].Impuesto   = "002";
                        CFDi.Conceptos[indx].Impuestos.Retenciones[0].TipoFactor = "Tasa";
                        CFDi.Conceptos[indx].Impuestos.Retenciones[0].Importe    = detalle.ImporteRetIva.Value;
                        CFDi.Conceptos[indx].Impuestos.Retenciones[0].TasaOCuota = detalle.TasaRetIva.Value;
                    }
                    if (detalle.TasaRetIsr.HasValue)
                    {
                        CFDi.Conceptos[indx].Impuestos                           = new ComprobanteConceptoImpuestos();
                        CFDi.Conceptos[indx].Impuestos.Retenciones               = new ComprobanteConceptoImpuestosRetencion[1];
                        CFDi.Conceptos[indx].Impuestos.Retenciones[0]            = new ComprobanteConceptoImpuestosRetencion();
                        CFDi.Conceptos[indx].Impuestos.Retenciones[0].Base       = detalle.Importe - detalle.Descuento;
                        CFDi.Conceptos[indx].Impuestos.Retenciones[0].Impuesto   = "001";
                        CFDi.Conceptos[indx].Impuestos.Retenciones[0].TipoFactor = "Tasa";
                        CFDi.Conceptos[indx].Impuestos.Retenciones[0].Importe    = detalle.ImporteRetIsr.Value;
                        CFDi.Conceptos[indx].Impuestos.Retenciones[0].TasaOCuota = detalle.TasaRetIsr.Value;
                    }

                    //Llenamos los complementos si existiera alguno
                    //if (detalle.Complementos.Count() > 0)
                    //{
                    //    CFDi.Conceptos[indx].Items = new Object[detalle.Complementos.Count()];
                    //    int compIndx = 0;
                    //    foreach (IComplementoConcepto complemento in detalle.Complementos)
                    //    {
                    //        var type = complemento.GetType();
                    //        switch (type.Name)
                    //        {
                    //            case "EntComplementoAduana":
                    //                var complementoAduana = complemento as EntComplementoAduana;

                    //                CFDi.Conceptos[indx].Items[compIndx] = new t_InformacionAduanera()
                    //                {
                    //                    aduana = complementoAduana.Nombre,
                    //                    numero = complementoAduana.Numero,
                    //                    fecha = complementoAduana.Fecha
                    //                };
                    //                break;
                    //            case "EntComplementoPredial":
                    //                var complementoPredial = complemento as EntComplementoPredial;

                    //                CFDi.Conceptos[indx].Items[compIndx] = new ComprobanteConceptoCuentaPredial()
                    //                {
                    //                    numero = complementoPredial.Numero
                    //                };
                    //                break;
                    //            case "EntComplementoParte":
                    //                var complementoParte = complemento as EntComplementoParte;

                    //                CFDi.Conceptos[indx].Items[compIndx] = new ComprobanteConceptoParte()
                    //                {
                    //                    cantidad = complementoParte.Cantidad,
                    //                    unidad = complementoParte.Unidad,
                    //                    noIdentificacion = complementoParte.NoIdentificacion,
                    //                    descripcion = complementoParte.Descripcion,
                    //                    valorUnitario = complementoParte.ValorUnitario,
                    //                    importe = complementoParte.Importe
                    //                };
                    //                break;
                    //        }
                    //        compIndx++;
                    //    }
                    //}

                    indx++;
                }

                //Se integran los impuestos
                var detalles           = comprobante.ComprobanteDetalle.ToList() as List <EntComprobanteDetalle>;
                var impuestosTraslado  = new List <EntImpuestoTraslado>();
                var impuestosRetencion = new List <EntImpuestoRetencion>();

                if (comprobante.ConceptosIncluyenImpuestos)
                {
                    foreach (EntComprobanteDetalle detalle in detalles)
                    {
                        if (detalle.TasaTraIva.HasValue)
                        {
                            impuestosTraslado.Add(new EntImpuestoTraslado()
                            {
                                Tipo = "IVA", TasaOCuota = detalle.TasaTraIva.Value, Importe = detalle.ImporteTraIva.Value
                            });
                        }
                        if (detalle.TasaTraIeps.HasValue)
                        {
                            impuestosTraslado.Add(new EntImpuestoTraslado()
                            {
                                Tipo = "IEPS", TasaOCuota = detalle.TasaTraIeps.Value, Importe = detalle.ImporteTraIeps.Value
                            });
                        }
                        if (detalle.TasaRetIva.HasValue)
                        {
                            impuestosRetencion.Add(new EntImpuestoRetencion()
                            {
                                Tipo = "IVA", TasaOCuota = detalle.TasaRetIva.Value, Importe = detalle.ImporteRetIva.Value
                            });
                        }
                        if (detalle.TasaRetIsr.HasValue)
                        {
                            impuestosRetencion.Add(new EntImpuestoRetencion()
                            {
                                Tipo = "ISR", TasaOCuota = detalle.TasaRetIsr.Value, Importe = detalle.ImporteRetIsr.Value
                            });
                        }
                    }
                }

                var impuestosTrasladoGroup = (from p in impuestosTraslado
                                              group p by new { p.Tipo, p.TasaOCuota }
                                              into grupo
                                              select new
                {
                    Tipo = grupo.Key.Tipo,
                    Tasa = grupo.Key.TasaOCuota,
                    Importe = grupo.Sum(x => x.Importe)
                }).ToList();

                var impuestosRetencionGroup = (from p in impuestosRetencion
                                               group p by new { p.Tipo, p.TasaOCuota }
                                               into grupo
                                               select new
                {
                    Tipo = grupo.Key.Tipo,
                    Tasa = grupo.Key.TasaOCuota,
                    Importe = grupo.Sum(x => x.Importe)
                }).ToList();

                if (!comprobante.EsPago)
                {
                    //Se registran los impuestos federales
                    CFDi.Impuestos = new ComprobanteImpuestos();

                    if (impuestosTrasladoGroup.Count > 0)
                    {
                        decimal totalImpuestosTrasladados = 0;
                        CFDi.Impuestos.Traslados = new ComprobanteImpuestosTraslado[impuestosTrasladoGroup.Count];

                        var i = 0;
                        foreach (var impuesto in impuestosTrasladoGroup)
                        {
                            CFDi.Impuestos.Traslados[i] = new ComprobanteImpuestosTraslado();
                            if (impuesto.Tipo == "IVA")
                            {
                                CFDi.Impuestos.Traslados[i].Impuesto   = "002";
                                CFDi.Impuestos.Traslados[i].TipoFactor = "Tasa";
                                CFDi.Impuestos.Traslados[i].TasaOCuota = impuesto.Tasa.ToString();
                                CFDi.Impuestos.Traslados[i].Importe    = impuesto.Importe.ToString("##0.00").ToDecimal();
                            }
                            if (impuesto.Tipo == "IEPS")
                            {
                                CFDi.Impuestos.Traslados[i].Impuesto   = "003";
                                CFDi.Impuestos.Traslados[i].TipoFactor = "Tasa";
                                CFDi.Impuestos.Traslados[i].TasaOCuota = impuesto.Tasa.ToString();
                                CFDi.Impuestos.Traslados[i].Importe    = impuesto.Importe.ToString("##0.00").ToDecimal();
                            }

                            totalImpuestosTrasladados += impuesto.Importe;
                            i++;
                        }

                        CFDi.Impuestos.TotalImpuestosTrasladados          = totalImpuestosTrasladados;
                        CFDi.Impuestos.TotalImpuestosTrasladadosSpecified = true;
                    }

                    if (impuestosRetencionGroup.Count > 0)
                    {
                        decimal totalImpuestosRetenidos = 0;
                        CFDi.Impuestos.Retenciones = new ComprobanteImpuestosRetencion[impuestosRetencionGroup.Count];

                        var i = 0;
                        foreach (var impuesto in impuestosRetencionGroup)
                        {
                            CFDi.Impuestos.Retenciones[i] = new ComprobanteImpuestosRetencion();
                            if (impuesto.Tipo == "IVA")
                            {
                                CFDi.Impuestos.Retenciones[i].Impuesto = "002";
                                CFDi.Impuestos.Retenciones[i].Importe  = impuesto.Importe.ToString("##0.00").ToDecimal();
                            }
                            if (impuesto.Tipo == "ISR")
                            {
                                CFDi.Impuestos.Retenciones[i].Impuesto = "001";
                                CFDi.Impuestos.Retenciones[i].Importe  = impuesto.Importe.ToString("##0.00").ToDecimal();
                            }

                            totalImpuestosRetenidos += impuesto.Importe;
                            i++;
                        }

                        CFDi.Impuestos.TotalImpuestosRetenidos          = totalImpuestosRetenidos;
                        CFDi.Impuestos.TotalImpuestosRetenidosSpecified = true;
                    }
                }

                // Se registran los complementos de la factura
                var xmlComplementos = new List <XmlElement>();

                // Complemento para pago
                if (comprobante.EsPago)
                {
                    var detallePago = new Profact.TimbraCFDI33.Complementos.Pagos10.PagosPago()
                    {
                        FechaPago            = comprobante.ComprobantesPagos.Fecha,
                        FormaDePagoP         = comprobante.ComprobantesPagos.FormaPago,
                        MonedaP              = comprobante.ComprobantesPagos.Moneda,
                        TipoCambioP          = comprobante.ComprobantesPagos.TipoCambio ?? comprobante.ComprobantesPagos.TipoCambio.ToDecimal(),
                        TipoCambioPSpecified = comprobante.ComprobantesPagos.TipoCambio != null,
                        Monto                = comprobante.ComprobantesPagos.Monto,
                        RfcEmisorCtaBen      = string.IsNullOrEmpty(comprobante.ComprobantesPagos.EmisorCuentaBenef) ? null : comprobante.ComprobantesPagos.EmisorCuentaBenef,
                        RfcEmisorCtaOrd      = string.IsNullOrEmpty(comprobante.ComprobantesPagos.EmisorCuentaOrigen) ? null : comprobante.ComprobantesPagos.EmisorCuentaOrigen,
                        CtaBeneficiario      = string.IsNullOrEmpty(comprobante.ComprobantesPagos.CuentaBeneficiaria) ? null : comprobante.ComprobantesPagos.CuentaBeneficiaria,
                        CtaOrdenante         = string.IsNullOrEmpty(comprobante.ComprobantesPagos.CuentaOrdenante) ? null : comprobante.ComprobantesPagos.CuentaOrdenante,
                        NomBancoOrdExt       = string.IsNullOrEmpty(comprobante.ComprobantesPagos.Banco) ? null : comprobante.ComprobantesPagos.Banco,
                        NumOperacion         = string.IsNullOrEmpty(comprobante.ComprobantesPagos.NumeroOperacion) ? null : comprobante.ComprobantesPagos.NumeroOperacion,
                        TipoCadPago          = string.IsNullOrEmpty(comprobante.ComprobantesPagos.TipoCadenaPago) ? null : comprobante.ComprobantesPagos.TipoCadenaPago,
                        TipoCadPagoSpecified = !string.IsNullOrEmpty(comprobante.ComprobantesPagos.TipoCadenaPago),
                        CadPago              = string.IsNullOrEmpty(comprobante.ComprobantesPagos.CadenaPago) ? null : comprobante.ComprobantesPagos.CadenaPago,
                        //CertPago
                        //SelloPago
                    };

                    var tieneComprobantesRelacionados = true;
                    if (tieneComprobantesRelacionados)
                    {
                        detallePago.DoctoRelacionado = new PagosPagoDoctoRelacionado[comprobante.ComprobantesPagos.DocumentosRelacionados.Count];
                        var i = 0;
                        foreach (var doc in comprobante.ComprobantesPagos.DocumentosRelacionados.ToList())
                        {
                            var doctoRelacionado = new Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoDoctoRelacionado()
                            {
                                IdDocumento               = doc.IdDocumento,
                                MonedaDR                  = doc.Moneda,
                                MetodoDePagoDR            = doc.MetodoPago,
                                NumParcialidad            = string.IsNullOrEmpty(doc.NumParcialidad.ToString()) ? null : doc.NumParcialidad.ToString(),
                                ImpSaldoAnt               = doc.ImpSaldoAnt ?? doc.ImpSaldoAnt.ToDecimal(),
                                ImpSaldoAntSpecified      = doc.ImpSaldoAnt != null,
                                ImpSaldoInsoluto          = doc.ImpSaldoInsoluto ?? doc.ImpSaldoInsoluto.ToDecimal(),
                                ImpSaldoInsolutoSpecified = doc.ImpSaldoInsoluto != null,
                                ImpPagado                 = doc.ImpPagado ?? doc.ImpPagado.ToDecimal(),
                                ImpPagadoSpecified        = doc.ImpPagado != null,
                                Folio                 = string.IsNullOrEmpty(doc.Folio) ? null : doc.Folio,
                                Serie                 = string.IsNullOrEmpty(doc.Serie) ? null : doc.Serie,
                                TipoCambioDR          = doc.TipoCambio ?? doc.TipoCambio.ToDecimal(),
                                TipoCambioDRSpecified = doc.TipoCambio != null
                            };

                            detallePago.DoctoRelacionado[i] = new PagosPagoDoctoRelacionado();
                            detallePago.DoctoRelacionado[i] = doctoRelacionado;
                            i++;
                        }
                    }

                    var pago = new Profact.TimbraCFDI33.Complementos.Pagos10.Pagos();
                    pago.Version = "1.0";
                    pago.Pago    = new PagosPago[1];
                    pago.Pago[0] = new PagosPago();
                    pago.Pago[0] = detallePago;

                    XmlSerializerNamespaces nsPagos = new XmlSerializerNamespaces();
                    nsPagos.Add("pago10", "http://www.sat.gob.mx/Pagos");
                    string xmlPagos = XMLUtilerias.SerializaObjeto(pago, typeof(Pagos), nsPagos);

                    XmlDocument docPago = new XmlDocument();
                    docPago.LoadXml(xmlPagos);

                    xmlComplementos.Add(docPago.DocumentElement);
                    CFDi.PagosSpecified = true;
                }

                // Impuestos locales
                //if (comprobante.ImpuestosLocales != null)
                //{
                //  if (comprobante.ImpuestosLocales.Count > 0)
                //  {
                //      XmlDocument impLocal = RegistrarImpuestosLocales(comprobante.ImpuestosLocales);
                //      xmlComplementos.Add(impLocal.DocumentElement);
                //      CFDi.ImpLocalSpecified = true;
                //  }
                //}

                // Se agregan los complementos
                if (xmlComplementos.Count > 0)
                {
                    CFDi.Complemento     = new Profact.TimbraCFDI33.ComprobanteComplemento();
                    CFDi.Complemento.Any = xmlComplementos.ToArray <XmlElement>();
                }

                //Timbramos el comprobante a traves de una petición al PAC
                var resultadoTimbre = conector.TimbraCFDI(CFDi);

                //Se mapean los resultados para ser devueltos por el servicio
                var resultado = new EntResultadoTimbrado
                {
                    Exitoso = resultadoTimbre.Exitoso,
                    Mensaje = resultadoTimbre.Descripcion
                };

                if (resultadoTimbre.Exitoso)
                {
                    resultado.FolioUuid          = resultadoTimbre.FolioUUID;           //2.- Folio fiscal
                    resultado.NoCertificado      = resultadoTimbre.No_Certificado;      //3.- No. Certificado del Emisor
                    resultado.NoCertificadoSat   = resultadoTimbre.No_Certificado_SAT;  //4.- No. Certificado del SAT
                    resultado.FechaCertificacion = resultadoTimbre.FechaCertificacion;  //5.- Fecha y Hora de certificación
                    resultado.SelloCfdi          = resultadoTimbre.SelloCFDI;           //6.- Sello del cfdi
                    resultado.SelloSat           = resultadoTimbre.SelloSAT;            //7.- Sello del SAT
                    resultado.CadenaTimbre       = resultadoTimbre.CadenaTimbre;        //8.- Cadena original de complemento de certificación
                    resultado.Xml      = resultadoTimbre.Xml;
                    resultado.CbbBytes = resultadoTimbre.CodigoBidimensional;
                }

                return(resultado);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw e.GetBaseException();
            }
        }