Ir al contenido

Casos tributarios

Todo lo de esta página es opcional y se suma a una factura o una boleta normal. Emitay calcula; tú declaras la operación con los códigos de los catálogos de SUNAT. Lo que SUNAT rechazaría se niega antes de numerar, con el campo.

tax_affectation es el tipo de afectación de cada línea (catálogo 07). Sin él, la línea es gravada (10).

Código Operación
10 Gravada con IGV
20 Exonerada
30 Inafecta
40 Exportación
17 Gravada con IVAP (arroz pilado)
11 a 16, 21, 31 a 37 Gratuitas
Ventana de terminal
curl https://api.emitay.com/v1/receipts \
-H "Authorization: Bearer $EMITAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"series": "B001",
"items": [
{
"description": "Libro de cuentos",
"quantity": 2,
"unit_price": "35.00",
"tax_affectation": "20"
}
]
}'

Un comprobante puede mezclar líneas gravadas, exoneradas e inafectas. Los importes de cada una vuelven separados en amounts (taxed, exempt, unaffected).

Una bonificación, una muestra, un retiro: la línea lleva un código de operación gratuita y unit_price es su valor referencial, sin impuestos.

Ventana de terminal
curl https://api.emitay.com/v1/invoices \
-H "Authorization: Bearer $EMITAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"series": "F001",
"customer": { "document_number": "20100066603", "name": "CLIENTE S.A." },
"items": [
{ "description": "Polo de algodón", "quantity": 10, "unit_price": "50.00" },
{
"description": "Polo de algodón (bonificación)",
"quantity": 1,
"unit_price": "50.00",
"tax_affectation": "15"
}
]
}'

La línea gratuita no entra en el total a pagar: se informa en «Op. gratuitas» y el comprobante lleva la leyenda de transferencia gratuita. Su IGV se declara y no se cobra. Una línea gratuita no admite descuento, ISC ni price_includes_tax.

Un descuento va en una línea (items[].discount) o en todo el comprobante (discount), por porcentaje o por monto:

Ventana de terminal
curl https://api.emitay.com/v1/invoices \
-H "Authorization: Bearer $EMITAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"series": "F001",
"customer": { "document_number": "20100066603", "name": "CLIENTE S.A." },
"items": [
{
"description": "Silla ergonómica",
"quantity": 4,
"unit_price": "250.00",
"discount": { "percent": 10 }
},
{ "description": "Escritorio", "quantity": 1, "unit_price": "600.00" }
],
"discount": { "amount": "50.00" }
}'
  • percent o amount, uno de los dos.
  • affects_base (por defecto true): el descuento rebaja la base imponible, y con ella el IGV. Con false solo rebaja lo que se paga.
  • Un descuento global por monto es un valor sin impuestos. Uno de línea por monto se lee como el precio: con impuestos si la línea lleva price_includes_tax.

Un descuento que supera lo que rebaja responde 422 sobre su campo (items.0.discount.amount).

Una factura al crédito declara sus cuotas. Deben sumar el importe total, y ninguna puede vencer antes de la fecha de emisión.

Ventana de terminal
curl https://api.emitay.com/v1/invoices \
-H "Authorization: Bearer $EMITAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"series": "F001",
"customer": { "document_number": "20100066603", "name": "CLIENTE S.A." },
"items": [{ "description": "Laptop", "quantity": 1, "unit_price": "3000.00" }],
"payment": {
"type": "credit",
"installments": [
{ "amount": "1770.00", "due_date": "2030-01-31" },
{ "amount": "1770.00", "due_date": "2030-02-28" }
]
}
}'

Las fechas del ejemplo están lejos para que funcione al pegarlo; pon las de tu venta. Con detracción, las cuotas suman el monto neto pendiente, que es menor que el total. Las cuotas son de la factura: una boleta no las lleva.

Todas las líneas llevan tax_affectation: "40" y el cliente es del exterior, sin RUC:

