SIFENDE
Guías

Facturar en Moneda Extranjera

Cómo emitir facturas en dólares (USD) u otras monedas, con tipo de cambio, monedaOperacion y totales en PYG.

SIFEN permite emitir documentos en moneda extranjera (USD, EUR, BRL, ARS, etc.) con tipo de cambio GLOBAL o POR_ITEM y reportar los equivalentes en guaraníes. Esta guía explica cómo configurarla correctamente.

Conceptos clave

Campo APIDescripciónEjemplo
monedaOperacionCódigo ISO de la moneda de operaciónUSD, EUR
tipoCambioTipo de cambio GLOBAL: cantidad de PYG por una unidad de moneda extranjera7135.1256
items[].tipoCambioTipo de cambio POR_ITEM, obligatorio en todos los ítems de esa modalidad7100.1111
condicionPago.tipoCambioTipo de cambio de la moneda extranjera del pago7130.5000

La cotización comprador o vendedor publicada por el BCP es una referencia para tu política contable y fiscal. Sifende valida la presencia y el formato del tipo de cambio, no que coincida con una cotización específica del BCP.

Cómo obtener el tipo de cambio

  • BCP (oficial): https://www.bcp.gov.py publica diariamente las cotizaciones
  • Elegí la cotización comprador o vendedor según tu política contable y el criterio de tu contador
  • Guardá el tipo de cambio usado junto con el DE para auditoría

Ejemplo: factura en USD

{
  "tipoDocumento": "FACTURA_ELECTRONICA",
  "fechaEmision": "2026-04-15T10:30:00",
  "tipoEmision": "NORMAL",
  "numeroEstablecimiento": 1,
  "puntoExpedicion": 1,
  "monedaOperacion": "USD",
  "tipoCambio": 7300,
  "tipoTransaccion": "PRESTACION_SERVICIOS",
  "condicionOperacion": "CONTADO",
  "receptor": {
    "tipoContribuyente": "CONTRIBUYENTE",
    "tipoOperacion": "B2B",
    "tipoContribuyenteReceptor": "PERSONA_JURIDICA",
    "numeroDocumento": "80012345",
    "digitoVerificador": "0",
    "nombreRazonSocial": "Comercial Guaraní S.A."
  },
  "condicionPago": {
    "tipo": "CONTADO",
    "tipoPago": "TRANSFERENCIA",
    "monedaPago": "USD",
    "tipoCambio": 7300,
    "montoPago": 1200
  },
  "items": [
    {
      "codigo": "SRV-001",
      "descripcion": "Licencia de software anual",
      "cantidad": 1,
      "unidadMedida": "UNI",
      "precioUnitario": 1200,
      "afectacionTributaria": "GRAVADO",
      "tasaIVA": 10
    }
  ]
}

En este caso:

  • El precio del ítem (1200) está en USD
  • Sifende calcula automáticamente el equivalente en PYG: 1200 × 7300 = 8.760.000 PYG
  • El KuDE muestra ambos valores: USD (operación) y PYG (referencia)

Cálculo de IVA

El IVA siempre se calcula sobre el monto en moneda de operación (USD en este caso), pero también se reporta su equivalente en PYG:

ConceptoUSDPYG
Subtotal1.090,917.963.636
IVA 10%109,09796.364
Total1.200,008.760.000

Sifende hace estos cálculos automáticamente; solo enviá los precios en moneda extranjera.

En moneda extranjera el total no se redondea: el redondeo a múltiplos de 50 sólo aplica a operaciones en guaraníes. Un pago al contado en la moneda de la operación cubre el total general exacto.

Modos de tipo de cambio

GLOBAL (recomendado)

Un solo tipo de cambio para toda la factura. Más simple y común. Enviá monedaOperacion + tipoCambio a nivel de documento:

{
  "monedaOperacion": "USD",
  "tipoCambio": 7300
}

POR_ITEM

Cada ítem tiene su propio tipo de cambio. Usado en operaciones complejas con commodities. Omití el tipoCambio global y envialo en todos los ítems. Si la moneda del pago también es extranjera, informá además condicionPago.tipoCambio:

