Simplicidad ante todo
Describís el comprobante; UruFactura lo valida, lo numera, lo firma y lo envía. Un solo namespace y un cliente.
Simplicidad ante todo
Describís el comprobante; UruFactura lo valida, lo numera, lo firma y lo envía. Un solo namespace y un cliente.
Firma Digital incluida
Firma XML y WS-Security con certificados .p12 / .pfx o de Key Vault/HSM, validadas contra los XSD y WSDL oficiales de la DGI.
Todos los tipos de CFE
e-Ticket, e-Factura, e-Remito, exportación, notas de crédito/débito, e-Resguardo, cuenta ajena y contingencia.
Listo para producción
Numeración atómica entre instancias con EF Core, reporte diario y PDF A4/térmico con QR.
dotnet add package UruFacturadotnet add package UruFactura.Pdf # representación impresa (opcional)dotnet add package UruFactura.EntityFrameworkCore # almacenamiento en base (producción)<PackageReference Include="UruFactura" Version="2.0.0" /><PackageReference Include="UruFactura.Pdf" Version="2.0.0" /><PackageReference Include="UruFactura.EntityFrameworkCore" Version="2.0.0" />using UruFactura;
// 1. Configurar el clientevar config = new UruFacturaConfig{ Emisor = new Emisor { Rut = "219999820013", RazonSocial = "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"),};
using var client = new UruFacturaClient(config);
// 2. Registrar el CAE que entregó la DGIawait client.RegistrarCaeAsync(new Cae{ NumeroAutorizacion = "90110001945", TipoCfe = TipoCfe.ETicket, Serie = "A", RangoDesde = 1, RangoHasta = 1000, FechaVencimiento = new DateOnly(2027, 12, 31),});
// 3. Emitir (valida, numera, firma) y enviarvar emitido = await client.EmitirAsync(new Cfe(TipoCfe.ETicket){ Detalle = [new LineaDetalle { NombreItem = "Servicio de consultoría", Cantidad = 1, PrecioUnitario = 5000m }],});var acuse = await client.EnviarAsync(emitido); // AS = sobre recibido
// 4. Resultado del comprobante (AE = aceptado) y PDF (paquete UruFactura.Pdf)if (acuse.Recibido){ await client.ConsultarEnvioAsync(acuse); if (emitido.AceptadoPorDgi) await File.WriteAllBytesAsync("eticket.pdf", CfePdf.GenerarA4(emitido));}| Código | Tipo |
|---|---|
| 101 / 102 / 103 | e-Ticket y sus notas de crédito/débito |
| 111 / 112 / 113 | e-Factura y sus notas |
| 121 / 122 / 123 | e-Factura de Exportación y sus notas |
| 124 | e-Remito de Exportación |
| 181 | e-Remito |
| 182 | e-Resguardo |
| 131-133, 141-143 | Venta por cuenta ajena |
| 2xx | Comprobantes de contingencia |