Creando un producto por menos de 10€

Jorge Eψ=Ĥψ - Jun 20 - - Dev Community

Recientemente, he "sacado" al mercado un nuevo servicio que permite a las empresas que facturan a minoristas saber si alguno de ellos está acogido a un régimen especial de IVA, lo que le obliga a aplicar un tipo impositivo más.

Básicamente, la AEAT (la Hacienda española) ofrece un servicio para realizar esta consulta, de tal forma que rellenando un formulario, y tras identificarte con tu certificado electrónico, puedes consultar si un NIF está acogido a este servicio. Así mismo ofrece un servicio SOAP (ahí es nada) para realizar esta consulta mediante programación.

El caso es que a pocos clientes que manejes el tema de consultar uno a uno no es trivial por lo que he creadorecargo-de-equivalencia.es, un servicio en el que tras darte de alta, subes un fichero con los NIFs y de forma periódica el servicio los chequeará y te notificará si encuentra alguno acogido al servicio.

La "gracia" del servicio es que no requiere un chequeo en tiempo real por lo que se puede realizar un escaneo semanal o mensual, por ejemplo, y notificar vía email (más adelante podría ser también mediante un WebHook).

Así pues los requisitos del servicio serían:

  • dominio personalizado

  • una landing page donde explicar el servicio

  • un proceso de subscripcion al servicio

  • un aplicativo con un dashboard simple donde el usuario pueda subir un fichero y consultar aquellos que estén acogidos al sistema de recargo

  • un proceso que periódicamente consulte todos los NIFs y actualice su estado

  • una notificación via email

Y el requisito más "importante": el MVP tiene que tener el costo de mantenimiento lo más reducido posible

Infraestructura

La mayor parte del servicio se ha hecho en PHP y alojado en DreamHost (DH). ¿Porqué? porque es un proveedor donde tengo alojados varios dominios (pero de sites estáticos básicamente) y que me ofrece hosting con base de datos y email ilimitados. Más o menos pago al año unos 120 € y puedo alojar todos los sites que quiera.

Hasta hace poco permitían desplegar aplicaciones con NodeJS, Ruby y PHP pero hace poco han cambiado y sólo permiten PHP (8.3 eso sí), lo cual casi agradezco porque así me he obligado a hacer algo en PHP

Para el proceso que interactua con el servico SOAP de la AEAT he optado por hacer un programa de línea de comando, perfecto para ser ejecutado por un planificador de tareas de sistema (un cron) con Micronaut …​ y que se ejecuta en una RaspberryPi que tenía criando polvo en la estantería !!!!

Es decir que el coste del MVP es prácticamente cero.

El problema de DH es que no me sirve para registrar dominios .es directamente pero sí puedo registrarlo con un proveedor español (Strato en mi caso) y luego configurar los DNS para que use los de DH. A partir de ahí puedo crear tantos subdominios como quiera y alojarlos en DH, todo por el mismo precio

Porqué Strato? pues básicamente cuando he buscado proveedores para registrar el dominio el precio de casi todos era de unos 35 € pero en Strato era de …​. 1€!!!!

Landing Page

Una vez que he registrado el dominio recargo-de-equivalencia.es y configurado los DNS para usar los de DH he creado info.recargo-de-equivalencia.es

Este es un static-site creado con Hugo usando una plantilla OpenSource y que me ha llevado un par de días ir retocando y añadiendo mi contenido.

Una vez tenía la landing en mi local simplemente la copiaba a la carpeta correspondiente de DH y ya estaba disponible

Subscripcion

Como es un MVP he creado un form de Google con 4 preguntas para conocer a las empresas que les pueda interesar el servicio y tener su email para ponerme en contacto con ellas.

El servicio se encuentra actualmente en Beta, es gratis y cuenta con 2 clientes

Aplicación

Esta parte ha sido la más ardua pero probablemente por desconocimiento de PHP y el framework Laravel. Sin embargo en cierta forma ha sido la más placentera

Actualmente la aplicación es un simple dashboard donde, una vez registrado, puedes ver el total de NIFs que has subido y cúales de ellos están en recargo de equivalencia. Además puedes subir un fichero con más NIFs que serán incluidos en tu espacio.

Como nota técnica sobre Laravel comentaré que me ha encantado. Tiene muchos conceptos similares a los frameworks Java y es un ecosistema bastante maduro. Comentar que gracias a que DH también me permite ejecutar tareas planificadas ha sido muy fácil añadir Workers a la aplicación de tal forma que una vez el usuario sube un fichero el aplicativo lo guarda en un directorio temporal y un worker lo procesa al poco

recargo

Micronaut

Para la parte de integración con AEAT he recurrido a lo "seguro": un Micronaut + Apache Axis para hacer llamadas al SOAP de la AEAT y que lee/escribe en la base de datos alojada en DH

Este Micronaut lo he convertido a binario con GraalVM y encima lo puedo ejecutar en una RaspberryPi por lo que el consumo energético del proceso es mínimo.

La idea es que este aplicativo está configurado para "peinar" los NIFs de los clientes y marcarlos si encuentra alguno en el régimen.

Posteriormente un worker en el aplicativo anterior detectará estos registrados marcados y los empaquetará en un email de notificación al cliente

Conclusion

Actualmente el servicio se encuentra, como he dicho, en fase Beta pero ya maneja unos 35.000 NIFs

Los siguientes pasos, según el interés que despierte, sería crear algunas integraciones por ejemplo para FacturaScript, WordPress o incluso en avanzar la parte de WebHook

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .