Skip to content

API Reference

La fachada principal del SDK. Punto de entrada para todas las operaciones.

ConstructorPaqueteDescripción
UruFacturaClient(UruFacturaConfig config)CompletoCrea el cliente con PDF predeterminado (QuestPDF)
UruFacturaClient(UruFacturaConfig config, ICfePdfGenerator? pdfGenerator)AmbosCrea el cliente con generador PDF personalizado o null
UruFacturaClient(config, xmlBuilder, firmante, caeManager, soapClient, pdfGenerator)AmbosConstructor principal con todas las dependencias — usado por el builder
MétodoRetornaDescripción
CrearETicket()Cfee-Ticket (CFE 101)
CrearNotaCreditoETicket()CfeNota de Crédito e-Ticket (102)
CrearNotaDebitoETicket()CfeNota de Débito e-Ticket (103)
CrearEFactura()Cfee-Factura (111)
CrearNotaCreditoEFactura()CfeNota de Crédito e-Factura (112)
CrearNotaDebitoEFactura()CfeNota de Débito e-Factura (113)
CrearEFacturaExportacion()Cfee-Factura Exportación (121)
CrearNotaCreditoEFacturaExportacion()CfeNC e-Factura Exportación (122)
CrearNotaDebitoEFacturaExportacion()CfeND e-Factura Exportación (123)
CrearERemitoDespachante()Cfee-Remito Despachante (131)
CrearEResguardo()Cfee-Resguardo (151)
CrearERemito()Cfee-Remito (181)
CrearNotaCreditoERemito()CfeNC e-Remito (182)
MétodoFirmaDescripción
GenerarXmlstring GenerarXml(Cfe cfe)Genera el XML sin firmar y lo guarda en cfe.XmlSinFirmar.
FirmarCfestring FirmarCfe(Cfe cfe)Firma el CFE con XAdES-BES y guarda el resultado en cfe.XmlFirmado.
GenerarYFirmarstring GenerarYFirmar(Cfe cfe)Genera XML y lo firma con XAdES-BES. Retorna el XML firmado.
EnviarCfeAsyncTask<RespuestaDgi> EnviarCfeAsync(Cfe cfe, CancellationToken cancellationToken = default)Genera, firma y envía el CFE a DGI.
ConsultarEstadoCfeAsyncTask<RespuestaDgi> ConsultarEstadoCfeAsync(Cfe cfe, CancellationToken cancellationToken = default)Consulta el estado de un CFE ya enviado.
EnviarReporteDiarioAsyncTask<RespuestaReporteDiario> EnviarReporteDiarioAsync(DateTime fecha, IEnumerable<Cfe> cfes, CancellationToken cancellationToken = default)Envía el reporte diario a DGI.
GenerarPdfA4byte[] GenerarPdfA4(Cfe cfe)Genera representación impresa A4 en PDF. Requiere ICfePdfGenerator configurado.
GenerarPdfTermicobyte[] GenerarPdfTermico(Cfe cfe)Genera representación térmica 80mm en PDF. Requiere ICfePdfGenerator configurado.
PropiedadTipoDescripción
CaeICaeManagerGestor de CAEs del emisor

Builder fluido para construir un UruFacturaClient con pleno control sobre cada dependencia.

// Caso habitual — paquete completo con PDF predeterminado:
using var client = UruFacturaClientBuilder.WithDefaults(config)
.WithDefaultPdf()
.Build();
// Paquete Lite — sin PDF, o con generador personalizado:
using var client = UruFacturaClientBuilder.WithDefaults(config)
.WithPdfGenerator(miGeneradorPdf) // opcional
.Build();
// Tests — reemplazar solo lo que interesa:
using var client = UruFacturaClientBuilder.WithDefaults(config)
.WithCaeManager(miCaeMock)
.WithSoapClient(miSoapMock)
.Build();
MétodoDescripción
WithDefaults(UruFacturaConfig config)(static) Crea el builder con todas las implementaciones predeterminadas
WithXmlBuilder(ICfeXmlBuilder)Reemplaza el generador de XML
WithSigner(ICfeFirmante)Reemplaza el firmante digital
WithCaeManager(ICaeManager)Reemplaza el gestor de CAEs
WithSoapClient(IDgiSoapClient)Reemplaza el cliente SOAP hacia DGI
WithHttpClient(HttpClient)Inyecta un HttpClient externo (recomendado en APIs de alto tráfico con IHttpClientFactory)
WithPdfGenerator(ICfePdfGenerator?)Establece el generador de PDF (puede ser null)
WithDefaultPdf()Agrega el generador PDF predeterminado (solo UruFacturaSDK, no Lite)
Build()Construye y retorna el UruFacturaClient

