Factu API Documentación

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.