API Reference
UruFacturaClient
Section titled “UruFacturaClient”La fachada principal del SDK. Punto de entrada para todas las operaciones.
Constructores
Section titled “Constructores”| Constructor | Paquete | Descripción |
|---|---|---|
UruFacturaClient(UruFacturaConfig config) | Completo | Crea el cliente con PDF predeterminado (QuestPDF) |
UruFacturaClient(UruFacturaConfig config, ICfePdfGenerator? pdfGenerator) | Ambos | Crea el cliente con generador PDF personalizado o null |
UruFacturaClient(config, xmlBuilder, firmante, caeManager, soapClient, pdfGenerator) | Ambos | Constructor principal con todas las dependencias — usado por el builder |
Métodos de creación de CFE
Section titled “Métodos de creación de CFE”| Método | Retorna | Descripción |
|---|---|---|
CrearETicket() | Cfe | e-Ticket (CFE 101) |
CrearNotaCreditoETicket() | Cfe | Nota de Crédito e-Ticket (102) |
CrearNotaDebitoETicket() | Cfe | Nota de Débito e-Ticket (103) |
CrearEFactura() | Cfe | e-Factura (111) |
CrearNotaCreditoEFactura() | Cfe | Nota de Crédito e-Factura (112) |
CrearNotaDebitoEFactura() | Cfe | Nota de Débito e-Factura (113) |
CrearEFacturaExportacion() | Cfe | e-Factura Exportación (121) |
CrearNotaCreditoEFacturaExportacion() | Cfe | NC e-Factura Exportación (122) |
CrearNotaDebitoEFacturaExportacion() | Cfe | ND e-Factura Exportación (123) |
CrearERemitoDespachante() | Cfe | e-Remito Despachante (131) |
CrearEResguardo() | Cfe | e-Resguardo (151) |
CrearERemito() | Cfe | e-Remito (181) |
CrearNotaCreditoERemito() | Cfe | NC e-Remito (182) |
Métodos de operación
Section titled “Métodos de operación”| Método | Firma | Descripción |
|---|---|---|
GenerarXml | string GenerarXml(Cfe cfe) | Genera el XML sin firmar y lo guarda en cfe.XmlSinFirmar. |
FirmarCfe | string FirmarCfe(Cfe cfe) | Firma el CFE con XAdES-BES y guarda el resultado en cfe.XmlFirmado. |
GenerarYFirmar | string GenerarYFirmar(Cfe cfe) | Genera XML y lo firma con XAdES-BES. Retorna el XML firmado. |
EnviarCfeAsync | Task<RespuestaDgi> EnviarCfeAsync(Cfe cfe, CancellationToken cancellationToken = default) | Genera, firma y envía el CFE a DGI. |
ConsultarEstadoCfeAsync | Task<RespuestaDgi> ConsultarEstadoCfeAsync(Cfe cfe, CancellationToken cancellationToken = default) | Consulta el estado de un CFE ya enviado. |
EnviarReporteDiarioAsync | Task<RespuestaReporteDiario> EnviarReporteDiarioAsync(DateTime fecha, IEnumerable<Cfe> cfes, CancellationToken cancellationToken = default) | Envía el reporte diario a DGI. |
GenerarPdfA4 | byte[] GenerarPdfA4(Cfe cfe) | Genera representación impresa A4 en PDF. Requiere ICfePdfGenerator configurado. |
GenerarPdfTermico | byte[] GenerarPdfTermico(Cfe cfe) | Genera representación térmica 80mm en PDF. Requiere ICfePdfGenerator configurado. |
Propiedades
Section titled “Propiedades”| Propiedad | Tipo | Descripción |
|---|---|---|
Cae | ICaeManager | Gestor de CAEs del emisor |
UruFacturaClientBuilder
Section titled “UruFacturaClientBuilder”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étodos del builder
Section titled “Métodos del builder”| Método | Descripció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 |
UruFacturaConfig
Section titled “UruFacturaConfig”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.
Interfaces de dependencias
Section titled “Interfaces de dependencias”Todas las dependencias internas del cliente tienen interfaces para facilitar el testing y la extensibilidad:
| Interfaz | Implementación | Descripción |
|---|---|---|
ICaeManager | CaeManager | Gestión de CAEs — thread-safe |
ICfePdfGenerator | CfePdfGenerator | Generación de PDF A4 y térmico (solo paquete completo) |
ICfeQrGenerator | CfeQrGenerator | Generación del código QR DGI |
ICfeFirmante | CfeFirmante | Firma XAdES-BES del XML |
ICfeXmlBuilder | CfeXmlBuilder | Serialización del XML según esquema DGI |
IDgiSoapClient | DgiSoapClient | Transporte SOAP hacia DGI |
Modelos de datos
Section titled “Modelos de datos”Cfe (clase base)
Section titled “Cfe (clase base)”Clase base de todos los comprobantes. No se instancia directamente — usá los métodos de fábrica de UruFacturaClient.
| Propiedad | Tipo | Descripción |
|---|---|---|
Numero | long | Número del comprobante (dentro del rango CAE) |
FechaEmision | DateOnly | Fecha de emisión (default: DateOnly.FromDateTime(DateTime.Today)) |
Detalle | List<LineaDetalle> | Líneas de detalle del comprobante |
Referencias | List<RefCfe> | Referencias a comprobantes (para NC/ND) |
LineaDetalle
Section titled “LineaDetalle”Representa una línea de ítem en el comprobante.
| Propiedad | Tipo | Requerido | Descripción |
|---|---|---|---|
NroLinea | int | ✅ | Número de línea (secuencial desde 1) |
NombreItem | string | ✅ | Descripción del producto o servicio |
Cantidad | decimal | ✅ | Cantidad |
PrecioUnitario | decimal | ✅ | Precio unitario sin IVA |
IndFactIva | TipoIva | ✅ | Indicador de IVA (Basico, Minimo, Exento, Suspendido) |
DescuentoMonto | decimal | — | Monto de descuento por línea (sin IVA) |
DescuentoPorcentaje | decimal? | — | Porcentaje de descuento |
RecargoMonto | decimal | — | Monto de recargo por línea (sin IVA) |
Receptor
Section titled “Receptor”Datos del receptor del comprobante (requerido para e-Factura).
| Propiedad | Tipo | Requerido | Descripción |
|---|---|---|---|
Documento | string? | ✅ | RUT u otro documento del receptor |
TipoDocumento | TipoDocumentoReceptor | ✅ | Tipo de documento del receptor |
RazonSocial | string? | ✅ | Razón social del receptor |
Direccion | string? | — | Domicilio del receptor |
Ciudad | string? | — | Ciudad del receptor |
Departamento | string? | — | Departamento del receptor |
Pais | string? | — | País del receptor (para exportación) |
Email | string? | — | Email del receptor |
Constancia de Autorización de Emisión.
| Propiedad | Tipo | Requerido | Descripción |
|---|---|---|---|
NroSerie | string | ✅ | Número de serie del CAE |
TipoCfe | TipoCfe | ✅ | Tipo de CFE al que aplica |
RangoDesde | long | ✅ | Primer número autorizado |
RangoHasta | long | ✅ | Último número autorizado |
FechaVencimiento | DateOnly | ✅ | Fecha de vencimiento del CAE |
UltimoNroUsado | long | — | Último número emitido dentro del rango (solo lectura en instancias en uso) |
EsVigente | bool | — | true si la fecha actual es anterior o igual a FechaVencimiento |
TieneNumerosDisponibles | bool | — | true si UltimoNroUsado < RangoHasta |
PorcentajeUso | decimal | — | Porcentaje del rango utilizado (0–100) |
RefCfe
Section titled “RefCfe”Referencia a otro comprobante (usado en notas de crédito/débito).
| Propiedad | Tipo | Descripción |
|---|---|---|
TipoCfe | TipoCfe | Tipo del CFE referenciado |
Serie | string | Serie del CFE referenciado |
NroCfe | long | Número del CFE referenciado |
FechaCfe | DateTime | Fecha del CFE referenciado |
Razon | string? | Motivo de la nota de crédito/débito |
RespuestaDgi
Section titled “RespuestaDgi”Respuesta del servidor DGI tras el envío de un CFE.
| Propiedad | Tipo | Descripción |
|---|---|---|
Exitoso | bool | true si el código es 00 o 01 |
Codigo | string | Código de respuesta DGI |
Mensaje | string | Descripción de la respuesta |
FechaRespuesta | DateTime | Timestamp UTC de la respuesta |
XmlRespuesta | string? | XML de respuesta en bruto (opcional) |
RespuestaReporteDiario
Section titled “RespuestaReporteDiario”Resultado del envío del reporte diario.
| Propiedad | Tipo | Descripción |
|---|---|---|
FechaReporte | DateTime | Fecha del reporte enviado |
CantidadCfe | int | Cantidad de CFE incluidos en el reporte |
Respuesta | RespuestaDgi | Resultado de la operación |
Ambiente
Section titled “Ambiente”public enum Ambiente{ Homologacion, // Pruebas — endpoint DGI de homologación Produccion, // Real — endpoint DGI de producción}TipoCfe
Section titled “TipoCfe”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,}TipoIva
Section titled “TipoIva”public enum TipoIva{ Exento = 1, // Sin IVA Minimo = 2, // IVA 10% Basico = 3, // IVA 22% Suspendido = 4, // IVA suspendido}TipoDocumentoReceptor
Section titled “TipoDocumentoReceptor”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}Moneda
Section titled “Moneda”public enum Moneda{ PesoUruguayo = 0, // Código interno DGI para moneda local DolarAmericano = 840, // ISO 4217 Euro = 978, // ISO 4217}FormaPago
Section titled “FormaPago”public enum FormaPago{ Contado = 1, Credito = 2,}IndTraslado
Section titled “IndTraslado”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}ICaeManager / CaeManager
Section titled “ICaeManager / CaeManager”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étodo | Firma | Descripción |
|---|---|---|
RegistrarCae | void RegistrarCae(Cae cae) | Registra un nuevo CAE |
RegistrarCaes | void 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 |
ObtenerCaeActivo | Cae? ObtenerCaeActivo(TipoCfe tipoCfe) | Retorna el CAE activo para el tipo indicado |
ObtenerAdvertencias | IReadOnlyList<string> ObtenerAdvertencias(int diasAlertaVencimiento = 7, decimal porcentajeAlertaUso = 80m) | Retorna advertencias de vencimiento/agotamiento |
ObtenerTodosLosCaes | IReadOnlyList<Cae> ObtenerTodosLosCaes() | Retorna todos los CAEs registrados |
ObtenerCaesActivos | IReadOnlyList<Cae> ObtenerCaesActivos() | Retorna los CAEs vigentes con números disponibles |
ResumenEstado | string ResumenEstado() | Texto con el estado de todos los CAEs |
Excepciones
Section titled “Excepciones”| Excepción | Descripción |
|---|---|
UruFacturaException | Excepción base del SDK |
CaeException | Error relacionado con el CAE (vencido, agotado, no encontrado) |
FirmaDigitalException | Error al firmar el XML (certificado inválido o inaccesible) |
DgiCommunicationException | Error en la comunicación con DGI |
CfeValidationException | El CFE contiene errores de validación (propiedad Errors con detalle) |
PdfGenerationException | Error al generar el PDF del comprobante |