Example #1
0
        Schemasv33modif.ComprobanteImpuestosTraslado[] GetImpuestosTraslado(IniFileHandler iniHandler, string seccion)
        {
            int cantidadImpuestosTraslado = Convert.ToInt32(_iniFac.Requerido("Impuestos", "CantidadTraslados"));

            if (cantidadImpuestosTraslado == 0)
            {
                return(null);
            }
            Schemasv33modif.ComprobanteImpuestosTraslado[] result = new Schemasv33modif.ComprobanteImpuestosTraslado[cantidadImpuestosTraslado];
            for (int i = 0; i < cantidadImpuestosTraslado; i++)
            {
                string impuestoSection   = String.Format("ImpuestosTraslado{0}Impuesto", (i + 1));
                string tipoFactorSection = String.Format("ImpuestosTraslado{0}TipoFactor", (i + 1));
                string tasaOCuotaSection = String.Format("ImpuestosTraslado{0}TasaOCuota", (i + 1));
                string importeSection    = String.Format("ImpuestosTraslado{0}Importe", (i + 1));

                result[i] = new Schemasv33modif.ComprobanteImpuestosTraslado
                {
                    Impuesto   = iniHandler.RequeridoEnum <Schemasv33modif.c_Impuesto>(seccion, impuestoSection),
                    TipoFactor = iniHandler.RequeridoEnum <Schemasv33modif.c_TipoFactor>(seccion, tipoFactorSection),
                    TasaOCuota = iniHandler.RequeridoEnum <Schemasv33modif.c_TasaOCuota>(seccion, tasaOCuotaSection),
                    Importe    = iniHandler.RequeridoDecimal(seccion, importeSection),
                };
            }
            return(result);
        }
Example #2
0
        Schemasv33modif.ComprobanteImpuestosRetencion[] GetImpuestosRetencion(IniFileHandler iniHandler, string seccion)
        {
            int cantidadImpuestosRetencion = Convert.ToInt32(_iniFac.Requerido("Impuestos", "CantidadRetenciones"));

            if (cantidadImpuestosRetencion == 0)
            {
                return(null);
            }

            Schemasv33modif.ComprobanteImpuestosRetencion[] result = new Schemasv33modif.ComprobanteImpuestosRetencion[cantidadImpuestosRetencion];
            for (int i = 0; i < cantidadImpuestosRetencion; i++)
            {
                string impuestoSection = String.Format("ImpuestosRetencion{0}Impuesto", (i + 1));
                string importeSection  = String.Format("ImpuestosRetencion{0}Importe", (i + 1));
                result[i] = new Schemasv33modif.ComprobanteImpuestosRetencion
                {
                    Impuesto = iniHandler.RequeridoEnum <Schemasv33modif.c_Impuesto>(seccion, impuestoSection),
                    Importe  = iniHandler.RequeridoDecimal(seccion, importeSection),
                };
            }
            return(result);
        }