Ventana de terminal
curl https://api.emitay.com/v1/invoices \
-H "Authorization: Bearer $EMITAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"series": "F001",
"currency": "USD",
"customer": {
"document_type": "0",
"document_number": "-",
"name": "ACME TRADING INC.",
"address": "350 FIFTH AVENUE, NEW YORK",
"country_code": "US"
},
"items": [
{
"description": "Café verde en grano",
"quantity": 500,
"unit_code": "KGM",
"unit_price": "6.40",
"tax_affectation": "40"
}
]
}'

country_code es el país del cliente (ISO 3166-1 alfa-2). Una exportación no se mezcla con otras operaciones ni lleva detracción o percepción. La exportación de servicios aún no se ofrece.

Para las operaciones sujetas al sistema de detracciones (SPOT), la factura informa el código del bien o servicio (catálogo 54), el porcentaje y la cuenta del emisor en el Banco de la Nación:

Ventana de terminal
curl https://api.emitay.com/v1/invoices \
-H "Authorization: Bearer $EMITAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"series": "F001",
"customer": { "document_number": "20100066603", "name": "CLIENTE S.A." },
"items": [
{
"description": "Servicio de mantenimiento",
"quantity": 1,
"unit_price": "1000.00",
"unit_code": "ZZ"
}
],
"detraction": { "code": "037", "percent": 12, "account": "00-001-234567" }
}'
  • El monto se calcula del porcentaje y del total. SUNAT no valida el porcentaje: acertarlo es tu responsabilidad.
  • La detracción va siempre en soles. Si la factura está en otra moneda, amount es obligatorio: Emitay no aplica un tipo de cambio.
  • payment_method es el medio de pago (catálogo 59); por defecto 001, depósito en cuenta.
  • No cambia ningún total del comprobante. Solo se informa en facturas.

Un anticipo se factura cuando se recibe, como cualquier venta. El comprobante final lo aplica con prepayments, citando la factura o boleta del anticipo y su importe con impuestos:

Ventana de terminal
curl https://api.emitay.com/v1/invoices \
-H "Authorization: Bearer $EMITAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"series": "F001",
"customer": { "document_number": "20100066603", "name": "CLIENTE S.A." },
"items": [
{
"description": "Desarrollo de sitio web",
"quantity": 1,
"unit_price": "5000.00"
}
],
"prepayments": [
{
"document": { "type": "01", "series": "F001", "number": 87 },
"amount": "1180.00"
}
]
}'

El importe total baja en lo anticipado. Los anticipos no pueden superar el comprobante. tax_affectation del anticipo solo hace falta si el comprobante mezcla operaciones gravadas, exoneradas o inafectas.

La línea que vende bolsas lleva icbper: true; quantity es el número de bolsas. Emitay aplica el monto por bolsa que corresponde a la fecha de emisión y lo suma aparte del IGV.

Ventana de terminal
curl https://api.emitay.com/v1/receipts \
-H "Authorization: Bearer $EMITAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"series": "B001",
"items": [
{
"description": "Arroz extra 5 kg",
"quantity": 1,
"unit_price": "24.90",
"price_includes_tax": true
},
{
"description": "Bolsa de plástico",
"quantity": 2,
"unit_price": "0.10",
"price_includes_tax": true,
"icbper": true
}
]
}'

Solo en soles y con una cantidad entera.

Caso Cómo se declara Límites
ISC items[].isc: { "rate": 20 } en la línea Solo el sistema al valor. No se combina con IVAP ni con exportación
IVAP Todas las líneas con tax_affectation: "17" No se mezcla con otras operaciones
Percepción perception: { "code": "51" } en el comprobante (51 venta interna 2 %, 52 combustible 1 %, 53 tasa especial 0.5 %) Solo en soles y al contado. Va después del importe total, como «Total a cobrar»

El ISC por monto fijo o por precio al público, los códigos 004, 027 y 028 del catálogo 54, la exportación de servicios, los cargos y el redondeo.

Todos los campos están en la referencia.