/// <summary>
 /// Crea una instancia de un <see cref="Comprobante"/> con sus atributos obligatorios y opcionales especificadno un tipo de cambio y moneda
 /// </summary>
 public Comprobante(string serie, string folio, DateTime fecha, string sello, string formaDePago,
                    string noCertificado, string certificado, string condicionesDePago, double subTotal,
                    string TipoCambio, string Moneda, double total, TipoDeComprobante tipoDeComprobante,
                    string metodoDePago, string LugarExpedicion, Emisor emisor, Receptor receptor)
 {
     if (emisor == null)
     {
         throw new Exception("Comprobante::Comprobante. Emisor no puede ser nulo");
     }
     if (receptor == null)
     {
         throw new Exception("Comprobante::Comprobante. Receptor no puede ser nulo");
     }
     atributos.Add("version", DEFAULT_VERSION);
     atributos.Add("serie", serie);
     atributos.Add("folio", folio);
     atributos.Add("fecha", Conversiones.DateTimeFechaISO8601(fecha));
     atributos.Add("sello", sello);
     atributos.Add("formaDePago", formaDePago);
     atributos.Add("noCertificado", noCertificado);
     atributos.Add("certificado", certificado);
     atributos.Add("condicionesDePago", condicionesDePago);
     atributos.Add("subTotal", subTotal.ToString("#.000000"));
     atributos.Add("TipoCambio", TipoCambio);
     atributos.Add("Moneda", Moneda);
     atributos.Add("total", total.ToString("#.000000"));
     atributos.Add("tipoDeComprobante", tipoDeComprobante.ToString().ToLower());
     atributos.Add("metodoDePago", metodoDePago);
     atributos.Add("LugarExpedicion", LugarExpedicion);
     this.emisor   = emisor;
     this.receptor = receptor;
 }
        /// <summary>
        /// Crea una instancia de un <see cref="Comprobante"/> con sus atributos minimos obligatorios
        /// </summary>
        public Comprobante(DateTime fecha, string formaDePago,  
	                      double subTotal, double total, TipoDeComprobante tipoDeComprobante, 
	                      string metodoDePago, string LugarExpedicion, Emisor emisor, Receptor receptor)
        {
            if(emisor == null)
             throw new Exception("Comprobante::Comprobante. Emisor no puede ser nulo");
              if(receptor == null)
             throw new Exception("Comprobante::Comprobante. Receptor no puede ser nulo");
              atributos.Add("version", DEFAULT_VERSION);
              atributos.Add("fecha", Conversiones.DateTimeFechaISO8601(fecha));
              atributos.Add("formaDePago", formaDePago);
              atributos.Add("subTotal", subTotal.ToString("#.000000"));
              atributos.Add("total", total.ToString("#.000000"));
              atributos.Add("tipoDeComprobante", tipoDeComprobante.ToString().ToLower());
              atributos.Add("metodoDePago", metodoDePago);
              atributos.Add("LugarExpedicion", LugarExpedicion);
              this.emisor = emisor;
              this.receptor = receptor;
        }
 /// <summary>
 /// Crea una instancia de un <see cref="Comprobante"/> con sus atributos minimos obligatorios
 /// </summary>
 public Comprobante(DateTime fecha, string formaDePago,
                    double subTotal, double total, TipoDeComprobante tipoDeComprobante,
                    string metodoDePago, string LugarExpedicion, Emisor emisor, Receptor receptor)
 {
     if (emisor == null)
     {
         throw new Exception("Comprobante::Comprobante. Emisor no puede ser nulo");
     }
     if (receptor == null)
     {
         throw new Exception("Comprobante::Comprobante. Receptor no puede ser nulo");
     }
     atributos.Add("version", DEFAULT_VERSION);
     atributos.Add("fecha", Conversiones.DateTimeFechaISO8601(fecha));
     atributos.Add("formaDePago", formaDePago);
     atributos.Add("subTotal", subTotal.ToString("#.000000"));
     atributos.Add("total", total.ToString("#.000000"));
     atributos.Add("tipoDeComprobante", tipoDeComprobante.ToString().ToLower());
     atributos.Add("metodoDePago", metodoDePago);
     atributos.Add("LugarExpedicion", LugarExpedicion);
     this.emisor   = emisor;
     this.receptor = receptor;
 }
        /// <summary>
        /// Crea una instancia de un <see cref="Comprobante"/> con sus atributos obligatorios y opcionales especificadno un tipo de cambio y moneda
        /// </summary>
        public Comprobante(string serie, string folio, DateTime fecha, string sello, string formaDePago, 
	                      string noCertificado,string certificado, string condicionesDePago, double subTotal, 
	                      string TipoCambio, string Moneda, double total,TipoDeComprobante tipoDeComprobante, 
	                      string metodoDePago, string LugarExpedicion, Emisor emisor, Receptor receptor)
        {
            if(emisor == null)
             throw new Exception("Comprobante::Comprobante. Emisor no puede ser nulo");
              if(receptor == null)
             throw new Exception("Comprobante::Comprobante. Receptor no puede ser nulo");
              atributos.Add("version", DEFAULT_VERSION);
              atributos.Add("serie", serie);
              atributos.Add("folio", folio);
              atributos.Add("fecha", Conversiones.DateTimeFechaISO8601(fecha));
              atributos.Add("sello", sello);
              atributos.Add("formaDePago", formaDePago);
              atributos.Add("noCertificado", noCertificado);
              atributos.Add("certificado", certificado);
              atributos.Add("condicionesDePago", condicionesDePago);
              atributos.Add("subTotal", subTotal.ToString("#.000000"));
              atributos.Add("TipoCambio", TipoCambio);
              atributos.Add("Moneda", Moneda);
              atributos.Add("total", total.ToString("#.000000"));
              atributos.Add("tipoDeComprobante", tipoDeComprobante.ToString().ToLower());
              atributos.Add("metodoDePago", metodoDePago);
              atributos.Add("LugarExpedicion", LugarExpedicion);
              this.emisor = emisor;
              this.receptor = receptor;
        }