Configuración del cliente SDK.

public record UruFacturaConfig
{
public string RutEmisor { get; init; }
public string RazonSocialEmisor { get; init; }
public string? NombreComercialEmisor { get; init; }
public string? Giro { get; init; }
public string DomicilioFiscal { get; init; }
public string Ciudad { get; init; }
public string Departamento { get; init; }
public string RutaCertificado { get; init; }
public string PasswordCertificado { get; init; }
public Ambiente Ambiente { get; init; }
public int SoapTimeoutSegundos { get; init; } // default: 30
public bool OmitirValidacionSsl { get; init; } // default: false
public string DgiSoapBaseUrl { get; } // según Ambiente
}

Ver Configuración para detalles de cada propiedad.


Todas las dependencias internas del cliente tienen interfaces para facilitar el testing y la extensibilidad:

InterfazImplementaciónDescripción
ICaeManagerCaeManagerGestión de CAEs — thread-safe
ICfePdfGeneratorCfePdfGeneratorGeneración de PDF A4 y térmico (solo paquete completo)
ICfeQrGeneratorCfeQrGeneratorGeneración del código QR DGI
ICfeFirmanteCfeFirmanteFirma XAdES-BES del XML
ICfeXmlBuilderCfeXmlBuilderSerialización del XML según esquema DGI
IDgiSoapClientDgiSoapClientTransporte SOAP hacia DGI

Clase base de todos los comprobantes. No se instancia directamente — usá los métodos de fábrica de UruFacturaClient.

PropiedadTipoDescripción
NumerolongNúmero del comprobante (dentro del rango CAE)
FechaEmisionDateOnlyFecha de emisión (default: DateOnly.FromDateTime(DateTime.Today))
DetalleList<LineaDetalle>Líneas de detalle del comprobante
ReferenciasList<RefCfe>Referencias a comprobantes (para NC/ND)

Representa una línea de ítem en el comprobante.

PropiedadTipoRequeridoDescripción
NroLineaintNúmero de línea (secuencial desde 1)
NombreItemstringDescripción del producto o servicio
CantidaddecimalCantidad
PrecioUnitariodecimalPrecio unitario sin IVA
IndFactIvaTipoIvaIndicador de IVA (Basico, Minimo, Exento, Suspendido)
DescuentoMontodecimalMonto de descuento por línea (sin IVA)
DescuentoPorcentajedecimal?Porcentaje de descuento
RecargoMontodecimalMonto de recargo por línea (sin IVA)

Datos del receptor del comprobante (requerido para e-Factura).

PropiedadTipoRequeridoDescripción
Documentostring?RUT u otro documento del receptor
TipoDocumentoTipoDocumentoReceptorTipo de documento del receptor
RazonSocialstring?Razón social del receptor
Direccionstring?Domicilio del receptor
Ciudadstring?Ciudad del receptor
Departamentostring?Departamento del receptor
Paisstring?País del receptor (para exportación)
Emailstring?Email del receptor

Constancia de Autorización de Emisión.

PropiedadTipoRequeridoDescripción
NroSeriestringNúmero de serie del CAE
TipoCfeTipoCfeTipo de CFE al que aplica
RangoDesdelongPrimer número autorizado
RangoHastalongÚltimo número autorizado
FechaVencimientoDateOnlyFecha de vencimiento del CAE
UltimoNroUsadolongÚltimo número emitido dentro del rango (solo lectura en instancias en uso)
EsVigentebooltrue si la fecha actual es anterior o igual a FechaVencimiento
TieneNumerosDisponiblesbooltrue si UltimoNroUsado < RangoHasta
PorcentajeUsodecimalPorcentaje del rango utilizado (0–100)

Referencia a otro comprobante (usado en notas de crédito/débito).

PropiedadTipoDescripción
TipoCfeTipoCfeTipo del CFE referenciado
SeriestringSerie del CFE referenciado
NroCfelongNúmero del CFE referenciado
FechaCfeDateTimeFecha del CFE referenciado
Razonstring?Motivo de la nota de crédito/débito

