CRITICAL fixes: - Restrict X-View-Tenant impersonation to global admin only (was any admin) - Add authorization to subscription endpoints (was open to any user) - Make webhook signature verification mandatory (was skippable) - Remove databaseName from JWT payload (resolve server-side with cache) - Reduce body size limit from 1GB to 10MB (50MB for bulk CFDI) - Restrict .env file permissions to 600 HIGH fixes: - Add authorization to SAT cron endpoints (global admin only) - Add Content-Security-Policy and Permissions-Policy headers - Centralize isGlobalAdmin() utility with caching - Add rate limiting on auth endpoints (express-rate-limit) - Require authentication on logout endpoint MEDIUM fixes: - Replace Math.random() with crypto.randomBytes for temp passwords - Remove console.log of temporary passwords in production - Remove DB credentials from admin notification email - Add escapeHtml() to email templates (prevent HTML injection) - Add file size validation on FIEL upload (50KB max) - Require TLS for SMTP connections - Normalize email to lowercase before uniqueness check - Remove hardcoded default for FIEL_ENCRYPTION_KEY Also includes: - Complete production deployment documentation - API reference documentation - Security audit report with remediation details - Updated README with v0.5.0 changelog - New client admin email template - Utility scripts (create-carlos, test-emails) - PM2 ecosystem config updates Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Horux360 SaaS
Plataforma de análisis financiero y gestión fiscal para empresas mexicanas.
Descripción
Horux360 es una aplicación SaaS multi-tenant que permite a las empresas mexicanas:
- Gestionar sus CFDI (facturas electrónicas) con carga masiva de XML
- Controlar IVA e ISR automáticamente
- Sincronizar CFDIs directamente con el SAT usando FIEL
- Visualizar dashboards financieros en tiempo real
- Realizar conciliación bancaria
- Recibir alertas fiscales proactivas
- Generar reportes y proyecciones financieras
- Calendario de obligaciones fiscales
Stack Tecnológico
| Capa | Tecnología |
|---|---|
| Frontend | Next.js 14 + TypeScript + Tailwind CSS + shadcn/ui |
| Backend | Node.js + Express + TypeScript + tsx |
| Base de datos | PostgreSQL 16 (database-per-tenant) |
| ORM | Prisma (central DB) + pg (tenant DBs con raw SQL) |
| Autenticación | JWT (access 15min + refresh 7d) |
| Estado | Zustand con persistencia |
| Proceso | PM2 (fork mode) |
| Proxy | Nginx con SSL (Let's Encrypt) |
| Nodemailer + Gmail Workspace (STARTTLS) | |
| Pagos | MercadoPago (suscripciones) |
Estructura del Proyecto
horux360/
├── apps/
│ ├── web/ # Frontend Next.js 14
│ │ ├── app/ # Pages (App Router)
│ │ ├── components/ # Componentes UI
│ │ ├── lib/api/ # Cliente API
│ │ └── stores/ # Zustand stores
│ └── api/ # Backend Express
│ ├── src/
│ │ ├── config/ # ENV, database connections
│ │ ├── controllers/ # Request handlers
│ │ ├── middlewares/ # Auth, tenant, rate-limit, plan-limits
│ │ ├── routes/ # Express routes
│ │ ├── services/ # Business logic
│ │ │ ├── email/ # Templates + Nodemailer
│ │ │ ├── payment/ # MercadoPago
│ │ │ └── sat/ # SAT sync + FIEL crypto
│ │ ├── utils/ # Helpers (token, password, global-admin)
│ │ └── jobs/ # SAT sync cron job
│ └── prisma/ # Schema + migrations
├── packages/
│ └── shared/ # Tipos y constantes compartidas
├── deploy/
│ └── nginx/ # Configuración de Nginx
├── scripts/
│ └── backup.sh # Script de backup PostgreSQL
├── docs/
│ ├── architecture/ # Docs técnicos
│ ├── security/ # Auditorías de seguridad
│ └── plans/ # Documentación de diseño
└── ecosystem.config.js # PM2 config
Arquitectura Multi-Tenant
Cada cliente tiene su propia base de datos PostgreSQL, asegurando aislamiento completo de datos:
horux360 (central) ← Tenants, Users, Subscriptions, RefreshTokens
horux_<rfc_cliente_1> ← CFDIs, Alertas, Calendario, IVA del cliente 1
horux_<rfc_cliente_2> ← CFDIs, Alertas, Calendario, IVA del cliente 2
...
El middleware de tenant resuelve la base de datos del cliente desde el tenantId del JWT, usando un caché de 5 minutos.
Planes
| Plan | CFDI/mes | Usuarios | Características |
|---|---|---|---|
| Starter | 100 | 1 | Dashboard, IVA/ISR, CFDI básico |
| Business | 500 | 3 | + Reportes, Alertas, Calendario |
| Professional | 2,000 | 10 | + Conciliación, Forecasting, SAT Sync |
| Enterprise | Ilimitado | Ilimitado | + API, Multi-empresa |
Seguridad
- JWT con access token (15min) y refresh token rotation (7d)
- bcrypt con 12 salt rounds para passwords
- Rate limiting en auth (10 login/15min, 3 register/hora)
- FIEL encriptada con AES-256-GCM
- CSP, HSTS, y security headers vía Nginx + Helmet
- Admin global verificado por RFC (no solo por rol)
- Webhooks de MercadoPago con verificación HMAC-SHA256
- Body limits diferenciados (10MB general, 50MB bulk CFDI)
- TLS obligatorio para SMTP
Ver Auditoría de Seguridad para detalles completos.
Documentación
| Documento | Descripción |
|---|---|
| Diseño SaaS | Arquitectura original y decisiones de diseño |
| Deployment | Guía completa de despliegue en producción |
| API Reference | Referencia de todos los endpoints |
| Security Audit | Auditoría de seguridad y remediaciones |
| SAT Sync | Implementación de sincronización con el SAT |
Configuración Local
Requisitos
- Node.js 20+
- pnpm 9+
- PostgreSQL 16
Setup
# Instalar dependencias
pnpm install
# Configurar variables de entorno
cp apps/api/.env.example apps/api/.env
cp apps/web/.env.example apps/web/.env.local
# Ejecutar migraciones
cd apps/api && pnpm prisma migrate dev
# Desarrollo
pnpm dev
Variables de Entorno (API)
NODE_ENV=development
PORT=4000
DATABASE_URL="postgresql://user:pass@localhost:5432/horux360"
JWT_SECRET=<min-32-chars>
JWT_EXPIRES_IN=15m
JWT_REFRESH_EXPIRES_IN=7d
CORS_ORIGIN=http://localhost:3000
FRONTEND_URL=http://localhost:3000
FIEL_ENCRYPTION_KEY=<min-32-chars>
FIEL_STORAGE_PATH=/var/horux/fiel
Variables de Entorno (Web)
NEXT_PUBLIC_API_URL=http://localhost:4000/api
Roles
| Rol | Acceso |
|---|---|
| admin | Todo dentro de su tenant + invitar usuarios |
| contador | CFDI, impuestos, reportes, dashboard |
| visor | Solo lectura |
| admin global | Admin del tenant CAS2408138W2 — gestión de clientes, suscripciones, SAT cron |
Producción
- URL: https://horuxfin.com
- Hosting: Servidor dedicado
- SSL: Let's Encrypt (auto-renewal)
- Process: PM2 con auto-restart
- Backups: Diarios a las 01:00 AM
Ver Guía de Deployment para instrucciones completas.
Changelog
v0.5.0 (2026-03-18)
- Auditoría de seguridad completa y remediación de 20 vulnerabilidades
- Rate limiting en endpoints de autenticación
- Content Security Policy (CSP) y headers de seguridad mejorados
databaseNameremovido del JWT (resolución server-side)- Restricción de impersonación a admin global únicamente
- Autorización en endpoints de suscripción y SAT cron
- Verificación obligatoria de firma en webhooks
- Body limits reducidos (10MB default, 50MB bulk)
- Passwords temporales criptográficamente seguros
- Validación de tamaño en upload de FIEL
- SMTP con TLS obligatorio
- Documentación completa de producción
v0.4.0 (2026-01-22)
- Carga masiva de XML CFDI (hasta 50MB)
- Selector de período mes/año en dashboards
- Fix: Persistencia de sesión en refresh de página
- Fix: Clasificación ingreso/egreso basada en RFC
- Fix: Cálculo de IVA desde XML
- Mejoras en reportes con manejo de errores
- Soporte CORS para múltiples orígenes
v0.3.0 (2026-01-22)
- Sistema multi-tenant con gestión de clientes
- Temas visuales (4 layouts diferentes)
v0.2.0 (2026-01-22)
- Dashboard principal con KPIs
- Módulo de CFDI
- Control de IVA/ISR
- Calendario fiscal
- Sistema de alertas
v0.1.0 (2026-01-22)
- Autenticación JWT
- Estructura multi-tenant
- Configuración inicial del proyecto
Licencia
Propietario - Consultoría AS
Description
Languages
TypeScript
98.3%
JavaScript
0.9%
Shell
0.5%
CSS
0.3%