Verifactu

  • Posts: 44
  • Thank you received: 3
  • Hikashop Business
2 weeks 6 days ago #373037

-- HikaShop version -- : 6.5.0.

Hola,

Alguien esta interesado en un plugin para Verifactu para conectar con la AEAT de España?

Un saludo

Please Log in or Create an account to join the conversation.

  • Posts: 86081
  • Thank you received: 14190
  • MODERATOR
2 weeks 6 days ago #373038

Hola,

Sí, hay interés, es un tema que nos empieza a llegar de los comerciantes españoles.

Por nuestra parte no está previsto integrarlo en el núcleo de HikaShop a corto plazo, y la razón no es técnica sino legal : el reglamento no obliga solamente al comerciante, obliga también al productor del software, que debe emitir una declaración responsable certificando que su programa cumple los requisitos de integridad e inalterabilidad. Un sistema informático de facturación tiene que ser no modificable por el usuario, y HikaShop es una extensión PHP que el comerciante instala en su propio servidor y que puede modificar libremente con overrides y plugins. Convertir eso en un SIF certificado no es un desarrollo, es un compromiso permanente.

Por eso, si desarrollas un plugin, la arquitectura que te recomendamos es la de puente y no la de SIF completo : HikaShop envía los datos de la factura a un proveedor VeriFactu ya certificado (hay varias APIs en el mercado en España), y ese proveedor genera el registro encadenado, lo firma, lo remite a la AEAT y te devuelve la huella, el CSV y el QR para imprimir en la factura. Así el certificado del comerciante no vive en el servidor de la tienda y la declaración responsable la mantiene el proveedor, no tú. La otra vía, generar tú mismo el registro de alta, la cadena de huellas, la firma XAdES y el registro de eventos, es mucho más trabajo y te deja con la responsabilidad encima.

En HikaShop tienes lo necesario para engancharlo :

- El evento onAfterInvoiceCreate se dispara justo cuando HikaShop asigna el número de factura a un pedido, con el pedido completo como parámetro. Es el punto natural para generar el registro de alta.
- El plugin Attach invoice genera el PDF de la factura con TCPDF, que sabe dibujar códigos QR de forma nativa, así que ahí es donde se añade el QR y la mención VERI*FACTU.

Dos puntos que conviene aclarar antes de empezar, porque cambian el alcance :

- Muchas tiendas no necesitan que HikaShop sea el SIF. Si la factura la emite su programa de contabilidad a partir de un export de pedidos, el SIF es ese programa, y HikaShop solo le alimenta los datos. Los obligados al SII están directamente fuera del ámbito de VeriFactu.
- Si eliges la modalidad VeriFactu, con remisión inmediata a la AEAT, los registros no necesitan firma electrónica, es la remisión la que da la garantía. La modalidad sin remisión sí exige firma y conservación local, y es bastante más pesada de implementar. Para una tienda online la primera es casi siempre la buena opción.

Sobre las herramientas, existe la librería josemmo/Verifactu-PHP, en MIT, que cubre la generación de los registros y el envío a la AEAT. Curiosamente es del mismo autor que josemmo/einvoicing, la librería que ya usamos en nuestro plugin Attach invoice para el formato UBL. Pide PHP 8.2 como mínimo, así que habría que ponerle un control de versión en el plugin.

Si desarrollas el plugin, dínoslo, lo podemos referenciar en nuestra web para que los comerciantes españoles lo encuentren.

Please Log in or Create an account to join the conversation.

  • Posts: 44
  • Thank you received: 3
  • Hikashop Business
2 weeks 3 days ago #373059

# PLG_HIKASHOP_VERIFACTU

He desarrollado personalmente este plugin para integrar la gestión de **Veri*Factu** con **Joomla + HikaShop**, incorporando las funciones necesarias para la generación, gestión y seguimiento de facturas y abonos.

El plugin ha sido desarrollado y **se han realizado las pruebas pertinentes con la AEAT** dentro del entorno y configuración utilizados durante su desarrollo.

## Características principales

* Gestión de facturas y abonos mediante Veri*Factu*.
* Registro en la base de datos de un **historial de todas las facturas y abonos** procesados por el plugin.
* Conservación de la información necesaria para realizar un seguimiento de cada registro.
* Gestión de facturas negativas/abonos y sus correspondientes tipos de devolución.
* Generación y utilización del **código QR Veri*Factu*** en las facturas.
* Declaración Responsable integrada en el propio plugin.
* Condiciones de uso del software incluidas.
* Manual completo de instalación y configuración incluido dentro del plugin.
* Configuración de los campos personalizados necesarios para el correcto funcionamiento del sistema.

