Error 2337 SUNAT: La moneda debe ser la misma en todo el documento
Fuente: Reglas de validación de SUNAT, actualizado al 26.08.2026. Los mensajes y las condiciones son textos oficiales de SUNAT.
Qué significa
SUNAT devuelve el código 2337 con el mensaje «La moneda debe ser la misma en todo el documento».
Es un error: SUNAT rechaza el comprobante y no tiene validez tributaria.
Aparece en: Liquidación de compra, DAE adquirente, DAE operador, DAE SEAE, DOAE atribución.
Cuándo aparece
Estas son las reglas de validación de SUNAT que devuelven el código 2337, con su texto oficial:
Liquidación de compraError
Dato: Valor unitario por ítem
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor del atributo es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Precio de venta unitario por Item Valor referencial unitario por ítem en operaciones gratuitas (no onerosas)
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor del atributo es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Valor de venta por ítem
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Monto total de tributos del ítem
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Afectación al IGV por ítem
Tag UBL:
@currencyID (Moneda base)Condición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Afectación al IGV por ítem
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Impuesto a la Renta- Retención por item
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Afectación otros tributos por ítem
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Monto total de tributos
Tag UBL:
(Catálogo N.° 02)Condición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Total valor de venta - operaciones gravadas Total importe IGV/Total IGV Crédito
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Total valor de venta - operaciones inafectas Total valor de venta - operaciones exoneradas
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Total valor de venta - operaciones gratuitas Sumatoria de tributos de operaciones gratuitas
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Importe de la retención del impuesto a la renta
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Sumatoria otros tributos
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Total valor de venta
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Sub total de la liquidación de compra
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Monto para redondeo del importe total
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Importe total neto
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Importe del anticipo
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Montos del valor de venta de anticipos
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Montos de retenciones de renta de anticipos
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Liquidación de compraError
Dato: Total de anticipos
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
DAE adquirenteError
Dato: Total comisiones
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Importe total procesado en el periodo'
DAE adquirenteError
Dato: Total IGV
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Importe total procesado en el periodo'
DAE adquirenteError
Dato: Importe total
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Importe total procesado en el periodo'
DAE adquirenteError
Dato: Tipo de moneda de la comisión
Tag UBL:
/Invoice/cac:InvoiceLine/cac:SubInvoiceLine/cbc:LineExtensionAmount@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Importe total procesado en el periodo'
DAE adquirenteError
Dato: Monto de IGV
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Importe total procesado en el periodo'
DAE adquirenteError
Dato: Importe total Entidad Emisor
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Importe total procesado en el periodo'
DAE adquirenteError
Dato: Tipo de moneda de la comisión
Tag UBL:
/Invoice/cac:InvoiceLine/cbc:LineExtensionAmount@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Importe total procesado en el periodo'
DAE adquirenteError
Dato: Otros Abonos Otros Cargos/descuentos
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Importe total procesado en el periodo'
DAE adquirenteError
Dato: Total de IGV
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Importe total procesado en el periodo'
DAE adquirenteError
Dato: Monto abonado en el periodo facturado
Tag UBL:
/Invoice/cac:LegalMonetaryTotal/cbc:PayableAmount@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Importe total procesado en el periodo'
DAE operadorError
Dato: Total valor de venta del partícipe
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Total impuestos del partícipe
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Sumatoria ISC del partícipe
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Sumatoria IGV del partícipe
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Fondo de Inclusión Social Energético (FISE) del partícipe Otros Cargos/Descuentos del partícipe
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Importe total del partícipe
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Valor unitario por ítem - detalle del partícipe
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Valor de venta por ítem - detalle del partícipe
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Total Impuestos por ítem - detalle del partícipe
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Monto de ISC por ítem - detalle del partícipe
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Monto de IGV por ítem - detalle por partícipe
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Cargos y Descuentos por ítem - detalle por partícipe
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Importe total por ítem - detalle del partícipe
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Importe total - Valor de Venta
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Importe Total - IGV
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Importe Total - ISC
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Importe Total - Impuestos
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Importe Total - Descuentos (Que no afectan la base)
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE operadorError
Dato: Importe Total - Cargos (Que no afectan la base)
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"
DAE SEAEError
Dato: Valor del Servicio
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor del atributo es diferente al ingresado en 'Tipo de moneda'
DAE SEAEError
Dato: Monto total de tributos
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
DAE SEAEError
Dato: Total valor de Servicio - operaciones gravadas (IGV) Total del IGV
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
DAE SEAEError
Dato: Importe total
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
DOAE atribuciónError
Dato: Tipo de moneda en la cual se emite el documento de atribución
Tag UBL:
/Invoice/cbc:DocumentCurrencyCodeCondición: La moneda de los montos atribuidos y totales de comprobantes es diferente al valor del Tag UBL
DOAE atribuciónError
Dato: Monto por atribuir
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
DOAE atribuciónError
Dato: Monto atribuido
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
DOAE atribuciónError
Dato: Total montos atribuidos
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
DOAE atribuciónError
Dato: IGV- Régimen de recuperación anticipada
Tag UBL:
@currencyIDCondición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'
Cómo resolverlo
Revisa el dato y el tag UBL que indica la regla y corrígelo para que no se cumpla la condición de SUNAT.
Si SUNAT ya rechazó el comprobante, su número queda usado: no lo reenvíes igual. Corrige los datos y emite un comprobante nuevo.
Cómo lo ves en API SUNAT
Con API SUNAT no armas el XML: envías la venta en JSON y la API lo genera, lo firma y lo envía a SUNAT. Si SUNAT rechaza el comprobante, la emisión responde con status "rejected" y el código en sunat.errorCode y sunat.errorMessage; las observaciones llegan con status "accepted_with_observations".
También puedes recibirlo por webhook (document.rejected o document.observed). Ver los estados en la documentación.
