208 lines
6.5 KiB
Markdown
208 lines
6.5 KiB
Markdown
|
|
# **Requisitos Técnicos del ERP**
|
||
|
|
|
||
|
|
## **1. Administración de Usuarios**
|
||
|
|
|
||
|
|
- **Roles y Perfiles**:
|
||
|
|
|
||
|
|
- Los usuarios pueden tener uno o más perfiles predefinidos (por ejemplo, "Ventas", "Compras").
|
||
|
|
- Los perfiles controlan permisos generales a nivel de empresa y refinados a nivel de sucursal.
|
||
|
|
- Un usuario puede tener diferentes perfiles en distintas sucursales de la misma empresa.
|
||
|
|
|
||
|
|
- **Permisos**:
|
||
|
|
|
||
|
|
- Configurables por módulo (Presupuestos, Facturas, etc.).
|
||
|
|
- Granularidad: permitir acciones específicas como "leer", "escribir", "eliminar".
|
||
|
|
- Un usuario puede tener permisos para acceder a una o más sucursales de la empresa, pero debe trabajar en una empresa activa por sesión.
|
||
|
|
- Si el usuario solo tiene permisos para una sucursal, se selecciona automáticamente. Si tiene acceso a varias, se selecciona solo cuando sea necesario.
|
||
|
|
|
||
|
|
- **Superadministrador**:
|
||
|
|
- Puede crear, modificar y eliminar usuarios.
|
||
|
|
- Gestiona perfiles, permisos y asociaciones con empresas y sucursales.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## **2. Gestión Multiempresa y Multisucursal**
|
||
|
|
|
||
|
|
- **Usuarios y Empresas**:
|
||
|
|
|
||
|
|
- Un usuario puede estar asociado a múltiples empresas.
|
||
|
|
- En cada sesión o pestaña, el usuario puede trabajar con una empresa específica.
|
||
|
|
- La empresa activa se elige al inicio de sesión.
|
||
|
|
|
||
|
|
- **Sucursales**:
|
||
|
|
|
||
|
|
- Cada empresa debe tener al menos una sucursal, pero puede tener varias.
|
||
|
|
- Los usuarios de una sucursal pueden gestionar datos de otras sucursales si tienen los permisos adecuados.
|
||
|
|
- Se permite definir permisos para operar en múltiples sucursales dentro de la misma empresa.
|
||
|
|
|
||
|
|
- **Flujo de Selección**:
|
||
|
|
- Al iniciar sesión, el usuario elige la empresa activa.
|
||
|
|
- Si tiene acceso a una única sucursal, esta se selecciona automáticamente.
|
||
|
|
- Si tiene acceso a múltiples sucursales, la selección de sucursal ocurre solo cuando sea necesario para una operación específica.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## **3. Soporte Multiidioma y Regionalización**
|
||
|
|
|
||
|
|
- **Idiomas**:
|
||
|
|
|
||
|
|
- La interfaz del ERP debe estar disponible en varios idiomas.
|
||
|
|
- Los documentos (presupuestos, facturas) pueden generarse en el idioma del cliente.
|
||
|
|
- El idioma de usuario es configurable en su perfil.
|
||
|
|
|
||
|
|
- **Monedas e Impuestos**:
|
||
|
|
- Configuración de moneda por empresa, con posibilidad de conversión.
|
||
|
|
- Definición de impuestos según país (IVA, retenciones, tasas locales).
|
||
|
|
- Flexibilidad para configurar tarifas por categoría de productos o servicios.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## **4. Contexto de Sesión y Pestaña**
|
||
|
|
|
||
|
|
- **Contexto por Pestaña**:
|
||
|
|
|
||
|
|
- Cada pestaña tiene un contexto independiente (`tab_id`), que incluye la empresa activa.
|
||
|
|
- Si se requiere una sucursal para la operación, se solicitará en ese momento.
|
||
|
|
- Se almacena el `tab_id` junto con la empresa activa en el backend para cada sesión de usuario.
|
||
|
|
|
||
|
|
- **Gestión de Sesiones**:
|
||
|
|
- Tokens JWT deben incluir información sobre:
|
||
|
|
- `user_id`
|
||
|
|
- `tab_id`
|
||
|
|
- `active_company_id`
|
||
|
|
- Lista de permisos específicos
|
||
|
|
- Se debe registrar el contexto de pestaña en la base de datos para auditoría y trazabilidad.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## **5. Auditoría y Registro de Actividades**
|
||
|
|
|
||
|
|
- **Registro de Cambios en Documentos**:
|
||
|
|
|
||
|
|
- Presupuestos, facturas y otros documentos deben mantener un historial detallado de modificaciones.
|
||
|
|
- Se registra la siguiente información:
|
||
|
|
- Usuario que realizó el cambio.
|
||
|
|
- Fecha y hora.
|
||
|
|
- Cambios específicos (antes y después).
|
||
|
|
|
||
|
|
- **Trazabilidad Global**:
|
||
|
|
- Auditar las actividades del usuario a nivel de empresa, sucursal y pestaña.
|
||
|
|
- Se debe asociar cada acción al `tab_id` para identificar actividades por pestaña específica.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## **6. Documentos Operativos**
|
||
|
|
|
||
|
|
- **Historial de Cambios**:
|
||
|
|
|
||
|
|
- Cada documento (presupuestos, facturas, etc.) debe registrar todas las modificaciones con la posibilidad de revertirlas si es necesario.
|
||
|
|
|
||
|
|
- **Exportación Multiidioma**:
|
||
|
|
- Generación de documentos en diferentes idiomas según la configuración del cliente.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## **7. Seguridad**
|
||
|
|
|
||
|
|
- **Autenticación**:
|
||
|
|
|
||
|
|
- Autenticación basada en tokens JWT.
|
||
|
|
- Contraseñas encriptadas con bcrypt o Argon2.
|
||
|
|
- Soporte para autenticación en dos pasos (2FA) en futuras iteraciones.
|
||
|
|
|
||
|
|
- **Control de Acceso**:
|
||
|
|
- Validación de permisos en cada solicitud al backend.
|
||
|
|
- Aplicación del principio de mínimos privilegios para usuarios.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## **8. Extensibilidad y Modularidad**
|
||
|
|
|
||
|
|
- **Estructura Modular**:
|
||
|
|
- El sistema debe permitir la integración de nuevos módulos sin afectar los permisos o el funcionamiento existente.
|
||
|
|
- Módulos actuales planificados:
|
||
|
|
- Presupuestos
|
||
|
|
- Facturas
|
||
|
|
- Clientes
|
||
|
|
- Pedidos
|
||
|
|
- Inventario (futuro)
|
||
|
|
- Recursos Humanos (futuro)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## **9. Base de Datos - Diseño Técnico**
|
||
|
|
|
||
|
|
### **Tablas Principales**
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- Usuarios
|
||
|
|
CREATE TABLE Users (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
username VARCHAR(50) UNIQUE NOT NULL,
|
||
|
|
email VARCHAR(100) UNIQUE NOT NULL,
|
||
|
|
password VARCHAR(255) NOT NULL,
|
||
|
|
is_active BOOLEAN DEFAULT TRUE,
|
||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- Empresas
|
||
|
|
CREATE TABLE Companies (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
name VARCHAR(100) UNIQUE NOT NULL,
|
||
|
|
country_code CHAR(2),
|
||
|
|
currency_code CHAR(3),
|
||
|
|
tax_config JSONB,
|
||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- Sucursales
|
||
|
|
CREATE TABLE Branches (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
name VARCHAR(100) NOT NULL,
|
||
|
|
company_id INT NOT NULL REFERENCES Companies(id) ON DELETE CASCADE,
|
||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- Relación Usuario - Empresa
|
||
|
|
CREATE TABLE User_Company (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
user_id INT NOT NULL REFERENCES Users(id),
|
||
|
|
company_id INT NOT NULL REFERENCES Companies(id),
|
||
|
|
is_active BOOLEAN DEFAULT FALSE,
|
||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- Relación Usuario - Sucursal
|
||
|
|
CREATE TABLE User_Branch (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
user_id INT NOT NULL REFERENCES Users(id),
|
||
|
|
branch_id INT NOT NULL REFERENCES Branches(id),
|
||
|
|
permissions JSONB NOT NULL
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- Contexto por pestaña
|
||
|
|
CREATE TABLE Tab_Context (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
user_id INT NOT NULL REFERENCES Users(id),
|
||
|
|
tab_id UUID NOT NULL,
|
||
|
|
company_id INT NOT NULL REFERENCES Companies(id),
|
||
|
|
branch_id INT REFERENCES Branches(id)
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|