Gestión de CAE
El CAE (Constancia de Autorización de Emisión) es el rango de numeración que DGI autoriza a cada emisor para cada tipo de CFE. Sin un CAE vigente no podés emitir comprobantes.
Registrar un CAE
Section titled “Registrar un CAE”client.Cae.RegistrarCae(new Cae{ NroSerie = "CAE2025001", // Identificador único del CAE TipoCfe = TipoCfe.ETicket, // Tipo de CFE al que aplica RangoDesde = 1, // Primer número autorizado RangoHasta = 1000, // Último número autorizado FechaVencimiento = new DateOnly(2026, 12, 31),});Podés registrar múltiples CAEs (para distintos tipos de CFE):
// CAE para e-Ticketsclient.Cae.RegistrarCae(new Cae{ NroSerie = "CAE2025-ET", TipoCfe = TipoCfe.ETicket, RangoDesde = 1, RangoHasta = 5000, FechaVencimiento = new DateOnly(2026, 6, 30),});
// CAE para e-Facturasclient.Cae.RegistrarCae(new Cae{ NroSerie = "CAE2025-EF", TipoCfe = TipoCfe.EFactura, RangoDesde = 1, RangoHasta = 500, FechaVencimiento = new DateOnly(2026, 6, 30),});Monitorear el estado de los CAEs
Section titled “Monitorear el estado de los CAEs”Ver advertencias
Section titled “Ver advertencias”El SDK detecta automáticamente situaciones problemáticas:
var advertencias = client.Cae.ObtenerAdvertencias();
foreach (var advertencia in advertencias){ Console.WriteLine(advertencia);}Las advertencias incluyen:
- CAE próximo a vencer (menos de 7 días por defecto)
- Rango de numeración casi agotado (más del 80% utilizado por defecto)
- CAE ya vencido
Ver resumen general
Section titled “Ver resumen general”Console.WriteLine(client.Cae.ResumenEstado());Ejemplo de salida:
CAE CAE2025-ET (ETicket): rango 1-5000, usado hasta 4450, vence 2026-06-30 → ⚠️ Rango al 89%CAE CAE2025-EF (EFactura): rango 1-500, usado hasta 45, vence 2026-06-30 → ✅ OKBuenas prácticas para gestión de CAEs
Section titled “Buenas prácticas para gestión de CAEs”En ASP.NET Core con Hosted Service
Section titled “En ASP.NET Core con Hosted Service”public class CaeMonitorService : BackgroundService{ private readonly UruFacturaClient _client; private readonly ILogger<CaeMonitorService> _logger;
public CaeMonitorService(UruFacturaClient client, ILogger<CaeMonitorService> logger) { _client = client; _logger = logger; }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { var advertencias = _client.Cae.ObtenerAdvertencias();
foreach (var advertencia in advertencias) { _logger.LogWarning("CAE: {Advertencia}", advertencia); // También podés enviar alerta por email/Slack/etc. }
// Verificar cada hora await Task.Delay(TimeSpan.FromHours(1), stoppingToken); } }}
// Program.csbuilder.Services.AddHostedService<CaeMonitorService>();Renovar un CAE vencido
Section titled “Renovar un CAE vencido”-
Solicitar nuevo CAE en DGI en línea
Ingresar a DGI en línea → Gestión CFE → Solicitud de CAE. Indicar tipo de CFE y rango deseado.
-
Registrar el nuevo CAE en el SDK
client.Cae.RegistrarCae(new Cae{NroSerie = "CAE2026001", // Nuevo número de serieTipoCfe = TipoCfe.ETicket,RangoDesde = 1001, // Continuar desde donde terminó el anteriorRangoHasta = 2000,FechaVencimiento = new DateOnly(2027, 12, 31),}); -
Verificar el estado
Console.WriteLine(client.Cae.ResumenEstado());