El flujo de ida: de Stripe a Holded, sin tocar nada
Cuando alguien paga su suscripción de Patometer, lo hace a través de Stripe. Y ahí empieza un proceso que funciona sin que nadie tenga que estar pendiente, que es justo como debería ser.
El sistema recoge la factura de Stripe con sus líneas — nosotros incluímos el plan básico + el número de usuarios - cualquier descuento o cupón aplicado. Las traduce al formato que entiende Holded, que no es trivial: Stripe trabaja con importes con IVA incluido y Holded necesita la base imponible, así que hay que calcular bien el tipo impositivo y convertir cualquier cupón en una línea negativa explícita. Si el cliente no existe todavía en nuestra cuenta de Holded, lo crea con sus datos fiscales. Y genera la factura, guardando el ID del documento para no duplicarla si el proceso se reintenta (porque tarde o temprano se reintenta).
Una tarea que corre cada día revisa qué facturas siguen en borrador en Holded. Cuando ve que ya están aprobadas, descarga el PDF y se lo manda por email a los administradores de esa organización, es decir, aquellos que sacaron su cuenta en Patometer.
El resultado es sencillo de explicar aunque no lo sea de construir: cada pago en Stripe acaba siendo una factura en nuestra contabilidad sin que nadie toque nada. Esto nos facilita, entre otras cosas, el cumplimiento de Verifactu.
El flujo de vuelta: la cuenta Holded del cliente entra en Patometer
Esta es la dirección contraria. Cada cliente puede conectar su propia cuenta de Holded a Patometer, con sus propias credenciales, completamente aislada de la nuestra.
Una vez conectada, Patometer sincroniza periódicamente los contactos de Holded (que pasan a estar disponibles como clientes dentro de Patometer), y los documentos — facturas emitidas y recibidas, con su importe, estado y fecha.
Lo que hace que esto funcione sin que nadie tenga que mapear nada a mano es una convención de etiquetas. Si un proyecto en Patometer tiene configurada una etiqueta, cualquier documento de Holded que lleve esa misma etiqueta queda vinculado a ese proyecto automáticamente. Podrías (y puedes) asociarlos uno a uno... pero para qué, si podemos hacerlo más fácil.
El resultado es que, dentro de la vista de un proyecto en Patometer, ves en la misma pantalla las horas trabajadas y los documentos de facturación: lo que se le ha facturado al cliente, lo que te han facturado tus proveedores, y si está cobrado o no.
Por qué esto importa: fichaje para tomar decisiones, no solo para cumplir.
Sin esto, solo tienes la mitad del cuadro. Sabes que alguien dedicó 40 horas al proyecto X este mes. No sabes si esas 40 horas generaron 3.000 € o 12.000 € de facturación. Ni si ese dinero ha entrado ya.
Holded tiene un módulo de Proyectos y tiene su propio sistema de registros horarios, pensado para imputar tiempo a tareas y calcular coste y rentabilidad por proyecto.
Pero funcionan de forma independiente.
En Patometer no hay dos sistemas. El fichaje que cumple la obligación legal de registro de jornada es el mismo dato que alimenta el coste por proyecto. Se ficha una vez, y ese fichaje sirve a la vez para estar en regla y para saber cuánto cuesta lo que se está haciendo.
Y ese coste, calculado a partir de la compensación de quien trabajó esas horas, se suma al proyecto en tiempo real conforme se ficha. Los documentos de Holded vinculados al proyecto, por su parte, te dicen qué se ha facturado y en qué estado está.
La diferencia entre los dos números es el margen real del proyecto. Antes de esto, sacar esa cifra significaba cruzar un Excel de horas con otro de facturas. Ahora es una pantalla — y la base de esa pantalla es un único fichaje, no dos.
Lo que hubo que resolver para que esto funcionase
En Patometer hay dos integraciones distintas con Holded.
La de Patometer hacia nuestra Holded es punto a punto: un evento de Stripe dispara el proceso, y termina en nuestra cuenta.
La de la Holded del cliente hacia Patometer es multi-tenant: cada empresa con su propia cuenta y sus propias credenciales. Para eso construimos una capa que ya soporta Holded o Stelorder (por poner un par de ejemplos) con la misma interfaz por debajo, así que añadir un ERP nuevo no implica tocar el resto del sistema. Los datos se cachean localmente para que el dashboard no dependa de cada API cuando cargas una nueva página.
Y la decisión de las etiquetas para vincular documentos a proyectos fue deliberada: la alternativa era obligar a cada cliente a emparejar sus proyectos de Holded con los de Patometer uno por uno, y eso es justo el tipo de fricción que nos gusta evitar.
Por qué es importante para ti que lo hayamos hecho nosotros
En Mister Pato somos expertos en integración de sistemas. No es la primera vez que hacemos algo de esto. Hoy te estoy contando la integración de nuestro Patometer con Holded. Pero es solo un ejemplo.
Hay cosas que la documentación de una API no te muestra. Tienes que pelearte con ello.
Así que cuando ayudamos a un cliente a conectar su cuenta de Holded con otra herramienta, no estamos montando una integración genérica que hemos visto en un tutorial. Estamos replicando exactamente lo que usamos nosotros. Con la misma librería que usamos nosotros.
Que, por cierto, ya hemos adaptado recientemente a las novedades de la versión 2 de la API de Holded.