Download the PHP package djasoft/sunat-comprobantes without Composer
On this page you can find all versions of the php package djasoft/sunat-comprobantes. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download djasoft/sunat-comprobantes
More information about djasoft/sunat-comprobantes
Files in djasoft/sunat-comprobantes
Package sunat-comprobantes
Short Description Cálculo de totales e IGV y contenido del código QR para comprobantes de pago electrónicos de SUNAT (Perú). Sin dependencias de framework.
License MIT
Informations about the package sunat-comprobantes
Comprobantes SUNAT
Dos piezas que todo el que factura electrónicamente en Perú acaba escribiendo: el cálculo de totales e IGV de un comprobante y el contenido del código QR de la representación impresa.
Sin dependencias de framework. Funciona igual en Laravel, Symfony, Slim o PHP a secas.
Por qué existe
La facturación electrónica peruana está bien resuelta en la parte difícil: Greenter genera el XML, lo firma y lo envía a SUNAT. Pero antes de llegar ahí hay dos cosas que cada proyecto reimplementa:
- Calcular los totales. Separar las bases imponibles por tipo de afectación, sumar el IGV y el ICBPER, aplicar el redondeo hacia abajo al décimo, y generar la leyenda del importe en letras. Son reglas de SUNAT, no de tu negocio.
- Armar el QR. Diez campos separados por
|, en un orden exacto y con un|final que se olvida muy fácilmente.
Ninguna de las dos es complicada. Las dos son fáciles de equivocar, y el error se descubre tarde: cuando SUNAT rechaza el comprobante.
Este paquete sale de un ERP en producción y viene con 18 tests.
Cálculo de totales
Calculator trabaja con arrays planos y usa los mismos nombres de campo que Greenter,
así que el resultado se le pasa directamente.
Tipos de afectación del catálogo 07, como constantes:
| Constante | Código | Significado |
|---|---|---|
Calculator::GRAVADO |
10 | Gravado con IGV |
Calculator::EXONERADO |
20 | Exonerado |
Calculator::INAFECTO |
30 | Inafecto |
Calculator::EXPORTACION |
40 | Exportación |
Cualquier otro código se trata como operación gratuita: su base va a
mtoOperGratuitas y su IGV a mtoIGVGratuitas, sin sumar al importe a pagar.
Dos detalles que suelen costar un rechazo
- El redondeo va hacia abajo.
mtoImpVenta = floor(subTotal * 10) / 10, nuncaround(). La diferencia se reporta enredondeo. - El valor unitario lleva 6 decimales, no 2. SUNAT valida el detalle con esa precisión y redondear antes de tiempo descuadra el comprobante.
Si tu IGV no es 18%, pásalo como último argumento de buildDetail. Y si facturas en dólares,
new Calculator('DOLARES AMERICANOS') cambia la moneda de la leyenda.
Contenido del código QR
En una boleta a consumidor final omite los datos del cliente: por defecto quedan como 0 y
-, que es lo que espera SUNAT.
Esta clase solo produce la cadena. Renderizarla es cosa tuya y de la librería que prefieras:
Alcance
Esto no envía nada a SUNAT ni genera XML: para eso está Greenter, y no tiene sentido reescribirlo. Aquí solo están las dos piezas de cálculo y formato que Greenter no cubre.
Requisitos
PHP 8.2+ y luecano/numero-a-letras para la
leyenda del importe.
Tests
Licencia
MIT. Úsalo en lo que quieras, incluido software comercial.
Autor
Daniel Morán Vílchez — Djasoft · @DanielMoranV