Uecko_ERP/docs/REQUISITOS GENERALES.md
2025-04-22 17:09:57 +02:00

6.5 KiB

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

-- 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
);
-- 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
);
-- 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
);
-- 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
);
-- 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
);
-- 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)
);