Skip to navigation

Contingencia OFFLINE

emit es síncrono: si el SIAT no responde por timeout/caída, la API no falla: devuelve 200 con status: "OFFLINE", XML firmado local (codigoEmision=2) y contingency_event_id, vinculado a un evento significativo local.

En esta página aprenderás: qué pasa cuando cae la red SIAT, registrar el evento y reenviar por paquete · Prerrequisitos: saber emitir · Tiempo: ~10 min.

Un rechazo (REJECTED) se informa de inmediato y no abre contingencia. Solo timeout/caída de red genera factura offline.

Evento significativo

CampoTipoObligatorioDescripción
codigo_motivo_eventointNo, default corte de internetMotivo SIAT del evento
descripcionstringNo, default "Corte del servicio de internet"Descripción
cufd_eventostringNo, default CUFD vigenteCUFD del evento
fecha_hora_inicio_eventofechaNoDefault now-10m (clamp a vigencia CUFD)
fecha_hora_fin_eventofechaNoDefault now+1h50m (se completa al volver la red)

Requiere CUIS activo + CUFD vigente o responde 409.

const inv = await supay.invoices.emit(payload);
// Solo timeout/caída genera OFFLINE (un REJECTED no entra aquí)
if (inv.status === "OFFLINE") {
// Guarda el XML firmado local + el evento
const xml = await supay.invoices.downloadXml({ id: inv.id });
// persistir xml + inv.contingency_event_id
}
// Registrar el evento significativo (usa defaults si omites campos)
const ev = await supay.siat.registerSignificantEvent({
pointOfSaleId: pos.id,
codigo_motivo_evento: 1,
descripcion: "Corte del servicio de internet",
});
// ev.codigo_recepcion
// Al volver la red: enviar por paquete y conciliar
await supay.siat.sendPackage({
pointOfSaleId: pos.id,
invoice_ids: [inv.id],
});
// OFFLINE → SENT → ACCEPTED / OBSERVED / REJECTED

Reglas operativas

ReglaDetalle
RenovaciónCUFD/CUIS se renuevan automáticamente; antes de emitir se valida CUFD vigente
BetaREJECTED no se reencola — corregir y crear factura nueva, conservando ID/CUF

Relacionado: Paquetes y masiva · Errores.