Changelog
Plugin SDK
Sección titulada «Plugin SDK»@openfactu/plugin-sdk v0.4.0 actual
Sección titulada «@openfactu/plugin-sdk v0.4.0 »Los cambios de las versiones 0.2.x y 0.3.x se recogen acumulados en esta entrada; no se publicaron notas individuales.
- Paquete type-only: el SDK solo exporta tipos TypeScript (el runtime lo inyecta el servidor). Peer dependencies:
react ^19,react-dom ^19,lucide-react >=0.400. migration.createTable: los plugins pueden crear sus propias tablas, con tipos de columnaTEXT,INTEGER,DECIMAL,BOOLEAN,JSONB,UUIDyTIMESTAMP, y flagsprimaryKey,nullableydefault.widgets.registerDashboard: registro programático de widgets de dashboard desdeinit(), alternativa a declararlos enmanifest.json(ui.dashboardWidgets).aiTools.register: los plugins pueden aportar tools al chat de IA. La factory recibe unAiChatToolContext(tenant, usuario) por petición.documents.onAfterCreate: atajo simétrico aonBeforeCreatepara hooks tras la creación de documentos.- Manifest UI ampliado:
ui.routes(PluginRoutecon tipostable,form,custom,dashboard),ui.dashboardWidgetsyui.themes(PluginThemePresetpara el selector de Branding). - Nuevos eventos de hook: fase
posteden los 6 tipos de documento,journalEntry.posted/reversed,period.closed/opened,payment.created/deleted,payroll.approved,shipment.*(6 eventos),picking.*(3) yroute.*(3). Catálogo completo en Catálogo de hooks.
v0.0.7-alpha actualpre-release
Sección titulada «v0.0.7-alpha »8 de mayo de 2026
Facturación fiscal
Sección titulada «Facturación fiscal»- Lock de facturas al asentar: las facturas pasan a estado bloqueado (
locked) automáticamente al asentarlas, evitando modificaciones accidentales. Solo admins pueden desbloquarlas. - Cálculo de retenciones (IRPF): integrado en el flujo de facturas de venta y compra. Configurable por partner y tipo de documento. Se calcula automáticamente sobre la base imponible.
- Estados de cobros/pagos: cada documento de venta/compra lleva un estado de pago que evoluciona automáticamente:
pending→partial→paid. El estado se recalcula al registrar cada pago o cobro. - Conciliación automática: el motor de conciliación empareja pagos registrados con líneas de factura pendientes, marcando automáticamente el estado según el importe conciliado.
Email por tenant (SMTP)
Sección titulada «Email por tenant (SMTP)»- SMTP configurable por empresa: cada tenant define su propio servidor SMTP (host, puerto, usuario, password, TLS/STARTTLS) desde Ajustes > Email.
- Cola de envío desatendida: los emails se encolan y se enviegan en segundo plano. Reintentos automáticos en caso de fallo temporal.
- Preview antes de enviar: modal que muestra exactamente como quedará el email antes de enviarlo.
- Envío masivo: selección múltiple de documentos para envío por email en bloque.
- Notificaciones in-app al completar: cuando un email termina de enviarse (o falla), aparece una notificación in-app en tiempo real.
Modulo RRHH
Sección titulada «Modulo RRHH»- Calendario de tareas: vista mensual y semanal de tareas asignadas a empleados. Visibilidad de carga de trabajo por departamento.
- Shift patterns y templates: patrones de turnos configurables (manana, tarde, noche, personalizado) y plantillas para asignarlos rapidamente.
- Commissions: registro y seguimiento de comisiones por empleado y periodo. Configurable como porcentaje o cantidad fija.
- Evaluations: evaluaciones de rendimiento con metricas configurables, ratings y feedback.
- Payrolls (nóminas): generación de nóminas con conceptos salariales configurables (salario base, plus, deducciones, IRPF).
- Payroll concepts: tabla de conceptos de nómina reutilizables (devengos, deducciones, retenciones).
- Timeclock kiosk: modo terminal para que los empleados fichen entrada y salida directamente desde una pantalla dedicada.
- Incidents e incident types: registro de incidencias laborales con tipología configurable (retraso, ausencia, incidente).
- Departments: estructura organizativa por departamentos.
- Employees: gestión completa de empleados con datos personales, contrato y departamento.
- Tasks: tareas asignables a empleados con fechas, prioridad y estado de realización.
Logística
Sección titulada «Logística»- Logistics hub: panel centralizado con overview de todas las operaciones logísticas activas.
- Shipments: gestión completa de envíos. Estados: pending → picked → in_transit → delivered → returned.
- Routes: planificación y gestión de rutas de entrega con asignación de vehículos y conductores.
- Driver app: aplicación web para conductores con acceso móvil: lista de entregas, estado de cada envío, incidencias.
- Platforms: gestión de plataformas de carga/descarga con ubicación y capacidad.
- Vehicles: catalogo de vehículos con matricula, tipo, capacidad y estado.
- Staging áreas: áreas de staging para organización física de preparados.
- Packages: gestión de bultos y paquetes dentro de un envío.
- Preparation tab: interfaz de preparación de pedidos para operadores de almacén.
- Picking tasks panel: panel de tareas de picking con asignación y seguimiento.
- Incidents tab: registro de incidencias en ruta (averias, retrasos, reclamaciones).
Editor visual de plantillas PDF
Sección titulada «Editor visual de plantillas PDF»- Diseñador drag & drop: editor visual de plantillas de documento basado en canvas. Arrastra elementos para colocarlos, redimensiona y reposiciona con el raton.
- Elementos disponibles: texto, imagen, código de barras (Code-128), QR por página, tablas de líneas, líneas divisorias.
- Inspector editable: panel lateral para tipografía (fuente, tamano, color, peso), colores de fondo, posición y tamano exactos.
- Preview PDF en tiempo real: genera la vista previa del PDF directamente desde el diseñador al guardar.
- Importar/exportar layout: exporta el layout del canvas como JSON para backup o versionado. Importa desde otro archivo JSON.
- Importar desde otra plantilla: copia el diseno de una plantilla existente a una nueva.
- Campos de plugins en el FieldPicker: los campos personalizados declarados por plugins aparecen disponibles en el selector de campos.
- Chips de lotes/series: embebidos automáticamente en documentos donde se requiera trazabilidad.
- QR + Code-128 por página: generación automática de códigos de verificación en cada página.
- Marca de agua PAGADA: en facturas rectificativas ya pagadas se aplica automáticamente una marca de agua de estado “PAGADA”.
- Paleta de marca Keirost: el editor viene precargado con los colores de la identidad visual de Keirost.
SEO y presencia web
Sección titulada «SEO y presencia web»- OG image 1200x630: imagen optimizada para compartición en redes sociales y apps de mensajería.
- Meta tags completos: title, description y keywords para SEO orgánico.
- Open Graph: etiquetas OG para riqueza de previsualización en Facebook, LinkedIn, WhatsApp, Twitter.
- JSON-LD structured data: schema.org para mejor indexación por motores de búsqueda.
- robots.txt y sitemap.xml: configuración de rastreo e índice para bots.
- Iconos PNG: favicon en múltiples tamanos (16, 32, 192, 512) para todos los contextos (browser, PWA, apple-touch).
- Scrollbar con color de marca: scrollbar personalizado en color teal, soporte Firefox con estilo nativo.
UX y polish
Sección titulada «UX y polish»- Tablas ordenables: todas las listas incorporan ordenación por columna (asc/desc) sin recargar la página.
- Animaciones de entrada: row-in (fila entra desde la izquierda), card-in (tarjeta escala desde 0.95), pulse-dot (indicador pulsante en elementos activos).
- ~180 arreglos de modo oscuro: eliminadas clases
dark:duplicadas, corregidos hover mal-paireados, fixed transparencias en modales y dropdowns. - Sidebar compacta con iconos lucide: 60px de ancho, iconos de la colección lucide-react, hover scale + color transition.
- Topbar de sub-tabs: barra superior con tabs de subsección del modulo activo.
- Tablas compactas con multi-select: checkbox tristate en todas las tablas, bulk actions bar al seleccionar.
- Dashboard con charts (recharts): gráfica de línea (ventas vs compras 12 meses), donut (facturas por estado), barras (top clientes/proveedores).
- Bulk actions: barras de acciones masivas que aparecen al seleccionar filas: enviar, exportar, anular.
- Modal con backdrop blur: depth visual en todos los modales con backdrop-filter blur + opacidad.
- i18n preparada: estructura de internacionalización ES/EN en su lugar; traducción completa al ingles en proceso para la siguiente release.
v0.0.6-alpha pre-release
Sección titulada «v0.0.6-alpha »18 de abril de 2026
Rediseño de UI
Sección titulada «Rediseño de UI»- Sidebar minimal de 60px con iconos lucide para los 7 módulos top-level (Inicio, Inventario, Ventas, Compras, Interlocutores, Contabilidad, Plugins, Ajustes)
- Topbar con sub-tabs del módulo activo
- Avatar de usuario y selector de empresa al pie del sidebar como popovers
- Tablas a ancho completo (sin el padding excesivo anterior)
- Hover scale 1.1 + cambio de color (200ms) en los iconos del sidebar
Tablas compactas
Sección titulada «Tablas compactas»- Densidad compact por defecto en
@openfactu/uiTable, con propdensityopcional (compact | normal | comfy) - Multi-select con checkbox tristate (
selectable,selectedKeys,onSelectionChange) - Nuevo componente
<BulkActionsBar>que aparece encima de la tabla cuando hay filas seleccionadas - Fix de dark mode striping (filas no se ven lavadas)
- thead y SearchableSelect dropdown sin transparencia (no se ven a través de modales)
- Modal con backdrop opaco al 90% + blur, constraint de altura
max-h-90vhy scroll interno
Dashboard con gráficos (recharts)
Sección titulada «Dashboard con gráficos (recharts)»- Línea: tendencia mensual de Ventas vs Compras (12 meses)
- Donut: distribución de facturas por estado (Abiertas / Cerradas / Parcial / Anuladas)
- Barras horizontales: Top 5 clientes y Top 5 proveedores por volumen
- KPIs y secciones de stock se mantienen
- Todos los charts respetan el modo dark/light
Plugin SDK extendido (@openfactu/plugin-sdk v0.1.0)
Sección titulada «Plugin SDK extendido (@openfactu/plugin-sdk v0.1.0)»- Nuevos tipos
PluginModuleyPluginSubTabenPluginManifest.ui - Plugins pueden registrar módulos top-level propios (icono nuevo en el sidebar)
- Plugins pueden inyectar sub-tabs en módulos core
- Nuevo
ListFetchContext<T>y eventos<entity>.list.afterFetchpara inyectar/mutar filas en listados core (items,partners) - Backwards compatible:
menuItemslegacy se mapean automáticamente al módulo “Plugins”
Bug fixes (~180 instancias)
Sección titulada «Bug fixes (~180 instancias)»- Eliminadas todas las clases
dark:duplicadas (dark:text-X dark:text-Y) que dejaban texto lavado en oscuro - Reparados patrones
hover:bg-X dark:bg-Ymal-paireados (ahoradark:hover:bg-Y) - TenantSwitcher adaptado a tema light/dark
- Card header sólido (sin opacity 30 en dark)
- PermToggle con ring + dot adaptados a dark mode
v0.0.5-alpha pre-release
Sección titulada «v0.0.5-alpha »17 de abril de 2026
Sandbox de desarrollo de plugins
Sección titulada «Sandbox de desarrollo de plugins»- Hot reload: edita un plugin y se recarga automáticamente sin reiniciar el servidor
- File watcher con chokidar para detección de cambios
- WebSocket
/ws/pluginspara notificar al frontend en tiempo real - Componentes UI se actualizan en el browser sin refrescar la página
HookManager.unregisterPlugin()para evitar duplicación de hooks al recargar
Desarrollo remoto de plugins
Sección titulada «Desarrollo remoto de plugins»- Dev API Keys: genera credenciales (clientId/clientSecret) desde la UI del ERP
POST /api/plugins/upload— sube un plugin como ZIPPOST /api/plugins/:id/push— sync incremental de archivos- Autenticación por dev key o JWT de admin
- Pantalla de gestión de API Keys en Plugins > Desarrollo
CLI: nuevos comandos de plugins
Sección titulada «CLI: nuevos comandos de plugins»openfactu plugin search— buscador interactivo con autocompleteopenfactu plugin install/update/remove— gestión completaopenfactu plugin push— sube plugin a servidor remotoopenfactu plugin watch— auto-sync al guardar (desarrollo remoto)openfactu plugin link/unlink— symlinks para desarrollo localopenfactu plugin dev— servidor en modo desarrollo con logs filtrados
CLI: comandos de Docker
Sección titulada «CLI: comandos de Docker»openfactu rebuild— reconstruye y reinicia contenedoresopenfactu logs— muestra logs de los serviciosopenfactu stop/openfactu restart— control de servicios
Fixes de Docker
Sección titulada «Fixes de Docker»- Dockerfiles compilar paquetes compartidos (@openfactu/pdf, common, ui) antes del server/web
- Crear tablas del schema publico automáticamente al arrancar
.dockerignorepara evitar copiar storage/db_data
SDK (@openfactu/plugin-sdk v0.0.3)
Sección titulada «SDK (@openfactu/plugin-sdk v0.0.3)»- Tipos completos:
PluginContext,HookContext,PluginManifest,CoreTableName - Hooks tipados:
DocumentType,HookEvent,HookHandler - Documentación actualizada con ejemplos
v0.0.4-alpha
Sección titulada «v0.0.4-alpha»16 de abril de 2026
Primera versión funcional completa de Keirost.
CLI (@openfactu/cli)
Sección titulada «CLI (@openfactu/cli)»openfactu install— Descarga e instala desde releases de GitHub, con soporte Docker (Windows/Mac/Linux)openfactu deploy— Wizard para configurar acceso externo (LAN / dominio publico / SSL)openfactu deploy:status— Estado de contenedores Dockeropenfactu update— Actualiza a la última versión sin perder datos (plugins, storage, .env)openfactu setup— Configuración inicial interactiva (BD, admin, primer tenant)openfactu migrate/migrate:status— Gestión de migraciones de base de datos por tenantopenfactu tenant list/create/sync— Gestión de empresasopenfactu plugin list— Estado de plugins por empresa- Soporte
sudopara instalar en cualquier directorio del sistema - Funciona desde cualquier ruta con
--pathoOPENFACTU_HOME
Plugins por empresa
Sección titulada «Plugins por empresa»- Activar/desactivar plugins por tenant desde la UI o API
- Nueva tabla
TenantPlugincon cache en memoria para rendimiento HookManagerfiltra hooks según la activación del plugin en el tenant- Pantalla de gestión de plugins en el frontend con toggles
FactuAPI
Sección titulada «FactuAPI»FactuApi.transaction()— Operaciones atomicas (todo o nada)- IDs pre-asignados antes de
save()para referencias cruzadas entre documentos FactuApi.session()— Login + selección de tenant + conexion a BD en una sola llamada- Helpers de consulta:
getPartner(),getItem(),getSeries(),getOpenPeriods() FactuApi.connect()— Acceso a la BD del tenant sin transacción
- Fix del build de la web (TypeScript deprecations, type imports con
verbatimModuleSyntax) VITE_API_URLcomo build arg en el Dockerfile de la web- Eliminado atributo
versiondeprecado de docker-compose docker-compose.prod.ymlgenerado por el CLI con binding a0.0.0.0
ERP Core
Sección titulada «ERP Core»- Multi-empresa con esquemas PostgreSQL aislados
- Facturación completa: pedidos, albaranes y facturas (venta y compra)
- Inventario: almacenes, zonas, lotes, series, stock por ubicación
- Socios de negocio: clientes, proveedores, grupos, direcciones múltiples
- Impuestos configurables (IVA 0%, 4%, 10%, 21%)
- Series de numeración por tipo de documento y periodo
- Plantillas PDF personalizables con HTML/Handlebars
- Dashboard con metricas de ventas, compras, stock y documentos recientes
- Búsqueda global en todas las entidades
- Audit log completo (CREATE/UPDATE/DELETE con valores anterior y nuevo)
- Sistema de permisos granulares por usuario y tenant
- Datos geográficos: paises, regiones, provincias, municipios
- Dark mode completo en la interfaz web
v0.0.3-alpha
Sección titulada «v0.0.3-alpha»16 de abril de 2026
Cambios
Sección titulada «Cambios»- Primera versión del CLI publicada en npm (
@openfactu/cli) - Comando
installcon selección de releases de GitHub - Comando
deploypara configurar acceso externo - Correcciones menores
v0.0.2-alpha
Sección titulada «v0.0.2-alpha»16 de abril de 2026
Cambios
Sección titulada «Cambios»- Primera release publica de Keirost
- ERP funcional con facturación, inventario y multi-empresa
- Interfaz web con React 19 y Tailwind CSS
- API REST completa
- Sistema de plugins
- Docker Compose para despliegue
Proximas versiones
Sección titulada «Proximas versiones»Funcionalidades planificadas para futuras versiones:
- Traducción completa al ingles de la interfaz
- OCR para escaneo de facturas
- Contabilidad integrada (libros de diario, mayor, balances)
- Reportes y gráficos avanzados
- Marketplace de plugins
- Soporte multi-idioma en la interfaz
- SII/AEAT y TicketBAI
- Exportación a formatos standar (FACTURA-E, EDI)