- Blog
- Tipo de cambio
Operaciones en dólares: ¿tipo de cambio compra o venta?
Cuándo usar el tipo de cambio compra y cuándo el de venta en ventas, compras y cobros en dólares, con ejemplos numéricos y cálculo de la diferencia de cambio.
Emites una factura en dólares, el cliente te paga tres semanas después y el contador te pregunta con qué tipo de cambio registraste la venta. Respondes "el de SUNAT" y la siguiente pregunta es la que duele: ¿compra o venta? Cada día hay dos valores y la diferencia parece mínima, pero esa elección cambia el IGV declarado, el resultado del ejercicio y la conciliación bancaria.
Aquí vas a ver la regla general (activos a compra, pasivos a venta), la excepción que todo sistema de facturación tiene que respetar (el IGV se convierte con el tipo venta), ejemplos numéricos con una factura concreta y cómo se calcula la diferencia de cambio cuando cobras o pagas en otra fecha.
Por qué hay dos tipos de cambio
El tipo de cambio que publica SUNAT no lo fija SUNAT: es el promedio ponderado compra y venta que calcula la SBS con las operaciones de los bancos, correspondiente al cierre del día anterior. Por eso cada fecha tiene dos valores: a cuánto compraron dólares los bancos (compra) y a cuánto los vendieron (venta). El de venta es normalmente un poco mayor; ahí está el margen del banco.
Para el 9 de octubre de 2026, por ejemplo, la tabla muestra compra 3.708 y venta 3.712. Son cuatro milésimas: en una factura de USD 100 no importa. En un registro de ventas mensual de USD 200 000 la brecha entre usar una columna u otra es de S/ 800.
Si no tienes claro de dónde sale esa tabla ni por qué no coincide con la del BCRP o la de tu banco, lee primero qué tipo de cambio SUNAT usar y la comparación entre SUNAT, BCRP y SBS. Aquí la pregunta es solo cuál de las dos columnas aplicar.
La regla general: activos a compra, pasivos a venta
La lógica contable detrás de la regla es simple. Un activo en dólares se valoriza por lo que recibirías si lo convirtieras a soles hoy, y eso es el tipo compra (el precio al que el banco te compra tus dólares). Un pasivo en dólares se valoriza por lo que te costaría conseguir esos dólares para pagarlo, y eso es el tipo venta (el precio al que el banco te vende dólares).
Aplicado a las operaciones del día a día:
- Vendes en dólares: nace una cuenta por cobrar, que es un activo. Se registra al tipo compra de la fecha de la operación.
- Compras en dólares: nace una cuenta por pagar, que es un pasivo. Se registra al tipo venta de la fecha de la operación.
- Saldos al cierre: los dólares en el banco (activo) se valorizan a compra; un préstamo en dólares (pasivo), a venta.
La regla viene de las normas del impuesto a la renta, que piden valorizar los saldos en moneda extranjera al cierre del ejercicio con el promedio ponderado de la SBS: compra para las cuentas del activo, venta para las del pasivo. En la práctica contable se aplica el mismo criterio a cada operación al registrarla, no solo al cierre. Los casos finos (anticipos, existencias, activos fijos) conviene verlos con tu contador.
El IGV se convierte con el tipo venta
Aquí está la excepción que más errores genera en los sistemas de facturación. Para el IGV, la norma no distingue entre activos y pasivos: toda operación en moneda extranjera se convierte a soles con el tipo de cambio promedio ponderado venta publicado por la SBS en la fecha en que nace la obligación tributaria, que en una venta normal es la fecha de emisión del comprobante. Si ese día no hubo publicación (fin de semana, feriado), se usa el último publicado.
Aplica a ventas y a compras: en el registro de ventas, la base imponible y el IGV de cada factura en dólares se expresan en soles con venta; en el registro de compras, el crédito fiscal de una factura en dólares que recibiste también se calcula con venta.
La consecuencia: una venta en dólares se registra con compra para fines de renta (es una cuenta por cobrar) y con venta para el IGV. Son dos conversiones de la misma factura, con una diferencia pequeña pero real. Un buen sistema guarda las dos, con fecha y tipo de cambio aplicado, para que el contador decida cómo tratarla sin recalcular nada a mano.
El tipo de cambio que importa es el de la fecha de emisión del comprobante, no el del día en que cobras ni el del día en que registras la factura. Si cargas facturas con retraso, tu sistema tiene que buscar el histórico de la fecha de emisión.
Ejemplos numéricos con una factura en dólares
Tomemos la tabla del 9 de octubre de 2026: compra 3.708, venta 3.712. Emites ese día una factura por un servicio de USD 1 000 más IGV.
Venta en dólares
| Concepto | Dólares | Tipo de cambio | Soles |
|---|---|---|---|
| Base imponible (registro de ventas) | 1 000.00 | Venta 3.712 | 3 712.00 |
| IGV 18 % (registro de ventas) | 180.00 | Venta 3.712 | 668.16 |
| Total del comprobante | 1 180.00 | Venta 3.712 | 4 380.16 |
| Cuenta por cobrar (contabilidad) | 1 180.00 | Compra 3.708 | 4 375.44 |
El IGV que declaras por esta factura es S/ 668.16, calculado con venta. La cuenta por cobrar de tu balance es S/ 4 375.44, calculada con compra. Los S/ 4.72 de diferencia entre ambos totales son los que mencionábamos arriba.
Compra en dólares
Ahora recibes una factura de un proveedor por USD 500 más IGV, emitida el mismo 9 de octubre.
| Concepto | Dólares | Tipo de cambio | Soles |
|---|---|---|---|
| Base imponible (registro de compras) | 500.00 | Venta 3.712 | 1 856.00 |
| IGV 18 % (crédito fiscal) | 90.00 | Venta 3.712 | 334.08 |
| Cuenta por pagar (contabilidad) | 590.00 | Venta 3.712 | 2 190.08 |
En las compras las dos reglas coinciden: el pasivo se valoriza a venta y el IGV también. Por eso dan menos dolores de cabeza que las ventas.
Diferencia de cambio: ganancia o pérdida
La factura de USD 1 180 quedó registrada como una cuenta por cobrar de S/ 4 375.44. Tres semanas después el cliente paga los USD 1 180, pero el tipo de cambio ya no es el mismo y esos dólares valen otra cantidad de soles. Esa diferencia no es ingreso por ventas ni descuento: es diferencia de cambio, y va a una cuenta de ganancia o pérdida financiera.
Supón, solo como ejemplo, que el día del cobro el tipo compra es 3.740:
- Dólares recibidos: USD 1 180.00
- Valor al tipo compra del día del cobro: 1 180 x 3.740 = S/ 4 413.20
- Cuenta por cobrar registrada: S/ 4 375.44
- Diferencia de cambio: S/ 37.76 a favor (ganancia)
Si en cambio el tipo compra hubiera bajado a 3.690:
- Valor al cobro: 1 180 x 3.690 = S/ 4 354.20
- Diferencia de cambio: S/ 21.24 en contra (pérdida)
Con la factura del proveedor pasa lo mismo, pero en espejo. La cuenta por pagar quedó en S/ 2 190.08. Si pagas cuando el tipo venta está en 3.730, desembolsas el equivalente a 590 x 3.730 = S/ 2 200.70 y registras una pérdida por diferencia de cambio de S/ 10.62. Si el dólar bajó, es ganancia.
El tercer momento es el cierre del ejercicio. Todo saldo en dólares abierto al 31 de diciembre (cuentas por cobrar y por pagar, bancos, préstamos) se vuelve a valorizar con el tipo de cambio de esa fecha, compra para activos y venta para pasivos, y el ajuste también se reconoce como diferencia de cambio.
Cómo lo resuelve tu sistema
Si programas un ERP o un sistema de facturación, la regla se traduce en tres decisiones de diseño.
Primero, guarda un histórico del tipo de cambio por fecha con las dos columnas, compra y venta, y nunca sobrescribas un valor pasado. En cómo automatizar el tipo de cambio diario explicamos cómo alimentar esa tabla con una tarea programada; la API de tipo de cambio de endpoint.pe devuelve ambos valores del día con una sola consulta y, guardados a diario, forman ese histórico.
Segundo, en cada documento en moneda extranjera guarda el tipo de cambio aplicado y la columna usada. No basta con el monto en soles: cuando el contador revise la factura seis meses después, necesita ver que se usó venta 3.712 del 9 de octubre, no reconstruirlo.
Tercero, define la columna según el tipo de operación, no según el módulo. Una función pequeña evita que cada desarrollador lo decida por su cuenta:
// tc = { compra: 3.708, venta: 3.712 } obtenido del histórico por fecha
function convertirASoles(montoUsd, tc, tipoOperacion) {
const columna = {
igv: 'venta', // base e IGV en registros de ventas y compras
cuenta_por_cobrar: 'compra', // activo
cuenta_por_pagar: 'venta', // pasivo
saldo_banco: 'compra', // activo
prestamo: 'venta', // pasivo
}[tipoOperacion];
if (!columna) throw new Error(`Tipo de operación desconocido: ${tipoOperacion}`);
const soles = Math.round(montoUsd * tc[columna] * 100) / 100;
return { soles, tipoCambio: tc[columna], columna };
}
convertirASoles(180, { compra: 3.708, venta: 3.712 }, 'igv');
// { soles: 668.16, tipoCambio: 3.712, columna: 'venta' }
El redondeo a dos decimales se hace una sola vez, al final y sobre el monto en soles. Si redondeas el tipo de cambio o redondeas por partes, los totales del registro de ventas dejan de cuadrar con la suma de las líneas. Sobre el redondeo del IGV en sí, mira cómo calcular el IGV en tu sistema.
En resumen
- SUNAT publica dos valores por fecha, compra y venta, que son el promedio ponderado de la SBS del día anterior.
- Regla general contable: activos (cuentas por cobrar, dinero en el banco) a tipo compra; pasivos (cuentas por pagar, préstamos) a tipo venta.
- Para el IGV, tanto en ventas como en compras, se usa siempre el tipo venta de la fecha de emisión del comprobante.
- La diferencia de cambio aparece al cobrar, al pagar y al cierre del ejercicio; es ganancia o pérdida financiera, no ingreso por ventas.
- Tu sistema debe guardar el histórico por fecha con ambas columnas y, en cada documento, el tipo de cambio exacto que aplicó.
Preguntas frecuentes
¿Qué tipo de cambio va impreso en una factura electrónica en dólares?
Los montos del comprobante van en dólares; la conversión a soles es para tus registros y declaraciones. Puedes imprimir el tipo de cambio como referencia para el cliente, pero lo que vale para el IGV es el tipo venta de la fecha de emisión.
¿Y si el cliente me paga en soles una factura en dólares?
Recibes los soles que el cliente calculó con el tipo de cambio acordado (normalmente el de SUNAT del día de pago o el de su banco). La diferencia frente a la cuenta por cobrar registrada es diferencia de cambio, igual que si hubieras recibido dólares.
¿Puedo usar el tipo de cambio del BCRP o el de mi banco para el IGV?
No para el IGV ni para renta: ahí la norma exige el promedio ponderado de la SBS que publica SUNAT. El del banco sirve para saber cuántos soles entraron o salieron realmente de tu cuenta; esa diferencia se registra como diferencia de cambio.
¿Qué hago un sábado, domingo o feriado?
Usas el último tipo de cambio publicado antes de esa fecha. Tu sistema debería resolverlo solo, sin que el usuario tenga que buscar la fecha correcta.






