Uso Rápido
En esta guía vas a enviar tu primer e-Ticket a DGI (en ambiente de homologación) paso a paso.
Flujo completo de un CFE
Section titled “Flujo completo de un CFE”Configurar → Registrar CAE → Crear CFE → Generar XML → Firmar → Enviar → PDFPaso 1: Setup inicial
Section titled “Paso 1: Setup inicial”using UruFacturaSDK;using UruFacturaSDK.Models;using UruFacturaSDK.Enums;
var config = new UruFacturaConfig{ RutEmisor = "210000000012", RazonSocialEmisor = "Mi Empresa S.A.", DomicilioFiscal = "Av. 18 de Julio 1234", Ciudad = "Montevideo", Departamento = "Montevideo", Ambiente = Ambiente.Homologacion, RutaCertificado = "/ruta/al/certificado.p12", PasswordCertificado = Environment.GetEnvironmentVariable("CERT_PASSWORD")!,};
// Constructor de conveniencia (paquete completo — incluye PDF por defecto)// using var client = new UruFacturaClient(config);
// Alternativa recomendada con el builder fluido:using var client = UruFacturaClientBuilder.WithDefaults(config) .WithDefaultPdf() // disponible solo en UruFacturaSDK (no en Lite) .Build();Paso 2: Registrar el CAE
Section titled “Paso 2: Registrar el CAE”El CAE define el rango de numeración autorizado por DGI para cada tipo de CFE.
client.Cae.RegistrarCae(new Cae{ NroSerie = "CAE2025001", TipoCfe = TipoCfe.ETicket, RangoDesde = 1, RangoHasta = 1000, FechaVencimiento = new DateOnly(2026, 12, 31),});Paso 3: Crear el comprobante
Section titled “Paso 3: Crear el comprobante”var eticket = client.CrearETicket();eticket.Numero = 1;
eticket.Detalle.Add(new LineaDetalle{ NroLinea = 1, NombreItem = "Servicio de consultoría", Cantidad = 1, PrecioUnitario = 5000m, IndFactIva = TipoIva.Basico,});var efactura = client.CrearEFactura();efactura.Numero = 1;
efactura.Receptor = new Receptor{ Documento = "210000000013", TipoDocumento = TipoDocumentoReceptor.Rut, RazonSocial = "Empresa Compradora S.A.", Direccion = "Bulevar España 2345", Ciudad = "Montevideo",};
efactura.Detalle.Add(new LineaDetalle{ NroLinea = 1, NombreItem = "Producto A", Cantidad = 10, PrecioUnitario = 500m, IndFactIva = TipoIva.Basico,});
efactura.Detalle.Add(new LineaDetalle{ NroLinea = 2, NombreItem = "Producto B", Cantidad = 5, PrecioUnitario = 200m, IndFactIva = TipoIva.Minimo,});var nc = client.CrearNotaCreditoETicket();nc.Numero = 1;
// Referenciar el comprobante originalnc.Referencias.Add(new RefCfe{ TipoCfe = TipoCfe.ETicket, Serie = "A", NroCfe = 42, FechaCfe = new DateTime(2025, 6, 15), Razon = "Devolución de mercadería",});
nc.Detalle.Add(new LineaDetalle{ NroLinea = 1, NombreItem = "Devolución - Producto X", Cantidad = 2, PrecioUnitario = 300m, IndFactIva = TipoIva.Basico,});Paso 4: Enviar a DGI
Section titled “Paso 4: Enviar a DGI”var respuesta = await client.EnviarCfeAsync(eticket);
if (respuesta.Exitoso){ Console.WriteLine($"✅ Aceptado: {respuesta.Mensaje}");}else{ Console.WriteLine($"❌ Rechazado [{respuesta.Codigo}]: {respuesta.Mensaje}");}Paso 5: Generar representación impresa (PDF)
Section titled “Paso 5: Generar representación impresa (PDF)”// PDF A4 (para envío por email o archivo)byte[] pdfA4 = client.GenerarPdfA4(eticket);await File.WriteAllBytesAsync("eticket_001_a4.pdf", pdfA4);
// PDF Térmico 80mm (para impresión en punto de venta)byte[] pdfTermico = client.GenerarPdfTermico(eticket);await File.WriteAllBytesAsync("eticket_001_termico.pdf", pdfTermico);Envío del Reporte Diario
Section titled “Envío del Reporte Diario”DGI exige enviar un reporte diario con todos los CFE emitidos en la jornada.
var resultado = await client.EnviarReporteDiarioAsync( DateTime.Today, new[] { eticket });
Console.WriteLine($"Reporte diario: {resultado.Respuesta.Mensaje}");Consultar estado de un CFE
Section titled “Consultar estado de un CFE”var estado = await client.ConsultarEstadoCfeAsync(eticket);Console.WriteLine($"Estado DGI: {estado.Mensaje}");Código completo de ejemplo
Section titled “Código completo de ejemplo”using UruFacturaSDK;using UruFacturaSDK.Models;using UruFacturaSDK.Enums;
// Configurarvar config = new UruFacturaConfig{ RutEmisor = "210000000012", RazonSocialEmisor = "Mi Empresa S.A.", DomicilioFiscal = "Av. 18 de Julio 1234", Ciudad = "Montevideo", Departamento = "Montevideo", Ambiente = Ambiente.Homologacion, RutaCertificado = "/ruta/certificado.p12", PasswordCertificado = Environment.GetEnvironmentVariable("CERT_PASSWORD")!,};
using var client = new UruFacturaClient(config);
// Registrar CAEclient.Cae.RegistrarCae(new Cae{ NroSerie = "CAE2025001", TipoCfe = TipoCfe.ETicket, RangoDesde = 1, RangoHasta = 1000, FechaVencimiento = new DateOnly(2026, 12, 31),});
// Crear e-Ticketvar eticket = client.CrearETicket();eticket.Numero = 1;eticket.Detalle.Add(new LineaDetalle{ NroLinea = 1, NombreItem = "Consultoría técnica", Cantidad = 3, PrecioUnitario = 2000m, IndFactIva = TipoIva.Basico,});
// Enviarvar respuesta = await client.EnviarCfeAsync(eticket);
if (respuesta.Exitoso){ // Guardar PDF byte[] pdf = client.GenerarPdfA4(eticket); await File.WriteAllBytesAsync($"eticket_{eticket.Numero:D8}.pdf", pdf);
// Enviar reporte diario await client.EnviarReporteDiarioAsync(DateTime.Today, new[] { eticket });
Console.WriteLine("✅ Proceso completado exitosamente.");}else{ Console.Error.WriteLine($"❌ Error: {respuesta.Mensaje}");}Próximos pasos
Section titled “Próximos pasos” Gestión de CAE Cómo monitorear y renovar CAEs antes de que venzan.
Certificación DGI Proceso de homologación y habilitación en producción.
Migración desde otro proveedor ¿Venís de otra solución? Esta guía es para vos.