Ir al contenido

1. Preparación

En este tutorial vas a construir un plugin completo y realista de principio a fin: fidelizacion, un sistema de puntos de fidelidad para clientes.

Al terminar las 6 partes, el plugin:

  • Añade el campo Puntos de fidelidad a los clientes y Puntos canjeados a las facturas de venta
  • Crea su propia tabla fidelizacion_movimientos para el historial de puntos
  • Acumula puntos automáticamente al asentar facturas (1 punto por cada 10 €)
  • Valida los canjes antes de crear la factura (no puedes canjear más puntos de los que tienes)
  • Marca como VIP a los clientes con más de 100 puntos en el listado de socios
  • Expone sus propios endpoints HTTP y una página propia en el ERP con módulo en el sidebar
  • Inyecta un widget en el dashboard y una tool de IA en el chat

El recorrido: 1. Preparación2. Campos y tablas3. Hooks de negocio4. Interfaz de usuario5. Widget y AI tool6. Publicar.

  • Node.js 18+ y npm
  • Acceso a un servidor Keirost (remoto o local) donde probar el plugin
  • El CLI: npm i -g @openfactu/cli
  1. Ve al template oficial y pulsa “Use this template” para crear tu repositorio.

  2. Clona tu repo y entra en la carpeta:

    Ventana de terminal
    git clone https://github.com/tu-usuario/fidelizacion.git
    cd fidelizacion
    npm install
  3. Revisa la estructura:

    • Directoriofidelizacion/
      • index.ts el punto de entrada — exporta init()
      • manifest.json metadatos y UI del plugin
      • Directorioui/
        • Page.tsx componentes React (opcional)
      • package.json con @openfactu/plugin-sdk como devDependency

El SDK (@openfactu/plugin-sdk) es type-only: solo aporta los tipos TypeScript. La implementación real la inyecta el servidor Keirost al cargar tu plugin.

Sustituye el contenido de index.ts por la versión mínima:

index.ts
import type { PluginContext } from '@openfactu/plugin-sdk';
const PLUGIN_ID = 'fidelizacion';
export const init = async (context: PluginContext) => {
console.log(`[${PLUGIN_ID}] Plugin inicializado`);
};

El servidor ejecuta init() al cargar el plugin (y en cada hot reload). El objeto context trae todo lo que un plugin puede usar: migraciones, hooks, base de datos, FactuAPI, widgets y AI tools — lo iremos usando pieza a pieza. La referencia completa está en PluginContext.

No necesitas tener Keirost instalado en tu máquina. Genera una API key de desarrollo desde la UI del ERP (Plugins → Desarrollo → Generar API Key) y lanza el watcher:

Ventana de terminal
openfactu plugin watch \
--server http://mi-servidor:3000 \
--client-id ofk_... \
--client-secret ofs_...

Cada vez que guardes un archivo, el plugin se sube y recarga automáticamente. Detalles en Desarrollo remoto.

Los plugins se activan por empresa (tenant). En la UI del ERP: menú lateral → Plugins → activa el toggle de fidelizacion. Más detalle en Activación por empresa.

Si todo va bien, en los logs del servidor deberías ver:

[fidelizacion] Plugin inicializado