{
  "tipoDocumento": "FACTURA_ELECTRONICA",
  "fechaEmision": "2026-04-15T10:30:00",
  "tipoEmision": "NORMAL",
  "numeroEstablecimiento": 1,
  "puntoExpedicion": 1,
  "tipoTransaccion": "VENTA_MERCADERIA",
  "monedaOperacion": "USD",
  "receptor": {
    "tipoContribuyente": "CONTRIBUYENTE",
    "tipoOperacion": "B2B",
    "tipoContribuyenteReceptor": "PERSONA_JURIDICA",
    "numeroDocumento": "80012345",
    "digitoVerificador": "0",
    "nombreRazonSocial": "Comercial San Roque S.A."
  },
  "condicionOperacion": "CONTADO",
  "condicionPago": {
    "tipo": "CONTADO",
    "tipoPago": "EFECTIVO",
    "monedaPago": "USD",
    "tipoCambio": 7130.5000,
    "montoPago": 30.75
  },
  "items": [
    {
      "codigo": "PROD-USD-1",
      "descripcion": "Producto con cambio uno",
      "cantidad": 2,
      "unidadMedida": "UNI",
      "precioUnitario": 10.25,
      "tipoCambio": 7100.1111,
      "afectacionTributaria": "GRAVADO",
      "tasaIVA": 10
    },
    {
      "codigo": "PROD-USD-2",
      "descripcion": "Producto con cambio dos",
      "cantidad": 1,
      "unidadMedida": "UNI",
      "precioUnitario": 10.25,
      "tipoCambio": 7200.2222,
      "afectacionTributaria": "GRAVADO",
      "tasaIVA": 10
    }
  ]
}

Restricciones SIFEN

RestricciónDetalle
Tipo de cambio positivo, con hasta 5 enteros y 4 decimalesDebe ser mayor que 0 y menor que 99999.9999
Modalidades excluyentesNo combines tipoCambio global con items[].tipoCambio; en POR_ITEM todos los ítems deben informar tipoCambio
Operaciones B2C en USDPermitidas pero infrecuentes; confirmá con tu contador
Pago en moneda extranjeracondicionPago.tipoCambio es obligatorio; para pagos en PYG no se informa
Moneda extranjera + receptor INNOMINADOPermitido para FE, no para Notas de Crédito
Crédito en moneda extranjeraEl crédito se emite en PYG; otra moneda devuelve 400 validation-error

Ejemplo en TypeScript

async function emitirFacturaUSD(montoUSD: number, ruc: string, razonSocial: string) {
  const tipoCambio = await obtenerCotizacionBCP(); // tu integración con BCP

  const response = await fetch(
    "https://api.sifende.com.py/api/v1/documento-electronico",
    {
      method: "POST",
      headers: {
        "Authorization": `Bearer ${process.env.SIFENDE_API_KEY}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        tipoDocumento: "FACTURA_ELECTRONICA",
        fechaEmision: new Date().toISOString().slice(0, 19),
        tipoEmision: "NORMAL",
        numeroEstablecimiento: 1,
        puntoExpedicion: 1,
        monedaOperacion: "USD",
        tipoCambio,
        tipoTransaccion: "PRESTACION_SERVICIOS",
        condicionOperacion: "CONTADO",
        receptor: {
          tipoContribuyente: "CONTRIBUYENTE",
          tipoOperacion: "B2B",
          tipoContribuyenteReceptor: "PERSONA_JURIDICA",
          numeroDocumento: ruc.split("-")[0],
          digitoVerificador: ruc.split("-")[1],
          nombreRazonSocial: razonSocial,
        },
        condicionPago: { tipo: "CONTADO", tipoPago: "TRANSFERENCIA", monedaPago: "USD", tipoCambio, montoPago: montoUSD },
        items: [{
          codigo: "SRV-001",
          descripcion: "Servicio",
          cantidad: 1,
          unidadMedida: "UNI",
          precioUnitario: montoUSD,
          afectacionTributaria: "GRAVADO",
          tasaIVA: 10,
        }],
      }),
    }
  );

  return response.json();
}

Próximos pasos

On this page