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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    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: @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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    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 inafectas Total valor de venta - operaciones exoneradas

    Tag UBL: @currencyID

    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 gratuitas Sumatoria de tributos de operaciones gratuitas

    Tag UBL: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    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

    Tag UBL: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'

  • DAE adquirenteError

    Dato: Total comisiones

    Tag UBL: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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@currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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@currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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@currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"

  • DAE operadorError

    Dato: Importe Total - IGV

    Tag UBL: @currencyID

    Condición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"

  • DAE operadorError

    Dato: Importe Total - ISC

    Tag UBL: @currencyID

    Condición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"

  • DAE operadorError

    Dato: Importe Total - Impuestos

    Tag UBL: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condición: Si existe el atributo, el valor es diferente al ingresado en "Importe total de DAE"

  • DAE SEAEError

    Dato: Valor del Servicio

    Tag UBL: @currencyID

    Condició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: @currencyID

    Condició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: @currencyID

    Condición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'

  • DAE SEAEError

    Dato: Importe total

    Tag UBL: @currencyID

    Condició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:DocumentCurrencyCode

    Condició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: @currencyID

    Condición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'

  • DOAE atribuciónError

    Dato: Monto atribuido

    Tag UBL: @currencyID

    Condición: Si existe el atributo, el valor es diferente al ingresado en 'Tipo de moneda'

  • DOAE atribuciónError

    Dato: Total montos atribuidos

    Tag UBL: @currencyID

    Condició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: @currencyID

    Condició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.