Skip to content

Uso Rápido

En esta guía vas a enviar tu primer e-Ticket a DGI (en ambiente de homologación) paso a paso.

Configurar → Registrar CAE → Crear CFE → Generar XML → Firmar → Enviar → PDF

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();

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),
});

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 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);

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}");

var estado = await client.ConsultarEstadoCfeAsync(eticket);
Console.WriteLine($"Estado DGI: {estado.Mensaje}");

using UruFacturaSDK;
using UruFacturaSDK.Models;
using UruFacturaSDK.Enums;
// Configurar
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/certificado.p12",
PasswordCertificado = Environment.GetEnvironmentVariable("CERT_PASSWORD")!,
};
using var client = new UruFacturaClient(config);
// Registrar CAE
client.Cae.RegistrarCae(new Cae
{
NroSerie = "CAE2025001",
TipoCfe = TipoCfe.ETicket,
RangoDesde = 1,
RangoHasta = 1000,
FechaVencimiento = new DateOnly(2026, 12, 31),
});
// Crear e-Ticket
var 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,
});
// Enviar
var 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}");
}