Download the PHP package squareetlabs/laravel-verifactu without Composer
On this page you can find all versions of the php package squareetlabs/laravel-verifactu. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download squareetlabs/laravel-verifactu
More information about squareetlabs/laravel-verifactu
Files in squareetlabs/laravel-verifactu
Package laravel-verifactu
Short Description Paquete Laravel para gestión y registro de facturación electrónica VeriFactu. Compatible con Laravel 10 a 12.x
License MIT
Informations about the package laravel-verifactu
Laravel Verifactu - Sistema de facturación electrónica
Paquete Laravel 10/11/12 para gestión y registro de facturación electrónica VeriFactu
Características principales
- Modelos Eloquent para invoices, breakdowns y recipients
- Enum types para campos fiscales (invoice type, tax type, regime, etc.)
- Helpers para operaciones de fecha, string y hash
- Servicio AEAT client (configurable e inyectable)
- Form Requests para validación
- API Resources para respuestas RESTful
- Factories y tests unitarios para todos los componentes core
- Modos duales: VERIFACTU y NO VERIFACTU (Requerimiento)
- Helper QR: Generación automática de URLs para códigos QR según modo y entorno
- Campos avanzados: Encadenamiento blockchain, facturas rectificativas, subsanación
- Multi-tenant: Soporte para múltiples instalaciones bajo el mismo NIF
- Clientes extranjeros: Soporte para identificadores internacionales
- Estado AEAT: Campos para tracking de respuestas y estado de registro
- Listo para extensión y uso en producción
Instalación
Publica la configuración y migraciones:
Configuración
Edita tu archivo .env o config/verifactu.php según tus necesidades:
Modos de facturación
Este paquete soporta dos modos de facturación:
1. Modo VERIFACTU (por defecto)
El modo estándar de facturación electrónica.
2. Modo NO VERIFACTU (Requerimiento)
Para facturas bajo requerimiento de la Agencia Tributaria. Requiere un RefRequerimiento proporcionado por Hacienda.
El paquete ajustará automáticamente las URLs del servicio SOAP según el modo configurado:
- Producción VERIFACTU:
https://www1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP - Producción NO VERIFACTU:
https://www1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/RequerimientoSOAP - Pruebas VERIFACTU:
https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP - Pruebas NO VERIFACTU:
https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/RequerimientoSOAP
Colaborador social (entidad colaboradora AEAT)
Si tu plataforma está registrada como entidad colaboradora de la AEAT, puedes remitir registros en nombre de tus clientes usando el certificado de la plataforma: los obligados de emisión (autónomos, pymes…) no necesitan aportar su propio certificado digital.
En aplicaciones multi-tenant, usa AeatClientFactory (resuelve el certificado
vía el contrato CertificateProvider, por defecto desde config):
Si tu aplicación guarda los certificados en otro sitio (por emisor, cifrados, Vault, S3+KMS...), implementa el contrato y re-vincúlalo:
Parámetros del Sistema Informático
Configura los parámetros según las características de tu sistema:
- tipo_uso_posible_solo_verifactu: Indica si el sistema solo puede usarse en modo VERIFACTU (
S) o también en modo NO VERIFACTU (N) - tipo_uso_posible_multi_ot: Indica si el sistema puede usarse con múltiples obligados tributarios (
SoN) - indicador_multiples_ot: Indica si existen múltiples obligados tributarios en el sistema (
SoN)
Variables de entorno disponibles
Todas las opciones de configuración pueden establecerse mediante variables de entorno en tu archivo .env:
Estructura de configuración completa
El archivo config/verifactu.php incluye la siguiente estructura:
Integración
Este paquete soporta dos modos de uso:
1. Proyectos Nuevos (Uso completo)
Si estás empezando un proyecto desde cero, puedes usar los modelos y migraciones que incluye el paquete.
-
Habilita las migraciones en tu
.env: -
Ejecuta las migraciones:
- Usa los modelos
Squareetlabs\VeriFactu\Models\Invoice,BreakdownyRecipientdirectamente.
2. Sistemas Existentes (Adaptador)
Si ya tienes tu propio sistema de facturación, no necesitas usar nuestras migraciones. Solo necesitas implementar los contratos en tus modelos.
- Asegúrate de que
VERIFACTU_LOAD_MIGRATIONSesfalse(por defecto). -
Genera un adaptador para tu modelo de factura:
- Esto generará el código necesario en tu terminal. Cópialo a tu modelo
App\Models\Invoicee implementa la interfazVeriFactuInvoice.
Ejemplo de implementación:
Uso rápido
Crear una Invoice (Ejemplo de Controller)
Tipos de Invoice disponibles
El paquete soporta todos los tipos de factura según la normativa AEAT:
| Tipo | Enum | Descripción |
|---|---|---|
| F1 | InvoiceType::STANDARD |
Factura completa |
| F2 | InvoiceType::SIMPLIFIED |
Factura simplificada |
| F3 | InvoiceType::SUBSTITUTE |
Factura que sustituye a otra |
| F4 | InvoiceType::EXPORT |
Factura de exportación |
| R1 | InvoiceType::RECTIFICATIVE_R1 |
Rectificativa por sustitución o diferencia |
| R2 | InvoiceType::RECTIFICATIVE_R2 |
Rectificativa por anulación |
| R3 | InvoiceType::RECTIFICATIVE_R3 |
Rectificativa por descuento |
| R4 | InvoiceType::RECTIFICATIVE_R4 |
Rectificativa por incremento |
| R5 | InvoiceType::RECTIFICATIVE_R5 |
Rectificativa por otros conceptos |
Ejemplos de tipos de Invoice
A continuación, ejemplos de cómo crear cada tipo de invoice usando el modelo y enums:
Factura estándar
Factura simplificada
Factura de sustitución
Factura rectificativa (R1)
Factura de exportación (F4)
Factura con encadenamiento blockchain
Subsanación (reenvío tras rechazo AEAT)
Nota: Para facturas rectificativas y sustitutivas, si implementas los campos y relaciones adicionales (como facturas rectificadas/sustituidas, tipo de rectificación, importe de rectificación), deberás añadirlos en el array de creación.
Campos avanzados del modelo Invoice
El modelo Invoice incluye campos avanzados para cumplir con todas las especificaciones AEAT:
Campos de encadenamiento blockchain
Campos de facturas rectificativas
Campos de subsanación
Campos multi-tenant (múltiples instalaciones)
Si tu sistema gestiona múltiples instalaciones bajo el mismo NIF emisor:
Campos de estado de respuesta AEAT
Después de enviar una factura a AEAT, puedes actualizar estos campos:
Campos adicionales
Tabla de referencia rápida de campos
Campos básicos
| Campo | Tipo | Descripción |
|---|---|---|
number |
string | Número/serie de factura |
date |
date | Fecha de expedición |
type |
InvoiceType enum | Tipo de factura (F1, F2, R1, etc.) |
amount |
decimal | Base imponible |
tax |
decimal | Importe de impuestos |
total |
decimal | Importe total |
Campos de cliente/emisor
| Campo | Tipo | Descripción |
|---|---|---|
customer_name |
string|null | Nombre del cliente |
customer_tax_id |
string|null | NIF/CIF del cliente |
customer_country |
string|null | País del cliente (ISO) |
issuer_name |
string | Nombre del emisor |
issuer_tax_id |
string | NIF/CIF del emisor |
issuer_country |
string | País del emisor (ISO) |
Campos de encadenamiento blockchain
| Campo | Tipo | Descripción |
|---|---|---|
is_first_invoice |
boolean | Si es la primera factura de la cadena |
previous_invoice_number |
string|null | Número de factura anterior |
previous_invoice_date |
date|null | Fecha de factura anterior |
previous_invoice_hash |
string|null | Hash de factura anterior |
hash |
string|null | Hash de esta factura |
Campos de facturas rectificativas
| Campo | Tipo | Descripción |
|---|---|---|
rectificative_type |
string|null | 'S' = Sustitución, 'I' = Diferencia |
rectified_invoices |
array | Array de números de facturas rectificadas |
rectification_amount |
array | Importes de rectificación (base, tax, total) |
Campos de subsanación
| Campo | Tipo | Descripción |
|---|---|---|
is_subsanacion |
boolean | Si es una subsanación |
rejected_invoice_number |
string|null | Número de factura rechazada |
rejection_date |
date|null | Fecha de rechazo |
Campos multi-tenant
| Campo | Tipo | Descripción |
|---|---|---|
numero_instalacion |
string|null | Identificador de instalación |
Campos de estado AEAT
| Campo | Tipo | Descripción |
|---|---|---|
aeat_status |
string|null | Estado: ACEPTADA, RECHAZADA, ENVIADA |
aeat_response_code |
string|null | Código de respuesta AEAT |
aeat_response_message |
string|null | Mensaje de respuesta |
aeat_registration_date |
datetime|null | Fecha de registro en AEAT |
aeat_csv |
string|null | CSV de registro |
has_aeat_warnings |
boolean | Si tiene advertencias |
Campos adicionales
| Campo | Tipo | Descripción |
|---|---|---|
operation_date |
date|null | Fecha de operación (si difiere de date) |
tax_period |
string|null | Período fiscal (01, 02, 0A, etc.) |
correction_type |
string|null | Tipo de corrección |
external_reference |
string|null | Referencia externa |
description |
string|null | Descripción de la operación |
status |
string | Estado interno (draft, sent, accepted, rejected) |
csv |
string|null | CSV interno |
Ejemplos avanzados
Factura con cliente extranjero
Para clientes extranjeros, usa el campo id_type en el modelo Recipient:
Tipos de identificadores extranjeros disponibles:
ForeignIdType::VAT_NUMBER- Número de IVAForeignIdType::PASSPORT- PasaporteForeignIdType::OFFICIAL_ID- Documento oficial de identidadForeignIdType::RESIDENCE_CERTIFICATE- Certificado de residenciaForeignIdType::OTHER- Otro tipo
Factura rectificativa completa (por diferencia)
Factura con múltiples instalaciones (multi-tenant)
Cadena completa de facturas (blockchain)
Subsanación de factura rechazada
Envío de Invoice a AEAT (Ejemplo de Controller)
Nota: Protege este endpoint con autenticación/autorización adecuada.
El resultado incluirá el XML enviado y recibido, útil para depuración.
Si el certificado no es válido o hay error de validación, el array tendrá 'status' => 'error' y 'message'.
Consultar estado de facturas enviadas
Puedes consultar el estado de las facturas después de enviarlas:
Validación y creación de Breakdown (Ejemplo de Controller)
Uso de Helpers
Helpers de fecha, string y hash
Generación de URL para códigos QR
El paquete incluye un helper para generar las URLs necesarias para los códigos QR que deben incluirse en las facturas según la normativa VERIFACTU.
El helper generará automáticamente la URL correcta según el entorno y modo:
- Producción VERIFACTU:
https://www2.agenciatributaria.gob.es/wlpl/TIKE-CONT/ValidarQR - Producción NO VERIFACTU:
https://www2.agenciatributaria.gob.es/wlpl/TIKE-CONT/ValidarQRNoVerifactu - Pruebas VERIFACTU:
https://prewww2.aeat.es/wlpl/TIKE-CONT/ValidarQR - Pruebas NO VERIFACTU:
https://prewww2.aeat.es/wlpl/TIKE-CONT/ValidarQRNoVerifactu
Si no proporcionas el parámetro verifactuMode, el helper usará el valor configurado en config/verifactu.php:
Ejemplo en un controlador:
Uso avanzado
Integración de eventos y listeners
Puedes disparar eventos cuando se crean, actualizan o envían invoices a AEAT. Ejemplo:
Despacha el evento tras el envío:
Crea un listener para notificaciones o logging:
Registra tu evento y listener en EventServiceProvider:
Políticas de autorización
Puedes restringir el acceso a invoices usando policies de Laravel:
Registra la policy en AuthServiceProvider:
Úsala en tu controller:
Integración de notificaciones
Puedes notificar a usuarios o admins cuando una invoice se envía o falla:
Despacha la notificación en tu job o listener:
Integración con colas (queues)
Puedes enviar invoices a AEAT de forma asíncrona usando colas:
En tu job, implementa ShouldQueue:
Configura tu conexión de cola en .env y ejecuta el worker:
Auditoría
Puedes usar paquetes como owen-it/laravel-auditing para auditar cambios en invoices:
-
Instala el paquete:
-
Añade el contrato
\OwenIt\Auditing\Contracts\Auditablea tu modelo: - Ahora todos los cambios en invoices serán auditados automáticamente. Puedes ver los logs:
Testing
Ejecuta todos los tests unitarios:
Contribuir
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una rama para tu feature
- Commit tus cambios
- Push a la rama
- Abre un Pull Request
Licencia
Este paquete es open-source bajo la Licencia MIT.
Soporte
- Documentación técnica: https://sede.agenciatributaria.gob.es/Sede/iva/sistemas-informaticos-facturacion-verifactu/informacion-tecnica.html
- Issues: https://github.com/squareetlabs/LaravelVerifactu/issues
Autores
- Alberto Rial Barreiro - SquareetLabs
- Jacobo Cantorna Cigarrán - SquareetLabs
Si este paquete te ha sido útil, ¡no olvides darle una estrella en GitHub!
