Exoneraciones
Algunos clientes (gobiernos, ONG, zonas francas) cuentan con una resolución de exoneración de IVA emitida por el Ministerio de Hacienda.
Exoneración ≠ exención. La exoneración aplica a un cliente con resolución vigente; la exención aplica al producto. Este apartado trata únicamente de exoneraciones.
El mecanismo real: idExoneracion, nunca un monto
Para exonerar una línea se envía idExoneracion (el id de una exoneración ya registrada para ese cliente), y nada más. El monto exonerado no se manda: lo calcula el servidor a partir de la tarifa de IVA real del producto y el porcentaje autorizado en la exoneración, topando el resultado para que nunca se exonere más impuesto del que la línea tiene.
montoExoneracionexiste en el contrato pero está IGNORADO. Es un campo heredado de una versión anterior de la API: se acepta en el JSON para no romper a integradores que ya lo envían, pero su valor nunca se usa para nada — no se suma, no se resta, no aparece en el comprobante. Si se mandamontoExoneracionsinidExoneracion, la línea sale gravada con IVA completo, sin error ni aviso. VerFacturaApiLineaDtopara el detalle del campo.
{
"idProducto": 101,
"cantidad": 1,
"idExoneracion": 7
}De dónde sale el idExoneracion
El integrador lo obtiene de GET /api/v1/clientes/{identificacion}, en el arreglo exoneraciones de la respuesta (ClienteApiResponseDto). Cada elemento trae su idExoneracion, el porcentaje autorizado, las fechas de emisión/expiración y un booleano vigente ya resuelto por el servidor:
{
"idCliente": 46,
"identificacion": "117890123",
"...": "...",
"exoneraciones": [
{
"idExoneracion": 7,
"tipoDocumento": "03",
"tipoDocumentoNombre": "Exoneración compras autorizadas de Zona Franca",
"numeroDocumento": "EX-2026-00412",
"nombreInstitucion": "PROCOMER",
"fechaEmision": "2026-01-10T00:00:00Z",
"fechaExpiracion": "2027-01-10T00:00:00Z",
"porcentajeExoneracion": 100,
"estado": true,
"vigente": true
}
]
}Las exoneraciones en sí (alta, edición, vigencia) no se administran por la API — se registran desde el POS. GET /clientes/{identificacion} solo las expone para que el integrador sepa qué id mandar.
Validación al emitir
El id se valida contra el cliente del documento y la vigencia de la exoneración; el que no pasa, no factura con IVA completo en silencio, sino que devuelve 400:
| Causa | Cuándo ocurre |
|---|---|
Se envió idExoneracion sin cliente en el documento | La exoneración pertenece a un cliente registrado; no aplica a un Tiquete Electrónico sin receptor. |
| El id no existe o no pertenece al cliente del documento | El idExoneracion es de otro cliente, o no existe en el tenant. |
La exoneración está inactiva (estado: false) | Se dio de baja en el POS. |
La exoneración está vencida (fechaExpiracion en el pasado) | Igual que vigente: false en la respuesta de GET /clientes/{identificacion}. |
Ejemplo de rechazo:
{ "error": "Línea 1: la exoneración 7 venció el 10/01/2026." }Comportamiento del cálculo
El porcentaje autorizado en la exoneración se aplica sobre el IVA real de la línea, topado a la tarifa del producto: una exoneración al 100% sobre un producto con IVA al 2% exonera 2 puntos, no 13. Con una exoneración parcial (por ejemplo 50%):
- 50% del IVA se cobra normal.
- 50% del IVA se exonera (no se cobra).
LX CloudPos divide el monto entre “base gravada” y “base exonerada” automáticamente. Ver cálculo de totales.
Ver también: IVA.