Precios, IGV y afectación
Manda los precios como los tengas
"precios_incluyen_igv": true → S/ 6.00, el precio de vitrina
"precios_incluyen_igv": false → S/ 5.084746, el valor neto
Con true, la conversión se hace con 6 decimales. Con menos precisión, una boleta de
S/ 6.00 termina diciendo S/ 5.99 y deja de coincidir con lo que cobró la caja.
afectacion: qué dice la ley de cada producto
Por defecto GRAVADO (18%). Una bodega vende de los dos tipos en la misma boleta:
"items": [
{ "descripcion": "Lentejas", "cantidad": "2", "valor_unitario": "5.00",
"afectacion": "EXONERADO" },
{ "descripcion": "Fideos", "cantidad": "3", "valor_unitario": "3.50" }
]
| Valor | Para qué |
|---|---|
GRAVADO |
paga 18% — el caso común |
EXONERADO |
menestras, arroz, verduras, libros |
INAFECTO |
exportaciones |
Un ítem exonerado no se convierte aunque mandes precios de vitrina: S/ 5.00 de estante son S/ 5.00 de valor de venta, porque no hay IGV que quitarle.
⚠️ Marcar mal la afectación no cambia el total, pero sí lo que se declara. Si mandas un producto gravado como exonerado, el comprobante sale por el monto correcto y declara menos IGV del que debes. Ninguna validación automática ve ese error: depende de que tu catálogo de productos tenga bien la afectación.
total_esperado: dígito de control
Opcional, y vale la pena. Manda lo que suma tu caja:
"total_esperado": "20.50"
Si no coincide, no se emite nada:
{ "error": "DatosInvalidos",
"mensaje": "El total calculado S/ 10.50 no coincide con el total esperado S/ 99.00" }
Atrapa cantidades mal, precios mal e ítems que faltan. No atrapa una afectación mal puesta cuando mandas precios de vitrina, por lo dicho arriba.