Example #3
0
        private void GeneraComprobante()
        {
            #region Información del comprobante
            _comprobante = new Schemasv33modif.Comprobante
            {
                Version             = "3.3",
                Serie               = _iniFac.Opcional("Generales", "Serie"),
                Folio               = _iniFac.Opcional("Generales", "Folio"),
                Fecha               = _iniFac.RequeridoFecha("Generales", "Fecha"),
                FormaPago           = _iniFac.OpcionalEnum <Schemasv33modif.c_FormaPago>("Generales", "FormaPago"),
                FormaPagoSpecified  = _iniFac.Existe("Generales", "FormaPago"),
                NoCertificado       = _iniFac.Requerido("Generales", "NoCertificado"),
                CondicionesDePago   = _iniFac.Opcional("Generales", "CondicionesDePago"),
                SubTotal            = _iniFac.RequeridoDecimal("Generales", "SubTotal"),
                Descuento           = _iniFac.OpcionalDecimal("Generales", "Descuento"),
                DescuentoSpecified  = _iniFac.Existe("Generales", "Descuento"),
                Moneda              = _iniFac.RequeridoEnum <Schemasv33modif.c_Moneda>("Generales", "Moneda"),
                TipoCambio          = _iniFac.OpcionalDecimal("Generales", "TipoCambio"),
                TipoCambioSpecified = _iniFac.Existe("Generales", "TipoCambio"),
                Total               = _iniFac.RequeridoDecimal("Generales", "Total"),
                TipoDeComprobante   = _iniFac.RequeridoEnum <Schemasv33modif.c_TipoDeComprobante>(
                    "Generales", "TipoDeComprobante"),
                MetodoPago          = _iniFac.OpcionalEnum <Schemasv33modif.c_MetodoPago>("Generales", "MetodoPago"),
                MetodoPagoSpecified = _iniFac.Existe("Generales", "MetodoPago"),
                //LugarExpedicion = _iniFac.RequeridoEnum<Schemasv33modif.c_CodigoPostal>("Generales", "LugarExpedicion"),
                LugarExpedicion = _iniFac.Requerido("Generales", "LugarExpedicion"),
                Confirmacion    = _iniFac.Opcional("Generales", "Confirmacion")
            };
            #endregion

            #region Cfdi Relacionados
            int CantidadCfdiRelacionados = Convert.ToInt32(_iniFac.Requerido("CfdiRelacionados", "CantidadCfdiRelacionados"));
            if (CantidadCfdiRelacionados > 0)
            {
                _comprobante.CfdiRelacionados = new Schemasv33modif.ComprobanteCfdiRelacionados
                {
                    CfdiRelacionado = GetCfdiRelacionados(_iniFac, CantidadCfdiRelacionados),
                    TipoRelacion    = _iniFac.RequeridoEnum <Schemasv33modif.c_TipoRelacion>("CfdiRelacionados", "TipoRelacion")
                };
            }
            #endregion

            #region Emisor
            _comprobante.Emisor = new Schemasv33modif.ComprobanteEmisor
            {
                Rfc           = _iniFac.Requerido("Emisor", "Rfc"),
                Nombre        = _iniFac.Opcional("Emisor", "Nombre"),
                RegimenFiscal = _iniFac.RequeridoEnum <Schemasv33modif.c_RegimenFiscal>("Emisor", "RegimenFiscal")
            };
            #endregion

            #region Receptor
            _comprobante.Receptor = new Schemasv33modif.ComprobanteReceptor
            {
                Rfc                       = _iniFac.Requerido("Receptor", "Rfc"),
                Nombre                    = _iniFac.Opcional("Receptor", "Nombre"),
                ResidenciaFiscal          = _iniFac.OpcionalEnum <Schemasv33modif.c_Pais>("Receptor", "ResidenciaFiscal"), // Requerido si se incluye Compl ComercExt
                ResidenciaFiscalSpecified = _iniFac.Existe("Receptor", "ResidenciaFiscal"),
                NumRegIdTrib              = _iniFac.Opcional("Receptor", "NumRegIdTrib"),                                  // Requerido si se incluye Compl ComercExt
                UsoCFDI                   = _iniFac.RequeridoEnum <Schemasv33modif.c_UsoCFDI>("Receptor", "UsoCFDI")
            };
            #endregion

            #region Conceptos
            int CantidadConceptos =
                Convert.ToInt32(_iniFac.Requerido("Conceptos", "CantidadConceptos"));
            _comprobante.Conceptos = new Schemasv33modif.ComprobanteConcepto[CantidadConceptos];
            for (int i = 0; i < CantidadConceptos; i++)
            {
                string conceptoSection = String.Format("Concepto{0}", (i + 1));
                _comprobante.Conceptos[i] = new Schemasv33modif.ComprobanteConcepto
                {
                    Impuestos           = GetConceptoImpuestos(_iniFac, conceptoSection),
                    InformacionAduanera = GetInformacionAduanera(_iniFac, conceptoSection),
                    Parte = GetConceptoPartes(_iniFac, conceptoSection),
                    //ClaveProdServ = _iniFac.RequeridoEnum<Schemasv33modif.c_ClaveProdServ>(conceptoSection, "ClaveProdServ"),
                    ClaveProdServ      = _iniFac.Requerido(conceptoSection, "ClaveProdServ"),
                    NoIdentificacion   = _iniFac.Opcional(conceptoSection, "NoIdentificacion"),  // CodBarras o SKU o similar
                    Cantidad           = _iniFac.RequeridoDecimal(conceptoSection, "Cantidad"),
                    ClaveUnidad        = _iniFac.RequeridoEnum <Schemasv33modif.c_ClaveUnidad>(conceptoSection, "ClaveUnidad"),
                    Unidad             = _iniFac.Opcional(conceptoSection, "Unidad"),
                    Descripcion        = _iniFac.Requerido(conceptoSection, "Descripcion"),
                    ValorUnitario      = _iniFac.RequeridoDecimal(conceptoSection, "ValorUnitario"),
                    Importe            = _iniFac.RequeridoDecimal(conceptoSection, "Importe"),
                    Descuento          = _iniFac.OpcionalDecimal(conceptoSection, "Descuento"),
                    DescuentoSpecified = _iniFac.Existe(conceptoSection, "Descuento")
                };
            }
            #endregion

            #region Impuestos
            int cantidadTraslados   = Convert.ToInt32(_iniFac.Requerido("Impuestos", "CantidadTraslados"));
            int cantidadRetenciones = Convert.ToInt32(_iniFac.Requerido("Impuestos", "CantidadRetenciones"));
            if (cantidadRetenciones > 0 || cantidadTraslados > 0)
            {
                _comprobante.Impuestos = new Schemasv33modif.ComprobanteImpuestos
                {
                    Retenciones                        = GetImpuestosRetencion(_iniFac, "Impuestos"),
                    Traslados                          = GetImpuestosTraslado(_iniFac, "Impuestos"),
                    TotalImpuestosRetenidos            = _iniFac.OpcionalDecimal("Impuestos", "TotalImpuestosRetenidos"),
                    TotalImpuestosRetenidosSpecified   = _iniFac.Existe("Impuestos", "TotalImpuestosRetenidos"),
                    TotalImpuestosTrasladados          = _iniFac.OpcionalDecimal("Impuestos", "TotalImpuestosTrasladados"),
                    TotalImpuestosTrasladadosSpecified = _iniFac.Existe("Impuestos", "TotalImpuestosTrasladados")
                };
            }
            #endregion
        }
