private static Schemasv32.t_InformacionAduanera[] GetInformacionAduanera(IniFileHandler iniHandler, string seccion) { int cantidadPedimentos = Convert.ToInt32(iniHandler.Requerido(seccion, "cantidadPedimentos")); if (cantidadPedimentos == 0) { return(null); } Schemasv32.t_InformacionAduanera[] result = new Schemasv32.t_InformacionAduanera[cantidadPedimentos]; for (int i = 0; i < cantidadPedimentos; i++) { string pedimentoSection = String.Format("InformacionAduaneranumero{0}", (i + 1)); string fechaSection = String.Format("InformacionAduanerafecha{0}", (i + 1)); string aduanaSection = String.Format("InformacionAduaneraaduana{0}", (i + 1)); result[i] = new Schemasv32.t_InformacionAduanera { numero = iniHandler.Requerido(seccion, pedimentoSection), fecha = iniHandler.RequeridoFecha(seccion, fechaSection), aduana = iniHandler.Opcional(seccion, aduanaSection), }; } return(result); }
Schemasv33modif.ComprobanteConceptoParte[] GetConceptoPartes(IniFileHandler iniHandler, string seccion) { if (!iniHandler.Existe(seccion, "CantidadPartes")) { return(null); } int cantidadPartes = Convert.ToInt32(iniHandler.Requerido(seccion, "CantidadPartes")); if (cantidadPartes == 0) { return(null); } Schemasv33modif.ComprobanteConceptoParte[] result = new Schemasv33modif.ComprobanteConceptoParte[cantidadPartes]; for (int i = 0; i < cantidadPartes; i++) { string parteSection = string.Format("Parte{0}", (i + 1)); string claveProdSection = string.Format("{0}ClaveProdServ", parteSection); string noIdentificacionSection = string.Format("{0}NoIdentificacion", parteSection); string cantidadSection = string.Format("{0}Cantidad", parteSection); string claveUnidadSection = string.Format("{0}ClaveUnidad", parteSection); string unidadSection = string.Format("{0}Unidad", parteSection); string descripcionSection = string.Format("{0}Descripcion", parteSection); string valorUnitarioSection = string.Format("{0}ValorUnitario", parteSection); string importeSection = string.Format("{0}Importe", parteSection); result[i] = new Schemasv33modif.ComprobanteConceptoParte { InformacionAduanera = GetParteInformacionAduanera(iniHandler, seccion, parteSection), ClaveProdServ = iniHandler.Requerido(seccion, claveProdSection), NoIdentificacion = iniHandler.Opcional(seccion, noIdentificacionSection), Cantidad = iniHandler.RequeridoDecimal(seccion, cantidadSection), Unidad = iniHandler.Opcional(seccion, unidadSection), Descripcion = iniHandler.Requerido(seccion, descripcionSection), ValorUnitario = iniHandler.OpcionalDecimal(seccion, valorUnitarioSection), ValorUnitarioSpecified = iniHandler.Existe(seccion, valorUnitarioSection), Importe = iniHandler.OpcionalDecimal(seccion, importeSection), ImporteSpecified = iniHandler.Existe(seccion, importeSection) }; } return(result); }
Schemasv33modif.ComprobanteConceptoParteInformacionAduanera[] GetParteInformacionAduanera(IniFileHandler iniHandler, string seccion, string parte) { int cantidadPedimentos = Convert.ToInt32(iniHandler.Requerido(seccion, string.Format("{0}CantidadPedimentos", parte))); if (cantidadPedimentos == 0) { return(null); } Schemasv33modif.ComprobanteConceptoParteInformacionAduanera[] result = new Schemasv33modif.ComprobanteConceptoParteInformacionAduanera[cantidadPedimentos]; for (int i = 0; i < cantidadPedimentos; i++) { string pedimentoSection = String.Format("{0}InformacionAduaneraNumeroPedimento{1}", parte, (i + 1)); result[i] = new Schemasv33modif.ComprobanteConceptoParteInformacionAduanera { NumeroPedimento = iniHandler.Requerido(seccion, pedimentoSection) }; } return(result); }
Schemasv33modif.ComprobanteCfdiRelacionadosCfdiRelacionado[] GetCfdiRelacionados(IniFileHandler iniHandler, int cantidadCfdiRelacionados) { if (cantidadCfdiRelacionados == 0) { return(null); } Schemasv33modif.ComprobanteCfdiRelacionadosCfdiRelacionado[] result = new Schemasv33modif.ComprobanteCfdiRelacionadosCfdiRelacionado[cantidadCfdiRelacionados]; for (int i = 0; i < cantidadCfdiRelacionados; i++) { string seccion = String.Format("CfdiRelacionado{0}", (i + 1)); result[i] = new Schemasv33modif.ComprobanteCfdiRelacionadosCfdiRelacionado { UUID = iniHandler.Requerido(seccion, "UUID") }; } return(result); }
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 }
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); }
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 }
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 }