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.
Exonerado e inafecto
Sección titulada «Exonerado e inafecto»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 |
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" } ] }'$cabeceras = @{ Authorization = "Bearer $env:EMITAY_API_KEY"}$cuerpo = @'{ "series": "B001", "items": [ { "description": "Libro de cuentos", "quantity": 2, "unit_price": "35.00", "tax_affectation": "20" } ]}'@Invoke-RestMethod -Method Post ` -Uri https://api.emitay.com/v1/receipts ` -Headers $cabeceras ` -ContentType "application/json; charset=utf-8" ` -Body $cuerpoimport { Emitay } from "emitay";
const emitay = new Emitay(); // toma la llave de EMITAY_API_KEY
const boleta = await emitay.receipts.create({ 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).
Operaciones gratuitas
Sección titulada «Operaciones gratuitas»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.
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" } ] }'$cabeceras = @{ Authorization = "Bearer $env:EMITAY_API_KEY"}$cuerpo = @'{ "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" } ]}'@Invoke-RestMethod -Method Post ` -Uri https://api.emitay.com/v1/invoices ` -Headers $cabeceras ` -ContentType "application/json; charset=utf-8" ` -Body $cuerpoimport { Emitay } from "emitay";
const emitay = new Emitay(); // toma la llave de EMITAY_API_KEY
const factura = await emitay.invoices.create({ 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.
Descuentos
Sección titulada «Descuentos»Un descuento va en una línea (items[].discount) o en todo el comprobante (discount), por
porcentaje o por monto:
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" } }'$cabeceras = @{ Authorization = "Bearer $env:EMITAY_API_KEY"}$cuerpo = @'{ "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" }}'@Invoke-RestMethod -Method Post ` -Uri https://api.emitay.com/v1/invoices ` -Headers $cabeceras ` -ContentType "application/json; charset=utf-8" ` -Body $cuerpoimport { Emitay } from "emitay";
const emitay = new Emitay(); // toma la llave de EMITAY_API_KEY
const factura = await emitay.invoices.create({ 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" },});percentoamount, uno de los dos.affects_base(por defectotrue): el descuento rebaja la base imponible, y con ella el IGV. Confalsesolo 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).
Venta al crédito y cuotas
Sección titulada «Venta al crédito y cuotas»Una factura al crédito declara sus cuotas. Deben sumar el importe total, y ninguna puede vencer antes de la fecha de emisión.
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" } ] } }'$cabeceras = @{ Authorization = "Bearer $env:EMITAY_API_KEY"}$cuerpo = @'{ "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" } ] }}'@Invoke-RestMethod -Method Post ` -Uri https://api.emitay.com/v1/invoices ` -Headers $cabeceras ` -ContentType "application/json; charset=utf-8" ` -Body $cuerpoimport { Emitay } from "emitay";
const emitay = new Emitay(); // toma la llave de EMITAY_API_KEY
const factura = await emitay.invoices.create({ 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.
Exportación
Sección titulada «Exportación»Todas las líneas llevan tax_affectation: "40" y el cliente es del exterior, sin RUC:
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" } ] }'$cabeceras = @{ Authorization = "Bearer $env:EMITAY_API_KEY"}$cuerpo = @'{ "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" } ]}'@Invoke-RestMethod -Method Post ` -Uri https://api.emitay.com/v1/invoices ` -Headers $cabeceras ` -ContentType "application/json; charset=utf-8" ` -Body $cuerpoimport { Emitay } from "emitay";
const emitay = new Emitay(); // toma la llave de EMITAY_API_KEY
const factura = await emitay.invoices.create({ 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.
Detracción
Sección titulada «Detracción»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:
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" } }'$cabeceras = @{ Authorization = "Bearer $env:EMITAY_API_KEY"}$cuerpo = @'{ "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" }}'@Invoke-RestMethod -Method Post ` -Uri https://api.emitay.com/v1/invoices ` -Headers $cabeceras ` -ContentType "application/json; charset=utf-8" ` -Body $cuerpoimport { Emitay } from "emitay";
const emitay = new Emitay(); // toma la llave de EMITAY_API_KEY
const factura = await emitay.invoices.create({ 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,
amountes obligatorio: Emitay no aplica un tipo de cambio. payment_methodes el medio de pago (catálogo 59); por defecto001, depósito en cuenta.- No cambia ningún total del comprobante. Solo se informa en facturas.
Anticipos
Sección titulada «Anticipos»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:
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" } ] }'$cabeceras = @{ Authorization = "Bearer $env:EMITAY_API_KEY"}$cuerpo = @'{ "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" } ]}'@Invoke-RestMethod -Method Post ` -Uri https://api.emitay.com/v1/invoices ` -Headers $cabeceras ` -ContentType "application/json; charset=utf-8" ` -Body $cuerpoimport { Emitay } from "emitay";
const emitay = new Emitay(); // toma la llave de EMITAY_API_KEY
const factura = await emitay.invoices.create({ 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.
Bolsas plásticas (ICBPER)
Sección titulada «Bolsas plásticas (ICBPER)»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.
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 } ] }'$cabeceras = @{ Authorization = "Bearer $env:EMITAY_API_KEY"}$cuerpo = @'{ "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 } ]}'@Invoke-RestMethod -Method Post ` -Uri https://api.emitay.com/v1/receipts ` -Headers $cabeceras ` -ContentType "application/json; charset=utf-8" ` -Body $cuerpoimport { Emitay } from "emitay";
const emitay = new Emitay(); // toma la llave de EMITAY_API_KEY
const boleta = await emitay.receipts.create({ 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.
ISC, IVAP y percepción
Sección titulada «ISC, IVAP y percepción»| 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» |
Lo que aún no se ofrece
Sección titulada «Lo que aún no se ofrece»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.