## Código QR

He incorporado la generación del **código QR Veri*Factu*** dentro del funcionamiento del plugin.

El código QR puede utilizarse con **las dos opciones de generación de facturas PDF**:

* La **plantilla de factura incluida de forma nativa en HikaShop**.
* El plugin **HikaShop - generate PDF invoice**.

De esta manera, el código QR Veri*Factu* puede incorporarse a las facturas PDF independientemente de cuál de estos dos sistemas de generación de facturas se utilice.

## Historial de facturas y abonos

El plugin mantiene en la base de datos un **historial de las facturas y abonos gestionados**, permitiendo conservar la información relacionada con los registros enviados y su correspondiente seguimiento.

Esto permite disponer de una trazabilidad de las operaciones realizadas mediante el sistema Veri*Factu*.

## Instalación y configuración

El plugin incluye un **manual completo de instalación y configuración** dentro del propio archivo ZIP.

En dicho manual se detallan, entre otros aspectos:

* Instalación del plugin.
* Configuración necesaria de Veri*Factu*.
* Configuración de HikaShop.
* Configuración de las facturas y abonos.
* Creación y configuración de los **campos personalizados necesarios en HikaShop**.
* Configuración del código QR.
* Procedimientos de comprobación.
* Comandos necesarios para determinadas operaciones.

Se recomienda seguir el manual paso a paso antes de utilizar el plugin en producción.

## Acceso mediante SSH

Para realizar correctamente la instalación y configuración completa del plugin es necesario disponer de **acceso al terminal SSH del alojamiento**.

Los comandos necesarios para la instalación, configuración y comprobación están incluidos en el **manual que se encuentra dentro del propio plugin**.

Por este motivo, antes de instalarlo es necesario comprobar que el alojamiento permite el acceso mediante SSH y que se dispone de los permisos necesarios para ejecutar los comandos indicados en el manual.

## Joomla y HikaShop

El plugin ha sido desarrollado para trabajar conjuntamente con **Joomla y HikaShop**, pero es importante señalar que **Joomla y HikaShop no han sido desarrollados por Locker25.com**.

El plugin utiliza las funcionalidades proporcionadas por estos sistemas para realizar su integración con Veri*Factu*.

## ⚠️ Recomendación antes de instalar

**Recomendamos realizar una copia de seguridad completa del sitio web y de la base de datos antes de instalar el plugin.**

La copia de seguridad debe realizarse antes de cualquier instalación, actualización o modificación relacionada con el plugin.

Esto permitirá restaurar el sitio y la base de datos en caso de que se produzca cualquier incidencia durante la instalación o configuración.

## Pruebas con la AEAT

Durante el desarrollo se han realizado las **pruebas pertinentes con la AEAT** para comprobar el funcionamiento del sistema de envío y gestión de los registros Veri*Factu* dentro del entorno utilizado para el desarrollo.

No obstante, el funcionamiento final puede depender de la configuración concreta del servidor, Joomla, HikaShop, PHP, certificado digital, configuración de la empresa y otros componentes de terceros instalados en cada alojamiento.

Por ello, se recomienda realizar las comprobaciones correspondientes antes de utilizar el sistema en producción.

## Software freeware

**PLG_HIKASHOP_VERIFACTU es software freeware desarrollado por Locker25.com.**

El plugin se distribuye gratuitamente y ha sido desarrollado con el objetivo de facilitar la integración de HikaShop con Veri*Factu*.

El usuario debe leer y aceptar las **Condiciones de Uso** y la **Declaración Responsable** incluidas en el propio plugin antes de utilizarlo.

## Recomendación final

Antes de poner el sistema en producción:

1. Realice una **copia de seguridad completa**.
2. Lea el **manual incluido dentro del plugin**.
3. Compruebe que dispone de **acceso SSH**.
4. Cree y configure todos los **campos personalizados de HikaShop** indicados en el manual.
5. Configure correctamente el sistema Veri*Factu*.
6. Compruebe la configuración del código QR.
7. Realice las pruebas correspondientes.
8. Verifique que las facturas y abonos quedan correctamente registrados en el historial.

**Locker25.com recomienda realizar todas estas comprobaciones antes de utilizar el plugin en un entorno de producción.**