Example #4
0
        Schemasv33modif.ComprobanteConceptoImpuestos GetConceptoImpuestos(IniFileHandler iniHandler, string seccion)
        {
            int cantidadTraslados   = Convert.ToInt32(iniHandler.Requerido(seccion, "CantidadTraslados"));
            int cantidadRetenciones = Convert.ToInt32(iniHandler.Requerido(seccion, "CantidadRetenciones"));

            if (cantidadRetenciones == 0 && cantidadTraslados == 0)
            {
                return(null);
            }

            Schemasv33modif.ComprobanteConceptoImpuestosTraslado[]  traslados   = new Schemasv33modif.ComprobanteConceptoImpuestosTraslado[cantidadTraslados];
            Schemasv33modif.ComprobanteConceptoImpuestosRetencion[] retenciones = new Schemasv33modif.ComprobanteConceptoImpuestosRetencion[cantidadRetenciones];

            if (cantidadTraslados > 0)
            {
                for (int i = 0; i < cantidadTraslados; i++)
                {
                    string baseSection       = String.Format("ImpuestosTraslado{0}Base", (i + 1));
                    string impuestoSection   = String.Format("ImpuestosTraslado{0}Impuesto", (i + 1));
                    string tipoFactorSection = String.Format("ImpuestosTraslado{0}TipoFactor", (i + 1));
                    string tasaOCuotaSection = String.Format("ImpuestosTraslado{0}TasaOCuota", (i + 1));
                    string importeSection    = String.Format("ImpuestosTraslado{0}Importe", (i + 1));
                    traslados[i] = new Schemasv33modif.ComprobanteConceptoImpuestosTraslado
                    {
                        Base                = iniHandler.RequeridoDecimal(seccion, baseSection),
                        Impuesto            = iniHandler.RequeridoEnum <Schemasv33modif.c_Impuesto>(seccion, impuestoSection),
                        TipoFactor          = iniHandler.RequeridoEnum <Schemasv33modif.c_TipoFactor>(seccion, tipoFactorSection),
                        TasaOCuota          = iniHandler.OpcionalEnum <Schemasv33modif.c_TasaOCuota>(seccion, tasaOCuotaSection),
                        TasaOCuotaSpecified = iniHandler.Existe(seccion, tasaOCuotaSection),
                        Importe             = iniHandler.OpcionalDecimal(seccion, importeSection),
                        ImporteSpecified    = iniHandler.Existe(seccion, importeSection)
                    };
                }
            }
            else
            {
                traslados = null;
            }
            if (cantidadRetenciones > 0)
            {
                for (int i = 0; i < cantidadRetenciones; i++)
                {
                    string baseSection       = String.Format("ImpuestosRetencion{0}Base", (i + 1));
                    string impuestoSection   = String.Format("ImpuestosRetencion{0}Impuesto", (i + 1));
                    string tipoFactorSection = String.Format("ImpuestosRetencion{0}TipoFactor", (i + 1));
                    string tasaOCuotaSection = String.Format("ImpuestosRetencion{0}TasaOCuota", (i + 1));
                    string importeSection    = String.Format("ImpuestosRetencion{0}Importe", (i + 1));
                    retenciones[i] = new Schemasv33modif.ComprobanteConceptoImpuestosRetencion
                    {
                        Base       = iniHandler.RequeridoDecimal(seccion, baseSection),
                        Impuesto   = iniHandler.RequeridoEnum <Schemasv33modif.c_Impuesto>(seccion, impuestoSection),
                        TipoFactor = iniHandler.RequeridoEnum <Schemasv33modif.c_TipoFactor>(seccion, tipoFactorSection),
                        TasaOCuota = iniHandler.OpcionalDecimal(seccion, tasaOCuotaSection),
                        Importe    = iniHandler.OpcionalDecimal(seccion, importeSection)
                    };
                }
            }
            else
            {
                retenciones = null;
            }

            Schemasv33modif.ComprobanteConceptoImpuestos result = new Schemasv33modif.ComprobanteConceptoImpuestos
            {
                Traslados   = traslados,
                Retenciones = retenciones
            };
            return(result);
        }
