Skip to content

Instalación

Antes de instalar el SDK, asegurate de tener:

  • .NET 10 SDK o superior (descargar)
  • Un certificado digital en formato .p12 / .pfx emitido por una CA reconocida por AGESIC
  • Un CAE vigente otorgado por DGI

UruFactura SDK se distribuye en dos variantes NuGet:

PaqueteDescripciónCuándo usarlo
UruFacturaSDKPaquete completo con generación de PDF A4 y térmico (QuestPDF + SkiaSharp + ZXing)Uso general
UruFacturaSDK.LiteSin dependencias de PDF. Incluye ICfePdfGenerator para inyectar tu propio generadorMicroservicios, Azure Functions, entornos con restricciones de peso

Terminal window
dotnet add package UruFacturaSDK

Después de instalar, verificá que el paquete esté disponible:

Terminal window
dotnet list package

Deberías ver algo como:

> UruFacturaSDK 1.0.0

  1. Importar los namespaces necesarios

    using UruFacturaSDK;
    using UruFacturaSDK.Configuration;
    using UruFacturaSDK.Models;
    using UruFacturaSDK.Enums;
  2. Crear la configuración del emisor

    var config = new UruFacturaConfig
    {
    RutEmisor = "210000000012", // 12 dígitos, sin puntos ni guión
    RazonSocialEmisor = "Mi Empresa S.A.",
    DomicilioFiscal = "Av. 18 de Julio 1234",
    Ciudad = "Montevideo",
    Departamento = "Montevideo",
    Ambiente = Ambiente.Homologacion, // ← Usar Homologacion para pruebas
    RutaCertificado = "/ruta/al/certificado.p12",
    PasswordCertificado = Environment.GetEnvironmentVariable("CERT_PASSWORD")!,
    };
  3. Instanciar el cliente

    // Todas las implementaciones predeterminadas, incluyendo PDF
    using var client = new UruFacturaClient(config);

    El cliente implementa IDisposable, por lo que se recomienda usarlo dentro de un bloque using.

  4. Registrar un CAE

    client.Cae.RegistrarCae(new Cae
    {
    NroSerie = "CAE2025001",
    TipoCfe = TipoCfe.ETicket,
    RangoDesde = 1,
    RangoHasta = 1000,
    FechaVencimiento = new DateOnly(2026, 12, 31),
    });

Integración con ASP.NET Core / Dependency Injection

Section titled “Integración con ASP.NET Core / Dependency Injection”

Si estás usando ASP.NET Core, podés registrar el cliente en el contenedor de DI:

Program.cs
builder.Services.AddSingleton<UruFacturaConfig>(sp =>
{
return new UruFacturaConfig
{
RutEmisor = builder.Configuration["UruFactura:RutEmisor"]!,
RazonSocialEmisor = builder.Configuration["UruFactura:RazonSocial"]!,
DomicilioFiscal = builder.Configuration["UruFactura:Domicilio"]!,
Ciudad = builder.Configuration["UruFactura:Ciudad"]!,
Departamento = builder.Configuration["UruFactura:Departamento"]!,
Ambiente = Enum.Parse<Ambiente>(builder.Configuration["UruFactura:Ambiente"]!),
RutaCertificado = builder.Configuration["UruFactura:RutaCertificado"]!,
PasswordCertificado = builder.Configuration["UruFactura:PasswordCertificado"]!,
};
});
// Registrar como IUruFacturaClient para inyección por interfaz
builder.Services.AddSingleton<IUruFacturaClient>(sp =>
{
var config = sp.GetRequiredService<UruFacturaConfig>();
return UruFacturaClientBuilder.WithDefaults(config)
.WithDefaultPdf() // omitir si usás UruFacturaSDK.Lite
.Build();
});
appsettings.json
{
"UruFactura": {
"RutEmisor": "210000000012",
"RazonSocial": "Mi Empresa S.A.",
"Domicilio": "Av. 18 de Julio 1234",
"Ciudad": "Montevideo",
"Departamento": "Montevideo",
"Ambiente": "Homologacion",
"RutaCertificado": "/ruta/al/certificado.p12"
}
}
// appsettings.Production.json (o secrets.json)
{
"UruFactura": {
"PasswordCertificado": "tu_contraseña_segura"
}
}