QUIPU Enterprise Framework
Documento guía para construir una plataforma empresarial reutilizable, segura y escalable, preparada para crear múltiples productos SaaS sin duplicar lógica ni perder control técnico.
1. Propósito del documento
Este documento define los fundamentos técnicos y conceptuales para construir el ecosistema QUIPU como una plataforma SaaS empresarial, no como una colección de aplicaciones aisladas.
Qué busca resolver
- Evitar código duplicado entre balance.plus, logistica.plus, reserva.plus, SATD y futuros productos.
- Mantener una arquitectura simple para un desarrollador individual, pero preparada para escalar.
- Definir reglas claras de seguridad, multi-tenancy, APIs, base de datos, permisos y auditoría.
- Separar conceptos: aplicación web, API, módulo, dominio, motor, monolito modular y microservicio.
- Crear una guía permanente para revisar decisiones antes de programar.
Cómo debe usarse
Antes de crear un nuevo módulo, tabla, ruta o pantalla, revisa este documento. La pregunta principal debe ser: ¿esto pertenece al núcleo común, a un motor reutilizable o a un producto específico?
Volver arriba2. Visión general de QUIPU
QUIPU debe evolucionar como una plataforma empresarial modular. Encima de ella pueden nacer múltiples SaaS, cada uno especializado en un problema concreto, pero todos compartiendo una misma infraestructura.
La diferencia clave
| Enfoque incorrecto | Enfoque recomendado |
|---|---|
| Crear cada aplicación como proyecto independiente. | Crear una plataforma común y productos encima. |
| Repetir login, usuarios, permisos y auditoría en cada app. | Usar un núcleo SaaS compartido. |
| Mezclar reglas de negocio con vistas EJS y rutas. | Separar rutas, controladores, servicios, repositorios y vistas. |
Dejar que el frontend envíe tenant_id. |
Resolver el tenant solo desde autenticación, JWT y Redis. |
3. Principios rectores
Estos principios deben guiar todas las decisiones técnicas del proyecto.
1. Simplicidad primero
Como el desarrollo será llevado por una sola persona, la arquitectura debe ser clara, modular y mantenible. No se debe introducir complejidad antes de necesitarla.
2. Seguridad por defecto
Toda ruta, consulta, formulario, API y archivo debe diseñarse asumiendo que puede ser atacado.
3. Multi-tenancy estricto
Ningún dato puede cruzarse entre empresas. El aislamiento por tenant_id es una regla central.
4. API reutilizable
La web, PWA, Android, integraciones externas y futuros clientes deben consumir las mismas reglas del backend.
5. Monolito modular
Se empieza con un solo proyecto Node.js bien organizado. Los microservicios se dejan para una etapa futura.
6. Datos confiables
El sistema debe priorizar consistencia, trazabilidad, auditoría y reglas transaccionales claras.
4. Conceptos base
Antes de programar, conviene diferenciar correctamente los conceptos que sostienen la arquitectura.
API
Una API es una puerta de entrada. Recibe solicitudes, valida datos, ejecuta reglas de negocio y devuelve respuestas. No significa necesariamente que exista un microservicio.
GET /api/v1/products permite que una pantalla web, una app Android
o una integración externa pidan productos sin acceder directamente a MySQL.
Monolito
Es una sola aplicación que contiene todos los módulos. Puede ser desordenado si todo se mezcla, o muy sólido si se organiza correctamente.
Monolito modular
Es una sola aplicación, pero separada internamente por módulos. Este es el enfoque recomendado para QUIPU.
Microservicio
Es una aplicación independiente, con su propio proceso, despliegue, configuración y normalmente su propia responsabilidad. Los microservicios se comunican entre sí usando APIs, colas o eventos.
| Concepto | Qué es | Cuándo usarlo |
|---|---|---|
| API | Contrato de comunicación | Desde el inicio |
| Módulo | Parte organizada dentro del proyecto | Desde el inicio |
| Monolito modular | Un proyecto, muchos módulos claros | Etapa inicial y media |
| Microservicio | Proyecto separado que despliega aparte | Cuando exista carga, equipo o necesidad real |
5. Arquitectura recomendada
La arquitectura recomendada es un monolito modular con APIs internas versionadas, preparado para evolucionar hacia servicios separados si en el futuro existe una razón real.
Stack obligatorio
| Capa | Tecnología | Uso |
|---|---|---|
| Backend | Node.js + Express | Servidor web, APIs, reglas de negocio, acceso a datos. |
| Frontend inicial | EJS SSR | Vistas renderizadas desde servidor, ideales para SaaS administrativo. |
| Base de datos | MySQL compartido | Datos transaccionales multi-tenant. |
| Cache y control | Redis | Sesiones, revocación JWT, rate limit, cache, locks y colas. |
| Autenticación | JWT corto + Redis | Tokens de corta duración y revocación controlada. |
Qué significa “preparado para escalar”
No significa usar microservicios desde el primer día. Significa que cada módulo debe tener límites claros, interfaces limpias y poca dependencia directa de otros módulos.
6. Capas de la plataforma
QUIPU debe organizarse por capas para evitar mezclar infraestructura, reglas de negocio y productos comerciales.
Capa 1: Núcleo SaaS
Es la base común de todos los productos. No pertenece solo a logística ni solo a balance.plus. Pertenece a todo el ecosistema.
- Autenticación y sesiones.
- Tenants y configuración.
- Usuarios, roles y permisos.
- Suscripciones, planes y módulos habilitados.
- Auditoría.
- Notificaciones.
- Catálogos globales: países, monedas, idiomas, impuestos, unidades.
- Gestión de archivos.
Capa 2: Motores reutilizables
Son bloques de lógica que pueden ser usados por varios productos. Por ejemplo, un motor de documentos puede servir para logística, SATD, ventas, compras y balance.plus.
Capa 3: Productos SaaS
Son las aplicaciones visibles para el cliente final. Cada producto activa ciertos módulos y vistas, pero no debe duplicar la infraestructura.
7. Dominios de negocio
Un dominio representa un área de negocio con sus propias reglas, datos y procesos. Pensar por dominios evita que el sistema se convierta en una mezcla desordenada de tablas y pantallas.
Dominio Plataforma
Tenant, usuarios, roles, permisos, planes, suscripciones, auditoría, configuración e i18n.
Dominio Comercial
Clientes, proveedores, precios, cotizaciones, pedidos, descuentos, condiciones comerciales.
Dominio Logístico
Productos, inventario, almacenes, ubicaciones, picking, despachos, trazabilidad.
Dominio Financiero
Caja, movimientos, pagos, cobros, monedas, cuentas, conciliación y reportes financieros simples.
Dominio Documental
Archivos, evidencias, fichas técnicas, certificados, PDFs, imágenes y control de acceso.
Dominio Inteligencia
Reportes, métricas, predicción de demanda, alertas inteligentes y asistentes por texto o voz.
Mapa conceptual
Regla para identificar un dominio
Si un conjunto de funcionalidades tiene vocabulario propio, reglas propias y datos propios, probablemente pertenece a un dominio.
8. Motores reutilizables
Un motor es una pieza de lógica reutilizable. No es solo una tabla ni una pantalla. Es un conjunto de reglas de negocio que puede servir a más de un producto.
| Motor | Responsabilidad | Productos que podrían usarlo |
|---|---|---|
| Identity Engine | Login, JWT, usuarios, roles, permisos, tenant activo. | Todos. |
| Subscription Engine | Planes, límites, módulos habilitados, bloqueo por vencimiento. | Todos los SaaS comerciales. |
| Inventory Engine | Stock, kardex, lotes, series, vencimientos, variantes, movimientos. | logistica.plus, ventas B2B, producción ligera. |
| Pricing Engine | Listas de precios, impuestos, monedas, descuentos y reglas comerciales. | logística, ventas, B2B, cotizaciones. |
| Document Engine | Subida, validación, clasificación, acceso y trazabilidad de archivos. | SATD, logística, compras, ventas, balance.plus. |
| Workflow Engine | Estados, aprobaciones, tareas, transiciones y reglas por módulo. | Pedidos, compras, despachos, solicitudes, reservas. |
| Notification Engine | Alertas internas, email, push PWA, recordatorios y eventos. | Todos. |
| Reporting Engine | Reportes, métricas, KPIs, consultas agregadas y exportaciones. | Todos. |
| Intelligence Engine | Predicciones, recomendaciones, consultas por lenguaje natural. | Logística, ventas, compras, balance.plus. |
Cómo reconocer si algo debe ser un motor
- Será usado por más de un producto.
- Contiene reglas de negocio propias.
- Necesita configuración por tenant.
- Puede tener API propia.
- Puede evolucionar sin depender totalmente de una pantalla específica.
9. Estrategia API
Las APIs deben existir desde el inicio porque permiten que web, PWA, Android e integraciones compartan las mismas reglas de negocio.
Convención base
/api/v1/{resource}
/api/v1/auth
/api/v1/products
/api/v1/inventory
/api/v1/warehouses
/api/v1/sales
/api/v1/reports
APIs del núcleo SaaS
| API | Ruta | Responsabilidad |
|---|---|---|
| Auth API | /api/v1/auth |
Login, refresh, logout, usuario actual, revocación JWT. |
| Tenants API | /api/v1/tenants |
Configuración del tenant actual, idioma, moneda, país, zona horaria. |
| Users API | /api/v1/users |
Usuarios por tenant. |
| Roles API | /api/v1/roles |
Roles, permisos y asignaciones. |
| Subscriptions API | /api/v1/subscriptions |
Plan activo, módulos habilitados, límites y estado comercial. |
| Audit API | /api/v1/audit |
Historial de acciones, IP, usuario, entidad y cambios. |
APIs logísticas y comerciales
| API | Ruta | Responsabilidad |
|---|---|---|
| Products API | /api/v1/products |
Productos simples, lotes, vencimiento, seriales, variantes, packs, recetas. |
| Inventory API | /api/v1/inventory |
Stock, kardex, movimientos, ajustes, transferencias. |
| Warehouses API | /api/v1/warehouses |
Almacenes, zonas, racks, ubicaciones y capacidad. |
| Picking API | /api/v1/picking |
Listas de picking, escaneo, preparación y validación. |
| Shipments API | /api/v1/shipments |
Despachos, transportistas, evidencias y entregas. |
| Contacts API | /api/v1/contacts |
Clientes, proveedores, direcciones, contactos y condiciones. |
| Sales API | /api/v1/sales |
Cotizaciones, pedidos, aprobación y conversión. |
| Purchases API | /api/v1/purchases |
Requerimientos, órdenes de compra, recepción e historial de precios. |
Reglas de diseño API
- Versionar desde el inicio:
/api/v1. - Usar JSON como formato de intercambio.
- No recibir
tenant_iddesde frontend. - Validar inputs antes de llegar al service.
- Aplicar rate limit por IP, usuario y tenant según la ruta.
- Registrar auditoría en operaciones críticas.
- Usar respuestas de error consistentes.
Formato sugerido de respuesta
{
"success": true,
"data": {},
"meta": {
"requestId": "req_123",
"version": "v1"
}
}
Formato sugerido de error
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Los datos enviados no son válidos.",
"details": []
},
"meta": {
"requestId": "req_123",
"version": "v1"
}
}
Volver arriba
10. Multi-tenancy
El multi-tenancy es el fundamento más crítico del SaaS. En QUIPU se recomienda base de datos compartida,
con aislamiento estricto mediante tenant_id.
Regla absoluta
tenant_id nunca debe venir del frontend. El tenant se obtiene únicamente del usuario autenticado,
el JWT validado y la sesión/cache segura en Redis.
Flujo correcto
Middleware recomendado
request
→ securityMiddleware
→ authMiddleware
→ tenantResolverMiddleware
→ subscriptionMiddleware
→ permissionsMiddleware
→ moduleAccessMiddleware
→ controller
Reglas de base de datos
- Todas las tablas transaccionales deben tener
tenant_id. - Todas las consultas deben filtrar por
tenant_id. - Los índices deben incluir
tenant_iden tablas de alto uso. - Las relaciones deben evitar mezclar registros de tenants distintos.
- La auditoría debe registrar siempre
tenant_id.
Ejemplo conceptual de consulta correcta
SELECT id, sku, name
FROM products
WHERE tenant_id = ?
AND id = ?
AND deleted_at IS NULL;
Consulta peligrosa
SELECT id, sku, name
FROM products
WHERE id = ?;
tenant_id en una query es una falla crítica.
11. Seguridad
La seguridad no debe agregarse al final. Debe estar presente en rutas, middlewares, queries, vistas, formularios, APIs, archivos, sesiones y logs.
Controles base
Autenticación
JWT de corta duración, refresh controlado, revocación en Redis y validación de usuario activo.
Autorización
Permisos por tenant, rol, plan y módulo habilitado. No basta con estar logueado.
Protección contra SQL Injection
Siempre usar consultas parametrizadas mediante mysql2/promise. Nunca concatenar inputs.
Protección de vistas
Escapar datos al renderizar EJS, evitar inline JS innecesario y aplicar CSP.
Rate limit
Aplicar límites a login, recuperación de contraseña, APIs públicas y endpoints costosos.
Auditoría
Registrar quién hizo qué, cuándo, desde qué IP, sobre qué entidad y con qué resultado.
Headers y middlewares sugeridos
helmetpara headers de seguridad.express-rate-limito Redis-based rate limit.zod,joio validadores propios para inputs.bcryptoargon2para passwords.- Cookies seguras si se usan tokens en cookies:
httpOnly,secure,sameSite.
Auditoría mínima
| Campo | Uso |
|---|---|
tenant_id | Empresa afectada. |
user_id | Usuario que ejecutó la acción. |
action | CREATE, UPDATE, DELETE, LOGIN, EXPORT, APPROVE. |
entity_type | products, orders, inventory_movements, users. |
entity_id | ID del registro afectado. |
before_data | Estado anterior cuando aplique. |
after_data | Estado nuevo cuando aplique. |
ip_address | IP origen. |
user_agent | Navegador o cliente. |
created_at | Fecha y hora. |
12. Datos y MySQL
MySQL será el centro transaccional de QUIPU. El diseño debe priorizar consistencia, aislamiento por tenant, trazabilidad y performance.
Reglas de modelado
- Usar
tenant_iden toda tabla de datos empresariales. - Separar catálogos globales de catálogos por tenant.
- Usar claves primarias internas y códigos visibles separados.
- Usar timestamps estándar:
created_at,updated_at,deleted_at. - Usar soft delete cuando el histórico sea importante.
- No borrar movimientos de inventario: se corrigen con movimientos inversos o ajustes auditados.
- Crear índices pensando en consultas reales, no por costumbre.
Campos estándar sugeridos
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
tenant_id BIGINT UNSIGNED NOT NULL,
created_by BIGINT UNSIGNED NULL,
updated_by BIGINT UNSIGNED NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
deleted_at DATETIME NULL
Índices multi-tenant
En tablas grandes, los índices deben considerar que casi todas las consultas filtran por tenant.
INDEX idx_products_tenant_sku (tenant_id, sku),
INDEX idx_movements_tenant_date (tenant_id, movement_date),
INDEX idx_stock_tenant_product_location (tenant_id, product_id, warehouse_id, location_id)
Inventario: regla conceptual
El stock no debe ser solo un número editado manualmente. Debe ser el resultado de movimientos: ingreso, salida, ajuste, transferencia, devolución, inventario inicial.
13. Redis
Redis debe utilizarse para acelerar y controlar el sistema, no como reemplazo de MySQL.
| Uso | Ejemplo | Beneficio |
|---|---|---|
| Sesiones o estado de sesión | session:user:123 |
Control centralizado de acceso. |
| Revocación JWT | jwt:blacklist:jti |
Permite invalidar tokens antes de expirar. |
| Rate limit | rate:login:ip |
Reduce fuerza bruta y abuso. |
| Cache | tenant:42:settings |
Evita consultas repetidas a MySQL. |
| Locks | lock:inventory:product:99 |
Evita doble procesamiento en operaciones críticas. |
| Colas | queue:emails |
Procesa tareas lentas fuera del request principal. |
Regla de uso
Ejemplos de cache recomendada
- Configuración del tenant.
- Permisos del usuario.
- Módulos habilitados por plan.
- Catálogos globales de baja variación.
- Preferencias de idioma y moneda.
Qué no guardar solo en Redis
- Movimientos de inventario definitivos.
- Órdenes de compra o venta finales.
- Auditoría legal.
- Datos que no puedan perderse.
14. Web SSR, PWA y Android
La aplicación web debe ser el centro administrativo. PWA y Android deben complementar procesos operativos, no duplicar la plataforma.
Web con EJS SSR
Ideal para administración, configuración, dashboards, tablas, formularios, reportes y operaciones de oficina.
PWA
Permite mejorar la experiencia móvil desde la web: acceso tipo app, service worker, cache controlada, push notifications y mejor rendimiento percibido.
Android
Debe usarse donde realmente aporta valor operativo:
- Picking en almacén.
- Inventario físico.
- Recepción de mercadería.
- Despachos y evidencias.
- Ventas de campo.
- Lectura de QR, código de barras o NFC.
Principio clave
Windows de escritorio
Solo debe considerarse cuando exista integración fuerte con hardware local o una necesidad offline muy específica: cámaras industriales, básculas, microscopios, PLCs, impresoras especiales o instrumentos de medición.
Volver arriba15. Estructura de proyecto
La estructura debe ser suficientemente ordenada para escalar, pero no tan compleja que dificulte el avance individual.
Estructura recomendada
quipu-saas/
├── docs/
│ ├── 00-project-vision.md
│ ├── 01-architecture.md
│ ├── 02-multi-tenancy.md
│ └── 03-api-guidelines.md
│
├── public/
│ ├── assets/
│ ├── css/
│ ├── js/
│ ├── manifest.json
│ └── service-worker.js
│
├── src/
│ ├── app.js
│ ├── server.js
│ │
│ ├── config/
│ │ ├── app.config.js
│ │ ├── database.config.js
│ │ ├── redis.config.js
│ │ └── security.config.js
│ │
│ ├── shared/
│ │ ├── database/
│ │ ├── redis/
│ │ ├── middlewares/
│ │ ├── validators/
│ │ ├── errors/
│ │ ├── utils/
│ │ └── services/
│ │
│ ├── modules/
│ │ ├── auth/
│ │ ├── tenants/
│ │ ├── users/
│ │ ├── roles/
│ │ ├── subscriptions/
│ │ ├── products/
│ │ ├── inventory/
│ │ ├── warehouses/
│ │ ├── sales/
│ │ ├── purchases/
│ │ ├── documents/
│ │ ├── reports/
│ │ └── notifications/
│ │
│ ├── routes/
│ │ ├── web.routes.js
│ │ └── api.v1.routes.js
│ │
│ ├── views/
│ │ ├── auth/
│ │ ├── dashboard/
│ │ ├── products/
│ │ ├── inventory/
│ │ └── errors/
│ │
│ ├── layouts/
│ │ ├── main.ejs
│ │ ├── auth.ejs
│ │ └── error.ejs
│ │
│ └── partials/
│ ├── head.ejs
│ ├── sidenav.ejs
│ ├── topbar.ejs
│ └── scripts.ejs
│
├── tests/
├── .env.example
├── package.json
└── README.md
Estructura interna de un módulo
modules/products/
├── products.routes.js
├── products.controller.js
├── products.service.js
├── products.repository.js
├── products.validator.js
├── products.policy.js
└── products.constants.js
| Archivo | Responsabilidad |
|---|---|
routes |
Define endpoints y middlewares específicos. |
controller |
Recibe request, llama services y devuelve response. |
service |
Contiene reglas de negocio. |
repository |
Accede a MySQL con queries parametrizadas. |
validator |
Valida entrada de datos. |
policy |
Reglas de autorización específicas del módulo. |
16. Flujos críticos
Los flujos críticos deben diseñarse antes de crear pantallas, porque definen seguridad, datos y responsabilidades.
Flujo de login
Flujo de request autenticado
Flujo de movimiento de inventario
Flujo de pedido a despacho
17. Reportes e inteligencia
La inteligencia del sistema aparece cuando los datos están bien estructurados y auditados. No se empieza por IA; se empieza por datos confiables.
Reportes base por dominio
| Dominio | Reportes recomendados |
|---|---|
| Logístico | Stock crítico, rotación, kardex, valorización, ocupación de almacén, vencimientos. |
| Comercial | Ventas por cliente, pedidos pendientes, conversión de cotizaciones, márgenes. |
| Compras | Histórico de precios, proveedores, tiempos de entrega, variación de costos. |
| Financiero | Ingresos, egresos, saldos, cuentas, flujo de caja simple. |
| Operativo | Productividad de picking, tiempos de despacho, errores, cumplimiento. |
Inteligencia progresiva
- Reportes descriptivos: qué ocurrió.
- Indicadores: cómo estamos.
- Alertas: qué requiere atención.
- Predicción: qué podría ocurrir.
- Recomendación: qué conviene hacer.
- Asistente: consulta por texto o voz.
Uso futuro de Python
Node.js debe seguir siendo el núcleo transaccional. Python puede incorporarse después para tareas analíticas: predicción de demanda, modelos estadísticos, procesamiento de documentos o IA. La comunicación puede hacerse mediante colas, jobs o APIs internas.
18. Escalabilidad
Escalar no es solo soportar más usuarios. También significa mantener el código comprensible, la base de datos eficiente y los procesos controlados.
Escalabilidad técnica
- Pool de conexiones MySQL.
- Índices correctos.
- Cache Redis para datos repetitivos.
- Jobs para procesos lentos.
- Paginación obligatoria en listados.
- Evitar consultas N+1.
- Rate limit en APIs.
- Logs estructurados.
Escalabilidad organizacional
Aunque al inicio haya un solo desarrollador, el proyecto debe poder ser entendido por otro programador en el futuro.
Por eso importan los comentarios iniciales por archivo, los nombres claros, los documentos .md
y la consistencia de carpetas.
Cuándo considerar microservicios
| Señal | Interpretación |
|---|---|
| Un módulo consume la mayoría de recursos. | Podría separarse para escalarlo aparte. |
| Un módulo necesita despliegues muy frecuentes. | Podría aislarse para no afectar el resto. |
| Hay equipos diferentes por dominio. | Los microservicios pueden organizar responsabilidades. |
| Un proceso pesado afecta la experiencia del usuario. | Primero usar colas; si no basta, evaluar servicio separado. |
19. Roadmap recomendado
El roadmap debe reducir riesgo. Primero se construye el núcleo, luego los motores, después los productos.
Etapa 0: Documentación base
- Visión del proyecto.
- Arquitectura base.
- Reglas multi-tenant.
- Convenciones API.
- Convenciones de carpetas.
Etapa 1: Núcleo SaaS
- Login seguro.
- JWT corto.
- Redis para sesión/revocación.
- Tenants.
- Usuarios.
- Roles y permisos.
- Planes y módulos.
- Auditoría.
Etapa 2: Base operativa
- Catálogos globales.
- Productos.
- Almacenes.
- Ubicaciones.
- Inventario inicial.
- Movimientos y kardex.
Etapa 3: Logística avanzada
- Lotes.
- Vencimientos.
- Seriales.
- Variantes.
- Picking.
- Despacho.
- Evidencias.
Etapa 4: Comercial
- Clientes y proveedores.
- Listas de precios.
- Cotizaciones.
- Pedidos.
- Compras.
- Recepciones.
Etapa 5: Reportes e inteligencia
- Dashboards.
- KPIs.
- Alertas.
- Predicción de stock.
- Sugerencias de compra.
- Asistente por texto/voz.
20. Checklists
Usa estas listas antes de aprobar cualquier módulo, API o tabla.
Checklist de módulo nuevo
- ¿Pertenece al núcleo, a un motor o a un producto específico?
- ¿Tiene rutas, controller, service, repository y validator separados?
- ¿Todas sus queries filtran por
tenant_id? - ¿Valida permisos?
- ¿Valida plan y módulo habilitado?
- ¿Registra auditoría si cambia datos críticos?
- ¿Tiene paginación si lista registros?
- ¿Evita duplicar lógica existente?
Checklist de tabla nueva
- ¿Necesita
tenant_id? - ¿Tiene timestamps estándar?
- ¿Necesita soft delete?
- ¿Tiene índices acordes a las consultas?
- ¿Tiene campos de auditoría si corresponde?
- ¿Evita guardar datos calculados sin justificación?
- ¿Sus relaciones respetan el tenant?
Checklist de endpoint API
- ¿Está bajo
/api/v1? - ¿Tiene rate limit si es sensible?
- ¿Valida autenticación?
- ¿Valida permisos?
- ¿Valida inputs?
- ¿Devuelve errores consistentes?
- ¿No expone información interna?
- ¿Registra auditoría si corresponde?
Checklist de seguridad
- No concatenar SQL.
- No confiar en datos del frontend.
- No aceptar
tenant_idenviado por cliente. - No guardar contraseñas sin hash fuerte.
- No mostrar errores internos al usuario final.
- No servir archivos privados sin autorización.
- No permitir endpoints sin rate limit cuando puedan ser abusados.
21. Glosario
Definiciones breves para revisar conceptos con rapidez.
| Término | Definición |
|---|---|
| Tenant | Empresa cliente que usa el SaaS de forma aislada. |
| Multi-tenant | Modelo donde varias empresas usan la misma aplicación y base compartida, pero con datos aislados. |
| API | Interfaz para que clientes o sistemas interactúen con el backend. |
| Monolito modular | Una sola aplicación organizada en módulos claros. |
| Microservicio | Servicio independiente desplegado y escalado por separado. |
| Dominio | Área de negocio con reglas y vocabulario propios. |
| Motor | Componente reutilizable con reglas de negocio propias. |
| Repository | Capa encargada de consultar o persistir datos. |
| Service | Capa donde viven las reglas de negocio. |
| Middleware | Función que procesa el request antes de llegar al controller. |
| JWT | Token firmado para representar una sesión o identidad por tiempo limitado. |
| Redis | Almacén en memoria usado para cache, sesiones, locks, rate limits y colas. |
| Kardex | Histórico de movimientos que explica el stock de un producto. |
| PWA | Aplicación web progresiva con experiencia similar a app móvil. |