Example #5
0
        private void GeneraComprobante()
        {
            #region Información del comprobante

            _comprobante = new Schemasv32.Comprobante
            {
                version            = "3.2",
                serie              = _iniFac.Opcional("Generales", "serie"),
                folio              = _iniFac.Opcional("Generales", "folio"),
                fecha              = _iniFac.RequeridoFecha("Generales", "fecha"),
                formaDePago        = _iniFac.Requerido("Generales", "formaDePago"),
                noCertificado      = _iniFac.Requerido("Generales", "noCertificado"),
                condicionesDePago  = _iniFac.Opcional("Generales", "condicionesDePago"),
                subTotal           = _iniFac.RequeridoDecimal("Generales", "subTotal"),
                descuento          = _iniFac.OpcionalDecimal("Generales", "descuento"),
                descuentoSpecified = _iniFac.Existe("Generales", "descuento"),
                motivoDescuento    = null,
                // Opcional
                TipoCambio        = _iniFac.Opcional("Generales", "TipoCambio"),
                Moneda            = _iniFac.Opcional("Generales", "Moneda"),
                total             = _iniFac.RequeridoDecimal("Generales", "total"),
                tipoDeComprobante = _iniFac.RequeridoEnum <Schemasv32.ComprobanteTipoDeComprobante>(
                    "Generales", "tipoDeComprobante"),
                metodoDePago    = _iniFac.Requerido("Generales", "metodoDePago"),
                LugarExpedicion = _iniFac.Requerido("Generales", "LugarExpedicion"),
                // Datos opcionales para Ver32
                NumCtaPago           = _iniFac.Opcional("Generales", "NumCtaPago"),
                FolioFiscalOrig      = null,
                SerieFolioFiscalOrig = null,
                //FechaFolioFiscalOrig = null,
                FechaFolioFiscalOrigSpecified = false,
                MontoFolioFiscalOrig          = 0,
                MontoFolioFiscalOrigSpecified = false,
            };

            #endregion

            #region Emisor

            _comprobante.Emisor = new Schemasv32.ComprobanteEmisor
            {
                rfc    = _iniFac.Requerido("Emisor", "rfc"),
                nombre = _iniFac.Opcional("Emisor", "nombre"),     // de Requerido a Opcional

                DomicilioFiscal = new Schemasv32.t_UbicacionFiscal // Opcional
                {
                    calle      = _iniFac.Requerido("EmisorDomicilioFiscal", "calle"),
                    noExterior =
                        _iniFac.Opcional("EmisorDomicilioFiscal", "noExterior"),
                    noInterior =
                        _iniFac.Opcional("EmisorDomicilioFiscal", "noInterior"),
                    colonia   = _iniFac.Opcional("EmisorDomicilioFiscal", "colonia"),
                    localidad =
                        _iniFac.Opcional("EmisorDomicilioFiscal", "localidad"),
                    referencia =
                        _iniFac.Opcional("EmisorDomicilioFiscal", "referencia"),
                    municipio =
                        _iniFac.Requerido("EmisorDomicilioFiscal", "municipio"),
                    estado       = _iniFac.Requerido("EmisorDomicilioFiscal", "estado"),
                    pais         = _iniFac.Requerido("EmisorDomicilioFiscal", "pais"),
                    codigoPostal =
                        _iniFac.Requerido("EmisorDomicilioFiscal", "codigoPostal")
                },
                ExpedidoEn = new Schemasv32.t_Ubicacion // Opcional
                {
                    calle        = _iniFac.Opcional("EmisorExpedidoEn", "calle"),
                    noExterior   = _iniFac.Opcional("EmisorExpedidoEn", "noExterior"),
                    noInterior   = _iniFac.Opcional("EmisorExpedidoEn", "noInterior"),
                    colonia      = _iniFac.Opcional("EmisorExpedidoEn", "colonia"),
                    localidad    = _iniFac.Opcional("EmisorExpedidoEn", "localidad"),
                    referencia   = _iniFac.Opcional("EmisorExpedidoEn", "referencia"),
                    municipio    = _iniFac.Opcional("EmisorExpedidoEn", "municipio"),
                    estado       = _iniFac.Opcional("EmisorExpedidoEn", "estado"),
                    pais         = _iniFac.Requerido("EmisorExpedidoEn", "pais"),
                    codigoPostal = _iniFac.Opcional("EmisorExpedidoEn", "codigoPostal")
                }
            };
            int cantidadRegimenFiscal =     // Nuevo en Ver32
                                        Convert.ToInt32(_iniFac.Requerido("EmisorRegimenFiscal", "cantidadRegimenFiscal"));
            _comprobante.Emisor.RegimenFiscal = new Schemasv32.ComprobanteEmisorRegimenFiscal[cantidadRegimenFiscal];
            for (int i = 0; i < cantidadRegimenFiscal; i++)
            {
                string regimenFiscalSection = String.Format("regimenFiscal{0}", (i + 1));
                _comprobante.Emisor.RegimenFiscal[i] = new Schemasv32.ComprobanteEmisorRegimenFiscal
                {
                    Regimen = _iniFac.Requerido("EmisorRegimenFiscal", regimenFiscalSection)
                };
            }
            #endregion

            #region Receptor

            _comprobante.Receptor = new Schemasv32.ComprobanteReceptor
            {
                rfc       = _iniFac.Requerido("Receptor", "rfc"),
                nombre    = _iniFac.Opcional("Receptor", "nombre"),
                Domicilio = new Schemasv32.t_Ubicacion
                {
                    calle      = _iniFac.Opcional("ReceptorDomicilio", "calle"),
                    noExterior =
                        _iniFac.Opcional("ReceptorDomicilio", "noExterior"),
                    noInterior =
                        _iniFac.Opcional("ReceptorDomicilio", "noInterior"),
                    colonia      = _iniFac.Opcional("ReceptorDomicilio", "colonia"),
                    localidad    = _iniFac.Opcional("ReceptorDomicilio", "localidad"),
                    referencia   = _iniFac.Opcional("ReceptorDomicilio", "referencia"),
                    municipio    = _iniFac.Opcional("ReceptorDomicilio", "municipio"),
                    estado       = _iniFac.Opcional("ReceptorDomicilio", "estado"),
                    pais         = _iniFac.Requerido("ReceptorDomicilio", "pais"),
                    codigoPostal =
                        _iniFac.Opcional("ReceptorDomicilio", "codigoPostal")
                }
            };

            #endregion

            #region Conceptos

            int cantidadConceptos =
                Convert.ToInt32(_iniFac.Requerido("Conceptos", "cantidadConceptos"));
            _comprobante.Conceptos = new Schemasv32.ComprobanteConcepto[cantidadConceptos];
            for (int i = 0; i < cantidadConceptos; i++)
            {
                string conceptoSection = String.Format("Concepto{0}", (i + 1));
                _comprobante.Conceptos[i] = new Schemasv32.ComprobanteConcepto
                {
                    cantidad         = _iniFac.RequeridoDecimal(conceptoSection, "cantidad"),
                    unidad           = _iniFac.Requerido(conceptoSection, "unidad"),          // de Opcional a Requerido
                    noIdentificacion = _iniFac.Opcional(conceptoSection, "noIdentificacion"), // Opcional
                    descripcion      = _iniFac.Requerido(conceptoSection, "descripcion"),
                    valorUnitario    =
                        _iniFac.RequeridoDecimal(conceptoSection, "valorUnitario"),
                    importe = _iniFac.RequeridoDecimal(conceptoSection, "importe"),
                    Items   = GetInformacionAduanera(_iniFac, conceptoSection)
                };
            }

            #endregion

            #region Impuestos

            _comprobante.Impuestos = new Schemasv32.ComprobanteImpuestos
            {
                totalImpuestosRetenidos =
                    _iniFac.OpcionalDecimal("Impuestos", "totalImpuestosRetenidos"),
                totalImpuestosRetenidosSpecified =
                    _iniFac.Existe("Impuestos", "totalImpuestosRetenidos"),
                totalImpuestosTrasladados =
                    _iniFac.OpcionalDecimal("Impuestos", "totalImpuestosTrasladados"),
                totalImpuestosTrasladadosSpecified =
                    _iniFac.Existe("Impuestos", "totalImpuestosTrasladados"),
            };

            int cantidadRetenciones = _iniFac.OpcionalEntero("Traslados", "cantidadRetenciones");
            if (cantidadRetenciones > 0)
            {
                _comprobante.Impuestos.Retenciones =
                    new Schemasv32.ComprobanteImpuestosRetencion[cantidadRetenciones];

                for (int i = 0; i < cantidadRetenciones; i++)
                {
                    string retencionSection = String.Format("Retencion{0}", i + 1);
                    _comprobante.Impuestos.Retenciones[i] = new Schemasv32.ComprobanteImpuestosRetencion
                    {
                        impuesto = _iniFac.RequeridoEnum <Schemasv32.ComprobanteImpuestosRetencionImpuesto>
                                       (retencionSection, "impuesto"),
                        importe = _iniFac.RequeridoDecimal(retencionSection, "importe")
                    };
                }
            }

            int cantidadTraslados = _iniFac.OpcionalEntero("Traslados",
                                                           "cantidadTraslados");
            _comprobante.Impuestos.Traslados =
                new Schemasv32.ComprobanteImpuestosTraslado[cantidadTraslados];

            for (int i = 0; i < cantidadTraslados; i++)
            {
                string trasladoSection = String.Format("Traslado{0}", i + 1);
                _comprobante.Impuestos.Traslados[i] = new Schemasv32.ComprobanteImpuestosTraslado
                {
                    impuesto = _iniFac.RequeridoEnum <Schemasv32.ComprobanteImpuestosTrasladoImpuesto>
                                   (trasladoSection, "impuesto"),
                    tasa    = _iniFac.RequeridoDecimal(trasladoSection, "tasa"),
                    importe = _iniFac.RequeridoDecimal(trasladoSection, "importe")
                };
            }

            #endregion
        }