Please Log in or Create an account to join the conversation.

  • Posts: 86081
  • Thank you received: 14190
  • MODERATOR
2 weeks 3 days ago #373060

Hola,

Enhorabuena, y gracias por compartirlo con la comunidad. En el mensaje no aparece ningún enlace ni fichero adjunto : ¿dónde pueden descargarlo los comerciantes? Con la URL lo referenciamos desde nuestra web para que los comerciantes españoles lo encuentren.

Dos sugerencias, porque los dos puntos que más van a frenar la adopción son el acceso SSH y la configuración manual :

1. El acceso SSH. Muchos alojamientos compartidos no lo ofrecen, o lo ofrecen sin permisos suficientes, y eso deja fuera a buena parte de las tiendas. Si los comandos son para instalar dependencias con composer, la solución habitual es incluir ya la carpeta vendor dentro del ZIP del plugin : es lo que hacemos nosotros en el plugin "HikaShop - generate PDF invoice", que se instala sin tocar la línea de comandos. Y si son tareas periódicas, Joomla tiene su propio sistema de tareas programadas con lanzador web, que evita depender del cron del servidor.

2. Los campos personalizados. En lugar de pedirlos en el manual, el plugin puede crearlos él mismo en su instalación, con la clase de campos de HikaShop. Así se evitan los errores de nombre de columna, que son difíciles de diagnosticar después. Y si necesita tablas propias, HikaShop dispara el evento onHikashopBeforeCheckDB durante la comprobación de la base de datos : ahí puede declarar sus tablas y sus columnas, y HikaShop las crea y las mantiene al día en cada actualización, igual que hacen varios de nuestros plugins.

Y dos preguntas por curiosidad técnica :

- ¿Qué modalidad implementa, VERI*FACTU con remisión inmediata a la AEAT, o el modo sin remisión con firma XAdES y conservación local?
- ¿Qué versión mínima de PHP requiere? Es útil indicarlo en la página de descarga, sobre todo si usa una librería que pide PHP 8.2.

Please Log in or Create an account to join the conversation.

  • Posts: 44
  • Thank you received: 3
  • Hikashop Business
1 week 6 days ago #373094

Hello Nicolas,

I have modified the plugin, and an SSH terminal is no longer required. I have reduced the setup process to the bare minimum needed to get the plugin working. Nevertheless, any improvements are always welcome.

The instructions are included in the plugin itself.

Here is the link to the .zip file.

drive.google.com/file/d/1FmY6aDSHikLOHNX...Ki5/view?usp=sharing

Best regards,

Nico

Please Log in or Create an account to join the conversation.

  • Posts: 86081
  • Thank you received: 14190
  • MODERATOR
1 week 5 days ago #373095

Hola,

Hemos estudiado tu plugin a fondo y le hemos dedicado tiempo, porque nos parece la pieza que le falta a las tiendas españolas y porque la arquitectura que has elegido es la correcta: apoyarte en una librería ya existente para la firma, la huella encadenada y el diálogo SOAP con la AEAT, en vez de reinventarlo.

Para poder trabajar sobre él sin pisarte nada, lo hemos puesto en un repositorio público de GitHub:

github.com/hikashop-nicolas/hikashop-verifactu

El primer commit es tu versión 0.30.32 tal cual, sin tocar, así que todo lo que viene después se lee como una diferencia contra tu código. La licencia GPLv2 y tu autoría están indicadas en el README y en la descripción del repositorio. Es tu plugin: coge de aquí lo que te sirva, ignora lo que no, y si prefieres llevarlo tú en tu propio repositorio, encantados de enviar los cambios allí.

Cada corrección va en su propio commit, con el porqué explicado en el mensaje:

1. Instalación en MySQL, no solo en MariaDB
github.com/hikashop-nicolas/hikashop-verifactu/commit/bb3c42eb7
El SQL de instalación creaba las dos columnas del pedido con ADD COLUMN IF NOT EXISTS. Eso es una extensión de MariaDB: MySQL responde error 1064, el instalador de Joomla se para ahí y los campos personalizados que van después no llegan a crearse. Ahora las crea un script de instalación que comprueba antes en INFORMATION_SCHEMA, y funciona en los dos.

