Observación 4022 SUNAT: Si se utiliza la leyenda con código 2001, el total de operaciones exoneradas debe ser mayor a 0.00

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 4022 con el mensaje «Si se utiliza la leyenda con código 2001, el total de operaciones exoneradas debe ser mayor a 0.00».

Es una observación: SUNAT acepta el comprobante y es válido, pero te avisa de un dato que debes corregir en los próximos.

Aparece en: Boleta de venta, Liquidación de compra.

Cuándo aparece

Estas son las reglas de validación de SUNAT que devuelven el código 4022, con su texto oficial:

  • Boleta de ventaObservación

    Dato: Total valor de venta - exportación Total valor de venta - operaciones inafectas Total valor de venta - operaciones exoneradas

    Tag UBL: /Invoice/cac:TaxTotal/cac:TaxSubtotal/cbc:TaxableAmount (Total valor de venta)

    Condición: Si existe 'Código de leyenda' igual a '2001', no existe el ‘Total valor de venta de operaciones exoneradas’ (cbc:TaxableAmount con 'Código de tributo' igual a '9997') o existe con valor igual a 0 (cero)

  • Liquidación de compraObservación

    Dato: Total valor de venta - operaciones inafectas Total valor de venta - operaciones exoneradas

    Tag UBL: /SelfBilledInvoice/cac:TaxTotal/cac:TaxSubtotal/cbc:TaxableAmount (Total valor de venta - operaciones inafectas / Total valor de venta - operaciones exoneradas)

    Condición: Si 'Código de tributo' igual a '9997' (Exonerada) y existe 'Código de leyenda' igual a '2001', el valor del Tag UBL es igual a 0 (cero)

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 es una observación, no tienes que reemitir: el comprobante es válido. Corrige el dato en los siguientes.

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.