Skip to content

Configuración

UruFacturaConfig es un record inmutable que se pasa al construir el cliente. El constructor la valida (lanza UruFacturaException con todos los errores) y carga el certificado, así que una configuración incorrecta falla al iniciar la aplicación y no al emitir.

using var client = new UruFacturaClient(config);

Propiedad Tipo Requerido Descripción
Rut string ✅ RUT del emisor: 12 dígitos con dígito verificador válido (ej: "219999820013")
RazonSocial string ✅ Razón social (hasta 150 caracteres)
DomicilioFiscal string ✅ Domicilio fiscal (hasta 70)
Ciudad / Departamento string ✅ Hasta 30 caracteres cada uno
NombreComercial string? — Nombre de fantasía (hasta 30)
Giro string? — Actividad económica (hasta 100)
CodigoSucursal int — CdgDGISucur asignado por la DGI (1-9999, default 1)
Sucursal string? — Nombre de la sucursal (EmiSucursal, hasta 20)
Telefonos IReadOnlyList<string> — Hasta 2, de hasta 20 caracteres
Correo / InfoAdicional string? — Correo (hasta 80) e información adicional (hasta 150)
FechaIncorporacion string? — Leyenda “Fecha emisor” del pie impreso (fecha o Res. N/año)
UrlVerificacion string? — Sitio de verificación impreso en los e-Tickets (por defecto el de la DGI)

Un Cfe puede usar otro emisor (por ejemplo, otra sucursal) con Emisor = config.Emisor with { CodigoSucursal = 3 }; el RUT tiene que ser el mismo.

Propiedad Tipo Descripción
RutaCertificado string? Ruta del .p12 / .pfx
PasswordCertificado string? Su contraseña
Certificado X509Certificate2? Certificado ya cargado, con clave privada (Azure Key Vault, HSM, …). Tiene prioridad sobre la ruta; el cliente no lo libera

Se requiere uno de los dos. Un archivo inexistente, una contraseña incorrecta o un certificado sin clave privada lanzan FirmaDigitalException al construir el cliente.

Propiedad Tipo Default Descripción
Ambiente Ambiente Homologacion Ambiente de la DGI
UrlEnvio string? servicio de prueba URL de ws_efactura (sobres, reporte diario, estado del envío). Obligatoria en Producción
UrlConsultas string? servicio de prueba URL de ws_consultas (estado de un CFE). Obligatoria en Producción
AlgoritmoFirma AlgoritmoFirma Sha256 Firma del CFE y de WS-Security (Sha1 si la DGI rechaza SHA-256)
Timeout TimeSpan 30 s Timeout de las llamadas a la DGI
OmitirValidacionSsl bool false Deshabilita la validación TLS del servidor. Solo en Homologación con una CA no reconocida: en Producción la configuración no es válida
ValorUnidadIndexada decimal? — Si se informa, los e-Tickets con neto mayor a 5.000 UI deben identificar al receptor
Ambiente Servicios
Ambiente.Homologacion Envío: https://efactura.dgi.gub.uy:6443/ePrueba/ws_eprueba · Consultas: https://efactura.dgi.gub.uy:6460/ePrueba/ws_consultasPrueba
Ambiente.Produccion Configurar UrlEnvio y UrlConsultas con las URL que entrega la DGI al habilitar el ambiente

var produccion = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Production";
var config = new UruFacturaConfig
{
Emisor = new Emisor
{
Rut = "219999820013",
RazonSocial = "Mi Empresa S.A.",
DomicilioFiscal = "Av. 18 de Julio 1234, Apto. 201",
Ciudad = "Montevideo",
Departamento = "Montevideo",
Telefonos = ["29001234"],
},
RutaCertificado = Environment.GetEnvironmentVariable("CERT_PATH"),
PasswordCertificado = Environment.GetEnvironmentVariable("CERT_PASSWORD"),
Ambiente = produccion ? Ambiente.Produccion : Ambiente.Homologacion,
// Obligatorias en Producción; en Homologación, si quedan vacías, se usan los servicios de prueba.
UrlEnvio = Environment.GetEnvironmentVariable("DGI_URL_ENVIO"),
UrlConsultas = Environment.GetEnvironmentVariable("DGI_URL_CONSULTAS"),
};

La configuración se puede leer con el binder de .NET (las propiedades init se completan igual):

{
"UruFactura": {
"Emisor": {
"Rut": "219999820013",
"RazonSocial": "Mi Empresa S.A.",
"DomicilioFiscal": "Av. 18 de Julio 1234",
"Ciudad": "Montevideo",
"Departamento": "Montevideo"
},
"Ambiente": "Homologacion",
"RutaCertificado": "/ruta/al/certificado.p12",
"Timeout": "00:00:45"
}
}
// Program.cs — la contraseña llega por User Secrets o por la variable de entorno
// UruFactura__PasswordCertificado, que el binder lee igual que el appsettings.
var config = builder.Configuration.GetSection("UruFactura").Get<UruFacturaConfig>()!;
builder.Services.AddSingleton<IUruFacturaClient>(_ => new UruFacturaClient(config));