2. Funcionar sin el plugin de compatibilidad de Joomla
github.com/hikashop-nicolas/hikashop-verifactu/commit/fd6ba79c0
El plugin usaba JPlugin, JFactory y JLog, así que en Joomla 5 y 6 solo cargaba mientras estuviera activo "Comportamiento - Compatibilidad con versiones anteriores", que viene desactivado en una instalación nueva. Un plugin fiscal que deja de enviar facturas el día que alguien desactiva ese plugin es un riesgo que no compensa. Todas esas clases están sustituidas por sus equivalentes con espacio de nombres.

3. El registro ya no queda accesible desde la web
github.com/hikashop-nicolas/hikashop-verifactu/commit/0fa434e36
Cada operación se añadía a debug.log dentro de la carpeta del plugin, con números de pedido, números de factura y NIF. Esa carpeta la sirve el servidor web, así que el archivo se podía descargar sabiendo la dirección. Ahora se escribe en el registro de Joomla, en su carpeta de logs y con extensión .php, que Joomla protege.

4. No declarar un desglose inventado
github.com/hikashop-nicolas/hikashop-verifactu/commit/a1f48a3ca
Cuando el pedido no traía un desglose de impuestos utilizable, se construía una línea al 21 % con la base igual al total y cuota cero, y se enviaba. Una declaración equivocada es peor que una tardía: queda registrada y hay que rectificarla. Ahora ese caso devuelve un error y se anota en el log, y la factura no se envía hasta que se arreglen los impuestos del pedido.

5. La base imponible cuadra con el total de la factura
github.com/hikashop-nicolas/hikashop-verifactu/commit/7b54b1157
Este es el que más nos ha llamado la atención, y solo se ve con gastos de envío o de pago con impuesto. HikaShop guarda esos gastos con el impuesto ya incluido y además vuelve a sumar la cuota al calcular el campo amount de order_tax_info, así que la base que salía de ahí venía inflada justo en el doble del impuesto de esos gastos.

Lo hemos medido con un pedido real, creado con el propio recálculo de HikaShop: producto 100 + cargo 20 + envío 12,10 + pago 6,05, todo al 21 %.

HikaShop guarda: amount = 141,30   tax_amount = 28,35   total = 163,35
Se declaraba:    base   = 141,30 + cuota 28,35 = 169,65  frente a 163,35
Ahora:           base   = 135,00 + cuota 28,35 = 163,35  igual al total

La base se deduce ahora de la propia cuota (base = cuota / tipo), que es la relación que la AEAT comprueba. Los gastos en sí ya los recogías bien: HikaShop mete el envío, el pago y las líneas de tipo "order additional" que añaden otros plugins dentro de order_tax_info, que es de donde sale el desglose.

6. Una sola versión
github.com/hikashop-nicolas/hikashop-verifactu/commit/33bbc1d49
Convivían tres: el manifiesto decía 0.30.32, la declaración responsable 0.30.7 y el bloque SistemaInformatico que se envía a la AEAT iba fijo a "HikaShop" versión "1.0". La declaración responsable certifica una versión concreta de un sistema concreto, así que ahora las tres leen la versión del manifiesto, y el sistema se identifica como "HikaShop VeriFactu", que es lo que es. Ojo con ese punto: el sistema informático de facturación es tu plugin, no HikaShop, y la declaración la haces tú como productor.

También hemos cambiado la forma de empaquetarlo:

github.com/hikashop-nicolas/hikashop-verifactu/commit/512badb25
Las librerías ya no van commiteadas ni dentro del zip del repositorio: las trae Composer con las versiones fijadas en composer.lock, y los tres parches que necesita eseperio/verifactu-php (el formato de fecha en la huella, y numserie e importe en la URL del QR) los aplica un script en PHP en el momento de compilar, en vez de pedirle al comerciante que ejecute un bash dentro de la carpeta del plugin. Ese script se para con un error si un parche deja de encajar, porque un paquete sin parchear parece correcto y la AEAT lo rechaza. Reproduce tus dos archivos byte a byte.

Además se quitan del paquete los PDF de especificaciones de la AEAT y los tests que vienen con las librerías: nunca se ejecutan en una web y son 9,6 MB de los 11. El zip pasa de 8 MB a menos de 400 kB.

El empaquetado es automático: cada commit se compila y se publica, y cada versión etiquetada tiene su release con el zip instalable.

github.com/hikashop-nicolas/hikashop-verifactu/releases

