erp-core/docs/04-modelado/requerimientos-funcionales/mgn-002/RF-MGN-002-001-gestion-empresas.md

4.9 KiB

RF-MGN-002-001: Gestión de Empresas

Módulo: MGN-002 - Empresas y Organizaciones Prioridad: P0 (MVP) Story Points: 8 Estado: Definido Fecha: 2025-11-23

Descripción

El sistema debe permitir la creación, lectura, actualización y desactivación (soft delete) de empresas. Cada empresa tiene datos generales, fiscales, dirección y configuración. Una empresa también es un partner (patrón Odoo).

Actores

  • Actor Principal: Administrador de Sistema
  • Actores Secundarios: Contador (configura datos fiscales)

Precondiciones

  1. Usuario administrador debe estar autenticado
  2. Tenant debe estar activo
  3. Catálogo de países y monedas debe estar disponible (MGN-003)

Flujo Principal

  1. Administrador accede a módulo de Gestión de Empresas
  2. Administrador crea nueva empresa con datos generales:
    • Nombre comercial y nombre legal
    • RFC/NIT/Tax ID
    • Email corporativo, teléfono, sitio web
  3. Administrador configura dirección:
    • Calle, número, colonia
    • Ciudad, estado, país, código postal
  4. Administrador configura datos fiscales:
    • Régimen fiscal
    • Moneda principal (currency_id)
  5. Sistema crea partner automáticamente (is_company=true)
  6. Sistema vincula empresa con partner (company.partner_id)
  7. Sistema guarda logo de empresa (opcional)
  8. Sistema crea registro en core.companies
  9. Empresa queda disponible para asignar usuarios

Flujos Alternativos

FA-1: Actualización de Datos de Empresa

  1. Administrador selecciona empresa existente
  2. Administrador modifica datos (nombre, dirección, fiscal)
  3. Sistema valida cambios
  4. Sistema actualiza core.companies y core.partners
  5. Cambios se reflejan inmediatamente

FA-2: Configuración de Holdings (Jerarquía)

  1. Administrador crea empresa hija
  2. Administrador selecciona parent_id (empresa padre/holding)
  3. Sistema valida que no haya ciclos (A → B → A)
  4. Sistema crea jerarquía en core.companies
  5. Sistema puede visualizar organigrama de empresas

FA-3: Desactivación de Empresa

  1. Administrador desactiva empresa (status='inactive')
  2. Sistema valida que no haya documentos pendientes (órdenes, facturas draft)
  3. Si hay pendientes, sistema retorna error 400: "Empresa tiene documentos pendientes"
  4. Si no hay pendientes, sistema desactiva empresa
  5. Usuarios pierden acceso a empresa desactivada

FA-4: Subir Logo de Empresa

  1. Administrador sube logo (PNG, JPG, max 2MB)
  2. Sistema valida formato y tamaño
  3. Sistema guarda en storage (S3 o file system)
  4. Sistema actualiza company.logo_url
  5. Logo se muestra en documentos (facturas, cotizaciones)

Reglas de Negocio

  • RN-1: Una empresa también es un partner (company.partner_id)
  • RN-2: Tax ID debe ser único por país
  • RN-3: Empresa debe tener moneda principal definida
  • RN-4: Empresa puede ser parte de holding (parent_id)
  • RN-5: No se permiten ciclos en jerarquías (validación)
  • RN-6: Empresa desactivada no permite creación de nuevos documentos
  • RN-7: Logo máximo 2MB, formatos: PNG, JPG, SVG

Criterios de Aceptación

  • Administrador puede crear empresas con datos generales y fiscales
  • Sistema crea partner automáticamente para cada empresa
  • Administrador puede configurar dirección y país de empresa
  • Administrador puede subir logo de empresa (max 2MB)
  • Empresa tiene moneda principal definida
  • Administrador puede crear jerarquías (holdings con empresas hijas)
  • Sistema valida que Tax ID sea único por país
  • Sistema previene ciclos en jerarquías
  • Administrador puede desactivar empresas sin documentos pendientes
  • Logo de empresa se muestra en documentos (facturas, cotizaciones)

Entidades Involucradas

  • Principales:
    • core.companies (name, legal_name, tax_id, currency_id, parent_id, logo_url)
    • core.partners (empresa también es partner)
  • Relacionadas:
    • core.countries (país de empresa)
    • core.currencies (moneda principal)

Referencias

Notas Técnicas

  • Patrón Odoo: res.company (empresa también es res.partner)
  • Validación Tax ID: Regex por país (México RFC: 12-13 chars alfanumérico)
  • Logo Storage:
    • Desarrollo: file system local
    • Producción: AWS S3 o similar
  • Jerarquías: Visualización con tree view o organigrama D3.js
  • Backend: NestJS CompaniesService
  • Frontend: Formulario con tabs (General, Fiscal, Dirección)

Dependencias

  • RF Dependientes:
    • RF-MGN-001-001 (Autenticación)
    • RF-MGN-003-001 (Partners - se crea automáticamente)
    • RF-MGN-003-002 (Países)
    • RF-MGN-003-003 (Monedas)
  • Bloqueante para: RF-MGN-002-003 (Asignación usuarios a empresas)