Respuesta del servidor DGI tras el envío de un CFE.

PropiedadTipoDescripción
Exitosobooltrue si el código es 00 o 01
CodigostringCódigo de respuesta DGI
MensajestringDescripción de la respuesta
FechaRespuestaDateTimeTimestamp UTC de la respuesta
XmlRespuestastring?XML de respuesta en bruto (opcional)

Resultado del envío del reporte diario.

PropiedadTipoDescripción
FechaReporteDateTimeFecha del reporte enviado
CantidadCfeintCantidad de CFE incluidos en el reporte
RespuestaRespuestaDgiResultado de la operación

public enum Ambiente
{
Homologacion, // Pruebas — endpoint DGI de homologación
Produccion, // Real — endpoint DGI de producción
}
public enum TipoCfe
{
ETicket = 101,
NotaCreditoETicket = 102,
NotaDebitoETicket = 103,
EFactura = 111,
NotaCreditoEFactura = 112,
NotaDebitoEFactura = 113,
EFacturaExportacion = 121,
NotaCreditoEFacturaExportacion = 122,
NotaDebitoEFacturaExportacion = 123,
ERemitoDespachante = 131,
EResguardo = 151,
ERemito = 181,
NotaCreditoERemito = 182,
}
public enum TipoIva
{
Exento = 1, // Sin IVA
Minimo = 2, // IVA 10%
Basico = 3, // IVA 22%
Suspendido = 4, // IVA suspendido
}
public enum TipoDocumentoReceptor
{
Rut = 2, // RUT — empresa o contribuyente uruguayo
CedulaIdentidad = 3, // Cédula de Identidad
Pasaporte = 4, // Pasaporte
DocumentoExterior = 5, // Documento de identidad del exterior
}
public enum Moneda
{
PesoUruguayo = 0, // Código interno DGI para moneda local
DolarAmericano = 840, // ISO 4217
Euro = 978, // ISO 4217
}
public enum FormaPago
{
Contado = 1,
Credito = 2,
}

Obligatorio para e-Remito (181) y e-Remito Despachante (131).

public enum IndTraslado
{
TrasladoPropio = 1, // Traslado entre depósitos/locales del mismo emisor
TrasladoEnComision = 2, // Traslado en comisión
Devolucion = 3, // Devolución al proveedor
TrasladoPorVenta = 4, // Traslado por venta
TrasladoEnConsignacion = 5, // Traslado en consignación
TrasladoPorExposicion = 6, // Traslado por exposición / feria
}

CaeManager implementa ICaeManager. La propiedad client.Cae expone ICaeManager, lo que permite mockear la gestión de CAEs en tests de aplicaciones consumidoras. Esta implementación es thread-safe.

Gestiona los CAEs registrados en el cliente. Accedido a través de client.Cae.

MétodoFirmaDescripción
RegistrarCaevoid RegistrarCae(Cae cae)Registra un nuevo CAE
RegistrarCaesvoid RegistrarCaes(IEnumerable<Cae> caes)Registra múltiples CAEs
ObtenerProximoNumero(Cae, long) ObtenerProximoNumero(TipoCfe tipoCfe)Retorna el próximo número disponible e incrementa el contador
ObtenerCaeActivoCae? ObtenerCaeActivo(TipoCfe tipoCfe)Retorna el CAE activo para el tipo indicado
ObtenerAdvertenciasIReadOnlyList<string> ObtenerAdvertencias(int diasAlertaVencimiento = 7, decimal porcentajeAlertaUso = 80m)Retorna advertencias de vencimiento/agotamiento
ObtenerTodosLosCaesIReadOnlyList<Cae> ObtenerTodosLosCaes()Retorna todos los CAEs registrados
ObtenerCaesActivosIReadOnlyList<Cae> ObtenerCaesActivos()Retorna los CAEs vigentes con números disponibles
ResumenEstadostring ResumenEstado()Texto con el estado de todos los CAEs

ExcepciónDescripción
UruFacturaExceptionExcepción base del SDK
CaeExceptionError relacionado con el CAE (vencido, agotado, no encontrado)
FirmaDigitalExceptionError al firmar el XML (certificado inválido o inaccesible)
DgiCommunicationExceptionError en la comunicación con DGI
CfeValidationExceptionEl CFE contiene errores de validación (propiedad Errors con detalle)
PdfGenerationExceptionError al generar el PDF del comprobante