Todo esto está probado en una instalación de Joomla 6 con HikaShop y MySQL 9.6, sin el plugin de compatibilidad instalado: el paquete instala, crea sus dos tablas, sus dos columnas y sus dos campos personalizados, la clase del plugin carga, y los campos de su pantalla de configuración se generan correctamente, incluido el desplegable que lee los estados de pedido reales de la tienda. Lo que no hemos probado es el envío real a la AEAT, porque no tenemos certificado ni entorno de pruebas dado de alta; esa parte sigue verificada solo por tu trabajo.

Una última cosa, y la decimos por ti más que por nosotros: la declaración responsable la firma quien produce el software. Si el plugin lo distribuyes tú, el productor eres tú, con lo que eso implica. Nosotros no podemos asumir ese papel por HikaShop, que es justo lo que te comentábamos más arriba en el hilo, y por eso este repositorio es una ayuda al tuyo y no un producto nuestro.

Please Log in or Create an account to join the conversation.

  • Posts: 44
  • Thank you received: 3
  • Hikashop Business
1 week 4 days ago #373102

Hi Nicolas,

Just sent you a private message.

Please Log in or Create an account to join the conversation.

  • Posts: 44
  • Thank you received: 3
  • Hikashop Business
1 week 2 days ago #373123

Made the latest changes on the Verifactu plugin and everything works fine.... Except when you uninstall the plugin then it messes completly up with frontend and backend styles. I really have no clue what it can be....

This message has an attachment file.
Please log in or register to see it.

The following user(s) said Thank You: nicolas

Please Log in or Create an account to join the conversation.

  • Posts: 86081
  • Thank you received: 14190
  • MODERATOR
1 week 2 days ago #373125

Hola,

Reproducido, y la causa no está en HikaShop sino en el manifiesto del plugin:

<media folder="media" destination="com_hikashop">
    <folder>plugins</folder>
</media>

Al desinstalar, Joomla procesa ese bloque en Installer::removeFiles() y termina con un Folder::delete() de la carpeta de destino, sin ninguna condición. Como el destino es com_hikashop, la desinstalación borra media/com_hikashop entera: css, js, images, mail y upload/safe. Por eso el front y el back se quedan sin estilos.

Comprobado en Joomla 6.2 con HikaShop y MySQL: instalar el plugin y desinstalarlo deja el sitio sin esa carpeta.

Te adjunto el paquete corregido, versión 0.31.1:

- El manifiesto ya no lleva bloque media.
- La plantilla de la factura viaja dentro del plugin, en layouts/invoice.php.
- El script de instalación la copia a media/com_hikashop/plugins/invoice.php, que es donde HikaShop busca la plantilla (attachinvoice.php la carga desde HIKASHOP_MEDIA.'plugins'.DS.$layout.'.php').
- Al desinstalar se borra solo ese archivo, y la carpeta únicamente si queda vacía.
- Si en esa ruta ya existe una plantilla que no es la del plugin, se conserva y se avisa por mensaje, en lugar de sobrescribirla.

Probado sobre el propio zip adjunto: instalación, desinstalación, y media/com_hikashop queda intacta.

Un aviso que conviene dar a quien ya haya desinstalado una versión anterior: media/com_hikashop se recupera reinstalando HikaShop encima de la instalación existente, pero los archivos vendidos que estuvieran en media/com_hikashop/upload/safe solo vuelven desde una copia de seguridad.
This attachment is hidden for guests.
Please log in or register to see it.

This message has an attachment file.
Please log in or register to see it.

Last edit: 1 week 2 days ago by nicolas.
The following user(s) said Thank You: nicobraam

Please Log in or Create an account to join the conversation.

  • Posts: 44
  • Thank you received: 3
  • Hikashop Business
1 week 2 days ago #373128

Hello Nicolas,

Works fine now but i can not create an invoice with QR code for somebody from portugal or other country. I also made some modifications in the layout and some fields are filled automaticly now. (date, version etc....) I also removed unnecessary address fields as address is taken from store_address. I added a new version for your convenience.

Best regards

This message has an attachment file.
Please log in or register to see it.

Last edit: 1 week 2 days ago by nicobraam.

Please Log in or Create an account to join the conversation.

  • Posts: 44
  • Thank you received: 3
  • Hikashop Business
1 week 2 days ago #373132

Just modified lastest version and it seems to work fine now. If somebody wants to check it and confirm your more than welcome :) :) :) :) :)

This message has an attachment file.
Please log in or register to see it.

The following user(s) said Thank You: nicolas

Please Log in or Create an account to join the conversation.

Time to create page: 0.080 seconds
Powered by Kunena Forum