SIFENDE
Guías

Reintentar Documentos Rechazados

Flujo completo para corregir un documento rechazado por SIFEN y reemitirlo con un nuevo CDC.

Cuando SIFEN rechaza un DE, el documento queda legalmente nulo y no se puede "corregir". El flujo correcto es: identificar la causa, emitir un nuevo DE con los datos corregidos, e inutilizar el número original si es necesario.

Un DE en estado RECHAZADO no tiene validez fiscal. No lo entregues al cliente. El número de documento que consumió tampoco se puede reutilizar: debe inutilizarse o quedará como hueco en la secuencia.

Flujo completo

Detectá el rechazo consultando el estado del DE:

curl "https://api.sifende.com.py/api/v1/documento-electronico/status/{cdc}" \
  -H "Authorization: Bearer sk_live_..."

Respuesta:

{
  "cdc": "01800123451001001000000122026042710000000006",
  "estado": "RECHAZADO",
  "iTiDe": 1,
  "numeroDocumento": 1,
  "fechaCreacion": "2026-04-15T10:30:00",
  "protocoloAutorizacion": null,
  "mensajeRechazo": "[1306] RUC del receptor inexistente en Marangatu"
}

numeroDocumento es un Long (entero). El formato "NNN-NNN-NNNNNNN" se devuelve como numeroFormateado en la respuesta de emisión: son campos separados.

Identificá la causa a partir del código entre corchetes ([1302]) en mensajeRechazo. Consultá la tabla de Rechazos SIFEN para ver el significado.

Corregí los datos en tu sistema. Ej: corregir el formato del RUC, completar campos faltantes del receptor, ajustar fechas, etc.

Emití un NUEVO DE con los datos corregidos. Recibirá un nuevo CDC.

curl -X POST "https://api.sifende.com.py/api/v1/documento-electronico" \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ ...payload corregido... }'

Inutilizá el número original si el rechazo dejó un hueco que no se rellenará automáticamente. Ver Inutilizar Numeración.

Rechazos comunes y cómo corregirlos

1108: Timbrado vencido o sin fecha de fin

Causa: El timbrado configurado en Sifende no tiene fechaFin o ya venció.

Solución:

  1. Renová el timbrado en MARANGATÚ (portal SET)
  2. Andá a Configuración → Timbrados en Sifende
  3. Actualizá fechaFin con la fecha del nuevo timbrado
  4. Reemití el DE con el timbrado correcto

1302: Falta tipoContribuyente para receptor B2B

Causa: Operación B2B sin el campo tipoContribuyente del receptor.

Solución: Incluí tipoContribuyente: "CONTRIBUYENTE" (o EXTRANJERO según corresponda) en el bloque receptor. Reemití.

1303: Tipo de contribuyente receptor inválido

Causa: Se envió tipoContribuyente cuando el receptor es NO_CONTRIBUYENTE (B2C identificado).

Solución: Eliminá el campo tipoContribuyente cuando el receptor es B2C no contribuyente. Reemití.

1304: Falta numeroDocumento (RUC) para receptor contribuyente

Causa: Operación B2B sin el RUC del receptor.

Solución: Completá numeroDocumento (RUC sin DV) y digitoVerificador separadamente. Reemití.

1305: RUC del receptor no requerido

Causa: Se envió numeroDocumento (RUC) cuando el receptor es NO_CONTRIBUYENTE.

Solución: Eliminá numeroDocumento para receptor B2C no contribuyente. Reemití.

1306: RUC del receptor inexistente en Marangatu

Causa: El RUC enviado no está registrado en el padrón de la SET.

Solución:

  1. Verificá el RUC en el consultador SET
  2. Confirmá con tu cliente que el RUC sea correcto
  3. Reemití con el RUC corregido

1309: Dígito verificador del RUC incorrecto

Causa: El DV enviado no coincide con el algoritmo SET (módulo 11).

Solución: Verificá digitoVerificador por separado o pedile al receptor su RUC con DV. Reemití.

Implementación TypeScript

async function reemitirSiRechazado(cdcOriginal: string, payloadOriginal: any) {
  const estado = await consultarEstado(cdcOriginal);

  if (estado.estado !== "RECHAZADO") {
    throw new Error(`No corresponde reemitir. Estado actual: ${estado.estado}`);
  }

  const codigoError = extraerCodigo(estado.mensajeRechazo);
  console.log(`Rechazo ${codigoError}: ${estado.mensajeRechazo}`);

  const payloadCorregido = await aplicarCorrecciones(payloadOriginal, codigoError);

  // Emitir nuevo DE: recibe un CDC nuevo
  const nuevo = await emitirDE(payloadCorregido);
  console.log(`Reemitido como CDC: ${nuevo.cdc}`);

  // Si querés que el número original quede formalmente cerrado
  await inutilizarNumero(cdcOriginal);

  return nuevo;
}

function extraerCodigo(motivo: string): string {
  const match = motivo.match(/\[(\d+)\]/);
  return match ? match[1] : "desconocido";
}

Buenas prácticas

  • Loggeá todos los rechazos con el código y el payload original. Sirven para detectar bugs sistemáticos
  • Validá antes de enviar. Si el 80% de tus rechazos son 1302, fortalecé la validación de RUC en tu frontend
  • Notificá al usuario. Si un rechazo se da en el contexto de una venta, mostrale al cajero/vendedor qué corregir
  • Monitoreá la tasa de rechazos. Una tasa > 1% indica un problema en tu integración

No reintentes el mismo payload. Reenviar exactamente los mismos datos producirá el mismo rechazo. Siempre corregí los datos antes de reemitir.

Próximos pasos

On this page