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 API | Descripción | Ejemplo |
|---|---|---|
monedaOperacion | Código ISO de la moneda de operación | USD, EUR |
tipoCambio | Tipo de cambio GLOBAL: cantidad de PYG por una unidad de moneda extranjera | 7135.1256 |
items[].tipoCambio | Tipo de cambio POR_ITEM, obligatorio en todos los ítems de esa modalidad | 7100.1111 |
condicionPago.tipoCambio | Tipo de cambio de la moneda extranjera del pago | 7130.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:
| 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.
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ón | Detalle |
|---|---|
| Tipo de cambio positivo, con hasta 5 enteros y 4 decimales | Debe ser mayor que 0 y menor que 99999.9999 |
| Modalidades excluyentes | No combines tipoCambio global con items[].tipoCambio; en POR_ITEM todos los ítems deben informar tipoCambio |
| Operaciones B2C en USD | Permitidas pero infrecuentes; confirmá con tu contador |
| Pago en moneda extranjera | condicionPago.tipoCambio es obligatorio; para pagos en PYG no se informa |
| Moneda extranjera + receptor INNOMINADO | Permitido para FE, no para Notas de Crédito |
| Crédito en moneda extranjera | El 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
- Factura Electrónica: guía base de FE
- Modelo: Factura Electrónica: schema completo
- Items y IVA: cómo se calcula el IVA