Tablifyx

Arquitectura técnica

Stack: Laravel 13, Filament 5, Laravel Cashier (Stripe), PhpSpreadsheet, Tailwind 4.

Dos niveles de base de datos

  • MySQL central: usuarios, empresas (tenants), membresías y roles, tarifas, suscripciones, proveedores y consumo de IA, importaciones, definiciones de modelos y campos, conectores, avisos, automatizaciones y actividad.
  • SQLite por empresa (storage/app/private/tenants/{uid}/data.sqlite): una tabla física por modelo dinámico (d_{nombre}), con las columnas de sistema id, _source, _external_id, _created_by, _updated_by, created_at y updated_at.

Así la base central no crece con los datos de los clientes, cada empresa queda aislada y se puede respaldar, mover o borrar por separado.

Piezas principales

Pieza Ubicación Responsabilidad
TenantDatabase app/Services/Tenancy Registra en tiempo de ejecución la conexión SQLite de cada empresa.
SchemaManager app/Services/Dynamic Crea, sincroniza, renombra y elimina tablas y columnas al cambiar las definiciones.
DynamicModel / DynamicField app/Models Definición de modelos y campos (tipos en App\Enums\FieldType).
DynamicRecord app/Models Modelo Eloquent genérico que se enlaza a la tabla y conexión de un DynamicModel, con casts dinámicos.
DynamicSchema app/Filament/Support Genera formularios, columnas, filtros, filtro avanzado y agrupaciones de Filament desde la definición.
DynamicRecords app/Filament/App/Pages Página genérica /app/{empresa}/datos/{modelo} que actúa como resource dinámico y genera el menú.
SpreadsheetReader app/Services/Excel Lee hojas, detecta la fila de cabeceras y extrae muestras y filas.
ExcelAnalyzer / HeuristicAnalyzer app/Services/Excel Propuesta de modelos con IA o local.
ImportApplier app/Services/Excel Crea modelos y tablas e importa por lotes (con resolución de relaciones y deduplicado).
AiManager + drivers app/Services/Ai Capa multi-proveedor (Anthropic, OpenAI y compatibles, Gemini), límites y registro de consumo.
ApiAnalyzer / ApiSyncService / ApiClient app/Services/Integrations Análisis de APIs con IA, sincronización (pull/push, paginación, upsert).
RuleEngine, ConditionEvaluator, AlertDispatcher, AutomationRunner app/Services/Rules Avisos y automatizaciones por eventos y programadas.
IntegrationCatalog app/Services/Integrations Catálogo de fichas (config/integrations.php), sustitución de valores, prueba de conexión y fichas generadas con IA.
ModelBuilder app/Services/Integrations Propone y crea modelos a partir de registros reales de una API (campos, tipos, sublistas como modelos hijos), con IA opcional.
IntegrationInstaller app/Services/Integrations Conector → endpoints → modelos → primera sincronización → webhooks.
IncomingWebhookController app/Http/Controllers POST /hooks/{token} con verificación de firmas.
FileFetcher / DataSourceRefresher app/Services/Files Descarga desde URL / FTP / SFTP y refresco de modelos (append / upsert / replace).
PlanLimits app/Services/Billing Límites por plan.
TablifyxBillingProvider + EnsureTenantHasAccess app/Services/Billing, app/Http/Middleware Integración de la facturación con la tenancy de Filament.

Paneles

  • /admin — superadministración (empresas, usuarios, tarifas, proveedores y consumo de IA).
  • /app/{empresa} — panel de cliente con tenancy de Filament por slug.

Flujo de eventos

DynamicRecordObserver escucha created, updated y deleted de DynamicRecord y llama a RuleEngine, que evalúa avisos y automatizaciones. Las importaciones masivas insertan por lotes sin disparar reglas; las sincronizaciones de API sí las disparan. Las ejecuciones programadas se lanzan con tablifyx:rules desde el scheduler.