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.) siempre que se incluya el tipo de cambio del día y el sistema reporte los equivalentes en guaraníes. Esta guía explica cómo configurarla correctamente.
Conceptos clave
| Campo API | Descripción | Ejemplo |
|---|---|---|
monedaOperacion | Código ISO de la moneda de operación | USD, EUR |
tipoCambio | Tipo de cambio: cantidad de PYG por una unidad de la moneda extranjera | 7300 (1 USD = 7300 PYG) |
El tipo de cambio debe ser el publicado por el Banco Central del Paraguay (BCP) para la fecha de emisión del documento. Usar un tipo de cambio incorrecto puede causar rechazos o problemas fiscales.
Cómo obtener el tipo de cambio
- BCP (oficial): https://www.bcp.gov.py publica diariamente las cotizaciones
- Usá la cotización comprador o vendedor según tu política contable (lo más común: vendedor para ventas)
- 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",
"numeroDocumento": "80012345",
"digitoVerificador": "1",
"nombreRazonSocial": "Comercial Guaraní S.A."
},
"condicionPago": {
"tipo": "CONTADO",
"tipoPago": "TRANSFERENCIA",
"monedaPago": "USD",
"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:
| Concepto | USD | PYG |
|---|---|---|
| Subtotal | 1.090,91 | 7.963.636 |
| IVA 10% | 109,09 | 796.364 |
| Total | 1.200,00 | 8.760.000 |
Sifende hace estos cálculos automáticamente; solo enviá los precios en moneda extranjera.
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. El tipoCambio se envía en cada ítem:
{
"monedaOperacion": "USD",
"items": [
{
"descripcion": "Producto importado",
"tipoCambio": 7300,
"precioUnitario": 100
}
]
}Restricciones SIFEN
| Restricción | Detalle |
|---|---|
| Tipo de cambio entero positivo | No puede ser 0 ni negativo |
| Coherencia con la fecha | Usá el TC del día de emisión, no de hoy |
| Operaciones B2C en USD | Permitidas pero infrecuentes; confirmá con tu contador |
| Moneda extranjera + receptor INNOMINADO | Permitido para FE, no para Notas de Crédito |
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",
numeroDocumento: ruc.split("-")[0],
digitoVerificador: ruc.split("-")[1],
nombreRazonSocial: razonSocial,
},
condicionPago: { tipo: "CONTADO", tipoPago: "TRANSFERENCIA", monedaPago: "USD", montoPago: montoUSD },
items: [{
codigo: "SRV-001",
descripcion: "Servicio",
cantidad: 1,
unidadMedida: "UNI",
precioUnitario: montoUSD,
afectacionTributaria: "GRAVADO",
tasaIVA: 10,
}],
}),
}
);
return response.json();
}Próximos pasos
- Factura Electrónica: guía base de FE
- Modelo: Factura Electrónica: schema completo
- Items y IVA: cómo se calcula el IVA