Example #6
0
        private void GeneraComprobante()
        {
            #region Información del comprobante

            _comprobante = new Schemasv3.Comprobante
            {
                version           = "3.0",
                serie             = _iniFac.Opcional("Generales", "serie"),
                folio             = _iniFac.Opcional("Generales", "folio"),
                fecha             = _iniFac.RequeridoFecha("Generales", "fecha"),
                formaDePago       = _iniFac.Requerido("Generales", "formaDePago"),
                noCertificado     = _iniFac.Requerido("Generales", "noCertificado"),
                condicionesDePago = null,
                // Opcional
                subTotal           = _iniFac.RequeridoDecimal("Generales", "subTotal"),
                descuento          = _iniFac.OpcionalDecimal("Generales", "descuento"),
                descuentoSpecified = _iniFac.Existe("Generales", "descuento"),
                motivoDescuento    = null,
                // Opcional
                TipoCambio        = _iniFac.Opcional("Generales", "TipoCambio"),
                Moneda            = _iniFac.Opcional("Generales", "Moneda"),
                total             = _iniFac.RequeridoDecimal("Generales", "total"),
                tipoDeComprobante = _iniFac.RequeridoEnum <Schemasv3.ComprobanteTipoDeComprobante>(
                    "Generales", "tipoDeComprobante")
            };

            #endregion

            #region Emisor

            _comprobante.Emisor = new Schemasv3.ComprobanteEmisor
            {
                rfc    = _iniFac.Requerido("Emisor", "rfc"),
                nombre = _iniFac.Requerido("Emisor", "nombre"),

                DomicilioFiscal = new Schemasv3.t_UbicacionFiscal // Requerido
                {
                    calle      = _iniFac.Requerido("EmisorDomicilioFiscal", "calle"),
                    noExterior =
                        _iniFac.Opcional("EmisorDomicilioFiscal", "noExterior"),
                    noInterior =
                        _iniFac.Opcional("EmisorDomicilioFiscal", "noInterior"),
                    colonia   = _iniFac.Opcional("EmisorDomicilioFiscal", "colonia"),
                    localidad =
                        _iniFac.Opcional("EmisorDomicilioFiscal", "localidad"),
                    referencia =
                        _iniFac.Opcional("EmisorDomicilioFiscal", "referencia"),
                    municipio =
                        _iniFac.Requerido("EmisorDomicilioFiscal", "municipio"),
                    estado       = _iniFac.Requerido("EmisorDomicilioFiscal", "estado"),
                    pais         = _iniFac.Requerido("EmisorDomicilioFiscal", "pais"),
                    codigoPostal =
                        _iniFac.Requerido("EmisorDomicilioFiscal", "codigoPostal")
                },
                ExpedidoEn = new Schemasv3.t_Ubicacion // Opcional
                {
                    calle        = _iniFac.Opcional("EmisorExpedidoEn", "calle"),
                    noExterior   = _iniFac.Opcional("EmisorExpedidoEn", "noExterior"),
                    noInterior   = _iniFac.Opcional("EmisorExpedidoEn", "noInterior"),
                    colonia      = _iniFac.Opcional("EmisorExpedidoEn", "colonia"),
                    localidad    = _iniFac.Opcional("EmisorExpedidoEn", "localidad"),
                    referencia   = _iniFac.Opcional("EmisorExpedidoEn", "referencia"),
                    municipio    = _iniFac.Opcional("EmisorExpedidoEn", "municipio"),
                    estado       = _iniFac.Opcional("EmisorExpedidoEn", "estado"),
                    pais         = _iniFac.Requerido("EmisorExpedidoEn", "pais"),
                    codigoPostal = _iniFac.Opcional("EmisorExpedidoEn", "codigoPostal")
                }
            };

            #endregion

            #region Receptor

            _comprobante.Receptor = new Schemasv3.ComprobanteReceptor
            {
                rfc       = _iniFac.Requerido("Receptor", "rfc"),
                nombre    = _iniFac.Opcional("Receptor", "nombre"),
                Domicilio = new Schemasv3.t_Ubicacion
                {
                    calle      = _iniFac.Opcional("ReceptorDomicilio", "calle"),
                    noExterior =
                        _iniFac.Opcional("ReceptorDomicilio", "noExterior"),
                    noInterior =
                        _iniFac.Opcional("ReceptorDomicilio", "noInterior"),
                    colonia      = _iniFac.Opcional("ReceptorDomicilio", "colonia"),
                    localidad    = _iniFac.Opcional("ReceptorDomicilio", "localidad"),
                    referencia   = _iniFac.Opcional("ReceptorDomicilio", "referencia"),
                    municipio    = _iniFac.Opcional("ReceptorDomicilio", "municipio"),
                    estado       = _iniFac.Opcional("ReceptorDomicilio", "estado"),
                    pais         = _iniFac.Requerido("ReceptorDomicilio", "pais"),
                    codigoPostal =
                        _iniFac.Opcional("ReceptorDomicilio", "codigoPostal")
                }
            };

            #endregion

            #region Conceptos

            int cantidadConceptos =
                Convert.ToInt32(_iniFac.Requerido("Conceptos", "cantidadConceptos"));
            _comprobante.Conceptos = new Schemasv3.ComprobanteConcepto[cantidadConceptos];
            for (int i = 0; i < cantidadConceptos; i++)
            {
                string conceptoSection = String.Format("Concepto{0}", (i + 1));
                _comprobante.Conceptos[i] = new Schemasv3.ComprobanteConcepto
                {
                    cantidad         = _iniFac.RequeridoDecimal(conceptoSection, "cantidad"),
                    unidad           = _iniFac.Opcional(conceptoSection, "unidad"),
                    noIdentificacion = null,
                    // Opcional
                    descripcion   = _iniFac.Requerido(conceptoSection, "descripcion"),
                    valorUnitario =
                        _iniFac.RequeridoDecimal(conceptoSection, "valorUnitario"),
                    importe = _iniFac.RequeridoDecimal(conceptoSection, "importe"),
                    Items   = GetInformacionAduanera(_iniFac, conceptoSection)
                };
            }

            #endregion

            #region Impuestos

            _comprobante.Impuestos = new Schemasv3.ComprobanteImpuestos
            {
                totalImpuestosRetenidos =
                    _iniFac.OpcionalDecimal("Impuestos", "totalImpuestosRetenidos"),
                totalImpuestosRetenidosSpecified =
                    _iniFac.Existe("Impuestos", "totalImpuestosRetenidos"),
                totalImpuestosTrasladados =
                    _iniFac.OpcionalDecimal("Impuestos", "totalImpuestosTrasladados"),
                totalImpuestosTrasladadosSpecified =
                    _iniFac.Existe("Impuestos", "totalImpuestosTrasladados"),
            };

            int cantidadTraslados = _iniFac.OpcionalEntero("Traslados",
                                                           "cantidadTraslados");

            _comprobante.Impuestos.Traslados =
                new Schemasv3.ComprobanteImpuestosTraslado[cantidadTraslados];

            for (int i = 0; i < cantidadTraslados; i++)
            {
                string trasladoSection = String.Format("Traslado{0}", i + 1);
                _comprobante.Impuestos.Traslados[i] = new Schemasv3.ComprobanteImpuestosTraslado
                {
                    impuesto = _iniFac.RequeridoEnum <Schemasv3.ComprobanteImpuestosTrasladoImpuesto>
                                   (trasladoSection, "impuesto"),
                    tasa    = _iniFac.RequeridoDecimal(trasladoSection, "tasa"),
                    importe = _iniFac.RequeridoDecimal(trasladoSection, "importe")
                };
            }

            // TODO: Faltan los impuestos retenidos (opcional)

            #endregion
        }