# Horux360 SaaS - Documento de Diseño **Fecha:** 2026-01-22 **Versión:** 1.0 **Estado:** Aprobado --- ## 1. Visión General **Horux360** es una plataforma SaaS de análisis financiero y gestión fiscal para empresas mexicanas, con enfoque en: - **Experiencia visual superior** - 4 temas con diferentes layouts - **Control fiscal completo** - IVA, ISR, CFDI en todos los planes - **Inteligencia financiera** - Dashboards, proyecciones, alertas proactivas - **Multi-tenant** - Schema por empresa en PostgreSQL ### Propósito Transformar datos financieros en decisiones estratégicas mediante análisis automatizado y reportes en tiempo real para empresas mexicanas. ### Funcionalidades Core - Dashboard financiero con KPIs (ingresos, egresos, utilidad, ROI) - Gestión de CFDI (facturas electrónicas del SAT) - Control de IVA (trasladado vs acreditable, balance mensual) - Control de ISR - Conciliación bancaria automatizada - Reportes y alertas en tiempo real - Calendario fiscal con recordatorios - Proyecciones financieras (forecasting) --- ## 2. Stack Tecnológico | Capa | Tecnología | |------|------------| | **Frontend** | Next.js 14 + TypeScript + Tailwind CSS | | **Backend** | Node.js + Express + TypeScript | | **Base de datos** | PostgreSQL (schema por tenant) | | **Autenticación** | JWT personalizado | | **ORM** | Prisma | | **Gráficos** | Recharts | | **Exportación** | xlsx + @react-pdf/renderer | | **Estado** | Zustand | | **Fetching** | TanStack Query | | **Forms** | React Hook Form + Zod | | **Tablas** | TanStack Table | | **UI Base** | Radix UI | --- ## 3. Modelo de Negocio - Planes | Plan | CFDI/mes | Usuarios | Funcionalidades | |------|----------|----------|-----------------| | **Starter** | 100 | 1 | Dashboard, IVA/ISR, CFDI básico | | **Business** | 500 | 3 | + Reportes, Alertas, Calendario fiscal | | **Professional** | 2,000 | 10 | + Conciliación, Forecasting, XML SAT | | **Enterprise** | Ilimitado | Ilimitado | + API, Multi-empresa, Soporte prioritario | **Nota:** Control de IVA e ISR incluido en todos los planes. --- ## 4. Arquitectura del Sistema ### 4.1 Estructura de Carpetas ``` horux360/ ├── apps/ │ ├── web/ # Frontend Next.js │ │ ├── app/ │ │ │ ├── (auth)/ # Login, registro, recuperar contraseña │ │ │ ├── (dashboard)/ # Rutas protegidas │ │ │ │ ├── dashboard/ │ │ │ │ ├── cfdi/ │ │ │ │ ├── impuestos/ │ │ │ │ ├── reportes/ │ │ │ │ ├── conciliacion/ │ │ │ │ ├── calendario/ │ │ │ │ ├── configuracion/ │ │ │ │ └── usuarios/ │ │ │ └── (marketing)/ # Landing, precios, contacto │ │ ├── components/ │ │ │ ├── ui/ # Componentes base │ │ │ ├── charts/ # Gráficos reutilizables │ │ │ ├── layouts/ # Los 4 layouts de temas │ │ │ └── modules/ # Componentes por módulo │ │ ├── lib/ │ │ │ ├── api/ # Cliente API │ │ │ ├── hooks/ # Custom hooks │ │ │ └── utils/ # Utilidades │ │ ├── stores/ # Estado global (Zustand) │ │ └── themes/ # Configuración de 4 temas │ │ │ └── api/ # Backend Express │ ├── src/ │ │ ├── controllers/ │ │ ├── services/ │ │ ├── models/ │ │ ├── middlewares/ │ │ │ ├── auth.ts │ │ │ └── tenant.ts # Middleware multi-tenant │ │ ├── routes/ │ │ └── utils/ │ └── prisma/ │ └── schema.prisma │ ├── packages/ │ └── shared/ # Tipos y utilidades compartidas │ └── docker-compose.yml ``` ### 4.2 Flujo Multi-Tenant ``` Request → Auth Middleware → Tenant Middleware → Set Schema → Controller ↓ ↓ Valida JWT Extrae tenant_id del token/header ↓ SET search_path TO tenant_schema ``` --- ## 5. Modelo de Datos ### 5.1 Schema Público (compartido) ```sql -- Empresas/Tenants tenants ├── id (UUID, PK) ├── nombre ├── rfc ├── plan (starter|business|professional|enterprise) ├── schema_name (único) ├── cfdi_limit ├── users_limit ├── active ├── created_at └── expires_at -- Usuarios globales users ├── id (UUID, PK) ├── tenant_id (FK) ├── email (único) ├── password_hash ├── nombre ├── role (admin|contador|visor) ├── active ├── last_login └── created_at ``` ### 5.2 Schema por Tenant (tenant_xxx) ```sql -- Catálogo de cuentas cuentas ├── id (PK) ├── codigo ├── nombre ├── tipo (activo|pasivo|capital|ingreso|egreso) ├── padre_id (FK, self) └── active -- CFDIs/Facturas cfdis ├── id (UUID, PK) ├── uuid_fiscal ├── tipo (ingreso|egreso|traslado|pago|nomina) ├── serie ├── folio ├── fecha_emision ├── fecha_timbrado ├── rfc_emisor ├── nombre_emisor ├── rfc_receptor ├── nombre_receptor ├── subtotal ├── descuento ├── iva ├── isr_retenido ├── iva_retenido ├── total ├── moneda ├── tipo_cambio ├── metodo_pago ├── forma_pago ├── uso_cfdi ├── estado (vigente|cancelado) ├── xml_url ├── pdf_url └── created_at -- Conceptos de CFDI cfdi_conceptos ├── id (PK) ├── cfdi_id (FK) ├── clave_producto ├── descripcion ├── cantidad ├── unidad ├── valor_unitario ├── importe ├── descuento └── objeto_impuesto -- Control de IVA mensual iva_mensual ├── id (PK) ├── año ├── mes ├── iva_trasladado (cobrado) ├── iva_acreditable (pagado) ├── iva_retenido ├── resultado ├── acumulado ├── estado (pendiente|declarado|acreditado) └── fecha_declaracion -- Control de ISR mensual isr_mensual ├── id (PK) ├── año ├── mes ├── ingresos_acumulados ├── deducciones ├── base_gravable ├── isr_causado ├── isr_retenido ├── isr_a_pagar ├── estado └── fecha_declaracion -- Movimientos bancarios movimientos_bancarios ├── id (PK) ├── banco ├── cuenta ├── fecha ├── referencia ├── descripcion ├── tipo (cargo|abono) ├── monto ├── saldo ├── cfdi_id (FK, nullable) ├── estado_conciliacion (pendiente|conciliado|error) └── notas -- Alertas alertas ├── id (PK) ├── tipo (vencimiento|discrepancia|iva_favor|declaracion) ├── titulo ├── mensaje ├── prioridad (alta|media|baja) ├── fecha_vencimiento ├── leida ├── resuelta └── created_at -- Calendario fiscal calendario_fiscal ├── id (PK) ├── titulo ├── descripcion ├── tipo (declaracion|pago|obligacion) ├── fecha_limite ├── recurrencia (mensual|bimestral|anual|unica) ├── completado └── notas ``` --- ## 6. Módulos y Funcionalidades ### 6.1 Dashboard Principal | Componente | Descripción | |------------|-------------| | **KPIs principales** | Ingresos, Egresos, Utilidad, IVA a favor/por pagar | | **Selector de período** | Semana, Mes, Trimestre, Año, Personalizado | | **Gráfico ingresos vs egresos** | Barras comparativas por mes | | **Métricas de rentabilidad** | Margen, ROI, Crecimiento % | | **Alertas activas** | Widget con alertas pendientes | | **Resumen fiscal** | Estado de declaraciones del mes | ### 6.2 Gestión de CFDI | Funcionalidad | Descripción | |---------------|-------------| | **Lista de CFDIs** | Tabla con filtros (tipo, estado, fecha, RFC) | | **Detalle de factura** | Vista completa con conceptos e impuestos | | **Importar XML** | Carga manual de archivos XML | | **Descarga SAT** | Conexión automática para descargar CFDIs (Professional+) | | **Exportar** | Excel/PDF con filtros aplicados | | **Búsqueda** | Por UUID, RFC, concepto, monto | ### 6.3 Control de Impuestos (IVA/ISR) | Funcionalidad | Descripción | |---------------|-------------| | **Balance IVA** | Trasladado vs Acreditable, resultado mensual | | **Histórico IVA** | Tabla mensual con acumulados | | **Cálculo ISR** | Ingresos, deducciones, base gravable, ISR a pagar | | **Retenciones** | IVA e ISR retenido por terceros | | **Prellenado DIOT** | Generación de archivo para declaración | ### 6.4 Reportes | Reporte | Descripción | |---------|-------------| | **Estado de resultados** | Ingresos - Egresos = Utilidad | | **Flujo de efectivo** | Entradas y salidas por período | | **Comparativo períodos** | Año vs año, mes vs mes | | **Concentrado por RFC** | Totales por cliente/proveedor | | **Proyección financiera** | Forecast basado en histórico (Professional+) | | **Exportación** | Excel y PDF para todos los reportes | ### 6.5 Conciliación Bancaria (Professional+) | Funcionalidad | Descripción | |---------------|-------------| | **Importar estados** | Carga de archivos bancarios (CSV, OFX) | | **Match automático** | Asociar movimientos con CFDIs | | **Pendientes** | Lista de movimientos sin conciliar | | **Errores** | Discrepancias detectadas | | **Métricas** | Tasa de éxito, pendientes, conciliados | ### 6.6 Calendario Fiscal (Business+) | Funcionalidad | Descripción | |---------------|-------------| | **Vista calendario** | Mensual con obligaciones marcadas | | **Alertas automáticas** | Recordatorios 7, 3 y 1 día antes | | **Obligaciones SAT** | Precargadas según régimen fiscal | | **Personalización** | Agregar eventos propios | | **Marcar completado** | Tracking de cumplimiento | ### 6.7 Gestión de Usuarios (Business+) | Funcionalidad | Descripción | |---------------|-------------| | **Roles** | Admin (todo), Contador (operación), Visor (solo lectura) | | **Invitar usuarios** | Por email con rol asignado | | **Permisos por módulo** | Configuración granular | | **Auditoría** | Log de acciones por usuario | --- ## 7. Sistema de Temas ### 7.1 Los 4 Temas | Tema | Paleta | Layout | Ideal para | |------|--------|--------|------------| | **Light** | Blancos, grises suaves, acentos azules | Sidebar fija izquierda, contenido centrado con máximo 1200px | Uso diario prolongado | | **Vibrant** | Colores vivos (púrpura, cyan, coral) | Sidebar colapsable, cards grandes con bordes redondeados | Usuarios que prefieren color | | **Corporate** | Azul marino, grises oscuros, dorado | Multi-panel denso, tablas compactas, sin espacios desperdiciados | Contadores, mucha data | | **Dark** | Fondo #0a0a0a, acentos verdes/cyan | Sidebar minimalista, widgets flotantes con glassmorphism | Trabajo nocturno | ### 7.2 Estructura de Layouts ``` ┌─────────────────────────────────────────────────────────────┐ │ LIGHT THEME │ ├────────┬────────────────────────────────────────────────────┤ │ │ Header con breadcrumb │ │ Logo ├────────────────────────────────────────────────────┤ │ │ │ │ Nav │ Contenido centrado (max 1200px) │ │ Items │ │ │ │ Cards con sombras suaves │ │ Fixed │ │ │ 240px │ │ └────────┴────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ VIBRANT THEME │ ├──┬──────────────────────────────────────────────────────────┤ │ │ Header con selector de período │ │☰ ├──────────────────────────────────────────────────────────┤ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │C │ │ KPI 1 │ │ KPI 2 │ │ KPI 3 │ │ KPI 4 │ │ │O │ │ Grande │ │ Grande │ │ Grande │ │ Grande │ │ │L │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │L │ ┌───────────────────────────────────────────────┐ │ │A │ │ Gráfico principal │ │ │P │ └───────────────────────────────────────────────┘ │ │S │ │ │E │ Bordes redondeados 16px, gradientes en headers │ └──┴──────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ CORPORATE THEME │ ├────────┬───────────────────────┬────────────────────────────┤ │ │ Panel Superior │ Panel Lateral │ │ Nav │ KPIs compactos │ Alertas │ │ ├───────────────────────┤ Lista densa │ │ Menú │ Tabla principal │ │ │ jerár- │ Muchas filas │────────────────────────── │ │ quico │ Columnas compactas │ Acciones rápidas │ │ │ Sin paginación │ Botones pequeños │ │ │ Scroll virtual │ │ └────────┴───────────────────────┴────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ DARK THEME ○ ○ ○ │ ├──┬──────────────────────────────────────────────────────────┤ │ │ │ │▪ │ ╭─────────╮ ╭─────────╮ ╭─────────╮ │ │▪ │ │ Widget │ │ Widget │ │ Widget │ Glassmorphism│ │▪ │ │ flotante│ │ flotante│ │ flotante│ con blur │ │▪ │ ╰─────────╯ ╰─────────╯ ╰─────────╯ │ │ │ │ │ │ ╭────────────────────────────╮ │ │ │ │ Gráfico con glow │ │ │ │ │ Líneas cyan/verde │ │ │ │ ╰────────────────────────────╯ │ │64│ │ │px│ Fondo casi negro, acentos neón, bordes sutiles │ └──┴──────────────────────────────────────────────────────────┘ ``` ### 7.3 Implementación Técnica ```typescript // themes/index.ts export const themes = { light: { name: 'Light', layout: 'sidebar-fixed', colors: { background: '#ffffff', surface: '#f8fafc', primary: '#3b82f6', text: '#1e293b', border: '#e2e8f0', success: '#22c55e', danger: '#ef4444', }, radius: '8px', sidebar: { width: '240px', collapsible: false }, }, vibrant: { name: 'Vibrant', layout: 'sidebar-collapsible', colors: { background: '#faf5ff', surface: '#ffffff', primary: '#8b5cf6', secondary: '#06b6d4', accent: '#f97316', text: '#1e1b4b', }, radius: '16px', sidebar: { width: '280px', collapsible: true }, }, corporate: { name: 'Corporate', layout: 'multi-panel', colors: { background: '#f1f5f9', surface: '#ffffff', primary: '#1e3a5f', accent: '#d4a853', text: '#0f172a', }, radius: '4px', density: 'compact', sidebar: { width: '200px', collapsible: false }, }, dark: { name: 'Dark', layout: 'minimal-floating', colors: { background: '#0a0a0a', surface: 'rgba(255,255,255,0.05)', primary: '#22d3ee', accent: '#4ade80', text: '#f1f5f9', glow: '0 0 20px rgba(34,211,238,0.3)', }, radius: '12px', blur: '10px', sidebar: { width: '64px', collapsible: false, iconsOnly: true }, }, } ``` --- ## 8. API y Endpoints ### 8.1 Autenticación | Método | Endpoint | Descripción | |--------|----------|-------------| | POST | `/api/auth/register` | Registrar empresa + usuario admin | | POST | `/api/auth/login` | Iniciar sesión, retorna JWT | | POST | `/api/auth/refresh` | Renovar token | | POST | `/api/auth/forgot-password` | Solicitar reset de contraseña | | POST | `/api/auth/reset-password` | Cambiar contraseña con token | | GET | `/api/auth/me` | Obtener usuario actual | ### 8.2 Tenants/Empresas | Método | Endpoint | Descripción | |--------|----------|-------------| | GET | `/api/tenant` | Obtener datos de la empresa actual | | PUT | `/api/tenant` | Actualizar datos de la empresa | | GET | `/api/tenant/usage` | Uso actual (CFDIs, usuarios) vs límites | | PUT | `/api/tenant/plan` | Cambiar plan | ### 8.3 Usuarios | Método | Endpoint | Descripción | |--------|----------|-------------| | GET | `/api/users` | Listar usuarios del tenant | | POST | `/api/users` | Invitar nuevo usuario | | GET | `/api/users/:id` | Obtener usuario | | PUT | `/api/users/:id` | Actualizar usuario/rol | | DELETE | `/api/users/:id` | Desactivar usuario | ### 8.4 CFDIs | Método | Endpoint | Descripción | |--------|----------|-------------| | GET | `/api/cfdi` | Listar CFDIs con filtros y paginación | | GET | `/api/cfdi/:id` | Detalle de CFDI con conceptos | | POST | `/api/cfdi/import` | Importar XML (uno o varios) | | POST | `/api/cfdi/sync-sat` | Descargar del SAT (Professional+) | | GET | `/api/cfdi/:id/xml` | Descargar XML original | | GET | `/api/cfdi/:id/pdf` | Generar/descargar PDF | | GET | `/api/cfdi/export` | Exportar listado a Excel | **Query params:** ``` ?tipo=ingreso|egreso &estado=vigente|cancelado &fecha_inicio=2024-01-01 &fecha_fin=2024-12-31 &rfc=XAXX010101000 &search=concepto &page=1 &limit=50 &sort=fecha_emision &order=desc ``` ### 8.5 Impuestos | Método | Endpoint | Descripción | |--------|----------|-------------| | GET | `/api/impuestos/iva` | Resumen IVA del período | | GET | `/api/impuestos/iva/mensual` | Desglose mensual IVA | | GET | `/api/impuestos/isr` | Resumen ISR del período | | GET | `/api/impuestos/isr/mensual` | Desglose mensual ISR | | GET | `/api/impuestos/retenciones` | Retenciones recibidas | | POST | `/api/impuestos/iva/:id/declarar` | Marcar mes como declarado | | GET | `/api/impuestos/diot` | Generar archivo DIOT | ### 8.6 Dashboard | Método | Endpoint | Descripción | |--------|----------|-------------| | GET | `/api/dashboard/kpis` | KPIs principales del período | | GET | `/api/dashboard/ingresos-egresos` | Datos para gráfico comparativo | | GET | `/api/dashboard/rentabilidad` | Métricas de rentabilidad | | GET | `/api/dashboard/resumen-fiscal` | Estado de obligaciones | ### 8.7 Reportes | Método | Endpoint | Descripción | |--------|----------|-------------| | GET | `/api/reportes/estado-resultados` | Estado de resultados | | GET | `/api/reportes/flujo-efectivo` | Flujo de efectivo | | GET | `/api/reportes/comparativo` | Comparativa entre períodos | | GET | `/api/reportes/por-rfc` | Concentrado por cliente/proveedor | | GET | `/api/reportes/proyeccion` | Forecast financiero (Professional+) | | GET | `/api/reportes/:tipo/export` | Exportar a Excel o PDF | ### 8.8 Conciliación Bancaria | Método | Endpoint | Descripción | |--------|----------|-------------| | GET | `/api/conciliacion` | Estadísticas de conciliación | | GET | `/api/conciliacion/movimientos` | Listar movimientos bancarios | | POST | `/api/conciliacion/import` | Importar estado de cuenta | | POST | `/api/conciliacion/match` | Conciliar movimiento con CFDI | | PUT | `/api/conciliacion/:id` | Actualizar movimiento | | GET | `/api/conciliacion/pendientes` | Movimientos sin conciliar | ### 8.9 Calendario Fiscal | Método | Endpoint | Descripción | |--------|----------|-------------| | GET | `/api/calendario` | Obligaciones del mes/año | | POST | `/api/calendario` | Crear obligación personalizada | | PUT | `/api/calendario/:id` | Actualizar/marcar completado | | DELETE | `/api/calendario/:id` | Eliminar obligación propia | | GET | `/api/calendario/proximas` | Próximas obligaciones (alertas) | ### 8.10 Alertas | Método | Endpoint | Descripción | |--------|----------|-------------| | GET | `/api/alertas` | Listar alertas activas | | PUT | `/api/alertas/:id/leer` | Marcar como leída | | PUT | `/api/alertas/:id/resolver` | Marcar como resuelta | | GET | `/api/alertas/count` | Contador para badge | ### 8.11 Configuración | Método | Endpoint | Descripción | |--------|----------|-------------| | GET | `/api/config/theme` | Obtener tema actual | | PUT | `/api/config/theme` | Cambiar tema | | GET | `/api/config/preferencias` | Preferencias del usuario | | PUT | `/api/config/preferencias` | Actualizar preferencias | --- ## 9. Flujo de Pantallas ### 9.1 Mapa de Navegación ``` ┌─────────────────────────────────────────────────────────────────┐ │ PÚBLICO │ ├─────────────────────────────────────────────────────────────────┤ │ Landing (/) │ │ ├── Características (/features) │ │ ├── Precios (/pricing) │ │ ├── Contacto (/contact) │ │ ├── Login (/login) │ │ └── Registro (/register) │ └─────────────────────────────────────────────────────────────────┘ │ [Autenticación] ▼ ┌─────────────────────────────────────────────────────────────────┐ │ ÁREA PRIVADA │ ├────────────┬────────────────────────────────────────────────────┤ │ SIDEBAR │ /app/dashboard - KPIs, gráficos, alertas │ │ │ /app/cfdi - Lista, detalle, importar │ │ Dashboard │ /app/impuestos - IVA, ISR, Retenciones, DIOT │ │ CFDI │ /app/reportes - Todos los reportes │ │ Impuestos │ /app/conciliacion - Movimientos bancarios │ │ Reportes │ /app/calendario - Obligaciones fiscales │ │ Concil. │ /app/usuarios - Gestión de equipo │ │ Calendario│ /app/config - Preferencias y tema │ │ Config │ │ └────────────┴────────────────────────────────────────────────────┘ ``` --- ## 10. Roadmap de Implementación ### Fase 1: Fundación (Core) - [ ] Setup del proyecto (monorepo, Next.js, Express) - [ ] Base de datos PostgreSQL + Prisma - [ ] Sistema multi-tenant (schemas) - [ ] Autenticación JWT - [ ] Sistema de temas (4 temas + layouts) - [ ] Componentes UI base - [ ] Landing page + registro + login ### Fase 2: Módulos Core - [ ] Dashboard con KPIs - [ ] Gestión de CFDI (CRUD + importación XML) - [ ] Control de IVA (cálculos automáticos) - [ ] Control de ISR - [ ] Gráficos y visualizaciones ### Fase 3: Funcionalidades Avanzadas - [ ] Reportes (estado resultados, flujo efectivo) - [ ] Exportación Excel/PDF - [ ] Sistema de alertas - [ ] Calendario fiscal - [ ] Gestión de usuarios y roles ### Fase 4: Premium Features - [ ] Conciliación bancaria - [ ] Proyecciones/Forecasting - [ ] Descarga automática XML del SAT - [ ] Generación DIOT - [ ] API pública (Enterprise) ### Fase 5: Producción - [ ] Testing completo - [ ] Optimización de rendimiento - [ ] Documentación - [ ] Despliegue y CI/CD - [ ] Monitoreo y logging --- ## 11. Datos Demo (Seed) ```typescript // Empresa demo con datos precargados { tenant: { nombre: "Empresa Demo SA de CV", rfc: "EDE123456AB1", plan: "professional" }, users: [ { email: "admin@demo.com", role: "admin", password: "demo123" }, { email: "contador@demo.com", role: "contador", password: "demo123" }, { email: "visor@demo.com", role: "visor", password: "demo123" } ], cfdis: 150, // Facturas de ejemplo (6 meses) movimientos: 200, // Movimientos bancarios alertas: 5 // Alertas activas } ``` --- ## 12. Dependencias Principales | Categoría | Librería | Propósito | |-----------|----------|-----------| | **UI Components** | Radix UI | Componentes accesibles | | **Estilos** | Tailwind CSS + clsx | Utilidades CSS | | **Gráficos** | Recharts | Visualizaciones | | **Tablas** | TanStack Table | Tablas avanzadas | | **Forms** | React Hook Form + Zod | Formularios + validación | | **Estado** | Zustand | Estado global | | **Fetching** | TanStack Query | Cache y fetching | | **Fechas** | date-fns | Manipulación fechas | | **Excel** | xlsx (SheetJS) | Exportación Excel | | **PDF** | @react-pdf/renderer | Generación PDF | | **XML Parser** | fast-xml-parser | Parsear CFDI | | **ORM** | Prisma | Base de datos | | **Auth** | jsonwebtoken + bcrypt | JWT + hashing | --- ## 13. Análisis de Competencia ### Principales Competidores en México | Plataforma | Enfoque | Precio/mes | Fortaleza | |------------|---------|------------|-----------| | **Siigo Aspel** | ERP completo | $291-$354 | Líder tradicional | | **BIND ERP** | ERP PyMEs | $890-$3,590 | Todo integrado | | **CONTPAQi** | Contabilidad | $890+ | Estándar en despachos | | **Alegra** | Facturación | $499+ | Fácil de usar | | **Gigstack** | Automatización fiscal | Variable | Integración Stripe | | **Facturama** | Facturación CFDI | Variable | API robusta | ### Oportunidades de Diferenciación 1. **UX/Diseño** - La mayoría tienen interfaces anticuadas 2. **Dashboards de análisis** - Pocos ofrecen visualización moderna 3. **Alertas proactivas** - Calendarios fiscales inteligentes son raros 4. **Forecasting** - Proyecciones financieras casi inexistentes 5. **Temas personalizables** - Nadie ofrece esto 6. **Precios accesibles** - Competidores premium son caros --- ## 14. Consideraciones de Seguridad - Autenticación JWT con refresh tokens - Passwords hasheados con bcrypt (cost factor 12) - Aislamiento de datos por schema de PostgreSQL - Rate limiting en endpoints de auth - Validación de inputs con Zod - Sanitización de XML importados - HTTPS obligatorio - Headers de seguridad (Helmet.js) --- ## 15. Servicios Eliminados Los siguientes servicios del backend anterior **NO** se incluirán: - ❌ **Clerk** (autenticación) - Reemplazado por JWT propio - ❌ **OpenPay** (pagos) - Se implementará después si es necesario - ❌ **Syntage** - En proceso de retiro --- *Documento generado el 2026-01-22*