private List<Observacion> ObtenerObservaciones( CodigoDescripcionType[] obs )
        {
            List<Observacion> observaciones = new List<Observacion>();
            Observacion observacion;
            foreach ( CodigoDescripcionType item in obs )
            {
                if ( !string.IsNullOrEmpty( item.descripcion ) )
                {
                    observacion = new Observacion();
                    observacion.Codigo = item.codigo;
                    observacion.Mensaje = item.descripcion;
                    observaciones.Add( observacion );
                }
            }

            return observaciones;
        }
        public List<Observacion> Obtener(ClsFEXGetCMPR comprobanteAfip, FexCabecera cabFex)
        {
            List<string> diferencias = new List<string>();

            if ( comprobanteAfip.Fecha_cbte != cabFex.FechaComprobante )
            {
                diferencias.Add("La fecha no es la correcta.");
                diferencias.Add("Afip: " + comprobanteAfip.Fecha_cbte + " Enviado :" + cabFex.FechaComprobante);
            }

            if ( comprobanteAfip.Cbte_nro != cabFex.ComprobanteNumero )
            {
                diferencias.Add("El número no es el correcto.");
                diferencias.Add("Afip: " + comprobanteAfip.Cbte_nro + " Enviado :" + cabFex.ComprobanteNumero);
            }

            if ( comprobanteAfip.Incoterms !=  cabFex.ClausulaDeVenta )
            {
                diferencias.Add("El incoterms no es el correcto.");
                diferencias.Add("Afip: " + comprobanteAfip.Incoterms + " Enviado :" + cabFex.ClausulaDeVenta);
            }

            if (comprobanteAfip.Cuit_pais_cliente != cabFex.CuitPaisCliente)
            {
                diferencias.Add("El C.U.I.T. no es el correcto.");
                diferencias.Add("Afip: " + comprobanteAfip.Cuit_pais_cliente + " Enviado :" + cabFex.CuitPaisCliente);
            }

            if (comprobanteAfip.Imp_total != (decimal) cabFex.ImporteTotal)
            {
                diferencias.Add("El total no es correcto.");
                diferencias.Add("Afip: " + comprobanteAfip.Imp_total.ToString(CultureInfo.InvariantCulture.NumberFormat) + " Enviado :" + cabFex.ImporteTotal.ToString(CultureInfo.InvariantCulture.NumberFormat));
            }

            List<Observacion> observaciones = new List<Observacion>();
            Observacion observacion;

            for (int i = 0; i < diferencias.Count; i++)
            {
                observacion = new Observacion();
                observacion.Mensaje = diferencias[i];
                observaciones.Add( observacion );
            }

            return observaciones;
        }
        public List<Observacion> Convertir( Obs[] observaciones )
        {
            List<Observacion> obserResp = null;
            if ( observaciones != null )
            {
                obserResp = new List<Observacion>();
                Observacion obs;
                for ( int i = 0; i < observaciones.Length; i++ )
                {
                    obs = new Observacion();
                    obs.Codigo = observaciones[i].Code;
                    obs.Mensaje = observaciones[i].Msg;

                    obserResp.Add( obs );
                }
            }

            return obserResp;
        }
        private CAERespuestaFe Respuesta_UltimoComprobante( FeCabecera cabFe, int ultimoNro, Autorizacion autorizacion )
        {
            string numero = this.FormatearNumero( cabFe, ultimoNro );
            string tipoComprobante = this.consultas.ObtenerCodigoComprobante( autorizacion, cabFe.TipoComprobante );

            CAERespuestaFe Respuesta = new CAERespuestaFe();
            Respuesta.Cabecera = new CAECabeceraRespuesta();
            Respuesta.Detalle = new List<CAEDetalleRespuesta>();
            Respuesta.Cabecera.CantidadDeRegistros = 1;
            Respuesta.Cabecera.FechaProceso = DateTime.Today.ToString();
            Respuesta.Cabecera.PuntoDeVenta = cabFe.PuntoDeVenta;
            Respuesta.Cabecera.TipoComprobante = cabFe.TipoComprobante;
            Respuesta.Cabecera.Resultado = "R";
            CAEDetalleRespuesta Detalle = new CAEDetalleRespuesta();
            Detalle.Observaciones = new List<Observacion>();
            Observacion Obs = new Observacion();
            Detalle.Cae = "";
            Detalle.CaeFechaVencimiento = "";
            Detalle.Resultado = "R";
            Obs.Mensaje = "El próximo comprobante " + tipoComprobante + " a procesar debe ser el número " + numero;
            Detalle.Observaciones.Add( Obs );
            Respuesta.Detalle.Add( Detalle );
            return Respuesta;
        }
        public CAERespuestaFe ObtenerRespuestaVacia()
        {
            CAERespuestaFe retorno = new CAERespuestaFe();
            retorno.Detalle = new List<CAEDetalleRespuesta>();
            CAEDetalleRespuesta item = new CAEDetalleRespuesta();
            item.Observaciones = new List<Observacion>();
            Observacion obs = new Observacion();
            item.Observaciones.Add( obs );
            retorno.Detalle.Add( item );

            return retorno;
        }
        public CAERespuestaFex ObtenerRespuestaVaciaExportacion()
        {
            Observacion obs = new Observacion();
            CAERespuestaFex retorno = new CAERespuestaFex();
            retorno.Observaciones = new List<Observacion>();
            retorno.Observaciones.Add(obs);

            return retorno;
        }
        private List<Observacion> ConvertirObservaciones( FECompConsResponse origen )
        {
            List<Observacion> retorno = null;
            if ( origen.Observaciones != null && origen.Observaciones.Length > 0 )
            {
                retorno = new List<Observacion>();
                Observacion observacion;
                foreach ( Obs obser in origen.Observaciones )
                {
                    observacion = new Observacion();
                    observacion.Codigo = obser.Code;
                    observacion.Mensaje = obser.Msg;

                    retorno.Add( observacion );
                }
            }

            return retorno;
        }